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:
parent
99f763647f
commit
b8abcfaf85
@ -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)
|
||||||
|
@ -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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user