From f4f200ad5f6b56a708efeefb46d82247152ba208 Mon Sep 17 00:00:00 2001 From: Nils <> Date: Fri, 17 Apr 2020 09:38:18 +0200 Subject: [PATCH] Send callback to GUI when nsm label changes --- engine/nsmservercontrol.py | 1 + qtgui/opensessioncontroller.py | 37 +++++++++++++++++----------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/engine/nsmservercontrol.py b/engine/nsmservercontrol.py index a47ad9d..3f7a7d8 100644 --- a/engine/nsmservercontrol.py +++ b/engine/nsmservercontrol.py @@ -989,6 +989,7 @@ class NsmServerControl(object): clientId, label = parameters logger.info(f"Label for client {clientId} changed to {label}") self._setClientData(clientId, "label", label) + self.clientStatusHook(self.internalState["clients"][clientId]) else: raise NotImplementedError(parameters) diff --git a/qtgui/opensessioncontroller.py b/qtgui/opensessioncontroller.py index c55d14b..5ae82ac 100644 --- a/qtgui/opensessioncontroller.py +++ b/qtgui/opensessioncontroller.py @@ -76,7 +76,6 @@ class ClientItem(QtWidgets.QTreeWidgetItem): def updateData(self, clientDict:dict): """Arrives via parenTreeWidget api callback""" self.clientDict = clientDict - for index, key in enumerate(self.parentController.clientsTreeWidgetColumns): if clientDict[key] is None: t = "" @@ -97,7 +96,7 @@ class ClientItem(QtWidgets.QTreeWidgetItem): t = self.parentController.clientOverrideNamesCache[clientDict["clientId"]] logger.info(f"Update Data: custom name for id {self.clientDict['clientId']} {self.clientDict['reportedName']}: {t}") else: - t = str(value) + t = str(value) else: t = str(value) self.setText(index, t) @@ -109,9 +108,9 @@ class ClientItem(QtWidgets.QTreeWidgetItem): icon = programIcons[clientDict["executable"]] self.setIcon(self.parentController.clientsTreeWidgetColumns.index("reportedName"), icon) #reported name is correct here. this is just the column. - + #TODO: this should be an nsmd status. Check if excecutable exists. nsmd just reports "stopped", and worse: after a long timeout. - nameColumn = self.parentController.clientsTreeWidgetColumns.index("reportedName") + nameColumn = self.parentController.clientsTreeWidgetColumns.index("reportedName") if not self.text(nameColumn): #Empty string because program not found self.setText(nameColumn, clientDict["executable"]) self.setText(self.parentController.clientsTreeWidgetColumns.index("lastStatus"), QtCore.QCoreApplication.translate("OpenSession", "(command not found)")) @@ -194,11 +193,11 @@ class ClientTable(object): def _startEditingName(self, *args): - currentItem = self.clientsTreeWidget.currentItem() + currentItem = self.clientsTreeWidget.currentItem() self.editableItem = currentItem column = self.clientsTreeWidgetColumns.index("reportedName") self.clientsTreeWidget.editItem(currentItem, column) - + def _reactSignal_itemEditingFinished(self, qLineEdit, returnCode): """This is a hacky signal. It arrives every change, programatically or manually. We therefore only connect this signal right after a double click and disconnect it @@ -208,7 +207,7 @@ class ClientTable(object): returnCode: no clue? Integers all over the place... """ treeWidgetItem = self.editableItem - self.editableItem = None + self.editableItem = None self.clientsTreeWidget.blockSignals(True) if treeWidgetItem: #We send the signal directly. Updating is done via callback. @@ -343,16 +342,16 @@ class ClientTable(object): #Only rename when dataclient is present #None or dict, even empty dict if self.clientOverrideNamesCache is None: - ui.actionClientRename.setEnabled(False) + ui.actionClientRename.setEnabled(False) else: ui.actionClientRename.setEnabled(True) - def _reactSignal_rememberSorting(self, *args): - self.sortByColumn = self.clientsTreeWidget.header().sortIndicatorSection() - self.sortDescending = self.clientsTreeWidget.header().sortIndicatorOrder() + def _reactSignal_rememberSorting(self, *args): + self.sortByColumn = self.clientsTreeWidget.header().sortIndicatorSection() + self.sortDescending = self.clientsTreeWidget.header().sortIndicatorOrder() - def _reactSignal_restoreSorting(self, *args): - self.clientsTreeWidget.sortByColumn(self.sortByColumn, self.sortDescending) + def _reactSignal_restoreSorting(self, *args): + self.clientsTreeWidget.sortByColumn(self.sortByColumn, self.sortDescending) class LauncherProgram(QtWidgets.QTreeWidgetItem): """ @@ -421,7 +420,7 @@ class LauncherTable(object): self.launcherWidget.setHeaderLabels(self.headerLables) self.launcherWidget.setSortingEnabled(True) self.launcherWidget.setAlternatingRowColors(True) - + #The actual program entries are handled by the LauncherProgram item class self.buildPrograms() @@ -449,7 +448,7 @@ class LauncherTable(object): """ self.launcherWidget.clear() programs = api.getSystemPrograms() - + for entry in programs: item = LauncherProgram(parentController=self, launcherDict=entry) self.launcherWidget.addTopLevelItem(item) @@ -465,15 +464,15 @@ class OpenSessionController(object): self.clientTabe = ClientTable(mainWindow=mainWindow, parent=self) self.launcherTable = LauncherTable(mainWindow=mainWindow, parent=self) - self.descriptionController = DescriptionController(mainWindow, self.mainWindow.ui.loadedSessionDescriptionGroupBox, self.mainWindow.ui.loadedSessionDescription) - + self.descriptionController = DescriptionController(mainWindow, self.mainWindow.ui.loadedSessionDescriptionGroupBox, self.mainWindow.ui.loadedSessionDescription) + self.sessionLoadedPanel = mainWindow.ui.session_loaded #groupbox self.sessionProgramsPanel = mainWindow.ui.session_programs #groupbox #API Callbacks - api.callbacks.sessionOpenReady.append(self._reactCallback_sessionOpen) + api.callbacks.sessionOpenReady.append(self._reactCallback_sessionOpen) logger.info("Full View Open Session Controller ready") - + def _reactCallback_sessionOpen(self, nsmSessionExportDict:dict): """Open does not mean we come from the session chooser. Switching does not close a session""" #self.description.clear() #Deletes the placesholder and text!