diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index d35066d7..77ac26d6 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -155,23 +155,22 @@ class MainWindow(Window): j += 1 widget.setUnreadCount(unread) i += 1 - - treeWidget.setSortingEnabled(True) + treeWidget.setSortingEnabled(True) def rerenderTabTreeMessages(self): self.rerenderTabTree('messages') def rerenderTabTreeChans(self): self.rerenderTabTree('chan') - + def rerenderTabTree(self, tab): - if tab == 'messages': - treeWidget = self.treeWidgetYourIdentities - elif tab == 'chan': - treeWidget = self.treeWidgetChans + if tab != 'chan': + return + + treeWidget = self.treeWidgetChans folders = Ui_FolderWidget.folderWeight.keys() - + # sort ascending when creating if treeWidget.topLevelItemCount() == 0: treeWidget.header().setSortIndicator( @@ -179,7 +178,7 @@ class MainWindow(Window): # init dictionary db = {} enabled = {} - + for toAddress in getSortedAccounts(): isEnabled = BMConfigParser().getboolean( toAddress, 'enabled') @@ -188,17 +187,14 @@ class MainWindow(Window): isMaillinglist = BMConfigParser().safeGetBoolean( toAddress, 'mailinglist') - if treeWidget == self.treeWidgetYourIdentities: - if isChan: - continue - elif treeWidget == self.treeWidgetChans: + if treeWidget == self.treeWidgetChans: if not isChan: continue db[toAddress] = {} for folder in folders: db[toAddress][folder] = 0 - + enabled[toAddress] = isEnabled # get number of (unread) messages @@ -209,17 +205,17 @@ class MainWindow(Window): total += cnt if toaddress in db and folder in db[toaddress]: db[toaddress][folder] = cnt - if treeWidget == self.treeWidgetYourIdentities: - db[None] = {} - db[None]["inbox"] = total - db[None]["new"] = total - db[None]["sent"] = 0 - db[None]["trash"] = 0 - enabled[None] = True - + # if treeWidget == self.treeWidgetYourIdentities: + # db[None] = {} + # db[None]["inbox"] = total + # db[None]["new"] = total + # db[None]["sent"] = 0 + # db[None]["trash"] = 0 + # enabled[None] = True + if treeWidget.isSortingEnabled(): treeWidget.setSortingEnabled(False) - + widgets = {} i = 0 while i < treeWidget.topLevelItemCount(): @@ -367,17 +363,17 @@ class MainWindow(Window): self.UISignalThread.start() # Key press in tree view - self.treeWidgetYourIdentities.keyPressEvent = self.treeWidgetKeyPressEvent + # self.treeWidgetYourIdentities.keyPressEvent = self.treeWidgetKeyPressEvent self.treeWidgetSubscriptions.keyPressEvent = self.treeWidgetKeyPressEvent self.treeWidgetChans.keyPressEvent = self.treeWidgetKeyPressEvent # Key press in messagelist - self.messagelistInbox.keyPressEvent = self.tableWidgetKeyPressEvent + # self.messagelistInbox.keyPressEvent = self.tableWidgetKeyPressEvent self.tableWidgetInboxSubscriptions.keyPressEvent = self.tableWidgetKeyPressEvent self.tableWidgetInboxChans.keyPressEvent = self.tableWidgetKeyPressEvent # Key press in messageview - self.textEditInboxMessage.keyPressEvent = self.textEditKeyPressEvent + # self.textEditInboxMessage.keyPressEvent = self.textEditKeyPressEvent self.textEditInboxMessageSubscriptions.keyPressEvent = self.textEditKeyPressEvent self.textEditInboxMessageChans.keyPressEvent = self.textEditKeyPressEvent @@ -544,7 +540,7 @@ class MainWindow(Window): widget.item(row, col).setUnread(not status) def propagateUnreadCount(self, address = None, folder = "inbox", widget = None, type = 1): - widgets = [self.treeWidgetYourIdentities, self.treeWidgetSubscriptions, self.treeWidgetChans] + widgets = [self.treeWidgetSubscriptions, self.treeWidgetChans] queryReturn = sqlQuery("SELECT toaddress, folder, COUNT(msgid) AS cnt FROM inbox WHERE read = 0 GROUP BY toaddress, folder") totalUnread = {} normalUnread = {} @@ -1076,9 +1072,9 @@ class MainWindow(Window): self.rerenderTabTreeMessages() self.rerenderTabTreeSubscriptions() self.rerenderTabTreeChans() - if self.getCurrentFolder(self.treeWidgetYourIdentities) == "trash": - self.loadMessagelist(self.tableWidgetInbox, self.getCurrentAccount(self.treeWidgetYourIdentities), "trash") - elif self.getCurrentFolder(self.treeWidgetSubscriptions) == "trash": + # if self.getCurrentFolder(self.treeWidgetYourIdentities) == "trash": + # self.loadMessagelist(self.tableWidgetInbox, self.getCurrentAccount(self.treeWidgetYourIdentities), "trash") + if self.getCurrentFolder(self.treeWidgetSubscriptions) == "trash": self.loadMessagelist(self.tableWidgetInboxSubscriptions, self.getCurrentAccount(self.treeWidgetSubscriptions), "trash") elif self.getCurrentFolder(self.treeWidgetChans) == "trash": self.loadMessagelist(self.tableWidgetInboxChans, self.getCurrentAccount(self.treeWidgetChans), "trash") @@ -1829,12 +1825,12 @@ class MainWindow(Window): treeWidget = self.widgetConvert(sent) if self.getCurrentFolder(treeWidget) != "sent": continue - if ( - treeWidget == self.treeWidgetYourIdentities and - self.getCurrentAccount(treeWidget) - not in (fromAddress, None, False) - ): - continue + # if ( + # treeWidget == self.treeWidgetYourIdentities and + # self.getCurrentAccount(treeWidget) + # not in (fromAddress, None, False) + # ): + # continue elif treeWidget in [self.treeWidgetSubscriptions, self.treeWidgetChans] and self.getCurrentAccount(treeWidget) != toAddress: continue elif not helper_search.check_match(toAddress, fromAddress, subject, message, self.getCurrentSearchOption(tab), self.getCurrentSearchLine(tab)): @@ -1852,7 +1848,7 @@ class MainWindow(Window): inbox = self.getAccountMessagelist(acct) ret = None tab = -1 - for treeWidget in [self.treeWidgetYourIdentities, self.treeWidgetSubscriptions, self.treeWidgetChans]: + for treeWidget in [self.treeWidgetSubscriptions, self.treeWidgetChans]: tab += 1 if tab == 1: tab = 2 @@ -1861,12 +1857,12 @@ class MainWindow(Window): continue if tableWidget == inbox and self.getCurrentAccount(treeWidget) == acct.address and self.getCurrentFolder(treeWidget) in ["inbox", None]: ret = self.addMessageListItemInbox(inbox, "inbox", inventoryHash, toAddress, fromAddress, subject, time.time(), 0) - elif ( - treeWidget == self.treeWidgetYourIdentities and - self.getCurrentAccount(treeWidget) is None and - self.getCurrentFolder(treeWidget) in ("inbox", "new", None) - ): - ret = self.addMessageListItemInbox(tableWidget, "inbox", inventoryHash, toAddress, fromAddress, subject, time.time(), 0) + # elif ( + # treeWidget == self.treeWidgetYourIdentities and + # self.getCurrentAccount(treeWidget) is None and + # self.getCurrentFolder(treeWidget) in ("inbox", "new", None) + # ): + # ret = self.addMessageListItemInbox(tableWidget, "inbox", inventoryHash, toAddress, fromAddress, subject, time.time(), 0) if ret is None: acct.parseMessage(toAddress, fromAddress, subject, "") else: @@ -2855,14 +2851,10 @@ class MainWindow(Window): self.treeWidgetSubscriptions.mapToGlobal(point)) def widgetConvert(self, widget): - # if widget == self.tableWidgetInbox: - # return self.treeWidgetYourIdentities if widget == self.tableWidgetInboxSubscriptions: return self.treeWidgetSubscriptions elif widget == self.tableWidgetInboxChans: return self.treeWidgetChans - elif widget == self.treeWidgetYourIdentities: - return self.messagelistInbox elif widget == self.treeWidgetSubscriptions: return self.tableWidgetInboxSubscriptions elif widget == self.treeWidgetChans: @@ -2871,26 +2863,17 @@ class MainWindow(Window): def getCurrentTreeWidget(self): currentIndex = self.tabWidget.currentIndex() treeWidgetList = [ - self.treeWidgetYourIdentities, - False, self.treeWidgetSubscriptions, self.treeWidgetChans ] - if currentIndex >= 0 and currentIndex < len(treeWidgetList): + if currentIndex >= 2 and currentIndex - 2 < len(treeWidgetList): return treeWidgetList[currentIndex] - else: - return False def getAccountTreeWidget(self, account): - try: - if account.type == AccountMixin.CHAN: - return self.treeWidgetChans - elif account.type == AccountMixin.SUBSCRIPTION: - return self.treeWidgetSubscriptions - else: - return self.treeWidgetYourIdentities - except: - return self.treeWidgetYourIdentities + if account.type == AccountMixin.CHAN: + return self.treeWidgetChans + elif account.type == AccountMixin.SUBSCRIPTION: + return self.treeWidgetSubscriptions def getCurrentMessagelist(self): currentIndex = self.tabWidget.currentIndex() @@ -2900,8 +2883,6 @@ class MainWindow(Window): ) if currentIndex >= 2 and currentIndex - 2 < len(messagelistList): return messagelistList[currentIndex - 2] - else: - return False def getAccountMessagelist(self, account): try: @@ -2928,15 +2909,11 @@ class MainWindow(Window): def getCurrentMessageTextedit(self): currentIndex = self.tabWidget.currentIndex() messagelistList = [ - self.textEditInboxMessage, - False, self.textEditInboxMessageSubscriptions, self.textEditInboxMessageChans, ] - if currentIndex >= 0 and currentIndex < len(messagelistList): + if currentIndex >= 2 and currentIndex - 2 < len(messagelistList): return messagelistList[currentIndex] - else: - return False def getAccountTextedit(self, account): try: @@ -2953,32 +2930,24 @@ class MainWindow(Window): if currentIndex is None: currentIndex = self.tabWidget.currentIndex() messagelistList = [ - self.inboxSearchLineEdit, - False, self.inboxSearchLineEditSubscriptions, self.inboxSearchLineEditChans, ] - if currentIndex >= 0 and currentIndex < len(messagelistList): + if currentIndex >= 2 and currentIndex - 2 < len(messagelistList): if retObj: return messagelistList[currentIndex] else: return messagelistList[currentIndex].text().toUtf8().data() - else: - return None def getCurrentSearchOption(self, currentIndex=None): if currentIndex is None: currentIndex = self.tabWidget.currentIndex() messagelistList = [ - self.inboxSearchOption, - False, self.inboxSearchOptionSubscriptions, self.inboxSearchOptionChans, ] - if currentIndex >= 0 and currentIndex < len(messagelistList): + if currentIndex >= 2 and currentIndex - 2 < len(messagelistList): return messagelistList[currentIndex].currentText().toUtf8().data() - else: - return None # Group of functions for the Your Identities dialog box def getCurrentItem(self, treeWidget=None): @@ -2989,7 +2958,7 @@ class MainWindow(Window): if currentItem: return currentItem return False - + def getCurrentAccount(self, treeWidget=None): currentItem = self.getCurrentItem(treeWidget) if currentItem: @@ -3473,11 +3442,11 @@ class MainWindow(Window): messageTextedit.setTextColor(QtGui.QColor()) messageTextedit.setContent(message) - def messagelistSelect(self, msg): - messageTextedit = self.getCurrentMessageTextedit() - if not messageTextedit: - return - messageTextedit.setContent(msg) + # def messagelistSelect(self, msg): + # messageTextedit = self.getCurrentMessageTextedit() + # if not messageTextedit: + # return + # messageTextedit.setContent(msg) def tableWidgetAddressBookItemChanged(self, item): if item.type == AccountMixin.CHAN: diff --git a/src/bitmessageqt/main.py b/src/bitmessageqt/main.py index d3c7037a..6a242bfb 100644 --- a/src/bitmessageqt/main.py +++ b/src/bitmessageqt/main.py @@ -52,7 +52,7 @@ class Window(settingsmixin.SMainWindow): # splitters for splitter in ( - self.inboxHorizontalSplitter, + # self.inboxHorizontalSplitter, self.sendHorizontalSplitter, self.subscriptionsHorizontalSplitter, self.chansHorizontalSplitter @@ -63,7 +63,7 @@ class Window(settingsmixin.SMainWindow): splitter.setCollapsible(1, False) for splitter in ( - self.inboxMessagecontrolSplitter, + # self.inboxMessagecontrolSplitter, self.subscriptionsMessagecontrolSplitter, self.chansMessagecontrolSplitter ): diff --git a/src/bitmessageqt/main.ui b/src/bitmessageqt/main.ui index 62657030..f366a33d 100644 --- a/src/bitmessageqt/main.ui +++ b/src/bitmessageqt/main.ui @@ -68,7 +68,7 @@ 0 - + :/newPrefix/images/inbox.png:/newPrefix/images/inbox.png @@ -76,178 +76,6 @@ Messages - - - 8 - - - 8 - - - 8 - - - 8 - - - - - Qt::Horizontal - - - - - - - - 200 - 0 - - - - Qt::CustomContextMenu - - - - Identities - - - - :/newPrefix/images/identities.png - - - - - - - - - - 200 - 16777215 - - - - New Indentitiy - - - - - - - - Qt::Vertical - - - - - - - Search - - - - - - - - All - - - - - To - - - - - From - - - - - Subject - - - - - Message - - - - - - - - - Qt::CustomContextMenu - - - QAbstractItemView::NoEditTriggers - - - true - - - QAbstractItemView::ExtendedSelection - - - QAbstractItemView::SelectRows - - - true - - - false - - - true - - - 200 - - - false - - - 27 - - - false - - - true - - - false - - - 26 - - - - - - 0 - 500 - - - - true - - - - Welcome to easy and secure Bitmessage - * send messages to other people - * send broadcast messages like twitter or - * discuss in chan(nel)s with other people - - - - - - - @@ -1585,8 +1413,8 @@ p, li { white-space: pre-wrap; }
bitmessageqt.settingsmixin
- InboxMessagelist - QTableView + MessagelistControl + QWidget
bitmessageqt.messagelist
@@ -1602,8 +1430,6 @@ p, li { white-space: pre-wrap; } - messagelistInbox - textEditInboxMessage comboBoxSendFrom lineEditTo lineEditSubject @@ -1759,22 +1585,6 @@ p, li { white-space: pre-wrap; } - - pushButtonNewAddress - clicked() - MainWindow - click_NewAddressDialog - - - 20 - 20 - - - 20 - 20 - - - pushButtonAddAddressBook clicked() @@ -1903,22 +1713,6 @@ p, li { white-space: pre-wrap; } - - messagelistInbox - customContextMenuRequested(QPoint) - MainWindow - on_context_menuInbox() - - - 656 - 366 - - - 442 - 289 - - - tableWidgetInboxSubscriptions customContextMenuRequested(QPoint) @@ -1951,22 +1745,6 @@ p, li { white-space: pre-wrap; } - - treeWidgetYourIdentities - customContextMenuRequested(QPoint) - MainWindow - on_context_menuYourIdentities() - - - 20 - 20 - - - 20 - 20 - - - tableWidgetAddressBook customContextMenuRequested(QPoint) @@ -2655,22 +2433,6 @@ p, li { white-space: pre-wrap; } - - inboxSearchLineEdit - returnPressed() - MainWindow - inboxSearchLineEditReturnPressed - - - 20 - 20 - - - 20 - 20 - - - inboxSearchLineEditSubscriptions returnPressed() @@ -2703,22 +2465,6 @@ p, li { white-space: pre-wrap; } - - inboxSearchLineEdit - textChanged(QString) - MainWindow - inboxSearchLineEditUpdated - - - 20 - 20 - - - 20 - 20 - - - inboxSearchLineEditSubscriptions textChanged(QString) @@ -2767,22 +2513,6 @@ p, li { white-space: pre-wrap; } - - messagelistInbox - messageSelected(QString) - MainWindow - messagelistSelect - - - 20 - 20 - - - 20 - 20 - - - tableWidgetInboxSubscriptions itemSelectionChanged() @@ -2815,22 +2545,6 @@ p, li { white-space: pre-wrap; } - - treeWidgetYourIdentities - itemSelectionChanged() - MainWindow - treeWidgetItemClicked - - - 20 - 20 - - - 20 - 20 - - - treeWidgetSubscriptions itemSelectionChanged() @@ -2863,22 +2577,6 @@ p, li { white-space: pre-wrap; } - - treeWidgetYourIdentities - itemChanged(QTreeWidgetItem*,int) - MainWindow - treeWidgetItemChanged - - - 20 - 20 - - - 20 - 20 - - - treeWidgetSubscriptions itemChanged(QTreeWidgetItem*,int) diff --git a/src/bitmessageqt/messagelist.py b/src/bitmessageqt/messagelist.py index 77e8720d..c912c88c 100644 --- a/src/bitmessageqt/messagelist.py +++ b/src/bitmessageqt/messagelist.py @@ -2,7 +2,10 @@ from collections import OrderedDict from PyQt4 import QtCore, QtGui +import account +import foldertree import l10n +import widgets from bmconfigparser import BMConfigParser from debug import logger from helper_sql import sqlQuery, sqlExecute @@ -93,7 +96,8 @@ class InboxTableModel(QtCore.QAbstractTableModel): def __init__(self, parent=None): super(InboxTableModel, self).__init__() - self.filter = InboxFilter(fields=self.fields) + # folder='*' gives empty set + self.filter = InboxFilter(folder='*', fields=self.fields) self.fields = ','.join(self.fields) self.query = 'SELECT %%s FROM %s ' % self.table self.sort = ' ORDER BY received DESC' @@ -159,8 +163,10 @@ class InboxTableModel(QtCore.QAbstractTableModel): )[0][0] def updateFilter(self, *args, **kwargs): + prev = self.filter.__str__() self.filter.update(*args, **kwargs) - self.emit(QtCore.SIGNAL("layoutChanged()")) + if prev != self.filter.__str__(): + self.emit(QtCore.SIGNAL("layoutChanged()")) class InboxMessagelist(QtGui.QTableView): @@ -170,8 +176,80 @@ class InboxMessagelist(QtGui.QTableView): def currentChanged(self, cur_id, prev_id): row = cur_id.row() - if row == prev_id.row(): + if row and row == prev_id.row(): return + # what if folder changed? self.model().setRead(row) msg = self.model().getMessage(row) self.emit(QtCore.SIGNAL("messageSelected(QString)"), msg) + + def folderChanged(self, cur_folder, prev_folder): + if cur_folder == prev_folder: + return + try: + folder = cur_folder.folderName + except AttributeError: + folder = 'inbox' + update = {'folder': folder} + if cur_folder.address: + update['toaddress'] = cur_folder.address + self.model().updateFilter(update) + self.selectRow(0) + + +class TreeWidgetIdentities(QtGui.QTreeWidget): + def __init__(self, parent): + super(TreeWidgetIdentities, self).__init__(parent) + folders = ('inbox', 'new', 'sent', 'trash') + accounts = account.getSortedAccounts() + account.getSortedSubscriptions().keys() + top = foldertree.Ui_AddressWidget(self, 0, None, 0, True) + for i, folder in enumerate(folders): + foldertree.Ui_FolderWidget(top, i, None, folder, 0) + for i, addr in enumerate(accounts): + top = foldertree.Ui_AddressWidget( + self, i, addr, 0, + BMConfigParser().safeGetBoolean(addr, 'enabled')) + for j, folder in enumerate(folders): + foldertree.Ui_FolderWidget(top, j, addr, folder, 0) + self.header().setSortIndicator(0, QtCore.Qt.AscendingOrder) + + def filterAccountType(self, account_type): + header = self.headerItem() + if account_type == foldertree.AccountMixin.CHAN: + header.setText(0, _translate("MainWindow", "Chans")) + header.setIcon(0, QtGui.QIcon(":/newPrefix/images/can-icon-16px.png")) + elif account_type == foldertree.AccountMixin.SUBSCRIPTION: + header.setText(0, _translate("MainWindow", "Subscriptions")) + header.setIcon(0, QtGui.QIcon(":/newPrefix/images/subscriptions.png")) + for i in xrange(self.topLevelItemCount()): + item = self.topLevelItem(i) + if item.type != account_type: + self.setItemHidden(item, True) + + +class MessagelistControl(QtGui.QWidget): + @QtCore.pyqtProperty(int) + def AccountType(self): + return self._account_type + + def setAccountType(self, value): + self._account_type = value + + def __init__(self, parent=None): + super(MessagelistControl, self).__init__(parent) + widgets.load('messagelistcontrol.ui', self) + + self.horizontalSplitter.setStretchFactor(0, 0) + self.horizontalSplitter.setStretchFactor(1, 1) + self.horizontalSplitter.setCollapsible(0, False) + self.horizontalSplitter.setCollapsible(1, False) + + self.verticalSplitter.setStretchFactor(0, 0) + self.verticalSplitter.setStretchFactor(1, 1) + self.verticalSplitter.setStretchFactor(2, 2) + self.verticalSplitter.setCollapsible(0, False) + self.verticalSplitter.setCollapsible(1, False) + self.verticalSplitter.setCollapsible(2, False) + self.verticalSplitter.handle(1).setEnabled(False) + + self.treeWidget.filterAccountType(self.AccountType) diff --git a/src/bitmessageqt/messagelistcontrol.ui b/src/bitmessageqt/messagelistcontrol.ui new file mode 100644 index 00000000..d9ead7ec --- /dev/null +++ b/src/bitmessageqt/messagelistcontrol.ui @@ -0,0 +1,343 @@ + + + MessagelistControl + + + 1 + + + + 0 + 0 + 819 + 295 + + + + + 8 + + + 8 + + + 8 + + + 8 + + + + + Qt::Horizontal + + + + + + + + 200 + 0 + + + + Qt::CustomContextMenu + + + true + + + + Identities + + + + :/newPrefix/images/identities.png + + + + + + + + + + 200 + 16777215 + + + + New + + + + + + + + Qt::Vertical + + + + + + + Search + + + + + + + + All + + + + + To + + + + + From + + + + + Subject + + + + + Message + + + + + + + + + Qt::CustomContextMenu + + + QAbstractItemView::NoEditTriggers + + + true + + + QAbstractItemView::ExtendedSelection + + + QAbstractItemView::SelectRows + + + true + + + false + + + true + + + 200 + + + false + + + 27 + + + false + + + true + + + false + + + 26 + + + + + + 0 + 500 + + + + true + + + + Welcome to easy and secure Bitmessage + * send messages to other people + * send broadcast messages like twitter or + * discuss in chan(nel)s with other people + + + + + + + + + + + MessageView + QTextEdit +
bitmessageqt.messageview
+
+ + STreeWidget + QTreeWidget +
bitmessageqt.settingsmixin
+
+ + SSplitter + QSplitter +
bitmessageqt.settingsmixin
+ 1 +
+ + InboxMessagelist + QTableView +
bitmessageqt.messagelist
+
+ + TreeWidgetIdentities + QTreeWidget +
bitmessageqt.messagelist
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + treeWidget + currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*) + messagelistInbox + folderChanged + + + + + + + + + + + + + + + + + + + messagelistInbox + messageSelected(QString) + messageView + setContent + + + 20 + 20 + + + 20 + 20 + + + + +