Hello,

the elev8 bindings for the ActionSlider are missing the "selected" signal.
This patch adds a handler for it. I have also updated the sample .js to demo
the functionality (The label on the fourth button changes).

Regards,
Daniel Willmann

Signed-off-by: Daniel Willmann <d.willm...@samsung.com>
---
 trunk/PROTO/elev8/data/javascript/actionslider.js  |    9 ++++
 .../elev8/src/modules/elm/CElmActionSlider.cc      |   48 +++++++++++++++++++-
 .../PROTO/elev8/src/modules/elm/CElmActionSlider.h |   12 +++++
 3 files changed, 68 insertions(+), 1 deletion(-)

diff --git a/trunk/PROTO/elev8/data/javascript/actionslider.js b/trunk/PROTO/elev8/data/javascript/actionslider.js
index f23fee9..6524783 100644
--- a/trunk/PROTO/elev8/data/javascript/actionslider.js
+++ b/trunk/PROTO/elev8/data/javascript/actionslider.js
@@ -3,6 +3,14 @@ var elm = require('elm');
 var EXPAND_BOTH = { x: 1.0, y: 1.0 };
 var FILL_BOTH = { x: -1.0, y: -1.0 };
 
+function select_cb(widget, label) {
+    print(label);
+    if (!label) // undefined
+        widget.label = "Go";
+    else
+        widget.label = label;
+}
+
 var w = elm.Window({
     title: "ActionSlider example",
     width: 320,
@@ -41,6 +49,7 @@ var w = elm.Window({
                     align: { x: -1.0, y: 0.0 },
                     label: "Go",
                     labels: { center: "Accept", right: "Reject" },
+                    on_select: select_cb,
                 }),
                 left_right_center: elm.ActionSlider({
                     weight: { x: 1.0, y: 0.0 },
diff --git a/trunk/PROTO/elev8/src/modules/elm/CElmActionSlider.cc b/trunk/PROTO/elev8/src/modules/elm/CElmActionSlider.cc
index 73f6ebd..ea92345 100644
--- a/trunk/PROTO/elev8/src/modules/elm/CElmActionSlider.cc
+++ b/trunk/PROTO/elev8/src/modules/elm/CElmActionSlider.cc
@@ -8,17 +8,25 @@ using namespace v8;
 GENERATE_PROPERTY_CALLBACKS(CElmActionSlider, labels);
 GENERATE_PROPERTY_CALLBACKS(CElmActionSlider, slider);
 GENERATE_PROPERTY_CALLBACKS(CElmActionSlider, magnet);
+GENERATE_PROPERTY_CALLBACKS(CElmActionSlider, on_select);
+
 
 GENERATE_TEMPLATE(CElmActionSlider,
                   PROPERTY(labels),
                   PROPERTY(slider),
-                  PROPERTY(magnet));
+                  PROPERTY(magnet),
+                  PROPERTY(on_select));
 
 CElmActionSlider::CElmActionSlider(Local<Object> _jsObject, CElmObject *parent)
    : CElmObject(_jsObject, elm_actionslider_add(parent->GetEvasObject()))
 {
 }
 
+CElmActionSlider::~CElmActionSlider()
+{
+   on_select_set(Undefined());
+}
+
 void CElmActionSlider::Initialize(Handle<Object> target)
 {
    target->Set(String::NewSymbol("ActionSlider"),
@@ -98,4 +106,42 @@ Handle<Value> CElmActionSlider::magnet_get() const
    return Integer::New(elm_actionslider_magnet_pos_get(eo));
 }
 
+void CElmActionSlider::OnSelect(void *event_info)
+{
+   Handle<Function> callback(Function::Cast(*cb.select));
+   char *label = (char *)event_info;
+   Handle<Value> args[2] = { jsObject, Undefined()};
+
+   if (label)
+     args[1] = String::New(label);
+
+   callback->Call(jsObject, 2, args);
+}
+
+void CElmActionSlider::OnSelectWrapper(void *data, Evas_Object *, void *event_info)
+{
+   static_cast<CElmActionSlider*>(data)->OnSelect(event_info);
+}
+
+Handle<Value> CElmActionSlider::on_select_get() const
+{
+   return cb.select;
+}
+
+void CElmActionSlider::on_select_set(Handle<Value> val)
+{
+   if (!cb.select.IsEmpty())
+     {
+        evas_object_smart_callback_del(eo, "selected", &OnSelectWrapper);
+        cb.select.Dispose();
+        cb.select.Clear();
+     }
+
+   if (!val->IsFunction())
+     return;
+
+   cb.select = Persistent<Value>::New(val);
+   evas_object_smart_callback_add(eo, "selected", &OnSelectWrapper, this);
+}
+
 }
diff --git a/trunk/PROTO/elev8/src/modules/elm/CElmActionSlider.h b/trunk/PROTO/elev8/src/modules/elm/CElmActionSlider.h
index 328f4de..2663d3f 100644
--- a/trunk/PROTO/elev8/src/modules/elm/CElmActionSlider.h
+++ b/trunk/PROTO/elev8/src/modules/elm/CElmActionSlider.h
@@ -15,8 +15,14 @@ private:
    bool position_from_string(Handle<Value> val, Elm_Actionslider_Pos &pos);
 protected:
    CElmActionSlider(Local<Object> _jsObject, CElmObject *parent);
+   ~CElmActionSlider();
+
    static Handle<FunctionTemplate> GetTemplate();
 
+   struct {
+      Persistent<Value> select;
+   } cb;
+
 public:
    static void Initialize(Handle<Object> target);
 
@@ -29,6 +35,12 @@ public:
    void magnet_set(Handle<Value> val);
    Handle<Value> magnet_get() const;
 
+   void OnSelect(void *event_info);
+   static void OnSelectWrapper(void *data, Evas_Object *, void *event_info);
+
+   Handle<Value> on_select_get() const;
+   void on_select_set(Handle<Value> val);
+
    friend Handle<Value> CElmObject::New<CElmActionSlider>(const Arguments& args);
 };
 
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to