Still c implementation is unstable. 60/74560/4
authorHermet Park <hermet@hermet.pe.kr>
Tue, 14 Jun 2016 13:32:59 +0000 (22:32 +0900)
committerHermet Park <hermet@hermet.pe.kr>
Tue, 14 Jun 2016 15:32:52 +0000 (00:32 +0900)
We are still on building up its bodies here and there.

Change-Id: I7f62d5fa0216a21ae7506409e4b4c46766682968

src/examples/efl/c/main.cpp
src/examples/efl/c/page1.cpp
src/include/efl/mobile/c/ui_app.h
src/include/efl/mobile/c/ui_capi_private.h [new file with mode: 0644]
src/include/interface/ui_iface_types.h
src/lib/CMakeLists.txt
src/lib/efl/mobile/c/ui_app.cpp
src/lib/efl/mobile/c/ui_standard_view.cpp [new file with mode: 0644]
src/lib/efl/mobile/c/ui_view.cpp

index e3633daac8ffda01e7ab36579fe261cc804bf369..69607f41f05f1ad4d33bb2934d68155059fb5420 100644 (file)
@@ -22,7 +22,7 @@ app_control(app_control_h app_control, void *data)
 int
 main(int argc, char *argv[])
 {
-       int ret;
+       int ret = 0;
        ui_app_lifecycle_callback_s lifecycle_callback = {0, };
 
        //Initialize ui_app. ui_app initializes basic resources including ui_viewmgr internally.
@@ -37,7 +37,7 @@ main(int argc, char *argv[])
        lifecycle_callback.app_control = app_control;
 
        //Run ui_app. Now it requests to run an application mainloop.
-       if (!(ret = ui_app_run(argc, argv, &lifecycle_callback, NULL, NULL)))
+       if (!(ret = ui_app_run(argc, argv, &lifecycle_callback, NULL)))
        {
                dlog_print(DLOG_ERROR, LOG_TAG, "ui_app_run() is failed. err = %d", ret);
                return ret;
index 8c819929c8d8cc67bf416cd2e71cd02766efcc90..9a95a2dcce830798906ba04e8769b869ee9a0f32 100644 (file)
@@ -33,8 +33,8 @@ next_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
 static bool
 view1_load_cb(ui_view *view, void *data)
 {
-       Evas_Object *content;
-       Evas_Object *base;
+       Evas_Object *content = NULL;
+       Evas_Object *base = NULL;
 
        base = ui_view_base_get(view);
        if (!base) return false;
@@ -48,8 +48,8 @@ view1_load_cb(ui_view *view, void *data)
 void
 create_page1()
 {
-       int ret;
-       ui_view *view;
+       int ret = 0;
+       ui_view *view = NULL;
        ui_view_lifecycle_callback_s lifecycle_callback = {0, };
 
        view = ui_standard_view_create("page1");
@@ -61,7 +61,7 @@ create_page1()
 
        lifecycle_callback.load = view1_load_cb;
 
-       if (!ui_view_lifecycle_callbacks_set(view, &lifecycle_callback, NULL))
+       if (!(ret = ui_view_lifecycle_callbacks_set(view, &lifecycle_callback, NULL)))
        {
                dlog_print(DLOG_ERROR, LOG_TAG, "ui_view_lifecycle_callback_set is failed. err = %d", ret);
                ui_view_destroy(view);
index e238d4b0af58c8d56d02f199e13ff41a9c4c4142..81609e30de05f84e13d8d5bf7bd540e0c353a965 100644 (file)
@@ -5,19 +5,9 @@
 extern "C" {
 #endif
 
-typedef void (*ui_app_event_cb)(app_event_info_h event_info, void *data);
-
-typedef struct
-{
-       ui_app_event_cb low_battery;
-       ui_app_event_cb low_memory;
-       ui_app_event_cb orient_changed;
-       ui_app_event_cb lang_changed;
-       ui_app_event_cb region_changed;
-} ui_app_event_callback_s;
-
+//FIXME: rename prefix
 bool ui_app_init(const char *pkg, const char *locale_dir);
-int ui_app_run(int argc, char **argv, ui_app_lifecycle_callback_s *lifecycle_callback, ui_app_event_callback_s *event_callback, void *data);
+int ui_app_run(int argc, char **argv, ui_app_lifecycle_callback_s *lifecycle_callback, void *data);
 ui_viewmgr *ui_app_viewmgr_get();
 bool ui_app_term(void);
 
diff --git a/src/include/efl/mobile/c/ui_capi_private.h b/src/include/efl/mobile/c/ui_capi_private.h
new file mode 100644 (file)
index 0000000..c4fb255
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *               http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+#ifndef _UI_CAPI_PRIVATE_H_
+#define _UI_CAPI_PRIVATE_H_
+
+namespace efl_viewmanager
+{
+
+class ui_view_event_attr
+{
+public:
+       ui_view_lifecycle_callback_s lifecycle_callback;
+       ui_view_event_callback_s event_callback;
+       void *lifecycle_data;
+       void *event_data;
+
+       ui_view_event_attr() : lifecycle_data(NULL), event_data(NULL)
+       {
+               this->lifecycle_callback = {0, };
+               this->event_callback = {0, };
+       }
+
+       ~ui_view_event_attr()
+       {
+       }
+};
+
+}
+
+#endif /* _UI_CAPI_PRIVATE_H_ */
index e850ef3f1d7f2d63fb9b2864685d6d1a4945bb10..fa50ed0941275ad574a9702134088a61db8ce5d2 100644 (file)
@@ -40,6 +40,7 @@ enum ui_view_state
        UI_VIEW_STATE_ACTIVATE,        ///< Activate state
        UI_VIEW_STATE_DEACTIVATE,      ///< Deactivate state
        UI_VIEW_STATE_PAUSE,           ///< Pause state
+       UI_VIEW_STATE_UNKNOWN,         ///< Unknown state
        UI_VIEW_STATE_LAST
 };
 
index c449a2bae5f18a1f12249873f730247256b157b6..d9fe096d0963fb58e6b96dc108d981a00afedfc2 100644 (file)
@@ -19,6 +19,7 @@ SET(SRCS
      efl/mobile/c/ui_menu.cpp
      efl/mobile/c/ui_popup.cpp
      efl/mobile/c/ui_view.cpp
+     efl/mobile/c/ui_standard_view.cpp
      efl/mobile/c/ui_viewmgr.cpp
     )
 ELSE()
index 78c7b709e8ab69e297c7924392aebb5987028688..8d664d97da4fef64909af48ffdbaabf017fcb2ba 100644 (file)
@@ -5,84 +5,52 @@ using namespace efl_viewmanager;
 
 class ui_app_capi : public ui_app
 {
-private:
+public:
        ui_app_lifecycle_callback_s capi_lifecycle_callback;
-       ui_app_event_callback_s capi_event_callback;
        void *data;
 
-protected:
        bool on_create()
        {
-               if (!ui_app::on_create())
-               {
-                       return false;
-               }
+               if (!ui_app::on_create()) return false;
 
-               if (this->capi_lifecycle_callback.create)
-                       this->capi_lifecycle_callback.create(this->data);
-
-               return true;
+               if (!this->capi_lifecycle_callback.create) return false;
+               return this->capi_lifecycle_callback.create(this->data);
        }
 
        void on_terminate()
        {
-               if (this->capi_lifecycle_callback.terminate)
-                       this->capi_lifecycle_callback.terminate(this->data);
+               ui_app::on_terminate();
+
+               if (!this->capi_lifecycle_callback.terminate) return;
+               this->capi_lifecycle_callback.terminate(this->data);
        }
 
        void on_pause()
        {
-               if (this->capi_lifecycle_callback.pause)
-                       this->capi_lifecycle_callback.pause(this->data);
+               ui_app::on_pause();
+
+               if (!this->capi_lifecycle_callback.pause) return;
+               this->capi_lifecycle_callback.pause(this->data);
        }
 
        void on_resume()
        {
-               if (this->capi_lifecycle_callback.resume)
-                       this->capi_lifecycle_callback.resume(this->data);
+               ui_app::on_resume();
+
+               if (!this->capi_lifecycle_callback.resume) return;
+               this->capi_lifecycle_callback.resume(this->data);
        }
 
        void on_control(app_control_h app_control)
        {
                ui_app::on_control(app_control);
 
-               if (this->capi_lifecycle_callback.app_control)
-                       this->capi_lifecycle_callback.app_control(app_control, this->data);
-       }
-
-       void on_low_battery(app_event_info_h event_info)
-       {
-               if (this->capi_event_callback.low_battery)
-                       this->capi_event_callback.low_battery(event_info, this->data);
-       }
-
-       void on_low_memory(app_event_info_h event_info)
-       {
-               if (this->capi_event_callback.low_memory)
-                       this->capi_event_callback.low_memory(event_info, this->data);
-       }
-
-       void on_orient_changed(app_event_info_h event_info)
-       {
-               if (this->capi_event_callback.orient_changed)
-                       this->capi_event_callback.orient_changed(event_info, this->data);
-       }
-
-       void on_lang_changed(app_event_info_h event_info)
-       {
-               if (this->capi_event_callback.lang_changed)
-                       this->capi_event_callback.lang_changed(event_info, this->data);
+               if (!this->capi_lifecycle_callback.app_control) return;
+               this->capi_lifecycle_callback.app_control(app_control, this->data);
        }
 
-       void on_region_changed(app_event_info_h event_info)
-       {
-               if (this->capi_event_callback.region_changed)
-                       this->capi_event_callback.region_changed(event_info, this->data);
-       }
-
-public:
        ui_app_capi(const char *pkg, const char *locale_dir)
-               : ui_app(pkg, locale_dir)
+                       : ui_app(pkg, locale_dir), data(NULL)
        {
        }
 
@@ -90,35 +58,19 @@ public:
        {
        }
 
-       int run(int argc, char **argv, ui_app_lifecycle_callback_s *lifecycle_callback,
-                 ui_app_event_callback_s *event_callback, void *data)
+       int run(int argc, char **argv, ui_app_lifecycle_callback_s *lifecycle_callback, void *data)
        {
                if (lifecycle_callback)
+               {
                        this->capi_lifecycle_callback = *lifecycle_callback;
-               if (event_callback)
-                       this->capi_event_callback = *event_callback;
+               }
+
                this->data = data;
 
                return ui_app::run(argc, argv);
        }
-
-       ui_app_lifecycle_callback_s get_app_lifecycle_callback()
-       {
-               return this->capi_lifecycle_callback;
-       }
-
-       ui_app_event_callback_s get_app_event_callback()
-       {
-               return this->capi_event_callback;
-       }
-
-       void* get_data()
-       {
-               return this->data;
-       }
 };
 
-
 static ui_app_capi *g_app = NULL;
 
 bool ui_app_init(const char *pkg, const char *locale_dir)
@@ -138,12 +90,12 @@ bool ui_app_init(const char *pkg, const char *locale_dir)
        return true;
 }
 
-int ui_app_run(int argc, char **argv, ui_app_lifecycle_callback_s *lifecycle_callback, ui_app_event_callback_s *event_callback, void *data)
+int ui_app_run(int argc, char **argv, ui_app_lifecycle_callback_s *lifecycle_callback, void *data)
 {
        ui_app_capi *app = g_app;
        if (!app) return -1;
 
-       return app->run(argc, argv, lifecycle_callback, event_callback, data);
+       return app->run(argc, argv, lifecycle_callback, data);
 }
 
 ui_viewmgr *ui_app_viewmgr_get()
@@ -158,6 +110,7 @@ bool ui_app_term(void)
 {
        ui_app_capi *app = g_app;
        if (app) delete (app);
+       g_app = NULL;
 
        return true;
 }
diff --git a/src/lib/efl/mobile/c/ui_standard_view.cpp b/src/lib/efl/mobile/c/ui_standard_view.cpp
new file mode 100644 (file)
index 0000000..16059a3
--- /dev/null
@@ -0,0 +1,314 @@
+#include "../../../../include/efl/mobile/ui_mobile_viewmanager.h"
+#include "../../../../include/efl/mobile/c/ui_view.h"
+#include "../../../../include/efl/mobile/c/ui_capi_private.h"
+
+using namespace efl_viewmanager;
+
+class ui_standard_view_capi: public ui_standard_view, public ui_view_event_attr
+{
+public:
+       void on_load()
+       {
+               if (this->lifecycle_callback.load)
+               {
+                       if (!this->lifecycle_callback.load(this, this->lifecycle_data)) return;
+               }
+               ui_standard_view::on_load();
+       }
+
+       void on_unload()
+       {
+               if (this->lifecycle_callback.unload)
+               {
+                       if (!this->lifecycle_callback.unload(this, this->lifecycle_data)) return;
+               }
+               ui_standard_view::on_unload();
+       }
+
+       void on_pause()
+       {
+               if (this->lifecycle_callback.pause)
+               {
+                       if (!this->lifecycle_callback.pause(this, this->lifecycle_data)) return;
+               }
+               ui_standard_view::on_pause();
+       }
+
+       void on_resume()
+       {
+               if (this->lifecycle_callback.resume)
+               {
+                       if (!this->lifecycle_callback.resume(this, this->lifecycle_data)) return;
+               }
+               ui_standard_view::on_resume();
+       }
+
+       void on_activate()
+       {
+               if (this->lifecycle_callback.activate)
+               {
+                       if (!this->lifecycle_callback.activate(this, this->lifecycle_data)) return;
+               }
+               ui_standard_view::on_activate();
+       }
+
+       void on_deactivate()
+       {
+               if (this->lifecycle_callback.deactivate)
+               {
+                       if (!this->lifecycle_callback.deactivate(this, this->lifecycle_data)) return;
+               }
+               ui_standard_view::on_deactivate();
+       }
+
+       void on_destroy()
+       {
+               if (this->lifecycle_callback.destroy)
+               {
+                       if (!this->lifecycle_callback.destroy(this, this->lifecycle_data)) return;
+               }
+               ui_standard_view::on_destroy();
+       }
+
+       void on_portrait()
+       {
+               if (this->event_callback.portrait)
+               {
+                       if (!this->event_callback.portrait(this, this->event_data)) return;
+               }
+               ui_standard_view::on_portrait();
+       }
+
+       void on_landscape()
+       {
+               if (this->event_callback.landscape)
+               {
+                       if (!this->event_callback.landscape(this, this->event_data)) return;
+               }
+               ui_standard_view::on_landscape();
+       }
+
+       void on_rotate(int degree)
+       {
+               if (this->event_callback.rotate)
+               {
+                       if (!this->event_callback.rotate(this, degree, this->event_data)) return;
+               }
+               ui_standard_view::on_rotate(degree);
+       }
+
+       void on_back()
+       {
+               if (this->event_callback.back)
+               {
+                       if (!this->event_callback.back(this, this->event_data)) return;
+               }
+               ui_standard_view::on_back();
+       }
+
+       void on_menu(ui_menu *menu)
+       {
+               if (this->event_callback.menu)
+               {
+                       if (!this->event_callback.menu(menu, this->event_data)) return;
+               }
+               ui_standard_view::on_menu(menu);
+       }
+
+       ui_standard_view_capi(const char *name)
+                       : ui_standard_view(name), ui_view_event_attr()
+       {
+       }
+
+       ~ui_standard_view_capi()
+       {
+       }
+};
+
+ui_view* ui_standard_view_create(const char *name)
+{
+       return new ui_standard_view_capi(name);
+}
+
+bool ui_standard_view_content_set(ui_view *view, Evas_Object *content, const char *title, const char *subtitle, Evas_Object *title_left_btn,
+        Evas_Object *title_right_btn)
+{
+       if (!view)
+       {
+               LOGE("Invalid View");
+               return false;
+       }
+
+       ui_standard_view_capi *capi_view = dynamic_cast<ui_standard_view_capi *>(view);
+
+       return capi_view->set_content(content, title, subtitle, title_left_btn, title_right_btn);
+}
+
+bool ui_standard_view_title_set(ui_view *view, const char *text)
+{
+       if (!view)
+       {
+               LOGE("Invalid View");
+               return false;
+       }
+
+       ui_standard_view_capi *capi_view = dynamic_cast<ui_standard_view_capi *>(view);
+
+       return capi_view->set_title(text);
+}
+
+bool ui_standard_view_sub_title_set(ui_view *view, const char *text)
+{
+       if (!view)
+       {
+               LOGE("Invalid View");
+               return false;
+       }
+
+       ui_standard_view_capi *capi_view = dynamic_cast<ui_standard_view_capi *>(view);
+
+       return capi_view->set_subtitle(text);
+}
+
+bool ui_standard_view_title_badge_set(ui_view *view, const char *badge_text)
+{
+       if (!view)
+       {
+               LOGE("Invalid View");
+               return false;
+       }
+
+       ui_standard_view_capi *capi_view = dynamic_cast<ui_standard_view_capi *>(view);
+
+       return capi_view->set_title_badge(badge_text);
+}
+
+bool ui_standard_view_title_right_btn_set(ui_view *view, Evas_Object *title_right_btn)
+{
+       if (!view)
+       {
+               LOGE("Invalid View");
+               return false;
+       }
+
+       ui_standard_view_capi *capi_view = dynamic_cast<ui_standard_view_capi *>(view);
+
+       return capi_view->set_title_right_btn(title_right_btn);
+}
+
+Elm_Button *ui_standard_view_title_right_btn_get(ui_view *view)
+{
+       if (!view)
+       {
+               LOGE("Invalid View");
+               return NULL;
+       }
+
+       ui_standard_view_capi *capi_view = dynamic_cast<ui_standard_view_capi *>(view);
+
+       return capi_view->get_title_right_btn();
+}
+
+Elm_Button *ui_standard_view_title_right_btn_unset(ui_view *view)
+{
+       if (!view)
+       {
+               LOGE("Invalid View");
+               return NULL;
+       }
+
+       ui_standard_view_capi *capi_view = dynamic_cast<ui_standard_view_capi *>(view);
+
+       return capi_view->unset_title_right_btn();
+}
+
+bool ui_standard_view_title_left_btn_set(ui_view *view, Evas_Object *title_left_btn)
+{
+       if (!view)
+       {
+               LOGE("Invalid View");
+               return false;
+       }
+
+       ui_standard_view_capi *capi_view = dynamic_cast<ui_standard_view_capi *>(view);
+
+       return capi_view->set_title_left_btn(title_left_btn);
+}
+
+Elm_Button *ui_standard_view_title_left_btn_get(ui_view *view)
+{
+       if (!view)
+       {
+               LOGE("Invalid View");
+               return NULL;
+       }
+
+       ui_standard_view_capi *capi_view = dynamic_cast<ui_standard_view_capi *>(view);
+
+       return capi_view->get_title_left_btn();
+}
+
+Elm_Button *ui_standard_view_title_left_btn_unset(ui_view *view)
+{
+       if (!view)
+       {
+               LOGE("Invalid View");
+               return NULL;
+       }
+
+       ui_standard_view_capi *capi_view = dynamic_cast<ui_standard_view_capi *>(view);
+
+       return capi_view->unset_title_right_btn();
+}
+
+bool ui_standard_view_toolbar_set(ui_view *view, Elm_Toolbar *toolbar)
+{
+       if (!view)
+       {
+               LOGE("Invalid View");
+               return false;
+       }
+
+       ui_standard_view_capi *capi_view = dynamic_cast<ui_standard_view_capi *>(view);
+
+       return capi_view->set_toolbar(toolbar);
+}
+
+Elm_Toolbar *ui_standard_view_toolbar_get(ui_view *view)
+{
+       if (!view)
+       {
+               LOGE("Invalid View");
+               return NULL;
+       }
+
+       ui_standard_view_capi *capi_view = dynamic_cast<ui_standard_view_capi *>(view);
+
+       return capi_view->get_toolbar();
+}
+
+Elm_Toolbar *ui_standard_view_toolbar_unset(ui_view *view)
+{
+       if (!view)
+       {
+               LOGE("Invalid View");
+               return NULL;
+       }
+
+       ui_standard_view_capi *capi_view = dynamic_cast<ui_standard_view_capi *>(view);
+
+       return capi_view->unset_toolbar();
+}
+
+bool ui_standard_view_title_visible_set(ui_view *view, bool visible, bool anim)
+{
+       if (!view)
+       {
+               LOGE("Invalid View");
+               return false;
+       }
+
+       ui_standard_view_capi *capi_view = dynamic_cast<ui_standard_view_capi *>(view);
+
+       return capi_view->set_title_visible(visible, anim);
+}
index 8c35cb00a1ce36d1760165e1bc5c77e813b586c7..f28ecff7dcecba1cc3d6a1b4bb9c45eff56e668b 100644 (file)
 #include "../../../../include/efl/mobile/ui_mobile_viewmanager.h"
 #include "../../../../include/efl/mobile/c/ui_view.h"
+#include "../../../../include/efl/mobile/c/ui_capi_private.h"
 
 using namespace efl_viewmanager;
 
-///////////////////////////////////////////////////////////////////////////
-////////////////////////// ui_standard_view_capi //////////////////////////
-///////////////////////////////////////////////////////////////////////////
-
-class ui_standard_view_capi : public ui_standard_view
+class ui_view_capi: public ui_view, public ui_view_event_attr
 {
-private:
-       ui_view_lifecycle_callback_s lifecycle_callback;
-       ui_view_event_callback_s event_callback;
-       void *lifecycle_data;
-       void *event_data;
-
-protected:
+public:
        void on_load()
        {
-               if (this->lifecycle_callback.load) {
-                       if (this->lifecycle_callback.load(this, this->lifecycle_data)) {
-                               ui_standard_view::on_load();
-                       }
+               if (this->lifecycle_callback.load)
+               {
+                       if (!this->lifecycle_callback.load(this, this->lifecycle_data)) return;
                }
+               ui_view::on_load();
        }
 
        void on_unload()
        {
-               if (this->lifecycle_callback.unload) {
-                       if (this->lifecycle_callback.unload(this, this->lifecycle_data)) {
-                               ui_standard_view::on_unload();
-                       }
+               if (this->lifecycle_callback.unload)
+               {
+                       if (!this->lifecycle_callback.unload(this, this->lifecycle_data)) return;
                }
+               ui_view::on_unload();
        }
 
        void on_pause()
        {
-               if (this->lifecycle_callback.pause) {
-                       if (this->lifecycle_callback.pause(this, this->lifecycle_data)) {
-                               ui_standard_view::on_pause();
-                       }
+               if (this->lifecycle_callback.pause)
+               {
+                       if (!this->lifecycle_callback.pause(this, this->lifecycle_data)) return;
                }
+               ui_view::on_pause();
        }
 
        void on_resume()
        {
-               if (this->lifecycle_callback.resume) {
-                       if (this->lifecycle_callback.resume(this, this->lifecycle_data)) {
-                               ui_standard_view::on_resume();
-                       }
+               if (this->lifecycle_callback.resume)
+               {
+                       if (!this->lifecycle_callback.resume(this, this->lifecycle_data)) return;
                }
+               ui_view::on_resume();
        }
 
        void on_activate()
        {
-               if (this->lifecycle_callback.activate) {
-                       if (this->lifecycle_callback.activate(this, this->lifecycle_data)) {
-                               ui_standard_view::on_activate();
-                       }
+               if (this->lifecycle_callback.activate)
+               {
+                       if (!this->lifecycle_callback.activate(this, this->lifecycle_data)) return;
                }
+               ui_view::on_activate();
        }
 
        void on_deactivate()
        {
-               if (this->lifecycle_callback.deactivate) {
-                       if (this->lifecycle_callback.deactivate(this, this->lifecycle_data)) {
-                               ui_standard_view::on_deactivate();
-                       }
+               if (this->lifecycle_callback.deactivate)
+               {
+                       if (!this->lifecycle_callback.deactivate(this, this->lifecycle_data)) return;
                }
+               ui_view::on_deactivate();
        }
 
        void on_destroy()
        {
-               if (this->lifecycle_callback.destroy) {
-                       if (this->lifecycle_callback.destroy(this, this->lifecycle_data)) {
-                               ui_standard_view::on_destroy();
-                       }
+               if (this->lifecycle_callback.destroy)
+               {
+                       if (!this->lifecycle_callback.destroy(this, this->lifecycle_data)) return;
                }
+               ui_view::on_destroy();
        }
 
        void on_portrait()
        {
-               if (this->event_callback.portrait) {
-                       if (this->event_callback.portrait(this, this->event_data)) {
-                               ui_standard_view::on_portrait();
-                       }
+               if (this->event_callback.portrait)
+               {
+                       if (!this->event_callback.portrait(this, this->event_data)) return;
                }
+               ui_view::on_portrait();
        }
 
        void on_landscape()
        {
-               if (this->event_callback.landscape) {
-                       if (this->event_callback.landscape(this, this->event_data)) {
-                               ui_standard_view::on_landscape();
-                       }
+               if (this->event_callback.landscape)
+               {
+                       if (!this->event_callback.landscape(this, this->event_data)) return;
                }
+               ui_view::on_landscape();
        }
 
        void on_rotate(int degree)
        {
-               if (this->event_callback.rotate) {
-                       if (this->event_callback.rotate(this, degree,this->event_data)) {
-                               ui_standard_view::on_rotate(degree);
-                       }
+               if (this->event_callback.rotate)
+               {
+                       if (!this->event_callback.rotate(this, degree, this->event_data)) return;
                }
+               ui_view::on_rotate(degree);
        }
 
        void on_back()
        {
-               if (this->event_callback.back) {
-                       if (this->event_callback.back(this, this->event_data)) {
-                               ui_standard_view::on_back();
-                       }
+               if (this->event_callback.back)
+               {
+                       if (!this->event_callback.back(this, this->event_data)) return;
                }
+               ui_view::on_back();
        }
 
        void on_menu(ui_menu *menu)
        {
-               if (this->event_callback.menu) {
-                       if (this->event_callback.menu(menu, this->event_data)) {
-                               ui_standard_view::on_menu(menu);
-                       }
-               }
-       }
-
-public:
-       ui_standard_view_capi(const char *name)
-               : ui_standard_view(name)
-       {
-               this->lifecycle_callback = {0,};
-               this->event_callback = {0,};
-               this->lifecycle_data = NULL;
-               this->event_data = NULL;
-       }
-
-       ~ui_standard_view_capi()
-       {
-       }
-
-       void set_lifecycle_callback(ui_view_lifecycle_callback_s *callback)
-       {
-               this->lifecycle_callback = *callback;
-       }
-
-       void set_lifecycle_data(void *data)
-       {
-               this->lifecycle_data = data;
-       }
-
-       void set_event_callback(ui_view_event_callback_s *callback)
-       {
-               this->event_callback = *callback;
-       }
-
-       void set_event_data(void *data)
-       {
-               this->event_data = data;
-       }
-};
-
-///////////////////////////////////////////////////////////////////////////
-//////////////////////////// ui_viwe_capi /////////////////////////////////
-///////////////////////////////////////////////////////////////////////////
-
-class ui_view_capi : public ui_view
-{
-private:
-       ui_view_lifecycle_callback_s lifecycle_callback;
-       ui_view_event_callback_s event_callback;
-       void *lifecycle_data;
-       void *event_data;
-
-
-protected:
-       void on_load()
-       {
-               ui_view::on_load();
-
-               if (this->lifecycle_callback.load) {
-                       this->lifecycle_callback.load(this, this->lifecycle_data);
-               }
-       }
-
-       void on_portrait()
-       {
-               if (this->event_callback.portrait) {
-                       this->event_callback.portrait(this, this->event_data);
-               }
-       }
-
-       void on_landscape()
-       {
-               if (this->event_callback.landscape) {
-                       this->event_callback.landscape(this, this->event_data);
-               }
-       }
-
-       void on_rotate(int degree)
-       {
-               if (this->event_callback.rotate) {
-                       this->event_callback.rotate(this, degree,this->event_data);
+               if (this->event_callback.menu)
+               {
+                       if (!this->event_callback.menu(menu, this->event_data)) return;
                }
-       }
-
-       void on_menu(ui_menu *menu)
-       {
                ui_view::on_menu(menu);
-
-               if (this->event_callback.menu) {
-                       this->event_callback.menu(menu, this->event_data);
-               }
        }
 
-public:
        ui_view_capi(const char *name)
-               : ui_view(name)
+                       : ui_view(name), ui_view_event_attr()
        {
-               this->lifecycle_callback = {0,};
-               this->event_callback = {0,};
-               this->lifecycle_data = NULL;
-               this->event_data = NULL;
        }
 
        ~ui_view_capi()
        {
        }
-
-       void set_lifecycle_callback(ui_view_lifecycle_callback_s *callback)
-       {
-               this->lifecycle_callback = *callback;
-       }
-
-       void set_lifecycle_data(void *data)
-       {
-               this->lifecycle_data = data;
-       }
-
-       void set_event_callback(ui_view_event_callback_s *callback)
-       {
-               this->event_callback = *callback;
-       }
-
-       void set_event_data(void *data)
-       {
-               this->event_data = data;
-       }
 };
 
-extern "C" {
-//================================== view common APIs ========================================
-
 bool ui_view_lifecycle_callbacks_set(ui_view *view, ui_view_lifecycle_callback_s *lifecycle_callback, void *data)
+{
+       if (!view)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return false;
-               }
-
-               //FIXME: Maybe... There is a more nice way for it...
-               ui_standard_view_capi *capi_standard_view = dynamic_cast<ui_standard_view_capi *>(view);
-               if (capi_standard_view)
-               {
-                       if (lifecycle_callback) capi_standard_view->set_lifecycle_callback(lifecycle_callback);
-                       if (data) capi_standard_view->set_lifecycle_data(data);
-               }
-               else
-               {
-                       ui_view_capi *capi_view = dynamic_cast<ui_view_capi *>(view);
-
-                       if (lifecycle_callback) capi_view->set_lifecycle_callback(lifecycle_callback);
-                       if (data) capi_view->set_lifecycle_data(data);
-               }
-
-               return true;
+               LOGE("Invalid View");
+               return false;
        }
 
-       bool ui_view_event_callbacks_set(ui_view *view,
-                                            ui_view_event_callback_s *event_callback, void *data)
+       ui_view_event_attr *event_attr = dynamic_cast<ui_view_event_attr *>(view);
+       if (!event_attr)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return false;
-               }
-
-               //FIXME: Maybe... There is a more nice way for it...
-               ui_standard_view_capi *capi_standard_view = dynamic_cast<ui_standard_view_capi *>(view);
-               if (capi_standard_view)
-               {
-                       if (event_callback) capi_standard_view->set_event_callback(event_callback);
-                       if (data) capi_standard_view->set_event_data(data);
-               }
-               else
-               {
-                       ui_view_capi *capi_view = dynamic_cast<ui_view_capi *>(view);
-
-                       if (event_callback) capi_view->set_event_callback(event_callback);
-                       if (data) capi_view->set_event_data(data);
-               }
-
-               return true;
+               LOGE("This view(%p) doesn't allow lifecycle callback?!");
+               return false;
        }
 
-       Evas_Object* ui_view_base_get(ui_view *view)
+       if (lifecycle_callback)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return false;
-               }
-
-               ui_standard_view_capi *capi_standard_view = dynamic_cast<ui_standard_view_capi *>(view);
-               if (capi_standard_view)
-                       return capi_standard_view->get_base();
-               else
-               {
-                       ui_view_capi *capi_view = dynamic_cast<ui_view_capi *>(view);
-
-                       return capi_view->get_base();
-               }
+               event_attr->lifecycle_callback = *lifecycle_callback;
        }
+       event_attr->lifecycle_data = data;
 
-       Evas_Object *ui_view_content_unset(ui_view *view)
-       {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return NULL;
-               }
-
-               ui_standard_view_capi *capi_standard_view = dynamic_cast<ui_standard_view_capi *>(view);
-               if (capi_standard_view)
-                       return capi_standard_view->unset_content();
-               else
-               {
-                       ui_view_capi *capi_view = dynamic_cast<ui_view_capi *>(view);
-
-                       return capi_view->unset_content();
-               }
-       }
+       return true;
+}
 
-       void ui_view_indicator_set(ui_view *view, ui_view_indicator indicator)
+bool ui_view_event_callbacks_set(ui_view *view, ui_view_event_callback_s *event_callback, void *data)
+{
+       if (!view)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return;
-               }
-
-               return view->set_indicator(indicator);
+               LOGE("Invalid View");
+               return false;
        }
 
-       ui_view_indicator ui_view_indicator_get(ui_view *view)
+       ui_view_event_attr *event_attr = dynamic_cast<ui_view_event_attr *>(view);
+       if (!event_attr)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return UI_VIEW_INDICATOR_LAST;
-               }
-
-               return view->get_indicator();
+               LOGE("This view(%p) doesn't allow event callback?!");
+               return false;
        }
 
-       void ui_view_removable_content_set(ui_view *view, bool remove)
+       if (event_callback)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return;
-               }
-
-               view->set_removable_content(remove);
+               event_attr->event_callback = *event_callback;
        }
+       event_attr->event_data = data;
 
-       bool ui_view_removable_content_get(ui_view *view)
-       {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return false;
-               }
-
-               return view->get_removable_content();
-       }
+       return true;
+}
 
-       int  ui_view_degree_get(ui_view *view)
+Evas_Object* ui_view_base_get(ui_view *view)
+{
+       if (!view)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return -1;
-               }
-
-               return view->get_degree();
+               LOGE("Invalid View");
+               return NULL;
        }
+       return view->get_base();
+}
 
-       bool ui_view_transition_style_set(ui_view *view, const char *style)
+Evas_Object *ui_view_content_unset(ui_view *view)
+{
+       if (!view)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return false;
-               }
-
-               return view->set_transition_style(style);
+               LOGE("Invalid View");
+               return NULL;
        }
 
-       const char *ui_view_transition_style_get(ui_view *view)
-       {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return NULL;
-               }
-
-               return view->get_transition_style();
-       }
+       return view->unset_content();
+}
 
-       const ui_menu *ui_view_menu_get(ui_view *view)
+void ui_view_indicator_set(ui_view *view, ui_view_indicator indicator)
+{
+       if (!view)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return NULL;
-               }
-
-               return view->get_menu();
+               LOGE("Invalid View");
+               return;
        }
 
-       bool ui_view_name_set(ui_view *view, const char *name)
-       {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return false;
-               }
-
-               return view->set_name(name);
-
-       }
+       return view->set_indicator(indicator);
+}
 
-       const char *ui_view_name_get(ui_view *view)
+ui_view_indicator ui_view_indicator_get(ui_view *view)
+{
+       if (!view)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return NULL;
-               }
-
-               return view->get_name();
-
+               LOGE("Invalid View");
+               return UI_VIEW_INDICATOR_LAST;
        }
 
-       ui_view_state ui_view_state_get(ui_view *view)
-       {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return UI_VIEW_STATE_LAST;
-               }
-
-               return view->get_state();
-       }
+       return view->get_indicator();
+}
 
-       Evas_Object *ui_view_content_get(ui_view *view)
+void ui_view_removable_content_set(ui_view *view, bool remove)
+{
+       if (!view)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return NULL;
-               }
-
-               return view->get_content();
-
+               LOGE("Invalid View");
+               return;
        }
 
-       bool ui_view_destroy(ui_view *view)
+       view->set_removable_content(remove);
+}
+
+bool ui_view_removable_content_get(ui_view *view)
+{
+       if (!view)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return false;
-               }
-               delete(view);
-               return true;
+               LOGE("Invalid View");
+               return false;
        }
 
-//================================ ui_standard view APIs =====================================
+       return view->get_removable_content();
+}
 
-       ui_view* ui_standard_view_create(const char *name)
+int ui_view_degree_get(ui_view *view)
+{
+       if (!view)
        {
-               return new ui_standard_view_capi(name);
+               LOGE("Invalid View");
+               return -1;
        }
 
-       bool ui_standard_view_content_set(ui_view *view, Evas_Object *content,
-                                                                         const char *title, const char *subtitle,
-                                                                         Evas_Object *title_left_btn, Evas_Object *title_right_btn)
-       {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return false;
-               }
-
-               ui_standard_view_capi *capi_view = static_cast<ui_standard_view_capi *>(view);
+       return view->get_degree();
+}
 
-               return capi_view->set_content(content, title, subtitle, title_left_btn, title_right_btn);
+bool ui_view_transition_style_set(ui_view *view, const char *style)
+{
+       if (!view)
+       {
+               LOGE("Invalid View");
+               return false;
        }
 
+       return view->set_transition_style(style);
+}
 
-       bool ui_standard_view_title_set(ui_view *view, const char *text)
+const char *ui_view_transition_style_get(ui_view *view)
+{
+       if (!view)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return false;
-               }
-
-               ui_standard_view_capi *capi_view = static_cast<ui_standard_view_capi *>(view);
-
-               return capi_view->set_title(text);
+               LOGE("Invalid View");
+               return NULL;
        }
 
-       bool ui_standard_view_sub_title_set(ui_view *view, const char *text)
-       {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return false;
-               }
-
-               ui_standard_view_capi *capi_view = static_cast<ui_standard_view_capi *>(view);
-
-               return capi_view->set_subtitle(text);
-       }
+       return view->get_transition_style();
+}
 
-       bool ui_standard_view_title_badge_set(ui_view *view, const char *badge_text)
+const ui_menu *ui_view_menu_get(ui_view *view)
+{
+       if (!view)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return false;
-               }
-
-               ui_standard_view_capi *capi_view = static_cast<ui_standard_view_capi *>(view);
-
-               return capi_view->set_title_badge(badge_text);
+               LOGE("Invalid View");
+               return NULL;
        }
 
-       bool ui_standard_view_title_right_btn_set(ui_view *view, Evas_Object *title_right_btn)
-       {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return false;
-               }
-
-               ui_standard_view_capi *capi_view = static_cast<ui_standard_view_capi *>(view);
-
-               return capi_view->set_title_right_btn(title_right_btn);
-       }
+       return view->get_menu();
+}
 
-       Elm_Button *ui_standard_view_title_right_btn_get(ui_view *view)
+bool ui_view_name_set(ui_view *view, const char *name)
+{
+       if (!view)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return NULL;
-               }
-
-               ui_standard_view_capi *capi_view = static_cast<ui_standard_view_capi *>(view);
-
-               return capi_view->get_title_right_btn();
+               LOGE("Invalid View");
+               return false;
        }
 
-       Elm_Button *ui_standard_view_title_right_btn_unset(ui_view *view)
-       {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return NULL;
-               }
-
-               ui_standard_view_capi *capi_view = static_cast<ui_standard_view_capi *>(view);
+       return view->set_name(name);
 
-               return capi_view->unset_title_right_btn();
-       }
+}
 
-       bool ui_standard_view_title_left_btn_set(ui_view *view, Evas_Object *title_left_btn)
+const char *ui_view_name_get(ui_view *view)
+{
+       if (!view)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return false;
-               }
-
-               ui_standard_view_capi *capi_view = static_cast<ui_standard_view_capi *>(view);
-
-               return capi_view->set_title_left_btn(title_left_btn);
+               LOGE("Invalid View");
+               return NULL;
        }
 
-       Elm_Button *ui_standard_view_title_left_btn_get(ui_view *view)
-       {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return NULL;
-               }
-
-               ui_standard_view_capi *capi_view = static_cast<ui_standard_view_capi *>(view);
+       return view->get_name();
 
-               return capi_view->get_title_left_btn();
-       }
+}
 
-       Elm_Button *ui_standard_view_title_left_btn_unset(ui_view *view)
+ui_view_state ui_view_state_get(ui_view *view)
+{
+       if (!view)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return NULL;
-               }
-
-               ui_standard_view_capi *capi_view = static_cast<ui_standard_view_capi *>(view);
-
-               return capi_view->unset_title_right_btn();
+               LOGE("Invalid View");
+               return UI_VIEW_STATE_UNKNOWN;
        }
 
+       return view->get_state();
+}
 
-       bool ui_standard_view_toolbar_set(ui_view *view, Elm_Toolbar *toolbar)
-       {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return false;
-               }
-
-               ui_standard_view_capi *capi_view = static_cast<ui_standard_view_capi *>(view);
-
-               return capi_view->set_toolbar(toolbar);
-       }
-
-       Elm_Toolbar *ui_standard_view_toolbar_get(ui_view *view)
+Evas_Object *ui_view_content_get(ui_view *view)
+{
+       if (!view)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return NULL;
-               }
-
-               ui_standard_view_capi *capi_view = static_cast<ui_standard_view_capi *>(view);
-
-               return capi_view->get_toolbar();
+               LOGE("Invalid View");
+               return NULL;
        }
 
-       Elm_Toolbar *ui_standard_view_toolbar_unset(ui_view *view)
-       {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return NULL;
-               }
-
-               ui_standard_view_capi *capi_view = static_cast<ui_standard_view_capi *>(view);
+       return view->get_content();
 
-               return capi_view->unset_toolbar();
-       }
+}
 
-       bool ui_standard_view_title_visible_set(ui_view *view, bool visible, bool anim)
+bool ui_view_destroy(ui_view *view)
+{
+       if (!view)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return -1;
-               }
-
-               ui_standard_view_capi *capi_view = static_cast<ui_standard_view_capi *>(view);
-
-               return capi_view->set_title_visible(visible, anim);
+               LOGE("Invalid View");
+               return false;
        }
+       delete (view);
+       return true;
+}
 
-//==================================== ui_view APIs ==========================================
-
-       ui_view* ui_view_create(const char *name)
-       {
-               return new ui_view_capi(name);
-       }
+ui_view* ui_view_create(const char *name)
+{
+       return new ui_view_capi(name);
+}
 
-       bool ui_view_content_set(ui_view *view, Evas_Object *content)
+bool ui_view_content_set(ui_view *view, Evas_Object *content)
+{
+       if (!view)
        {
-               if (!view)
-               {
-                       LOGE("Invalid View");
-                       return false;
-               }
-
-               ui_view_capi *capi_view = static_cast<ui_view_capi *>(view);
-
-               return capi_view->set_content(content);
+               LOGE("Invalid View");
+               return false;
        }
+       return view->set_content(content);
 }