[taurus] 01/03: Imported Upstream version 3.3.1+dfsg

Frédéric-Emmanuel Picca picca at moszumanska.debian.org
Mon Oct 27 11:48:00 UTC 2014


This is an automated email from the git hooks/post-receive script.

picca pushed a commit to branch master
in repository taurus.

commit 76c2be24900558c010699eb05bbb19d620f7bfa3
Author: Picca Frédéric-Emmanuel <picca at debian.org>
Date:   Mon Oct 27 10:56:56 2014 +0100

    Imported Upstream version 3.3.1+dfsg
---
 PKG-INFO                                           |   2 +-
 doc/man/tau2taurus.1                               |   6 +-
 doc/man/taurusconfigbrowser.1                      |   6 +-
 doc/man/tauruscurve.1                              |   6 +-
 doc/man/taurusdemo.1                               |   4 +-
 doc/man/taurusdesigner.1                           |   6 +-
 doc/man/taurusdevicepanel.1                        |   6 +-
 doc/man/taurusdoc.1                                |   6 +-
 doc/man/taurusform.1                               |   6 +-
 doc/man/taurusgui.1                                |   6 +-
 doc/man/taurusimage.1                              |   6 +-
 doc/man/tauruspanel.1                              |   6 +-
 doc/man/taurusplot.1                               |   6 +-
 doc/man/taurusremotelogmonitor.1                   |   4 +-
 doc/man/taurustrend.1                              |   6 +-
 doc/man/taurustrend1d.1                            |   6 +-
 doc/man/taurustrend2d.1                            |   6 +-
 doc/man/{taurusdemo.1 => taurusui.1}               |  12 +-
 doc/man/taurusuic4.1                               |  16 +-
 doc/source/devel/api/taurus/qt/qtgui/graphic.rst   |   8 +
 .../qt/qtgui/graphic/_TaurusRoundRectItem.rst      |  14 ++
 .../qt/qtgui/graphic/_TaurusRoundRectStateItem.rst |  14 ++
 doc/source/devel/api/taurus/qt/qtgui/taurusgui.rst |   8 +
 .../qt/qtgui/taurusgui/_DynamicPlotManager.rst     |  14 ++
 .../api/taurus/qt/qtgui/taurusgui/_MacroBroker.rst |  14 ++
 doc/source/devel/api/taurus_AllClasses.rst         |   8 +
 lib/taurus/core/release.py                         |   2 +-
 lib/taurus/core/util/codecs.py                     | 172 +++++++++++++++++----
 lib/taurus/core/util/test/test_codecs.py           |  94 +++++++++++
 lib/taurus/external/qt/__init__.py                 |  12 ++
 .../qt/qtdesigner/taurusplugin/taurusplugin.py     |  41 ++++-
 lib/taurus/qt/qtgui/button/taurusbutton.py         |   1 +
 lib/taurus/qt/qtgui/button/test/res/Timeout        |   2 +-
 lib/taurus/qt/qtgui/compact/abstractswitcher.py    |   6 +-
 lib/taurus/qt/qtgui/compact/basicswitcher.py       |   4 +-
 lib/taurus/qt/qtgui/extra_guiqwt/image.py          |  68 +++++---
 lib/taurus/qt/qtgui/graphic/jdraw/jdraw.py         |   7 +-
 lib/taurus/qt/qtgui/graphic/jdraw/jdraw_yacctab.py |  70 ++++-----
 lib/taurus/qt/qtgui/graphic/taurusgraphic.py       |  53 ++++++-
 lib/taurus/qt/qtgui/input/taurusspinbox.py         |   1 +
 .../qt/qtgui/panel/taurusconfigurationpanel.py     |   2 +-
 lib/taurus/qt/qtgui/panel/taurusform.py            |   1 +
 lib/taurus/qt/qtgui/panel/taurusvalue.py           |  92 ++++++++---
 lib/taurus/qt/qtgui/table/taurusvaluestable.py     |   2 +-
 .../taurusgui/conf/tgconf_example01/config.py      |  12 +-
 .../qt/qtgui/taurusgui/paneldescriptionwizard.py   |   1 -
 lib/taurus/qt/qtgui/taurusgui/taurusgui.py         |   2 +-
 scripts/taurusui                                   |  56 +++++++
 48 files changed, 707 insertions(+), 196 deletions(-)

diff --git a/PKG-INFO b/PKG-INFO
index 4905b54..f6b797c 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -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
diff --git a/doc/man/tau2taurus.1 b/doc/man/tau2taurus.1
index bfc6fef..b2617d1 100644
--- a/doc/man/tau2taurus.1
+++ b/doc/man/tau2taurus.1
@@ -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
diff --git a/doc/man/taurusconfigbrowser.1 b/doc/man/taurusconfigbrowser.1
index b4ea065..c5c026a 100644
--- a/doc/man/taurusconfigbrowser.1
+++ b/doc/man/taurusconfigbrowser.1
@@ -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]
diff --git a/doc/man/tauruscurve.1 b/doc/man/tauruscurve.1
index 27e5895..b8b1bdd 100644
--- a/doc/man/tauruscurve.1
+++ b/doc/man/tauruscurve.1
@@ -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\,<model1> \/\fR[\fI\,<model2>\/\fR] ...]
diff --git a/doc/man/taurusdemo.1 b/doc/man/taurusdemo.1
index 1e11893..588af0d 100644
--- a/doc/man/taurusdemo.1
+++ b/doc/man/taurusdemo.1
@@ -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
diff --git a/doc/man/taurusdesigner.1 b/doc/man/taurusdesigner.1
index a91203c..00d4942 100644
--- a/doc/man/taurusdesigner.1
+++ b/doc/man/taurusdesigner.1
@@ -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\,<ui file(s)>\/\fR
diff --git a/doc/man/taurusdevicepanel.1 b/doc/man/taurusdevicepanel.1
index 2e546f4..6e36a0c 100644
--- a/doc/man/taurusdevicepanel.1
+++ b/doc/man/taurusdevicepanel.1
@@ -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]]
diff --git a/doc/man/taurusdoc.1 b/doc/man/taurusdoc.1
index 4f9b17f..ab852d4 100644
--- a/doc/man/taurusdoc.1
+++ b/doc/man/taurusdoc.1
@@ -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]
diff --git a/doc/man/taurusform.1 b/doc/man/taurusform.1
index e55811d..fbd89c7 100644
--- a/doc/man/taurusform.1
+++ b/doc/man/taurusform.1
@@ -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...]]
diff --git a/doc/man/taurusgui.1 b/doc/man/taurusgui.1
index ac81ada..3a64253 100644
--- a/doc/man/taurusgui.1
+++ b/doc/man/taurusgui.1
@@ -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
diff --git a/doc/man/taurusimage.1 b/doc/man/taurusimage.1
index 0364ae1..a5af096 100644
--- a/doc/man/taurusimage.1
+++ b/doc/man/taurusimage.1
@@ -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\,<model>\/\fR
diff --git a/doc/man/tauruspanel.1 b/doc/man/tauruspanel.1
index 833d38b..08dcc2b 100644
--- a/doc/man/tauruspanel.1
+++ b/doc/man/tauruspanel.1
@@ -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]
diff --git a/doc/man/taurusplot.1 b/doc/man/taurusplot.1
index 07c8278..5e5462a 100644
--- a/doc/man/taurusplot.1
+++ b/doc/man/taurusplot.1
@@ -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\,<model1> \/\fR[\fI\,<model2>\/\fR] ...]
diff --git a/doc/man/taurusremotelogmonitor.1 b/doc/man/taurusremotelogmonitor.1
index fb81be9..28ede16 100644
--- a/doc/man/taurusremotelogmonitor.1
+++ b/doc/man/taurusremotelogmonitor.1
@@ -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
diff --git a/doc/man/taurustrend.1 b/doc/man/taurustrend.1
index 7b8af79..7e0b1a6 100644
--- a/doc/man/taurustrend.1
+++ b/doc/man/taurustrend.1
@@ -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\,<model1> \/\fR[\fI\,<model2>\/\fR] ...]
diff --git a/doc/man/taurustrend1d.1 b/doc/man/taurustrend1d.1
index b24f25d..69c990f 100644
--- a/doc/man/taurustrend1d.1
+++ b/doc/man/taurustrend1d.1
@@ -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\,<model>\/\fR
diff --git a/doc/man/taurustrend2d.1 b/doc/man/taurustrend2d.1
index 5953448..11a40bb 100644
--- a/doc/man/taurustrend2d.1
+++ b/doc/man/taurustrend2d.1
@@ -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\,<model>\/\fR
diff --git a/doc/man/taurusdemo.1 b/doc/man/taurusui.1
similarity index 71%
copy from doc/man/taurusdemo.1
copy to doc/man/taurusui.1
index 1e11893..29e94a2 100644
--- a/doc/man/taurusdemo.1
+++ b/doc/man/taurusui.1
@@ -1,12 +1,12 @@
-.\" 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 TAURUSUI "1" "October 2014" "taurusui 1.0" "User Commands"
 .SH NAME
-taurusdemo \- manual page for taurusdemo 1.0
+taurusui \- manual page for taurusui 1.0
 .SH SYNOPSIS
-.B taurusdemo
-[\fI\,options\/\fR]
+.B taurusui
+[\fI\,options\/\fR] \fI\,<ui_file1> \/\fR[\fI\,<ui_file2> \/\fR...]
 .SH DESCRIPTION
-A demo application for taurus
+a taurus application that launches GUI(s) for the given .ui file(s)
 .SH OPTIONS
 .TP
 \fB\-h\fR, \fB\-\-help\fR
diff --git a/doc/man/taurusuic4.1 b/doc/man/taurusuic4.1
index 1edbd29..baefc9c 100644
--- a/doc/man/taurusuic4.1
+++ b/doc/man/taurusuic4.1
@@ -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\,<ui-file>\/\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 @@ generate a PyQt v3 style wrapper
 .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
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic.rst
index e1feaeb..e7339fa 100644
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic.rst
+++ b/doc/source/devel/api/taurus/qt/qtgui/graphic.rst
@@ -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`
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusRoundRectItem.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusRoundRectItem.rst
new file mode 100644
index 0000000..8165852
--- /dev/null
+++ b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusRoundRectItem.rst
@@ -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:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusRoundRectStateItem.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusRoundRectStateItem.rst
new file mode 100644
index 0000000..bf3e582
--- /dev/null
+++ b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusRoundRectStateItem.rst
@@ -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:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/taurusgui.rst b/doc/source/devel/api/taurus/qt/qtgui/taurusgui.rst
index 4cf8cdb..4f15be4 100644
--- a/doc/source/devel/api/taurus/qt/qtgui/taurusgui.rst
+++ b/doc/source/devel/api/taurus/qt/qtgui/taurusgui.rst
@@ -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`
diff --git a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_DynamicPlotManager.rst b/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_DynamicPlotManager.rst
new file mode 100644
index 0000000..ecf864b
--- /dev/null
+++ b/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_DynamicPlotManager.rst
@@ -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:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_MacroBroker.rst b/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_MacroBroker.rst
new file mode 100644
index 0000000..e0612ba
--- /dev/null
+++ b/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_MacroBroker.rst
@@ -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:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus_AllClasses.rst b/doc/source/devel/api/taurus_AllClasses.rst
index d0c9999..2664ed2 100644
--- a/doc/source/devel/api/taurus_AllClasses.rst
+++ b/doc/source/devel/api/taurus_AllClasses.rst
@@ -108,6 +108,8 @@ All Classes for :mod:`taurus`
 
     * :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 @@ All Classes for :mod:`taurus`
 
     * :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 @@ All Classes for :mod:`taurus`
 
     * :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`
diff --git a/lib/taurus/core/release.py b/lib/taurus/core/release.py
index 0176434..a931d0f 100644
--- a/lib/taurus/core/release.py
+++ b/lib/taurus/core/release.py
@@ -53,7 +53,7 @@ name = 'taurus'
 # 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])
 
diff --git a/lib/taurus/core/util/codecs.py b/lib/taurus/core/util/codecs.py
index cef5279..4337d12 100644
--- a/lib/taurus/core/util/codecs.py
+++ b/lib/taurus/core/util/codecs.py
@@ -69,15 +69,13 @@ __all__ = ["Codec", "NullCodec", "ZIPCodec", "BZ2Codec", "JSONCodec",
 __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 @@ class BSONCodec(Codec):
         
         :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 @@ class BSONCodec(Codec):
         
         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 @@ class VideoImageCodec(Codec):
         :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 @@ class VideoImageCodec(Codec):
         :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
+
+        R = y + 1.402 * Cr
+        G = y - 0.344 * Cb - 0.714 * Cr
+        B = y + 1.772 * Cb
 
-        return '',img2D
+        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 @@ class VideoImageCodec(Codec):
                 '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 @@ class VideoImageCodec(Codec):
                 #'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 @@ class VideoImageCodec(Codec):
                 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 @@ class CodecFactory(Singleton, Logger):
         'zip'    : ZIPCodec,
         'pickle' : PickleCodec,
         'plot'   : PlotCodec,
-        'VIDEO_IMAGE' : VideoImageCodec,
+        'VIDEO_IMAGE' : VideoImageCodec, #deprecated
+        'videoimage' : VideoImageCodec,
         'null'   : NullCodec,
         'none'   : NullCodec,
         ''       : NullCodec })
diff --git a/lib/taurus/core/util/test/test_codecs.py b/lib/taurus/core/util/test/test_codecs.py
new file mode 100644
index 0000000..e3c13a9
--- /dev/null
+++ b/lib/taurus/core/util/test/test_codecs.py
@@ -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 <http://www.gnu.org/licenses/>.
+##
+#############################################################################
+
+"""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
+
+
+ at insertTest(helper_name= 'encDec', cname='json', data=[1,2,3])
+ at insertTest(helper_name= 'encDec', cname='zip', data='foobar')
+ at insertTest(helper_name= 'encDec', cname='zip_json', data=[1,2,3])
+ at insertTest(helper_name= 'encDec', cname='videoimage', 
+            data=numpy.ones((2,2), dtype='uint8'))
+ at insertTest(helper_name= 'encDec', cname='zip_null_zip_videoimage', 
+            data=numpy.ones((2,2), dtype='uint8'))
+ at 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
diff --git a/lib/taurus/external/qt/__init__.py b/lib/taurus/external/qt/__init__.py
index 721641b..4c8a229 100644
--- a/lib/taurus/external/qt/__init__.py
+++ b/lib/taurus/external/qt/__init__.py
@@ -31,6 +31,7 @@ __all__ = ["initialize", "getQtName", "getQt", "_updateQtSubModule", "requires"]
 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 @@ def initialize(name=None, strict=True, logging=True,
         __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
 
 
diff --git a/lib/taurus/qt/qtdesigner/taurusplugin/taurusplugin.py b/lib/taurus/qt/qtdesigner/taurusplugin/taurusplugin.py
index e550e4c..c0402df 100644
--- a/lib/taurus/qt/qtdesigner/taurusplugin/taurusplugin.py
+++ b/lib/taurus/qt/qtdesigner/taurusplugin/taurusplugin.py
@@ -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 @@ class TaurusWidgetPlugin(QtDesigner.QPyDesignerCustomWidgetPlugin):
     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 @@ class TaurusWidgetPlugin(QtDesigner.QPyDesignerCustomWidgetPlugin):
         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())
diff --git a/lib/taurus/qt/qtgui/button/taurusbutton.py b/lib/taurus/qt/qtgui/button/taurusbutton.py
index 6f94986..b6f47fb 100644
--- a/lib/taurus/qt/qtgui/button/taurusbutton.py
+++ b/lib/taurus/qt/qtgui/button/taurusbutton.py
@@ -667,6 +667,7 @@ def main():
     
     
 def demo():
+    '''Lock button'''
     lock_button = TaurusLockButton()
     lock_button.model = "sys/tg_test/1"
     return lock_button
diff --git a/lib/taurus/qt/qtgui/button/test/res/Timeout b/lib/taurus/qt/qtgui/button/test/res/Timeout
old mode 100644
new mode 100755
index 1b81906..ac71f62
--- a/lib/taurus/qt/qtgui/button/test/res/Timeout
+++ b/lib/taurus/qt/qtgui/button/test/res/Timeout
@@ -90,7 +90,7 @@ class Timeout(PyTango.Device_4Impl):
 
     @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)
     
diff --git a/lib/taurus/qt/qtgui/compact/abstractswitcher.py b/lib/taurus/qt/qtgui/compact/abstractswitcher.py
index 8e49e18..8334dd6 100644
--- a/lib/taurus/qt/qtgui/compact/abstractswitcher.py
+++ b/lib/taurus/qt/qtgui/compact/abstractswitcher.py
@@ -246,7 +246,8 @@ class TaurusReadWriteSwitcher(TaurusWidget):
                 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 @@ class TaurusReadWriteSwitcher(TaurusWidget):
     
     @classmethod
     def getQtDesignerPluginInfo(cls):
-        print cls
         ret = TaurusWidget.getQtDesignerPluginInfo()
         ret['module'] = 'taurus.qt.qtgui.compact'
         ret['group'] = 'Taurus R+W'
@@ -377,4 +377,4 @@ if __name__ == "__main__":
     #demo1()
     #demo2()
     demo3()
-    
\ No newline at end of file
+    
diff --git a/lib/taurus/qt/qtgui/compact/basicswitcher.py b/lib/taurus/qt/qtgui/compact/basicswitcher.py
index 567a153..a355b4d 100644
--- a/lib/taurus/qt/qtgui/compact/basicswitcher.py
+++ b/lib/taurus/qt/qtgui/compact/basicswitcher.py
@@ -49,7 +49,7 @@ class TaurusBoolRW(TaurusReadWriteSwitcher):
         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 @@ def demo():
 
 
 if __name__ == "__main__":
-    demo()
+    _demo()
     
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_guiqwt/image.py b/lib/taurus/qt/qtgui/extra_guiqwt/image.py
index 0b31263..ebffb74 100644
--- a/lib/taurus/qt/qtgui/extra_guiqwt/image.py
+++ b/lib/taurus/qt/qtgui/extra_guiqwt/image.py
@@ -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 @@ class TaurusBaseImageItem(TaurusBaseComponent):
     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 @@ class TaurusBaseImageItem(TaurusBaseComponent):
         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 @@ class TaurusBaseImageItem(TaurusBaseComponent):
         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 @@ class TaurusBaseImageItem(TaurusBaseComponent):
                 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 @@ class TaurusEncodedImageItem(TaurusImageItem):
             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 @@ class TaurusEncodedImageItem(TaurusImageItem):
             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 @@ class TaurusRGBImageItem(RGBImageItem, TaurusBaseImageItem):
         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'):
diff --git a/lib/taurus/qt/qtgui/graphic/jdraw/jdraw.py b/lib/taurus/qt/qtgui/graphic/jdraw/jdraw.py
index a5e01a0..7157411 100644
--- a/lib/taurus/qt/qtgui/graphic/jdraw/jdraw.py
+++ b/lib/taurus/qt/qtgui/graphic/jdraw/jdraw.py
@@ -150,9 +150,12 @@ class TaurusJDrawGraphicsFactory(Singleton, TaurusBaseGraphicsFactory, Logger):
         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):
diff --git a/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_yacctab.py b/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_yacctab.py
index 4972077..6f6c9d4 100644
--- a/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_yacctab.py
+++ b/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_yacctab.py
@@ -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 @@ for _k, _v in _lr_goto_items.items():
 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),
 ]
diff --git a/lib/taurus/qt/qtgui/graphic/taurusgraphic.py b/lib/taurus/qt/qtgui/graphic/taurusgraphic.py
index 203c28e..f93e07c 100644
--- a/lib/taurus/qt/qtgui/graphic/taurusgraphic.py
+++ b/lib/taurus/qt/qtgui/graphic/taurusgraphic.py
@@ -1104,7 +1104,6 @@ class TaurusRectStateItem(Qt.QGraphicsRectItem, TaurusGraphicsStateItem):
             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 @@ class TaurusSplineStateItem(QSpline, TaurusGraphicsStateItem):
             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 @@ class TaurusTextAttributeItem(QGraphicsTextBoxing, TaurusGraphicsAttributeItem):
 
 TYPE_TO_GRAPHICS = {
     None : { "Rectangle"      : Qt.QGraphicsRectItem,
-             "RoundRectangle" : Qt.QGraphicsRectItem,
+             "RoundRectangle" : TaurusRoundRectItem,
              "Ellipse"        : Qt.QGraphicsEllipseItem,
              "Polyline"       : Qt.QGraphicsPolygonItem,
              "Label"          : QGraphicsTextBoxing,
@@ -1208,7 +1253,7 @@ TYPE_TO_GRAPHICS = {
              "Spline"         : QSpline, },
 
     TaurusDevice : { "Rectangle"      : TaurusRectStateItem,
-                           "RoundRectangle" : TaurusRectStateItem,
+                           "RoundRectangle" : TaurusRoundRectStateItem,
                            "Ellipse"        : TaurusEllipseStateItem,
                            "Polyline"       : TaurusPolygonStateItem,
                            "Label"          : TaurusTextStateItem,
@@ -1219,7 +1264,7 @@ TYPE_TO_GRAPHICS = {
                            "Spline"         : TaurusSplineStateItem, },
 
     TaurusAttribute : { "Rectangle"      : TaurusRectStateItem,
-                           "RoundRectangle" : TaurusRectStateItem,
+                           "RoundRectangle" : TaurusRoundRectStateItem,
                            "Ellipse"        : TaurusEllipseStateItem,
                            "Polyline"       : TaurusPolygonStateItem,
                            "Label"          : TaurusTextAttributeItem,
diff --git a/lib/taurus/qt/qtgui/input/taurusspinbox.py b/lib/taurus/qt/qtgui/input/taurusspinbox.py
index 54cbbd1..e7b8533 100644
--- a/lib/taurus/qt/qtgui/input/taurusspinbox.py
+++ b/lib/taurus/qt/qtgui/input/taurusspinbox.py
@@ -139,6 +139,7 @@ class TaurusValueSpinBox(Qt.QAbstractSpinBox):
     def getSingleStep(self):
         return self._singleStep
     
+    @Qt.pyqtSignature("setSingleStep(double)")
     def setSingleStep(self, step):
         self._singleStep = step
     
diff --git a/lib/taurus/qt/qtgui/panel/taurusconfigurationpanel.py b/lib/taurus/qt/qtgui/panel/taurusconfigurationpanel.py
index 5610e02..1b64e2d 100644
--- a/lib/taurus/qt/qtgui/panel/taurusconfigurationpanel.py
+++ b/lib/taurus/qt/qtgui/panel/taurusconfigurationpanel.py
@@ -60,7 +60,7 @@ class TaurusConfigurationPanel(Qt.QWidget):
 	            w.writeValue()
 
     def _onCancel(self):
-       self._ui.close()
+       self.close()
 
     def _onRestore(self):
 	    widgets=getWidgetsOfType(self, TaurusConfigLineEdit)
diff --git a/lib/taurus/qt/qtgui/panel/taurusform.py b/lib/taurus/qt/qtgui/panel/taurusform.py
index 1b4379d..83ba242 100644
--- a/lib/taurus/qt/qtgui/panel/taurusform.py
+++ b/lib/taurus/qt/qtgui/panel/taurusform.py
@@ -381,6 +381,7 @@ class TaurusForm(TaurusWidget):
         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)
diff --git a/lib/taurus/qt/qtgui/panel/taurusvalue.py b/lib/taurus/qt/qtgui/panel/taurusvalue.py
index 09510d0..84c0607 100644
--- a/lib/taurus/qt/qtgui/panel/taurusvalue.py
+++ b/lib/taurus/qt/qtgui/panel/taurusvalue.py
@@ -101,8 +101,8 @@ class DefaultLabelWidget(TaurusLabel):
         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 @@ class DefaultUnitsWidget(TaurusLabel):
         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 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
         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 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
     
     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 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
             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 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
         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 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
     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 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
         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 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
     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):
diff --git a/lib/taurus/qt/qtgui/table/taurusvaluestable.py b/lib/taurus/qt/qtgui/table/taurusvaluestable.py
index 0af423a..e3950c0 100644
--- a/lib/taurus/qt/qtgui/table/taurusvaluestable.py
+++ b/lib/taurus/qt/qtgui/table/taurusvaluestable.py
@@ -420,7 +420,7 @@ class TaurusValuesIOTableDelegate(Qt.QStyledItemDelegate):
         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):
         '''
diff --git a/lib/taurus/qt/qtgui/taurusgui/conf/tgconf_example01/config.py b/lib/taurus/qt/qtgui/taurusgui/conf/tgconf_example01/config.py
index 9d58953..99ab32e 100644
--- a/lib/taurus/qt/qtgui/taurusgui/conf/tgconf_example01/config.py
+++ b/lib/taurus/qt/qtgui/taurusgui/conf/tgconf_example01/config.py
@@ -160,13 +160,13 @@ pymca = ExternalApp(['pymca'])
 # 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.
diff --git a/lib/taurus/qt/qtgui/taurusgui/paneldescriptionwizard.py b/lib/taurus/qt/qtgui/taurusgui/paneldescriptionwizard.py
index 3e09576..3129504 100644
--- a/lib/taurus/qt/qtgui/taurusgui/paneldescriptionwizard.py
+++ b/lib/taurus/qt/qtgui/taurusgui/paneldescriptionwizard.py
@@ -632,7 +632,6 @@ def main():
     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)
diff --git a/lib/taurus/qt/qtgui/taurusgui/taurusgui.py b/lib/taurus/qt/qtgui/taurusgui/taurusgui.py
index f1be49d..d3fefbd 100644
--- a/lib/taurus/qt/qtgui/taurusgui/taurusgui.py
+++ b/lib/taurus/qt/qtgui/taurusgui/taurusgui.py
@@ -1286,7 +1286,7 @@ class TaurusGui(TaurusMainWindow):
                 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",
diff --git a/scripts/taurusui b/scripts/taurusui
new file mode 100755
index 0000000..8e9039a
--- /dev/null
+++ b/scripts/taurusui
@@ -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 <http://www.gnu.org/licenses/>.
+##
+#############################################################################
+
+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] <ui_file1> [<ui_file2> ...]")
+    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()

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/taurus.git



More information about the debian-science-commits mailing list