summaryrefslogtreecommitdiff
path: root/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/taurus/qt/qtgui/panel/taurusdevicepanel.py')
-rw-r--r--lib/taurus/qt/qtgui/panel/taurusdevicepanel.py169
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()