cxx: Added examples and tutorial for C++ binding
[platform/upstream/elementary.git] / src / examples / box_cxx_example_02.cc
index 28950f4..f61990d 100644 (file)
@@ -1,52 +1,15 @@
 //Compile with:
 //gcc -g box_example_02.c -o box_example_02 `pkg-config --cflags --libs elementary`
 
-
-extern "C"
-{
-
-#ifdef HAVE_CONFIG_H
-# include <elementary_config.h>
-#endif
-
-#define ELM_INTERNAL_API_ARGESFSDFEFC
-#define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
-#define ELM_INTERFACE_ATSPI_COMPONENT_PROTECTED
-#define ELM_INTERFACE_ATSPI_ACTION_PROTECTED
-#define ELM_INTERFACE_ATSPI_VALUE_PROTECTED
-#define ELM_INTERFACE_ATSPI_EDITABLE_TEXT_PROTECTED
-#define ELM_INTERFACE_ATSPI_TEXT_PROTECTED
-#define ELM_INTERFACE_ATSPI_SELECTION_PROTECTED
-#define ELM_INTERFACE_ATSPI_IMAGE_PROTECTED
-#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
-
-#include <Elementary.h>
-
-#include <Eo.h>
-#include <Evas.h>
-#include <Elementary.h>
-#include <elm_widget.h>
-
-#include "elm_interface_atspi_accessible.h"
-#include "elm_interface_atspi_accessible.eo.h"
-
-#include "elm_interface_atspi_widget_action.h"
-#include "elm_interface_atspi_widget_action.eo.h"
-}
-
-#include <iostream>
-
-#include <elm_win.eo.hh>
-#include <elm_box.eo.hh>
-#include <elm_button.eo.hh>
-
+#include <Elementary.hh>
 #include <Eina.hh>
 
 #include <deque>
+#include <iostream>
 
 struct Transitions_Data
 {
-   efl::eo::wref<elm_box> box;
+   efl::eo::wref<elm::box> box;
    std::deque<Evas_Object_Box_Layout> transitions;
    Evas_Object_Box_Layout last_layout;
 };
@@ -61,7 +24,7 @@ _test_box_transition_change(void *data)
    assert (!!data);
    assert (!tdata->transitions.empty());
 
-   if(efl::eina::optional<elm_box> box = tdata->box.lock())
+   if(efl::eina::optional<elm::box> box = tdata->box.lock())
      {
         next_layout = tdata->transitions.front();
         layout_data = elm_box_transition_new(2.0, tdata->transitions.back(),
@@ -70,149 +33,110 @@ _test_box_transition_change(void *data)
         box->layout_set(elm_box_layout_transition, layout_data,
                         elm_box_transition_free);
         tdata->last_layout = next_layout;
-       
+
         tdata->transitions.push_back(tdata->transitions[0]);
         tdata->transitions.pop_front();
      }
 }
 
-struct clean_ref
-{
-  clean_ref(efl::eo::base base)
-    : _ref(base._eo_ptr())
-  {}
-
-  template <typename T>
-  void operator()(T const&, Eo_Event_Description const&, void*) const
-  {
-    if(_ref)
-      eo_unref(_ref);
-  }
-
-  Eo* _ref;
-};
-
 EAPI_MAIN int
 elm_main(int argc, char *argv[])
 {
-   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_HIDDEN);
 
    Transitions_Data tdata;
-   Eo* test;
-
-   {
-     ::elm_win win (elm_win_util_standard_add("box-transition", "Box Transition"));
-     win.autodel_set(true);
-
-     elm_box bigbox ( efl::eo::parent = win );
-     bigbox.size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-     win.resize_object_add(bigbox);
-     bigbox.visibility_set(true);
-     win.callback_del_add(clean_ref(bigbox));
-
-     elm_box buttons ( efl::eo::parent = win );
-     buttons.horizontal_set(EINA_TRUE);
-     bigbox.pack_end(buttons);
-     buttons.visibility_set(true);
-     win.callback_del_add(clean_ref(buttons));
-
-     elm_button add ( efl::eo::parent = win );
-     add.text_set("elm.text", "Add");
-     buttons.pack_end(add);
-     add.visibility_set(true);
-     add.callback_clicked_add
-       (std::bind([&tdata]
-        {
-          if(efl::eina::optional<elm_box> box = tdata.box.lock())
-          {
-            elm_button btn ( efl::eo::parent = *box );
-            btn.text_set("elm.text", "I do nothing");
-            efl::eina::list<evas::object> childrens(box->children_get());
-            if (!childrens.empty())
-              {
-                box->pack_after(btn, childrens.front());
-              }
-            else
-              box->pack_end(btn);
-            btn.visibility_set(true);
-          }
-        }));
-     win.callback_del_add(clean_ref(add));
-
-     elm_button clear ( efl::eo::parent = win );
-     clear.text_set("elm.text", "Clear");
-     buttons.pack_end(clear);
-     clear.visibility_set(true);
-     clear.callback_clicked_add(std::bind([&tdata] { tdata.box.lock()->clear(); }));
-     win.callback_del_add(clean_ref(clear));
-
-     elm_box dynamic ( efl::eo::parent = win );
-     dynamic.size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-     dynamic.size_hint_align_set(EVAS_HINT_FILL, EVAS_HINT_FILL);
-     bigbox.pack_end(dynamic);
-     dynamic.visibility_set(true);
-     win.callback_del_add(clean_ref(dynamic));
-
-     auto unpack = std::bind([&tdata] (evas::clickable_interface obj)
-       {
-         elm_button btn = efl::eo::downcast<elm_button>(obj);
-         tdata.box.lock()->unpack(btn);
-         btn.position_set(0, 50);
-         btn.color_set(128, 64, 0, 128);
-       }, std::placeholders::_1)
-     ;
-
-     elm_button bt1 ( efl::eo::parent = win );
-     bt1.text_set("elm.text", "Button 1");
-     bt1.callback_clicked_add(unpack);
-     bt1.size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-     bt1.size_hint_align_set(EVAS_HINT_FILL, EVAS_HINT_FILL);
-     dynamic.pack_end(bt1);
-     bt1.visibility_set(true);
-     win.callback_del_add(clean_ref(bt1));
-
-     elm_button bt2 ( efl::eo::parent = win );
-     bt2.text_set("elm.text", "Button 2");
-     bt2.size_hint_weight_set(EVAS_HINT_EXPAND, 0.0);
-     bt2.size_hint_align_set(1.0, 0.5);
-     bt2.callback_clicked_add(unpack);
-     dynamic.pack_end(bt2);
-     bt2.visibility_set(true);
-     win.callback_del_add(clean_ref(bt2));
-
-     elm_button bt3 ( efl::eo::parent = win );
-     bt3.text_set("elm.text", "Button 3");
-     bt3.callback_clicked_add(unpack);
-     dynamic.pack_end(bt3);
-     bt3.visibility_set(true);
-     win.callback_del_add(clean_ref(bt3));
-
-     tdata.box = dynamic;
-     tdata.last_layout = evas_object_box_layout_horizontal;
-     tdata.transitions.push_back(evas_object_box_layout_vertical);
-     tdata.transitions.push_back(evas_object_box_layout_horizontal);
-     tdata.transitions.push_back(evas_object_box_layout_stack);
-     tdata.transitions.push_back(evas_object_box_layout_homogeneous_vertical);
-     tdata.transitions.push_back(evas_object_box_layout_homogeneous_horizontal);
-     tdata.transitions.push_back(evas_object_box_layout_flow_vertical);
-     tdata.transitions.push_back(evas_object_box_layout_flow_horizontal);
-     tdata.transitions.push_back(evas_object_box_layout_stack);
-
-     dynamic.layout_set(evas_object_box_layout_horizontal, nullptr, nullptr);
-     _test_box_transition_change(&tdata);
-   
-     win.size_set(300, 320);
-     win.visibility_set(true);
-
-     std::cout << "references to win " << win.ref_get() << std::endl;
-     test = win._eo_ptr();
-     win._release();
-   }
-   std::cout << "references to win " << ::eo_ref_get(test) << std::endl;
-  
-   elm_run();
-   elm_shutdown();
 
+   ::elm::win_standard win;
+   win.title_set("Box Transition");
+   win.autohide_set(true);
+
+   elm::box bigbox ( efl::eo::parent = win );
+   bigbox.size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   win.resize_object_add(bigbox);
+   bigbox.visible_set(true);
+
+   elm::box buttons ( efl::eo::parent = win );
+   buttons.horizontal_set(EINA_TRUE);
+   bigbox.pack_end(buttons);
+   buttons.visible_set(true);
+
+   elm::button add ( efl::eo::parent = win );
+   add.text_set("elm.text", "Add");
+   buttons.pack_end(add);
+   add.visible_set(true);
+   add.callback_clicked_add
+     (std::bind([&tdata]
+      {
+         if(efl::eina::optional<elm::box> box = tdata.box.lock())
+         {
+            elm::button btn ( efl::eo::parent = *box );
+            btn.text_set(nullptr, "I do nothing");
+            box->pack_end(btn);
+            btn.visible_set(true);
+         }
+      }));
+
+   elm::button clear ( efl::eo::parent = win );
+   clear.text_set("elm.text", "Clear");
+   buttons.pack_end(clear);
+   clear.visible_set(true);
+   clear.callback_clicked_add(std::bind([&tdata] { tdata.box.lock()->clear(); }));
+
+   elm::box dynamic ( efl::eo::parent = win );
+   dynamic.size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   dynamic.size_hint_align_set(EVAS_HINT_FILL, EVAS_HINT_FILL);
+   bigbox.pack_end(dynamic);
+   dynamic.visible_set(true);
+
+   auto unpack = std::bind([&tdata] (evas::clickable_interface obj)
+     {
+        elm::button btn = efl::eo::downcast<elm::button>(obj);
+        tdata.box.lock()->unpack(btn);
+        btn.position_set(0, 50);
+        btn.object_smart::color_set(128, 64, 0, 128);
+     }, std::placeholders::_1)
+   ;
+
+   elm::button bt1 ( efl::eo::parent = win );
+   bt1.text_set("elm.text", "Button 1");
+   bt1.callback_clicked_add(unpack);
+   bt1.size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   bt1.size_hint_align_set(EVAS_HINT_FILL, EVAS_HINT_FILL);
+   dynamic.pack_end(bt1);
+   bt1.visible_set(true);
+
+   elm::button bt2 ( efl::eo::parent = win );
+   bt2.text_set("elm.text", "Button 2");
+   bt2.size_hint_weight_set(EVAS_HINT_EXPAND, 0.0);
+   bt2.size_hint_align_set(1.0, 0.5);
+   bt2.callback_clicked_add(unpack);
+   dynamic.pack_end(bt2);
+   bt2.visible_set(true);
+
+   elm::button bt3 ( efl::eo::parent = win );
+   bt3.text_set("elm.text", "Button 3");
+   bt3.callback_clicked_add(unpack);
+   dynamic.pack_end(bt3);
+   bt3.visible_set(true);
+
+   tdata.box = dynamic;
+   tdata.last_layout = evas_object_box_layout_horizontal;
+   tdata.transitions.push_back(evas_object_box_layout_vertical);
+   tdata.transitions.push_back(evas_object_box_layout_horizontal);
+   tdata.transitions.push_back(evas_object_box_layout_stack);
+   tdata.transitions.push_back(evas_object_box_layout_homogeneous_vertical);
+   tdata.transitions.push_back(evas_object_box_layout_homogeneous_horizontal);
+   tdata.transitions.push_back(evas_object_box_layout_flow_vertical);
+   tdata.transitions.push_back(evas_object_box_layout_flow_horizontal);
+   tdata.transitions.push_back(evas_object_box_layout_stack);
+
+   dynamic.layout_set(evas_object_box_layout_horizontal, nullptr, nullptr);
+   _test_box_transition_change(&tdata);
+
+   win.size_set(300, 320);
+   win.visible_set(true);
+
+   elm_run();
    return 0;
 }
 ELM_MAIN()