/* * 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 #include #include #include "define.h" #include "grid.h" #include "datamgr.h" #define STR_APPS "Apps" #define STYLE_APPS "style.apps" #define ITEM_APPS_X (212 + 26) #define ITEM_APPS_Y (294 + 26) /* It is temporarily used. */ #define COUNT_COLOR 7 struct color { int r; int g; int b; int a; }; static struct color color_icon[] = { {73, 155, 173, 255}, {104, 99, 93, 255}, {92, 122, 190, 255}, {219, 162, 96, 255}, {97, 109, 124, 255}, {79, 187, 165, 255}, {169, 54, 54, 255} }; static struct color color_text[] = { {55, 143, 162, 255}, {93, 88, 82, 255}, {75, 102, 163, 255}, {194, 133, 62, 255}, {86, 98, 113, 255}, {47, 175, 149, 255}, {155, 46, 46, 255} }; static char *_text_get(void *data, Evas_Object *obj, const char *part) { struct datamgr *dmgr; char *name = NULL; if (!data) { _ERR("Data is NULL."); return NULL; } dmgr = get_apps_datamgr(); if (!dmgr || !dmgr->get_data) return NULL; name = dmgr->get_data(data, DATA_NAME); if (!name) return NULL; return strdup(name); } static int _get_color_index(const char *str) { int i, value = 0; if (!str) return 0; for (i = 0; i < strlen(str); i++) value += *str; return value % COUNT_COLOR; } static Evas_Object *_content_get(void *data, Evas_Object *obj, const char *part) { struct datamgr *dmgr; Evas_Object *img, *ly, *icon_bg, *text_bg = NULL; char *icon, *name, *img_path; int idx, w, h; if (!data || !obj) { _ERR("Data is NULL."); return NULL; } dmgr = get_apps_datamgr(); if (!dmgr || !dmgr->get_data) return NULL; if (!strcmp(part, PART_THUMB_ICON)) { icon = dmgr->get_data(data, DATA_THUMBNAIL); img = elm_image_add(obj); if (!img) { _ERR("elm_image_add failed."); return NULL; } if (!icon || !strcmp(icon, STR_NULL)) img_path = DEFAULT_APP_ICON_PNG; else img_path = icon; if (!elm_image_file_set(img, img_path, NULL)) elm_image_file_set(img, DEFAULT_APP_ICON_PNG, NULL); elm_image_object_size_get(img, &w, &h); if (w <= SIZE_APP_ICON_MAX && h <= SIZE_APP_ICON_MAX) elm_image_resizable_set(img, EINA_FALSE, EINA_FALSE); return img; } else if (!strcmp(part, PART_THUMB_BG)) { name = dmgr->get_data(data, DATA_NAME); ly = elm_layout_add(obj); if (!ly) { _ERR("elm_bg_add failed."); return NULL; } elm_layout_file_set(ly, EDJEFILE, GRP_APP_THUMB_BG); evas_object_show(ly); icon_bg = evas_object_rectangle_add(ly); if (!icon_bg) { _ERR("elm_rectangle_add failed."); evas_object_del(ly); return NULL; } text_bg = evas_object_rectangle_add(icon_bg); if (!text_bg) { _ERR("elm_rectangle_add failed."); evas_object_del(ly); return NULL; } /* FIXME: The color will be changed as GUI later. */ idx = _get_color_index(name); evas_object_color_set(icon_bg, color_icon[idx].r, color_icon[idx].g, color_icon[idx].b, color_icon[idx].a); evas_object_color_set(text_bg, color_text[idx].r, color_text[idx].g, color_text[idx].b, color_text[idx].a); elm_object_part_content_set(ly, PART_THUMB_ICON_BG, icon_bg); elm_object_part_content_set(ly, PART_THUMB_TEXT_BG, text_bg); return ly; } return NULL; } static struct grid_class _gclass = { .item_style = STYLE_APPS, .text_get = _text_get, .content_get = _content_get, .state_get = NULL, .del = NULL, }; static Eina_List *_create_item_list(void) { struct datamgr *dmgr; dmgr = get_apps_datamgr(); if (!dmgr || !dmgr->get_favorites) return NULL; return dmgr->get_favorites(ITEM_APPS); } static void _destroy_item_list(Eina_List *list) { struct datamgr *dmgr; if (!list) return; dmgr = get_apps_datamgr(); if (!dmgr || !dmgr->free_favorites) return; dmgr->free_favorites(list); } static void _item_selected(Elm_Object_Item *it) { struct datamgr *dmgr; if (!it) { _ERR("Invalid argument."); return; } dmgr = get_apps_datamgr(); if (!dmgr || !dmgr->action) return; if (!dmgr->action(it)) _ERR("The item action failed."); } static struct grid_data _gdata = { .id = STR_APPS, .item_size_x = ITEM_APPS_X, .item_size_y = ITEM_APPS_Y, .gclass = &_gclass, .create_item_list = _create_item_list, .destroy_item_list = _destroy_item_list, .item_selected = _item_selected, }; struct grid_data *get_apps_grid_data(void) { return &_gdata; }