[GUI] Clock mode selection popup view and its style is like in Language/Voice selecti... 43/129243/12
authorPawel Aksiutowicz <p.aksiutowic@partner.samsung.com>
Mon, 15 May 2017 15:19:17 +0000 (17:19 +0200)
committerKiseok Chang <kiso.chang@samsung.com>
Mon, 22 May 2017 06:41:07 +0000 (06:41 +0000)
Change-Id: I4930ead5d6fcbef1f90d7d4984c86fdc9cf6e4ea
Signed-off-by: Pawel Aksiutowicz <p.aksiutowic@partner.samsung.com>
CMakeLists.txt
include/view/common/view_generic_popup.h [deleted file]
src/view/common/view_generic_popup.c [deleted file]
src/view/system/view_clock.c
src/view/system/view_clock_mode.c

index 8f9aaf0..eb8456e 100755 (executable)
@@ -85,7 +85,6 @@ SET(SRCS
        src/layout/layout_network.c
        src/layout/layout_picture.c
        src/layout/layout_system.c
-       src/view/common/view_generic_popup.c
        src/view/common/view_datetime.c
        src/view/picture/view_picture_slider_generic.c
        src/view/picture/view_picture_contrast.c
diff --git a/include/view/common/view_generic_popup.h b/include/view/common/view_generic_popup.h
deleted file mode 100644 (file)
index f08c9ec..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef VIEW_GENERIC_POPUP_H_
-#define VIEW_GENERIC_POPUP_H_
-
-#include "common/viewmgr.h"
-#include "common/inputmgr.h"
-
-/*TODO: make use of it and add more types if necessary:*/
-
-/**
-* @brief Available types of generic popups.
-*/
-typedef enum {
-       POPUP_TYPE_BUTTONS_LIST = 0
-} popup_type_t;
-
-/**
-* @brief Attributes of a generic popup view.
-*/
-typedef struct {
-       const char *popup_title;                /**< popup's title */
-       const char *popup_description;          /**< popup's description */
-       const char *popup_layout_group;         /**< popup's layout view */
-       input_handler *handler;                 /**< popup's input handler */
-       int buttns_count;                       /**< popup's buttons count - valid for popups with buttons only */
-       const char **btn_texts;                 /**< labels to be set on popup's buttons - valid for popup with buttons only */
-       int items_count;
-       const char **item_texts;
-       int (*ui_id_on_show_focus)(void);       /**< callback function to be invoked when popup is shown;
-                                               * returns ID of the widget that should receive focus first.
-                                               */
-       void *generic_popup_data;               /**< [out] popup view's data - to be used by inheriting class */
-} generic_popup_attr;
-
-/**
-* @brief Get the pointer to the view_class object of generic popup view.
-*
-* @return The pointer to generic popup view_class object.
-*/
-view_class *view_generic_popup_get_vclass(void);
-
-/**
- * Sets the item selected when the given popup is displayed.
- * @param data The popup's private data.
- * @param item The item to select.
- */
-void view_generic_popup_set_selected_on_show(void *data, int item);
-
-#endif /* VIEW_GENERIC_POPUP_H_ */
diff --git a/src/view/common/view_generic_popup.c b/src/view/common/view_generic_popup.c
deleted file mode 100644 (file)
index 8950668..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "view/common/view_generic_popup.h"
-
-#include <app.h>
-#include <Elementary.h>
-
-#include "app_debug.h"
-#include "define.h"
-#include "common/viewmgr.h"
-#include "common/inputmgr.h"
-#include "common/utils.h"
-#include "view/common/view_generic_popup.h"
-
-#define GENERIC_POPUP_BTN_NAME_MAX 128
-#define BUTTON_BOX_PADDING 8
-#define FOCUS_DIR_TYPES 2
-
-struct _priv {
-       Evas_Object *popup;
-       Evas_Object *box;
-       Eina_List *popup_buttons;
-       int (*ui_id_on_show_focus)(void);
-       int item_selected_on_show;
-};
-
-/* View class functions: */
-static Evas_Object *_create(Evas_Object *win, void *data);
-static void _show(void *view_data);
-static void _hide(void *view_data);
-static void _destroy(void *view_data);
-
-static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
-
-static input_handler _input_handler = {
-       .key_down = _key_down_cb,
-};
-
-/* Helper: */
-static bool _fill_items(struct _priv *priv, Evas_Object *popup, int item_count, const char **item_text, input_handler *handler);
-
-static view_class _vclass = {
-       .view_id = NULL,
-       .create = _create,
-       .show = _show,
-       .hide = _hide,
-       .destroy = _destroy
-};
-
-view_class *view_generic_popup_get_vclass(void)
-{
-       return &_vclass;
-}
-
-static Evas_Object *_create(Evas_Object *win, void *data)
-{
-       SETTING_TRACE_BEGIN;
-       struct _priv *priv = NULL;
-       generic_popup_attr *g_data = (generic_popup_attr *)data;
-
-       if (!win || !g_data) {
-               _ERR("Invalid arguments");
-               return NULL;
-       }
-
-       priv = calloc(1, sizeof(struct _priv));
-       if (!priv) {
-               _ERR("Calloc failed.");
-               return NULL;
-       }
-
-       priv->popup = utils_add_layout(win, g_data->popup_layout_group, EINA_TRUE);
-       if (!priv->popup) {
-               _ERR("Add layout failed.");
-               evas_object_del(priv->popup);
-               free(priv);
-               return NULL;
-       }
-
-       elm_object_part_text_set(priv->popup, PART_POPUP_TITLE, g_data->popup_title);
-
-       if (g_data->items_count != 0)
-               _fill_items(priv, priv->popup, g_data->items_count, g_data->item_texts, g_data->handler);
-
-       inputmgr_add_callback(priv->popup, 0, &_input_handler, NULL);
-       g_data->generic_popup_data = priv;
-
-       SETTING_TRACE_END;
-       return priv->popup;
-}
-
-static void _show(void *data)
-{
-       SETTING_TRACE_BEGIN;
-       struct _priv *priv = (struct _priv *)data;
-       Eina_List *children = elm_box_children_get(priv->box);
-       Evas_Object *first = eina_list_data_get(children);
-       Evas_Object *selected = eina_list_nth(children, priv->item_selected_on_show);
-
-       if (!priv) {
-               _ERR("Invalid parameter.");
-               return;
-       }
-
-       elm_object_focus_set(selected, EINA_TRUE);
-       elm_radio_value_set(first, priv->item_selected_on_show);
-
-       evas_object_show(priv->popup);
-       SETTING_TRACE_END;
-}
-
-static void _hide(void *data)
-{
-       SETTING_TRACE_BEGIN;
-       struct _priv *priv = (struct _priv *)data;
-
-       if (!priv) {
-               _ERR("Invalid parameter.");
-               return;
-       }
-
-       evas_object_hide(priv->popup);
-       SETTING_TRACE_END;
-}
-
-static void _destroy(void *data)
-{
-       SETTING_TRACE_BEGIN;
-       struct _priv *priv = (struct _priv *)data;
-
-       if (!priv) {
-               _ERR("Invalid parameter.");
-               return;
-       }
-
-       evas_object_del(priv->popup);
-       free(priv);
-       SETTING_TRACE_END;
-}
-
-static inline void _focus_link_set(Evas_Object *prev, Evas_Object *next,
-               Elm_Focus_Direction *next_dirs, Elm_Focus_Direction *prev_dirs,
-               int count)
-{
-       int i;
-       for (i = 0; i < count; ++i) {
-               elm_object_focus_next_object_set(prev, next, next_dirs[i]);
-
-               if (prev_dirs)
-                       elm_object_focus_next_object_set(next, prev, prev_dirs[i]);
-       }
-}
-
-static void _focus_chain_set(Evas_Object *box, bool is_last)
-{
-       Elm_Focus_Direction next_types[FOCUS_DIR_TYPES] = {ELM_FOCUS_DOWN, ELM_FOCUS_NEXT};
-       Elm_Focus_Direction prev_types[FOCUS_DIR_TYPES] = {ELM_FOCUS_UP,  ELM_FOCUS_PREVIOUS};
-       Elm_Focus_Direction left_right[FOCUS_DIR_TYPES] = {ELM_FOCUS_LEFT, ELM_FOCUS_RIGHT};
-       Eina_List *children = elm_box_children_get(box);
-       Eina_List *last = eina_list_last(children);
-       Eina_List *prev = eina_list_prev(last);
-       Evas_Object *obj_last = eina_list_data_get(last);
-       Evas_Object *obj_prev = eina_list_data_get(prev);
-
-       _focus_link_set(obj_last, obj_last, left_right, NULL, FOCUS_DIR_TYPES);
-
-       if (!obj_prev) {
-               _focus_link_set(obj_last, obj_last, prev_types, NULL, FOCUS_DIR_TYPES);
-               return;
-       }
-
-       _focus_link_set(obj_last, obj_prev, prev_types, next_types, FOCUS_DIR_TYPES);
-
-       if (is_last)
-               _focus_link_set(obj_last, obj_last, next_types, NULL, FOCUS_DIR_TYPES);
-}
-
-static void _focus_chain_debug(Evas_Object *box)
-{
-       int i = 0;
-       Elm_Focus_Direction dir = 0;
-       Eina_List *children = elm_box_children_get(box);
-       int count = eina_list_count(children);
-       Evas_Object *item;
-       Evas_Object *focus_to;
-       const char *text;
-
-       char *dir_names[] = {
-               "ELM_FOCUS_PREVIOUS",
-               "ELM_FOCUS_NEXT",
-               "ELM_FOCUS_UP",
-               "ELM_FOCUS_DOWN",
-               "ELM_FOCUS_RIGHT",
-               "ELM_FOCUS_LEFT",
-       };
-
-       for (i = 0; i < count; ++i) {
-               item = eina_list_nth(children, i);
-
-               text = elm_object_text_get(item);
-               dlog_print(DLOG_INFO, LOG_TAG, "[%s:%d] ITEM: %s", __FILE__, __LINE__, text);
-
-               for (dir = 0; dir < sizeof(dir_names) / sizeof(dir_names[0]); ++dir) {
-
-                       focus_to = elm_object_focus_next_object_get(item, dir);
-                       text = elm_object_text_get(focus_to);
-                       dlog_print(DLOG_INFO, LOG_TAG, "[%s:%d] >>>>>>>>>>> %s: %s", __FILE__, __LINE__, dir_names[dir], text);
-               }
-       }
-}
-
-static bool _fill_items(struct _priv *priv, Evas_Object *popup, int item_count, const char **item_text, input_handler *handler)
-{
-       Evas_Object *radio = NULL;
-       Evas_Object *group = NULL;
-       priv->box = elm_box_add(priv->popup);
-       elm_box_horizontal_set(priv->box, EINA_FALSE);
-
-       evas_object_size_hint_weight_set(priv->box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(priv->box, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       evas_object_size_hint_min_set(priv->box, 300, 300);
-
-       int i;
-       for (i = 0; i < item_count; i++) {
-               radio = utils_add_radio(priv->box, NULL, "style.popup.list", item_text[i % item_count]);
-               elm_radio_state_value_set(radio, i);
-
-               if (i == 0)
-                       group = radio;
-               else
-                       elm_radio_group_add(radio, group);
-
-               evas_object_size_hint_min_set(radio, 300, 50);
-               evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-               evas_object_size_hint_align_set(radio, EVAS_HINT_FILL, EVAS_HINT_FILL);
-               evas_object_show(radio);
-               elm_box_pack_end(priv->box, radio);
-               _focus_chain_set(priv->box, i == item_count - 1);
-
-               inputmgr_add_callback(radio, i, handler, NULL);
-       }
-
-       elm_object_part_content_set(priv->popup, PART_POPUP_LIST, priv->box);
-
-       _focus_chain_debug(priv->box);
-       return true;
-}
-
-static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
-{
-       if (!obj || !ev) {
-               _ERR("Invalid argument.");
-               return;
-       }
-
-       if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_WAY) ||
-                       !strcmp(ev->keyname, KEY_ESC) || !strcmp(ev->keyname, KEY_ESC_WAY)) {
-               viewmgr_pop_view();
-       }
-}
-
-void view_generic_popup_set_selected_on_show(void *data, int item)
-{
-       struct _priv *priv = (struct _priv *)data;
-       priv->item_selected_on_show = item;
-}
index e074271..344cb65 100755 (executable)
@@ -33,8 +33,8 @@
 #define PADDING_VKEYBOARD              30
 
 enum setup_type {
-       TYPE_MANUAL = 0,
-       TYPE_AUTO,
+       TYPE_AUTO = 0,
+       TYPE_MANUAL,
        TYPE_MAX
 };
 
index 259d8a1..70f296d 100755 (executable)
 #include "define.h"
 #include "common/utils.h"
 #include "view/system/view_clock.h"
-#include "view/common/view_generic_popup.h"
 #include "data/system/settings_clock.h"
 #include "app_string.h"
 
-#define BUTTON_RETURN 36
-
 enum setup_type {
-       TYPE_MANUAL = 0,
-       TYPE_AUTO,
+       TYPE_AUTO = 0,
+       TYPE_MANUAL,
        TYPE_MAX
 };
 
-static const char *str_setup_type_opt[] = {
-       STR_MANUAL,
-       STR_AUTO
+static char *str_setup_type_opt[] = {
+       STR_AUTO,
+       STR_MANUAL
 };
 
-typedef struct {
-       Evas_Object *win;
-       Evas_Object *ly;
-       Evas_Object *conformant;
-
-       enum setup_type cur_type;
-       bool input_panel_show;
-       Evas_Object *focused_entry;
-
-} clock_mode_view_priv_data;
+struct _priv {
+       Evas_Object *popup;
+       Evas_Object *base;
+       Evas_Object *popup_btn[TYPE_MAX];
+};
 
-static void _popup_item_selected_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
+static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
 static void _mouse_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev);
 
-static input_handler _input_handler = {
-       .key_down = _popup_item_selected_cb,
+static input_handler handler = {
+       .key_down = _key_down_cb,
        .mouse_down = _mouse_down_cb
 };
 
 static Evas_Object *_create(Evas_Object *win, void *data)
 {
        SETTING_TRACE_BEGIN;
-       view_class *vc = view_generic_popup_get_vclass();
-       generic_popup_attr *g_data = NULL;
+       struct _priv *priv = NULL;
+       Evas_Object *ly = NULL;
 
        if (!win) {
                _ERR("Get window object failed.");
                return NULL;
        }
 
-       g_data = calloc(1, sizeof(generic_popup_attr));
-       if (!g_data) {
+       priv = calloc(1, sizeof(struct _priv));
+       if (!priv) {
                _ERR("Calloc failed.");
                return NULL;
        }
 
-       g_data->popup_title = "Clock";
-       g_data->popup_description = NULL;
-       g_data->popup_layout_group = GRP_VIEW_POPUP_LIST;
-       g_data->handler = &_input_handler;
-       g_data->buttns_count = 0;
-       g_data->btn_texts = NULL;
-       g_data->items_count = sizeof(str_setup_type_opt) / sizeof(str_setup_type_opt[0]);
-       g_data->item_texts = calloc(g_data->items_count, sizeof(char *));
-       g_data->ui_id_on_show_focus = NULL;
-       g_data->generic_popup_data = NULL;
-
-       int i;
-       for (i = 0; i < sizeof(str_setup_type_opt) / sizeof(str_setup_type_opt[0]); ++i)
-               g_data->item_texts[i] = str_setup_type_opt[i];
-
-       if (!viewmgr_set_view_data(VIEW_CLOCK_MODE, g_data)) {
-               free(g_data->item_texts);
-               free(g_data);
+       priv->base = utils_add_popup(win, STYLE_POPUP, STR_CLOCK, NULL);
+       if (!priv->base) {
+               _ERR("Add popup failed");
+               free(priv);
+               return NULL;
+       }
+
+       ly = utils_add_layout(priv->base, GRP_VIEW_POPUP_2BTNS, EINA_FALSE);
+       if (!ly) {
+               _ERR("Add layout failed.");
+               evas_object_del(priv->base);
+               free(priv);
+               return NULL;
+       }
+
+       priv->popup_btn[TYPE_AUTO] = utils_add_button(ly, PART_POPUP_BUTTON0, NULL, str_setup_type_opt[TYPE_AUTO]);
+       priv->popup_btn[TYPE_MANUAL] = utils_add_button(ly, PART_POPUP_BUTTON1, NULL, str_setup_type_opt[TYPE_MANUAL]);
+       if(!priv->popup_btn[TYPE_AUTO] || !priv->popup_btn[TYPE_MANUAL]) {
+               _ERR("Add button failed.");
+               evas_object_del(priv->base);
+               free(priv);
+               return NULL;
+       }
+
+       inputmgr_add_callback(priv->popup_btn[TYPE_AUTO], TYPE_AUTO, &handler, priv);
+       inputmgr_add_callback(priv->popup_btn[TYPE_MANUAL], TYPE_MANUAL, &handler, priv);
+
+       elm_object_part_content_set(priv->base, "elm.swallow.content", ly);
+
+       if (!viewmgr_set_view_data(VIEW_CLOCK_MODE, priv)) {
                _ERR("Set view data failed.");
+               evas_object_del(priv->base);
+               free(priv);
                return NULL;
        }
 
-       SETTING_TRACE_END;
-       return vc->create(win, g_data);
+       return priv->base;
 }
 
-static void _popup_item_selected_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
+static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
 {
        dlog_print(DLOG_INFO, LOG_TAG, "[%s:%d] BUTTON = %d", __FILE__, __LINE__, ev->keycode);
-       if (ev->keycode != BUTTON_RETURN)
+       if(!data)
                return;
 
-       viewmgr_pop_view();
-       viewmgr_update_view(VIEW_CLOCK, CLOCK_DISPLAY_MODE_UPDATE, (void *)(long)id);
-       viewmgr_show_view(VIEW_CLOCK);
+       if(!strcmp(ev->keyname, KEY_ENTER)) {
+                       viewmgr_pop_view();
+                       viewmgr_update_view(VIEW_CLOCK, CLOCK_DISPLAY_MODE_UPDATE, (void *)(long)id);
+                       viewmgr_show_view(VIEW_CLOCK);
+       }
+       else if(!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_WAY)) {
+               viewmgr_pop_view();
+       }
 }
 
 static void _mouse_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev)
@@ -126,39 +136,50 @@ static void _mouse_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_E
 static void _show(void *data)
 {
        SETTING_TRACE_BEGIN
-       bool automatic;
-       generic_popup_attr *g_data = (generic_popup_attr *)data;
-       view_class *vc = view_generic_popup_get_vclass();
+       bool automatic = false;
+       struct _priv *priv = (struct _priv *)data;
+       if (!priv) {
+               _ERR("Invalid parameter.");
+               return;
+       }
+
+       evas_object_show(priv->base);
 
        settings_clock_is_time_automatic(&automatic);
+
        if (automatic)
-               view_generic_popup_set_selected_on_show(g_data->generic_popup_data, TYPE_AUTO);
+               elm_object_focus_set(priv->popup_btn[TYPE_AUTO], EINA_TRUE);
        else
-               view_generic_popup_set_selected_on_show(g_data->generic_popup_data, TYPE_MANUAL);
+               elm_object_focus_set(priv->popup_btn[TYPE_MANUAL], EINA_TRUE);
 
-       vc->show(g_data->generic_popup_data);
        SETTING_TRACE_END
 }
 
 static void _hide(void *data)
 {
        SETTING_TRACE_BEGIN;
-       view_class *vc = view_generic_popup_get_vclass();
-       generic_popup_attr *g_data = (generic_popup_attr *)data;
-       vc->hide(g_data->generic_popup_data);
+       struct _priv *priv = (struct _priv *)data;
+       if (!priv) {
+               _ERR("Invalid parameter.");
+               return;
+       }
+
+       evas_object_hide(priv->base);
        SETTING_TRACE_END;
 }
 
 static void _destroy(void *data)
 {
        SETTING_TRACE_BEGIN;
-       view_class *vc = view_generic_popup_get_vclass();
-       generic_popup_attr *g_data = (generic_popup_attr *)data;
+       struct _priv *priv = (struct _priv *)data;
+       if (!priv) {
+               _ERR("Invalid parameter.");
+               return;
+       }
 
-       vc->destroy(g_data->generic_popup_data);
-       free(g_data->item_texts);
-       free(g_data);
+       evas_object_del(priv->base);
 
+       free(priv);
        SETTING_TRACE_END;
 }