URI: 
       tqt_standardmodel: only use proxymodel when appropriate - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 72957f4d51265f2d0e61d90f92ba42a6e2f92726
   DIR parent 5473320ce459b3076d60f71dab490ed3a07b86a5
  HTML Author: Janus <ysangkok@gmail.com>
       Date:   Mon,  3 Dec 2018 15:33:51 +0100
       
       qt_standardmodel: only use proxymodel when appropriate
       
       Diffstat:
         M electrum/gui/qt/history_list.py     |      10 ++++------
         M electrum/gui/qt/util.py             |      26 +++++++++++++-------------
       
       2 files changed, 17 insertions(+), 19 deletions(-)
       ---
   DIR diff --git a/electrum/gui/qt/history_list.py b/electrum/gui/qt/history_list.py
       t@@ -75,8 +75,7 @@ class HistoryList(MyTreeView, AcceptFileDragDrop):
        
            def should_hide(self, proxy_row):
                if self.start_timestamp and self.end_timestamp:
       -            source_idx = self.proxy.mapToSource(self.proxy.index(proxy_row, 0))
       -            item = self.std_model.itemFromIndex(source_idx)
       +            item = self.item_from_coordinate(proxy_row, 0)
                    txid = item.data(self.TX_HASH_ROLE)
                    date = self.transactions[txid]['date']
                    if date:
       t@@ -418,9 +417,8 @@ class HistoryList(MyTreeView, AcceptFileDragDrop):
                # TODO update unconfirmed tx'es
        
            def on_edited(self, index, user_role, text):
       -        column = index.column()
       -        index = self.proxy.mapToSource(index)
       -        item = self.std_model.itemFromIndex(index)
       +        row, column = index.row(), index.column()
       +        item = self.item_from_coordinate(row, column)
                key = item.data(self.TX_HASH_ROLE)
                # fixme
                if column == 2:
       t@@ -441,7 +439,7 @@ class HistoryList(MyTreeView, AcceptFileDragDrop):
        
            def mouseDoubleClickEvent(self, event: QMouseEvent):
                idx = self.indexAt(event.pos())
       -        item = self.std_model.itemFromIndex(self.proxy.mapToSource(idx))
       +        item = self.item_from_coordinate(idx.row(), idx.column())
                if not item or item.isEditable():
                    super().mouseDoubleClickEvent(event)
                elif item:
   DIR diff --git a/electrum/gui/qt/util.py b/electrum/gui/qt/util.py
       t@@ -468,15 +468,12 @@ class MyTreeView(QTreeView):
                pt.setX(50)
                self.customContextMenuRequested.emit(pt)
        
       -    def createEditor(self, parent, option, index):
       +    def createEditor(self, parent, option, idx):
                self.editor = QStyledItemDelegate.createEditor(self.itemDelegate(),
       -                                                       parent, option, index)
       -        persistent = QPersistentModelIndex(index)
       -        user_role = index.data(Qt.UserRole)
       +                                                       parent, option, idx)
       +        item = self.item_from_coordinate(idx.row(), idx.column())
       +        user_role = item.data(Qt.UserRole)
                assert user_role is not None
       -        idx = QModelIndex(persistent)
       -        index = self.proxy.mapToSource(idx)
       -        item = self.std_model.itemFromIndex(index)
                prior_text = item.text()
                def editing_finished():
                    # Long-time QT bug - pressing Enter to finish editing signals
       t@@ -524,6 +521,14 @@ class MyTreeView(QTreeView):
                """
                pass
        
       +    def item_from_coordinate(self, row_num, column):
       +        if isinstance(self.model(), QSortFilterProxyModel):
       +            idx = self.model().mapToSource(self.model().index(row_num, column))
       +            return self.model().sourceModel().itemFromIndex(idx)
       +        else:
       +            idx = self.model().index(row_num, column)
       +            return self.model().itemFromIndex(idx)
       +
            def hide_row(self, row_num):
                """
                row_num is for self.model(). So if there is a proxy, it is the row number
       t@@ -535,12 +540,7 @@ class MyTreeView(QTreeView):
                    self.setRowHidden(row_num, QModelIndex(), False)
                    return
                for column in self.filter_columns:
       -            if isinstance(self.model(), QSortFilterProxyModel):
       -                idx = self.model().mapToSource(self.model().index(row_num, column))
       -                item = self.model().sourceModel().itemFromIndex(idx)
       -            else:
       -                idx = self.model().index(row_num, column)
       -                item = self.model().itemFromIndex(idx)
       +            item = self.item_from_coordinate(row_num, column)
                    txt = item.text().lower()
                    if self.current_filter in txt:
                        # the filter matched, but the date filter might apply