From f95f7a3b9d015d41b4bccba0b8c13af3e76d3f11 Mon Sep 17 00:00:00 2001 From: Woochan Lee Date: Tue, 31 May 2016 17:12:59 +0900 Subject: [PATCH] Implement CAPIs, C example. Change-Id: I31d3f8a410504b8129ffd4dee5b40dc56df2a75f --- src/examples/efl/c/main.c | 3 - src/examples/efl/c/main.cpp | 913 +++++++++++++++++++++++++++- src/include/efl/mobile/c/ui_popup.h | 1 + src/include/efl/mobile/c/ui_view.h | 10 +- src/lib/efl/mobile/c/ui_menu.cpp | 9 +- src/lib/efl/mobile/c/ui_popup.cpp | 37 +- src/lib/efl/mobile/c/ui_view.cpp | 242 +++++++- 7 files changed, 1172 insertions(+), 43 deletions(-) diff --git a/src/examples/efl/c/main.c b/src/examples/efl/c/main.c index 2bcea7a..fc38df4 100644 --- a/src/examples/efl/c/main.c +++ b/src/examples/efl/c/main.c @@ -592,9 +592,6 @@ create_page12() static void view11_prev_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) - ol ui_popup_content_set(ui_popup *popup, Elm_Popup *popup); - bool ui_popup_activate(ui_popup *popup); - { UI_VIEWMGR_VIEW_POP(); } diff --git a/src/examples/efl/c/main.cpp b/src/examples/efl/c/main.cpp index ac1882f..ed6b5ff 100644 --- a/src/examples/efl/c/main.cpp +++ b/src/examples/efl/c/main.cpp @@ -1,6 +1,173 @@ //This is to check CAPIs. #include "main.h" +Evas_Object* +create_landscape_content(Evas_Object *parent, const char *text, Evas_Smart_Cb prev_btn_clicked_cb, Evas_Smart_Cb next_btn_clicked_cb) +{ + char buf[PATH_MAX]; + Elm_Grid *grid; + Elm_Box *box; + Elm_Layout *layout; + Elm_Scroller *scroller; + Elm_Button *btn; + Elm_Image *image; + + /* Scroller */ + scroller = elm_scroller_add(parent); + elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE); + elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); + + /* Grid */ + grid = elm_grid_add(scroller); + evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(grid); + + /* NoContent Layout */ + layout = elm_layout_add(grid); + elm_layout_theme_set(layout, "layout", "nocontents", "default"); + elm_object_part_text_set(layout, "elm.text", text); + evas_object_show(layout); + elm_grid_pack(grid, layout, 0, 0, 50, 100); + + /* Image */ + image = elm_image_add(grid); + snprintf(buf, sizeof(buf), "%s/data/images/tizen.png", BINDIR); + elm_image_file_set(image, buf, NULL); + evas_object_show(image); + elm_grid_pack(grid, image, 50, 0, 50, 85); + + /* Box */ + box = elm_box_add(grid); + elm_box_horizontal_set(box, EINA_TRUE); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_padding_set(box, ELM_SCALE_SIZE(50), 0); + evas_object_show(box); + elm_grid_pack(grid, box, 0, 0, 100, 100); + + /* Previous Page Button */ + btn = elm_button_add(grid); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 1.0); + elm_object_text_set(btn, "Prev"); + evas_object_smart_callback_add(btn, "clicked", prev_btn_clicked_cb, NULL); + evas_object_show(btn); + elm_box_pack_end(box, btn); + + /* Next Page Button */ + btn = elm_button_add(grid); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 1.0); + elm_object_text_set(btn, "Next"); + evas_object_smart_callback_add(btn, "clicked", next_btn_clicked_cb, NULL); + evas_object_show(btn); + elm_box_pack_end(box, btn); + + elm_object_content_set(scroller, grid); + + return scroller; +} + + +Evas_Object* +create_title_handle_content(Evas_Object *parent, Evas_Smart_Cb prev_btn_clicked_cb, Evas_Smart_Cb next_btn_clicked_cb, + Evas_Smart_Cb title_show_btn_clicked_cb, Evas_Smart_Cb title_hide_btn_clicked_cb, + Evas_Smart_Cb title_show_anim_btn_clicked_cb, Evas_Smart_Cb title_hide_anim_btn_clicked_cb, ui_view *view) +{ + Elm_Grid *grid; + Elm_Box *box; + Elm_Layout *layout; + Elm_Button *btn; + + /* Grid */ + grid = elm_grid_add(parent); + evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(grid); + + /* NoContent Layout */ + layout = elm_layout_add(grid); + elm_layout_theme_set(layout, "layout", "nocontents", "default"); + elm_object_part_text_set(layout, "elm.text", NULL); + evas_object_show(layout); + elm_grid_pack(grid, layout, 0, 0, 100, 100); + + /* Box */ + box = elm_box_add(grid); + //elm_box_horizontal_set(box, EINA_TRUE); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + //elm_box_padding_set(box, ELM_SCALE_SIZE(50), 0); + evas_object_show(box); + elm_grid_pack(grid, box, 25, 15, 50, 50); + + /* Title Show Button */ + btn = elm_button_add(grid); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 1.0); + elm_object_text_set(btn, "Title Show"); + evas_object_smart_callback_add(btn, "clicked", title_show_btn_clicked_cb, view); + evas_object_show(btn); + elm_box_pack_end(box, btn); + + /* Title Hide Button */ + btn = elm_button_add(grid); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 1.0); + elm_object_text_set(btn, "Title Hide"); + evas_object_smart_callback_add(btn, "clicked", title_hide_btn_clicked_cb, view); + evas_object_show(btn); + elm_box_pack_end(box, btn); + + /* Title Show Anim Button */ + btn = elm_button_add(grid); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 1.0); + elm_object_text_set(btn, "Title Show Anim"); + evas_object_smart_callback_add(btn, "clicked", title_show_anim_btn_clicked_cb, view); + evas_object_show(btn); + elm_box_pack_end(box, btn); + + /* Title Hide Anim Button */ + btn = elm_button_add(grid); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 1.0); + elm_object_text_set(btn, "Title Hide Anim"); + evas_object_smart_callback_add(btn, "clicked", title_hide_anim_btn_clicked_cb, view); + evas_object_show(btn); + elm_box_pack_end(box, btn); + + /* Box */ + box = elm_box_add(grid); + elm_box_horizontal_set(box, EINA_TRUE); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, 1.0); + elm_box_padding_set(box, ELM_SCALE_SIZE(50), 0); + evas_object_show(box); + elm_grid_pack(grid, box, 0, 0, 100, 100); + + /* Previous Page Button */ + btn = elm_button_add(grid); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 1.0); + elm_object_text_set(btn, "Prev"); + evas_object_smart_callback_add(btn, "clicked", prev_btn_clicked_cb, NULL); + evas_object_show(btn); + elm_box_pack_end(box, btn); + + /* Next Page Button */ + btn = elm_button_add(grid); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 1.0); + elm_object_text_set(btn, "Next"); + evas_object_smart_callback_add(btn, "clicked", next_btn_clicked_cb, NULL); + evas_object_show(btn); + elm_box_pack_end(box, btn); + + return grid; +} + Evas_Object* create_content(Evas_Object *parent, const char *text, Evas_Smart_Cb prev_btn_clicked_cb, Evas_Smart_Cb next_btn_clicked_cb) { @@ -60,6 +227,750 @@ create_content(Evas_Object *parent, const char *text, Evas_Smart_Cb prev_btn_cli return scroller; } +Evas_Object* +create_scrolling_content(Evas_Object *parent) +{ + char buf[PATH_MAX]; + Elm_Image *image; + + /* Image */ + image = elm_image_add(parent); + snprintf(buf, sizeof(buf), "%s/data/images/bg.png", BINDIR); + elm_image_file_set(image, buf, NULL); + elm_image_resizable_set(image, EINA_FALSE, EINA_FALSE); + evas_object_show(image); + + return image; +} + +Elm_Toolbar* +create_toolbar(Evas_Object *parent, const char *style) +{ + Elm_Toolbar *toolbar; + + toolbar = elm_toolbar_add(parent); + + //FIXME: :( UI_View can set this style instead. + elm_object_style_set(toolbar, style); + + //FIXME: If not call below API, toolbar items create with min size. + // It looks toolbar bug. + elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND); + + elm_toolbar_item_append(toolbar, NULL, "Tab1", NULL, NULL); + elm_toolbar_item_append(toolbar, NULL, "Tab2", NULL, NULL); + elm_toolbar_item_append(toolbar, NULL, "Tab3", NULL, NULL); + elm_toolbar_item_append(toolbar, NULL, "Tab4", NULL, NULL); + + return toolbar; +} + +//================================================================================= +//================================== View 16 ====================================== +//================================================================================= + +static void +view16_prev_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + UI_VIEWMGR_VIEW_POP(); +} + +static void +view16_next_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + UI_VIEWMGR_DEACTIVATE(); +} + +static void +view16_title_show_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + ui_view *view = static_cast(data); + ui_standard_view_title_visible_set(view, true, false); +} + +static void +view16_title_hide_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + ui_view *view = static_cast(data); + ui_standard_view_title_visible_set(view, false, false); +} + +static void +view16_title_show_anim_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + ui_view *view = static_cast(data); + ui_standard_view_title_visible_set(view, true, true); +} + +static void +view16_title_hide_anim_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + ui_view *view = static_cast(data); + ui_standard_view_title_visible_set(view, false, true); +} + +static void +view16_load_cb(ui_view *view, void *data) +{ + Evas_Object *base_layout = ui_view_base_get(view); + + Evas_Object *content = create_title_handle_content(base_layout, + view16_prev_btn_clicked_cb, view16_next_btn_clicked_cb, + view16_title_show_btn_clicked_cb, view16_title_hide_btn_clicked_cb, + view16_title_show_anim_btn_clicked_cb, view16_title_hide_anim_btn_clicked_cb, view); + + ui_standard_view_content_set(view, content, "Page16", NULL, NULL, NULL); +} + +static void +create_page16() +{ + ui_view_lifecycle_callback_s lifecycle_callback = {0, }; + + lifecycle_callback.load = view16_load_cb; + + ui_view *view = ui_standard_view_create("page16"); + + int ret = ui_view_lifecycle_callbacks_set(view, &lifecycle_callback, NULL); + if (ret != 0) + { + //TODO + } + + UI_VIEWMGR_VIEW_PUSH(view); +} + +//================================================================================= +//================================== View 15 ====================================== +//================================================================================= + +static void +view15_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + create_page16(); +} + +static void +view15_load_cb(ui_view *view, void *data) +{ + Evas_Object *base_layout = ui_view_base_get(view); + + Evas_Object *content = create_scrolling_content(base_layout); + + ui_standard_view_content_set(view, content, "Page 15 Scroller In Viewmgr", NULL, NULL, NULL); + + //Title Right button + Elm_Button *right_btn = elm_button_add(base_layout); + elm_object_text_set(right_btn, "Next"); + evas_object_smart_callback_add(right_btn, "clicked", view15_btn_clicked_cb, NULL); + + ui_standard_view_title_right_btn_set(view, right_btn); +} + +static void +create_page15() +{ + ui_view_lifecycle_callback_s lifecycle_callback = {0, }; + + lifecycle_callback.load = view15_load_cb; + + ui_view *view = ui_standard_view_create("page15"); + + int ret = ui_view_lifecycle_callbacks_set(view, &lifecycle_callback, NULL); + if (ret != 0) + { + //TODO + } + + UI_VIEWMGR_VIEW_PUSH(view); +} + +//================================================================================= +//================================== View 14 ====================================== +//================================================================================= + +static void +view14_prev_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + UI_VIEWMGR_VIEW_POP(); +} + +static void +view14_next_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + create_page15(); +} + +static void +view14_load_cb(ui_view *view, void *data) +{ + Evas_Object *base_layout = ui_view_base_get(view); + + Evas_Object *content = create_content(base_layout, "ViewMgr Demo
None Transition", + view14_prev_btn_clicked_cb, view14_next_btn_clicked_cb); + + ui_standard_view_content_set(view, content, "Page14", NULL, NULL, NULL); +} + +static void +create_page14() +{ + ui_view_lifecycle_callback_s lifecycle_callback = {0, }; + + lifecycle_callback.load = view14_load_cb; + + ui_view *view = ui_standard_view_create("page14"); + ui_view_transition_style_set(view, "none"); + + int ret = ui_view_lifecycle_callbacks_set(view, &lifecycle_callback, NULL); + if (ret != 0) + { + //TODO + } + + UI_VIEWMGR_VIEW_PUSH(view); +} + +//================================================================================= +//================================== View 13 ====================================== +//================================================================================= + +static void +view13_prev_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + UI_VIEWMGR_VIEW_POP(); +} + +static void +view13_next_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + create_page14(); +} + +static void +view13_load_cb(ui_view *view, void *data) +{ + Evas_Object *base_layout = ui_view_base_get(view); + + Evas_Object *content = create_content(base_layout, "ViewMgr Demo
Fade Transition", + view13_prev_btn_clicked_cb, view13_next_btn_clicked_cb); + + ui_standard_view_content_set(view, content, "Page13", NULL, NULL, NULL); +} + +static void +create_page13() +{ + ui_view_lifecycle_callback_s lifecycle_callback = {0, }; + + lifecycle_callback.load = view13_load_cb; + + ui_view *view = ui_standard_view_create("page13"); + ui_view_transition_style_set(view, "fade"); + + int ret = ui_view_lifecycle_callbacks_set(view, &lifecycle_callback, NULL); + if (ret != 0) + { + //TODO + } + + UI_VIEWMGR_VIEW_PUSH(view); +} + +//================================================================================= +//================================== View 12 ====================================== +//================================================================================= + +static void +view12_prev_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + UI_VIEWMGR_VIEW_POP(); +} + +static void +view12_next_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + create_page13(); +} + +static void +popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + elm_popup_dismiss(obj); +} + +static void +popup_timeout_cb(void *data, Evas_Object *obj, void *event_info) +{ + elm_popup_dismiss(obj); +} + +static void +popup_dismissed_cb(void *data, Evas_Object *obj, void *event_info) +{ + //FIXME: remove dismissed callback because this callback is called twice. + //It seems this is an efl or popup error, not this ui_popup nor example. + evas_object_smart_callback_del(obj, "dismissed", popup_dismissed_cb); + ui_popup *popup = static_cast(data); + + //Is It right? + ui_popup_del(popup); +} + +static void +view12_btn_clicked(void *data, Evas_Object *obj, void *event_info) +{ + ui_view *view = static_cast(data); + + //Create popup. + //FIXME: is overlay a proper name? + ui_popup *popup = ui_popup_create(view); + + Elm_Popup *elm_popup = elm_popup_add(ui_view_base_get(view)); + elm_object_text_set(elm_popup, "This popup has only text which is set via desc set function, (This popup gets hidden when user clicks outside) here timeout of 3 sec is set."); + elm_popup_timeout_set(elm_popup, 3.0); + evas_object_smart_callback_add(elm_popup, "dismissed", popup_dismissed_cb, popup); + evas_object_smart_callback_add(elm_popup, "block,clicked", popup_block_clicked_cb, NULL); + evas_object_smart_callback_add(elm_popup, "timeout", popup_timeout_cb, NULL); + + ui_popup_content_set(popup, elm_popup); + ui_popup_activate(popup); +} + +static void +view12_load_cb(ui_view *view, void *data) +{ + Evas_Object *base_layout = ui_view_base_get(view); + + Evas_Object *content = create_content(base_layout, "ViewMgr Demo
Popup", + view12_prev_btn_clicked_cb, view12_next_btn_clicked_cb); + + ui_standard_view_content_set(view, content, "Page12", NULL, NULL, NULL); + + //Title Right button + Elm_Button *right_btn = elm_button_add(base_layout); + elm_object_text_set(right_btn, "popup"); + evas_object_smart_callback_add(right_btn, "clicked", view12_btn_clicked, view); + + ui_standard_view_title_right_btn_set(view, right_btn); +} + +static void +create_page12() +{ + ui_view_lifecycle_callback_s lifecycle_callback = {0, }; + lifecycle_callback.load = view12_load_cb; + + ui_view *view = ui_standard_view_create("page12"); + + int ret = ui_view_lifecycle_callbacks_set(view, &lifecycle_callback, NULL); + if (ret != 0) + { + //TODO + } + + UI_VIEWMGR_VIEW_PUSH(view); +} + +//================================================================================= +//================================== View 11 ====================================== +//================================================================================= + +static void +view11_prev_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + UI_VIEWMGR_VIEW_POP(); +} + +static void +view11_next_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + create_page12(); +} + +static void +view11_load_cb(ui_view *view, void *data) +{ + Evas_Object *base_layout = ui_view_base_get(view); + + Evas_Object *content = create_content(base_layout, "ViewMgr Demo
Menu Popup", + view11_prev_btn_clicked_cb, view11_next_btn_clicked_cb); + + ui_standard_view_content_set(view, content, "Page11", NULL, NULL, NULL); +} + +static void ctxpopup_item_select_cb(void *data, Evas_Object *obj, void *event_info) +{ + Elm_Object_Item *it = static_cast(event_info); + elm_ctxpopup_dismiss(obj); + LOGE("Item (%s) is selected", elm_object_item_text_get(it)); +} + +static void +view11_menu_cb(ui_menu *menu, void *data) +{ + Elm_Ctxpopup *ctxpopup = elm_ctxpopup_add(menu->get_base()); + elm_ctxpopup_item_append(ctxpopup, "Phone calls", NULL, ctxpopup_item_select_cb, NULL); + elm_ctxpopup_item_append(ctxpopup, "Favorites", NULL, ctxpopup_item_select_cb, NULL); + elm_ctxpopup_item_append(ctxpopup, "Search", NULL, ctxpopup_item_select_cb, NULL); + elm_ctxpopup_item_append(ctxpopup, "Dialer", NULL, ctxpopup_item_select_cb, NULL); + elm_ctxpopup_item_append(ctxpopup, "Add contact", NULL, ctxpopup_item_select_cb, NULL); + elm_ctxpopup_item_append(ctxpopup, "Phone calls", NULL, ctxpopup_item_select_cb, NULL); + elm_ctxpopup_item_append(ctxpopup, "Favorites", NULL, ctxpopup_item_select_cb, NULL); + elm_ctxpopup_item_append(ctxpopup, "Search", NULL, ctxpopup_item_select_cb, NULL); + elm_ctxpopup_item_append(ctxpopup, "Dialer", NULL, ctxpopup_item_select_cb, NULL); + + ui_menu_content_set(menu, ctxpopup); +} + + + +static void +create_page11() +{ + ui_view_lifecycle_callback_s lifecycle_callback = {0, }; + ui_view_event_callback_s event_callback = {0, }; + + lifecycle_callback.load = view11_load_cb; + event_callback.menu = view11_menu_cb; + + ui_view *view = ui_standard_view_create("page11"); + + int ret = ui_view_lifecycle_callbacks_set(view, &lifecycle_callback, NULL); + if (ret != 0) + { + //TODO + } + + ret = ui_view_event_callbacks_set(view, &event_callback, NULL); + if (ret != 0) + { + //TODO + } + + UI_VIEWMGR_VIEW_PUSH(view); +} + +//================================================================================= +//================================== View 10 ====================================== +//================================================================================= + +static void +view10_prev_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + UI_VIEWMGR_VIEW_POP(); +} + +static void +view10_next_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + create_page11(); +} + +static void +view10_rotate_cb(ui_view *view, int degree, void *data) +{ + Evas_Object *base_layout = ui_view_base_get(view); + + if (degree == 0 || degree == 180) + { + Evas_Object *content = create_content(base_layout, "ViewMgr Demo
Rotation", + view10_prev_btn_clicked_cb, view10_next_btn_clicked_cb); + + ui_standard_view_content_set(view, content, "Page10", NULL, NULL, NULL); + ui_view_indicator_set(view, UI_VIEW_INDICATOR_DEFAULT); + } + else + { + Evas_Object *content = create_landscape_content(base_layout, "ViewMgr Demo
Rotation", + view10_prev_btn_clicked_cb, view10_next_btn_clicked_cb); + + ui_standard_view_content_set(view, content, "Page10", NULL, NULL, NULL); + ui_view_indicator_set(view, UI_VIEW_INDICATOR_OPTIMAL); + } +} + +static void +view10_load_cb(ui_view *view, void *data) +{ + view10_rotate_cb(view, ui_view_degree_get(view), data); +} + +static void +create_page10() +{ + ui_view_lifecycle_callback_s lifecycle_callback = {0, }; + ui_view_event_callback_s event_callback = {0, }; + + lifecycle_callback.load = view10_load_cb; + event_callback.rotate = view10_rotate_cb; + + ui_view *view = ui_standard_view_create("page10"); + + int ret = ui_view_lifecycle_callbacks_set(view, &lifecycle_callback, NULL); + if (ret != 0) + { + //TODO + } + + ret = ui_view_event_callbacks_set(view, &event_callback, NULL); + if (ret != 0) + { + //TODO + } + + UI_VIEWMGR_VIEW_PUSH(view); +} + +//================================================================================ +//================================== View 9 ====================================== +//================================================================================ + +static void +view9_prev_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + UI_VIEWMGR_VIEW_POP(); +} + +static void +view9_next_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + create_page10(); +} + +static void +view9_portrait_cb(ui_view *view, void *data) +{ + Evas_Object *base_layout = ui_view_base_get(view); + + Evas_Object *content = create_content(base_layout, "ViewMgr Demo
Portrait/Landscape", + view9_prev_btn_clicked_cb, view9_next_btn_clicked_cb); + + ui_standard_view_content_set(view, content, "Page9", NULL, NULL, NULL); + ui_view_indicator_set(view, UI_VIEW_INDICATOR_DEFAULT); +} + +static void +view9_landscape_cb(ui_view *view, void *data) +{ + Evas_Object *base_layout = ui_view_base_get(view); + + Evas_Object *content = create_landscape_content(base_layout, "ViewMgr Demo
Portrait/Landscape", + view9_prev_btn_clicked_cb, view9_next_btn_clicked_cb); + + ui_standard_view_content_set(view, content, "Page9", NULL, NULL, NULL); + ui_view_indicator_set(view, UI_VIEW_INDICATOR_OPTIMAL); +} + +static void +view9_load_cb(ui_view *view, void *data) +{ + if (ui_view_degree_get(view) == 90 || ui_view_degree_get(view) == 270) + view9_landscape_cb(view, data); + else + view9_portrait_cb(view, data); +} + +static void +create_page9() +{ + ui_view_lifecycle_callback_s lifecycle_callback = {0, }; + ui_view_event_callback_s event_callback = {0, }; + + lifecycle_callback.load = view9_load_cb; + + event_callback.portrait = view9_portrait_cb; + event_callback.landscape = view9_landscape_cb; + + ui_view *view = ui_standard_view_create("page9"); + + int ret = ui_view_lifecycle_callbacks_set(view, &lifecycle_callback, NULL); + if (ret != 0) + { + //TODO + } + + ret = ui_view_event_callbacks_set(view, &event_callback, NULL); + if (ret != 0) + { + //TODO + } + + UI_VIEWMGR_VIEW_PUSH(view); +} + +//================================================================================ +//================================== View 8 ====================================== +//================================================================================ + +static void +view8_prev_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + UI_VIEWMGR_VIEW_POP(); +} + +static void +view8_next_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + create_page9(); +} + +static void +create_page8() +{ + ui_view *view = ui_standard_view_create("page8"); + + Evas_Object *base_layout = ui_view_base_get(view); + + Evas_Object *content = create_content(base_layout, "ViewMgr Demo
Content Preload", + view8_prev_btn_clicked_cb, view8_next_btn_clicked_cb); + + ui_view_removable_content(view, false); + ui_standard_view_content_set(view, content, "Page8", NULL, NULL, NULL); + + UI_VIEWMGR_VIEW_PUSH(view); +} + +//================================================================================ +//================================== View 7 ====================================== +//================================================================================ + +static void +view7_prev_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + UI_VIEWMGR_VIEW_POP(); +} + +static void +view7_next_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + create_page8(); +} + +static void +view7_load_cb(ui_view *view, void *data) +{ + Evas_Object *base_layout = ui_view_base_get(view); + + Evas_Object *content = create_content(base_layout, "ViewMgr Demo
Navigationbarr", + view7_prev_btn_clicked_cb, view7_next_btn_clicked_cb); + + ui_standard_view_content_set(view, content, "Page7", NULL, NULL, NULL); + Elm_Toolbar *toolbar = create_toolbar(base_layout, "navigationbar"); + ui_standard_view_toolbar_set(view, toolbar); +} + +static void +create_page7() +{ + ui_view_lifecycle_callback_s lifecycle_callback = {0, }; + + lifecycle_callback.load = view7_load_cb; + + ui_view *view = ui_standard_view_create("page7"); + + int ret = ui_view_lifecycle_callbacks_set(view, &lifecycle_callback, NULL); + if (ret != 0) + { + //TODO + } + + UI_VIEWMGR_VIEW_PUSH(view); +} + +//================================================================================ +//================================== View 6 ====================================== +//================================================================================ + +static void +view6_prev_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + UI_VIEWMGR_VIEW_POP(); +} + +static void +view6_next_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + create_page7(); +} + +static void +view6_load_cb(ui_view *view, void *data) +{ + Evas_Object *base_layout = ui_view_base_get(view); + + Evas_Object *content = create_content(base_layout, "ViewMgr Demo
Toolbar", + view6_prev_btn_clicked_cb, view6_next_btn_clicked_cb); + + ui_standard_view_content_set(view, content, "Page6", NULL, NULL, NULL); + Elm_Toolbar *toolbar = create_toolbar(base_layout, "toolbar_with_title"); + ui_standard_view_toolbar_set(view, toolbar); +} + +static void +create_page6() +{ + ui_view_lifecycle_callback_s lifecycle_callback = {0, }; + lifecycle_callback.load = view6_load_cb; + + ui_view *view = ui_standard_view_create("page6"); + + int ret = ui_view_lifecycle_callbacks_set(view, &lifecycle_callback, NULL); + if (ret != 0) + { + //TODO + } + + UI_VIEWMGR_VIEW_PUSH(view); +} + +//================================================================================ +//================================== View 5 ====================================== +//================================================================================ + +static void +view5_prev_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + UI_VIEWMGR_VIEW_POP(); +} + +static void +view5_next_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + create_page6(); +} + +static void +view5_load_cb(ui_view *view, void *data) +{ + LOGE("view5 load!"); + Evas_Object *base_layout = ui_view_base_get(view); + + Evas_Object *content = create_content(base_layout, "ViewMgr Demo
Full View", + view5_prev_btn_clicked_cb, view5_next_btn_clicked_cb); + + ui_view_content_set(view, content); + ui_view_indicator_set(view, UI_VIEW_INDICATOR_HIDE); +} + +static void +create_page5() +{ + ui_view_lifecycle_callback_s lifecycle_callback = {0, }; + + lifecycle_callback.load = view5_load_cb; + + ui_view *view = ui_view_create("page5"); + + int ret = ui_view_lifecycle_callbacks_set(view, &lifecycle_callback, NULL); + if (ret != 0) + { + //TODO + } + + UI_VIEWMGR_VIEW_PUSH(view); +} + //================================================================================ //================================== View 4 ====================================== //================================================================================ @@ -73,7 +984,7 @@ view4_prev_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) static void view4_next_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) { - //create_page5(); + create_page5(); } static void diff --git a/src/include/efl/mobile/c/ui_popup.h b/src/include/efl/mobile/c/ui_popup.h index c64b1f2..338c4eb 100644 --- a/src/include/efl/mobile/c/ui_popup.h +++ b/src/include/efl/mobile/c/ui_popup.h @@ -7,6 +7,7 @@ namespace efl_viewmananger #ifdef __cplusplus extern "C" { #endif + ui_popup *ui_popup_create(ui_view *view); bool ui_popup_content_set(ui_popup *popup, Elm_Popup *elm_popup); bool ui_popup_activate(ui_popup *popup); void ui_popup_del(ui_popup *popup); diff --git a/src/include/efl/mobile/c/ui_view.h b/src/include/efl/mobile/c/ui_view.h index 9ccee87..9d0176e 100644 --- a/src/include/efl/mobile/c/ui_view.h +++ b/src/include/efl/mobile/c/ui_view.h @@ -43,20 +43,20 @@ extern "C" { ui_view* ui_standard_view_create(const char *name); ui_view* ui_view_create(const char *name); - bool ui_view_lifecycle_callbacks_set(ui_view *view, - ui_view_lifecycle_callback_s *lifecycle_callback, void *data); + bool ui_view_lifecycle_callbacks_set(ui_view *view, ui_view_lifecycle_callback_s *lifecycle_callback, void *data); Evas_Object* ui_view_base_get(ui_view *view); bool ui_view_content_set(ui_view *view, Evas_Object *content); 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); bool ui_standard_view_title_badge_set(ui_view *view, const char *badge_text); - bool ui_view_indicator_set(ui_view *view, ui_view_indicator indicator); + void ui_view_indicator_set(ui_view *view, ui_view_indicator indicator); bool ui_standard_view_toolbar_set(ui_view *view, Elm_Toolbar *toolbar); void ui_view_removable_content(ui_view *view, bool remove); - bool ui_view_event_callbacks_set(ui_view *view, - ui_view_event_callback_s *event_callback, void *data); + bool ui_view_event_callbacks_set(ui_view *view, ui_view_event_callback_s *event_callback, void *data); + int ui_view_degree_get(ui_view *view); bool ui_standard_view_title_right_btn_set(ui_view *view, Evas_Object *title_right_btn); + bool ui_view_transition_style_set(ui_view *view, const char *style); bool ui_standard_view_title_visible_set(ui_view *view, bool visible, bool anim); #ifdef __cplusplus diff --git a/src/lib/efl/mobile/c/ui_menu.cpp b/src/lib/efl/mobile/c/ui_menu.cpp index cde727f..742a235 100644 --- a/src/lib/efl/mobile/c/ui_menu.cpp +++ b/src/lib/efl/mobile/c/ui_menu.cpp @@ -6,8 +6,13 @@ using namespace efl_viewmanager; extern "C" { bool ui_menu_content_set(ui_menu *menu, Elm_Ctxpopup *ctxpopup) { - //TODO - return 1; + if (!menu) + { + LOGE("Invalid Menu"); + return false; + } + + return menu->set_content(ctxpopup); } } diff --git a/src/lib/efl/mobile/c/ui_popup.cpp b/src/lib/efl/mobile/c/ui_popup.cpp index 14ec71d..f278382 100644 --- a/src/lib/efl/mobile/c/ui_popup.cpp +++ b/src/lib/efl/mobile/c/ui_popup.cpp @@ -4,20 +4,47 @@ using namespace efl_viewmanager; extern "C" { + ui_popup *ui_popup_create(ui_view *view) + { + return new ui_popup(view); + } + bool ui_popup_content_set(ui_popup *popup, Elm_Popup *elm_popup) { - //TODO - return 1; + if (!popup) + { + LOGE("Invalid popup"); + return false; + } + + if (!elm_popup) + { + LOGE("Invalid elm_popup"); + return false; + } + + return popup->set_content(elm_popup); } bool ui_popup_activate(ui_popup *popup) { - //TODO - return 1; + if (!popup) + { + LOGE("Invalid popup"); + return false; + } + + return popup->activate(); } void ui_popup_del(ui_popup *popup) { - //TODO + if (!popup) + { + LOGE("Invalid popup"); + return; + } + + delete(popup); } } diff --git a/src/lib/efl/mobile/c/ui_view.cpp b/src/lib/efl/mobile/c/ui_view.cpp index 3f0d457..6c2cb4b 100644 --- a/src/lib/efl/mobile/c/ui_view.cpp +++ b/src/lib/efl/mobile/c/ui_view.cpp @@ -3,11 +3,17 @@ using namespace efl_viewmanager; +/////////////////////////////////////////////////////////////////////////// +////////////////////////// ui_standard_view_capi ////////////////////////// +/////////////////////////////////////////////////////////////////////////// + class ui_standard_view_capi : public ui_standard_view { private: ui_view_lifecycle_callback_s lifecycle_callback; - void *data; + ui_view_event_callback_s event_callback; + void *lifecycle_data; + void *event_data; protected: void on_load() @@ -15,7 +21,37 @@ protected: ui_standard_view::on_load(); if (this->lifecycle_callback.load) { - this->lifecycle_callback.load(this, this->data); + 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); + } + } + + void on_menu(ui_menu *menu) + { + ui_standard_view::on_menu(menu); + + if (this->event_callback.menu) { + this->event_callback.menu(menu, this->event_data); } } @@ -24,7 +60,9 @@ public: : ui_standard_view(name) { this->lifecycle_callback = {0,}; - this->data = NULL; + this->event_callback = {0,}; + this->lifecycle_data = NULL; + this->event_data = NULL; } ~ui_standard_view_capi() @@ -36,17 +74,34 @@ public: this->lifecycle_callback = *callback; } - void set_data(void *data) + 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->data = data; + this->event_data = data; } }; +/////////////////////////////////////////////////////////////////////////// +//////////////////////////// ui_viwe_capi ///////////////////////////////// +/////////////////////////////////////////////////////////////////////////// + class ui_view_capi : public ui_view { private: ui_view_lifecycle_callback_s lifecycle_callback; - void *data; + ui_view_event_callback_s event_callback; + void *lifecycle_data; + void *event_data; + protected: void on_load() @@ -54,7 +109,37 @@ protected: ui_view::on_load(); if (this->lifecycle_callback.load) { - this->lifecycle_callback.load(this, this->data); + 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); + } + } + + void on_menu(ui_menu *menu) + { + ui_view::on_menu(menu); + + if (this->event_callback.menu) { + this->event_callback.menu(menu, this->event_data); } } @@ -63,7 +148,9 @@ public: : ui_view(name) { this->lifecycle_callback = {0,}; - this->data = NULL; + this->event_callback = {0,}; + this->lifecycle_data = NULL; + this->event_data = NULL; } ~ui_view_capi() @@ -75,9 +162,19 @@ public: this->lifecycle_callback = *callback; } - void set_data(void *data) + void set_lifecycle_data(void *data) { - this->data = 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; } }; @@ -92,8 +189,7 @@ extern "C" { return new ui_view_capi(name); } - bool ui_view_lifecycle_callbacks_set(ui_view *view, - ui_view_lifecycle_callback_s *lifecycle_callback, void *data) + bool ui_view_lifecycle_callbacks_set(ui_view *view, ui_view_lifecycle_callback_s *lifecycle_callback, void *data) { if (!view) { @@ -101,10 +197,20 @@ extern "C" { return false; } - ui_standard_view_capi *capi_view = static_cast(view); + //FIXME: Maybe... There is a more nice way for it... + ui_standard_view_capi *capi_standard_view = dynamic_cast(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(view); - if (lifecycle_callback) capi_view->set_lifecycle_callback(lifecycle_callback); - if (data) capi_view->set_data(data); + if (lifecycle_callback) capi_view->set_lifecycle_callback(lifecycle_callback); + if (data) capi_view->set_lifecycle_data(data); + } return true; } @@ -162,39 +268,121 @@ extern "C" { return capi_view->set_title_badge(badge_text); } - bool ui_view_indicator_set(ui_view *view, ui_view_indicator indicator) + void ui_view_indicator_set(ui_view *view, ui_view_indicator indicator) { - //TODO - return 1; + if (!view) + { + LOGE("Invalid View"); + return; + } + + ui_view_capi *capi_view = static_cast(view); + + capi_view->set_indicator(indicator); } bool ui_standard_view_toolbar_set(ui_view *view, Elm_Toolbar *toolbar) { - //TODO - return 1; + if (!view) + { + LOGE("Invalid View"); + return false; + } + + ui_standard_view_capi *capi_view = static_cast(view); + + return capi_view->set_toolbar(toolbar); } void ui_view_removable_content(ui_view *view, bool remove) { - //TODO + if (!view) + { + LOGE("Invalid View"); + return; + } + + ui_standard_view_capi *capi_view = static_cast(view); + + capi_view->set_removable_content(remove); } bool ui_view_event_callbacks_set(ui_view *view, ui_view_event_callback_s *event_callback, void *data) { - //TODO - return 1; + 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(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(view); + + if (event_callback) capi_view->set_event_callback(event_callback); + if (data) capi_view->set_event_data(data); + } + + return true; + } + + int ui_view_degree_get(ui_view *view) + { + if (!view) + { + LOGE("Invalid View"); + return -1; + } + + ui_standard_view_capi *capi_view = static_cast(view); + + return capi_view->get_degree(); } bool ui_standard_view_title_right_btn_set(ui_view *view, Evas_Object *title_right_btn) { - //TODO - return 1; + if (!view) + { + LOGE("Invalid View"); + return -1; + } + + ui_standard_view_capi *capi_view = static_cast(view); + + return capi_view->set_title_right_btn(title_right_btn); + } + + bool ui_view_transition_style_set(ui_view *view, const char *style) + { + if (!view) + { + LOGE("Invalid View"); + return -1; + } + + ui_standard_view_capi *capi_view = static_cast(view); + + return capi_view->set_transition_style(style); } bool ui_standard_view_title_visible_set(ui_view *view, bool visible, bool anim) { - //TODO - return 1; + if (!view) + { + LOGE("Invalid View"); + return -1; + } + + ui_standard_view_capi *capi_view = static_cast(view); + + return capi_view->set_title_visible(visible, anim); } } -- 2.34.1