part {
name, "part.bg";
type, RECT;
+ mouse_events, 0;
scale, 1;
description {
state, "default" 0.0;
- min, 0 64;
+ color, 0 0 0 0;
+ visible, 0;
+ }
+ }
+
+ part {
+ name, "part.button.area";
+ type, RECT;
+ mouse_events, 1;
+ scale, 1;
+ description {
+ state, "default" 0.0;
+ min, 327 64;
+ rel1.relative, 0.5 0.5;
+ rel2.relative, 0.5 0.5;
+ align, 0.5 0.5;
+ fixed, 1 1;
}
description {
state, "focused" 0.0;
description {
state, "default" 0.0;
min, 20 0;
- rel1.to, "part.bg";
+ rel1.to, "part.button.area";
rel2 {
- to, "part.bg";
+ to, "part.button.area";
relative, 0.0 1.0;
}
align, 0.0 0.5;
state, "default" 0.0;
min, 20 0;
rel1 {
- to, "part.bg";
+ to, "part.button.area";
relative, 1.0 0.0;
}
- rel2.to, "part.bg";
+ rel2.to, "part.button.area";
align, 1.0 0.5;
fixed, 1 0;
}
description {
state, "default" 0.0;
color, 194 194 194 255;
- rel1.to, "part.bg";
+ rel1.to, "part.button.area";
rel2 {
- to, "part.bg";
+ to, "part.button.area";
relative, 1.0 0.0;
}
min, 0 1;
relative, 0.0 1.0;
}
rel2 {
- to, "part.bg";
+ to, "part.button.area";
relative, 0.0 1.0;
}
min, 1 0;
to, "part.inside.line.left";
relative, 1.0 1.0;
}
- rel2.to, "part.bg";
+ rel2.to, "part.button.area";
min, 0 1;
align, 0.5 1.0;
fixed, 0 1;
type, RECT;
description {
state, "default" 0.0;
+ rel1.to, "part.button.area";
+ rel2.to, "part.button.area";
color, 0 0 0 0;
}
description {
signal, "elm,action,focus";
source, "elm";
action, STATE_SET "focused" 0.0;
- target, "part.bg";
+ target, "part.button.area";
target, "elm.text";
transition, TRANSITION_FOCUS;
}
signal, "elm,action,unfocus";
source, "elm";
action, STATE_SET "default" 0.0;
- target, "part.bg";
+ target, "part.button.area";
target, "elm.text";
transition, TRANSITION_FOCUS;
}
return win;
}
-Evas_Object *utils_add_layout(Evas_Object *parent, const char *group)
+Evas_Object *utils_add_layout(Evas_Object *parent, const char *group,
+ Eina_Bool win_resize)
{
Evas_Object *layout;
evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
EVAS_HINT_EXPAND);
- elm_win_resize_object_add(parent, layout);
+
+ if (win_resize)
+ elm_win_resize_object_add(parent, layout);
return layout;
}
return ctxpopup;
}
+Evas_Object *utils_add_scroller(Evas_Object *parent, const char *part,
+ Evas_Object *content)
+{
+ Evas_Object *scr;
+
+ if (!parent) {
+ _ERR("Invalid argument.");
+ return NULL;
+ }
+
+ scr = elm_scroller_add(parent);
+ if (!scr) {
+ _ERR("elm_scroller_add failed.");
+ return NULL;
+ }
+
+ elm_scroller_policy_set(scr,
+ ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+ elm_object_focus_allow_set(scr, EINA_FALSE);
+
+ if (part)
+ elm_object_part_content_set(parent, part, scr);
+
+ if (content)
+ elm_object_content_set(scr, content);
+
+ return scr;
+}
+
bool utils_launch_app(const char *appid)
{
app_control_h app_ctrl;
struct app_data *adata;
Evas_Object *win;
Evas_Object *base;
+ Evas_Object *menu_area;
Evas_Object *grid;
Evas_Object *live_btn;
Evas_Object *menu[ACTION_MENU_COUNT];
Evas_Object *popup;
struct gridmgr *gmgr;
Eina_List *fav_list;
- bool uninstallable;
};
struct _action_info {
{
Evas_Object *btn;
- btn = utils_add_button(priv->base,
+ btn = utils_add_button(priv->menu_area,
PART_TOP_BTN, STR_LIVETV, STYLE_LIVETV_BTN);
if (!btn) {
_ERR("Add button failed.");
} else if (action_info[idx].id == BTN_UNINSTALL) {
/* The 'rpm' type package uninstallation is not supported */
pkgtype = get_pkg_type(priv->adata);
- if (!strcmp(pkgtype, STR_WGT) || !strcmp(pkgtype, STR_TPK)) {
+ if (!strcmp(pkgtype, STR_WGT) || !strcmp(pkgtype, STR_TPK))
action_info[idx].disable = EINA_FALSE;
- priv->uninstallable = true;
- } else {
+ else
action_info[idx].disable = EINA_TRUE;
- priv->uninstallable = false;
- }
}
if (action_info[idx].disable)
Evas_Object *table, *btn;
int i, row = 0, col = 0;
- table = utils_add_table(priv->base, PART_MENU,
+ table = utils_add_table(priv->menu_area, PART_MENU,
SIZE_ACTION_TABLE_BORDER, SIZE_ACTION_TABLE_BORDER);
if (!table) {
_ERR("Add table failed.");
}
for (i = 0; i < ACTION_MENU_COUNT; i++) {
- btn = utils_add_button(priv->base, NULL, action_info[i].title,
+ btn = utils_add_button(table, NULL, action_info[i].title,
action_info[i].style);
if (!btn) {
_ERR("Add button failed.");
priv->menu[i], ELM_FOCUS_DOWN);
}
- if (priv->uninstallable) {
- elm_object_focus_next_object_set(priv->menu[0], priv->menu[1],
- ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(priv->menu[1], priv->menu[0],
- ELM_FOCUS_RIGHT);
- } else {
- elm_object_focus_next_object_set(priv->menu[0], priv->menu[0],
- ELM_FOCUS_LEFT);
- elm_object_focus_next_object_set(priv->menu[0], priv->menu[0],
- ELM_FOCUS_RIGHT);
- }
+ elm_object_focus_next_object_set(priv->menu[0], priv->menu[0],
+ ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(priv->menu[ACTION_MENU_COUNT - 1],
+ priv->menu[ACTION_MENU_COUNT - 1], ELM_FOCUS_RIGHT);
elm_object_focus_next_object_set(priv->grid, priv->menu[0],
ELM_FOCUS_UP);
ELM_FOCUS_LEFT);
}
+static int _get_favorite_grid_height(int cnt)
+{
+ int height;
+ int col;
+
+ if (cnt % SIZE_FAVORITE_COL_MAX == 0)
+ col = cnt / SIZE_FAVORITE_COL_MAX;
+ else
+ col = cnt / SIZE_FAVORITE_COL_MAX + 1;
+
+ height = SIZE_FAVORITE_GRID_HEIGHT * col;
+
+ return height;
+}
+
static bool _draw_favorite_area(struct _priv *priv)
{
+ int cnt;
+
priv->fav_list = get_app_favorite_list();
if (!priv->fav_list) {
- elm_object_signal_emit(priv->base,
+ elm_object_signal_emit(priv->menu_area,
SIG_NO_CONTENT, SRC_FAVORITE_AREA);
_set_focus_policy(priv);
return true;
}
- elm_object_signal_emit(priv->base, SIG_CONTENT, SRC_FAVORITE_AREA);
+ elm_object_signal_emit(priv->menu_area, SIG_CONTENT, SRC_FAVORITE_AREA);
if (!gridmgr_append_list(priv->gmgr, STR_FAVORITE, priv->fav_list)) {
_ERR("Gridmgr append list failed.");
return false;
}
- elm_object_part_content_set(priv->base, PART_FAVORITE, priv->grid);
+ cnt = eina_list_count(priv->fav_list);
+
+ evas_object_size_hint_min_set(priv->grid,
+ SIZE_FAVORITE_GRID_WIDTH * SIZE_FAVORITE_COL_MAX,
+ _get_favorite_grid_height(cnt));
+
+ elm_object_part_content_set(priv->menu_area, PART_FAVORITE, priv->grid);
_set_focus_policy(priv);
struct grid_class *gclass;
Evas_Object *grid;
- grid = utils_add_gengrid(priv->base, EINA_FALSE,
+ grid = utils_add_gengrid(priv->menu_area, EINA_FALSE,
SIZE_FAVORITE_GRID_WIDTH, SIZE_FAVORITE_GRID_HEIGHT);
if (!grid) {
_ERR("Add gengrid failed.");
{
struct _priv *priv;
struct gridmgr *gmgr;
- Evas_Object *base, *grid;
+ Evas_Object *base, *menu_area, *scr, *grid;
if (!win) {
_ERR("Get window object failed.");
return NULL;
}
- base = utils_add_layout(win, GRP_VIEW_ACTION_MENU);
+ base = utils_add_layout(win, GRP_VIEW_ACTION_MENU, EINA_TRUE);
if (!base) {
_ERR("Add layout failed.");
free(priv);
return NULL;
}
+ menu_area = utils_add_layout(base, GRP_ACTION_MENU, EINA_FALSE);
+ if (!menu_area) {
+ _ERR("Add layout failed.");
+ goto end;
+ }
+
+ scr = utils_add_scroller(base, PART_ACTION_MENU, menu_area);
+ if (!scr) {
+ _ERR("Add scroller failed.");
+ goto end;
+ }
+
gmgr = gridmgr_create();
if (!gmgr) {
_ERR("Create gridmgr failed.");
priv->win = win;
priv->base = base;
+ priv->menu_area = menu_area;
priv->gmgr = gmgr;
grid = _add_grid(priv);
goto end;
}
- _draw_livetv_area(priv);
-
return base;
end:
evas_object_hide(priv->base);
}
+static void _draw_action_menu(struct _priv *priv)
+{
+ _draw_livetv_area(priv);
+ _draw_action_area(priv);
+ _draw_favorite_area(priv);
+}
+
static void _update(void *view_data, int update_type, void *data)
{
struct _priv *priv;
priv->adata = data;
- _draw_action_area(priv);
- _draw_favorite_area(priv);
+ _draw_action_menu(priv);
}
}