add context menu to transaction input/outputs
This commit is contained in:
parent
4742b03aea
commit
f38cc47802
|
@ -75,22 +75,6 @@ import re
|
||||||
from qt_util import *
|
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)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -600,7 +584,6 @@ class ElectrumWindow(QMainWindow):
|
||||||
self.connect(l, SIGNAL('itemDoubleClicked(QTreeWidgetItem*, int)'), self.tx_label_clicked)
|
self.connect(l, SIGNAL('itemDoubleClicked(QTreeWidgetItem*, int)'), self.tx_label_clicked)
|
||||||
self.connect(l, SIGNAL('itemChanged(QTreeWidgetItem*, int)'), self.tx_label_changed)
|
self.connect(l, SIGNAL('itemChanged(QTreeWidgetItem*, int)'), self.tx_label_changed)
|
||||||
|
|
||||||
l.setContextMenuPolicy(Qt.CustomContextMenu)
|
|
||||||
l.customContextMenuRequested.connect(self.create_history_menu)
|
l.customContextMenuRequested.connect(self.create_history_menu)
|
||||||
return l
|
return l
|
||||||
|
|
||||||
|
|
|
@ -83,3 +83,22 @@ def text_dialog(parent, title, label, ok_label):
|
||||||
if dialog.exec_():
|
if dialog.exec_():
|
||||||
return unicode(txt.toPlainText())
|
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))
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ from PyQt4.QtCore import *
|
||||||
import PyQt4.QtCore as QtCore
|
import PyQt4.QtCore as QtCore
|
||||||
|
|
||||||
from electrum import transaction
|
from electrum import transaction
|
||||||
|
from qt_util import MyTreeWidget
|
||||||
|
|
||||||
class TxDialog(QDialog):
|
class TxDialog(QDialog):
|
||||||
|
|
||||||
|
@ -162,6 +162,14 @@ class TxDialog(QDialog):
|
||||||
self.amount_label.setText("Transaction unrelated to your wallet")
|
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):
|
def io_widget(self, tx):
|
||||||
tabs = QTabWidget(self)
|
tabs = QTabWidget(self)
|
||||||
|
@ -171,36 +179,38 @@ class TxDialog(QDialog):
|
||||||
grid_ui.setColumnStretch(0,1)
|
grid_ui.setColumnStretch(0,1)
|
||||||
tabs.addTab(tab1, _('Outputs') )
|
tabs.addTab(tab1, _('Outputs') )
|
||||||
|
|
||||||
tree_widget = QTreeWidget(self)
|
self.output_list = l = MyTreeWidget(self)
|
||||||
tree_widget.setColumnCount(2)
|
l.setMaximumHeight(100)
|
||||||
tree_widget.setHeaderLabels( [_('Address'), _('Amount')] )
|
l.setColumnCount(2)
|
||||||
tree_widget.setColumnWidth(0, 300)
|
l.setHeaderLabels( [_('Address'), _('Amount')] )
|
||||||
tree_widget.setColumnWidth(1, 50)
|
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:
|
for address, value in tx.outputs:
|
||||||
item = QTreeWidgetItem( [address, "%s" % ( self.parent.format_amount(value))] )
|
item = QTreeWidgetItem( [address, "%s" % ( self.parent.format_amount(value))] )
|
||||||
tree_widget.addTopLevelItem(item)
|
l.addTopLevelItem(item)
|
||||||
|
|
||||||
tree_widget.setMaximumHeight(100)
|
grid_ui.addWidget(l)
|
||||||
|
|
||||||
grid_ui.addWidget(tree_widget)
|
|
||||||
|
|
||||||
tab2 = QWidget()
|
tab2 = QWidget()
|
||||||
grid_ui = QGridLayout(tab2)
|
grid_ui = QGridLayout(tab2)
|
||||||
grid_ui.setColumnStretch(0,1)
|
grid_ui.setColumnStretch(0,1)
|
||||||
tabs.addTab(tab2, _('Inputs') )
|
tabs.addTab(tab2, _('Inputs') )
|
||||||
|
|
||||||
tree_widget = QTreeWidget(self)
|
self.input_list = l = MyTreeWidget(self)
|
||||||
tree_widget.setColumnCount(2)
|
l.setMaximumHeight(100)
|
||||||
tree_widget.setHeaderLabels( [ _('Address'), _('Previous output')] )
|
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:
|
for input_line in tx.inputs:
|
||||||
item = QTreeWidgetItem( [ str(input_line["address"]), str(input_line.get("prevout_hash"))] )
|
item = QTreeWidgetItem( [ str(input_line["address"]), str(input_line.get("prevout_hash"))] )
|
||||||
tree_widget.addTopLevelItem(item)
|
l.addTopLevelItem(item)
|
||||||
|
|
||||||
tree_widget.setMaximumHeight(100)
|
grid_ui.addWidget(l)
|
||||||
|
|
||||||
grid_ui.addWidget(tree_widget)
|
|
||||||
return tabs
|
return tabs
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue