#include "utils.h"
#define ACTION_MENU_TITLE_RESET "Reset"
+#define COUNT_MENU_ITEM 4
enum input_handler_type {
INPUT_HANDLER_TYPE_BTN,
- INPUT_HANDLER_TYPE_ITEM,
+ INPUT_HANDLER_TYPE_ITEM_RESET,
INPUT_HANDLER_TYPE_RESET,
INPUT_HANDLER_TYPE_DISCARD,
INPUT_HANDLER_TYPE_CANCEL
Evas_Object *win;
Evas_Object *base;
Evas_Object *btn;
- Evas_Object *item;
Evas_Object *popup;
+ Evas_Object *box;
+ Eina_List *list;
bool edited;
};
+struct _btn_info {
+ char *icon;
+ char *focus_icon;
+ char *dis_icon;
+ char *title;
+ int handler_id;
+};
+
static void _focused(int id, void *data, Evas_Object *obj,
Elm_Object_Item *item)
{
viewmgr_update_view(VIEW_USER_EDIT, UPDATE_TYPE_RESET, NULL);
viewmgr_hide_view(VIEW_ACTION_MENU);
break;
- case INPUT_HANDLER_TYPE_ITEM:
+ case INPUT_HANDLER_TYPE_ITEM_RESET:
_add_popup(priv, MESSAGE_RESET, MESSAGE_RESET_CONTENTS,
MESSAGE_RESET, INPUT_HANDLER_TYPE_RESET,
MESSAGE_CANCEL, INPUT_HANDLER_TYPE_CANCEL);
!strcmp(ev->keyname, KEY_BACK_REMOTE)) {
switch (id) {
case INPUT_HANDLER_TYPE_BTN:
- case INPUT_HANDLER_TYPE_ITEM:
+ case INPUT_HANDLER_TYPE_ITEM_RESET:
viewmgr_hide_view(VIEW_ACTION_MENU);
break;
case INPUT_HANDLER_TYPE_RESET:
_select(id, data, obj);
}
-static Evas_Object *_add_item(Evas_Object *box, struct _priv *priv)
-{
- Evas_Object *item, *ic, *focus_ic, *lbl, *focus_lbl, *bg;
-
- item = utils_add_layout(box, GRP_ACTION_MENU_TABLE_ITEM, true, NULL);
- if (!item) {
- _ERR("failed to add item");
- evas_object_del(box);
- return false;
- }
-
- ic = utils_add_icon(item, IMAGE_ACTION_MENU_ICON_RESET,
- PART_ACTION_MENU_TABLE_ITEM_ICON);
- if (!ic)
- goto err;
-
- focus_ic = utils_add_icon(item, IMAGE_ACTION_MENU_ICON_RESET_FOCUS,
- PART_ACTION_MENU_TABLE_ITEM_ICON_FOCUS);
- if (!focus_ic)
- goto err;
-
- lbl = utils_add_label(item, ACTION_MENU_TITLE_RESET,
- STYLE_LABEL_ACTION_MENU_TITLE,
- PART_ACTION_MENU_TABLE_ITEM_TEXT);
- if (!lbl)
- goto err;
-
- focus_lbl = utils_add_label(item, ACTION_MENU_TITLE_RESET,
- STYLE_LABEL_ACTION_MENU_TITLE_FOCUS,
- PART_ACTION_MENU_TABLE_ITEM_TEXT_FOCUS);
- if (!focus_lbl)
- goto err;
-
- bg = utils_add_bg(item, COLOR_DEFAULT_R, COLOR_DEFAULT_G,
- COLOR_DEFAULT_B, COLOR_DEFAULT_A,
- PART_ACTION_MENU_TABLE_ITEM_BG);
- if (!bg)
- goto err;
-
- evas_object_show(item);
- inputmgr_add_callback(item, INPUT_HANDLER_TYPE_ITEM, &handler, priv);
-
- return item;
-err:
- evas_object_del(item);
- return NULL;
-}
-
-static bool _add_menu(struct _priv *priv)
+static bool _add_base(struct _priv *priv)
{
- Evas_Object *btn, *box, *item;
+ Evas_Object *btn, *box;
btn = utils_add_layout(priv->base, GRP_ACTION_MENU_LIVETV, true,
PART_ACTION_MENU_LIVETV);
return false;
}
elm_object_part_content_set(priv->base, PART_ACTION_MENU_TABLE, box);
+ elm_box_padding_set(box, 1, 0);
elm_box_align_set(box, 0.0, 0.5);
-
- item = _add_item(box, priv);
- if (!item) {
- _ERR("failed to add item");
- evas_object_del(box);
- return false;
- }
-
- elm_box_pack_start(box, item);
- priv->item = item;
+ priv->box = box;
return true;
}
priv->win = win;
priv->base = base;
- if (!_add_menu(priv)) {
+ if (!_add_base(priv)) {
_ERR("failed to add menu");
free(priv);
evas_object_del(base);
return base;
}
+static void _add_empty_item(struct _priv *priv, int len)
+{
+ int i;
+ Evas_Object *item;
+
+ for (i = 0; i < len; i++) {
+ item = utils_add_layout(priv->box, GRP_ACTION_MENU_TABLE_ITEM,
+ false, NULL);
+ if (!item) {
+ _ERR("failed to add item");
+ return;
+ }
+
+ evas_object_show(item);
+ elm_box_pack_end(priv->box, item);
+ priv->list = eina_list_append(priv->list, item);
+ }
+}
+
+static bool _add_item(struct _priv *priv)
+{
+ Evas_Object *item, *ic, *focus_ic, *lbl, *focus_lbl, *bg;
+ struct _btn_info btn_info[] = {
+ {
+ IMAGE_ACTION_MENU_ICON_RESET,
+ IMAGE_ACTION_MENU_ICON_RESET_FOCUS,
+ IMAGE_ACTION_MENU_ICON_RESET_DIS,
+ ACTION_MENU_TITLE_RESET,
+ INPUT_HANDLER_TYPE_ITEM_RESET
+ }
+ };
+ int i;
+
+ elm_box_clear(priv->box);
+
+ for (i = 0; i < sizeof(btn_info) / sizeof(*btn_info); i++) {
+ item = utils_add_layout(priv->box, GRP_ACTION_MENU_TABLE_ITEM,
+ priv->edited, NULL);
+ if (!item) {
+ _ERR("failed to add item");
+ return false;
+ }
+
+ ic = utils_add_icon(item, priv->edited ?
+ btn_info[i].icon : btn_info[i].dis_icon,
+ PART_ACTION_MENU_TABLE_ITEM_ICON);
+ if (!ic)
+ goto err;
+
+ lbl = utils_add_label(item, btn_info[i].title,
+ priv->edited ? STYLE_LABEL_ACTION_MENU_TITLE :
+ STYLE_LABEL_ACTION_MENU_TITLE_DIS,
+ PART_ACTION_MENU_TABLE_ITEM_TEXT);
+ if (!lbl)
+ goto err;
+
+ if (priv->edited) {
+ focus_ic = utils_add_icon(item, btn_info[i].focus_icon,
+ PART_ACTION_MENU_TABLE_ITEM_ICON_FOCUS);
+ if (!focus_ic)
+ goto err;
+
+ focus_lbl = utils_add_label(item, btn_info[i].title,
+ STYLE_LABEL_ACTION_MENU_TITLE_FOCUS,
+ PART_ACTION_MENU_TABLE_ITEM_TEXT_FOCUS);
+ if (!focus_lbl)
+ goto err;
+
+ bg = utils_add_bg(item, COLOR_DEFAULT_R,
+ COLOR_DEFAULT_G, COLOR_DEFAULT_B,
+ COLOR_DEFAULT_A,
+ PART_ACTION_MENU_TABLE_ITEM_BG);
+ if (!bg)
+ goto err;
+
+ inputmgr_add_callback(item, btn_info[i].handler_id,
+ &handler, priv);
+ }
+ evas_object_show(item);
+ elm_box_pack_end(priv->box, item);
+ priv->list = eina_list_append(priv->list, item);
+ }
+
+ _add_empty_item(priv, COUNT_MENU_ITEM -
+ sizeof(btn_info) / sizeof(*btn_info));
+
+ return true;
+err:
+ evas_object_del(item);
+ return false;
+}
+
static void _show(void *data)
{
struct _priv *priv;
priv = data;
+ if (!_add_item(priv)) {
+ _ERR("failed to add item");
+ return;
+ }
+
evas_object_show(priv->base);
if (priv->btn)
static void _hide(void *data)
{
struct _priv *priv;
+ Evas_Object *eo;
if (!data) {
_ERR("Invalid argument");
priv = data;
+ EINA_LIST_FREE(priv->list, eo) {
+ evas_object_del(eo);
+ inputmgr_remove_callback(eo, &handler);
+ }
+
evas_object_hide(priv->base);
+ priv->list = NULL;
priv->edited = false;
}
priv = data;
inputmgr_remove_callback(priv->btn, &handler);
- inputmgr_remove_callback(priv->item, &handler);
evas_object_del(priv->base);
free(priv);