From 0835c324a0be88d2c6ff31dd70c5ab02522b5530 Mon Sep 17 00:00:00 2001 From: Hyojung Jo Date: Thu, 23 Jul 2015 17:59:20 +0900 Subject: [PATCH] Web grid: Added the web grid Change-Id: I8100f41cb58cff61c99bb247b847ae89cbb62f40 Signed-off-by: Hyojung Jo --- CMakeLists.txt | 2 + include/datamgr.h | 2 + packaging/org.tizen.favorite.spec | 1 + res/widgets/gengrid_webs.edc | 197 +++++++++++++++++++++++++++++++++++++- src/data/web.c | 146 ++++++++++++++++++++++++++++ src/grid/grid_webs.c | 102 ++++++++++++++++++-- 6 files changed, 443 insertions(+), 7 deletions(-) create mode 100644 src/data/web.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b14fcd..a7ebb6d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,6 +26,7 @@ pkg_check_modules(PKGS REQUIRED capi-content-media-content glib-2.0 aul + capi-web-bookmark ) IF(NOT DEFINED PACKAGE_NAME) @@ -54,6 +55,7 @@ SET(SRCS src/main.c src/data/app.c src/data/media.c + src/data/web.c src/common/utils.c src/view/view_base.c src/grid/grid_tv.c diff --git a/include/datamgr.h b/include/datamgr.h index 3183fd3..83f8ef0 100644 --- a/include/datamgr.h +++ b/include/datamgr.h @@ -1,6 +1,7 @@ #ifndef __AIR_FAVORITE_DATAMGR_H__ #define __AIR_FAVORITE_DATAMGR_H__ +#include #include enum item_type { @@ -33,5 +34,6 @@ struct datamgr { struct datamgr *get_media_datamgr(void); struct datamgr *get_apps_datamgr(void); +struct datamgr *get_webs_datamgr(void); #endif /* __AIR_FAVORITE_DATAMGR_H__ */ diff --git a/packaging/org.tizen.favorite.spec b/packaging/org.tizen.favorite.spec index 4c17cb8..9ae47ce 100644 --- a/packaging/org.tizen.favorite.spec +++ b/packaging/org.tizen.favorite.spec @@ -15,6 +15,7 @@ BuildRequires: pkgconfig(pkgmgr-info) BuildRequires: pkgconfig(capi-content-media-content) BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(aul) +BuildRequires: pkgconfig(capi-web-bookmark) %define _appdir /usr/apps/%{name} %define _bindir %{_appdir}/bin diff --git a/res/widgets/gengrid_webs.edc b/res/widgets/gengrid_webs.edc index cd75c80..7efaa5b 100644 --- a/res/widgets/gengrid_webs.edc +++ b/res/widgets/gengrid_webs.edc @@ -16,7 +16,202 @@ group { name, "elm/gengrid/item/style.webs/default"; + data.item, "focus_highlight" "on"; + data.item, "texts" "part.thumb.text"; + data.item, "contents" "part.thumb.icon part.thumb.text.bg"; parts { - /* It will be implemeted later. */ + part { + name, PART_THUMB_ICON; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + min, 378 212; + rel2.relative, 0.0 0.0; + align, 0.0 0.0; + fixed, 1 1; + } + } + + part { + name, PART_THUMB_TEXT_BG; + type, SWALLOW; + scale, 1; + description { + state, "default" 0.0; + min, 378 82; + rel1 { + to, PART_THUMB_ICON; + relative, 0.0 1.0; + } + rel2 { + to, PART_THUMB_ICON; + relative, 0.0 1.0; + } + align, 0.0 0.0; + fixed, 1 1; + } + } + + part { + name, "part.focus.down"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + color, 0 119 246 255; + min, 378 82; + rel1 { + to, PART_THUMB_ICON; + relative, 0.0 1.0; + } + rel2 { + to, PART_THUMB_ICON; + relative, 0.0 1.0; + } + align, 0.0 0.0; + fixed, 1 1; + visible, 0; + } + description { + state, "focused" 0.0; + inherit, "default" 0.0; + visible, 1; + } + } + + part { + name, "padding.thumb.text"; + type, SPACER; + scale, 1; + description { + state, "default" 0.0; + min, 18 0; + rel1.to, PART_THUMB_TEXT_BG; + rel2 { + to, PART_THUMB_TEXT_BG; + relative, 0.0 1.0; + } + align, 0.0 0.5; + fixed, 1 0; + } + } + + part { + name, PART_THUMB_TEXT; + type, TEXT; + scale, 1; + description { + state, "default" 0.0; + color, 255 255 255 255; + min, 342 82; + rel1 { + to, "padding.thumb.text"; + relative, 1.0 0.0; + } + rel2 { + to, "padding.thumb.text"; + relative, 1.0 0.0; + } + align, 0.0 0.0; + fixed, 1 1; + text { + font, FONT_TIZENSANS_LIGHT; + size, 28; + align, 0.0 0.5; + } + } + } + + part { + name, "part.focus.up"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + color, 0 119 246 255; + min, 378 3; + rel2.relative, 0.0 0.0; + align, 0.0 0.0; + fixed, 1 1; + visible, 0; + } + description { + state, "focused" 0.0; + inherit, "default" 0.0; + visible, 1; + } + } + + part { + name, "part.focus.left"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + color, 0 119 246 255; + min, 3 294; + rel2.relative, 0.0 0.0; + align, 0.0 0.0; + fixed, 1 1; + visible, 0; + } + description { + state, "focused" 0.0; + inherit, "default" 0.0; + visible, 1; + } + } + + part { + name, "part.focus.right"; + type, RECT; + scale, 1; + description { + state, "default" 0.0; + color, 0 119 246 255; + min, 3 294; + rel1 { + to, "part.focus.up"; + relative, 1.0 0.0; + } + rel2 { + to, "part.focus.up"; + relative, 1.0 0.0; + } + align, 1.0 0.0; + fixed, 1 1; + visible, 0; + } + description { + state, "focused" 0.0; + inherit, "default" 0.0; + visible, 1; + } + } + } + + programs { + program { + name, SIG_FOCUSED; + signal, "elm,state,focused"; + source, "elm"; + action, STATE_SET "focused" 0.0; + target, "part.focus.up"; + target, "part.focus.left"; + target, "part.focus.down"; + target, "part.focus.right"; + } + + program { + name, SIG_UNFOCUSED; + signal, "elm,state,unfocused"; + source, "elm"; + action, STATE_SET "default" 0.0; + target, "part.focus.up"; + target, "part.focus.left"; + target, "part.focus.down"; + target, "part.focus.right"; + } } } diff --git a/src/data/web.c b/src/data/web.c new file mode 100644 index 0000000..fd9b216 --- /dev/null +++ b/src/data/web.c @@ -0,0 +1,146 @@ +/* + * 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. + */ + +#include +#include + +#include "datamgr.h" + +struct web_data { + char *title; + char *snapshot_path; +}; + +static Eina_List *_get_favorites(enum item_type type) +{ + Eina_List *list = NULL; + int *ids = NULL; + int r, ids_count, i, width, height, size; + char *title; + unsigned char *path; + struct web_data *wdata; + + if (type != ITEM_WEBS) + return NULL; + + r = bp_bookmark_adaptor_initialize(); + if (r != 0) { + _ERR("Bookmark adaptor initialize failed."); + return NULL; + } + + r = bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, + -1, 0, -1, -1, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); + if (r != 0) { + _ERR("Bookmark adaptor get ids failed."); + return NULL; + } + + for (i = 0; i < ids_count; i++) { + r = bp_bookmark_adaptor_get_title(ids[i], &title); + if (r != 0) { + _ERR("Bookmark adaptor get title failed."); + continue; + } + + r = bp_bookmark_adaptor_get_snapshot(ids[i], &width, &height, + &path, &size); + if (r != 0) { + _ERR("Bookmark adaptor get snapshot failed."); + continue; + } + + wdata = calloc(1, sizeof(*wdata)); + if (!wdata) { + _ERR("Calloc failed."); + continue; + } + + if (title) + wdata->title = strdup(title); + if (path) + wdata->snapshot_path = strdup((const char *)path); + + list = eina_list_append(list, wdata); + } + + free(ids); + bp_bookmark_adaptor_deinitialize(); + + return list; +} + +static char *_get_data(void *data, enum data_type type) +{ + struct web_data *wdata; + + if (!data) { + _ERR("Invalid argument."); + return NULL; + } + wdata = data; + + switch (type) { + case DATA_NAME: + return wdata->title; + + case DATA_THUMBNAIL: + return wdata->snapshot_path; + + default: + _ERR("Invalid data type."); + return NULL; + } +} + +static void _free_favorites(Eina_List *list) +{ + struct web_data *wdata; + + if (!list) + return; + + EINA_LIST_FREE(list, wdata) { + if (!wdata) + continue; + + free(wdata->title); + free(wdata->snapshot_path); + free(wdata); + + wdata = NULL; + } +} + +static bool _action(Elm_Object_Item *it) +{ + /* It will be implemented later. */ + + return true; +} + +static struct datamgr _dmgr = { + .get_data = _get_data, + .get_count = NULL, + .get_favorites = _get_favorites, + .free_favorites = _free_favorites, + .action = _action, +}; + +struct datamgr *get_webs_datamgr(void) +{ + return &_dmgr; +} diff --git a/src/grid/grid_webs.c b/src/grid/grid_webs.c index 7942d62..7bfc2f0 100644 --- a/src/grid/grid_webs.c +++ b/src/grid/grid_webs.c @@ -20,22 +20,102 @@ #include "define.h" #include "grid.h" +#include "datamgr.h" #define STR_WEBS "Web" #define STYLE_WEBS "style.webs" #define ITEM_WEBS_X (378 + 26) #define ITEM_WEBS_Y (294 + 26) +/* It is temporarily used. */ +#define COUNT_COLOR 5 + +struct color { + int r; + int g; + int b; + int a; +}; + +static struct color colors[] = +{ + {73, 68, 62, 255}, + {55, 74, 97, 255}, + {75, 102, 163, 255}, + {55, 143, 162, 255}, + {86, 98, 113, 255} +}; + static char *_text_get(void *data, Evas_Object *obj, const char *part) { - /* It will be implemented later. */ + struct datamgr *dmgr; + char *title = NULL; - return NULL; + if (!data) { + _ERR("Data is NULL"); + return NULL; + } + + dmgr = get_webs_datamgr(); + if (!dmgr || !dmgr->get_data) + return NULL; + + title = dmgr->get_data(data, DATA_NAME); + if (!title) + return NULL; + + return strdup(title); } static Evas_Object *_content_get(void *data, Evas_Object *obj, const char *part) { - /* It will be implemented later. */ + struct datamgr *dmgr; + Evas_Object *img, *text_bg; + char *snapshot; + int idx; + + if (!data || !obj) { + _ERR("Data is NULL."); + return NULL; + } + + dmgr = get_webs_datamgr(); + if (!dmgr || !dmgr->get_data) + return NULL; + + if (!strcmp(part, PART_THUMB_ICON)) { + snapshot = dmgr->get_data(data, DATA_THUMBNAIL); + if (!snapshot) { + /* FIXME: The default snapshot image should be added. */ + } + + img = elm_image_add(obj); + if (!img) { + _ERR("elm_image_add failed."); + return NULL; + } + + elm_image_file_set(img, snapshot, NULL); + elm_image_aspect_fixed_set(img, EINA_FALSE); + evas_object_show(img); + + return img; + } else if (!strcmp(part, PART_THUMB_TEXT_BG)) { + text_bg = evas_object_rectangle_add(obj); + if (!text_bg) { + _ERR("evas_object_rectangle_add failed."); + return NULL; + } + + idx = rand() % COUNT_COLOR; + + evas_object_color_set(text_bg, colors[idx].r, colors[idx].g, + colors[idx].b, colors[idx].a); + + evas_object_show(text_bg); + + return text_bg; + } return NULL; } @@ -50,17 +130,27 @@ static struct grid_class _gclass = { static Eina_List *_create_item_list(void) { - /* It will be implemented later. */ + struct datamgr *dmgr; - return NULL; + dmgr = get_webs_datamgr(); + if (!dmgr || !dmgr->get_favorites) + return NULL; + + return dmgr->get_favorites(ITEM_WEBS); } static void _destroy_item_list(Eina_List *list) { + struct datamgr *dmgr; + if (!list) return; - /* It will be implemented later. */ + dmgr = get_webs_datamgr(); + if (!dmgr || !dmgr->free_favorites) + return; + + dmgr->free_favorites(list); } static struct grid_data _gdata = { -- 2.7.4