Tutorial popup in action menu 45/62145/4
authorRadek Kintop <r.kintop@samsung.com>
Mon, 14 Mar 2016 14:03:41 +0000 (15:03 +0100)
committerRadek Kintop <r.kintop@samsung.com>
Tue, 15 Mar 2016 12:48:25 +0000 (05:48 -0700)
Change-Id: I62dbd26a1462459cc01da3bdc29abd54eec582f6
Signed-off-by: Radek Kintop <r.kintop@samsung.com>
include/define.h
include/view/view_action_menu.h
src/view/view_action_menu.c

index f3a3a54..33a8818 100644 (file)
 
 /* String for view*/
 #define STR_SETTINGS "Settings"
+#define STR_TUTORIAL "Tutorial"
 //TODO Fix it when translation will work correctly
 //#define STR_SETTINGS "IDS_ST_OPT_SETTINGS"
 #define STR_PICTURE "Picture"
 #define STR_ON "On"
 #define STR_UNKNOWN "Unknown"
 
+/* Action menu tutorial txts: */
+#define         PICT_MODE_TUT "Picture mode tutorial"
+#define PICT_CONTR_TUT "Picture contrast tutorial"
+#define PICT_BRIGHT_TUT "Picture brightness tutorial"
+#define PICT_SHARP_TUT "Picture sharpness tutorial"
+#define PICT_COLOR_TUT "Picture color tutorial"
+#define PICT_TINT_TUT "Picture tint tutorial"
+#define PICT_SCR_ADJ_TUT "Picture screen adjustment tutorial"
+#define         CLOCK_TUT "Clock tutorial"
+#define         SLEEP_TIM_TUT "Sleep timer tutorial"
+#define         WAKE_UP_TUT "Wake up timer tutorial"
+#define         CHANGE_PIN_TUT "Change PIN tutorial"
+#define         CHANGE_LANG_TUT "Change language tutorial"
+#define         SUBTITLE_TUT "Subtitles tutorial"
+#define         CHANGE_LOC_TUT "Change location tutorial"
+#define         RESET_TUT "Reset tutorial"
+#define         SOUND_TUT "Sound tutorial"
+#define         CHAN_TUT "Channel tutorial"
+#define         NET_TUT "Network tutorial"
+
 
 /* Size */
 #define SIZE_STR 1024
index 327c292..29c65fd 100644 (file)
@@ -17,6 +17,8 @@
 #ifndef VIEW_ACTION_MENU_H_
 #define VIEW_ACTION_MENU_H_
 
+#include "common/viewmgr.h"
+
 typedef struct {
 
        const char *layout_id;
index 5e85366..d4c2b3b 100644 (file)
  * limitations under the License.
  */
 
+#include "view/view_action_menu.h"
+#include <app_i18n.h>
+#include <eina_hash.h>
+
 #include "app_debug.h"
 #include "common/inputmgr.h"
 #include "common/layoutmgr.h"
 #include "common/utils.h"
-#include "common/viewmgr.h"
 #include "define.h"
-#include "view/view_action_menu.h"
 
 enum {
        LIVE_TV_BUTTON_ID,
@@ -31,6 +33,27 @@ enum {
        TUT_BUTTON_ID
 };
 
+enum {
+       PICT_MODE_TUT_IX = 0,
+       PICT_CONTR_TUT_IX,
+       PICT_BRIGHT_TUT_IX,
+       PICT_SHARP_TUT_IX,
+       PICT_COLOR_TUT_IX,
+       PICT_TINT_TUT_IX,
+       PICT_SCR_ADJ_TUT_IX,
+       CLOCK_TUT_IX,
+       SLEEP_TIM_TUT_IX,
+       WAKE_UP_TUT_IX,
+       CHANGE_PIN_TUT_IX,
+       CHANGE_LANG_TUT_IX,
+       SUBTITLE_TUT_IX,
+       CHANGE_LOC_TUT_IX,
+       RESET_TUT_IX,
+       SOUND_TUT_IX,
+       CHAN_TUT_IX,
+       NET_TUT_IX
+};
+
 #define ACT_MENU_ICO_BTN_STYLE "style.action.menu.icon.button"
 #define LIVE_TV_BTN_TXT "Live TV"
 #define MORE_FAVS_BTN_TXT "More Favorite"
@@ -46,14 +69,17 @@ struct _priv {
        Evas_Object *reorder_btn;
        Evas_Object *fav_btn;
        Evas_Object *tut_btn;
+       Evas_Object *tut_popup;
        const char *caller_layout_id;
        const char *caller_layout_subitem_id;
        int caller_layout_subitem_menu_id;
        layoutmgr *lmgr;
+       Eina_Hash *view_tut_assoc;
 };
 
 /* Class functions: */
 static Evas_Object *_create(Evas_Object *win, void *data);
+static Eina_Bool _fill_view_tut_assoc(Eina_Hash *hash);
 static void _show(void *data);
 static void _hide(void *data);
 static void _destroy(void *data);
@@ -62,6 +88,7 @@ static void _update(void *view_data, int update_type, void *data);
 static void _mouse_cb(int id, void *data, Evas_Object *obj);
 static void _keypad_cb(int id, void *data, Evas *e,
                Evas_Object *obj, Evas_Event_Key_Down *ev);
+static void _popup_clicked_cb(int id, void *data, Evas_Object *obj);
 
 static view_class _vclass = {
        .view_id = VIEW_ACTION_MENU,
@@ -72,11 +99,36 @@ static view_class _vclass = {
        .update = _update
 };
 
+const char *tuts_txts[] = {
+       [PICT_MODE_TUT_IX] = PICT_MODE_TUT,
+       [PICT_CONTR_TUT_IX] = PICT_CONTR_TUT,
+       [PICT_BRIGHT_TUT_IX] = PICT_BRIGHT_TUT,
+       [PICT_SHARP_TUT_IX] = PICT_SHARP_TUT,
+       [PICT_COLOR_TUT_IX] = PICT_COLOR_TUT,
+       [PICT_TINT_TUT_IX] = PICT_TINT_TUT,
+       [PICT_SCR_ADJ_TUT_IX] = PICT_SCR_ADJ_TUT,
+       [CLOCK_TUT_IX] = CLOCK_TUT,
+       [SLEEP_TIM_TUT_IX] = SLEEP_TIM_TUT,
+       [WAKE_UP_TUT_IX] = WAKE_UP_TUT,
+       [CHANGE_PIN_TUT_IX] = CHANGE_PIN_TUT,
+       [CHANGE_LANG_TUT_IX] = CHANGE_LANG_TUT,
+       [SUBTITLE_TUT_IX] = SUBTITLE_TUT,
+       [CHANGE_LOC_TUT_IX] = CHANGE_LOC_TUT,
+       [RESET_TUT_IX] = RESET_TUT,
+       [SOUND_TUT_IX] = SOUND_TUT,
+       [CHAN_TUT_IX] = CHAN_TUT,
+       [NET_TUT_IX] = NET_TUT
+};
+
 static input_handler _btn_handler = {
        .clicked = _mouse_cb,
        .key_down = _keypad_cb
 };
 
+static input_handler _popup_handler = {
+       .clicked = _popup_clicked_cb
+};
+
 view_class *view_action_menu_get_vclass(void)
 {
        return &_vclass;
@@ -85,12 +137,9 @@ view_class *view_action_menu_get_vclass(void)
 static Evas_Object *_create(Evas_Object *win, void *data)
 {
        struct _priv *priv = NULL;
-       int w = 0;
-       int h = 0;
+       Evas_Object *popup_button = NULL;
 
-       evas_object_geometry_get(win, NULL, NULL, &w, &h);
-
-       if (!win || !w || !h) {
+       if (!win) {
                _ERR("Get window object failed.");
                return NULL;
        }
@@ -102,10 +151,17 @@ static Evas_Object *_create(Evas_Object *win, void *data)
                return NULL;
        }
 
+       priv->view_tut_assoc = eina_hash_string_superfast_new(NULL);
+       if (!priv->view_tut_assoc || !_fill_view_tut_assoc(priv->view_tut_assoc)) {
+               free(priv);
+               return NULL;
+       }
+
        priv->lmgr = (layoutmgr *)data;
        priv->action_menu_layout = utils_add_layout(win, GRP_VIEW_ACTION_MENU, EINA_TRUE);
 
        if (!priv->action_menu_layout) {
+               eina_hash_free(priv->view_tut_assoc);
                free(priv);
                return NULL;
        }
@@ -119,13 +175,29 @@ static Evas_Object *_create(Evas_Object *win, void *data)
 
        if (!priv->live_tv_btn || !priv->more_fav_btn ||
                !priv->reorder_btn || !priv->fav_btn || !priv->tut_btn) {
+               eina_hash_free(priv->view_tut_assoc);
                evas_object_del(priv->action_menu_layout);
                free(priv);
        }
-
        evas_object_hide(priv->reorder_btn);
        evas_object_hide(priv->fav_btn);
        evas_object_hide(priv->tut_btn);
+
+       priv->tut_popup = utils_add_popup(priv->action_menu_layout, NULL, STR_TUTORIAL, NULL);
+       if (!priv->tut_popup) {
+               eina_hash_free(priv->view_tut_assoc);
+               evas_object_del(priv->action_menu_layout);
+               free(priv);
+       }
+
+       popup_button = utils_add_button(priv->tut_popup, "button1", NULL, "OK");
+       if (!popup_button) {
+               eina_hash_free(priv->view_tut_assoc);
+               evas_object_del(priv->action_menu_layout);
+               free(priv);
+       }
+
+       inputmgr_add_callback(popup_button, 0, &_popup_handler, priv);
        inputmgr_add_callback(priv->live_tv_btn, LIVE_TV_BUTTON_ID, &_btn_handler, priv);
        inputmgr_add_callback(priv->more_fav_btn, MORE_FAV_BUTTON_ID, &_btn_handler, priv);
        inputmgr_add_callback(priv->reorder_btn, REORDER_BUTTON_ID, &_btn_handler, priv);
@@ -133,6 +205,7 @@ static Evas_Object *_create(Evas_Object *win, void *data)
        inputmgr_add_callback(priv->tut_btn, TUT_BUTTON_ID, &_btn_handler, priv);
 
        if (!viewmgr_set_view_data(VIEW_ACTION_MENU, priv)) {
+               eina_hash_free(priv->view_tut_assoc);
                evas_object_del(priv->action_menu_layout);
                free(priv);
                return NULL;
@@ -141,6 +214,32 @@ static Evas_Object *_create(Evas_Object *win, void *data)
        return priv->action_menu_layout;
 }
 
+static Eina_Bool _fill_view_tut_assoc(Eina_Hash *hash)
+{
+       Eina_Bool res = EINA_TRUE;
+
+       res &= eina_hash_add(hash, VIEW_PICTURE_MODE, (void *)tuts_txts[PICT_MODE_TUT_IX]);
+       res &= eina_hash_add(hash, VIEW_PICTURE_CONTRAST, (void *)tuts_txts[PICT_CONTR_TUT_IX]);
+       res &= eina_hash_add(hash, VIEW_PICTURE_BRIGHTNESS, (void *)tuts_txts[PICT_BRIGHT_TUT_IX]);
+       res &= eina_hash_add(hash, VIEW_PICTURE_SHARPNESS, (void *)tuts_txts[PICT_SHARP_TUT_IX]);
+       res &= eina_hash_add(hash, VIEW_PICTURE_COLOR, (void *)tuts_txts[PICT_COLOR_TUT_IX]);
+       res &= eina_hash_add(hash, VIEW_PICTURE_TINT, (void *)tuts_txts[PICT_TINT_TUT_IX]);
+       res &= eina_hash_add(hash, VIEW_PICTURE_SCREEN_ADJ, (void *)tuts_txts[PICT_SCR_ADJ_TUT_IX]);
+       res &= eina_hash_add(hash, VIEW_CLOCK, (void *)tuts_txts[CLOCK_TUT_IX]);
+       res &= eina_hash_add(hash, VIEW_SLEEP_TIMER, (void *)tuts_txts[SLEEP_TIM_TUT_IX]);
+       res &= eina_hash_add(hash, VIEW_WAKEUP_TIMER, (void *)tuts_txts[WAKE_UP_TUT_IX]);
+       res &= eina_hash_add(hash, VIEW_CHANGE_PINCODE, (void *)tuts_txts[CHANGE_PIN_TUT_IX]);
+       res &= eina_hash_add(hash, VIEW_LANGUAGE, (void *)tuts_txts[CHANGE_LANG_TUT_IX]);
+       res &= eina_hash_add(hash, VIEW_SUBTITLE, (void *)tuts_txts[SUBTITLE_TUT_IX]);
+       res &= eina_hash_add(hash, VIEW_LOCATION, (void *)tuts_txts[CHANGE_LOC_TUT_IX]);
+       res &= eina_hash_add(hash, VIEW_RESET, (void *)tuts_txts[RESET_TUT_IX]);
+       res &= eina_hash_add(hash, LAYOUT_ID_SOUND, (void *)tuts_txts[SOUND_TUT_IX]);
+       res &= eina_hash_add(hash, LAYOUT_ID_CHANNEL, (void *)tuts_txts[CHAN_TUT_IX]);
+       res &= eina_hash_add(hash, LAYOUT_ID_NETWORK, (void *)tuts_txts[NET_TUT_IX]);
+
+       return res;
+}
+
 static void _show(void *data)
 {
        struct _priv *priv = (struct _priv *)data;
@@ -176,7 +275,7 @@ static void _destroy(void *data)
                _ERR("Invalid parameter.");
                return;
        }
-
+       eina_hash_free(priv->view_tut_assoc);
        evas_object_del(priv->action_menu_layout);
        free(priv);
 }
@@ -185,6 +284,7 @@ static void _update(void *view_data, int update_type, void *data)
 {
        action_menu_parameter *amp = NULL;
        struct _priv *vd = (struct _priv *)view_data;
+       const char *tutorial_txt = NULL;
 
        if (!data || !vd)
                return;
@@ -197,6 +297,7 @@ static void _update(void *view_data, int update_type, void *data)
        evas_object_hide(vd->reorder_btn);
        evas_object_hide(vd->fav_btn);
        evas_object_hide(vd->tut_btn);
+       evas_object_hide(vd->tut_popup);
 
        amp = (action_menu_parameter *)data;
 
@@ -227,6 +328,9 @@ static void _update(void *view_data, int update_type, void *data)
                        ) {
                                elm_layout_content_set(vd->action_menu_layout, PART_ACT_MENU_ICO_BTN0, vd->fav_btn);
                                elm_layout_content_set(vd->action_menu_layout, PART_ACT_MENU_ICO_BTN1, vd->reorder_btn);
+                               elm_layout_content_set(vd->action_menu_layout, PART_ACT_MENU_ICO_BTN2, vd->tut_btn);
+                               tutorial_txt = eina_hash_find(vd->view_tut_assoc , vd->caller_layout_id);
+                               elm_object_text_set(vd->tut_popup, _(tutorial_txt));
                                elm_object_focus_next_object_set(vd->live_tv_btn, vd->fav_btn, ELM_FOCUS_DOWN);
                                elm_object_focus_next_object_set(vd->more_fav_btn, vd->fav_btn, ELM_FOCUS_UP);
                        }
@@ -250,6 +354,8 @@ static void _update(void *view_data, int update_type, void *data)
                                ) {
                                        elm_layout_content_set(vd->action_menu_layout, PART_ACT_MENU_ICO_BTN0, vd->fav_btn);
                                        elm_layout_content_set(vd->action_menu_layout, PART_ACT_MENU_ICO_BTN1, vd->tut_btn);
+                                       tutorial_txt = eina_hash_find(vd->view_tut_assoc , vd->caller_layout_subitem_id);
+                                       elm_object_text_set(vd->tut_popup, _(tutorial_txt));
                                        elm_object_focus_next_object_set(vd->live_tv_btn, vd->fav_btn, ELM_FOCUS_DOWN);
                                        elm_object_focus_next_object_set(vd->more_fav_btn, vd->fav_btn, ELM_FOCUS_UP);
                        }
@@ -287,8 +393,10 @@ static void _mouse_cb(int id, void *data, Evas_Object *obj)
                                                                UPDATE_REMOVED_FROM_FAV, (void *)priv->caller_layout_subitem_menu_id);
                break;
        case TUT_BUTTON_ID:
-               /* TODO: popup */
-               break;
+               viewmgr_pop_view();
+               evas_object_show(priv->tut_popup);
+               evas_object_focus_set(elm_layout_content_get(priv->tut_popup, "button1"), EINA_TRUE);
+               return;
        default:
                return;
        }
@@ -306,3 +414,14 @@ static void _keypad_cb(int id, void *data, Evas *e,
        if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_ESC))
                viewmgr_pop_view();
 }
+
+static void _popup_clicked_cb(int id, void *data, Evas_Object *obj)
+{
+       struct _priv *priv = data;
+
+       if (!priv)
+               return;
+
+       evas_object_hide(priv->tut_popup);
+       viewmgr_show_view(VIEW_ACTION_MENU);
+}