--- taurus-3.3.0+dfsg/debian/changelog 2014-08-06 18:41:58.000000000 +0200 +++ taurus-3.3.1+dfsg/debian/changelog 2014-10-27 11:02:10.000000000 +0100 @@ -1,3 +1,9 @@ +taurus (3.3.1+dfsg-1) unstable; urgency=high + + * Imported Upstream version 3.3.1+dfsg + + -- Picca Frédéric-Emmanuel Mon, 27 Oct 2014 11:01:19 +0100 + taurus (3.3.0+dfsg-2) unstable; urgency=low * debian/control --- taurus-3.3.0+dfsg/doc/man/tau2taurus.1 2014-07-09 10:01:38.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/man/tau2taurus.1 2014-10-27 09:43:48.000000000 +0100 @@ -1,7 +1,7 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH TAU2TAURUS "1" "July 2014" "tau2taurus 3.3.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.3. +.TH TAU2TAURUS "1" "October 2014" "tau2taurus 3.3.1" "User Commands" .SH NAME -tau2taurus \- manual page for tau2taurus 3.3.0 +tau2taurus \- manual page for tau2taurus 3.3.1 .SH SYNOPSIS .B tau2taurus [\fI\,options\/\fR] \fI\,inputfile\/\fR --- taurus-3.3.0+dfsg/doc/man/taurusconfigbrowser.1 2014-07-09 10:01:38.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/man/taurusconfigbrowser.1 2014-10-27 09:43:48.000000000 +0100 @@ -1,7 +1,7 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH TAURUSCONFIGEDITOR "1" "July 2014" "taurusconfigeditor 3.3.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.3. +.TH TAURUSCONFIGEDITOR "1" "October 2014" "taurusconfigeditor 3.3.1" "User Commands" .SH NAME -taurusconfigeditor \- manual page for taurusconfigeditor 3.3.0 +taurusconfigeditor \- manual page for taurusconfigeditor 3.3.1 .SH SYNOPSIS .B taurusconfigbrowser [\fI\,options\/\fR] [\fI\,INIFILENAME\/\fR] --- taurus-3.3.0+dfsg/doc/man/tauruscurve.1 2014-07-09 10:01:38.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/man/tauruscurve.1 2014-10-27 09:43:48.000000000 +0100 @@ -1,7 +1,7 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH TAURUS "1" "July 2014" "Taurus Curve Dialog 3.3.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.3. +.TH TAURUS "1" "October 2014" "Taurus Curve Dialog 3.3.1" "User Commands" .SH NAME -Taurus \- manual page for Taurus Curve Dialog 3.3.0 +Taurus \- manual page for Taurus Curve Dialog 3.3.1 .SH SYNOPSIS .B tauruscurve [\fI\,options\/\fR] [\fI\, \/\fR[\fI\,\/\fR] ...] --- taurus-3.3.0+dfsg/doc/man/taurusdemo.1 2014-07-09 10:01:38.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/man/taurusdemo.1 2014-10-27 09:43:48.000000000 +0100 @@ -1,5 +1,5 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH TAURUSDEMO "1" "July 2014" "taurusdemo 1.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.3. +.TH TAURUSDEMO "1" "October 2014" "taurusdemo 1.0" "User Commands" .SH NAME taurusdemo \- manual page for taurusdemo 1.0 .SH SYNOPSIS --- taurus-3.3.0+dfsg/doc/man/taurusdesigner.1 2014-07-09 10:01:38.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/man/taurusdesigner.1 2014-10-27 09:43:48.000000000 +0100 @@ -1,7 +1,7 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH TAURUSDESIGNER "1" "July 2014" "taurusdesigner 3.3.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.3. +.TH TAURUSDESIGNER "1" "October 2014" "taurusdesigner 3.3.1" "User Commands" .SH NAME -taurusdesigner \- manual page for taurusdesigner 3.3.0 +taurusdesigner \- manual page for taurusdesigner 3.3.1 .SH SYNOPSIS .B taurusdesigner [\fI\,options\/\fR] \fI\,\/\fR --- taurus-3.3.0+dfsg/doc/man/taurusdevicepanel.1 2014-07-09 10:01:38.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/man/taurusdevicepanel.1 2014-10-27 09:43:48.000000000 +0100 @@ -1,7 +1,7 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH TAURUSDEVICEPANEL "1" "July 2014" "TaurusDevicePanel 3.3.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.3. +.TH TAURUSDEVICEPANEL "1" "October 2014" "TaurusDevicePanel 3.3.1" "User Commands" .SH NAME -TaurusDevicePanel \- manual page for TaurusDevicePanel 3.3.0 +TaurusDevicePanel \- manual page for TaurusDevicePanel 3.3.1 .SH SYNOPSIS .B taurusdevicepanel [\fI\,options\/\fR] [\fI\,devname \/\fR[\fI\,attrs\/\fR]] --- taurus-3.3.0+dfsg/doc/man/taurusdoc.1 2014-07-09 10:01:38.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/man/taurusdoc.1 2014-10-27 09:43:48.000000000 +0100 @@ -1,7 +1,7 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH TAURUSDOC "1" "July 2014" "taurusdoc 3.3.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.3. +.TH TAURUSDOC "1" "October 2014" "taurusdoc 3.3.1" "User Commands" .SH NAME -taurusdoc \- manual page for taurusdoc 3.3.0 +taurusdoc \- manual page for taurusdoc 3.3.1 .SH SYNOPSIS .B taurusdoc [\fI\,options\/\fR] --- taurus-3.3.0+dfsg/doc/man/taurusform.1 2014-07-09 10:01:38.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/man/taurusform.1 2014-10-27 09:43:48.000000000 +0100 @@ -1,7 +1,7 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH TAURUSFORM "1" "July 2014" "taurusform 3.3.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.3. +.TH TAURUSFORM "1" "October 2014" "taurusform 3.3.1" "User Commands" .SH NAME -taurusform \- manual page for taurusform 3.3.0 +taurusform \- manual page for taurusform 3.3.1 .SH SYNOPSIS .B taurusform [\fI\,options\/\fR] [\fI\,model1 \/\fR[\fI\,model2 \/\fR...]] --- taurus-3.3.0+dfsg/doc/man/taurusgui.1 2014-07-09 10:01:38.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/man/taurusgui.1 2014-10-27 09:43:48.000000000 +0100 @@ -1,7 +1,7 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH TAURUSGUI "1" "July 2014" "taurusgui 3.3.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.3. +.TH TAURUSGUI "1" "October 2014" "taurusgui 3.3.1" "User Commands" .SH NAME -taurusgui \- manual page for taurusgui 3.3.0 +taurusgui \- manual page for taurusgui 3.3.1 .SH SYNOPSIS .B taurusgui [\fI\,options\/\fR] \fI\,confname\/\fR --- taurus-3.3.0+dfsg/doc/man/taurusimage.1 2014-07-09 10:01:38.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/man/taurusimage.1 2014-10-27 09:43:48.000000000 +0100 @@ -1,7 +1,7 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH TAURUS "1" "July 2014" "Taurus Image Dialog 3.3.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.3. +.TH TAURUS "1" "October 2014" "Taurus Image Dialog 3.3.1" "User Commands" .SH NAME -Taurus \- manual page for Taurus Image Dialog 3.3.0 +Taurus \- manual page for Taurus Image Dialog 3.3.1 .SH SYNOPSIS .B taurusimage [\fI\,options\/\fR] \fI\,\/\fR --- taurus-3.3.0+dfsg/doc/man/tauruspanel.1 2014-07-09 10:01:38.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/man/tauruspanel.1 2014-10-27 09:43:48.000000000 +0100 @@ -1,7 +1,7 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH TAURUSPANEL "1" "July 2014" "tauruspanel 3.3.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.3. +.TH TAURUSPANEL "1" "October 2014" "tauruspanel 3.3.1" "User Commands" .SH NAME -tauruspanel \- manual page for tauruspanel 3.3.0 +tauruspanel \- manual page for tauruspanel 3.3.1 .SH SYNOPSIS .B tauruspanel [\fI\,options\/\fR] [\fI\,devname\/\fR] --- taurus-3.3.0+dfsg/doc/man/taurusplot.1 2014-07-09 10:01:38.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/man/taurusplot.1 2014-10-27 09:43:48.000000000 +0100 @@ -1,7 +1,7 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH TAURUSPLOT "1" "July 2014" "taurusplot 3.3.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.3. +.TH TAURUSPLOT "1" "October 2014" "taurusplot 3.3.1" "User Commands" .SH NAME -taurusplot \- manual page for taurusplot 3.3.0 +taurusplot \- manual page for taurusplot 3.3.1 .SH SYNOPSIS .B taurusplot [\fI\,options\/\fR] [\fI\, \/\fR[\fI\,\/\fR] ...] --- taurus-3.3.0+dfsg/doc/man/taurusremotelogmonitor.1 2014-07-09 10:01:38.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/man/taurusremotelogmonitor.1 2014-10-27 09:43:48.000000000 +0100 @@ -1,5 +1,5 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH TAURUS "1" "July 2014" "Taurus remote logger 1.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.3. +.TH TAURUS "1" "October 2014" "Taurus remote logger 1.0" "User Commands" .SH NAME Taurus \- manual page for Taurus remote logger 1.0 .SH SYNOPSIS --- taurus-3.3.0+dfsg/doc/man/taurustrend.1 2014-07-09 10:01:38.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/man/taurustrend.1 2014-10-27 09:43:48.000000000 +0100 @@ -1,7 +1,7 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH TAURUSTREND "1" "July 2014" "taurustrend 3.3.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.3. +.TH TAURUSTREND "1" "October 2014" "taurustrend 3.3.1" "User Commands" .SH NAME -taurustrend \- manual page for taurustrend 3.3.0 +taurustrend \- manual page for taurustrend 3.3.1 .SH SYNOPSIS .B taurustrend [\fI\,options\/\fR] [\fI\, \/\fR[\fI\,\/\fR] ...] --- taurus-3.3.0+dfsg/doc/man/taurustrend1d.1 2014-07-09 10:01:38.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/man/taurustrend1d.1 2014-10-27 09:43:48.000000000 +0100 @@ -1,7 +1,7 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH TAURUS "1" "July 2014" "Taurus Trend 3.3.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.3. +.TH TAURUS "1" "October 2014" "Taurus Trend 3.3.1" "User Commands" .SH NAME -Taurus \- manual page for Taurus Trend 3.3.0 +Taurus \- manual page for Taurus Trend 3.3.1 .SH SYNOPSIS .B taurustrend1d [\fI\,options\/\fR] \fI\,\/\fR --- taurus-3.3.0+dfsg/doc/man/taurustrend2d.1 2014-07-09 10:01:38.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/man/taurustrend2d.1 2014-10-27 09:43:48.000000000 +0100 @@ -1,7 +1,7 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH TAURUS "1" "July 2014" "Taurus Trend 2D 3.3.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.3. +.TH TAURUS "1" "October 2014" "Taurus Trend 2D 3.3.1" "User Commands" .SH NAME -Taurus \- manual page for Taurus Trend 2D 3.3.0 +Taurus \- manual page for Taurus Trend 2D 3.3.1 .SH SYNOPSIS .B taurustrend2d [\fI\,options\/\fR] \fI\,\/\fR --- taurus-3.3.0+dfsg/doc/man/taurusui.1 1970-01-01 01:00:00.000000000 +0100 +++ taurus-3.3.1+dfsg/doc/man/taurusui.1 2014-10-27 09:43:48.000000000 +0100 @@ -0,0 +1,38 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.3. +.TH TAURUSUI "1" "October 2014" "taurusui 1.0" "User Commands" +.SH NAME +taurusui \- manual page for taurusui 1.0 +.SH SYNOPSIS +.B taurusui +[\fI\,options\/\fR] \fI\, \/\fR[\fI\, \/\fR...] +.SH DESCRIPTION +a taurus application that launches GUI(s) for the given .ui file(s) +.SH OPTIONS +.TP +\fB\-h\fR, \fB\-\-help\fR +show this help message and exit +.TP +\fB\-\-version\fR +show program's version number and exit +.IP +Taurus Options: +.IP +Basic options present in any taurus application +.TP +\fB\-\-taurus\-log\-level\fR=\fI\,LEVEL\/\fR +taurus log level. Allowed values are (case +insensitive): critical, error, warning/warn, info, +debug, trace +.TP +\fB\-\-taurus\-polling\-period\fR=\fI\,MILLISEC\/\fR +taurus global polling period in milliseconds +.TP +\fB\-\-taurus\-serialization\-mode\fR=\fI\,SERIAL\/\fR +taurus serialization mode. Allowed values are (case +insensitive): serial, concurrent (default) +.TP +\fB\-\-tango\-host\fR=\fI\,TANGO_HOST\/\fR +Tango host name +.TP +\fB\-\-remote\-console\-port\fR=\fI\,PORT\/\fR +enables remote debugging using the given port --- taurus-3.3.0+dfsg/doc/man/taurusuic4.1 2014-07-09 10:01:38.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/man/taurusuic4.1 2014-10-27 09:43:48.000000000 +0100 @@ -1,11 +1,16 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH TAURUSUIC4 "1" "July 2014" "taurusuic4 3.3.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.3. +.TH TAURUSUIC4 "1" "October 2014" "taurusuic4 *******************************************************************************" "User Commands" .SH NAME -taurusuic4 \- manual page for taurusuic4 3.3.0 +taurusuic4 \- manual page for taurusuic4 ******************************************************************************* .SH SYNOPSIS .B taurusuic4 [\fI\,options\/\fR] \fI\,\/\fR .SH DESCRIPTION +******************************************************************************* +taurusuic4 is deprecated since SEP11 (http://sf.net/p/sardana/wiki/SEP11) +Consider using the taurus.qt.qtgui.util.UILoadable decorator instead +******************************************************************************* +.PP a taurus customized pyuic4 .SH OPTIONS .TP @@ -35,3 +40,8 @@ .TP \fB\-T\fR generate an additional taurus python file +.PP +taurusuic4 is deprecated since SEP11 (http://sf.net/p/sardana/wiki/SEP11) +Consider using the taurus.qt.qtgui.util.UILoadable decorator instead +******************************************************************************* +taurusuic4 3.3.1 --- taurus-3.3.0+dfsg/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusRoundRectItem.rst 1970-01-01 01:00:00.000000000 +0100 +++ taurus-3.3.1+dfsg/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusRoundRectItem.rst 2014-10-27 09:45:09.000000000 +0100 @@ -0,0 +1,14 @@ +.. AUTO_RST4API +.. This file was generated by auto_rst4api.py. Changes may be lost +.. currentmodule:: taurus.qt.qtgui.graphic + +:class:`TaurusRoundRectItem` +============================ + +.. inheritance-diagram:: TaurusRoundRectItem + :parts: 1 + +.. autoclass:: TaurusRoundRectItem + :members: + :undoc-members: + :show-inheritance: \ Pas de fin de ligne à la fin du fichier --- taurus-3.3.0+dfsg/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusRoundRectStateItem.rst 1970-01-01 01:00:00.000000000 +0100 +++ taurus-3.3.1+dfsg/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusRoundRectStateItem.rst 2014-10-27 09:45:09.000000000 +0100 @@ -0,0 +1,14 @@ +.. AUTO_RST4API +.. This file was generated by auto_rst4api.py. Changes may be lost +.. currentmodule:: taurus.qt.qtgui.graphic + +:class:`TaurusRoundRectStateItem` +================================= + +.. inheritance-diagram:: TaurusRoundRectStateItem + :parts: 1 + +.. autoclass:: TaurusRoundRectStateItem + :members: + :undoc-members: + :show-inheritance: \ Pas de fin de ligne à la fin du fichier --- taurus-3.3.0+dfsg/doc/source/devel/api/taurus/qt/qtgui/graphic.rst 2014-07-09 13:26:59.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/source/devel/api/taurus/qt/qtgui/graphic.rst 2014-10-27 09:45:09.000000000 +0100 @@ -55,6 +55,10 @@ graphic/_TaurusRectStateItem.rst + graphic/_TaurusRoundRectItem.rst + + graphic/_TaurusRoundRectStateItem.rst + graphic/_TaurusSplineStateItem.rst graphic/_TaurusTextAttributeItem.rst @@ -95,6 +99,10 @@ * :class:`TaurusRectStateItem` + * :class:`TaurusRoundRectItem` + + * :class:`TaurusRoundRectStateItem` + * :class:`TaurusSplineStateItem` * :class:`TaurusTextAttributeItem` --- taurus-3.3.0+dfsg/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_DynamicPlotManager.rst 1970-01-01 01:00:00.000000000 +0100 +++ taurus-3.3.1+dfsg/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_DynamicPlotManager.rst 2014-10-27 09:45:09.000000000 +0100 @@ -0,0 +1,14 @@ +.. AUTO_RST4API +.. This file was generated by auto_rst4api.py. Changes may be lost +.. currentmodule:: taurus.qt.qtgui.taurusgui + +:class:`DynamicPlotManager` +=========================== + +.. inheritance-diagram:: DynamicPlotManager + :parts: 1 + +.. autoclass:: DynamicPlotManager + :members: + :undoc-members: + :show-inheritance: \ Pas de fin de ligne à la fin du fichier --- taurus-3.3.0+dfsg/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_MacroBroker.rst 1970-01-01 01:00:00.000000000 +0100 +++ taurus-3.3.1+dfsg/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_MacroBroker.rst 2014-10-27 09:45:09.000000000 +0100 @@ -0,0 +1,14 @@ +.. AUTO_RST4API +.. This file was generated by auto_rst4api.py. Changes may be lost +.. currentmodule:: taurus.qt.qtgui.taurusgui + +:class:`MacroBroker` +==================== + +.. inheritance-diagram:: MacroBroker + :parts: 1 + +.. autoclass:: MacroBroker + :members: + :undoc-members: + :show-inheritance: \ Pas de fin de ligne à la fin du fichier --- taurus-3.3.0+dfsg/doc/source/devel/api/taurus/qt/qtgui/taurusgui.rst 2014-07-09 13:26:59.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/source/devel/api/taurus/qt/qtgui/taurusgui.rst 2014-10-27 09:45:09.000000000 +0100 @@ -31,8 +31,12 @@ taurusgui/_DockWidgetPanel.rst + taurusgui/_DynamicPlotManager.rst + taurusgui/_ExternalAppEditor.rst + taurusgui/_MacroBroker.rst + taurusgui/_PanelDescriptionWizard.rst taurusgui/_TaurusGui.rst @@ -45,8 +49,12 @@ * :class:`DockWidgetPanel` + * :class:`DynamicPlotManager` + * :class:`ExternalAppEditor` + * :class:`MacroBroker` + * :class:`PanelDescriptionWizard` * :class:`TaurusGui` --- taurus-3.3.0+dfsg/doc/source/devel/api/taurus_AllClasses.rst 2014-07-09 13:26:59.000000000 +0200 +++ taurus-3.3.1+dfsg/doc/source/devel/api/taurus_AllClasses.rst 2014-10-27 09:45:09.000000000 +0100 @@ -108,6 +108,8 @@ * :class:`~taurus.qt.qtgui.util.DropDebugger` + * :class:`~taurus.qt.qtgui.taurusgui.DynamicPlotManager` + * :class:`~taurus.qt.qtgui.model.EditorToolBar` * :class:`~taurus.core.util.EnumException` @@ -202,6 +204,8 @@ * :class:`~taurus.core.util.LoopList` + * :class:`~taurus.qt.qtgui.taurusgui.MacroBroker` + * :class:`~taurus.qt.qtgui.panel.MacroServerMessageErrorHandler` * :class:`~taurus.core.util.MemoryLogHandler` @@ -576,6 +580,10 @@ * :class:`~taurus.qt.qtgui.graphic.TaurusRectStateItem` + * :class:`~taurus.qt.qtgui.graphic.TaurusRoundRectItem` + + * :class:`~taurus.qt.qtgui.graphic.TaurusRoundRectStateItem` + * :class:`~taurus.qt.qtgui.base.TaurusScalarAttributeControllerHelper` * :class:`~taurus.qt.qtgui.container.TaurusScrollArea` --- taurus-3.3.0+dfsg/lib/taurus/core/release.py 2014-07-09 10:01:38.000000000 +0200 +++ taurus-3.3.1+dfsg/lib/taurus/core/release.py 2014-10-27 09:43:48.000000000 +0100 @@ -53,7 +53,7 @@ # bdist_deb does not accept underscores (a Debian convention). -version_info = (3,3,0,'rc',0) +version_info = (3,3,1,'rc',0) version = '.'.join(map(str, version_info[:3])) revision = str(version_info[4]) --- taurus-3.3.0+dfsg/lib/taurus/core/util/codecs.py 2014-01-27 09:35:41.000000000 +0100 +++ taurus-3.3.1+dfsg/lib/taurus/core/util/codecs.py 2014-10-27 09:43:48.000000000 +0100 @@ -69,15 +69,13 @@ __docformat__ = "restructuredtext" import copy -import operator -import types #need by VideoImageCodec import struct import numpy from singleton import Singleton -from log import Logger, DebugIt +from log import Logger from containers import CaselessDict @@ -400,6 +398,7 @@ :return: (sequence[str, obj]) a sequence of two elements where the first item is the encoding format of the second item object""" + import bson if not data[0].startswith('bson'): return data format = data[0].partition('_')[2] @@ -407,7 +406,7 @@ data = data[0], bson.BSON(data[1]) - data = decode(data[1]) + data = self.decode(data[1]) if ensure_ascii: data = self._transform_ascii(data) return format, data @@ -490,16 +489,18 @@ :param data: (sequence[str, obj]) a sequence of two elements where the first item is the encoding format of the second item object :return: (sequence[str, obj]) a sequence of two elements where the first item is the encoding format of the second item object""" + + #TODO: support encoding for colour imgage modes - format = 'VIDEO_IMAGE' - if len(data[0]): format += '_%s' % data[0] + fmt = 'videoimage' + if len(data[0]): fmt += '_%s' % data[0] #imgMode depends on numpy.array dtype imgMode = self.__getModeId(str(data[1].dtype)) #frameNumber, unknown then -1 height,width = data[1].shape header = self.__packHeader(imgMode,-1,width,height) buffer = data[1].tostring() - return format,header+buffer + return fmt, header+buffer def decode(self, data, *args, **kwargs): """decodes the given data from a LImA's video_image. @@ -507,17 +508,117 @@ :param data: (sequence[str, obj]) a sequence of two elements where the first item is the encoding format of the second item object :return: (sequence[str, obj]) a sequence of two elements where the first item is the encoding format of the second item object""" - - if not data[0] == 'VIDEO_IMAGE': + + if data[0].startswith('VIDEO_IMAGE'): + self.warning(('"VIDEO_IMAGE" format name is deprecated.' + + 'Use "videoimage" instead')) + fixedformat = data[0].replace('VIDEO_IMAGE','videoimage') + _, _, fmt = fixedformat.partition('_') + elif data[0].startswith('videoimage'): + _, _, fmt = data[0].partition('_') + else: return data header = self.__unpackHeader(data[1][:struct.calcsize(self.VIDEO_HEADER_FORMAT)]) - + imgBuffer = data[1][struct.calcsize(self.VIDEO_HEADER_FORMAT):] dtype = self.__getDtypeId(header['imageMode']) - img1D = numpy.fromstring(imgBuffer, dtype) - img2D = img1D.reshape(header['height'],header['width']) + if header['imageMode'] == 7: + # RGBA 4 bytes per pixel + rgba = numpy.fromstring(imgBuffer, dtype) + bbuf = rgba[0::4] + gbuf = rgba[1::4] + rbuf = rgba[2::4] + #abuf = rgba[3::4] + r = rbuf.reshape(header['height'],header['width']) + g = gbuf.reshape(header['height'],header['width']) + b = bbuf.reshape(header['height'],header['width']) + #a = abuf.reshape(header['height'],header['width']) + img2D = numpy.dstack((r,g,b)) + + elif header['imageMode'] == 17: + # YUV444 3 bytes per pixel + yuv = numpy.fromstring(imgBuffer, dtype) + y = yuv[0::3] + u = yuv[1::3] + v = yuv[2::3] + + rbuff, gbuff, bbuff = self.__yuv2rgb(y,u,v) + + # Shape buffers to image size + r = rbuff.reshape(header['height'],header['width']) + g = gbuff.reshape(header['height'],header['width']) + b = bbuff.reshape(header['height'],header['width']) + + # Build the RGB image + img2D = numpy.dstack((r,g,b)) + + elif header['imageMode'] == 16: + # YUV422 4 bytes per 2 pixels + yuv = numpy.fromstring(imgBuffer, dtype) + u = yuv[0::4] + y1 = yuv[1::4] + v = yuv[2::4] + y2 = yuv[3::4] + + r1, g1, b1 = self.__yuv2rgb(y1,u,v) + r2, g2, b2 = self.__yuv2rgb(y2,u,v) + + # Create RGB buffers + rbuff = numpy.dstack((r1,r2)).reshape(header['height']*header['width']) + gbuff = numpy.dstack((g1,g2)).reshape(header['height']*header['width']) + bbuff = numpy.dstack((b1,b2)).reshape(header['height']*header['width']) + + # Shape buffers to image size + r = rbuff.reshape(header['height'],header['width']) + g = gbuff.reshape(header['height'],header['width']) + b = bbuff.reshape(header['height'],header['width']) + + # Build the RGB image + img2D = numpy.dstack((r,g,b)) + + elif header['imageMode'] == 15: + # YUV411 6 bytes per 4 pixels + yuv = numpy.fromstring(imgBuffer, dtype) + u = yuv[0::6] + y1 = yuv[1::6] + y2 = yuv[2::6] + v = yuv[3::6] + y3 = yuv[4::6] + y4 = yuv[5::6] + + r1, g1, b1 = self.__yuv2rgb(y1,u,v) + r2, g2, b2 = self.__yuv2rgb(y2,u,v) + r3, g3, b3 = self.__yuv2rgb(y3,u,v) + r4, g4, b4 = self.__yuv2rgb(y4,u,v) + + # Create RGB buffers + rbuff = numpy.dstack((r1,r2,r3,r4)).reshape(header['height']*header['width']) + gbuff = numpy.dstack((g1,g2,g3,g4)).reshape(header['height']*header['width']) + bbuff = numpy.dstack((b1,b2,b3,b4)).reshape(header['height']*header['width']) + + # Shape buffers to image size + r = rbuff.reshape(header['height'],header['width']) + g = gbuff.reshape(header['height'],header['width']) + b = bbuff.reshape(header['height'],header['width']) + + img2D = numpy.dstack((r,g,b)) + + else: + img1D = numpy.fromstring(imgBuffer, dtype) + img2D = img1D.reshape(header['height'],header['width']) + + return fmt, img2D + + def __yuv2rgb(self, y, u, v): + '''YUV444 to RGB888 conversion''' + Cr = v - 128.0 + Cb = u - 128.0 - return '',img2D + R = y + 1.402 * Cr + G = y - 0.344 * Cb - 0.714 * Cr + B = y + 1.772 * Cb + + return (numpy.clip(R,0,255), numpy.clip(G,0,255), numpy.clip(B,0,255)) def __unpackHeader(self,header): h = struct.unpack(self.VIDEO_HEADER_FORMAT,header) @@ -561,18 +662,20 @@ 'Y32' : 2,#Core.Y32, 'Y64' : 3,#Core.Y64, #TODO: other modes - #'RGB555' : Core.RGB555, - #'RGB565' : Core.RGB565, - #'RGB24' : Core.RGB24, - #'RGB32' : Core.RGB32, - #'BGR24' : Core.BGR24, - #'BGR32' : Core.BGR32, - #'BAYER RG8' : Core.BAYER_RG8, - #'BAYER RG16' : Core.BAYER_RG16, - #'I420' : Core.I420, - #'YUV411' : Core.YUV411, - #'YUV422' : Core.YUV422, - #'YUV444' : Core.YUV444 + #'RGB555' : 4,#Core.RGB555, + #'RGB565' : 5,#Core.RGB565, + #'RGB24' : 6,#Core.RGB24, + 'RGB32' : 7,#Core.RGB32, + #'BGR24' : 8,#Core.BGR24, + #'BGR32' : 9,#Core.BGR32, + #'BAYER RG8' : 10,#Core.BAYER_RG8, + #'BAYER RG16' : 11,#Core.BAYER_RG16, + #'BAYER BG8' : 12,#Core.BAYER_BG8, + #'BAYER BG16' : 13,#Core.BAYER_BG16, + #'I420' : 14,#Core.I420, + #'YUV411' : 15,#Core.YUV411, + 'YUV422' : 16,#Core.YUV422, + #'YUV444' : 17,#Core.YUV444 }[mode] def __getFormatId(self,mode): @@ -583,14 +686,16 @@ #'RGB555' : Core.RGB555, #'RGB565' : Core.RGB565, #'RGB24' : Core.RGB24, - #'RGB32' : Core.RGB32, - #'BGR24' : Core.BGR24, + 7 : 'RGB32',#Core.RGB32, + #8 : 'BGR24',#Core.BGR24, #'BGR32' : Core.BGR32, #'BAYER RG8' : Core.BAYER_RG8, #'BAYER RG16' : Core.BAYER_RG16, + #'BAYER BG8' : Core.BAYER_BG8, + #'BAYER BG16' : Core.BAYER_BG16, #'I420' : Core.I420, #'YUV411' : Core.YUV411, - #'YUV422' : Core.YUV422, + 16 : 'YUV422',#Core.YUV422, #'YUV444' : Core.YUV444 }[mode] @@ -601,15 +706,17 @@ 3 : 'uint64', #'RGB555' : Core.RGB555, #'RGB565' : Core.RGB565, - #'RGB24' : Core.RGB24, - #'RGB32' : Core.RGB32, + #6 : 'uint8', # Core.RGB24, + 7 : 'uint8', # Core.RGB32, #'BGR24' : Core.BGR24, #'BGR32' : Core.BGR32, #'BAYER RG8' : Core.BAYER_RG8, #'BAYER RG16' : Core.BAYER_RG16, + #'BAYER BG8' : Core.BAYER_BG8, + #'BAYER BG16' : Core.BAYER_BG16, #'I420' : Core.I420, #'YUV411' : Core.YUV411, - #'YUV422' : Core.YUV422, + 16 : 'uint8', # Core.YUV422, #'YUV444' : Core.YUV444 }[mode] @@ -716,7 +823,8 @@ 'zip' : ZIPCodec, 'pickle' : PickleCodec, 'plot' : PlotCodec, - 'VIDEO_IMAGE' : VideoImageCodec, + 'VIDEO_IMAGE' : VideoImageCodec, #deprecated + 'videoimage' : VideoImageCodec, 'null' : NullCodec, 'none' : NullCodec, '' : NullCodec }) --- taurus-3.3.0+dfsg/lib/taurus/core/util/test/test_codecs.py 1970-01-01 01:00:00.000000000 +0100 +++ taurus-3.3.1+dfsg/lib/taurus/core/util/test/test_codecs.py 2014-10-27 09:43:48.000000000 +0100 @@ -0,0 +1,94 @@ +#!/usr/bin/env python + +############################################################################# +## +## This file is part of Taurus, a Tango User Interface Library +## +## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html +## +## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain +## +## Taurus is free software: you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## Taurus is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with Taurus. If not, see . +## +############################################################################# + +"""Test for taurus.core.util.codecs""" + +#__all__ = [] + +__docformat__ = 'restructuredtext' + +import copy +from taurus.external import unittest +from taurus.test import insertTest +from taurus.core.util.codecs import CodecFactory +import numpy + + +@insertTest(helper_name= 'encDec', cname='json', data=[1,2,3]) +@insertTest(helper_name= 'encDec', cname='zip', data='foobar') +@insertTest(helper_name= 'encDec', cname='zip_json', data=[1,2,3]) +@insertTest(helper_name= 'encDec', cname='videoimage', + data=numpy.ones((2,2), dtype='uint8')) +@insertTest(helper_name= 'encDec', cname='zip_null_zip_videoimage', + data=numpy.ones((2,2), dtype='uint8')) +@insertTest(helper_name= 'dec', cname='videoimage', + data = 'VDEO\x00\x01\x00\x07\x00\x00\x00\x00\x00\x00\x00' + \ + '\x01\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00 ' + \ + '\x00\x00\x00\x00\x01\x01\x01\x01\x01\x01\x01\x01' + \ + '\x01\x01\x01\x01\x01\x01\x01\x01', + expected=numpy.ones((2,2,3),dtype='uint8')) + +class CodecTest(unittest.TestCase): + '''TestCase for checking codecs''' + def encDec(self, cname=None, data=None, expected=None): + '''Check that data can be encoded-decoded properly''' + if expected is None: + expected = copy.deepcopy(data) + _, enc = self.enc(cname=cname, data=data) + self.dec(cname=cname, data=enc, expected=expected) + + + def enc(self, cname=None, data=None, expected=None): + '''Check that data can be encoded-decoded properly''' + cf = CodecFactory() + codec = cf.getCodec(cname) + fmt, enc = codec.encode(('', data)) + if expected is not None: + msg = ('Wrong data after encoding with %s:\n' + + ' -expected:%s\n -obtained:%s') % (cname, expected, enc) + if numpy.isscalar(expected): + equal = enc==expected + else: + equal = numpy.all(enc==expected) + self.assertTrue(equal, msg) + return fmt, enc + + def dec(self, cname=None, data=None, expected=None): + '''Check that data can be encoded-decoded properly''' + cf = CodecFactory() + codec = cf.getCodec(cname) + fmt, dec =codec.decode((cname, data)) + if expected is not None: + msg = ('Wrong data after decoding with %s:\n' + + ' -expected:%s\n -obtained:%s') % (cname, expected, dec) + if numpy.isscalar(expected): + equal = dec==expected + else: + equal = numpy.all(dec==expected) + self.assertTrue(equal, msg) + return fmt, dec + +if __name__ == '__main__': + pass --- taurus-3.3.0+dfsg/lib/taurus/external/qt/__init__.py 2014-06-30 08:24:20.000000000 +0200 +++ taurus-3.3.1+dfsg/lib/taurus/external/qt/__init__.py 2014-10-27 09:43:48.000000000 +0100 @@ -31,6 +31,7 @@ from taurus import tauruscustomsettings as __config from taurus.core.util import log as __log +import os __QT = None __QT_NAME = None @@ -343,6 +344,17 @@ __removePyQtInputHook() __QT_INIT = True + + QT_API = os.environ.get('QT_API') + if QT_API is None: + global __QT_NAME + if __QT_NAME == 'PySide': + QT_API = 'pyside' + else: + QT_API = 'pyqt' + + os.environ['QT_API'] = QT_API + return qt --- taurus-3.3.0+dfsg/lib/taurus/qt/qtdesigner/taurusplugin/taurusplugin.py 2014-06-30 08:24:20.000000000 +0200 +++ taurus-3.3.1+dfsg/lib/taurus/qt/qtdesigner/taurusplugin/taurusplugin.py 2014-10-27 09:43:48.000000000 +0100 @@ -37,6 +37,8 @@ editing the widget model (same has 'Edit model...' task menu item """ +import inspect + from taurus.external.qt import Qt from taurus.external.qt import QtDesigner @@ -73,10 +75,32 @@ def _getWidgetClassName(self): return self.getWidgetClass().__name__ + def __getWidgetArgs(self, klass=None, designMode=True, parent=None): + if klass is None: + klass = self.getWidgetClass() + ctor = klass.__init__ + aspec = inspect.getargspec(ctor) + if aspec.defaults is None: + kwspec = {} + else: + kwspec = dict(zip(aspec.args[-len(aspec.defaults):], + aspec.defaults)) + args, kwargs = [], {} + if 'designMode' in kwspec: + kwargs['designMode'] = designMode + if 'parent' in kwspec: + kwargs['parent'] = parent + else: + args.append(parent) + return args, kwargs + def createWidget(self, parent): try: klass = self.getWidgetClass() - w = klass(parent, designMode = True) + args, kwargs = self.__getWidgetArgs(klass=klass, + designMode=True, + parent=parent) + w = klass(*args, **kwargs) except Exception, e: name = self._getWidgetClassName() print 100*"=" @@ -107,13 +131,16 @@ return self.getWidgetInfo('icon') def icon(self): - icon_name = self.getIconName() - if icon_name is None: + icon = self.getWidgetInfo('icon') + if icon is None: return Qt.QIcon() - if not icon_name.startswith(":"): - icon_name = ':/designer/%s' % icon_name - import taurus.qt.qtgui.resource - return taurus.qt.qtgui.resource.getIcon(icon_name) + elif isinstance(icon, Qt.QIcon): + return icon + else: + if not icon.startswith(":"): + icon = ':/designer/%s' % icon + import taurus.qt.qtgui.resource + return taurus.qt.qtgui.resource.getIcon(icon) def domXml(self): name = str(self.name()) --- taurus-3.3.0+dfsg/lib/taurus/qt/qtgui/button/taurusbutton.py 2014-07-07 12:44:03.000000000 +0200 +++ taurus-3.3.1+dfsg/lib/taurus/qt/qtgui/button/taurusbutton.py 2014-10-27 09:43:48.000000000 +0100 @@ -667,6 +667,7 @@ def demo(): + '''Lock button''' lock_button = TaurusLockButton() lock_button.model = "sys/tg_test/1" return lock_button --- taurus-3.3.0+dfsg/lib/taurus/qt/qtgui/button/test/res/Timeout 2014-06-30 08:24:20.000000000 +0200 +++ taurus-3.3.1+dfsg/lib/taurus/qt/qtgui/button/test/res/Timeout 2014-10-27 09:43:48.000000000 +0100 @@ -90,7 +90,7 @@ @PyTango.DebugIt() def TimeoutCmd(self, in_data): - self.info_stream('TimeoutCmd', in_data) + self.info_stream('TimeoutCmd' + str(in_data)) self.cmd_duration = in_data time.sleep(self.cmd_duration) --- taurus-3.3.0+dfsg/lib/taurus/qt/qtgui/compact/abstractswitcher.py 2014-07-07 12:44:03.000000000 +0200 +++ taurus-3.3.1+dfsg/lib/taurus/qt/qtgui/compact/abstractswitcher.py 2014-10-27 09:43:48.000000000 +0100 @@ -246,7 +246,8 @@ else: h = policy.horizontalPolicy() & p.horizontalPolicy() v = policy.verticalPolicy() & p.verticalPolicy() - policy = Qt.QSizePolicy(h, v) + policy = Qt.QSizePolicy(Qt.QSizePolicy.Policy(h), + Qt.QSizePolicy.Policy(v)) if policy is not None: self.setSizePolicy(policy) @@ -262,7 +263,6 @@ @classmethod def getQtDesignerPluginInfo(cls): - print cls ret = TaurusWidget.getQtDesignerPluginInfo() ret['module'] = 'taurus.qt.qtgui.compact' ret['group'] = 'Taurus R+W' @@ -377,4 +377,4 @@ #demo1() #demo2() demo3() - \ Pas de fin de ligne à la fin du fichier + --- taurus-3.3.0+dfsg/lib/taurus/qt/qtgui/compact/basicswitcher.py 2014-07-07 12:44:03.000000000 +0200 +++ taurus-3.3.1+dfsg/lib/taurus/qt/qtgui/compact/basicswitcher.py 2014-10-27 09:43:48.000000000 +0100 @@ -49,7 +49,7 @@ widget.setShowText(False) TaurusReadWriteSwitcher.setWriteWidget(self, widget) -def demo(): +def _demo(): '''demo of integrability in a form''' import sys from taurus.qt.qtgui.panel import TaurusForm @@ -72,5 +72,5 @@ if __name__ == "__main__": - demo() + _demo() \ Pas de fin de ligne à la fin du fichier --- taurus-3.3.0+dfsg/lib/taurus/qt/qtgui/extra_guiqwt/image.py 2014-06-30 08:24:20.000000000 +0200 +++ taurus-3.3.1+dfsg/lib/taurus/qt/qtgui/extra_guiqwt/image.py 2014-10-27 09:43:48.000000000 +0100 @@ -1,4 +1,4 @@ -#!/usr/bin/env python + #!/usr/bin/env python ############################################################################# ## @@ -27,14 +27,16 @@ Extension of :mod:`guiqwt.image` """ __all__=["TaurusImageItem","TaurusRGBImageItem","TaurusTrend2DItem", - "TaurusTrend2DScanItem","TaurusEncodedImageItem"] + "TaurusTrend2DScanItem","TaurusEncodedImageItem", + "TaurusEncodedRGBImageItem"] from taurus.external.qt import Qt from taurus.qt.qtgui.base import TaurusBaseComponent import taurus.core from taurus.core.util.containers import ArrayBuffer -from guiqwt.image import ImageItem, RGBImageItem, XYImageItem, INTERP_NEAREST, INTERP_LINEAR +from guiqwt.image import ImageItem, RGBImageItem, XYImageItem +from guiqwt.image import INTERP_NEAREST, INTERP_LINEAR import numpy @@ -48,8 +50,8 @@ def getSignaller(self): '''reimplemented from TaurusBaseComponent because TaurusImageItem is not (and cannot be) a QObject''' - return self._signalGen - + return self._signalGen + def setModel(self, model): #do the standard stuff TaurusBaseComponent.setModel(self, model) @@ -70,8 +72,11 @@ except Exception, e: self.info('Ignoring event. Reason: %s', e.message) return - lut_range = self.get_lut_range() #this is the range of the z axis (color scale) - if lut_range[0] == lut_range[1]: lut_range = None #if the range was not set, make it None (autoscale z axis) + #this is the range of the z axis (color scale) + lut_range = self.get_lut_range() + #if the range was not set, make it None (autoscale z axis) + if lut_range[0] == lut_range[1]: + lut_range = None self.set_data(v, lut_range=lut_range) self.getSignaller().emit(Qt.SIGNAL('dataChanged')) p = self.plot() @@ -79,7 +84,7 @@ if p is not None: p.update_colormap_axis(self) p.replot() - + def filterData(self, data): '''Reimplement this method if you want to pre-process the data that will be passed to set_data. @@ -110,21 +115,12 @@ v = numpy.int32(v) except OverflowError: raise OverflowError("type %s not supported by guiqwt and cannot be casted to int32"%repr(v.dtype)) - + return v - -class TaurusImageItem(ImageItem, TaurusBaseImageItem): - '''A ImageItem that gets its data from a taurus attribute''' - def __init__(self, param=None): - ImageItem.__init__(self, numpy.zeros((1,1)), param=param) - TaurusBaseImageItem.__init__(self, self.__class__.__name__) -class TaurusEncodedImageItem(TaurusImageItem): - '''A ImageItem that gets its data from a DevEncoded attribute''' - def __init__(self, param=None): - TaurusImageItem.__init__(self,param=param) - +class TaurusEncodedBaseImageItem(TaurusBaseImageItem): + '''A ImageItem that gets its data from a taurus DevEncoded attribute''' def setModel(self, model): #do the standard stuff TaurusBaseComponent.setModel(self, model) @@ -142,9 +138,10 @@ codec = CodecFactory().getCodec(data[0]) try: - fmt,decoded_data = codec.decode(data)[1] - except: - decoded_data = codec.decode(data)[1] + fmt, decoded_data = codec.decode(data) + except Exception, e: + self.info('Decoder error: %s', e.message) + raise e try: dtype = decoded_data.dtype @@ -167,6 +164,20 @@ raise ValueError('Unexpected data type (%s) for DevEncoded attribute (tuple expected)'%type(data)) +class TaurusImageItem(ImageItem, TaurusBaseImageItem): + '''A ImageItem that gets its data from a taurus attribute''' + def __init__(self, param=None): + ImageItem.__init__(self, numpy.zeros((1,1)), param=param) + TaurusBaseImageItem.__init__(self, self.__class__.__name__) + + +class TaurusEncodedImageItem(ImageItem, TaurusEncodedBaseImageItem): + '''A ImageItem that gets its data from a DevEncoded attribute''' + def __init__(self, param=None): + ImageItem.__init__(self, numpy.zeros((1,1)), param=param) + TaurusEncodedBaseImageItem.__init__(self, self.__class__.__name__) + + class TaurusXYImageItem(XYImageItem, TaurusBaseImageItem): '''A XYImageItem that gets its data from a taurus attribute''' def __init__(self, param=None): @@ -185,6 +196,17 @@ return RGBImageItem.set_data(self, data, **kwargs) +class TaurusEncodedRGBImageItem(RGBImageItem, TaurusEncodedBaseImageItem): + '''A RGBImageItem that gets its data from a DevEncoded attribute''' + def __init__(self, param=None): + RGBImageItem.__init__(self, numpy.zeros((1,1,3)), param=param) + TaurusEncodedBaseImageItem.__init__(self, self.__class__.__name__) + + def set_data(self, data, lut_range=None, **kwargs): + '''dummy reimplementation to accept the lut_range kwarg (just ignoring it)''' + return RGBImageItem.set_data(self, data, **kwargs) + + class TaurusTrend2DItem(XYImageItem, TaurusBaseComponent): '''A XYImageItem that is constructed by stacking 1D arrays from events from a Taurus 1D attribute''' def __init__(self, param=None, buffersize=512, stackMode='datetime'): --- taurus-3.3.0+dfsg/lib/taurus/qt/qtgui/graphic/jdraw/jdraw.py 2014-07-04 13:34:03.000000000 +0200 +++ taurus-3.3.1+dfsg/lib/taurus/qt/qtgui/graphic/jdraw/jdraw.py 2014-10-23 10:41:38.000000000 +0200 @@ -150,9 +150,12 @@ x1, y1, x2, y2 = params.get('summit') width = x2 - x1 height = y2 - y1 + cornerWidth = params.get('cornerWidth', 24) + nbPoints = params.get('step', 6) #item.setPos(x1,y1) - item.setRect(x1,y1,width,height) - + item.setRect(x1, y1, width, height) + item.setCornerWidth(cornerWidth, nbPoints) + return item def getLineObj(self,params): --- taurus-3.3.0+dfsg/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_yacctab.py 2014-06-12 09:48:30.000000000 +0200 +++ taurus-3.3.1+dfsg/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_yacctab.py 2014-08-12 11:10:59.000000000 +0200 @@ -1,5 +1,5 @@ -# /nfs/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_yacctab.py +# /home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_yacctab.py # This file is automatically generated. Do not edit. _tabversion = '3.2' @@ -26,38 +26,38 @@ del _lr_goto_items _lr_productions = [ ("S' -> jdfile","S'",1,None,None,None), - ('jdfile -> JDFILE SYMBOL LBRACKET global element_list RBRACKET','jdfile',6,'p_jdfile','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',107), - ('jdfile -> JDFILE LBRACKET global RBRACKET','jdfile',4,'p_jdfile_empty','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',115), - ('global -> GLOBAL LBRACKET RBRACKET','global',3,'p_global','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',123), - ('global -> GLOBAL LBRACKET parameter_list RBRACKET','global',4,'p_global','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',124), - ('element_list -> element_list element','element_list',2,'p_element_list','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',131), - ('element_list -> element','element_list',1,'p_element','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',138), - ('element -> obj LBRACKET RBRACKET','element',3,'p_single_element','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',142), - ('element -> obj LBRACKET parameter_list RBRACKET','element',4,'p_single_element','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',143), - ('obj -> JDLINE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',191), - ('obj -> JDRECTANGLE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',192), - ('obj -> JDROUNDRECTANGLE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',193), - ('obj -> JDGROUP','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',194), - ('obj -> JDELLIPSE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',195), - ('obj -> JDBAR','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',196), - ('obj -> JDSWINGOBJECT','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',197), - ('obj -> JDLABEL','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',198), - ('obj -> JDPOLYLINE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',199), - ('obj -> JDIMAGE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',200), - ('obj -> JDAXIS','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',201), - ('obj -> JDSLIDER','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',202), - ('obj -> JDSPLINE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',203), - ('parameter_list -> parameter_list parameter','parameter_list',2,'p_parameter_list','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',207), - ('parameter_list -> parameter','parameter_list',1,'p_parameter','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',212), - ('parameter -> SYMBOL TWOP param_value','parameter',3,'p_single_parameter','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',216), - ('parameter -> SYMBOL TWOP LBRACKET RBRACKET','parameter',4,'p_complex_parameter','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',225), - ('parameter -> SYMBOL TWOP LBRACKET parameter_list RBRACKET','parameter',5,'p_complex_parameter','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',226), - ('parameter -> SYMBOL TWOP LBRACKET element_list RBRACKET','parameter',5,'p_complex_parameter','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',227), - ('param_value -> value_list','param_value',1,'p_param_value_number_list','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',235), - ('value_list -> value_list COMMA value','value_list',3,'p_value_list','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',242), - ('value_list -> value','value_list',1,'p_value_list_value','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',246), - ('value -> NUMBER','value',1,'p_value_number','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',250), - ('value -> TEXT','value',1,'p_value_text','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',254), - ('value -> true','value',1,'p_value_bool','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',258), - ('value -> false','value',1,'p_value_bool','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',259), + ('jdfile -> JDFILE SYMBOL LBRACKET global element_list RBRACKET','jdfile',6,'p_jdfile','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',105), + ('jdfile -> JDFILE LBRACKET global RBRACKET','jdfile',4,'p_jdfile_empty','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',113), + ('global -> GLOBAL LBRACKET RBRACKET','global',3,'p_global','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',121), + ('global -> GLOBAL LBRACKET parameter_list RBRACKET','global',4,'p_global','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',122), + ('element_list -> element_list element','element_list',2,'p_element_list','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',129), + ('element_list -> element','element_list',1,'p_element','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',136), + ('element -> obj LBRACKET RBRACKET','element',3,'p_single_element','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',140), + ('element -> obj LBRACKET parameter_list RBRACKET','element',4,'p_single_element','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',141), + ('obj -> JDLINE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',189), + ('obj -> JDRECTANGLE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',190), + ('obj -> JDROUNDRECTANGLE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',191), + ('obj -> JDGROUP','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',192), + ('obj -> JDELLIPSE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',193), + ('obj -> JDBAR','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',194), + ('obj -> JDSWINGOBJECT','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',195), + ('obj -> JDLABEL','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',196), + ('obj -> JDPOLYLINE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',197), + ('obj -> JDIMAGE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',198), + ('obj -> JDAXIS','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',199), + ('obj -> JDSLIDER','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',200), + ('obj -> JDSPLINE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',201), + ('parameter_list -> parameter_list parameter','parameter_list',2,'p_parameter_list','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',205), + ('parameter_list -> parameter','parameter_list',1,'p_parameter','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',210), + ('parameter -> SYMBOL TWOP param_value','parameter',3,'p_single_parameter','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',214), + ('parameter -> SYMBOL TWOP LBRACKET RBRACKET','parameter',4,'p_complex_parameter','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',223), + ('parameter -> SYMBOL TWOP LBRACKET parameter_list RBRACKET','parameter',5,'p_complex_parameter','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',224), + ('parameter -> SYMBOL TWOP LBRACKET element_list RBRACKET','parameter',5,'p_complex_parameter','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',225), + ('param_value -> value_list','param_value',1,'p_param_value_number_list','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',233), + ('value_list -> value_list COMMA value','value_list',3,'p_value_list','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',240), + ('value_list -> value','value_list',1,'p_value_list_value','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',244), + ('value -> NUMBER','value',1,'p_value_number','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',248), + ('value -> TEXT','value',1,'p_value_text','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',252), + ('value -> true','value',1,'p_value_bool','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',256), + ('value -> false','value',1,'p_value_bool','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',257), ] --- taurus-3.3.0+dfsg/lib/taurus/qt/qtgui/graphic/taurusgraphic.py 2014-07-04 13:34:03.000000000 +0200 +++ taurus-3.3.1+dfsg/lib/taurus/qt/qtgui/graphic/taurusgraphic.py 2014-10-23 10:41:38.000000000 +0200 @@ -1104,7 +1104,6 @@ self.setBrush(self._currBgBrush) Qt.QGraphicsRectItem.paint(self,painter,option,widget) - class TaurusSplineStateItem(QSpline, TaurusGraphicsStateItem): def __init__(self, name=None, parent=None, scene=None): @@ -1118,6 +1117,52 @@ self.setBrush(self._currBgBrush) QSpline.paint(self, painter, option, widget) +class TaurusRoundRectItem(Qt.QGraphicsPathItem): + + def __init__(self, name=None, parent=None, scene=None): + Qt.QGraphicsPathItem.__init__(self, parent, scene) + self.__rect = None + self.setCornerWidth(0, 0) + + def __updatePath(self): + if self.__rect == None: + return + if self.__corner == None: + return + + path = Qt.QPainterPath() + cornerWidth, nbPoints = self.__corner + if cornerWidth == 0 or nbPoints == 0: + path.addRect(self.__rect) + elif cornerWidth * 2 > self.__rect.width(): + path.addRect(self.__rect) + elif cornerWidth * 2 > self.__rect.height(): + path.addRect(self.__rect) + else: + path.addRoundedRect(self.__rect, cornerWidth, cornerWidth) + self.setPath(path) + + def setRect(self, x, y, width, height): + self.__rect = Qt.QRectF(x, y, width, height) + self.__updatePath() + + def setCornerWidth(self, width, nbPoints): + self.__corner = width, nbPoints + self.__updatePath() + +class TaurusRoundRectStateItem(TaurusRoundRectItem, TaurusGraphicsStateItem): + + def __init__(self, name=None, parent=None, scene=None): + name = name or self.__class__.__name__ + TaurusRoundRectItem.__init__(self, parent, scene) + self.call__init__(TaurusGraphicsStateItem, name, parent) + + def paint(self, painter, option, widget): + if self._currBgBrush: + self._currBgBrush.setStyle(self.brush().style()) + self.setBrush(self._currBgBrush) + TaurusRoundRectItem.paint(self, painter, option, widget) + class TaurusGroupItem(Qt.QGraphicsItemGroup): def __init__(self, name = None, parent = None, scene = None): @@ -1197,7 +1242,7 @@ TYPE_TO_GRAPHICS = { None : { "Rectangle" : Qt.QGraphicsRectItem, - "RoundRectangle" : Qt.QGraphicsRectItem, + "RoundRectangle" : TaurusRoundRectItem, "Ellipse" : Qt.QGraphicsEllipseItem, "Polyline" : Qt.QGraphicsPolygonItem, "Label" : QGraphicsTextBoxing, @@ -1208,7 +1253,7 @@ "Spline" : QSpline, }, TaurusDevice : { "Rectangle" : TaurusRectStateItem, - "RoundRectangle" : TaurusRectStateItem, + "RoundRectangle" : TaurusRoundRectStateItem, "Ellipse" : TaurusEllipseStateItem, "Polyline" : TaurusPolygonStateItem, "Label" : TaurusTextStateItem, @@ -1219,7 +1264,7 @@ "Spline" : TaurusSplineStateItem, }, TaurusAttribute : { "Rectangle" : TaurusRectStateItem, - "RoundRectangle" : TaurusRectStateItem, + "RoundRectangle" : TaurusRoundRectStateItem, "Ellipse" : TaurusEllipseStateItem, "Polyline" : TaurusPolygonStateItem, "Label" : TaurusTextAttributeItem, --- taurus-3.3.0+dfsg/lib/taurus/qt/qtgui/input/taurusspinbox.py 2014-07-08 11:26:56.000000000 +0200 +++ taurus-3.3.1+dfsg/lib/taurus/qt/qtgui/input/taurusspinbox.py 2014-10-23 10:41:38.000000000 +0200 @@ -139,6 +139,7 @@ def getSingleStep(self): return self._singleStep + @Qt.pyqtSignature("setSingleStep(double)") def setSingleStep(self, step): self._singleStep = step --- taurus-3.3.0+dfsg/lib/taurus/qt/qtgui/panel/taurusconfigurationpanel.py 2014-07-07 12:44:03.000000000 +0200 +++ taurus-3.3.1+dfsg/lib/taurus/qt/qtgui/panel/taurusconfigurationpanel.py 2014-10-27 09:43:48.000000000 +0100 @@ -60,7 +60,7 @@ w.writeValue() def _onCancel(self): - self._ui.close() + self.close() def _onRestore(self): widgets=getWidgetsOfType(self, TaurusConfigLineEdit) --- taurus-3.3.0+dfsg/lib/taurus/qt/qtgui/panel/taurusform.py 2014-07-07 12:44:03.000000000 +0200 +++ taurus-3.3.1+dfsg/lib/taurus/qt/qtgui/panel/taurusform.py 2014-10-27 09:43:48.000000000 +0100 @@ -381,6 +381,7 @@ self.chooseModelsAction.setEnabled(modifiable) self.showButtonsAction.setEnabled(modifiable) self.changeLabelsAction.setEnabled(modifiable) + self.compactModeAction.setEnabled(modifiable) for item in self.getItems(): try: item.setModifiableByUser(modifiable) --- taurus-3.3.0+dfsg/lib/taurus/qt/qtgui/panel/taurusvalue.py 2014-07-09 10:01:38.000000000 +0200 +++ taurus-3.3.1+dfsg/lib/taurus/qt/qtgui/panel/taurusvalue.py 2014-10-27 09:43:48.000000000 +0100 @@ -101,8 +101,8 @@ see :meth:`QWidget.contextMenuEvent`""" menu = Qt.QMenu(self) menu.addMenu(ConfigurationMenu(self.taurusValueBuddy())) #@todo: This should be done more Taurus-ish - if hasattr(self.taurusValueBuddy().writeWidget(), 'resetPendingOperations'): - r_action = menu.addAction("reset write value",self.taurusValueBuddy().writeWidget().resetPendingOperations) + if hasattr(self.taurusValueBuddy().writeWidget(followCompact=True), 'resetPendingOperations'): + r_action = menu.addAction("reset write value",self.taurusValueBuddy().writeWidget(followCompact=True).resetPendingOperations) r_action.setEnabled(self.taurusValueBuddy().hasPendingOperations()) if self.taurusValueBuddy().isModifiableByUser(): menu.addAction("Change label",self.taurusValueBuddy().onChangeLabelConfig) @@ -152,6 +152,8 @@ self.setSizePolicy(Qt.QSizePolicy.Preferred,Qt.QSizePolicy.Maximum) self.autoTrim = False self.setBgRole(None) + self.setAlignment(Qt.Qt.AlignLeft) + def setModel(self, model): if model is None or model=='': return TaurusLabel.setModel(self, None) @@ -297,21 +299,38 @@ Qt.QWidget.setVisible(self, visible) def labelWidget(self): + '''Returns the label widget''' return self._labelWidget - def readWidget(self): + def readWidget(self, followCompact=False): + ''' + Returns the read widget. If followCompact=True, and compact mode is + used, it returns the switcher's readWidget instead of the switcher + itself. + ''' + if followCompact and self.isCompact(): + return self._readWidget.readWidget return self._readWidget - def writeWidget(self): + def writeWidget(self, followCompact=False): + ''' + Returns the write widget. If followCompact=True, and compact mode is + used, it returns the switcher's writeWidget instead of None. + ''' + if followCompact and self.isCompact(): + return self._readWidget.writeWidget return self._writeWidget def unitsWidget(self): + '''Returns the units widget''' return self._unitsWidget def customWidget(self): + '''Returns the custom widget''' return self._customWidget def extraWidget(self): + '''Returns the extra widget''' return self._extraWidget def setParent(self, parent): @@ -503,7 +522,7 @@ def getDefaultCustomWidgetClass(self): modelclass = self.getModelClass() - if modelclass and modelclass.getTaurusElementType() != TaurusElementType.Attribute: + if modelclass and modelclass.getTaurusElementType() != TaurusElementType.Device: return None try: key = self.getModelObj().getHWObj().info().dev_class @@ -605,10 +624,10 @@ W = self.writeWidgetClassFactory(self.writeWidgetClassID, ignoreCompact=True) if W is None: return R - class Switcher(TaurusReadWriteSwitcher): - readWClass = R - writeWClass = W - return Switcher + switcherClass = self.getSwitcherClass() + switcherClass.readWClass = R + switcherClass.writeWClass = W + return switcherClass return ret def writeWidgetClassFactory(self, classID, ignoreCompact=False): @@ -678,6 +697,9 @@ if self._readWidget is not None: #give the new widget a reference to its buddy TaurusValue object self._readWidget.taurusValueBuddy = weakref.ref(self) + if isinstance(self._readWidget, TaurusReadWriteSwitcher): + self._readWidget.readWidget.taurusValueBuddy = weakref.ref(self) + self._readWidget.writeWidget.taurusValueBuddy = weakref.ref(self) #tweak the new widget if self.minimumHeight() is not None: @@ -766,30 +788,51 @@ def addLabelWidgetToLayout(self): if self._labelWidget is not None and self.parent() is not None: - self.parent().layout().addWidget(self._labelWidget, self._row, 1) + alignment = getattr(self._labelWidget, 'layoutAlignment', + Qt.Qt.Alignment(0)) + self.parent().layout().addWidget(self._labelWidget, self._row, 1, 1, 1, + alignment=alignment) + def addReadWidgetToLayout(self): - if self._readWidget is not None and self.parent() is not None: + if self._readWidget is not None and self.parent() is not None: + alignment = getattr(self._readWidget, 'layoutAlignment', + Qt.Qt.Alignment(0)) if self._writeWidget is None: - self.parent().layout().addWidget(self._readWidget, self._row, 2,1,2) + self.parent().layout().addWidget(self._readWidget, self._row, + 2, 1, 2, alignment=alignment) else: - self.parent().layout().addWidget(self._readWidget, self._row, 2) - + self.parent().layout().addWidget(self._readWidget, self._row, + 2, 1, 1, alignment=alignment) + def addWriteWidgetToLayout(self): if self._writeWidget is not None and self.parent() is not None: - self.parent().layout().addWidget(self._writeWidget, self._row, 3) + alignment = getattr(self._writeWidget, 'layoutAlignment', + Qt.Qt.Alignment(0)) + self.parent().layout().addWidget(self._writeWidget, self._row, + 3, 1, 1, alignment=alignment) + def addUnitsWidgetToLayout(self): if self._unitsWidget is not None and self.parent() is not None: - self.parent().layout().addWidget(self._unitsWidget, self._row, 4) - + alignment = getattr(self._unitsWidget, 'layoutAlignment', + Qt.Qt.Alignment(0)) + self.parent().layout().addWidget(self._unitsWidget, self._row, + 4, 1, 1, alignment=alignment) + def addCustomWidgetToLayout(self): if self._customWidget is not None and self.parent() is not None: - self.parent().layout().addWidget(self._customWidget, self._row, 1,1,-1) + alignment = getattr(self._customWidget, 'layoutAlignment', + Qt.Qt.Alignment(0)) + self.parent().layout().addWidget(self._customWidget, self._row, + 1, 1, -1, alignment=alignment) def addExtraWidgetToLayout(self): if self._extraWidget is not None and self.parent() is not None: - self.parent().layout().addWidget(self._extraWidget, self._row, 5) + alignment = getattr(self._extraWidget, 'layoutAlignment', + Qt.Qt.Alignment(0)) + self.parent().layout().addWidget(self._extraWidget, self._row, + 5, 1, 1, alignment=alignment) @Qt.pyqtSignature("parentModelChanged(const QString &)") def parentModelChanged(self, parentmodel_name): @@ -1007,7 +1050,7 @@ self.hasPendingOperations will look at the writeWidget's operations. If you want to ask the TaurusValue for its pending operations, call self.writeWidget().getPendingOperations()''' - w = self.writeWidget() + w = self.writeWidget(followCompact=True) if w is None: return False return w.hasPendingOperations() @@ -1031,6 +1074,15 @@ def resetLabelConfig(self): self._labelConfig = 'label' self.updateLabelWidget() + + def getSwitcherClass(self): + '''Returns the TaurusValue switcher class (used in compact mode). + Override this method if you want to use a custom switcher in + TaurusValue subclasses. + ''' + class TVSwitcher(TaurusReadWriteSwitcher): + pass + return TVSwitcher @classmethod def getQtDesignerPluginInfo(cls): --- taurus-3.3.0+dfsg/lib/taurus/qt/qtgui/table/taurusvaluestable.py 2014-06-30 08:24:20.000000000 +0200 +++ taurus-3.3.1+dfsg/lib/taurus/qt/qtgui/table/taurusvaluestable.py 2014-10-27 09:43:48.000000000 +0100 @@ -420,7 +420,7 @@ else: data = index.model().data(index, Qt.Qt.EditRole) self._initialText = Qt.from_qvariant(data, str) - editor.setText(self._initialText) + editor.setText(str(self._initialText)) def setModelData(self, editor, model,index): ''' --- taurus-3.3.0+dfsg/lib/taurus/qt/qtgui/taurusgui/conf/tgconf_example01/config.py 2014-01-27 09:35:43.000000000 +0100 +++ taurus-3.3.1+dfsg/lib/taurus/qt/qtgui/taurusgui/conf/tgconf_example01/config.py 2014-10-27 09:43:48.000000000 +0100 @@ -160,13 +160,13 @@ # Adding other widgets to the catalog of the "new panel" dialog. # pass a tuple of (classname,screenshot) # -classname may contain the module name. -# -screenshot can either be a file name relative to the application dir or -# a resource URL or None +# -screenshot can either be a resource URL, a file name (either relative to +# the application dir or with an absolute path) or None #=============================================================================== -EXTRA_CATALOG_WIDGETS = [('PyQt4.Qt.QLineEdit',':/taurus.png'), - ('PyQt4.Qt.QSpinBox','images/syn2.jpg'), - ('PyQt4.Qt.QTextEdit','/tmp/kk.png'), - ('PyQt4.Qt.QLabel',None)] +EXTRA_CATALOG_WIDGETS = [('PyQt4.Qt.QLineEdit',':/taurus.png'), # a resource + ('PyQt4.Qt.QSpinBox','images/syn2.jpg'), # relative + #('PyQt4.Qt.QTextEdit','/tmp/foo.png'), # absolute + ('PyQt4.Qt.QLabel',None)] # none #=============================================================================== # Define one or more embedded consoles in the GUI. --- taurus-3.3.0+dfsg/lib/taurus/qt/qtgui/taurusgui/paneldescriptionwizard.py 2014-06-30 08:24:20.000000000 +0200 +++ taurus-3.3.1+dfsg/lib/taurus/qt/qtgui/taurusgui/paneldescriptionwizard.py 2014-10-27 09:43:48.000000000 +0100 @@ -632,7 +632,6 @@ form.show() paneldesc,ok = PanelDescriptionWizard.getDialog(form, extraWidgets=[('PyQt4.Qt.QLineEdit',':/taurus.png'), - ('PyQt4.Qt.QSpinBox','/tmp/kk.png'), ('PyQt4.Qt.QTextEdit',None)]) if ok: w = paneldesc.getWidget(sdm=Qt.qApp.SDM) --- taurus-3.3.0+dfsg/lib/taurus/qt/qtgui/taurusgui/taurusgui.py 2014-07-08 07:55:19.000000000 +0200 +++ taurus-3.3.1+dfsg/lib/taurus/qt/qtgui/taurusgui/taurusgui.py 2014-10-27 09:43:48.000000000 +0100 @@ -1286,7 +1286,7 @@ fname = None - hint = "XML_CONFIG = %s" % os.path.relpath(fname, self._confDirectory) + hint = "XML_CONFIG = '%s'" % os.path.relpath(fname, self._confDirectory) msg = 'Configuration written in %s' % fname self.info(msg) Qt.QMessageBox.information(self, "Configuration updated", --- taurus-3.3.0+dfsg/PKG-INFO 2014-07-09 14:05:56.000000000 +0200 +++ taurus-3.3.1+dfsg/PKG-INFO 2014-10-27 09:46:30.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: taurus -Version: 3.3.0 +Version: 3.3.1 Summary: A library designed to provide an abstraction layer over PyTango. Home-page: http://packages.python.org/taurus Author: Carlos Pascual-Izarra --- taurus-3.3.0+dfsg/scripts/taurusui 1970-01-01 01:00:00.000000000 +0100 +++ taurus-3.3.1+dfsg/scripts/taurusui 2014-10-27 09:43:48.000000000 +0100 @@ -0,0 +1,56 @@ +#!/usr/bin/env python + +############################################################################# +## +## This file is part of Taurus, a Tango User Interface Library +## +## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html +## +## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain +## +## Taurus is free software: you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## Taurus is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with Taurus. If not, see . +## +############################################################################# + +import sys +import taurus + +def main(): + taurus.setLogLevel(taurus.Warning) + + from taurus.external.qt import Qt, uic + from taurus.core.util.argparse import get_taurus_parser + from taurus.qt.qtgui.application import TaurusApplication + + parser = get_taurus_parser() + parser.set_usage("%prog [options] [ ...]") + parser.set_description("a taurus application that launches GUI(s) for the " + "given .ui file(s)") + app = TaurusApplication(cmd_line_parser=parser, + app_name="taurusui", app_version="1.0", + org_domain="Taurus", org_name="Taurus community") + + args = app.get_command_line_args() + if len(args) < 1: + print("Need to supply UI file name") + sys.exit(1) + + for ui_file in args: + gui = uic.loadUi(ui_file) + gui.show() + sys.exit(app.exec_()) + + +if __name__ == "__main__": + main()