remember Widgets for modulectrl and paramctl

to not recreate them when another module/param got selected

Change-Id: Ic81bd8e3105f666d3a03dffb3de4e15603d99c39
Reviewed-on: https://forge.frm2.tum.de/review/17276
Tested-by: JenkinsCodeReview <bjoern_pedersen@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
This commit is contained in:
Enrico Faulhaber 2018-02-08 11:30:48 +01:00
parent 99f763647f
commit b8abcfaf85
2 changed files with 22 additions and 12 deletions

View File

@ -23,6 +23,8 @@
from __future__ import print_function from __future__ import print_function
import sys
from PyQt4.QtGui import QMainWindow, QInputDialog, QTreeWidgetItem, QMessageBox from PyQt4.QtGui import QMainWindow, QInputDialog, QTreeWidgetItem, QMessageBox
from PyQt4.QtCore import pyqtSignature as qtsig, QObject, pyqtSignal from PyQt4.QtCore import pyqtSignature as qtsig, QObject, pyqtSignal
@ -32,7 +34,6 @@ from secop.gui.modulectrl import ModuleCtrl
from secop.gui.paramview import ParameterView from secop.gui.paramview import ParameterView
from secop.client.baseclient import Client as SECNode from secop.client.baseclient import Client as SECNode
import sys
ITEM_TYPE_NODE = QTreeWidgetItem.UserType + 1 ITEM_TYPE_NODE = QTreeWidgetItem.UserType + 1
ITEM_TYPE_GROUP = QTreeWidgetItem.UserType + 2 ITEM_TYPE_GROUP = QTreeWidgetItem.UserType + 2
@ -80,6 +81,8 @@ class MainWindow(QMainWindow):
self._nodes = {} self._nodes = {}
self._nodeCtrls = {} self._nodeCtrls = {}
self._moduleCtrls = {}
self._paramCtrls = {}
self._topItems = {} self._topItems = {}
self._currentWidget = self.splitter.widget(1).layout().takeAt(0) self._currentWidget = self.splitter.widget(1).layout().takeAt(0)
@ -127,7 +130,7 @@ class MainWindow(QMainWindow):
self._displayParameter(current.parent().parent().text(0), self._displayParameter(current.parent().parent().text(0),
current.parent().text(0), current.text(0)) current.parent().text(0), current.text(0))
def _removeSubTree(self, toplevelItem): def _removeSubTree(self, toplevel_item):
#.... #....
pass pass
@ -160,25 +163,32 @@ class MainWindow(QMainWindow):
for param in sorted(node.getParameters(module)): for param in sorted(node.getParameters(module)):
paramItem = QTreeWidgetItem(moduleItem, [param], paramItem = QTreeWidgetItem(moduleItem, [param],
ITEM_TYPE_PARAMETER) ITEM_TYPE_PARAMETER)
paramItem.setDisabled(False)
self.treeWidget.addTopLevelItem(nodeItem) self.treeWidget.addTopLevelItem(nodeItem)
self._topItems[node] = nodeItem self._topItems[node] = nodeItem
def _displayNode(self, node): def _displayNode(self, node):
ctrl = self._nodeCtrls.get(node, None) ctrl = self._nodeCtrls.get(node, None)
if ctrl is None: if ctrl is None:
ctrl = self._nodeCtrls[node] = NodeCtrl(self._nodes[node]) ctrl = self._nodeCtrls[node] = NodeCtrl(self._nodes[node])
self._replaceCtrlWidget(ctrl) self._replaceCtrlWidget(ctrl)
def _displayModule(self, node, module): def _displayModule(self, node, module):
self._replaceCtrlWidget(ModuleCtrl(self._nodes[node], module)) ctrl = self._moduleCtrls.get((node, module), None)
if ctrl is None:
ctrl = self._moduleCtrls[(node, module)] = ModuleCtrl(self._nodes[node], module)
self._replaceCtrlWidget(ctrl)
def _displayParameter(self, node, module, parameter): def _displayParameter(self, node, module, parameter):
self._replaceCtrlWidget( ctrl = self._paramCtrls.get((node, module, parameter), None)
ParameterView(self._nodes[node], module, parameter)) if ctrl is None:
ctrl = ParameterView(self._nodes[node], module, parameter)
self._paramCtrls[(node, module, parameter)] = ctrl
self._replaceCtrlWidget(ctrl)
def _replaceCtrlWidget(self, new): def _replaceCtrlWidget(self, new):
old = self.splitter.widget(1).layout().takeAt(0) old = self.splitter.widget(1).layout().takeAt(0)

View File

@ -231,7 +231,7 @@ class ReadableWidget(QWidget):
self.update_status(self._get('status', (999, '<not supported>')), {}) self.update_status(self._get('status', (999, '<not supported>')), {})
# XXX: also connect update_status signal to LineEdit ?? # XXX: also connect update_status signal to LineEdit ??
def update_status(self, status, qualifiers): def update_status(self, status, qualifiers=None):
display_string = self._status_type.subtypes[0].entries.get(status[0]) display_string = self._status_type.subtypes[0].entries.get(status[0])
if status[1]: if status[1]:
display_string += ':' + status[1] display_string += ':' + status[1]
@ -241,7 +241,7 @@ class ReadableWidget(QWidget):
def _init_current_widgets(self): def _init_current_widgets(self):
self.update_current(self._get('value', ''), {}) self.update_current(self._get('value', ''), {})
def update_current(self, value, qualifiers): def update_current(self, value, qualifiers=None):
self.currentLineEdit.setText(str(value)) self.currentLineEdit.setText(str(value))
def _init_target_widgets(self): def _init_target_widgets(self):
@ -250,7 +250,7 @@ class ReadableWidget(QWidget):
self.targetComboBox.setHidden(True) self.targetComboBox.setHidden(True)
self.cmdPushButton.setHidden(True) self.cmdPushButton.setHidden(True)
def update_target(self, target, qualifiers): def update_target(self, target, qualifiers=None):
pass pass
def target_go(self, target): def target_go(self, target):
@ -288,13 +288,13 @@ class DrivableWidget(ReadableWidget):
else: else:
self.update_target(target) self.update_target(target)
def update_current(self, value, qualifiers): def update_current(self, value, qualifiers=None):
if self._is_enum: if self._is_enum:
self.currentLineEdit.setText(self._map[self._revmap[value]][0]) self.currentLineEdit.setText(self._map[self._revmap[value]][0])
else: else:
self.currentLineEdit.setText(str(value)) self.currentLineEdit.setText(str(value))
def update_target(self, target, qualifiers): def update_target(self, target, qualifiers=None):
if self._is_enum: if self._is_enum:
# update selected item # update selected item
if target in self._revmap: if target in self._revmap: