From: Hermet Park Date: Tue, 3 May 2016 07:06:49 +0000 (+0900) Subject: sort out public/internal apis. X-Git-Tag: submit/tizen/20160617.075742~44 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F62%2F68262%2F4;p=platform%2Fcore%2Fuifw%2Fui-viewmgr.git sort out public/internal apis. Change-Id: Ic932c56710fa071ae8b5b5c2f4f85ec27f8fdebe --- diff --git a/src/include/efl/mobile/ui_menu.h b/src/include/efl/mobile/ui_menu.h index aaa547c..a3270b2 100644 --- a/src/include/efl/mobile/ui_menu.h +++ b/src/include/efl/mobile/ui_menu.h @@ -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); }; } diff --git a/src/include/efl/mobile/ui_popup.h b/src/include/efl/mobile/ui_popup.h index 40f695b..feb8ea1 100644 --- a/src/include/efl/mobile/ui_popup.h +++ b/src/include/efl/mobile/ui_popup.h @@ -19,11 +19,11 @@ 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); }; } diff --git a/src/include/efl/mobile/ui_standard_view.h b/src/include/efl/mobile/ui_standard_view.h index 984a857..0f22c31 100644 --- a/src/include/efl/mobile/ui_standard_view.h +++ b/src/include/efl/mobile/ui_standard_view.h @@ -19,23 +19,8 @@ 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); }; } diff --git a/src/include/efl/mobile/ui_view.h b/src/include/efl/mobile/ui_view.h index 54f01ac..a0afc30 100644 --- a/src/include/efl/mobile/ui_view.h +++ b/src/include/efl/mobile/ui_view.h @@ -17,10 +17,6 @@ #ifndef _UI_VIEW_H_ #define _UI_VIEW_H_ -#include - -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 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); }; } diff --git a/src/include/efl/mobile/ui_viewmgr.h b/src/include/efl/mobile/ui_viewmgr.h index 1075629..f7d48c7 100644 --- a/src/include/efl/mobile/ui_viewmgr.h +++ b/src/include/efl/mobile/ui_viewmgr.h @@ -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); }; } diff --git a/src/include/efl/ui_base_key_listener.h b/src/include/efl/ui_base_key_listener.h index 05f6a21..8eb9a7c 100644 --- a/src/include/efl/ui_base_key_listener.h +++ b/src/include/efl/ui_base_key_listener.h @@ -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); }; } diff --git a/src/lib/efl/mobile/ui_standard_view.cpp b/src/lib/efl/mobile/ui_standard_view.cpp index 9636b2e..217df59 100644 --- a/src/lib/efl/mobile/ui_standard_view.cpp +++ b/src/lib/efl/mobile/ui_standard_view.cpp @@ -16,6 +16,64 @@ */ #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(); +} diff --git a/src/lib/efl/mobile/ui_view.cpp b/src/lib/efl/mobile/ui_view.cpp index 12c97f2..3cbc0c7 100644 --- a/src/lib/efl/mobile/ui_view.cpp +++ b/src/lib/efl/mobile/ui_view.cpp @@ -14,21 +14,64 @@ * limitations under the License. * */ +#include #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 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::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(); } diff --git a/src/lib/efl/mobile/ui_viewmgr.cpp b/src/lib/efl/mobile/ui_viewmgr.cpp index d70eca0..6fc311f 100644 --- a/src/lib/efl/mobile/ui_viewmgr.cpp +++ b/src/lib/efl/mobile/ui_viewmgr.cpp @@ -16,6 +16,20 @@ */ #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)) { diff --git a/src/lib/efl/ui_base_key_listener.cpp b/src/lib/efl/ui_base_key_listener.cpp index 81b924e..06afb8f 100644 --- a/src/lib/efl/ui_base_key_listener.cpp +++ b/src/lib/efl/ui_base_key_listener.cpp @@ -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(event_info); - ui_base_key_listener *key_listener = static_cast(data); - event_proc(key_listener, ev); - }, this->key_listener); + ui_base_key_listener_impl *key_listener = static_cast(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)) {