sort out public/internal apis. 62/68262/4
authorHermet Park <hermet@hermet.pe.kr>
Tue, 3 May 2016 07:06:49 +0000 (16:06 +0900)
committerHermet Park <hermet@hermet.pe.kr>
Tue, 3 May 2016 09:40:06 +0000 (18:40 +0900)
Change-Id: Ic932c56710fa071ae8b5b5c2f4f85ec27f8fdebe

src/include/efl/mobile/ui_menu.h
src/include/efl/mobile/ui_popup.h
src/include/efl/mobile/ui_standard_view.h
src/include/efl/mobile/ui_view.h
src/include/efl/mobile/ui_viewmgr.h
src/include/efl/ui_base_key_listener.h
src/lib/efl/mobile/ui_standard_view.cpp
src/lib/efl/mobile/ui_view.cpp
src/lib/efl/mobile/ui_viewmgr.cpp
src/lib/efl/ui_base_key_listener.cpp

index aaa547c882a6c585fd812440c9984985cd403cf8..a3270b2d63b3bcd7b9bf01beb8cddf1a848f6e84 100644 (file)
@@ -23,13 +23,6 @@ class ui_view;
 
 class ui_menu: public ui_base_overlay
 {
-       friend class ui_view;
-private:
-       ui_menu(ui_view *view);
-       virtual ~ui_menu();
-
-       Elm_Win *get_window();
-
 public:
        virtual bool activate();
        virtual bool deactivate();
@@ -39,6 +32,16 @@ public:
 
        virtual Evas_Object *get_base();
        virtual int get_degree();
+
+protected:
+       ui_menu(ui_view *view);
+       virtual ~ui_menu();
+       Elm_Win *get_window();
+
+private:
+       _UI_DECLARE_PRIVATE_IMPL(ui_menu);
+       _UI_DISABLE_COPY_AND_ASSIGN(ui_menu);
+       _UI_DECLARE_FRIENDS(ui_view);
 };
 
 }
index 40f695b5149d2bd3218c7a6693db70f6b77000b5..feb8ea10f355e1f69007c2dca91702fab9050d2b 100644 (file)
 
 namespace efl_viewmanager
 {
+
+class ui_view;
+
 class ui_popup : public ui_base_overlay
 {
-private:
-       Elm_Win *get_window();
-
 public:
        ui_popup(ui_view *view);
        virtual ~ui_popup();
@@ -36,6 +36,13 @@ public:
 
        virtual Evas_Object *get_base();
        virtual int get_degree();
+
+protected:
+       virtual Elm_Win *get_window();
+
+private:
+       _UI_DECLARE_PRIVATE_IMPL(ui_popup);
+       _UI_DISABLE_COPY_AND_ASSIGN(ui_popup);
 };
 
 }
index 984a8577e5c9bb590b52424a05484a9291ef46dd..0f22c312b343d51bee55ccd615e9d35acb1ee612 100644 (file)
 
 namespace efl_viewmanager
 {
-
 class ui_standard_view: public ui_view
 {
-private:
-       Elm_Layout *layout;                //Base layout for view
-       Elm_Toolbar *toolbar;              //Toolbar
-       Elm_Button *title_left_btn;        //Title left button
-       Elm_Button *title_right_btn;       //Title right button
-
-       bool create_layout();
-       bool destroy_layout();
-
-protected:
-       virtual void on_load();
-       virtual void on_unload();
-       virtual void set_event_block(bool block);
-
 public:
        ui_standard_view(const char *name = NULL);
        virtual ~ui_standard_view();
@@ -54,22 +39,20 @@ public:
        Elm_Button *unset_title_right_btn();
        Elm_Toolbar *unset_toolbar();
 
-       virtual Evas_Object *get_base();
+       Elm_Button *get_title_left_btn();
+       Elm_Button *get_title_right_btn();
+       Elm_Toolbar *get_toolbar();
 
-       Elm_Button *get_title_left_btn()
-       {
-               return this->title_left_btn;
-       }
+       virtual Evas_Object *get_base();
 
-       Elm_Button *get_title_right_btn()
-       {
-               return this->title_right_btn;
-       }
+protected:
+       virtual void on_load();
+       virtual void on_unload();
+       virtual void set_event_block(bool block);
 
-       Elm_Toolbar *get_toolbar()
-       {
-               return this->toolbar;
-       }
+private:
+       _UI_DECLARE_PRIVATE_IMPL(ui_standard_view);
+       _UI_DISABLE_COPY_AND_ASSIGN(ui_standard_view);
 };
 
 }
index 54f01accbbe9d6bea88c551a030a517f4372b904..a0afc305ac67c928d2cf239904b3757c78539074 100644 (file)
 #ifndef _UI_VIEW_H_
 #define _UI_VIEW_H_
 
-#include <list>
-
-using namespace std;
-
 namespace efl_viewmanager
 {
 
@@ -30,21 +26,15 @@ class ui_key_listener;
 
 class ui_view: public ui_base_view
 {
-       friend class ui_menu;
-       friend class ui_popup;
-       friend class ui_key_listener;
+public:
+       ui_view(const char *name = NULL);
+       virtual ~ui_view();
 
-private:
-       ui_menu *menu;                     //Menu
-       list<ui_popup *> popup_list;
-
-       void connect_popup(ui_popup *popup);
-       void disconnect_popup(ui_popup *popup);
-       bool deactivate_popup(bool top_one);
+       const ui_menu *get_menu();
 
 protected:
-       ui_menu *on_menu_pre();
-       void on_menu_post();
+       virtual ui_menu *on_menu_pre();
+       virtual void on_menu_post();
        virtual void on_menu(ui_menu *menu);
        virtual void on_back();
        virtual void on_rotate(int degree);
@@ -58,14 +48,15 @@ protected:
         */
        virtual void on_deactivate();
 
-public:
-       ui_view(const char *name = NULL);
-       virtual ~ui_view();
+private:
+       void connect_popup(ui_popup *popup);
+       void disconnect_popup(ui_popup *popup);
 
-       const ui_menu *get_menu()
-       {
-               return this->menu;
-       }
+       _UI_DECLARE_PRIVATE_IMPL(ui_view);
+       _UI_DISABLE_COPY_AND_ASSIGN(ui_view);
+       _UI_DECLARE_FRIENDS(ui_menu);
+       _UI_DECLARE_FRIENDS(ui_popup);
+       _UI_DECLARE_FRIENDS(ui_key_listener);
 };
 
 }
index 10756296b72f61c8ce6795fd73b58ee4f1c28be1..f7d48c77b8a23d6101cc6a1a65c17847b2ba4e9d 100644 (file)
@@ -21,16 +21,20 @@ namespace efl_viewmanager
 {
 
 class ui_view;
+class ui_app;
 
 class ui_viewmgr: public ui_base_viewmgr
 {
-       friend class ui_view;
-       friend class ui_app;
-
 protected:
        //Don't allow to create ui_viewmgr instance
        ui_viewmgr(const char *pkg);
        virtual ~ui_viewmgr();
+
+private:
+       _UI_DECLARE_PRIVATE_IMPL(ui_viewmgr);
+       _UI_DISABLE_COPY_AND_ASSIGN(ui_viewmgr);
+       _UI_DECLARE_FRIENDS(ui_view);
+       _UI_DECLARE_FRIENDS(ui_app);
 };
 }
 
index 05f6a214b97d05d131431da4c474fa621b4b743e..8eb9a7cfdfdace8c14ca147da5d1909f37560934 100644 (file)
@@ -24,7 +24,7 @@ class ui_base_viewmgr;
 
 class ui_base_key_listener
 {
-public:
+protected:
        ui_base_key_listener(ui_base_viewmgr *viewmgr);
        virtual ~ui_base_key_listener();
 
@@ -33,13 +33,12 @@ public:
        virtual void extend_event_proc(ui_base_view *view, Evas_Event_Key_Down *ev) {}
 
        ui_base_viewmgr *get_viewmgr();
-
-protected:
        Evas_Object *get_keygrab_obj();
 
 private:
        _UI_DECLARE_PRIVATE_IMPL(ui_base_key_listener);
        _UI_DISABLE_COPY_AND_ASSIGN(ui_base_key_listener);
+       _UI_DECLARE_FRIENDS(ui_base_viewmgr);
 };
 
 }
index 9636b2e2c9d27fa8983ada50e9ab19b992378a07..217df59039f445f9a8dc37fb24f4b5dcb51670c8 100644 (file)
  */
 #include "../../../include/efl/mobile/ui_mobile_viewmanager.h"
 
+/***********************************************************************************************/
+/* Internal class Implementation                                                               */
+/***********************************************************************************************/
+
+namespace efl_viewmanager
+{
+
+class ui_standard_view_impl
+{
+       friend class ui_standard_view;
+
+private:
+       ui_standard_view *view;
+       Elm_Layout *layout;                //Base layout for view
+       Elm_Toolbar *toolbar;              //Toolbar
+       Elm_Button *title_left_btn;        //Title left button
+       Elm_Button *title_right_btn;       //Title right button
+
+       bool create_layout();
+       bool destroy_layout();
+
+public:
+       ui_standard_view_impl(ui_standard_view *view);
+       ~ui_standard_view_impl();
+
+       bool set_content(Evas_Object *content, const char *title = NULL);
+       bool set_content(Evas_Object *content, const char *title, const char *subtitle, Elm_Button *title_left_btn, Elm_Button *title_right_btn);
+       bool set_title_badge(const char *text);
+       bool set_subtitle(const char *text);
+       bool set_title_left_btn(Elm_Button *title_left_btn);
+       bool set_title_right_btn(Elm_Button *title_right_btn);
+       bool set_title(const char *text);
+       bool set_toolbar(Elm_Toolbar *toolbar);
+       bool set_title_visible(bool visible, bool anim);
+       void unset_content();
+       Elm_Button *unset_title_left_btn();
+       Elm_Button *unset_title_right_btn();
+       Elm_Toolbar *unset_toolbar();
+       Evas_Object *get_base();
+
+       Elm_Button *get_title_left_btn()
+       {
+               return this->title_left_btn;
+       }
+
+       Elm_Button *get_title_right_btn()
+       {
+               return this->title_right_btn;
+       }
+
+       Elm_Toolbar *get_toolbar()
+       {
+               return this->toolbar;
+       }
+};
+
+}
+
 #define DEFAULT_GROUP "tizen_view/default"
 
 #define LAYOUT_VALIDATE() if (!layout) \
@@ -42,7 +100,7 @@ static void toolbar_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_in
        view->unset_toolbar();
 }
 
-bool ui_standard_view::destroy_layout()
+bool ui_standard_view_impl::destroy_layout()
 {
        if (!this->layout) return false;
        evas_object_del(this->layout);
@@ -51,11 +109,11 @@ bool ui_standard_view::destroy_layout()
        return true;
 }
 
-bool ui_standard_view::create_layout()
+bool ui_standard_view_impl::create_layout()
 {
        if (this->layout) return false;
 
-       Elm_Layout *layout = elm_layout_add(this->get_parent());
+       Elm_Layout *layout = elm_layout_add(this->view->get_parent());
        LAYOUT_VALIDATE();
 
        char buf[PATH_MAX];
@@ -70,9 +128,9 @@ bool ui_standard_view::create_layout()
        evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
        evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
 
-       if (this->get_content())
+       if (this->view->get_content())
        {
-               elm_object_part_content_set(layout, "elm.swallow.content", this->get_content());
+               elm_object_part_content_set(layout, "elm.swallow.content", this->view->get_content());
        }
 
        //Set software back key, if it's needed
@@ -104,36 +162,18 @@ bool ui_standard_view::create_layout()
        return true;
 }
 
-ui_standard_view::ui_standard_view(const char *name)
-               : ui_view(name), layout(NULL), toolbar(NULL), title_left_btn(NULL), title_right_btn(NULL)
+ui_standard_view_impl::ui_standard_view_impl(ui_standard_view *view)
+               : view(view), layout(NULL), toolbar(NULL), title_left_btn(NULL), title_right_btn(NULL)
 {
 }
 
-ui_standard_view::~ui_standard_view()
+ui_standard_view_impl::~ui_standard_view_impl()
 {
        destroy_layout();
 }
 
-void ui_standard_view::on_load()
+bool ui_standard_view_impl::set_content(Evas_Object *content, const char *title)
 {
-       ui_view::on_load();
-
-       Elm_Layout *layout = this->get_base();
-       evas_object_show(layout);
-}
-
-void ui_standard_view::on_unload()
-{
-       ui_view::on_unload();
-
-       Elm_Layout *layout = this->get_base();
-       evas_object_hide(layout);
-}
-
-bool ui_standard_view::set_content(Evas_Object *content, const char *title)
-{
-       ui_view::set_content(content);
-
        Elm_Layout *layout = this->get_base();
        LAYOUT_VALIDATE();
 
@@ -152,7 +192,7 @@ bool ui_standard_view::set_content(Evas_Object *content, const char *title)
        return true;
 }
 
-bool ui_standard_view::set_subtitle(const char *text)
+bool ui_standard_view_impl::set_subtitle(const char *text)
 {
        Elm_Layout *layout = this->get_base();
        LAYOUT_VALIDATE();
@@ -164,7 +204,7 @@ bool ui_standard_view::set_subtitle(const char *text)
        return true;
 }
 
-bool ui_standard_view::set_title_left_btn(Elm_Button *title_left_btn)
+bool ui_standard_view_impl::set_title_left_btn(Elm_Button *title_left_btn)
 {
        Elm_Layout *layout = this->get_base();
        LAYOUT_VALIDATE();
@@ -181,12 +221,12 @@ bool ui_standard_view::set_title_left_btn(Elm_Button *title_left_btn)
        elm_object_style_set(title_left_btn, "tizen_view/title_left");
        elm_object_part_content_set(layout, "title_left_btn", title_left_btn);
        elm_object_signal_emit(layout, "elm,state,title_left_btn,show", "viewmgr");
-       evas_object_event_callback_add(title_left_btn, EVAS_CALLBACK_DEL, title_left_btn_del_cb, this);
+       evas_object_event_callback_add(title_left_btn, EVAS_CALLBACK_DEL, title_left_btn_del_cb, this->view);
 
        return true;
 }
 
-bool ui_standard_view::set_title_right_btn(Elm_Button *title_right_btn)
+bool ui_standard_view_impl::set_title_right_btn(Elm_Button *title_right_btn)
 {
        Elm_Layout *layout = this->get_base();
        LAYOUT_VALIDATE();
@@ -203,12 +243,12 @@ bool ui_standard_view::set_title_right_btn(Elm_Button *title_right_btn)
        elm_object_style_set(title_right_btn, "tizen_view/title_right");
        elm_object_part_content_set(layout, "title_right_btn", title_right_btn);
        elm_object_signal_emit(layout, "elm,state,title_right_btn,show", "viewmgr");
-       evas_object_event_callback_add(title_right_btn, EVAS_CALLBACK_DEL, title_right_btn_del_cb, this);
+       evas_object_event_callback_add(title_right_btn, EVAS_CALLBACK_DEL, title_right_btn_del_cb, this->view);
 
        return true;
 }
 
-bool ui_standard_view::set_title_badge(const char *text)
+bool ui_standard_view_impl::set_title_badge(const char *text)
 {
        Elm_Layout *layout = this->get_base();
        LAYOUT_VALIDATE();
@@ -220,7 +260,7 @@ bool ui_standard_view::set_title_badge(const char *text)
        return true;
 }
 
-bool ui_standard_view::set_title(const char *text)
+bool ui_standard_view_impl::set_title(const char *text)
 {
        Elm_Layout *layout = this->get_base();
        LAYOUT_VALIDATE();
@@ -232,17 +272,7 @@ bool ui_standard_view::set_title(const char *text)
        return true;
 }
 
-bool ui_standard_view::set_content(Evas_Object *content, const char *title, const char *subtitle, Elm_Button *title_left_btn, Elm_Button *title_right_btn)
-{
-       if (!this->set_content(content, title)) return false;
-       if (!this->set_subtitle(subtitle)) return false;
-       if (!this->set_title_left_btn(title_left_btn)) return false;
-       if (!this->set_title_right_btn(title_right_btn)) return false;
-
-       return true;
-}
-
-bool ui_standard_view::set_toolbar(Elm_Toolbar *toolbar)
+bool ui_standard_view_impl::set_toolbar(Elm_Toolbar *toolbar)
 {
        Elm_Layout *layout = this->get_base();
        LAYOUT_VALIDATE();
@@ -274,35 +304,24 @@ bool ui_standard_view::set_toolbar(Elm_Toolbar *toolbar)
 
        elm_object_part_content_set(layout, "toolbar", toolbar);
        elm_object_signal_emit(layout, "elm,state,toolbar,show", "viewmgr");
-       evas_object_event_callback_add(toolbar, EVAS_CALLBACK_DEL, toolbar_del_cb, this);
+       evas_object_event_callback_add(toolbar, EVAS_CALLBACK_DEL, toolbar_del_cb, this->view);
 
        return true;
 }
 
-void ui_standard_view::set_event_block(bool block)
-{
-       ui_view::set_event_block(block);
-       evas_object_freeze_events_set(this->get_base(), block);
-}
-
-Evas_Object *ui_standard_view::unset_content()
+void ui_standard_view_impl::unset_content()
 {
-       Evas_Object *pcontent = ui_view::unset_content();
-       if (!pcontent) return NULL;
-
        Elm_Layout *layout = this->get_base();
        if (!layout)
        {
                LOGE("Layout is invalid! ui_standard_view(%p)", this);
-               return pcontent;
+               return;
        }
        elm_object_part_content_unset(layout, "elm.swallow.content");
        elm_object_signal_emit(layout, "elm.state,elm.swallow.content,hide", "viewmgr");
-
-       return pcontent;
 }
 
-Elm_Button *ui_standard_view::unset_title_left_btn()
+Elm_Button *ui_standard_view_impl::unset_title_left_btn()
 {
        Elm_Button *btn = this->title_left_btn;
        if (!btn) return NULL;
@@ -323,7 +342,7 @@ Elm_Button *ui_standard_view::unset_title_left_btn()
        return btn;
 }
 
-Elm_Button *ui_standard_view::unset_title_right_btn()
+Elm_Button *ui_standard_view_impl::unset_title_right_btn()
 {
        Elm_Button *btn = this->title_right_btn;
        if (!btn) return NULL;
@@ -344,7 +363,7 @@ Elm_Button *ui_standard_view::unset_title_right_btn()
        return btn;
 }
 
-Elm_Toolbar *ui_standard_view::unset_toolbar()
+Elm_Toolbar *ui_standard_view_impl::unset_toolbar()
 {
        Elm_Toolbar *toolbar = this->toolbar;
        if (!toolbar) return NULL;
@@ -365,7 +384,7 @@ Elm_Toolbar *ui_standard_view::unset_toolbar()
        return toolbar;
 }
 
-Evas_Object *ui_standard_view::get_base()
+Evas_Object *ui_standard_view_impl::get_base()
 {
        if (!this->layout)
        {
@@ -374,7 +393,7 @@ Evas_Object *ui_standard_view::get_base()
        return this->layout;
 }
 
-bool ui_standard_view::set_title_visible(bool visible, bool anim)
+bool ui_standard_view_impl::set_title_visible(bool visible, bool anim)
 {
        //FIXME: save visible, anim value. they can be used in layout created time.
        Elm_Layout *layout = this->get_base();
@@ -397,3 +416,136 @@ bool ui_standard_view::set_title_visible(bool visible, bool anim)
 
        return true;
 }
+
+/***********************************************************************************************/
+/* External class Implementation                                                               */
+/***********************************************************************************************/
+
+ui_standard_view::ui_standard_view(const char *name)
+               : ui_view(name)
+{
+       this->impl = new ui_standard_view_impl(this);
+}
+
+ui_standard_view::~ui_standard_view()
+{
+       delete(this->impl);
+}
+
+void ui_standard_view::on_load()
+{
+       ui_view::on_load();
+
+       Elm_Layout *layout = this->get_base();
+       evas_object_show(layout);
+}
+
+void ui_standard_view::on_unload()
+{
+       ui_view::on_unload();
+
+       Elm_Layout *layout = this->get_base();
+       evas_object_hide(layout);
+}
+
+bool ui_standard_view::set_content(Evas_Object *content, const char *title)
+{
+       ui_view::set_content(content);
+       return this->impl->set_content(content, title);
+}
+
+bool ui_standard_view::set_subtitle(const char *text)
+{
+       return this->impl->set_subtitle(text);
+}
+
+bool ui_standard_view::set_title_left_btn(Elm_Button *title_left_btn)
+{
+       return this->impl->set_title_left_btn(title_left_btn);
+}
+
+bool ui_standard_view::set_title_right_btn(Elm_Button *title_right_btn)
+{
+       return this->impl->set_title_right_btn(title_right_btn);
+}
+
+bool ui_standard_view::set_title_badge(const char *text)
+{
+       return this->impl->set_title_badge(text);
+}
+
+bool ui_standard_view::set_title(const char *text)
+{
+       return this->impl->set_title(text);
+}
+
+bool ui_standard_view::set_content(Evas_Object *content, const char *title, const char *subtitle, Elm_Button *title_left_btn, Elm_Button *title_right_btn)
+{
+       if (!this->set_content(content, title)) return false;
+       if (!this->set_subtitle(subtitle)) return false;
+       if (!this->set_title_left_btn(title_left_btn)) return false;
+       if (!this->set_title_right_btn(title_right_btn)) return false;
+
+       return true;
+}
+
+bool ui_standard_view::set_toolbar(Elm_Toolbar *toolbar)
+{
+       return this->impl->set_toolbar(toolbar);
+}
+
+void ui_standard_view::set_event_block(bool block)
+{
+       ui_view::set_event_block(block);
+       evas_object_freeze_events_set(this->get_base(), block);
+}
+
+Evas_Object *ui_standard_view::unset_content()
+{
+       Evas_Object *pcontent = ui_view::unset_content();
+       if (!pcontent) return NULL;
+
+       this->impl->unset_content();
+
+       return pcontent;
+}
+
+Elm_Button *ui_standard_view::unset_title_left_btn()
+{
+       return this->impl->unset_title_left_btn();
+}
+
+Elm_Button *ui_standard_view::unset_title_right_btn()
+{
+       return this->impl->unset_title_right_btn();
+}
+
+Elm_Toolbar *ui_standard_view::unset_toolbar()
+{
+       return this->impl->unset_toolbar();
+}
+
+Evas_Object *ui_standard_view::get_base()
+{
+       return this->impl->get_base();
+}
+
+bool ui_standard_view::set_title_visible(bool visible, bool anim)
+{
+       return this->impl->set_title_visible(visible, anim);
+}
+
+Elm_Button *ui_standard_view::get_title_left_btn()
+{
+       return this->impl->get_title_left_btn();
+}
+
+Elm_Button *ui_standard_view::get_title_right_btn()
+{
+       return this->impl->get_title_right_btn();
+}
+
+Elm_Toolbar *ui_standard_view::get_toolbar()
+{
+       return this->impl->get_toolbar();
+}
index 12c97f277bfdc54550f8103936e5b2456ee04e9b..3cbc0c75f998ad501ded352546557e1c245ae0d1 100644 (file)
  *  limitations under the License.
  *
  */
+#include <list>
 #include "../../../include/efl/mobile/ui_mobile_viewmanager.h"
 
+/***********************************************************************************************/
+/* Internal class Implementation                                                               */
+/***********************************************************************************************/
+
+using namespace std;
+
+namespace efl_viewmanager
+{
+
+class ui_view_impl
+{
+       friend class ui_view;
+
+private:
+       ui_view *view;
+       ui_menu *menu;
+       list<ui_popup *> popup_list;
+
+       void connect_popup(ui_popup *popup);
+       void disconnect_popup(ui_popup *popup);
+       bool deactivate_popup(bool top_one);
+
+protected:
+       ui_menu *on_menu_pre();
+       void on_menu_post();
+       void on_rotate(int degree);
+       void on_portrait();
+       void on_landscape();
+       bool on_back();
+
+public:
+       ui_view_impl(ui_view *view);
+       ~ui_view_impl();
+
+       const ui_menu *get_menu()
+       {
+               return this->menu;
+       }
+};
+
+}
+
 typedef list<ui_popup*>::reverse_iterator popup_ritr;
 
-void ui_view::connect_popup(ui_popup *popup)
+void ui_view_impl::connect_popup(ui_popup *popup)
 {
        this->popup_list.push_back(popup);
 }
 
-void ui_view::disconnect_popup(ui_popup *popup)
+void ui_view_impl::disconnect_popup(ui_popup *popup)
 {
        this->popup_list.remove(popup);
 }
 
-bool ui_view::deactivate_popup(bool top_one)
+bool ui_view_impl::deactivate_popup(bool top_one)
 {
        for (popup_ritr it = this->popup_list.rbegin(); it != this->popup_list.rend(); it++)
        {
@@ -41,43 +84,40 @@ bool ui_view::deactivate_popup(bool top_one)
        return false;
 }
 
-void ui_view::on_deactivate()
-{
-       deactivate_popup(false);
-       ui_base_view::on_deactivate();
-}
-
-void ui_view::on_back()
+bool ui_view_impl::on_back()
 {
        //If any popup is activated, deactivate the popup first.
-       if (this->deactivate_popup(true)) return;
+       if (this->deactivate_popup(true))
+               {
+               return false;
 
+               }
        if (this->menu)
        {
                if (this->menu->is_activated())
                {
                        this->menu->on_back();
-                       return;
+                       return false;
                }
        }
-       ui_base_view::on_back();
+       return true;
 }
 
-ui_view::ui_view(const char *name)
-               : ui_base_view(name), menu(NULL)
+ui_view_impl::ui_view_impl(ui_view *view)
+               : view(view), menu(NULL)
 {
 }
 
-ui_view::~ui_view()
+ui_view_impl::~ui_view_impl()
 {
        if (menu) delete (this->menu);
 }
 
-ui_menu *ui_view::on_menu_pre()
+ui_menu *ui_view_impl::on_menu_pre()
 {
        if (!this->menu)
        {
-               this->menu = new ui_menu(this);
+               this->menu = new ui_menu(this->view);
        }
 
        if (this->menu->is_activated())
@@ -89,39 +129,106 @@ ui_menu *ui_view::on_menu_pre()
        return this->menu;
 }
 
+void ui_view_impl::on_menu_post()
+{
+       if (!this->menu) return;
+       this->menu->activate();
+}
+
+void ui_view_impl::on_rotate(int degree)
+{
+       if (!this->menu) return;
+       if (!this->menu->is_activated()) return;
+       this->menu->on_rotate(degree);
+}
+
+void ui_view_impl::on_portrait()
+{
+       if (!this->menu) return;
+       if (!this->menu->is_activated()) return;
+       this->menu->on_portrait();
+}
+
+void ui_view_impl::on_landscape()
+{
+       if (!this->menu) return;
+       if (!this->menu->is_activated()) return;
+       this->menu->on_landscape();
+}
+
+/***********************************************************************************************/
+/* External class Implementation                                                               */
+/***********************************************************************************************/
+
+void ui_view::connect_popup(ui_popup *popup)
+{
+       this->impl->connect_popup(popup);
+}
+
+void ui_view::disconnect_popup(ui_popup *popup)
+{
+       this->impl->disconnect_popup(popup);
+}
+
+void ui_view::on_deactivate()
+{
+       this->impl->deactivate_popup(false);
+       ui_base_view::on_deactivate();
+}
+
+void ui_view::on_back()
+{
+       if (!this->impl->on_back()) return;
+       ui_base_view::on_back();
+}
+
+ui_view::ui_view(const char *name)
+               : ui_base_view(name)
+{
+       this->impl = new ui_view_impl(this);
+}
+
+ui_view::~ui_view()
+{
+       delete(this->impl);
+}
+
+ui_menu *ui_view::on_menu_pre()
+{
+       return this->impl->on_menu_pre();
+}
+
 void ui_view::on_menu(ui_menu *menu)
 {
 }
 
 void ui_view::on_menu_post()
 {
-       if (!this->menu) return;
-       this->menu->activate();
+       this->impl->on_menu_post();
 }
 
 void ui_view::on_rotate(int degree)
 {
        //FIXME: see how to handle on_menu()
        ui_base_view::on_rotate(degree);
-       if (!this->menu) return;
-       if (!this->menu->is_activated()) return;
-       this->menu->on_rotate(degree);
+       this->impl->on_rotate(degree);
 }
 
 void ui_view::on_portrait()
 {
        //FIXME: see how to handle on_menu()
        ui_base_view::on_portrait();
-       if (!this->menu) return;
-       if (!this->menu->is_activated()) return;
-       this->menu->on_portrait();
+       this->impl->on_portrait();
 }
 
 void ui_view::on_landscape()
 {
        //FIXME: see how to handle on_menu()
        ui_base_view::on_landscape();
-       if (!this->menu) return;
-       if (!this->menu->is_activated()) return;
-       this->menu->on_landscape();
+       this->impl->on_landscape();
+}
+
+const ui_menu *ui_view::get_menu()
+{
+       return this->impl->get_menu();
 }
index d70eca0c6599044eb09a9e0e0c5d74adf7a8a383..6fc311fb12daa6661db42980fe8435a6865f4e48 100644 (file)
  */
 #include "../../../include/efl/mobile/ui_mobile_viewmanager.h"
 
+/***********************************************************************************************/
+/* Internal class Implementation                                                               */
+/***********************************************************************************************/
+namespace efl_viewmanager
+{
+
+class ui_viewmgr_impl;
+
+}
+
+/***********************************************************************************************/
+/* External class Implementation                                                               */
+/***********************************************************************************************/
+
 ui_viewmgr::ui_viewmgr(const char *pkg)
                : ui_base_viewmgr(pkg, new ui_key_listener(this))
 {
index 81b924e74c74286144e32a05b67f49ffc5366e3b..06afb8f053b6b9ac0225e3c488d78da47077b492 100644 (file)
@@ -34,6 +34,7 @@ public:
 
        bool init();
        bool term();
+       void event_proc(Evas_Event_Key_Down *ev);
        ui_base_viewmgr *get_viewmgr() { return this->viewmgr; }
        Evas_Object *get_keygrab_obj() { return this->key_grabber; }
 };
@@ -42,29 +43,34 @@ public:
 static const char *KEY_BACK = "XF86Back";
 static const char *KEY_BACK2 = "XF86Stop";
 
-static void event_proc(ui_base_key_listener *key_listener, Evas_Event_Key_Down *ev)
+static void key_grab_rect_key_up_cb(ui_base_key_listener_impl *key_listener, Evas_Event_Key_Down *ev)
+{
+       key_listener->event_proc(ev);
+}
+
+ui_base_key_listener_impl::ui_base_key_listener_impl(ui_base_key_listener *key_listener, ui_base_viewmgr *viewmgr)
+               : key_listener(key_listener), viewmgr(viewmgr), key_grabber(NULL)
+{
+
+}
+
+void ui_base_key_listener_impl::event_proc(Evas_Event_Key_Down *ev)
 {
        //Only if view manager is activated
-       ui_base_viewmgr *viewmgr = key_listener->get_viewmgr();
+       ui_base_viewmgr *viewmgr = this->key_listener->get_viewmgr();
        if (!viewmgr->is_activated()) return;
 
        //Get Top View
        ui_base_view *view = viewmgr->get_last_view();
        if (!view) return;
 
-       key_listener->extend_event_proc(view, ev);
+       this->key_listener->extend_event_proc(view, ev);
 
        if (strcmp(ev->keyname, KEY_BACK) && strcmp(ev->keyname, KEY_BACK2)) return;
 
        view->on_back();
 }
 
-ui_base_key_listener_impl::ui_base_key_listener_impl(ui_base_key_listener *key_listener, ui_base_viewmgr *viewmgr)
-               : key_listener(key_listener), viewmgr(viewmgr), key_grabber(NULL)
-{
-
-}
-
 bool ui_base_key_listener_impl::term()
 {
        evas_object_del(this->key_grabber);
@@ -96,9 +102,9 @@ bool ui_base_key_listener_impl::init()
        evas_object_event_callback_add(key_grab_rect, EVAS_CALLBACK_KEY_UP, [](void *data, Evas *e, Evas_Object *obj, void *event_info) -> void
        {
                Evas_Event_Key_Down *ev = static_cast<Evas_Event_Key_Down *>(event_info);
-               ui_base_key_listener *key_listener = static_cast<ui_base_key_listener *>(data);
-               event_proc(key_listener, ev);
-       }, this->key_listener);
+               ui_base_key_listener_impl *key_listener = static_cast<ui_base_key_listener_impl *>(data);
+               key_grab_rect_key_up_cb(key_listener, ev);
+       }, this);
 
        if (!evas_object_key_grab(key_grab_rect, KEY_BACK, 0, 0, EINA_FALSE))
        {