DATA_DURATION,
};
+enum action_type {
+ ACTION_LAUNCH = 0,
+ ACTION_UPDATE_FAVORITE,
+ ACTION_UPDATE_LOCK,
+};
+
struct datamgr {
Eina_List *(*get_favorites)(enum item_type type);
void (*free_favorites)(Eina_List *list);
int (*get_count)(enum item_type type);
char *(*get_data)(void *data, enum data_type type);
- bool (*action)(Elm_Object_Item *it);
+ bool (*action)(Elm_Object_Item *it, enum action_type type);
};
struct datamgr *get_channel_datamgr(void);
#define STYLE_LIVETV_BTN "style.livetv.button"
#define STYLE_ACTION_MENU_FAV_BTN "style.action.menu.favorite.button"
#define STYLE_ACTION_MENU_LOCK_BTN "style.action.menu.lock.button"
-#define STYLE_ACTION_MENU_SHARE_BTN "style.action.menu.share.button"
/* Signal */
#define SIG_FOCUSED "focused"
#define SIG_SELECTED "selected"
#define SIG_UNSELECTED "unselected"
#define SIG_ITEM_SELECTED "item.selected"
+#define SIG_ITEM_FOCUSED "item_focused"
#define SIG_VISIBLE "visible"
#define SIG_INVISIBLE "invisible"
#define SIG_DISABLE "elm,state,disabled"
+#define SIG_TOGGLE "toggle"
/* Source */
#define SRC_EDC "edc"
/* Text */
#define STR_FAVORITE "Favorite"
#define STR_LOCK "Lock"
-#define STR_SHARE "Share"
#define STR_NULL "(NULL)"
#define STR_NO_CONTENTS "No Contents"
#define STR_CNT_TV "channels"
#define ACTION_FAV_FOC_PNG "btn_menu_favorite_foc.png"
#define ACTION_FAV_SEL_PNG "btn_menu_favorite_sel.png"
#define ACTION_FAV_DIS_PNG "btn_menu_favorite_dis.png"
+#define ACTION_UNLOCK_NOR_PNG "btn_menu_unlock_nor.png"
+#define ACTION_UNLOCK_FOC_PNG "btn_menu_unlock_foc.png"
#define ACTION_LOCK_NOR_PNG "btn_menu_lock_nor.png"
#define ACTION_LOCK_FOC_PNG "btn_menu_lock_foc.png"
#define ACTION_LOCK_SEL_PNG "btn_menu_lock_sel.png"
#define ACTION_LOCK_DIS_PNG "btn_menu_lock_dis.png"
-#define ACTION_SHARE_NOR_PNG "btn_menu_share_nor.png"
-#define ACTION_SHARE_FOC_PNG "btn_menu_share_foc.png"
-#define ACTION_SHARE_SEL_PNG "btn_menu_share_sel.png"
-#define ACTION_SHARE_DIS_PNG "btn_menu_share_dis.png"
/* Path */
#define PATH_PLAY_ICON_PNG IMGDIR"/ic_thumbnail_play.png"
#ifndef __AIR_FAVORITE_GRID_H__
#define __AIR_FAVORITE_GRID_H__
+#include "datamgr.h"
+
struct grid_data {
const char *id;
Evas_Object *grid;
int item_size_y;
Eina_List *list;
struct grid_class *gclass;
+ Elm_Object_Item *focused_item;
Eina_List *(*create_item_list)(void);
void (*destroy_item_list)(Eina_List *list);
- void (*item_selected)(Elm_Object_Item *it);
+ bool (*item_action)(Elm_Object_Item *it, enum action_type type);
};
struct grid_data *get_tv_grid_data(void);
* limitations under the License.
*/
-#ifndef __AIR_FAVORITE_VIEW_ACTION_MENU_H__
-#define __AIR_FAVORITE_VIEW_ACTION_MENU_H__
+#ifndef __AIR_FAVORITE_VIEW_H__
+#define __AIR_FAVORITE_VIEW_H__
+view_class *view_base_get_vclass(void);
view_class *view_action_menu_get_vclass(void);
-#endif /* __AIR_FAVORITE_VIEW_ACTION_MENU_H__ */
+enum update_type {
+ UPDATE_DATA = 0,
+ UPDATE_GRID,
+};
+
+#endif /* __AIR_APPS_VIEW_H__ */
+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * 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 __AIR_FAVORITE_VIEW_BASE_H__
-#define __AIR_FAVORITE_VIEW_BASE_H__
-
-view_class *view_base_get_vclass(void);
-
-#endif /* __AIR_FAVORITE_VIEW_BASE_H__ */
#define STATE_NORMAL 0
#define STATE_SELECTED 1
#define STATE_DISABLE 2
+#define STATE_TOGGLE 3
group {
name, "elm/button/base/style.menu.button";
programs{
program {
- name, SIG_FOCUSED;
- signal, "elm,action,focus";
- source, "elm";
+ name, "load";
+ signal, "load";
+ source, "";
script {
- new state;
- state = get_int(cur_state);
- if (state != STATE_DISABLE) {
- set_int(cur_state, STATE_NORMAL);
- run_program(PROGRAM:"focused,anim");
- }
+ set_int(cur_state, STATE_NORMAL);
}
}
program {
- name, SIG_UNFOCUSED;
- signal, "elm,action,unfocus";
+ name, SIG_FOCUSED;
+ signal, "elm,action,focus";
source, "elm";
script {
new state;
state = get_int(cur_state);
- if (state == STATE_SELECTED) {
- set_state(PART:"part.bg", "selected", 0.0);
- set_state(PART:"elm.text", "selected", 0.0);
- set_state(PART:"part.icon", "selected", 0.0);
- } else if (state != STATE_DISABLE) {
- run_program(PROGRAM:"unfocused,anim");
+ if (state == STATE_NORMAL) {
+ set_state(PART:"part.bg", "focused", 0.0);
+ set_state(PART:"part.icon", "focused", 0.0);
+ set_state(PART:"elm.text", "focused", 0.0);
}
}
}
program {
- name, "focused,anim";
- action, STATE_SET "focused" 0.0;
- target, "part.bg";
- target, "elm.text";
- target, "part.icon";
- transition, TRANSITION_FOCUS;
- }
-
- program {
- name, "unfocused,anim";
- action, STATE_SET "default" 0.0;
- target, "part.bg";
- target, "elm.text";
- target, "part.icon";
- transition, TRANSITION_FOCUS;
- }
-
- program {
- name, SIG_SELECTED;
- signal, SIG_SELECTED;
- source, SRC_ACTION_BTN;
+ name, SIG_UNFOCUSED;
+ signal, "elm,action,unfocus";
+ source, "elm";
script {
new state;
state = get_int(cur_state);
- if (state != STATE_DISABLE) {
- set_int(cur_state, STATE_SELECTED);
- set_state(PART:"part.bg", "selected", 0.0);
- set_state(PART:"elm.text", "selected", 0.0);
- set_state(PART:"part.icon", "selected", 0.0);
+ if (state == STATE_NORMAL) {
+ set_state(PART:"part.bg", "default", 0.0);
+ set_state(PART:"part.icon", "default", 0.0);
+ set_state(PART:"elm.text", "default", 0.0);
}
}
}
inherit, "elm/button/base/style.action.menu.favorite.button";
data.item, "focus_highlight" "on";
images {
+ image, ACTION_UNLOCK_NOR_PNG COMP;
+ image, ACTION_UNLOCK_FOC_PNG COMP;
image, ACTION_LOCK_NOR_PNG COMP;
image, ACTION_LOCK_FOC_PNG COMP;
image, ACTION_LOCK_SEL_PNG COMP;
align, 0.5 0.5;
fixed, 1 1;
min, 60 60;
+ image.normal, ACTION_UNLOCK_NOR_PNG;
+ }
+ description {
+ state, "default.toggle" 0.0;
+ inherit, "default" 0.0;
image.normal, ACTION_LOCK_NOR_PNG;
}
description {
state, "focused" 0.0;
inherit, "default" 0.0;
+ image.normal, ACTION_UNLOCK_FOC_PNG;
+ }
+ description {
+ state, "focused.toggle" 0.0;
+ inherit, "default" 0.0;
image.normal, ACTION_LOCK_FOC_PNG;
}
description {
}
}
}
-}
-group {
- name, "elm/button/base/style.action.menu.share.button";
- inherit, "elm/button/base/style.action.menu.favorite.button";
- data.item, "focus_highlight" "on";
- images {
- image, ACTION_SHARE_NOR_PNG COMP;
- image, ACTION_SHARE_FOC_PNG COMP;
- image, ACTION_SHARE_SEL_PNG COMP;
- image, ACTION_SHARE_DIS_PNG COMP;
- }
- parts {
- part {
- name, "part.icon";
- type, IMAGE;
- scale, 1;
- description {
- state, "default" 0.0;
- rel1 {
- to, "part.icon.bg";
- relative, 0.5 0.5;
+ programs{
+ program {
+ name, "load";
+ signal, "load";
+ source, "";
+ script {
+ set_int(cur_state, STATE_NORMAL);
+ }
+ }
+
+ program {
+ name, SIG_TOGGLE;
+ signal, SIG_TOGGLE;
+ source, SRC_ACTION_BTN;
+ script {
+ new state;
+ state = get_int(cur_state);
+ if (state == STATE_NORMAL) {
+ set_int(cur_state, STATE_TOGGLE);
+ set_state(PART:"part.icon", "default.toggle", 0.0);
}
- rel2 {
- to, "part.icon.bg";
- relative, 0.5 0.5;
+ }
+ }
+
+ program {
+ name, SIG_FOCUSED;
+ signal, "elm,action,focus";
+ source, "elm";
+ script {
+ new state;
+ state = get_int(cur_state);
+ if (state == STATE_NORMAL) {
+ set_state(PART:"part.icon", "focused", 0.0);
+ run_program(PROGRAM:"focused,anim");
+ } else if (state == STATE_TOGGLE) {
+ set_state(PART:"part.icon", "focused.toggle", 0.0);
+ run_program(PROGRAM:"focused,anim");
}
- align, 0.5 0.5;
- fixed, 1 1;
- min, 60 60;
- image.normal, ACTION_SHARE_NOR_PNG;
}
- description {
- state, "focused" 0.0;
- inherit, "default" 0.0;
- image.normal, ACTION_SHARE_FOC_PNG;
+ }
+
+ program {
+ name, SIG_UNFOCUSED;
+ signal, "elm,action,unfocus";
+ source, "elm";
+ script {
+ new state;
+ state = get_int(cur_state);
+ if (state == STATE_NORMAL) {
+ set_state(PART:"part.icon", "default", 0.0);
+ run_program(PROGRAM:"unfocused,anim");
+ } else if (state != STATE_DISABLE) {
+ set_state(PART:"part.icon", "default.toggle", 0.0);
+ run_program(PROGRAM:"unfocused,anim");
+ }
}
- description {
- state, "selected" 0.0;
- inherit, "default" 0.0;
- image.normal, ACTION_SHARE_SEL_PNG;
+ }
+
+ program {
+ name, "focused,anim";
+ action, STATE_SET "focused" 0.0;
+ target, "part.bg";
+ target, "elm.text";
+ transition, TRANSITION_FOCUS;
+ }
+
+ program {
+ name, "unfocused,anim";
+ action, STATE_SET "default" 0.0;
+ target, "part.bg";
+ target, "elm.text";
+ transition, TRANSITION_FOCUS;
+ }
+
+ program {
+ name, SIG_SELECTED;
+ signal, SIG_SELECTED;
+ source, SRC_ACTION_BTN;
+ script {
+ new state;
+ state = get_int(cur_state);
+ if (state == STATE_NORMAL) {
+ set_int(cur_state, STATE_TOGGLE);
+ set_state(PART:"part.icon", "focused.toggle", 0.0);
+ } else if (state == STATE_TOGGLE) {
+ set_int(cur_state, STATE_NORMAL);
+ set_state(PART:"part.icon", "focused", 0.0);
+ }
}
- description {
- state, "disable" 0.0;
- inherit, "default" 0.0;
- image.normal, ACTION_SHARE_DIS_PNG;
+ }
+
+ program {
+ name, SIG_DISABLE;
+ signal, SIG_DISABLE;
+ source, "elm";
+ script {
+ set_int(cur_state, STATE_DISABLE);
+ set_state(PART:"part.bg", "disable", 0.0);
+ set_state(PART:"elm.text", "disable", 0.0);
+ set_state(PART:"part.icon", "disable", 0.0);
+ set_state(PART:"event", "disable", 0.0);
}
}
+
+ program {
+ name, "mouse_unclick_after";
+ signal, "mouse,clicked,1";
+ source, "event";
+ action, SIGNAL_EMIT "elm,action,click" "";
+ }
}
}
target, "part.focus.down";
target, "part.focus.right";
transition, TRANSITION_FOCUS;
+ after, "item_focused";
}
program {
}
program {
+ name, "item_focused";
+ action, SIGNAL_EMIT SIG_ITEM_FOCUSED SRC_EDC;
+ }
+
+ program {
name, SIG_SELECTED;
signal, "elm,state,selected";
source, "elm";
target, "part.focus.right";
target, PART_THUMB_TEXT;
transition, TRANSITION_FOCUS;
+ after, "item_focused";
}
program {
}
program {
+ name, "item_focused";
+ action, SIGNAL_EMIT SIG_ITEM_FOCUSED SRC_EDC;
+ }
+
+ program {
name, SIG_SELECTED;
signal, "elm,state,selected";
source, "elm";
target, "part.focus.right";
target, "part.focus.down";
transition, TRANSITION_FOCUS;
+ after, "item_focused";
}
program {
}
program {
+ name, "item_focused";
+ action, SIGNAL_EMIT SIG_ITEM_FOCUSED SRC_EDC;
+ }
+
+ program {
name, SIG_SELECTED;
signal, "elm,state,selected";
source, "elm";
name, "focus.in.anim.2";
action, STATE_SET "focused" 0.0;
target, "part.default.text.bg";
+ after, "item_focused";
}
program {
}
program {
+ name, "item_focused";
+ action, SIGNAL_EMIT SIG_ITEM_FOCUSED SRC_EDC;
+ }
+
+ program {
name, SIG_SELECTED;
signal, "elm,state,selected";
source, "elm";
target, "part.focus.right";
target, "part.focus.down";
transition, TRANSITION_FOCUS;
+ after, "item_focused";
}
program {
}
program {
+ name, "item_focused";
+ action, SIGNAL_EMIT SIG_ITEM_FOCUSED SRC_EDC;
+ }
+
+ program {
name, SIG_SELECTED;
signal, "elm,state,selected";
source, "elm";
target, "part.focus.right";
target, "part.focus.down";
transition, TRANSITION_FOCUS;
+ after, "item_focused";
}
program {
}
program {
+ name, "item_focused";
+ action, SIGNAL_EMIT SIG_ITEM_FOCUSED SRC_EDC;
+ }
+
+ program {
name, SIG_SELECTED;
signal, "elm,state,selected";
source, "elm";
}
}
-static bool _action(Elm_Object_Item *it)
+static bool _action(Elm_Object_Item *it, enum action_type type)
{
struct app_data *adata;
+ int r;
if (!it) {
_ERR("Invalid argument.");
if (!adata || !adata->id)
return false;
- if (!utils_launch_app(adata->id, NULL, NULL)) {
- _ERR("Launch %s failed.", adata->id);
+ switch (type) {
+ case ACTION_LAUNCH:
+ if (!utils_launch_app(adata->id, NULL, NULL)) {
+ _ERR("Launch %s failed.", adata->id);
+ return false;
+ }
+
+ break;
+
+ case ACTION_UPDATE_FAVORITE:
+ r = app_contents_favorite_set(CONTENTS_APP, adata->id, false);
+ if (r != APP_CONTENTS_ERROR_NONE) {
+ _ERR("Favorite unset failed.");
+ return false;
+ }
+
+ break;
+
+ default:
+ _ERR("Unhandled action type.");
return false;
}
{
char str[SIZE_STR];
- if (!cdata || !cdata->name) {
- _ERR("Invalid argument.");
- return NULL;
- }
-
if (cdata->minor > 0)
snprintf(str, sizeof(str), "%ld-%ld %s", cdata->major,
cdata->minor, cdata->name);
}
}
-static bool _action(Elm_Object_Item *it)
+static bool _unset_favorite(struct channel_data *cdata)
+{
+ int r;
+
+ r = tv_service_channel_info_create();
+ if (r != TVS_ERROR_OK) {
+ _ERR("Tv Service channel info create failed.");
+ return false;
+ }
+
+ r = tv_service_delete_favorite_channel(cdata->id);
+ if (r != TVS_ERROR_OK) {
+ _ERR("Tv Service delete favorite channel failed.");
+ tv_service_channel_info_destroy();
+ return false;
+ }
+
+ tv_service_channel_info_destroy();
+
+ return true;
+}
+
+static bool _action(Elm_Object_Item *it, enum action_type type)
{
struct channel_data *cdata;
char str[SIZE_STR];
if (!cdata)
return false;
- snprintf(str, sizeof(str), "%d", cdata->id);
+ switch (type) {
+ case ACTION_LAUNCH:
+ snprintf(str, sizeof(str), "%d", cdata->id);
+
+ if (!utils_launch_app(STR_LIVETV_APP_ID,
+ STR_KEY_SERVICE_ID, str)) {
+ _ERR("Livetv launch failed.");
+ return false;
+ }
+
+ break;
+
+ case ACTION_UPDATE_FAVORITE:
+ if (!_unset_favorite(cdata)) {
+ _ERR("Unset favorite channel failed.");
+ return false;
+ }
- if (!utils_launch_app(STR_LIVETV_APP_ID, STR_KEY_SERVICE_ID, str)) {
- _ERR("Livetv launch failed.");
+ break;
+
+ case ACTION_UPDATE_LOCK:
+ /* It will implemented later. */
+ break;
+
+ default:
+ _ERR("Unhandled action type.");
return false;
}
g_list_foreach(id_list, _media_favorite_list_foreach, &l);
media_content_disconnect();
- app_contents_free_favorite_list(id_list);
+
+ if (id_list)
+ app_contents_free_favorite_list(id_list);
return l;
}
int duration, h, m, s, sec;
char str[SIZE_STR];
- if (!minfo || !minfo->video ||
- minfo->media_type != MEDIA_CONTENT_TYPE_VIDEO)
+ if (minfo->media_type != MEDIA_CONTENT_TYPE_VIDEO)
return NULL;
duration = minfo->video->duration;
}
cnt = g_list_length(id_list);
- app_contents_free_favorite_list(id_list);
+
+ if (id_list)
+ app_contents_free_favorite_list(id_list);
return cnt;
}
}
}
-static bool _action(Elm_Object_Item *it)
+static bool _action(Elm_Object_Item *it, enum action_type type)
{
app_media *am;
app_media_info *minfo;
+ int r;
if (!it) {
_ERR("Invalid argument.");
if (!minfo->media_id)
return false;
- if (!utils_launch_app(STR_MEDIAHUB_APP_ID, STR_KEY_MEDIA_ID,
- minfo->media_id)) {
- _ERR("Mediahub launch failed.");
+ switch (type) {
+ case ACTION_LAUNCH:
+ if (!utils_launch_app(STR_MEDIAHUB_APP_ID, STR_KEY_MEDIA_ID,
+ minfo->media_id)) {
+ _ERR("Mediahub launch failed.");
+ return false;
+ }
+
+ break;
+
+ case ACTION_UPDATE_FAVORITE:
+ r = app_contents_favorite_set(CONTENTS_MEDIA, minfo->media_id,
+ false);
+ if (r != APP_CONTENTS_ERROR_NONE) {
+ _ERR("Favorite unset failed.");
+ return false;
+ }
+
+ break;
+
+ default:
+ _ERR("Unhandled action type.");
return false;
}
}
}
-static bool _action(Elm_Object_Item *it)
+static bool _action(Elm_Object_Item *it, enum action_type type)
{
/* It will be implemented later. */
#include "define.h"
#include "grid.h"
-#include "datamgr.h"
#define STR_APPS "Apps"
#define STYLE_APPS "style.apps"
dmgr->free_favorites(list);
}
-static void _item_selected(Elm_Object_Item *it)
+static bool _item_action(Elm_Object_Item *it, enum action_type type)
{
struct datamgr *dmgr;
if (!it) {
_ERR("Invalid argument.");
- return;
+ return false;
}
dmgr = get_apps_datamgr();
if (!dmgr || !dmgr->action)
- return;
+ return false;
- if (!dmgr->action(it))
+ if (!dmgr->action(it, type)) {
_ERR("The item action failed.");
+ return false;
+ }
+
+ return true;
}
static struct grid_data _gdata = {
.gclass = &_gclass,
.create_item_list = _create_item_list,
.destroy_item_list = _destroy_item_list,
- .item_selected = _item_selected,
+ .item_action = _item_action,
};
struct grid_data *get_apps_grid_data(void)
#include "define.h"
#include "grid.h"
-#include "datamgr.h"
#define STR_GALLERY "Gallery"
#define STYLE_GALLERY "style.gallery"
dmgr->free_favorites(list);
}
-static void _item_selected(Elm_Object_Item *it)
+static bool _item_action(Elm_Object_Item *it, enum action_type type)
{
struct datamgr *dmgr;
if (!it) {
_ERR("Invalid argument.");
- return;
+ return false;
}
dmgr = get_media_datamgr();
if (!dmgr || !dmgr->action)
- return;
+ return false;
- if (!dmgr->action(it))
+ if (!dmgr->action(it, type)) {
_ERR("The item action failed.");
+ return false;
+ }
+
+ return true;
}
static struct grid_data _gdata = {
.gclass = &_gclass,
.create_item_list = _create_item_list,
.destroy_item_list = _destroy_item_list,
- .item_selected = _item_selected,
+ .item_action = _item_action,
};
struct grid_data *get_gallery_grid_data(void)
#include "define.h"
#include "grid.h"
-#include "datamgr.h"
#define STR_MOVIE "Movie"
#define STYLE_MOVIE "style.movie"
dmgr->free_favorites(list);
}
-static void _item_selected(Elm_Object_Item *it)
+static bool _item_action(Elm_Object_Item *it, enum action_type type)
{
struct datamgr *dmgr;
if (!it) {
_ERR("Invalid argument.");
- return;
+ return false;
}
dmgr = get_media_datamgr();
if (!dmgr || !dmgr->action)
- return;
+ return false;
- if (!dmgr->action(it))
+ if (!dmgr->action(it, type)) {
_ERR("The item action failed.");
+ return false;
+ }
+
+ return true;
}
static struct grid_data _gdata = {
.gclass = &_gclass,
.create_item_list = _create_item_list,
.destroy_item_list = _destroy_item_list,
- .item_selected = _item_selected,
+ .item_action = _item_action,
};
struct grid_data *get_movie_grid_data(void)
#include "define.h"
#include "grid.h"
-#include "datamgr.h"
#define STR_MUSIC "Music"
#define STYLE_MUSIC "style.music"
dmgr->free_favorites(list);
}
-static void _item_selected(Elm_Object_Item *it)
+static bool _item_action(Elm_Object_Item *it, enum action_type type)
{
struct datamgr *dmgr;
if (!it) {
_ERR("Invalid argument.");
- return;
+ return false;
}
dmgr = get_media_datamgr();
if (!dmgr || !dmgr->action)
- return;
+ return false;
- if (!dmgr->action(it))
+ if (!dmgr->action(it, type)) {
_ERR("The item action failed.");
+ return false;
+ }
+
+ return true;
}
static struct grid_data _gdata = {
.gclass = &_gclass,
.create_item_list = _create_item_list,
.destroy_item_list = _destroy_item_list,
- .item_selected = _item_selected,
+ .item_action = _item_action,
};
struct grid_data *get_music_grid_data(void)
dmgr->free_favorites(list);
}
-static void _item_selected(Elm_Object_Item *it)
+static bool _item_action(Elm_Object_Item *it, enum action_type type)
{
struct datamgr *dmgr;
if (!it) {
_ERR("Invalid argument.");
- return;
+ return false;
}
dmgr = get_channel_datamgr();
if (!dmgr || !dmgr->action)
- return;
+ return false;
- if (!dmgr->action(it))
+ if (!dmgr->action(it, type)) {
_ERR("The item action failed.");
+ return false;
+ }
+
+ return true;
}
static struct grid_data _gdata = {
.gclass = &_gclass,
.create_item_list = _create_item_list,
.destroy_item_list = _destroy_item_list,
- .item_selected = _item_selected,
+ .item_action = _item_action,
};
struct grid_data *get_tv_grid_data(void)
#include "define.h"
#include "grid.h"
-#include "datamgr.h"
#define STR_WEBS "Web"
#define STYLE_WEBS "style.webs"
#include "define.h"
#include "utils.h"
-#include "view_base.h"
-#include "view_action_menu.h"
+#include "view.h"
SET_TAG(PACKAGE);
#include <Elementary.h>
#include <viewmgr.h>
#include <inputmgr.h>
+#include <app_contents.h>
#include <app_debug.h>
#include "define.h"
#include "utils.h"
+#include "view.h"
+#include "grid.h"
+#include "datamgr.h"
enum button_type {
BTN_LIVETV = 0,
BTN_FAVORITE,
BTN_LOCK,
- BTN_SHARE,
};
struct _priv {
Evas_Object *base;
Evas_Object *live_btn;
Evas_Object *menu_btn[COUNT_ACTION];
+ struct grid_data *gdata;
};
struct _action_info {
.title = STR_LOCK,
.style = STYLE_ACTION_MENU_LOCK_BTN,
.disable = EINA_TRUE
- },
- {
- .id = BTN_SHARE,
- .title = STR_SHARE,
- .style = STYLE_ACTION_MENU_SHARE_BTN,
- .disable = EINA_TRUE
}
};
elm_object_focus_set(obj, EINA_TRUE);
}
-static void _favorite_selected(void *data, Evas_Object *obj)
+static void _livetv_selected(void *data, Evas_Object *obj)
{
/* It will be implemented later */
}
-static void _livetv_selected(void *data, Evas_Object *obj)
+static void _favorite_selected(void *data, Evas_Object *obj)
{
- /* It will be implemented later */
+ struct _priv *priv;
+ struct grid_data *gdata;
+
+ if (!data) {
+ _ERR("Invalid argument.");
+ return;
+ }
+ priv = data;
+
+ if (!priv->gdata)
+ return;
+
+ gdata = priv->gdata;
+
+ if (!gdata->item_action(gdata->focused_item, ACTION_UPDATE_FAVORITE)) {
+ _ERR("Unfavorite failed.");
+ return;
+ }
+
+ /* FIXME: The base view will be reloaded later */
+
+ viewmgr_hide_view(VIEW_ID_ACTION_MENU);
}
static void _clicked_cb(int id, void *data, Evas_Object *obj)
{
-
switch (id) {
case BTN_LIVETV:
_livetv_selected(data, obj);
/* It is not supported yet. */
break;
- case BTN_SHARE:
- /* It is not supported yet. */
- break;
-
default:
_ERR("Unhandled action type.");
}
{
Evas_Object *btn;
- if (!priv || !priv->base) {
- _ERR("Invalid argument.");
- return false;
- }
-
btn = utils_add_button(priv->base,
PART_LIVETV_BTN, STR_LIVETV, STYLE_LIVETV_BTN);
if (!btn) {
return true;
}
-static bool _draw_menu_area(struct _priv *priv)
+static bool _draw_action_area(struct _priv *priv)
{
Evas_Object *table, *btn;
int i, row = 0, col = 0;
- if (!priv || !priv->base) {
- _ERR("Invalid argument.");
- return false;
- }
-
table = utils_add_table(priv->base, PART_ACTION_MENU,
SIZE_ACTION_TABLE_BORDER, SIZE_ACTION_TABLE_BORDER);
if (!table) {
return true;
}
-static bool _draw_favorite_area(struct _priv *priv)
-{
- if (!priv || !priv->base) {
- _ERR("Invalid argument.");
- return false;
- }
-
- /* It will be implemented later */
-
- return true;
-}
-
-static void _draw_view_content(struct _priv *priv)
-{
- if (!priv) {
- _ERR("Invalid argument.");
- return;
- }
-
- if (!_draw_livetv_area(priv)) {
- _ERR("Draw livetv area failed.");
- return;
- }
-
- if (!_draw_menu_area(priv)) {
- _ERR("Draw menu area failed.");
- return;
- }
-
- if (!_draw_favorite_area(priv))
- _ERR("Draw favorite area failed.");
-}
-
static Evas_Object *_create(Evas_Object *win, void *data)
{
struct _priv *priv;
return NULL;
}
- _draw_view_content(priv);
+ _draw_livetv_area(priv);
+ _draw_action_area(priv);
return base;
}
_ERR("Get data failed.");
return;
}
- priv = (struct _priv *)data;
+ priv = data;
if (priv->base)
evas_object_show(priv->base);
_ERR("Get data failed.");
return;
}
- priv = (struct _priv *)data;
+ priv = data;
if (priv->base)
evas_object_hide(priv->base);
}
+static void _update(void *view_data, int update_type, void *data)
+{
+ struct _priv *priv;
+
+ if (!view_data) {
+ _ERR("Get data failed.");
+ return;
+ }
+ priv = view_data;
+
+ if (update_type == UPDATE_DATA)
+ priv->gdata = data;
+}
+
static void _destroy(void *data)
{
struct _priv *priv;
_ERR("Get data failed.");
return;
}
- priv = (struct _priv *)data;
+ priv = data;
if (priv->base)
evas_object_del(priv->base);
.create = _create,
.show = _show,
.hide = _hide,
+ .update = _update,
.destroy = _destroy,
};
#include "utils.h"
#include "grid.h"
#include "datamgr.h"
+#include "view.h"
const char *str_count[] = {
STR_CNT_TV,
struct datamgr *dmgr;
char str[SIZE_STR];
- if (!base) {
- _ERR("Invalid argument.");
- return;
- }
-
snprintf(str, sizeof(str), "%d %s", count, str_count[id]);
elm_object_part_text_set(base, PART_CONTENTS_COUNT, str);
elm_object_part_text_set(base, PART_CONTENTS_SUBCOUNT, "");
SIG_SELECTED, SRC_MENU_BTN);
}
+static void _grid_item_focused_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;
+
+ gdata->focused_item = it;
+}
+
static void _grid_item_selected_cb(void *data, Elm_Object_Item *it,
const char *emission, const char *source)
{
}
gdata = data;
- if (gdata->item_selected)
- gdata->item_selected(it);
+ if (gdata->item_action)
+ gdata->item_action(it, ACTION_LAUNCH);
elm_gengrid_item_selected_set(it, EINA_FALSE);
}
{
struct grid_data *gdata;
- if (!item) {
+ if (!data || !item) {
_ERR("Invalid argument.");
return;
}
return;
}
+ elm_object_item_signal_callback_add(item, SIG_ITEM_FOCUSED,
+ SRC_EDC, _grid_item_focused_cb, gdata);
elm_object_item_signal_callback_add(item, SIG_ITEM_SELECTED,
SRC_EDC, _grid_item_selected_cb, gdata);
}
return;
}
+ elm_object_item_signal_callback_del(item, SIG_ITEM_FOCUSED,
+ SRC_EDC, _grid_item_focused_cb);
elm_object_item_signal_callback_del(item, SIG_ITEM_SELECTED,
SRC_EDC, _grid_item_selected_cb);
}
Evas_Event_Key_Down *ev)
{
struct _priv *priv;
+ struct grid_data *gdata;
if (!data || !ev) {
_ERR("Invalid argument.");
priv = data;
if (!strcmp(ev->keyname, KEY_BACK)
- || !strcmp(ev->keyname, KEY_BACK_REMOTE))
+ || !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
elm_object_focus_set(priv->menu[priv->cur_menu_id], EINA_TRUE);
+ } else if (!strcmp(ev->keyname, KEY_MENU)
+ || !strcmp(ev->keyname, KEY_MENU_REMOTE)) {
+ gdata = _get_grid_data[id]();
+ if (!gdata)
+ return;
- /* FIXME: The action menu is blocked temporarily. */
- /*
- else if (!strcmp(ev->keyname, KEY_MENU)
- || !strcmp(ev->keyname, KEY_MENU_REMOTE))
+ viewmgr_update_view(VIEW_ID_ACTION_MENU, UPDATE_DATA, gdata);
viewmgr_show_view(VIEW_ID_ACTION_MENU);
- */
+ }
}
static input_handler _menu_input_handler = {
struct grid_data *gdata;
int i;
- if (!priv || !priv->base) {
- _ERR("Invalid argument.");
- return false;
- }
-
elm_object_part_text_set(priv->base, PART_TOP_TITLE, STR_FAVORITE);
priv->box = utils_add_box(priv->base, PART_TOP_MENU, EINA_TRUE,
struct grid_data *gdata;
Evas_Object *grid;
- if (!priv || !priv->base || !priv->gmgr) {
- _ERR("Invalid argument.");
- return false;
- }
-
gdata = _get_grid_data[id]();
if (!gdata || !gdata->id || !gdata->gclass) {
_ERR("Get grid data failed.");