summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJehun Lim <jehun.lim@samsung.com>2015-09-02 15:24:54 +0900
committerJehun Lim <jehun.lim@samsung.com>2015-09-02 15:24:54 +0900
commit91ab3c2eb1f1b3b8521474e1a1e26bb7f1e7e095 (patch)
treeee13545e761bc9f1b58b26063aeef5c21ca39b0c
parent44fbed6475c2576f0ee745521c249a22987fad7f (diff)
downloadair_mediahub-91ab3c2eb1f1b3b8521474e1a1e26bb7f1e7e095.tar.gz
air_mediahub-91ab3c2eb1f1b3b8521474e1a1e26bb7f1e7e095.tar.bz2
air_mediahub-91ab3c2eb1f1b3b8521474e1a1e26bb7f1e7e095.zip
base: add button and ctxpopup to select view mode
Change-Id: I8e45929ebcc5b67076f375459054e26a5c999bf4 Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
-rw-r--r--include/layout/movie.h1
-rw-r--r--include/view/base.h2
-rw-r--r--res/edc/layout/movie.edc41
-rw-r--r--res/edc/view/base.edc85
-rw-r--r--res/edc/widgets/ctxpopup.edc2
-rw-r--r--src/layout/gallery.c6
-rw-r--r--src/layout/movie.c6
-rw-r--r--src/layout/music.c6
-rw-r--r--src/view/base.c211
9 files changed, 273 insertions, 87 deletions
diff --git a/include/layout/movie.h b/include/layout/movie.h
index f6f6145..2de9449 100644
--- a/include/layout/movie.h
+++ b/include/layout/movie.h
@@ -27,7 +27,6 @@
/* part */
#define PART_CONTENT "part.content"
#define PART_NOCONTENT "part.nocontent"
-#define PART_CONTENT_INFO "part.content_info"
#define PART_RECENT_CONTENT_TEXTBG "part.recent_content_textbg"
#define PART_RECENT_CONTENT_THUMBNAIL "part.recent_content_thumbnail"
#define PART_RECENT_CONTENT_FAVORITE "part.recent_content_favorite"
diff --git a/include/view/base.h b/include/view/base.h
index c5f365d..95dda2e 100644
--- a/include/view/base.h
+++ b/include/view/base.h
@@ -28,6 +28,8 @@
#define PART_TITLE "part.title"
#define PART_MENU_AREA "part.menu_area"
#define PART_THUMBNAIL_AREA "part.thumbnail_area"
+#define PART_VIEW_MODE "part.view_mode"
+#define PART_CONTENT_INFO "part.content_info"
#define PART_ITEM_TITLE "part.item_title"
#define PART_ITEM_CONTENT "part.item_content"
diff --git a/res/edc/layout/movie.edc b/res/edc/layout/movie.edc
index 479d8ad..3b8c598 100644
--- a/res/edc/layout/movie.edc
+++ b/res/edc/layout/movie.edc
@@ -52,10 +52,6 @@ group {
to: "padding_thumbnail_area";
relative: 1.0 0.0;
}
- rel2 {
- to: "padding_content_info";
- relative: 1.0 0.0;
- }
}
}
part {
@@ -74,42 +70,5 @@ group {
color: COLOR_TEXT_NORMAL;
}
}
- part {
- name: "padding_content_info";
- type: SPACER;
- scale: 1;
- description {
- state: "default" 0.0;
- rel1.to: PART_CONTENT_INFO;
- rel2 {
- to: PART_CONTENT_INFO;
- relative: 1.0 0.0;
- }
- min: 0 16;
- align: 0.5 1.0;
- fixed: 0 1;
- }
- }
- part {
- name: PART_CONTENT_INFO;
- type: TEXT;
- scale: 1;
- description {
- state: "default" 0.0;
- rel1 {
- to: "padding_thumbnail_area";
- relative: 1.0 1.0;
- }
- text {
- font: FONT_LIGHT;
- size: 28;
- align: 0.0 0.5;
- }
- min: 0 64;
- align: 0.5 1.0;
- color: COLOR_TEXT_INDEX;
- fixed: 0 1;
- }
- }
}
}
diff --git a/res/edc/view/base.edc b/res/edc/view/base.edc
index b95e599..52bdbcf 100644
--- a/res/edc/view/base.edc
+++ b/res/edc/view/base.edc
@@ -133,11 +133,94 @@ group {
relative: 0.0 1.0;
}
rel2.to: "padding_thumbnail_area";
- min: 0 784;
+ min: 0 720;
align: 0.5 0.0;
fixed: 0 1;
}
}
+ part {
+ name: "bottom_area";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: PART_THUMBNAIL_AREA;
+ relative: 0.0 1.0;
+ }
+ rel2.to: PART_THUMBNAIL_AREA;
+ min: 0 64;
+ align: 0.5 0.0;
+ fixed: 0 1;
+ }
+ }
+ part {
+ name: "padding_view_mode";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1.to: "bottom_area";
+ rel2 {
+ to: "bottom_area";
+ relative: 0.0 1.0;
+ }
+ min: 62 0;
+ align: 0.0 0.5;
+ fixed: 1 0;
+ }
+ }
+ part {
+ name: PART_VIEW_MODE;
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: "padding_view_mode";
+ relative: 1.0 0.0;
+ }
+ rel2.to: "padding_view_mode";
+ min: 218 0;
+ align: 0.0 0.5;
+ fixed: 1 0;
+ }
+ }
+ part {
+ name: "padding_content_info";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: PART_VIEW_MODE;
+ relative: 1.0 0.0;
+ }
+ rel2.to: PART_VIEW_MODE;
+ min: 26 0;
+ align: 0.0 0.5;
+ fixed: 1 0;
+ }
+ }
+ part {
+ name: PART_CONTENT_INFO;
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: "padding_content_info";
+ relative: 1.0 0.0;
+ }
+ rel2.to: "bottom_area";
+ text {
+ font: FONT_LIGHT;
+ size: 28;
+ align: 0.0 0.5;
+ }
+ color: COLOR_TEXT_INDEX;
+ }
+ }
/* CURTAIN */
part {
diff --git a/res/edc/widgets/ctxpopup.edc b/res/edc/widgets/ctxpopup.edc
index 188d688..616b6d4 100644
--- a/res/edc/widgets/ctxpopup.edc
+++ b/res/edc/widgets/ctxpopup.edc
@@ -24,7 +24,7 @@ group {
scale: 1;
description {
state: "default" 0.0;
- min: 220 226;
+ min: 220 0;
color: COLOR_ITEM_BG;
}
}
diff --git a/src/layout/gallery.c b/src/layout/gallery.c
index 22e32e2..3a535e8 100644
--- a/src/layout/gallery.c
+++ b/src/layout/gallery.c
@@ -267,15 +267,17 @@ static void _update_content_info(struct _priv *priv)
snprintf(buf, sizeof(buf), "%d Photos, %d Videos", photo, video);
- elm_object_part_text_set(priv->layout, PART_CONTENT_INFO, buf);
+ elm_object_part_text_set(priv->base, PART_CONTENT_INFO, buf);
}
static void _update_content_list(struct _priv *priv)
{
Eina_List *list;
- if (priv->media_list)
+ if (priv->media_list) {
+ _update_content_info(priv);
return;
+ }
list = mediadata_get_list(priv->md, E_LIST_DATE);
if (!list) {
diff --git a/src/layout/movie.c b/src/layout/movie.c
index 4639e8a..38506ae 100644
--- a/src/layout/movie.c
+++ b/src/layout/movie.c
@@ -469,15 +469,17 @@ static void _update_content_info(struct _priv *priv)
snprintf(buf, sizeof(buf), "%d Movies", count);
- elm_object_part_text_set(priv->layout, PART_CONTENT_INFO, buf);
+ elm_object_part_text_set(priv->base, PART_CONTENT_INFO, buf);
}
static void _update_content_list(struct _priv *priv)
{
Eina_List *list;
- if (priv->media_list)
+ if (priv->media_list) {
+ _update_content_info(priv);
return;
+ }
list = mediadata_get_list(priv->md, E_LIST_NAME);
if (!list) {
diff --git a/src/layout/music.c b/src/layout/music.c
index 1ff80c0..1b61627 100644
--- a/src/layout/music.c
+++ b/src/layout/music.c
@@ -402,15 +402,17 @@ static void _update_content_info(struct _priv *priv)
snprintf(buf, sizeof(buf), "%d Songs", count);
- elm_object_part_text_set(priv->layout, PART_CONTENT_INFO, buf);
+ elm_object_part_text_set(priv->base, PART_CONTENT_INFO, buf);
}
static void _update_content_list(struct _priv *priv)
{
Eina_List *list;
- if (priv->media_list)
+ if (priv->media_list) {
+ _update_content_info(priv);
return;
+ }
list = mediadata_get_list(priv->md, E_LIST_NAME);
if (!list) {
diff --git a/src/view/base.c b/src/view/base.c
index 4db00f3..7c928a3 100644
--- a/src/view/base.c
+++ b/src/view/base.c
@@ -28,6 +28,7 @@
#include "define.h"
#include "layout.h"
#include "view.h"
+#include "util/ctxpopup.h"
#include "util/util.h"
#define TITLE_TEXT "Media Hub"
@@ -41,6 +42,13 @@
#define TIME_TOAST_FAVORITE 5.0
+#define ARRAY_SIZE(arr) (sizeof(arr)) / (sizeof((arr)[0]))
+
+enum _object_type {
+ BASE_MENU_BTN = 0,
+ BASE_VIEW_BTN
+};
+
enum _layout_type {
E_LAYOUT_MOVIE = 0,
E_LAYOUT_GALLERY,
@@ -51,40 +59,76 @@ enum _layout_type {
struct _priv {
Evas_Object *win;
Evas_Object *base;
- Evas_Object *btn[E_LAYOUT_MAX];
- Evas_Object *notify;
+ Evas_Object *menu_btn[E_LAYOUT_MAX];
+ Evas_Object *view_btn;
Evas_Object *focused_btn;
+ Evas_Object *notify;
+
+ struct ctxpopup *cpopup;
+
layoutmgr *lmgr;
Eina_List *favorite_list;
app_media *recent_item;
int current_layout;
+ int view_mode;
+};
+
+const char *view_mode_movie[] = {
+ "Name",
+ "Genre",
+ "Date",
+ "Folder"
+};
+
+const char *view_mode_gallery[] = {
+ "Event",
+ "Place",
+ "Video",
+ "Folder"
+};
+
+const char *view_mode_music[] = {
+ "Song",
+ "Album",
+ "Artist",
+ "Genre",
+ "Folder"
};
struct _menu_item {
const char *name;
const char *layout_id;
layout_class *(*func_get_lclass)(void);
+
+ const char **text_view_mode;
+ int text_size;
};
static struct _menu_item g_menu_item[E_LAYOUT_MAX] = {
[E_LAYOUT_MOVIE] = {
"Movie",
LAYOUT_MOVIE,
- layout_movie_get_lclass
+ layout_movie_get_lclass,
+ view_mode_movie,
+ ARRAY_SIZE(view_mode_movie)
},
[E_LAYOUT_GALLERY] = {
"Gallery",
LAYOUT_GALLERY,
- layout_gallery_get_lclass
+ layout_gallery_get_lclass,
+ view_mode_gallery,
+ ARRAY_SIZE(view_mode_gallery)
},
[E_LAYOUT_MUSIC] = {
"Music",
LAYOUT_MUSIC,
- layout_music_get_lclass
+ layout_music_get_lclass,
+ view_mode_music,
+ ARRAY_SIZE(view_mode_music)
}
};
@@ -94,31 +138,74 @@ static void _set_current_layout(struct _priv *priv, int layout)
g_menu_item[priv->current_layout].layout_id);
layoutmgr_show_layout(priv->lmgr, g_menu_item[layout].layout_id);
+ elm_object_text_set(priv->view_btn,
+ g_menu_item[layout].text_view_mode[priv->view_mode]);
+
if (priv->focused_btn)
elm_object_signal_emit(priv->focused_btn,
SIG_BTN_UNSELECTED, SIG_SOURCE_SRC);
- priv->focused_btn = priv->btn[layout];
+ priv->focused_btn = priv->menu_btn[layout];
priv->current_layout = layout;
}
+static void _update_layout(struct _priv *priv, Evas_Object *obj)
+{
+ int i;
+
+ for (i = 0; i < E_LAYOUT_MAX; i++) {
+ if (priv->menu_btn[i] == obj)
+ break;
+ }
+
+ if (i == E_LAYOUT_MAX)
+ return;
+
+ layoutmgr_update_layout(priv->lmgr, g_menu_item[i].layout_id,
+ UPDATE_FOCUS_STATE, NULL);
+
+ if (priv->focused_btn == obj)
+ return;
+
+ _set_current_layout(priv, i);
+
+ layoutmgr_update_layout(priv->lmgr, g_menu_item[i].layout_id,
+ UPDATE_CONTENT, NULL);
+}
+
static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
Evas_Event_Key_Down *ev)
{
if (!obj || !ev)
return;
- if (!strcmp(ev->keyname, KEY_ENTER) ||
- !strcmp(ev->keyname, KEY_ENTER_REMOTE))
- elm_object_focus_next(obj, ELM_FOCUS_DOWN);
- else if (!strcmp(ev->keyname, KEY_BACK) ||
- !strcmp(ev->keyname, KEY_BACK_REMOTE))
- ui_app_exit();
+ switch (id) {
+ case BASE_MENU_BTN:
+ if (!strcmp(ev->keyname, KEY_ENTER) ||
+ !strcmp(ev->keyname, KEY_ENTER_REMOTE))
+ elm_object_focus_next(obj, ELM_FOCUS_DOWN);
+ else if (!strcmp(ev->keyname, KEY_BACK) ||
+ !strcmp(ev->keyname, KEY_BACK_REMOTE))
+ ui_app_exit();
+
+ break;
+ case BASE_VIEW_BTN:
+ if (!strcmp(ev->keyname, KEY_BACK) ||
+ !strcmp(ev->keyname, KEY_BACK_REMOTE))
+ ui_app_exit();
+
+ break;
+ default:
+ break;
+ }
}
static void _mouse_move_cb(int id, void *data, Evas *e,
Evas_Object *obj, Evas_Event_Mouse_Move *ev)
{
+ if (!obj)
+ return;
+
if (!elm_object_focus_get(obj))
elm_object_focus_set(obj, EINA_TRUE);
}
@@ -127,7 +214,6 @@ static void _focused_cb(int id, void *data, Evas_Object *obj,
Elm_Object_Item *it)
{
struct _priv *priv;
- int i;
if (!data) {
_ERR("failed to get data");
@@ -136,29 +222,59 @@ static void _focused_cb(int id, void *data, Evas_Object *obj,
priv = data;
- for (i = 0; i < E_LAYOUT_MAX; i++) {
- if (priv->btn[i] == obj)
- break;
+ switch (id) {
+ case BASE_MENU_BTN:
+ _update_layout(priv, obj);
+ break;
+ default:
+ break;
}
+}
- if (i == E_LAYOUT_MAX)
+static void _view_btn_clicked(struct _priv *priv)
+{
+ struct ctxpopup *cpopup;
+ int x, y, w, h;
+
+ cpopup = ctxpopup_create(priv->base, STYLE_CTXPOPUP_VIEW_MODE,
+ STYLE_BTN_VIEW_OPTION,
+ g_menu_item[priv->current_layout].text_view_mode,
+ g_menu_item[priv->current_layout].text_size);
+ if (!cpopup) {
+ _ERR("failed to create ctxpopup");
return;
+ }
- layoutmgr_update_layout(priv->lmgr, g_menu_item[i].layout_id,
- UPDATE_FOCUS_STATE, NULL);
+ evas_object_geometry_get(priv->view_btn, &x, &y, &w, &h);
+ ctxpopup_show(cpopup, x + (w / 2), y);
- if (priv->focused_btn == obj)
+ priv->cpopup = cpopup;
+}
+
+static void _clicked_cb(int id, void *data, Evas_Object *obj)
+{
+ struct _priv *priv;
+
+ if (!data) {
+ _ERR("failed to get data");
return;
+ }
- _set_current_layout(priv, i);
+ priv = data;
- layoutmgr_update_layout(priv->lmgr, g_menu_item[i].layout_id,
- UPDATE_CONTENT, NULL);
+ switch (id) {
+ case BASE_VIEW_BTN:
+ _view_btn_clicked(priv);
+ break;
+ default:
+ break;
+ }
}
static input_handler handler = {
.key_down = _key_down_cb,
.mouse_move = _mouse_move_cb,
+ .clicked = _clicked_cb,
.focused = _focused_cb
};
@@ -437,32 +553,50 @@ static bool _draw_menu_btn(struct _priv *priv)
evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
for (i = 0; i < E_LAYOUT_MAX; i++) {
- btn = elm_button_add(box);
+ btn = util_add_button(box, STYLE_BTN_MENU, g_menu_item[i].name);
if (!btn) {
- _ERR("failed to create button object");
+ _ERR("failed to add button object");
+ evas_object_del(box);
return false;
}
- elm_object_style_set(btn, STYLE_BTN_MENU);
- elm_object_text_set(btn, g_menu_item[i].name);
-
elm_box_pack_end(box, btn);
evas_object_show(btn);
- inputmgr_add_callback(btn, 0, &handler, priv);
+ inputmgr_add_callback(btn, BASE_MENU_BTN, &handler, priv);
- priv->btn[i] = btn;
+ priv->menu_btn[i] = btn;
}
evas_object_show(box);
elm_object_part_content_set(priv->base, PART_MENU_AREA, box);
- elm_object_focus_next_object_set(priv->btn[E_LAYOUT_MAX - 1],
- priv->btn[0], ELM_FOCUS_RIGHT);
- elm_object_focus_next_object_set(priv->btn[0],
- priv->btn[E_LAYOUT_MAX - 1], ELM_FOCUS_LEFT);
+ elm_object_focus_next_object_set(priv->menu_btn[E_LAYOUT_MAX - 1],
+ priv->menu_btn[0], ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(priv->menu_btn[0],
+ priv->menu_btn[E_LAYOUT_MAX - 1],
+ ELM_FOCUS_LEFT);
+
+ return true;
+}
+
+static bool _draw_view_mode_btn(struct _priv *priv)
+{
+ Evas_Object *btn;
+
+ btn = util_add_button(priv->base, STYLE_BTN_VIEW_MODE, NULL);
+ if (!btn) {
+ _ERR("failed to add button object");
+ return false;
+ }
+
+ inputmgr_add_callback(btn, BASE_VIEW_BTN, &handler, priv);
+
+ elm_object_part_content_set(priv->base, PART_VIEW_MODE, btn);
+
+ priv->view_btn = btn;
return true;
}
@@ -478,6 +612,9 @@ static bool _draw_items(struct _priv *priv)
if (!_draw_menu_btn(priv))
return false;
+ if (!_draw_view_mode_btn(priv))
+ return false;
+
return true;
}
@@ -559,13 +696,13 @@ static Evas_Object *_create(Evas_Object *win, void *data)
lmgr = layoutmgr_create(base);
for (i = 0; i < E_LAYOUT_MAX; i++)
layoutmgr_add_layout(lmgr, g_menu_item[i].func_get_lclass(),
- priv->btn[i]);
+ priv->menu_btn[i]);
priv->lmgr = lmgr;
viewmgr_set_view_data(VIEW_BASE, priv);
- elm_object_focus_set(priv->btn[0], EINA_TRUE);
+ elm_object_focus_set(priv->menu_btn[0], EINA_TRUE);
return base;
}
@@ -694,7 +831,7 @@ static void _destroy(void *view_data)
priv = view_data;
for (i = 0; i < E_LAYOUT_MAX; i++)
- inputmgr_remove_callback(priv->btn[i], &handler);
+ inputmgr_remove_callback(priv->menu_btn[i], &handler);
layoutmgr_remove_layout(priv->lmgr, LAYOUT_MOVIE);
layoutmgr_remove_layout(priv->lmgr, LAYOUT_GALLERY);