summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Haberler <git@mah.priv.at>2014-03-16 21:07:31 +0100
committerMichael Haberler <git@mah.priv.at>2014-03-16 21:07:31 +0100
commitc09563d41b77ee26e383b7f318a9e6115531226d (patch)
tree765a3028dab2c91d4888890abe72edd41a389dab
parent0b7a94f3a2ae6de2a7ff103ef8c889972df75034 (diff)
downloadlinuxcnc-c09563d41b77ee26e383b7f318a9e6115531226d.tar.gz
linuxcnc-c09563d41b77ee26e383b7f318a9e6115531226d.zip
hal_widgets: HALIO_HSscale widget
pin changes have preference over UI-driven changes, which is needed to retrieve the default from HAL. goal: provide a means to connect to HAL_IO pins which act as parameters.
-rwxr-xr-xlib/python/gladevcp/hal_python.xml2
-rwxr-xr-xlib/python/gladevcp/hal_pythonplugin.py1
-rw-r--r--lib/python/gladevcp/hal_widgets.py25
3 files changed, 28 insertions, 0 deletions
diff --git a/lib/python/gladevcp/hal_python.xml b/lib/python/gladevcp/hal_python.xml
index 96bc3d943..aca92c2c3 100755
--- a/lib/python/gladevcp/hal_python.xml
+++ b/lib/python/gladevcp/hal_python.xml
@@ -14,6 +14,7 @@ domain="glade-3" depends="gtk+">
<glade-widget-class name="HAL_ToggleButton" generic-name="hal_togglebutton" title="HAL_ToggleButton"/>
<glade-widget-class name="HAL_RadioButton" generic-name="hal_radiobutton" title="HAL_RadioButton"/>
<glade-widget-class name="HAL_HScale" generic-name="hal_hscale" title="HAL_HScale"/>
+ <glade-widget-class name="HALIO_HScale" generic-name="halio_hscale" title="HALIO_HScale"/>
<glade-widget-class name="HAL_VScale" generic-name="hal_vscale" title="HAL_VScale"/>
<glade-widget-class name="HAL_ProgressBar" generic-name="hal_progressbar" title="HAL_ProgressBar"/>
<glade-widget-class name="HAL_LED" generic-name="hal_led" title="HAL LED">
@@ -125,6 +126,7 @@ domain="glade-3" depends="gtk+">
<glade-widget-class-ref name="HAL_ToggleButton"/>
<glade-widget-class-ref name="HAL_RadioButton"/>
<glade-widget-class-ref name="HAL_HScale"/>
+ <glade-widget-class-ref name="HALIO_HScale"/>
<glade-widget-class-ref name="HAL_VScale"/>
<glade-widget-class-ref name="HAL_ProgressBar"/>
<glade-widget-class-ref name="HAL_Label"/>
diff --git a/lib/python/gladevcp/hal_pythonplugin.py b/lib/python/gladevcp/hal_pythonplugin.py
index 0667d3653..628861508 100755
--- a/lib/python/gladevcp/hal_pythonplugin.py
+++ b/lib/python/gladevcp/hal_pythonplugin.py
@@ -9,6 +9,7 @@ from hal_widgets import HAL_ProgressBar
from hal_widgets import HAL_CheckButton
from hal_widgets import HAL_VScale
from hal_widgets import HAL_HScale
+from hal_widgets import HALIO_HScale
from hal_widgets import HAL_SpinButton
from hal_widgets import HAL_Label
diff --git a/lib/python/gladevcp/hal_widgets.py b/lib/python/gladevcp/hal_widgets.py
index 55023df17..9f37a42cc 100644
--- a/lib/python/gladevcp/hal_widgets.py
+++ b/lib/python/gladevcp/hal_widgets.py
@@ -52,8 +52,28 @@ class _HalScaleBase(_HalWidgetBase):
self.connect("value-changed", self.hal_update)
def hal_update(self, *a):
+
self.hal_pin.set(self.get_value())
+
+class _HalIOScaleBase(_HalWidgetBase):
+ def _hal_init(self):
+ self.hal_pin = self.hal.newpin(self.hal_name, hal.HAL_FLOAT, hal.HAL_IO)
+ self.connect("value-changed", self.hal_update)
+ self.hal_pin.connect('value-changed', lambda s: self.emit('hal-pin-changed', s))
+ self.hal_current = self.hal_pin.get()
+
+ def hal_update(self, *a):
+ hval = self.hal_pin.get()
+ if self.hal_current != hval:
+ self.hal_current = hval
+ self.set_value(hval)
+ return
+ wval = self.get_value()
+ if wval != hval:
+ self.hal_pin.set(wval)
+
+
class _HalSensitiveBase(_HalWidgetBase):
def _hal_init(self):
self.hal_pin = self.hal.newpin(self.hal_name, hal.HAL_BIT, hal.HAL_IN)
@@ -166,6 +186,11 @@ class HAL_ToggleButton(gtk.ToggleButton, _HalToggleBase):
class HAL_HScale(gtk.HScale, _HalScaleBase):
__gtype_name__ = "HAL_HScale"
+
+class HALIO_HScale(gtk.HScale, _HalIOScaleBase):
+ __gtype_name__ = "HALIO_HScale"
+ __gsignals__ = dict([hal_pin_changed_signal])
+
class HAL_VScale(gtk.VScale, _HalScaleBase):
__gtype_name__ = "HAL_VScale"