URI: 
       tadd context menu to transaction input/outputs - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit f38cc4780239085ebe85c9cd027fb25efae25bc0
   DIR parent 4742b03aeaafae455f913d8700041805f721fb87
  HTML Author: thomasv <thomasv@gitorious>
       Date:   Sun, 15 Sep 2013 12:17:51 +0200
       
       add context menu to transaction input/outputs
       
       Diffstat:
         M gui/gui_classic/main_window.py      |      17 -----------------
         M gui/gui_classic/qt_util.py          |      19 +++++++++++++++++++
         M gui/gui_classic/transaction_dialog… |      44 +++++++++++++++++++------------
       
       3 files changed, 46 insertions(+), 34 deletions(-)
       ---
   DIR diff --git a/gui/gui_classic/main_window.py b/gui/gui_classic/main_window.py
       t@@ -75,22 +75,6 @@ import re
        from qt_util import *
        
        
       -class MyTreeWidget(QTreeWidget):
       -    def __init__(self, parent):
       -        QTreeWidget.__init__(self, parent)
       -        def ddfr(item):
       -            if not item: return
       -            for i in range(0,self.viewport().height()/5):
       -                if self.itemAt(QPoint(0,i*5)) == item:
       -                    break
       -            else:
       -                return
       -            for j in range(0,30):
       -                if self.itemAt(QPoint(0,i*5 + j)) != item:
       -                    break
       -            self.emit(SIGNAL('customContextMenuRequested(const QPoint&)'), QPoint(50, i*5 + j - 1))
       -
       -        self.connect(self, SIGNAL('itemActivated(QTreeWidgetItem*, int)'), ddfr)
                
        
        
       t@@ -600,7 +584,6 @@ class ElectrumWindow(QMainWindow):
                self.connect(l, SIGNAL('itemDoubleClicked(QTreeWidgetItem*, int)'), self.tx_label_clicked)
                self.connect(l, SIGNAL('itemChanged(QTreeWidgetItem*, int)'), self.tx_label_changed)
        
       -        l.setContextMenuPolicy(Qt.CustomContextMenu)
                l.customContextMenuRequested.connect(self.create_history_menu)
                return l
        
   DIR diff --git a/gui/gui_classic/qt_util.py b/gui/gui_classic/qt_util.py
       t@@ -83,3 +83,22 @@ def text_dialog(parent, title, label, ok_label):
            if dialog.exec_():
                return unicode(txt.toPlainText())
        
       +
       +class MyTreeWidget(QTreeWidget):
       +    def __init__(self, parent):
       +        QTreeWidget.__init__(self, parent)
       +        self.setContextMenuPolicy(Qt.CustomContextMenu)
       +        self.connect(self, SIGNAL('itemActivated(QTreeWidgetItem*, int)'), self.itemactivated)
       +
       +    def itemactivated(self, item):
       +        if not item: return
       +        for i in range(0,self.viewport().height()/5):
       +            if self.itemAt(QPoint(0,i*5)) == item:
       +                break
       +        else:
       +            return
       +        for j in range(0,30):
       +            if self.itemAt(QPoint(0,i*5 + j)) != item:
       +                break
       +        self.emit(SIGNAL('customContextMenuRequested(const QPoint&)'), QPoint(50, i*5 + j - 1))
       +
   DIR diff --git a/gui/gui_classic/transaction_dialog.py b/gui/gui_classic/transaction_dialog.py
       t@@ -34,7 +34,7 @@ from PyQt4.QtCore import *
        import PyQt4.QtCore as QtCore
        
        from electrum import transaction
       -
       +from qt_util import MyTreeWidget
        
        class TxDialog(QDialog):
        
       t@@ -162,6 +162,14 @@ class TxDialog(QDialog):
                    self.amount_label.setText("Transaction unrelated to your wallet")
        
        
       +    def exec_menu(self, position,l):
       +        item = l.itemAt(position)
       +        if not item: return
       +        addr = unicode(item.text(0))
       +        menu = QMenu()
       +        menu.addAction(_("Copy to clipboard"), lambda: self.parent.app.clipboard().setText(addr))
       +        menu.exec_(l.viewport().mapToGlobal(position))
       +
        
            def io_widget(self, tx):
                tabs = QTabWidget(self)
       t@@ -171,36 +179,38 @@ class TxDialog(QDialog):
                grid_ui.setColumnStretch(0,1)
                tabs.addTab(tab1, _('Outputs') )
        
       -        tree_widget = QTreeWidget(self)
       -        tree_widget.setColumnCount(2)
       -        tree_widget.setHeaderLabels( [_('Address'), _('Amount')] )
       -        tree_widget.setColumnWidth(0, 300)
       -        tree_widget.setColumnWidth(1, 50)
       +        self.output_list = l = MyTreeWidget(self)
       +        l.setMaximumHeight(100)
       +        l.setColumnCount(2)
       +        l.setHeaderLabels( [_('Address'), _('Amount')] )
       +        l.setColumnWidth(0, 350)
       +        l.setColumnWidth(1, 50)
       +        l.customContextMenuRequested.connect(lambda pos: self.exec_menu(pos, self.output_list))
        
                for address, value in tx.outputs:
                    item = QTreeWidgetItem( [address, "%s" % ( self.parent.format_amount(value))] )
       -            tree_widget.addTopLevelItem(item)
       +            l.addTopLevelItem(item)
        
       -        tree_widget.setMaximumHeight(100)
       -
       -        grid_ui.addWidget(tree_widget)
       +        grid_ui.addWidget(l)
        
                tab2 = QWidget()
                grid_ui = QGridLayout(tab2)
                grid_ui.setColumnStretch(0,1)
                tabs.addTab(tab2, _('Inputs') )
                
       -        tree_widget = QTreeWidget(self)
       -        tree_widget.setColumnCount(2)
       -        tree_widget.setHeaderLabels( [ _('Address'), _('Previous output')] )
       +        self.input_list = l = MyTreeWidget(self)
       +        l.setMaximumHeight(100)
       +        l.setColumnCount(2)
       +        l.setColumnWidth(0, 350)
       +        l.setColumnWidth(1, 50)
       +        l.setHeaderLabels( [ _('Address'), _('Previous output')] )
       +        l.customContextMenuRequested.connect(lambda pos: self.exec_menu(pos, self.input_list))
        
                for input_line in tx.inputs:
                    item = QTreeWidgetItem( [ str(input_line["address"]), str(input_line.get("prevout_hash"))] )
       -            tree_widget.addTopLevelItem(item)
       -
       -        tree_widget.setMaximumHeight(100)
       +            l.addTopLevelItem(item)
        
       -        grid_ui.addWidget(tree_widget)
       +        grid_ui.addWidget(l)
                return tabs