From 5ac8cc2bb8ac04f71965bfc96a7a579ce45e56b1 Mon Sep 17 00:00:00 2001 From: Ryan Herbst Date: Sat, 27 Jul 2024 23:25:27 -0700 Subject: [PATCH 1/4] Add index to variable value and pydm gui --- python/pyrogue/_Variable.py | 10 ++++++---- python/pyrogue/pydm/data_plugins/rogue_plugin.py | 15 ++++++++------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/python/pyrogue/_Variable.py b/python/pyrogue/_Variable.py index da677000b..28c4b3f11 100644 --- a/python/pyrogue/_Variable.py +++ b/python/pyrogue/_Variable.py @@ -127,8 +127,8 @@ def varUpdate(self,path,varValue): class VariableValue(object): """ """ - def __init__(self, var, read=False): - self.value = var.get(read=read) + def __init__(self, var, read=False, index=-1): + self.value = var.get(read=read,index=index) self.valueDisp = var.genDisp(self.value) self.disp = var.disp self.enum = var.enum @@ -572,7 +572,7 @@ def write(self, *, verify=True, check=True): pass @pr.expose - def getVariableValue(self,read=True): + def getVariableValue(self,read=True,index=-1): """ Return the value after performing a read from hardware if applicable. Hardware read is blocking. An error will result in a logged exception. @@ -582,6 +582,8 @@ def getVariableValue(self,read=True): ---------- read : bool (Default value = True) + index : int + (Default value = -1) Returns ------- @@ -590,7 +592,7 @@ def getVariableValue(self,read=True): Listeners will be informed of the update. """ - return VariableValue(self,read=read) + return VariableValue(self,read=read,index=index) @pr.expose def value(self, index=-1): diff --git a/python/pyrogue/pydm/data_plugins/rogue_plugin.py b/python/pyrogue/pydm/data_plugins/rogue_plugin.py index 14ef8a0da..fca1bd95a 100644 --- a/python/pyrogue/pydm/data_plugins/rogue_plugin.py +++ b/python/pyrogue/pydm/data_plugins/rogue_plugin.py @@ -33,10 +33,10 @@ def parseAddress(address): - # "rogue://index//" + # "rogue://index///" # or - # "rogue://host:port//" - # Mode: 'Value', 'Disp', 'Name' or 'Path' + # "rogue://host:port///" + # Mode: 'value', 'disp', 'name' or 'path' envList = os.getenv('ROGUE_SERVERS') if envList is None: @@ -58,12 +58,13 @@ def parseAddress(address): port = int(data_server[1]) path = data[1] mode = 'value' if (len(data) < 3) else data[2] + index = -1 if (len(data) < 4) else int(data[3]) - return (host,port,path,mode) + return (host,port,path,mode,index) def nodeFromAddress(address): - host, port, path, mode = parseAddress(address) + host, port, path, mode, index = parseAddress(address) client = VirtualClient(host, port) return client.root.getNode(path) @@ -75,7 +76,7 @@ def __init__(self, channel, address, protocol=None, parent=None): self.app = QApplication.instance() - self._host, self._port, self._path, self._mode = parseAddress(channel.address) + self._host, self._port, self._path, self._mode, self._index = parseAddress(channel.address) self._cmd = False self._int = False @@ -204,7 +205,7 @@ def add_listener(self, channel): self.new_value_signal[str].emit(self._node.path) else: self.write_access_signal.emit(self._cmd or self._node.mode!='RO') - self._updateVariable(self._node.path,self._node.getVariableValue(read=False)) + self._updateVariable(self._node.path,self._node.getVariableValue(read=False, index=self._index)) else: self.new_value_signal[str].emit(self._node.name) From fccd47503fb006449d9dd08f7be9e7fa49aea68b Mon Sep 17 00:00:00 2001 From: Ryan Herbst Date: Wed, 31 Jul 2024 09:55:08 -0700 Subject: [PATCH 2/4] Add set index --- python/pyrogue/pydm/data_plugins/rogue_plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/pyrogue/pydm/data_plugins/rogue_plugin.py b/python/pyrogue/pydm/data_plugins/rogue_plugin.py index fca1bd95a..17786ad59 100644 --- a/python/pyrogue/pydm/data_plugins/rogue_plugin.py +++ b/python/pyrogue/pydm/data_plugins/rogue_plugin.py @@ -154,7 +154,7 @@ def put_value(self, new_value): if self._cmd: self._node.__call__(val) else: - self._node.setDisp(val) + self._node.setDisp(val,index=self._index) def add_listener(self, channel): From 2d0f34ff58ee04ce6d26a4ee86db5c10e161d3e0 Mon Sep 17 00:00:00 2001 From: Ryan Herbst Date: Wed, 31 Jul 2024 11:04:07 -0700 Subject: [PATCH 3/4] Fix update value --- conda.yml | 1 + .../pyrogue/pydm/data_plugins/rogue_plugin.py | 4 ++++ .../pydm/examples/rogue_plugin_test.ui | 23 +++++++++++++++---- .../pyrogue/pydm/tools/generic_file_tool.py | 2 +- python/pyrogue/pydm/tools/node_info_tool.py | 2 +- python/pyrogue/pydm/tools/read_node_tool.py | 2 +- .../pyrogue/pydm/tools/read_recursive_tool.py | 2 +- python/pyrogue/pydm/tools/write_node_tool.py | 2 +- .../pydm/tools/write_recursive_tool.py | 2 +- 9 files changed, 30 insertions(+), 10 deletions(-) diff --git a/conda.yml b/conda.yml index 9c1831db5..f7ea8c9f8 100644 --- a/conda.yml +++ b/conda.yml @@ -27,3 +27,4 @@ dependencies: - matplotlib - pytest - pytest-cov + - pyqt=5.12 diff --git a/python/pyrogue/pydm/data_plugins/rogue_plugin.py b/python/pyrogue/pydm/data_plugins/rogue_plugin.py index 17786ad59..a48156caf 100644 --- a/python/pyrogue/pydm/data_plugins/rogue_plugin.py +++ b/python/pyrogue/pydm/data_plugins/rogue_plugin.py @@ -115,6 +115,10 @@ def linkState(self, state): def _updateVariable(self,path,varValue): + + if self._index != -1: + varValue = self._node.getVariableValue(read=False, index=self._index) + if self._mode == 'name': self.new_value_signal[str].emit(self._node.name) elif self._mode == 'path': diff --git a/python/pyrogue/pydm/examples/rogue_plugin_test.ui b/python/pyrogue/pydm/examples/rogue_plugin_test.ui index 2d572a956..0e6be3dcb 100644 --- a/python/pyrogue/pydm/examples/rogue_plugin_test.ui +++ b/python/pyrogue/pydm/examples/rogue_plugin_test.ui @@ -19,7 +19,7 @@ - 4 + 0 @@ -34,6 +34,16 @@ + + + + + + + rogue://0/root.AxiVersion.TestListA/disp/3 + + + @@ -105,7 +115,7 @@ - {"name": "Axis 1", "orientation": "left", "label": "Test Plot Scatter", "minRange": -1.0, "maxRange": 1.0, "autoRange": true, "logMode": false} + {"name": "Axis 1", "orientation": "left", "label": "Test Plot Scatter", "minRange": -1.04, "maxRange": 1.04, "autoRange": true, "logMode": false} @@ -125,7 +135,7 @@ - {"name": "Axis 1", "orientation": "left", "label": "Test Plot Time", "minRange": -1.0, "maxRange": 1.0, "autoRange": true, "logMode": null} + {"name": "Axis 1", "orientation": "left", "label": "Test Plot Time", "minRange": -1.04, "maxRange": 1.04, "autoRange": true, "logMode": null} @@ -151,7 +161,7 @@ - {"name": "Axis 1", "orientation": "left", "label": "Test Array Waveform", "minRange": -1.0, "maxRange": 1.0, "autoRange": true, "logMode": false} + {"name": "Axis 1", "orientation": "left", "label": "Test Array Waveform", "minRange": -1.04, "maxRange": 1.04, "autoRange": true, "logMode": false} @@ -298,6 +308,11 @@
pydm.widgets.frame
1 + + PyDMLineEdit + QLineEdit +
pydm.widgets.line_edit
+
diff --git a/python/pyrogue/pydm/tools/generic_file_tool.py b/python/pyrogue/pydm/tools/generic_file_tool.py index 42df13c1d..259eaf19b 100644 --- a/python/pyrogue/pydm/tools/generic_file_tool.py +++ b/python/pyrogue/pydm/tools/generic_file_tool.py @@ -41,7 +41,7 @@ def __init__(self,save=False): ExternalTool.__init__(self, icon=icon, name=name, group=group, use_with_widgets=use_with_widgets) def call(self, channels, sender): - addr, port, path, mode = parseAddress(channels[0].address) + addr, port, path, mode, index = parseAddress(channels[0].address) self._client = VirtualClient(addr, port) node = self._client.root.getNode(path) diff --git a/python/pyrogue/pydm/tools/node_info_tool.py b/python/pyrogue/pydm/tools/node_info_tool.py index 02ecf5e36..5b83534ea 100644 --- a/python/pyrogue/pydm/tools/node_info_tool.py +++ b/python/pyrogue/pydm/tools/node_info_tool.py @@ -36,7 +36,7 @@ def __init__(self): ExternalTool.__init__(self, icon=icon, name=name, group=group, use_with_widgets=use_with_widgets) def call(self, channels, sender): - addr, port, path, mode = parseAddress(channels[0].address) + addr, port, path, mode, index = parseAddress(channels[0].address) self._client = VirtualClient(addr, port) node = self._client.root.getNode(path) diff --git a/python/pyrogue/pydm/tools/read_node_tool.py b/python/pyrogue/pydm/tools/read_node_tool.py index 15a384794..349145969 100644 --- a/python/pyrogue/pydm/tools/read_node_tool.py +++ b/python/pyrogue/pydm/tools/read_node_tool.py @@ -34,7 +34,7 @@ def __init__(self): ExternalTool.__init__(self, icon=icon, name=name, group=group, use_with_widgets=use_with_widgets) def call(self, channels, sender): - addr, port, path, mode = parseAddress(channels[0].address) + addr, port, path, mode, index = parseAddress(channels[0].address) self._client = VirtualClient(addr, port) node = self._client.root.getNode(path) diff --git a/python/pyrogue/pydm/tools/read_recursive_tool.py b/python/pyrogue/pydm/tools/read_recursive_tool.py index 6f429d3d9..feb6fd76f 100644 --- a/python/pyrogue/pydm/tools/read_recursive_tool.py +++ b/python/pyrogue/pydm/tools/read_recursive_tool.py @@ -34,7 +34,7 @@ def __init__(self): ExternalTool.__init__(self, icon=icon, name=name, group=group, use_with_widgets=use_with_widgets) def call(self, channels, sender): - addr, port, path, mode = parseAddress(channels[0].address) + addr, port, path, mode, index = parseAddress(channels[0].address) self._client = VirtualClient(addr, port) node = self._client.root.getNode(path) diff --git a/python/pyrogue/pydm/tools/write_node_tool.py b/python/pyrogue/pydm/tools/write_node_tool.py index 1c828bd26..25fda74bd 100644 --- a/python/pyrogue/pydm/tools/write_node_tool.py +++ b/python/pyrogue/pydm/tools/write_node_tool.py @@ -34,7 +34,7 @@ def __init__(self): ExternalTool.__init__(self, icon=icon, name=name, group=group, use_with_widgets=use_with_widgets) def call(self, channels, sender): - addr, port, path, mode = parseAddress(channels[0].address) + addr, port, path, mode, index = parseAddress(channels[0].address) self._client = VirtualClient(addr, port) node = self._client.root.getNode(path) diff --git a/python/pyrogue/pydm/tools/write_recursive_tool.py b/python/pyrogue/pydm/tools/write_recursive_tool.py index 382a07896..06f460d59 100644 --- a/python/pyrogue/pydm/tools/write_recursive_tool.py +++ b/python/pyrogue/pydm/tools/write_recursive_tool.py @@ -33,7 +33,7 @@ def __init__(self): ExternalTool.__init__(self, icon=icon, name=name, group=group, use_with_widgets=use_with_widgets) def call(self, channels, sender): - addr, port, path, mode = parseAddress(channels[0].address) + addr, port, path, mode, index = parseAddress(channels[0].address) self._client = VirtualClient(addr, port) node = self._client.root.getNode(path) From bc0b026e60132b48de6422d250d0541835c75c17 Mon Sep 17 00:00:00 2001 From: Ryan Herbst Date: Wed, 31 Jul 2024 11:08:20 -0700 Subject: [PATCH 4/4] Fix changes to test ui --- python/pyrogue/pydm/examples/rogue_plugin_test.ui | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/python/pyrogue/pydm/examples/rogue_plugin_test.ui b/python/pyrogue/pydm/examples/rogue_plugin_test.ui index 0e6be3dcb..2ddcfc6e5 100644 --- a/python/pyrogue/pydm/examples/rogue_plugin_test.ui +++ b/python/pyrogue/pydm/examples/rogue_plugin_test.ui @@ -34,16 +34,6 @@ - - - - - - - rogue://0/root.AxiVersion.TestListA/disp/3 - - - @@ -308,11 +298,6 @@
pydm.widgets.frame
1 - - PyDMLineEdit - QLineEdit -
pydm.widgets.line_edit
-