Web grid: Added the web grid 67/44567/1
authorHyojung Jo <hj903.jo@samsung.com>
Thu, 23 Jul 2015 08:59:20 +0000 (17:59 +0900)
committerHyojung Jo <hj903.jo@samsung.com>
Thu, 23 Jul 2015 08:59:20 +0000 (17:59 +0900)
Change-Id: I8100f41cb58cff61c99bb247b847ae89cbb62f40
Signed-off-by: Hyojung Jo <hj903.jo@samsung.com>
CMakeLists.txt
include/datamgr.h
packaging/org.tizen.favorite.spec
res/widgets/gengrid_webs.edc
src/data/web.c [new file with mode: 0644]
src/grid/grid_webs.c

index 9b14fcd..a7ebb6d 100644 (file)
@@ -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
index 3183fd3..83f8ef0 100644 (file)
@@ -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__ */
index 4c17cb8..9ae47ce 100644 (file)
@@ -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
index cd75c80..7efaa5b 100644 (file)
 
 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 (file)
index 0000000..fd9b216
--- /dev/null
@@ -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;
+}
index 7942d62..7bfc2f0 100644 (file)
 
 #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 = {