From fbd41353a161cd874595a819b5de826637b81606 Mon Sep 17 00:00:00 2001 From: mailchuck Date: Wed, 25 Nov 2015 00:18:31 +0100 Subject: [PATCH] Account in treeWidget more like a QT class It behaves more like a QT class is supposed to now, it's somewhat cleaner. Fixes #122 --- src/bitmessageqt/__init__.py | 13 +--- src/bitmessageqt/foldertree.py | 105 +++++++++++++++++++-------------- 2 files changed, 61 insertions(+), 57 deletions(-) diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 11d46c66..aefc1990 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -3909,14 +3909,10 @@ class MyForm(settingsmixin.SMainWindow): return newLabel = str(item.text(0)) - newLabel = newLabel.replace("(" + str(item.address) + ")", '') - newLabel = newLabel.rstrip() if item.type == "subscription": oldLabel = item.label else: oldLabel = shared.config.get(str(item.address), 'label') - oldLabel = oldLabel.replace("(" + str(item.address) + ")", '') - oldLabel = oldLabel.rstrip() # unchanged, do not do anything either if newLabel == oldLabel: return @@ -3926,14 +3922,7 @@ class MyForm(settingsmixin.SMainWindow): return self.recurDepth += 1 - if item.type == "subscription": - sqlExecute( - '''UPDATE subscriptions SET label=? WHERE address=?''', - newLabel, item.address) - item.setLabel(newLabel) - else: - shared.config.set(str(item.address), 'label', newLabel) - shared.writeKeysFile() + item.setData(0, QtCore.Qt.EditRole, newLabel) item.updateText() if item.type == 'mailinglist': self.rerenderComboBoxSendFromBroadcast() diff --git a/src/bitmessageqt/foldertree.py b/src/bitmessageqt/foldertree.py index 20291c5d..7243bbde 100644 --- a/src/bitmessageqt/foldertree.py +++ b/src/bitmessageqt/foldertree.py @@ -1,5 +1,6 @@ from PyQt4 import QtCore, QtGui +from helper_sql import * from utils import * import shared from settingsmixin import SettingsMixin @@ -130,6 +131,34 @@ class Ui_AddressWidget(QtGui.QTreeWidgetItem, AccountMixin, SettingsMixin): self.initialised = True self.setType() # does updateText + def data(self, column, role): + if column == 0: + if role == QtCore.Qt.DisplayRole: + if self.unreadCount > 0 and not self.isExpanded(): + return unicode(shared.config.get(self.address, 'label'), 'utf-8)') + ' (' + str(self.unreadCount) + ') (' + self.address + ')' + else: + return unicode(shared.config.get(self.address, 'label'), 'utf-8)') + ' (' + self.address + ')' + elif role == QtCore.Qt.EditRole: + return unicode(shared.config.get(self.address, 'label'), 'utf-8') + elif role == QtCore.Qt.ToolTipRole: + return unicode(shared.config.get(self.address, 'label'), 'utf-8)') + ' (' + self.address + ')' + elif role == QtCore.Qt.DecorationRole: + return avatarize(self.address) + elif role == QtCore.Qt.FontRole: + font = QtGui.QFont() + font.setBold(self.unreadCount > 0) + return font + elif role == QtCore.Qt.ForegroundRole: + return self.accountBrush() + return super(Ui_AddressWidget, self).data(column, role) + + def setData(self, column, role, value): + if role == QtCore.Qt.EditRole: + shared.config.set(str(self.address), 'label', str(value.toString())) + shared.writeKeysFile() + return + return super(Ui_AddressWidget, self).setData(column, role, value) + def setAddress(self, address): super(Ui_AddressWidget, self).setAddress(address) self.setData(0, QtCore.Qt.UserRole, self.address) @@ -137,34 +166,12 @@ class Ui_AddressWidget(QtGui.QTreeWidgetItem, AccountMixin, SettingsMixin): def updateText(self): if not self.initialised: return - text = unicode(shared.config.get(self.address, 'label'), 'utf-8)') + ' (' + self.address + ')' - - font = QtGui.QFont() - if self.unreadCount > 0: - # only show message count if the child doesn't show - if not self.isExpanded(): - text += " (" + str(self.unreadCount) + ")" - font.setBold(True) - else: - font.setBold(False) - self.setFont(0, font) - - #set text color - self.setForeground(0, self.accountBrush()) - - self.setIcon(0, avatarize(self.address)) - self.setText(0, text) - self.setToolTip(0, text) -# self.setData(0, QtCore.Qt.UserRole, [self.address, "inbox"]) + self.emitDataChanged() def setExpanded(self, expand): super(Ui_AddressWidget, self).setExpanded(expand) self.updateText() - def edit(self): - self.setText(0, shared.config.get(self.address, 'label')) - super(QtGui.QAbstractItemView, self).edit() - # label (or address) alphabetically, disabled at the end def __lt__(self, other): if (isinstance(other, Ui_AddressWidget)): @@ -210,32 +217,40 @@ class Ui_SubscriptionWidget(Ui_AddressWidget, AccountMixin): def setType(self): self.type = "subscription" - def edit(self): - self.setText(0, self.label) - super(QtGui.QAbstractItemView, self).edit() + def data(self, column, role): + if column == 0: + if role == QtCore.Qt.DisplayRole: + if self.unreadCount > 0 and not self.isExpanded(): + return unicode(self.label, 'utf-8)') + ' (' + str(self.unreadCount) + ') (' + self.address + ')' + else: + return unicode(self.label, 'utf-8)') + ' (' + self.address + ')' + elif role == QtCore.Qt.EditRole: + return unicode(self.label, 'utf-8') + elif role == QtCore.Qt.ToolTipRole: + return unicode(self.label, 'utf-8)') + ' (' + self.address + ')' + elif role == QtCore.Qt.DecorationRole: + return avatarize(self.address) + elif role == QtCore.Qt.FontRole: + font = QtGui.QFont() + font.setBold(self.unreadCount > 0) + return font + elif role == QtCore.Qt.ForegroundRole: + return self.accountBrush() + return super(Ui_SubscriptionWidget, self).data(column, role) + + def setData(self, column, role, value): + if role == QtCore.Qt.EditRole: + self.setLabel(str(value.toString())) + sqlExecute( + '''UPDATE subscriptions SET label=? WHERE address=?''', + self.label, self.address) + return + return super(Ui_SubscriptionWidget, self).setData(column, role, value) def updateText(self): if not self.initialised: return - text = unicode(self.label, 'utf-8)') + ' (' + self.address + ')' - - font = QtGui.QFont() - if self.unreadCount > 0: - # only show message count if the child doesn't show - if not self.isExpanded(): - text += " (" + str(self.unreadCount) + ")" - font.setBold(True) - else: - font.setBold(False) - self.setFont(0, font) - - #set text color - self.setForeground(0, self.accountBrush()) - - self.setIcon(0, avatarize(self.address)) - self.setText(0, text) - self.setToolTip(0, text) -# self.setData(0, QtCore.Qt.UserRole, [self.address, "inbox"]) + self.emitDataChanged() # label (or address) alphabetically, disabled at the end def __lt__(self, other):