Cleaner column editing in MyTreeWidget
Also enables arbitrary columns to be edited, but nothing uses that yet.
This commit is contained in:
parent
f32cb71ed5
commit
851db130ea
|
@ -62,7 +62,7 @@ class HistoryWidget(MyTreeWidget):
|
|||
v_str = self.parent.format_amount(value, True, whitespaces=True)
|
||||
balance_str = self.parent.format_amount(balance, whitespaces=True)
|
||||
label, is_default_label = self.wallet.get_label(tx_hash)
|
||||
item = QTreeWidgetItem(['', tx_hash, time_str, label, v_str, balance_str])
|
||||
item = EditableItem(['', tx_hash, time_str, label, v_str, balance_str])
|
||||
item.setIcon(0, icon)
|
||||
item.setFont(3, QFont(MONOSPACE_FONT))
|
||||
item.setFont(4, QFont(MONOSPACE_FONT))
|
||||
|
@ -103,4 +103,3 @@ class HistoryWidget(MyTreeWidget):
|
|||
menu.addAction(_("Edit description"), lambda: self.edit_label(item))
|
||||
menu.addAction(_("View on block explorer"), lambda: webbrowser.open(tx_URL))
|
||||
menu.exec_(self.viewport().mapToGlobal(position))
|
||||
|
||||
|
|
|
@ -951,7 +951,7 @@ class ElectrumWindow(QMainWindow):
|
|||
requestor = req.get('name', '')
|
||||
amount_str = self.format_amount(amount) if amount else ""
|
||||
account = ''
|
||||
item = QTreeWidgetItem([date, account, address, '', message, amount_str, pr_tooltips.get(status,'')])
|
||||
item = EditableItem([date, account, address, '', message, amount_str, pr_tooltips.get(status,'')])
|
||||
if signature is not None:
|
||||
item.setIcon(3, QIcon(":icons/seal.png"))
|
||||
item.setToolTip(3, 'signed by '+ requestor)
|
||||
|
@ -1521,7 +1521,7 @@ class ElectrumWindow(QMainWindow):
|
|||
requestor = pr.get_requestor()
|
||||
exp = pr.get_expiration_date()
|
||||
date_str = util.format_time(exp) if exp else _('Never')
|
||||
item = QTreeWidgetItem( [ date_str, requestor, pr.memo, self.format_amount(pr.get_amount(), whitespaces=True), pr_tooltips.get(status,'')] )
|
||||
item = EditableItem([date_str, requestor, pr.memo, self.format_amount(pr.get_amount(), whitespaces=True), pr_tooltips.get(status,'')])
|
||||
item.setIcon(4, QIcon(pr_icons.get(status)))
|
||||
item.setData(0, Qt.UserRole, key)
|
||||
item.setFont(1, QFont(MONOSPACE_FONT))
|
||||
|
@ -1772,7 +1772,7 @@ class ElectrumWindow(QMainWindow):
|
|||
label = self.wallet.labels.get(address,'')
|
||||
c, u, x = self.wallet.get_addr_balance(address)
|
||||
balance = self.format_amount(c + u + x)
|
||||
item = QTreeWidgetItem( [ address, label, balance, "%d"%num] )
|
||||
item = EditableItem( [ address, label, balance, "%d"%num] )
|
||||
item.setFont(0, QFont(MONOSPACE_FONT))
|
||||
item.setData(0, Qt.UserRole, address)
|
||||
item.setData(0, Qt.UserRole+1, True) # label can be edited
|
||||
|
@ -1798,7 +1798,7 @@ class ElectrumWindow(QMainWindow):
|
|||
l.clear()
|
||||
for key in sorted(self.contacts.keys()):
|
||||
_type, value = self.contacts[key]
|
||||
item = QTreeWidgetItem([key, value, _type])
|
||||
item = EditableItem([key, value, _type])
|
||||
item.setData(0, Qt.UserRole, key)
|
||||
l.addTopLevelItem(item)
|
||||
if key == current_key:
|
||||
|
|
|
@ -283,11 +283,25 @@ def filename_field(parent, config, defaultname, select_msg):
|
|||
|
||||
return vbox, filename_e, b1
|
||||
|
||||
class EditableItem(QTreeWidgetItem):
|
||||
def __init__(self, columns):
|
||||
QTreeWidgetItem.__init__(self, columns)
|
||||
self.setFlags(self.flags() | Qt.ItemIsEditable)
|
||||
|
||||
class EditableItemDelegate(QStyledItemDelegate):
|
||||
def __init__(self, parent, editable_columns):
|
||||
QStyledItemDelegate.__init__(self, parent)
|
||||
self.editable_columns = editable_columns
|
||||
|
||||
def createEditor(self, parent, option, index):
|
||||
if index.column() not in self.editable_columns:
|
||||
return None
|
||||
return QStyledItemDelegate.createEditor(self, parent, option, index)
|
||||
|
||||
class MyTreeWidget(QTreeWidget):
|
||||
|
||||
def __init__(self, parent, create_menu, headers, stretch_column=None):
|
||||
def __init__(self, parent, create_menu, headers, stretch_column=None,
|
||||
editable_columns=None):
|
||||
QTreeWidget.__init__(self, parent)
|
||||
self.parent = parent
|
||||
self.setColumnCount(len(headers))
|
||||
|
@ -299,11 +313,15 @@ class MyTreeWidget(QTreeWidget):
|
|||
# extend the syntax for consistency
|
||||
self.addChild = self.addTopLevelItem
|
||||
self.insertChild = self.insertTopLevelItem
|
||||
# editable column
|
||||
self.is_edit = False
|
||||
self.edit_column = stretch_column
|
||||
self.itemDoubleClicked.connect(self.edit_label)
|
||||
self.itemChanged.connect(self.label_changed)
|
||||
|
||||
# Control which columns are editable
|
||||
if editable_columns is None:
|
||||
editable_columns = [stretch_column]
|
||||
self.setEditTriggers(QAbstractItemView.DoubleClicked |
|
||||
QAbstractItemView.EditKeyPressed)
|
||||
self.setItemDelegate(EditableItemDelegate(self, editable_columns))
|
||||
self.itemChanged.connect(self.item_edited)
|
||||
|
||||
# stretch
|
||||
for i in range(len(headers)):
|
||||
self.header().setResizeMode(i, QHeaderView.Stretch if i == stretch_column else QHeaderView.ResizeToContents)
|
||||
|
@ -322,33 +340,17 @@ class MyTreeWidget(QTreeWidget):
|
|||
break
|
||||
self.emit(SIGNAL('customContextMenuRequested(const QPoint&)'), QPoint(50, i*5 + j - 1))
|
||||
|
||||
def edit_label(self, item, column=None):
|
||||
if column is None:
|
||||
column = self.edit_column
|
||||
if column==self.edit_column and item.isSelected():
|
||||
self.is_edit = True
|
||||
item.setFlags(item.flags() | Qt.ItemIsEditable)
|
||||
self.editItem(item, column)
|
||||
item.setFlags(item.flags() & ~Qt.ItemIsEditable)
|
||||
self.is_edit = False
|
||||
|
||||
def label_changed(self, item, column):
|
||||
if column != self.edit_column:
|
||||
return
|
||||
if self.is_edit:
|
||||
return
|
||||
self.is_edit = True
|
||||
def item_edited(self, item, column, prior):
|
||||
'''Called only when the text actually changes'''
|
||||
key = str(item.data(0, Qt.UserRole).toString())
|
||||
text = unicode(item.text(self.edit_column))
|
||||
changed = self.parent.wallet.set_label(key, text)
|
||||
text = unicode(item.text(column))
|
||||
self.parent.wallet.set_label(key, text)
|
||||
if text:
|
||||
item.setForeground(self.edit_column, QBrush(QColor('black')))
|
||||
item.setForeground(column, QBrush(QColor('black')))
|
||||
else:
|
||||
text = self.parent.wallet.get_default_label(key)
|
||||
item.setText(self.edit_column, text)
|
||||
item.setForeground(self.edit_column, QBrush(QColor('gray')))
|
||||
self.is_edit = False
|
||||
if changed:
|
||||
item.setText(column, text)
|
||||
item.setForeground(column, QBrush(QColor('gray')))
|
||||
self.parent.update_history_tab()
|
||||
self.parent.update_completions()
|
||||
|
||||
|
|
Loading…
Reference in New Issue