Added the focus_cb, select_cb for grid object 65/44265/1
authorHyojung Jo <hj903.jo@samsung.com>
Mon, 20 Jul 2015 10:17:09 +0000 (19:17 +0900)
committerHyojung Jo <hj903.jo@samsung.com>
Mon, 20 Jul 2015 10:17:09 +0000 (19:17 +0900)
Change-Id: Ibd3bfe45a46bfd93ac2b91a7d3471ffcfd786527
Signed-off-by: Hyojung Jo <hj903.jo@samsung.com>
CMakeLists.txt
include/define.h
include/grid.h
packaging/org.tizen.favorite.spec
res/widgets/gengrid_apps.edc
res/widgets/gengrid_gallery.edc
src/grid/grid_apps.c
src/grid/grid_gallery.c
src/grid/grid_movie.c
src/grid/grid_music.c
src/view/view_base.c

index a015b96..9b14fcd 100644 (file)
@@ -25,6 +25,7 @@ pkg_check_modules(PKGS REQUIRED
                pkgmgr-info
                capi-content-media-content
                glib-2.0
+               aul
                )
 
 IF(NOT DEFINED PACKAGE_NAME)
index 448a61e..a99c26f 100644 (file)
 #define SIG_FOCUSED "focused"
 #define SIG_UNFOCUSED "unfocused"
 #define SIG_SELECTED "selected"
+#define SIG_ITEM_SELECTED "item.selected"
+
+/* Source */
+#define SRC_EDC "edc"
 
 /* Text */
 #define STR_FAVORITE "Favorite"
index 1df10e3..984ab34 100644 (file)
@@ -27,6 +27,7 @@ struct grid_data {
 
        Eina_List *(*create_item_list)(void);
        void (*destroy_item_list)(Eina_List *list);
+       void (*item_selected)(Elm_Object_Item *it);
 };
 
 struct grid_data *get_tv_grid_data(void);
index 01516a2..4c17cb8 100644 (file)
@@ -14,6 +14,7 @@ BuildRequires: pkgconfig(app-utils)
 BuildRequires: pkgconfig(pkgmgr-info)
 BuildRequires: pkgconfig(capi-content-media-content)
 BuildRequires: pkgconfig(glib-2.0)
+BuildRequires: pkgconfig(aul)
 
 %define _appdir /usr/apps/%{name}
 %define _bindir %{_appdir}/bin
index f64fc8e..f23e3d8 100644 (file)
@@ -229,5 +229,16 @@ group {
                        target, "part.focus.right";
                }
 
+               program {
+                       name, SIG_SELECTED;
+                       signal, "elm,state,selected";
+                       source, "elm";
+                       after, "item_selected";
+               }
+
+               program {
+                       name, "item_selected";
+                       action, SIGNAL_EMIT SIG_ITEM_SELECTED SRC_EDC;
+               }
        }
 }
index d4727c4..3d68eb2 100644 (file)
@@ -239,5 +239,17 @@ group {
                        target, "part.focus.down";
                        target, "part.focus.right";
                }
+
+               program {
+                       name, SIG_SELECTED;
+                       signal, "elm,state,selected";
+                       source, "elm";
+                       after, "item_selected";
+               }
+
+               program {
+                       name, "item_selected";
+                       action, SIGNAL_EMIT SIG_ITEM_SELECTED SRC_EDC;
+               }
        }
 }
index 47bc5bf..305ac0b 100644 (file)
@@ -19,6 +19,7 @@
 #include <gridmgr.h>
 #include <app_debug.h>
 #include <app_contents.h>
+#include <aul.h>
 
 #include "define.h"
 #include "grid.h"
@@ -167,6 +168,22 @@ static void _destroy_item_list(Eina_List *list)
        free_app_favorite_list(list);
 }
 
+static void _item_selected(Elm_Object_Item *it)
+{
+       struct app_data *adata;
+       int r;
+
+       if (!it) {
+               _ERR("Invalid argument.");
+               return;
+       }
+       adata = elm_object_item_data_get(it);
+
+       r = aul_open_app(get_app_id(adata));
+       if (r == AUL_R_EINVAL)
+               _ERR("Wrong app id");
+}
+
 static struct grid_data _gdata = {
        .id = STR_APPS,
        .item_size_x = ITEM_APPS_X,
@@ -174,6 +191,7 @@ static struct grid_data _gdata = {
        .gclass = &_gclass,
        .create_item_list = _create_item_list,
        .destroy_item_list = _destroy_item_list,
+       .item_selected = _item_selected,
 };
 
 struct grid_data *get_apps_grid_data(void)
index 275e808..7739641 100644 (file)
@@ -126,6 +126,16 @@ static void _destroy_item_list(Eina_List *list)
        free_media_favorite_list(list);
 }
 
+static void _item_selected(Elm_Object_Item *it)
+{
+       if (!it) {
+               _ERR("Invalid argument.");
+               return;
+       }
+
+       /* FIXME: The mediahub should be implemented. */
+}
+
 static struct grid_data _gdata = {
        .id = STR_GALLERY,
        .item_size_x = ITEM_GALLERY_X,
@@ -133,6 +143,7 @@ static struct grid_data _gdata = {
        .gclass = &_gclass,
        .create_item_list = _create_item_list,
        .destroy_item_list = _destroy_item_list,
+       .item_selected = _item_selected,
 };
 
 struct grid_data *get_gallery_grid_data(void)
index d5d952d..6c21ee3 100644 (file)
@@ -142,6 +142,16 @@ static void _destroy_item_list(Eina_List *list)
        free_media_favorite_list(list);
 }
 
+static void _item_selected(Elm_Object_Item *it)
+{
+       if (!it) {
+               _ERR("Invalid argument.");
+               return;
+       }
+
+       /* FIXME: The mediahub should be implemented. */
+}
+
 static struct grid_data _gdata = {
        .id = STR_MOVIE,
        .item_size_x = ITEM_MOVIE_X,
@@ -149,6 +159,7 @@ static struct grid_data _gdata = {
        .gclass = &_gclass,
        .create_item_list = _create_item_list,
        .destroy_item_list = _destroy_item_list,
+       .item_selected = _item_selected,
 };
 
 struct grid_data *get_movie_grid_data(void)
index 0d776da..ad64526 100644 (file)
@@ -110,6 +110,16 @@ static void _destroy_item_list(Eina_List *list)
        free_media_favorite_list(list);
 }
 
+static void _item_selected(Elm_Object_Item *it)
+{
+       if (!it) {
+               _ERR("Invalid argument.");
+               return;
+       }
+
+       /* FIXME: The mediahub should be implemented. */
+}
+
 static struct grid_data _gdata = {
        .id = STR_MUSIC,
        .item_size_x = ITEM_MUSIC_X,
@@ -117,6 +127,7 @@ static struct grid_data _gdata = {
        .gclass = &_gclass,
        .create_item_list = _create_item_list,
        .destroy_item_list = _destroy_item_list,
+       .item_selected = _item_selected,
 };
 
 struct grid_data *get_music_grid_data(void)
index 7b96953..fa4212f 100644 (file)
@@ -141,15 +141,106 @@ static void _menu_focused_cb(int id, void *data, Evas_Object *obj,
 static void _menu_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
                Evas_Event_Key_Down *ev)
 {
+       struct grid_data *gdata;
+       Elm_Object_Item *first_item = NULL;
+
        if (!ev) {
                _ERR("Invalid argument.");
                return;
        }
 
-       if (!strcmp(ev->key, KEY_BACK))
+       if (!strcmp(ev->key, KEY_BACK)) {
                ui_app_exit();
+       } else if (!strcmp(ev->key, KEY_ENTER) || !strcmp(ev->key, KEY_DOWN)) {
+               gdata = _get_grid_data[id]();
+               if (!gdata || !gdata->grid)
+                       return;
 
-       /* It will be implemented later. */
+               first_item = elm_gengrid_first_item_get(gdata->grid);
+               if (!first_item)
+                       return;
+
+               elm_object_focus_set(gdata->grid, EINA_TRUE);
+               elm_object_item_focus_set(first_item, EINA_TRUE);
+       }
+}
+
+static void _grid_focused_cb(int id, void *data, Evas_Object *obj,
+               Elm_Object_Item *item)
+{
+       struct _priv *priv;
+
+       if (!data) {
+               _ERR("Invalid argument.");
+               return;
+       }
+       priv = data;
+
+       elm_object_signal_emit(priv->menu[priv->cur_menu_id], SIG_SELECTED, "");
+}
+
+static void _grid_item_selected_cb(void *data, Elm_Object_Item *it,
+               const char *emission, const char *source)
+{
+       struct grid_data *gdata;
+
+       if (!data || !it) {
+               _ERR("Invalid argument.");
+               return;
+       }
+       gdata = data;
+
+       if (gdata->item_selected)
+               gdata->item_selected(it);
+
+       elm_gengrid_item_selected_set(it, EINA_FALSE);
+}
+
+static void _grid_realized_cb(int id, void *data, Evas_Object *obj,
+               Elm_Object_Item *item)
+{
+       struct grid_data *gdata;
+
+       if (!item) {
+               _ERR("Invalid argument.");
+               return;
+       }
+
+       gdata = _get_grid_data[id]();
+       if (!gdata || !gdata->id || !gdata->gclass) {
+               _ERR("Get grid data failed.");
+               return;
+       }
+
+       elm_object_item_signal_callback_add(item, SIG_ITEM_SELECTED,
+                       SRC_EDC, _grid_item_selected_cb, gdata);
+}
+
+static void _grid_unrealized_cb(int id, void *data, Evas_Object *obj,
+               Elm_Object_Item *item)
+{
+       if (!item) {
+               _ERR("Invalid argument.");
+               return;
+       }
+
+       elm_object_item_signal_callback_del(item, SIG_ITEM_SELECTED,
+                       SRC_EDC, _grid_item_selected_cb);
+}
+
+static void _grid_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Key_Down *ev)
+{
+       struct _priv *priv;
+
+       if (!data || !ev) {
+               _ERR("Invalid argument.");
+               return;
+       }
+       priv = data;
+
+       if (!strcmp(ev->keyname, KEY_BACK))
+               elm_object_focus_set(priv->menu[priv->cur_menu_id], EINA_TRUE);
 }
 
 static input_handler _menu_input_handler = {
@@ -159,6 +250,14 @@ static input_handler _menu_input_handler = {
        /* It will be implemented later. */
 };
 
+static input_handler _grid_input_handler = {
+       .focused = _grid_focused_cb,
+       .realized = _grid_realized_cb,
+       .unrealized = _grid_unrealized_cb,
+       .key_down = _grid_key_down_cb
+       /* It will be implemented later. */
+};
+
 static bool _draw_top_area(struct _priv *priv)
 {
        Evas_Object *btn;
@@ -237,6 +336,8 @@ static bool _add_grid(struct _priv *priv, int id)
                return false;
        }
 
+       inputmgr_add_callback(grid, id, &_grid_input_handler, priv);
+
        gdata->grid = grid;
 
        return true;