<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="markdown-here-wrapper" data-md-url="Thunderbird"
      style="" markdown-here-wrapper-content-modified="true">
      <p style="margin: 0px 0px 1.2em !important;">Hi all,</p>
      <p style="margin: 0px 0px 1.2em !important;">I have a simple
        QListView in which I would like to edit items by clicking into
        empty space, typing, then hitting either enter or tab.<br>
        I’d like the tab Key_Tab event to behave exactly like Key_Enter
        event, but it’s a bit stubborn.<br>
        When I hit tab while editing an item (i.e. editor is open), the
        first item in the list is selected.</p>
      <p style="margin: 0px 0px 1.2em !important;">I noticed that when
        hitting the tab key in an open editor only a
        QtCore.QEvent.ShortcutOverride is triggered.<br>
        It looks like I can simply react to that in my situation though
        I’m not sure if that is wise?!<br>
        If I do, how would I manually emit an event that looks like a
        Key_Enter event?</p>
      <p style="margin: 0px 0px 1.2em !important;">Otherwise, how can I
        avoid above behaviour for the tab key and make it behave like a
        regular key (I assume it’s trying to change focus in the focus
        chain but don’t know how to make it stop)?</p>
      <p style="margin: 0px 0px 1.2em !important;">Here is some example
        code to show my problem.</p>
      <p style="margin: 0px 0px 1.2em !important;">Cheers,<br>
        frank<br>
      </p>
      <pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code class="hljs language-python" style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;display: block; overflow-x: auto; padding: 0.5em; background: rgb(63, 63, 63) none repeat scroll 0% 0%; color: rgb(220, 220, 220); -moz-text-size-adjust: none;"><span class="hljs-class"><span class="hljs-keyword" style="color: rgb(227, 206, 171);">class</span> <span class="hljs-title" style="color: rgb(239, 239, 143);">AddresseeDelegate</span><span class="hljs-params">(QtWidgets.QItemDelegate)</span>:</span>
    is_valid = QtCore.Signal()
    is_not_valid = QtCore.Signal(QtCore.QModelIndex)

    <span class="hljs-function"><span class="hljs-keyword" style="color: rgb(227, 206, 171);">def</span> <span class="hljs-title" style="color: rgb(239, 239, 143);">__init__</span><span class="hljs-params">(self, users=[], groups=[], parent=None)</span>:</span>
        super(AddresseeDelegate, self).__init__(parent)
        self.valid_item_texts = [u[<span class="hljs-string" style="color: rgb(204, 147, 147);">'name'</span>] <span class="hljs-keyword" style="color: rgb(227, 206, 171);">for</span> u <span class="hljs-keyword" style="color: rgb(227, 206, 171);">in</span> users] + [g[<span class="hljs-string" style="color: rgb(204, 147, 147);">'code'</span>] <span class="hljs-keyword" style="color: rgb(227, 206, 171);">for</span> g <span class="hljs-keyword" style="color: rgb(227, 206, 171);">in</span> groups]

    <span class="hljs-function"><span class="hljs-keyword" style="color: rgb(227, 206, 171);">def</span> <span class="hljs-title" style="color: rgb(239, 239, 143);">createEditor</span><span class="hljs-params">(self, parent, option, index)</span>:</span>
        self.editor = QtWidgets.QLineEdit(parent)
        self.editor.setMinimumWidth(<span class="hljs-number" style="color: rgb(140, 208, 211);">100</span>)
        completer = QtWidgets.QCompleter(self.valid_item_texts)
        completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
        completer.setCompletionMode(QtWidgets.QCompleter.InlineCompletion)
        self.editor.setCompleter(completer)
        self.editor.editingFinished.connect(<span class="hljs-keyword" style="color: rgb(227, 206, 171);">lambda</span>: self.validate_text(index))
        <span class="hljs-keyword" style="color: rgb(227, 206, 171);">return</span> self.editor

    <span class="hljs-function"><span class="hljs-keyword" style="color: rgb(227, 206, 171);">def</span> <span class="hljs-title" style="color: rgb(239, 239, 143);">setModelData</span><span class="hljs-params">(self, editor, model, index)</span>:</span>
        model.setData(index, editor.text())

    <span class="hljs-function"><span class="hljs-keyword" style="color: rgb(227, 206, 171);">def</span> <span class="hljs-title" style="color: rgb(239, 239, 143);">validate_text</span><span class="hljs-params">(self, index=None)</span>:</span>
        <span class="hljs-keyword" style="color: rgb(227, 206, 171);">if</span> self.editor.text() <span class="hljs-keyword" style="color: rgb(227, 206, 171);">in</span> self.valid_item_texts:
            <span class="hljs-comment" style="color: rgb(127, 159, 127);"># valid input</span>
            self.commitData.emit(self.editor)
            self.closeEditor.emit(self.editor)
            self.is_valid.emit()
        <span class="hljs-keyword" style="color: rgb(227, 206, 171);">else</span>:
            <span class="hljs-comment" style="color: rgb(127, 159, 127);"># invalid input</span>
            self.closeEditor.emit(self.editor)
            self.is_not_valid.emit(index)

<span class="hljs-class"><span class="hljs-keyword" style="color: rgb(227, 206, 171);">class</span> <span class="hljs-title" style="color: rgb(239, 239, 143);">AddresseeListView</span><span class="hljs-params">(QtWidgets.QListView)</span>:</span>
    <span class="hljs-function"><span class="hljs-keyword" style="color: rgb(227, 206, 171);">def</span> <span class="hljs-title" style="color: rgb(239, 239, 143);">__init__</span><span class="hljs-params">(self, users=[], groups=[], parent=None)</span>:</span>
        <span class="hljs-string" style="color: rgb(204, 147, 147);">'''Simple addressee widget.'''</span>
        super(AddresseeListView, self).__init__(parent)
        self.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
        self.setFlow(QtWidgets.QListView.LeftToRight)
        self.setResizeMode(QtWidgets.QListView.ResizeMode.Adjust)
        self.setSpacing(<span class="hljs-number" style="color: rgb(140, 208, 211);">10</span>)
        self.setViewMode(QtWidgets.QListView.IconMode)
        <span class="hljs-comment" style="color: rgb(127, 159, 127);">#self.setWrapping(True)</span>

        <span class="hljs-comment" style="color: rgb(127, 159, 127);"># delegate</span>
        delegate = AddresseeDelegate(users, groups)
        self.setItemDelegate(delegate)
        delegate.is_not_valid.connect(self.delete_invalid_index)

        <span class="hljs-comment" style="color: rgb(127, 159, 127);"># model</span>
        model = QtGui.QStandardItemModel()
        <span class="hljs-comment" style="color: rgb(127, 159, 127);">#model = Model()</span>
        self.setModel(model)

    <span class="hljs-function"><span class="hljs-keyword" style="color: rgb(227, 206, 171);">def</span> <span class="hljs-title" style="color: rgb(239, 239, 143);">event</span><span class="hljs-params">(self, event)</span>:</span>
        <span class="hljs-keyword" style="color: rgb(227, 206, 171);">if</span> event.type() == QtCore.QEvent.ShortcutOverride:
            <span class="hljs-comment" style="color: rgb(127, 159, 127);"># need to emit a  Key_Enter event here</span>
            event.accept()
        <span class="hljs-keyword" style="color: rgb(227, 206, 171);">return</span> super(AddresseeListView, self).event(event)

    <span class="hljs-function"><span class="hljs-keyword" style="color: rgb(227, 206, 171);">def</span> <span class="hljs-title" style="color: rgb(239, 239, 143);">mousePressEvent</span><span class="hljs-params">(self, event)</span>:</span>
        self.add_and_edit()

    <span class="hljs-function"><span class="hljs-keyword" style="color: rgb(227, 206, 171);">def</span> <span class="hljs-title" style="color: rgb(239, 239, 143);">add_and_edit</span><span class="hljs-params">(self)</span>:</span>
        <span class="hljs-string" style="color: rgb(204, 147, 147);">'''Add a new row and open editor'''</span>
        <span class="hljs-keyword" style="color: rgb(227, 206, 171);">print</span> <span class="hljs-string" style="color: rgb(204, 147, 147);">'adding row'</span>
        new_item = QtGui.QStandardItem(<span class="hljs-string" style="color: rgb(204, 147, 147);">''</span>)
        self.model().appendRow(new_item)
        self.edit(self.model().indexFromItem(new_item))

    <span class="hljs-function"><span class="hljs-keyword" style="color: rgb(227, 206, 171);">def</span> <span class="hljs-title" style="color: rgb(239, 239, 143);">delete_invalid_index</span><span class="hljs-params">(self, index)</span>:</span>
        <span class="hljs-string" style="color: rgb(204, 147, 147);">'''Remove invalid entry'''</span>
        self.model().removeRow(index.row())

<span class="hljs-keyword" style="color: rgb(227, 206, 171);">if</span> __name__ == <span class="hljs-string" style="color: rgb(204, 147, 147);">'__main__'</span>:
    app = QtWidgets.QApplication(sys.argv)
    users = [{<span class="hljs-string" style="color: rgb(204, 147, 147);">'name'</span>:<span class="hljs-string" style="color: rgb(204, 147, 147);">'aa'</span>}, {<span class="hljs-string" style="color: rgb(204, 147, 147);">'name'</span>:<span class="hljs-string" style="color: rgb(204, 147, 147);">'bb'</span>}]
    groups = [{<span class="hljs-string" style="color: rgb(204, 147, 147);">'code'</span>:<span class="hljs-string" style="color: rgb(204, 147, 147);">'cc'</span>}, {<span class="hljs-string" style="color: rgb(204, 147, 147);">'code'</span>:<span class="hljs-string" style="color: rgb(204, 147, 147);">'dd'</span>}]
    w = AddresseeListView(users, groups)
    w.show()
    w.raise_()
    app.exec_()
</code></pre>
      <div
title="MDH:SGkgYWxsLDxicj48YnI+SSBoYXZlIGEgc2ltcGxlIFFMaXN0VmlldyBpbiB3aGljaCBJIHdvdWxkIGxpa2UgdG8gZWRpdCBpdGVtcyBieSBjbGlja2luZyBpbnRvIGVtcHR5IHNwYWNlLCB0eXBpbmcs
IHRoZW4gaGl0dGluZyBlaXRoZXIgZW50ZXIgb3IgdGFiLjxicj5JJ2QgbGlrZSB0aGUgdGFiIEtl
eV9UYWIgZXZlbnQgdG8gYmVoYXZlIGV4YWN0bHkgbGlrZSBLZXlfRW50ZXIgZXZlbnQsIGJ1dCBp
dCdzIGEgYml0IHN0dWJib3JuLjxicj5XaGVuIEkgaGl0IHRhYiB3aGlsZSBlZGl0aW5nIGFuIGl0
ZW0gKGkuZS4gZWRpdG9yIGlzIG9wZW4pLCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdCBpcyBz
ZWxlY3RlZC48YnI+PGJyPkkgbm90aWNlZCB0aGF0IHdoZW4gaGl0dGluZyB0aGUgdGFiIGtleSBp
biBhbiBvcGVuIGVkaXRvciBvbmx5IGEgUXRDb3JlLlFFdmVudC5TaG9ydGN1dE92ZXJyaWRlIGlz
IHRyaWdnZXJlZC48YnI+SXQgbG9va3MgbGlrZSBJIGNhbiBzaW1wbHkgcmVhY3QgdG8gdGhhdCBp
biBteSBzaXR1YXRpb24gdGhvdWdoIEknbSBub3Qgc3VyZSBpZiB0aGF0IGlzIHdpc2U/ITxicj5J
ZiBJIGRvLCBob3cgd291bGQgSSBtYW51YWxseSBlbWl0IGFuIGV2ZW50IHRoYXQgbG9va3MgbGlr
ZSBhIEtleV9FbnRlciBldmVudD88YnI+PGJyPk90aGVyd2lzZSwgaG93IGNhbiBJIGF2b2lkIGFi
b3ZlIGJlaGF2aW91ciBmb3IgdGhlIHRhYiBrZXkgYW5kIG1ha2UgaXQgYmVoYXZlIGxpa2UgYSBy
ZWd1bGFyIGtleSAoSSBhc3N1bWUgaXQncyB0cnlpbmcgdG8gY2hhbmdlIGZvY3VzIGluIHRoZSBm
b2N1cyBjaGFpbiBidXQgZG9uJ3Qga25vdyBob3cgdG8gbWFrZSBpdCBzdG9wKS48YnI+PGJyPmBg
YHB5dGhvbjxicj5jbGFzcyBBZGRyZXNzZWVEZWxlZ2F0ZShRdFdpZGdldHMuUUl0ZW1EZWxlZ2F0
ZSk6PGJyPsKgwqDCoCBpc192YWxpZCA9IFF0Q29yZS5TaWduYWwoKTxicj7CoMKgwqAgaXNfbm90
X3ZhbGlkID0gUXRDb3JlLlNpZ25hbChRdENvcmUuUU1vZGVsSW5kZXgpPGJyPjxicj7CoMKgwqAg
ZGVmIF9faW5pdF9fKHNlbGYsIHVzZXJzPVtdLCBncm91cHM9W10sIHBhcmVudD1Ob25lKTo8YnI+
wqDCoMKgwqDCoMKgwqAgc3VwZXIoQWRkcmVzc2VlRGVsZWdhdGUsIHNlbGYpLl9faW5pdF9fKHBh
cmVudCk8YnI+wqDCoMKgwqDCoMKgwqAgc2VsZi52YWxpZF9pdGVtX3RleHRzID0gW3VbJ25hbWUn
XSBmb3IgdSBpbiB1c2Vyc10gKyBbZ1snY29kZSddIGZvciBnIGluIGdyb3Vwc108YnI+PGJyPsKg
wqDCoCBkZWYgY3JlYXRlRWRpdG9yKHNlbGYsIHBhcmVudCwgb3B0aW9uLCBpbmRleCk6PGJyPsKg
wqDCoMKgwqDCoMKgIHNlbGYuZWRpdG9yID0gUXRXaWRnZXRzLlFMaW5lRWRpdChwYXJlbnQpPGJy
PsKgwqDCoMKgwqDCoMKgIHNlbGYuZWRpdG9yLnNldE1pbmltdW1XaWR0aCgxMDApPGJyPsKgwqDC
oMKgwqDCoMKgIGNvbXBsZXRlciA9IFF0V2lkZ2V0cy5RQ29tcGxldGVyKHNlbGYudmFsaWRfaXRl
bV90ZXh0cyk8YnI+wqDCoMKgwqDCoMKgwqAgY29tcGxldGVyLnNldENhc2VTZW5zaXRpdml0eShR
dENvcmUuUXQuQ2FzZUluc2Vuc2l0aXZlKTxicj7CoMKgwqDCoMKgwqDCoCBjb21wbGV0ZXIuc2V0
Q29tcGxldGlvbk1vZGUoUXRXaWRnZXRzLlFDb21wbGV0ZXIuSW5saW5lQ29tcGxldGlvbik8YnI+
wqDCoMKgwqDCoMKgwqAgc2VsZi5lZGl0b3Iuc2V0Q29tcGxldGVyKGNvbXBsZXRlcik8YnI+wqDC
oMKgwqDCoMKgwqAgc2VsZi5lZGl0b3IuZWRpdGluZ0ZpbmlzaGVkLmNvbm5lY3QobGFtYmRhOiBz
ZWxmLnZhbGlkYXRlX3RleHQoaW5kZXgpKTxicj7CoMKgwqDCoMKgwqDCoCByZXR1cm4gc2VsZi5l
ZGl0b3I8YnI+PGJyPsKgwqDCoCBkZWYgc2V0TW9kZWxEYXRhKHNlbGYsIGVkaXRvciwgbW9kZWws
IGluZGV4KTo8YnI+wqDCoMKgwqDCoMKgwqAgbW9kZWwuc2V0RGF0YShpbmRleCwgZWRpdG9yLnRl
eHQoKSk8YnI+PGJyPsKgwqDCoCBkZWYgdmFsaWRhdGVfdGV4dChzZWxmLCBpbmRleD1Ob25lKTo8
YnI+wqDCoMKgwqDCoMKgwqAgaWYgc2VsZi5lZGl0b3IudGV4dCgpIGluIHNlbGYudmFsaWRfaXRl
bV90ZXh0czo8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAjIHZhbGlkIGlucHV0PGJyPsKgwqDC
oMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5jb21taXREYXRhLmVtaXQoc2VsZi5lZGl0b3IpPGJyPsKg
wqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5jbG9zZUVkaXRvci5lbWl0KHNlbGYuZWRpdG9yKTxi
cj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlbGYuaXNfdmFsaWQuZW1pdCgpPGJyPsKgwqDCoMKg
wqDCoMKgIGVsc2U6PGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIyBpbnZhbGlkIGlucHV0PGJy
PsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5jbG9zZUVkaXRvci5lbWl0KHNlbGYuZWRpdG9y
KTxicj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlbGYuaXNfbm90X3ZhbGlkLmVtaXQoaW5kZXgp
PGJyPjxicj5jbGFzcyBBZGRyZXNzZWVMaXN0VmlldyhRdFdpZGdldHMuUUxpc3RWaWV3KTo8YnI+
wqDCoMKgIGRlZiBfX2luaXRfXyhzZWxmLCB1c2Vycz1bXSwgZ3JvdXBzPVtdLCBwYXJlbnQ9Tm9u
ZSk6PGJyPsKgwqDCoMKgwqDCoMKgICcnJ1NpbXBsZSBhZGRyZXNzZWUgd2lkZ2V0LicnJzxicj7C
oMKgwqDCoMKgwqDCoCBzdXBlcihBZGRyZXNzZWVMaXN0Vmlldywgc2VsZikuX19pbml0X18ocGFy
ZW50KTxicj7CoMKgwqDCoMKgwqDCoCBzZWxmLnNldEVkaXRUcmlnZ2VycyhRdFdpZGdldHMuUUFi
c3RyYWN0SXRlbVZpZXcuTm9FZGl0VHJpZ2dlcnMpPGJyPsKgwqDCoMKgwqDCoMKgIHNlbGYuc2V0
RmxvdyhRdFdpZGdldHMuUUxpc3RWaWV3LkxlZnRUb1JpZ2h0KTxicj7CoMKgwqDCoMKgwqDCoCBz
ZWxmLnNldFJlc2l6ZU1vZGUoUXRXaWRnZXRzLlFMaXN0Vmlldy5SZXNpemVNb2RlLkFkanVzdCk8
YnI+wqDCoMKgwqDCoMKgwqAgc2VsZi5zZXRTcGFjaW5nKDEwKTxicj7CoMKgwqDCoMKgwqDCoCBz
ZWxmLnNldFZpZXdNb2RlKFF0V2lkZ2V0cy5RTGlzdFZpZXcuSWNvbk1vZGUpPGJyPsKgwqDCoMKg
wqDCoMKgICNzZWxmLnNldFdyYXBwaW5nKFRydWUpPGJyPjxicj7CoMKgwqDCoMKgwqDCoCAjIGRl
bGVnYXRlPGJyPsKgwqDCoMKgwqDCoMKgIGRlbGVnYXRlID0gQWRkcmVzc2VlRGVsZWdhdGUodXNl
cnMsIGdyb3Vwcyk8YnI+wqDCoMKgwqDCoMKgwqAgc2VsZi5zZXRJdGVtRGVsZWdhdGUoZGVsZWdh
dGUpPGJyPsKgwqDCoMKgwqDCoMKgIGRlbGVnYXRlLmlzX25vdF92YWxpZC5jb25uZWN0KHNlbGYu
ZGVsZXRlX2ludmFsaWRfaW5kZXgpPGJyPjxicj7CoMKgwqDCoMKgwqDCoCAjIG1vZGVsPGJyPsKg
wqDCoMKgwqDCoMKgIG1vZGVsID0gUXRHdWkuUVN0YW5kYXJkSXRlbU1vZGVsKCk8YnI+wqDCoMKg
wqDCoMKgwqAgI21vZGVsID0gTW9kZWwoKTxicj7CoMKgwqDCoMKgwqDCoCBzZWxmLnNldE1vZGVs
KG1vZGVsKTxicj48YnI+wqDCoMKgIGRlZiBldmVudChzZWxmLCBldmVudCk6PGJyPsKgwqDCoMKg
wqDCoMKgIGlmIGV2ZW50LnR5cGUoKSA9PSBRdENvcmUuUUV2ZW50LlNob3J0Y3V0T3ZlcnJpZGU6
PGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIyBuZWVkIHRvIGVtaXQgYcKgIEtleV9FbnRlciBl
dmVudCBoZXJlPGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXZlbnQuYWNjZXB0KCk8YnI+wqDC
oMKgwqDCoMKgwqAgcmV0dXJuIHN1cGVyKEFkZHJlc3NlZUxpc3RWaWV3LCBzZWxmKS5ldmVudChl
dmVudCk8YnI+PGJyPsKgwqDCoCBkZWYgbW91c2VQcmVzc0V2ZW50KHNlbGYsIGV2ZW50KTo8YnI+
wqDCoMKgwqDCoMKgwqAgc2VsZi5hZGRfYW5kX2VkaXQoKTxicj48YnI+wqDCoMKgIGRlZiBhZGRf
YW5kX2VkaXQoc2VsZik6PGJyPsKgwqDCoMKgwqDCoMKgICcnJ0FkZCBhIG5ldyByb3cgYW5kIG9w
ZW4gZWRpdG9yJycnPGJyPsKgwqDCoMKgwqDCoMKgIHByaW50ICdhZGRpbmcgcm93Jzxicj7CoMKg
wqDCoMKgwqDCoCBuZXdfaXRlbSA9IFF0R3VpLlFTdGFuZGFyZEl0ZW0oJycpPGJyPsKgwqDCoMKg
wqDCoMKgIHNlbGYubW9kZWwoKS5hcHBlbmRSb3cobmV3X2l0ZW0pPGJyPsKgwqDCoMKgwqDCoMKg
IHNlbGYuZWRpdChzZWxmLm1vZGVsKCkuaW5kZXhGcm9tSXRlbShuZXdfaXRlbSkpPGJyPjxicj7C
oMKgwqAgZGVmIGRlbGV0ZV9pbnZhbGlkX2luZGV4KHNlbGYsIGluZGV4KTo8YnI+wqDCoMKgwqDC
oMKgwqAgJycnUmVtb3ZlIGludmFsaWQgZW50cnknJyc8YnI+wqDCoMKgwqDCoMKgwqAgc2VsZi5t
b2RlbCgpLnJlbW92ZVJvdyhpbmRleC5yb3coKSk8YnI+PGJyPmlmIF9fbmFtZV9fID09ICdfX21h
aW5fXyc6PGJyPsKgwqDCoCBhcHAgPSBRdFdpZGdldHMuUUFwcGxpY2F0aW9uKHN5cy5hcmd2KTxi
cj7CoMKgwqAgdXNlcnMgPSBbeyduYW1lJzonYWEnfSwgeyduYW1lJzonYmInfV08YnI+wqDCoMKg
IGdyb3VwcyA9IFt7J2NvZGUnOidjYyd9LCB7J2NvZGUnOidkZCd9XTxicj7CoMKgwqAgdyA9IEFk
ZHJlc3NlZUxpc3RWaWV3KHVzZXJzLCBncm91cHMpPGJyPsKgwqDCoCB3LnNob3coKTxicj7CoMKg
wqAgdy5yYWlzZV8oKTxicj7CoMKgwqAgYXBwLmV4ZWNfKCk8YnI+PGJyPmBgYDxicj48YnI+PGJy
        Pjxicj4="
style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0;">​</div>
    </div>
    <div class="moz-signature markdown-here-signature">-- <br>
      <p> </p>
      <!-- A { text-decoration:none } -->
      <table style="width: 524px; height: 58px;" border="0">
        <tbody>
          <tr>
            <td style="text-align: right;"><a
                href="http://www.ohufx.com"><img
                  src="http://ohufx.com/images/ohufxLogo_50x50.png"
                  alt="ohufxLogo 50x50"></a> </td>
            <td style="text-align: center;"> <br>
            </td>
            <td style="text-align: left;"><strong><span
                  style="font-size: 8pt;"><a
                    href="http://ohufx.com/compositing.html">vfx
                    compositing</a></span> | <span style="font-size:
                  8pt;"><strong><a
                      href="http://ohufx.com/customising.html">workflow
                      customisation and consulting</a></strong> </span>
              </strong> </td>
          </tr>
          <tr>
            <td style="text-align: right;"> </td>
            <td style="text-align: center;"> </td>
            <td style="text-align: left;"><strong><span
                  style="font-size: 8pt;"><a
                    href="http://ohufx.com/compositing.html"> </a></span></strong>
              <br>
            </td>
          </tr>
          <tr>
            <td style="text-align: right;"><a
                href="http://www.nukepedia.com/nubridge"><img
                  src="http://nukepedia.com/images/nuBridge/logo/nuBridge_logo.png"
                  alt=""> </a> </td>
            <td style="text-align: center;"> <br>
            </td>
            <td style="text-align: center;">
              <p style="text-align: left;"><a style="color: #999;
                  font-size: 10px; font-family: Arial, Helvetica,
                  sans-serif;" href="http://www.nukepedia.com/nubridge">Your
                  gateway to over 1,000 free tools... right inside of
                  Nuke</a>
                <style><!--A{text-decoration:none}--></style> </p>
            </td>
          </tr>
        </tbody>
      </table>
    </div>
  </body>
</html>