diff options
Diffstat (limited to 'lib/taurus/qt/qtgui/panel/taurusdevicepanel.py')
-rw-r--r-- | lib/taurus/qt/qtgui/panel/taurusdevicepanel.py | 169 |
1 files changed, 83 insertions, 86 deletions
diff --git a/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py b/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py index 63dd4926..8fb0763e 100644 --- a/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py +++ b/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py @@ -28,10 +28,10 @@ TaurusDevicePanel.py: """ from builtins import str -from future.utils import string_types import re import traceback +import click from future.utils import string_types @@ -42,7 +42,8 @@ from taurus import tauruscustomsettings from taurus.core.taurusbasetypes import TaurusDevState, TaurusElementType from taurus.core.taurusattribute import TaurusAttribute from taurus.core.taurusdevice import TaurusDevice -from taurus.qt.qtgui.container import TaurusWidget, TaurusMainWindow +from taurus.qt.qtgui.container import TaurusWidget +from taurus.qt.qtgui.taurusgui import TaurusGui from taurus.qt.qtgui.display import TaurusLabel from taurus.qt.qtgui.panel.taurusform import TaurusForm from taurus.qt.qtgui.panel.taurusform import TaurusCommandsForm @@ -276,10 +277,8 @@ class TaurusDevicePanel(TaurusWidget): self.setModel(model) def loadConfigFile(self, ifile=None): - self.info('In TaurusDevicePanel.loadConfigFile(%s)' % ifile) - if isinstance(ifile, file) or isinstance(ifile, string_types) and not ifile.endswith('.py'): - TaurusWidget.loadConfigFile(self, ifile) - else: + self.debug('In TaurusDevicePanel.loadConfigFile(%s)' % ifile) + if isinstance(ifile, string_types) and ifile.endswith('.py'): from imp import load_source config_file = load_source('config_file', ifile) af, cf, im = [getattr(config_file, x, None) for x in ( @@ -290,6 +289,8 @@ class TaurusDevicePanel(TaurusWidget): self.setCommandFilters(cf) if im is not None: self.setIconMap(im) + else: + TaurusWidget.loadConfigFile(self, ifile) self.debug('AttributeFilters are:\n%s' % self.getAttributeFilters()) def duplicate(self): @@ -504,16 +505,17 @@ def filterNonExported(obj): @UILoadable(with_ui='_ui') -class TaurusDevPanel(TaurusMainWindow): - ''' +class TaurusDevPanel(TaurusGui): + """ TaurusDevPanel is a Taurus Application inspired in Jive and Atk Panel. It Provides a Device selector and several dockWidgets for interacting and displaying information from the selected device. - ''' + """ + HELP_MENU_ENABLED = False def __init__(self, parent=None, designMode=False): - TaurusMainWindow.__init__(self, parent, designMode=designMode) + TaurusGui.__init__(self, parent) self.loadUi() # setting up the device Tree. @@ -528,12 +530,6 @@ class TaurusDevPanel(TaurusMainWindow): # self.deviceTree.insertFilter(filterNonExported) self.setCentralWidget(self.deviceTree) - # needed because of a limitation in when using the useParentModel - # property from designer and taurus parents are not the same as Qt - # Parents - self._ui.taurusAttrForm.recheckTaurusParent() - self._ui.taurusCommandsForm.recheckTaurusParent() - # register subwidgets for configuration purposes # self.registerConfigDelegate(self.taurusAttrForm) # self.registerConfigDelegate(self.deviceTree) @@ -551,7 +547,7 @@ class TaurusDevPanel(TaurusMainWindow): self.splashScreen().finish(self) def createActions(self): - '''create actions ''' + """create actions""" # View Menu self.showAttrAction = self.viewMenu.addAction( self._ui.attrDW.toggleViewAction()) @@ -559,8 +555,8 @@ class TaurusDevPanel(TaurusMainWindow): self._ui.commandsDW.toggleViewAction()) def setTangoHost(self, host): - '''extended from :class:setTangoHost''' - TaurusMainWindow.setTangoHost(self, host) + """extended from :class:setTangoHost""" + TaurusGui.setTangoHost(self, host) self.deviceTree.setModel(host) # self.deviceTree.insertFilter(filterNonExported) @@ -586,28 +582,20 @@ class TaurusDevPanel(TaurusMainWindow): self.setDevice(devname) def setDevice(self, devname): - # try to connect with the device + """set the device to be shown by the commands and attr forms""" self.setModel(devname) - dev = self.getModelObj() - state = dev.state - # test the connection - if state == TaurusDevState.Ready: - msg = 'Connected to "%s"' % devname - self.statusBar().showMessage(msg) - self._ui.attrDW.setWindowTitle('Attributes - %s' % devname) - self._ui.commandsDW.setWindowTitle('Commands - %s' % devname) - else: - # reset the model if the connection failed - msg = 'Connection to "%s" failed (state = %s)' % (devname, - state.name) - self.statusBar().showMessage(msg) - self.info(msg) - Qt.QMessageBox.warning(self, "Device unreachable", msg) - self.setModel('') + self._ui.attrDW.setWindowTitle('Attributes - %s' % devname) + self._ui.commandsDW.setWindowTitle('Commands - %s' % devname) + + def setModel(self, name): + """Reimplemented to delegate model to the commands and attrs forms""" + TaurusGui.setModel(self, name) + self._ui.taurusAttrForm.setModel(name) + self._ui.taurusCommandsForm.setModel(name) @classmethod def getQtDesignerPluginInfo(cls): - ret = TaurusMainWindow.getQtDesignerPluginInfo() + ret = TaurusGui.getQtDesignerPluginInfo() ret['module'] = 'taurus.qt.qtgui.panel' return ret @@ -616,80 +604,89 @@ class TaurusDevPanel(TaurusMainWindow): #========================================================================= -def TaurusDevicePanelMain(): - '''A launcher for TaurusDevicePanel.''' +@click.command('device') +@click.argument('dev', nargs=1, default=None, required=False) +@click.option('-f', '--filter', + help=('regexp to filter for attributes to show ' + + '(it can be passed more than once)'), + multiple=True, + ) +@click.option('--config', 'config_file', type=click.File('rb'), + help='configuration file for initialization') +def device_cmd(dev, filter, config_file): + """Show a Device Panel""" import sys from taurus.qt.qtgui.application import TaurusApplication - from taurus.core.util import argparse - parser = argparse.get_taurus_parser() - parser.set_usage("%prog [options] [devname [attrs]]") - parser.set_description("Taurus Application inspired in Jive and Atk Panel") - parser.add_option("", "--config-file", dest="config_file", default=None, - help="load a config file (TODO: document this option)") - app = TaurusApplication(cmd_line_parser=parser, app_name="TaurusDevicePanel", - app_version=taurus.Release.version) - args = app.get_command_line_args() - options = app.get_command_line_options() + app = TaurusApplication(cmd_line_parser=None, app_name="TaurusDevicePanel") w = TaurusDevicePanel() w.show() - if len(args) == 0: + if dev is None: from taurus.qt.qtgui.panel import TaurusModelChooser - models, ok = TaurusModelChooser.modelChooserDlg(w, - selectables=[ - TaurusElementType.Member], - singleModel=True) - model = models[0] if ok and models else None - filters = '' - else: - model = args[0] - filters = args[1:] + models, ok = TaurusModelChooser.modelChooserDlg( + w, selectables=[TaurusElementType.Member], singleModel=True + ) + dev = models[0] if ok and models else None - if options.config_file is not None: - w.loadConfigFile(options.config_file) - elif model and filters: - w.setAttributeFilters({model: filters}) + if config_file is not None: + w.loadConfigFile(config_file) + elif dev and filter: + w.setAttributeFilters({dev: list(filter)}) - w.setModel(model) + w.setModel(dev) sys.exit(app.exec_()) -def TaurusPanelMain(): - '''A launcher for TaurusPanel.''' - # NOTE: DON'T PUT TEST CODE HERE. - # THIS IS CALLED FROM THE LAUNCHER SCRIPT (<taurus>/scripts/tauruspanel) +@click.command('panel') +@click.option('--tango-host', 'tango_host', + default=None, + help="Tango Host name (the system's default if not given)") +@click.option('-d', '--dev', default=None, + help='pre-selected device') +@click.option('-t', '--trend', is_flag=True, + help='Create a temporal trend widget') +def panel_cmd(tango_host, dev, trend): + """ + Show a TaurusPanel (a Taurus application inspired in Jive and Atk Panel) + """ from taurus.qt.qtgui.application import TaurusApplication - from taurus.core.util import argparse import sys - parser = argparse.get_taurus_parser() - parser.set_usage("%prog [options] [devname]") - parser.set_description("Taurus Application inspired in Jive and Atk Panel") - - app = TaurusApplication(cmd_line_parser=parser, app_name="tauruspanel", - app_version=taurus.Release.version) - args = app.get_command_line_args() - options = app.get_command_line_options() + app = TaurusApplication(cmd_line_parser=None, app_name="tauruspanel") w = TaurusDevPanel() - if options.tango_host is None: - options.tango_host = taurus.Authority().getNormalName() - w.setTangoHost(options.tango_host) + if tango_host is None: + from taurus import Factory + tango_host = Factory('tango').getAuthority().getFullName() + w.setTangoHost(tango_host) + + if dev is not None: + w.setDevice(dev) + + if trend is True: + # TODO: Allow to select TaurusTrend back-end + try: + from taurus.qt.qtgui.qwt5 import TaurusTrend + w.info('Using qwt5 back-end') + except: + try: + from taurus.qt.qtgui.tpg import TaurusTrend + w.info('Using tpg back-end') + except: + TaurusTrend = None + w.warning('TaurusTrend widget is not available') - if len(args) == 1: - w.setDevice(args[0]) + if TaurusTrend is not None: + plot = TaurusTrend() + w.createPanel(plot, 'TaurusTrend', permanent=False) w.show() sys.exit(app.exec_()) -############################################################################### - -if __name__ == "__main__": - TaurusDevicePanelMain() |