From 06cb38ff36c186448075e343f59c41617835b508 Mon Sep 17 00:00:00 2001 From: Nils <> Date: Sat, 27 Jun 2020 20:47:16 +0200 Subject: [PATCH] Add session context menu to unused areas of the full view tab for shorter mouse distances --- qtgui/mainwindow.py | 13 +++++++++++++ qtgui/opensessioncontroller.py | 19 ++++++++++++------- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/qtgui/mainwindow.py b/qtgui/mainwindow.py index 4a095a1..554c396 100644 --- a/qtgui/mainwindow.py +++ b/qtgui/mainwindow.py @@ -133,6 +133,7 @@ class MainWindow(QtWidgets.QMainWindow): self.ui = Ui_MainWindow() self.ui.setupUi(self) self.fPalBlue = setPaletteAndFont(self.qtApp) + assert self.ui.tabbyCat.currentIndex() == 0, self.ui.tabbyCat.currentIndex() # this is critical. If you left the Qt Designer with the wrong tab open this is the error that happens. It will trigger the tab changed later that will go wrong because setup is not complete yet and you'll get AttributeError self.ui.mainPageSwitcher.setCurrentIndex(0) #1 is messageLabel 0 is the tab widget @@ -146,6 +147,13 @@ class MainWindow(QtWidgets.QMainWindow): self.connectMenu() self.recentlyOpenedSessions = RecentlyOpenedSessions() + + #self.ui.stack_loaded_session is only visible when there is a loaded session and the full view tab is active + #we link the session context menu to the session menu menu. + self.ui.stack_loaded_session.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) + self.ui.stack_loaded_session.customContextMenuRequested.connect(self.customContextMenu) + + #Api Callbacks api.callbacks.sessionClosed.append(self.reactCallback_sessionClosed) api.callbacks.sessionOpenReady.append(self.reactCallback_sessionOpen) @@ -369,6 +377,11 @@ class MainWindow(QtWidgets.QMainWindow): if widget.success: self.updateProgramDatabase() + def customContextMenu(self, qpoint): + pos = QtGui.QCursor.pos() + pos.setY(pos.y() + 5) + self.ui.menuSession.exec_(pos) + def storeWindowSettings(self): """Window state is not saved in the real save file. That would lead to portability problems between computers, like different screens and resolutions. diff --git a/qtgui/opensessioncontroller.py b/qtgui/opensessioncontroller.py index 40cf460..e98b72e 100644 --- a/qtgui/opensessioncontroller.py +++ b/qtgui/opensessioncontroller.py @@ -129,10 +129,12 @@ class ClientTable(object): self.sortByColumn = 0 #by name self.sortAscending = 0 # Qt::SortOrder which is 0 for ascending and 1 for descending self.clientsTreeWidget = self.mainWindow.ui.loadedSessionClients + + self.clientsTreeWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) + self.clientsTreeWidget.customContextMenuRequested.connect(self.clientsContextMenu) + self.clientsTreeWidget.setIconSize(iconSize) - self.clientsTreeWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.clientsTreeWidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) #We only allow explicit editing. - self.clientsTreeWidget.customContextMenuRequested.connect(self.clientsContextMenu) self.clientsTreeWidgetColumns = ("reportedName", "label", "lastStatus", "visible", "dirty", "clientId") #basically an enum self.clientHeaderLabels = [ QtCore.QCoreApplication.translate("OpenSession", "Name"), @@ -177,17 +179,20 @@ class ClientTable(object): self.clientsTreeWidget.clear() def clientsContextMenu(self, qpoint): - """Reuses the menubar menu""" + """Reuses the menubar menus""" + pos = QtGui.QCursor.pos() + pos.setY(pos.y() + 5) + item = self.clientsTreeWidget.itemAt(qpoint) - if not type(item) is ClientItem: + if not type(item) is ClientItem: + self.mainWindow.ui.menuSession.exec_(pos) return + if not item is self.clientsTreeWidget.currentItem(): #Some mouse combinations can lead to getting a different context menu than the clicked item. self.clientsTreeWidget.setCurrentItem(item) - menu = self.mainWindow.ui.menuClientNameId - pos = QtGui.QCursor.pos() - pos.setY(pos.y() + 5) + menu = self.mainWindow.ui.menuClientNameId menu.exec_(pos)