|
From: Carlos P. <cpa...@ce...> - 2015-12-02 08:57:43
|
Hi, the changes seem ok to me, but the implementation has one problem:
It assumesthat the "normal_name" returned by the validator is equivalent
to the device name (and it psses it to setTable). But this is not always
the case. The normal name may contain the DB name in it if it is not the
default one.
For example, in my system I have constrols02:10000 as my default DB,
and the device cpascual/pysignalsimulator/1 is exported only in
controls01 (not in controls02) then:
This fails:
~~~~
python taurusdevicepropertytable.py \
tango://controls01:10000/cpascual/pysignalsimulator/1
~~~~
This also fails:
~~~~
devenv python taurusdevicepropertytable.py \
--tango-host=controls01:10000 cpascual/pysignalsimulator/1
~~~~
And this works:
~~~~
TANGO_HOST=controls01:10000 python taurusdevicepropertytable.py \
cpascual/pysignalsimulator/1
~~~~
Apart from this, simply running `python taurusdevicepropertytable.py` I
get this exception (the widget seems to work anyway):
~~~~
Traceback (most recent call last):
File
"/home/cpascual/src/taurus/lib/taurus/qt/qtgui/base/taurusbase.py", line
341, in filterEvent
self.handleEvent(*evt)
File
"/home/cpascual/src/taurus/lib/taurus/qt/qtgui/base/taurusbase.py", line
1257, in handleEvent
self._setText(text)
TypeError: setText() takes exactly 4 arguments (2 given)
~~~~
Finally,
it would be nice if you test the implementation on taurus4-preview as
well (I haven't yet)
Can you please resubmit addressing this problems?
Note: if it is too much work, I think the current implementation is more
or less ok and can be applied with just a TODO notifying of the
currently known limitations
Cheers,
Carlos
On Wed 11 November 2015 11:56:56 cfalcon wrote:
> setModel of taurus.qt.qtgui.table.TaurusPropTable does not work.
>
> TaurusPropTable uses the inherit setModel method of TaurusBaseWidget
> class that does not cover the funcionality of this widget.
>
> Implement a setModel method acording the specifications provided
> by S.Rubio.
> ---
> .../qt/qtgui/table/taurusdevicepropertytable.py | 57
> ++++++++++++++-------- 1 file changed, 38 insertions(+), 19
> deletions(-)
>
> diff --git a/lib/taurus/qt/qtgui/table/taurusdevicepropertytable.py
> b/lib/taurus/qt/qtgui/table/taurusdevicepropertytable.py index
> 9901ec3..cc9722e 100644
> --- a/lib/taurus/qt/qtgui/table/taurusdevicepropertytable.py
> +++ b/lib/taurus/qt/qtgui/table/taurusdevicepropertytable.py
> @@ -31,14 +31,15 @@ __all__ = ["TaurusPropTable"]
>
> from taurus.external.qt import Qt, QtCore, QtGui
> from taurus.qt.qtgui.base import TaurusBaseWidget
> -import taurus.core
> -import PyTango
> +import taurus
> +from taurus.core.taurusdevice import TaurusDevice
>
> class TaurusPropTable(QtGui.QTableWidget, TaurusBaseWidget):
> '''
> This widget will show a list of properties of device and the list
> of values. @todo add a frame for Add, Delete and Refresh buttons!
> '''
> + # TODO This widget is Tango-centric
> __pyqtSignals__ = ("modelChanged(const QString &)",)
>
> def __init__(self, parent=None, designMode = False):
> @@ -59,6 +60,14 @@ class TaurusPropTable(QtGui.QTableWidget,
> TaurusBaseWidget):
> #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
> -~-~-~- # TaurusBaseWidget over writing methods
>
> #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
> -~-~-~- + def setModel(self, model):
> + name_validator = TaurusDevice.getNameValidator()
> + TaurusBaseWidget.setModel(self, model)
> + try:
> + _, normal_name, _ = name_validator.getNames(model)
> + self.setTable(normal_name)
> + except ValueError:
> + self.debug('Wrong model!! %s' %(model))
>
> def sizeHint(self):
> return QtGui.QTableWidget.sizeHint(self)
> @@ -67,7 +76,7 @@ class TaurusPropTable(QtGui.QTableWidget,
> TaurusBaseWidget): return QtGui.QTableWidget.minimumSizeHint(self)
>
> def getModelClass(self):
> - return taurus.core.taurusdatabase.TaurusDatabase
> + return TaurusDevice
>
> @classmethod
> def getQtDesignerPluginInfo(cls):
> @@ -82,7 +91,7 @@ class TaurusPropTable(QtGui.QTableWidget,
> TaurusBaseWidget):
> #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
> -~-~-~-
>
> model = QtCore.pyqtProperty("QString", TaurusBaseWidget.getModel,
> - TaurusBaseWidget.setModel,
> + setModel,
> TaurusBaseWidget.resetModel)
>
> useParentModel = QtCore.pyqtProperty("bool",
> @@ -95,30 +104,37 @@ class TaurusPropTable(QtGui.QTableWidget,
> TaurusBaseWidget):
> #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
> -~-~-~-
>
> @QtCore.pyqtSignature("setTable(QString)")
> - def setTable(self,dev_name):
> + def setTable(self, dev_name):
> '''
> This method is used to connect TaurusPropTable widget with
> TaurusClassTable widget This method fill the table with the names of
> properties and values for the device selected in the TaurusClassTable
> '''
> -
> QtCore.QObject.disconnect(self,QtCore.SIGNAL("cellChanged(int,int)"),
> self.valueChanged) - self.db = PyTango.Database()
> + QtCore.QObject.disconnect(self,
> QtCore.SIGNAL("cellChanged(int, int)"), +
> self.valueChanged)
> + self.db = taurus.Database()
> dev_name = str(dev_name)
> - self.list_prop =
> list(self.db.get_device_property_list(dev_name,'*')) +
> self.list_prop = list(self.db.get_device_property_list(dev_name,
> '*')) self.setRowCount(len(self.list_prop))
> for i in range(0,len(self.list_prop)):
> elem = self.list_prop[i]
> self.setText(elem,i,0)
> -
> self.dictionary=self.db.get_device_property(dev_name,self.list_prop)
> - self.debug('Getting %s properties: %s ->
> %s'%(dev_name,self.list_prop,self.dictionary)) +
> self.dictionary= self.db.get_device_property(dev_name, +
> self.list_prop) +
> self.debug('Getting %s properties: %s -> %s' %(dev_name, +
> self.list_prop, +
>
> self.dictionary)) value=self.dictionary[elem]
> - self.debug('TaurusPropsTable: property %s is type
> %s'%(elem,type(value))) - USE_TABLES=False
> + self.debug('TaurusPropsTable: property %s is type %s'
> %(elem, +
> type(value)) + )
> + USE_TABLES= False
> if USE_TABLES: self.setPropertyValue(value,i,1)
> else:
> if not isinstance(value,str): #not something like an
> string #if isinstance(value,list):#type(value) is list: heigh1 =
> len(value)
> - value = '\n'.join(str(v) for v in value) # adding
> new lines in between elements in the list + #
> adding new lines in between elements in the list +
> value = '\n'.join(str(v) for v in value) self.setText(str(value),i,1)
>
> self.updateStyle()
> @@ -372,12 +388,15 @@ class Delegate(QtGui.QItemDelegate):
> return size
>
> if __name__ == '__main__':
> - import sys,os
> - app = QtGui.QApplication([])
> + import sys
> + from taurus.qt.qtgui.application import TaurusApplication
> + app = TaurusApplication(app_name="TaurusDevice property table")
> widget = TaurusPropTable()
> - args = sys.argv[1:]
> - if not args: args =
> ['tango/admin/%s'%(os.environ['TANGO_HOST'].split(':')[0])] -
> widget.setTable(sys.args)
> + args = sys.argv
> + if len(args) == 1:
> + model = 'sys/tg_test/1'
> + else:
> + model = str(args[1])
> + widget.setModel(model)
> widget.show()
> app.exec_()
> -
--
+----------------------------------------------------+
Carlos Pascual Izarra
Scientific Software Coordinator
Computing Division
ALBA Synchrotron [http://www.albasynchrotron.es]
Carrer de la Llum 2-26
E-08290 Cerdanyola del Valles (Barcelona), Spain
E-mail: cpa...@ce...
Phone: +34 93 592 4428
+----------------------------------------------------+
|