*/
#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) \
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);
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];
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
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();
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();
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();
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();
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();
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();
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();
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;
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;
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;
return toolbar;
}
-Evas_Object *ui_standard_view::get_base()
+Evas_Object *ui_standard_view_impl::get_base()
{
if (!this->layout)
{
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();
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();
+}
* 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++)
{
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())
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();
}