summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHyojung Jo <hj903.jo@samsung.com>2015-07-23 17:59:20 +0900
committerHyojung Jo <hj903.jo@samsung.com>2015-07-23 17:59:20 +0900
commit0835c324a0be88d2c6ff31dd70c5ab02522b5530 (patch)
tree7956afa2ea3dc56133d37dbd273312170de094bc
parent045103a583818010b1dc6edbe79fef89bab929fd (diff)
downloadair_favorite-0835c324a0be88d2c6ff31dd70c5ab02522b5530.tar.gz
air_favorite-0835c324a0be88d2c6ff31dd70c5ab02522b5530.tar.bz2
air_favorite-0835c324a0be88d2c6ff31dd70c5ab02522b5530.zip
Web grid: Added the web grid
Change-Id: I8100f41cb58cff61c99bb247b847ae89cbb62f40 Signed-off-by: Hyojung Jo <hj903.jo@samsung.com>
-rw-r--r--CMakeLists.txt2
-rw-r--r--include/datamgr.h2
-rw-r--r--packaging/org.tizen.favorite.spec1
-rw-r--r--res/widgets/gengrid_webs.edc197
-rw-r--r--src/data/web.c146
-rw-r--r--src/grid/grid_webs.c102
6 files changed, 443 insertions, 7 deletions
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 <stdbool.h>
#include <Elementary.h>
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 <web/web_bookmark.h>
+#include <app_debug.h>
+
+#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 = {