[elm_diskcontroller.c] Removed.
authorDaniel Juyung Seo <juyung.seo@samsung.com>
Mon, 10 Jan 2011 05:29:24 +0000 (14:29 +0900)
committerDaniel Juyung Seo <juyung.seo@samsung.com>
Mon, 10 Jan 2011 05:29:24 +0000 (14:29 +0900)
src/lib/elm_diskcontroller.c [deleted file]

diff --git a/src/lib/elm_diskcontroller.c b/src/lib/elm_diskcontroller.c
deleted file mode 100644 (file)
index 672a6ca..0000000
+++ /dev/null
@@ -1,902 +0,0 @@
-/*\r
- * SLP\r
- * Copyright (c) 2009 Samsung Electronics, Inc.\r
- * All rights reserved.\r
- *\r
- * This software is a confidential and proprietary information\r
- * of Samsung Electronics, Inc. ("Confidential Information").  You\r
- * shall not disclose such Confidential Information and shall use\r
- * it only in accordance with the terms of the license agreement\r
- * you entered into with Samsung Electronics.\r
- */\r
-\r
-\r
-/**\r
- * @defgroup Diskcontroller Diskcontroller\r
- * @ingroup Elementary\r
- *\r
- * This is a Diskcontroller. It can contain label and icon objects.\r
- */\r
-\r
-#include <string.h>\r
-#include <math.h>\r
-\r
-#include <Elementary.h>\r
-#include "elm_priv.h"\r
-\r
-#ifndef EAPI\r
-#define EAPI __attribute__ ((visibility("default")))\r
-#endif\r
-\r
-#define MAX_ARGS                               512\r
-#define SCROLLED_DISTANCE              215\r
-#define STANDARD_W                             480\r
-#define SIDE_STRING_LENGTH             3\r
-#define SIDE_POINT                             50\r
-\r
-#define _EDJ(x) (Evas_Object *)elm_layout_edje_get(x)\r
-\r
-// internal data structure of diskcontroller object\r
-typedef struct _Widget_Data Widget_Data;\r
-\r
-struct _Widget_Data\r
-{\r
-       Evas_Object *object;\r
-       Evas_Object *parent;\r
-       Evas_Object *edje;\r
-       Evas_Object *scroller;\r
-       Evas_Object *main_box;\r
-       Evas_Object *left_blank;\r
-       Evas_Object *right_blank;\r
-\r
-       Elm_Diskcontroller_Item *selected_item;\r
-       Elm_Diskcontroller_Item *first;\r
-       Elm_Diskcontroller_Item *second;\r
-       Elm_Diskcontroller_Item *s_last;\r
-       Elm_Diskcontroller_Item *last;\r
-\r
-       Eina_List *items;\r
-       Eina_List *r_items;\r
-\r
-       Evas_Coord x, y, w, h;\r
-\r
-       Ecore_Idler *i;\r
-       int item_num;\r
-       int round;\r
-       int stop;\r
-       double time;\r
-\r
-\r
-       Ecore_Idler *idler;\r
-       Ecore_Idler *check_idler;\r
-       Eina_Bool flag;\r
-       Eina_Bool init;\r
-\r
-       Ecore_Event_Handler *move_event;\r
-       Ecore_Event_Handler *up_event;\r
-};\r
-\r
-struct _Elm_Diskcontroller_Item\r
-{\r
-       Evas_Object *obj;\r
-       Evas_Object *base;\r
-       Evas_Object *icon;\r
-       const char *label;\r
-       void (*func)(void *data, Evas_Object *obj, void *event_info);\r
-       const void *data;\r
-};\r
-\r
-static void _del_hook(Evas_Object *obj);\r
-static void _theme_hook(Evas_Object *obj);\r
-static void _sizing_eval(Evas_Object *obj);\r
-static void _sub_del(void *data, Evas_Object *obj, void *event_info);\r
-\r
-static void _diskcontroller_object_move(void *data, Evas *e, Evas_Object *obj, void *event_info);\r
-static void _diskcontroller_object_resize(void *data, Evas *e, Evas_Object *obj, void *event_info);\r
-static void _diskcontroller_object_show(void *data, Evas *e, Evas_Object *obj, void *event_info);\r
-static void _diskcontroller_object_hide(void *data, Evas *e, Evas_Object *obj, void *event_info);\r
-\r
-static void\r
-_del_hook(Evas_Object *obj)\r
-{\r
-       Widget_Data *wd = elm_widget_data_get(obj);\r
-       Elm_Diskcontroller_Item *item;\r
-\r
-       if (!wd) return;\r
-\r
-       if (wd->main_box) {\r
-               evas_object_del(wd->main_box);\r
-               wd->main_box = NULL;\r
-       }\r
-\r
-       if (wd->scroller) {\r
-               evas_object_del(wd->scroller);\r
-               wd->scroller = NULL;\r
-       }\r
-\r
-       if (wd->edje) {\r
-               evas_object_del(wd->edje);\r
-               wd->edje = NULL;\r
-       }\r
-\r
-       EINA_LIST_FREE(wd->items, item){\r
-               eina_stringshare_del(item->label);\r
-               if(item->icon) evas_object_del(item->icon);\r
-               if(item->base) evas_object_del(item->base);\r
-               free(item);\r
-               item = NULL;\r
-       }\r
-\r
-       free(wd);\r
-       wd = NULL;\r
-}\r
-\r
-static void\r
-_theme_hook(Evas_Object *obj)\r
-{\r
-       Eina_List *l;\r
-       Elm_Diskcontroller_Item *it;\r
-       Widget_Data *wd = elm_widget_data_get(obj);\r
-       if (!wd) return;\r
-\r
-       _elm_theme_object_set(obj, wd->edje, "diskcontroller", "bg", elm_widget_style_get(obj));\r
-\r
-       if(wd->round){\r
-               EINA_LIST_FOREACH(wd->r_items, l, it) {\r
-                       elm_layout_theme_set(it->base, "diskcontroller", "item", "default");\r
-               }\r
-       }else{\r
-               EINA_LIST_FOREACH(wd->items, l, it) {\r
-                       elm_layout_theme_set(it->base, "diskcontroller", "item", "default");\r
-               }\r
-       }\r
-\r
-}\r
-\r
-static void\r
-_sub_del(void *data, Evas_Object *obj, void *event_info)\r
-{\r
-       Widget_Data *wd = elm_widget_data_get(obj);\r
-       //Evas_Object *sub = event_info;\r
-       if (!wd) return;\r
-       /*\r
-          if (sub == wd->icon)\r
-          {\r
-          edje_object_signal_emit(wd->btn, "elm,state,icon,hidden", "elm");\r
-          evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,\r
-          _changed_size_hints, obj);\r
-          wd->icon = NULL;\r
-          edje_object_message_signal_process(wd->btn);\r
-          _sizing_eval(obj);\r
-          }\r
-          */\r
-}\r
-\r
-static void\r
-_sizing_eval(Evas_Object *obj)\r
-{\r
-       Widget_Data *wd = elm_widget_data_get(obj);\r
-\r
-       if (!wd) return;\r
-\r
-       DBG("[%s]\n", __func__);\r
-\r
-       _diskcontroller_object_move(obj, NULL, obj, NULL);\r
-       _diskcontroller_object_resize(obj, NULL, obj, NULL);\r
-}\r
-\r
-static void select_item(Elm_Diskcontroller_Item *it)\r
-{\r
-       if(it == NULL) return;\r
-\r
-       Widget_Data *wd = elm_widget_data_get(it->obj);\r
-       wd->selected_item = it;\r
-\r
-       if(it->func) it->func((void *)(it->data), it->obj, it);\r
-       evas_object_smart_callback_call(it->obj, "stop", it);\r
-}\r
-\r
-static void string_signal_emit(Elm_Diskcontroller_Item *it)\r
-{\r
-       char buf[MAX_ARGS];\r
-\r
-       if(strlen(it->label) > 14){\r
-               if(strlen(it->label) < 18){\r
-                       edje_object_signal_emit(_EDJ(it->base), "elm,state,center_small", "elm");\r
-               }else{\r
-                       strncpy(buf, it->label, 40);\r
-                       buf[40] = '\0';\r
-                       edje_object_part_text_set(_EDJ(it->base), "elm.text", buf);\r
-                       edje_object_signal_emit(_EDJ(it->base), "elm,state,center_small", "elm");\r
-               }\r
-       }else{\r
-               edje_object_signal_emit(_EDJ(it->base), "elm,state,center", "elm");\r
-       }\r
-}\r
-\r
-static int check_letter(const char *str, int length)\r
-{\r
-       int code = str[length];\r
-\r
-       if(code == '\0') return length; // null string\r
-       else if(isalnum(code)) return length; // alphabet or number\r
-       else if ((33<=code && code<47) || (58<=code && code<64) || (91<=code && code<96) || (123<=code && code<126)) return length; // special letter\r
-\r
-       return length-1;\r
-}\r
-\r
-static Eina_Bool check_string(void *data)\r
-{\r
-       Eina_List *l;\r
-       Elm_Diskcontroller_Item *it;\r
-       Evas_Coord x, y, w, h;\r
-       int mid, step, length, diff, side;\r
-       char buf[MAX_ARGS];\r
-       Widget_Data *wd = (Widget_Data *)data;\r
-       Eina_List *list;\r
-\r
-       if(wd->w <= 0) return EXIT_FAILURE;\r
-       if(!wd->init) return EXIT_FAILURE;\r
-\r
-       if(!wd->round) list = wd->items;\r
-       else list = wd->r_items;\r
-       \r
-       EINA_LIST_FOREACH(list, l, it) {\r
-               evas_object_geometry_get(it->base, &x, &y, &w, &h);\r
-               mid = (int)(x + w/2);\r
-               if(mid <= -SCROLLED_DISTANCE || mid >= wd->w+SCROLLED_DISTANCE) continue;\r
-\r
-               side = MIN(SIDE_STRING_LENGTH, strlen(it->label));\r
-\r
-               step = strlen(it->label)-side+1;\r
-               if(mid <= wd->x + wd->w/2){\r
-                       diff = (wd->x + wd->w/2) - mid;\r
-               }else{\r
-                       diff = mid - (wd->x + wd->w/2);\r
-               }\r
-\r
-               length = strlen(it->label) - (int)(diff/(int)(wd->w*SCROLLED_DISTANCE/STANDARD_W/step));\r
-               if(mid - wd->x <= wd->w*SIDE_POINT/STANDARD_W || mid - wd->x >= wd->w-wd->w*SIDE_POINT/STANDARD_W){\r
-                       edje_object_signal_emit(_EDJ(it->base), "elm,state,side", "elm");\r
-               }else{\r
-                       string_signal_emit(it);\r
-               }\r
-               length = MAX(length, side);\r
-               length = check_letter(it->label, length);\r
-               strncpy(buf, it->label, length);\r
-               buf[length] = '\0';\r
-               edje_object_part_text_set(_EDJ(it->base), "elm.text", buf);\r
-       }\r
-\r
-       if(wd->check_idler) ecore_idler_del(wd->check_idler);\r
-       wd->check_idler = NULL;\r
-\r
-       return EXIT_SUCCESS;\r
-}\r
-\r
-static void scroller_move_cb(void *data, Evas_Object *obj, void *event_info)\r
-{\r
-       Evas_Coord x, y, w, h;\r
-       Widget_Data *wd = (Widget_Data *)data;\r
-       \r
-       check_string(wd);\r
-\r
-       if(wd->round) {\r
-               elm_scroller_region_get(wd->scroller, &x, &y, &w, &h);\r
-\r
-               if(x > 100000 || x < -100000){\r
-                       elm_scroller_region_show(wd->scroller, 0, y, w, h);\r
-                       return;\r
-               }\r
-               if(x > wd->w*SCROLLED_DISTANCE/STANDARD_W*(wd->item_num+1)){\r
-                       elm_scroller_region_show(wd->scroller, x-wd->w*SCROLLED_DISTANCE/STANDARD_W*wd->item_num, y, w, h);\r
-               }else if(x < wd->w*SCROLLED_DISTANCE/STANDARD_W*(1)){\r
-                       elm_scroller_region_show(wd->scroller, x+wd->w*SCROLLED_DISTANCE/STANDARD_W*wd->item_num, y, w, h);\r
-               }\r
-       }\r
-\r
-       wd->stop = 0;\r
-}\r
-\r
-static void scroller_stop_cb(void *data, Evas_Object *obj, void *event_info)\r
-{\r
-       Widget_Data *wd = (Widget_Data *)data;\r
-       Eina_List *l;\r
-       Elm_Diskcontroller_Item *it;\r
-       Evas_Coord x,y,w,h;\r
-       Eina_List *list;\r
-\r
-       if(!wd->round) list = wd->items;\r
-       else list = wd->r_items;\r
-\r
-       if(wd->idler != NULL) return;\r
-\r
-       EINA_LIST_FOREACH(list, l, it) {\r
-               evas_object_geometry_get(it->base, &x, &y, &w, &h);\r
-               if(abs((int)(wd->w/2 - (int)(x + w/2))) < 10) break;\r
-       }\r
-\r
-       if(it == NULL) return;\r
-\r
-       select_item(it);\r
-\r
-       wd->stop = 1;\r
-}\r
-\r
-static Eina_Bool move_scroller(void *data)\r
-{\r
-       Widget_Data *wd = (Widget_Data *)data;\r
-       Eina_List *l;\r
-       Elm_Diskcontroller_Item *dit;\r
-       Evas_Coord x, y, w, h;  \r
-       int i;\r
-\r
-       if(wd->round) i = 1;\r
-       else i = 0;\r
-\r
-       EINA_LIST_FOREACH(wd->items, l, dit){\r
-               if(wd->selected_item == dit) break;\r
-               i++;\r
-       }\r
-\r
-       if(dit == NULL) {\r
-               wd->selected_item = (Elm_Diskcontroller_Item *)eina_list_nth(wd->items, 0);\r
-               return EXIT_FAILURE;\r
-       }\r
-\r
-       elm_scroller_region_get(wd->scroller, &x, &y, &w, &h);\r
-       elm_scroller_region_show(wd->scroller, wd->w*SCROLLED_DISTANCE/STANDARD_W*i+1, y, w, h);\r
-       elm_scroller_region_get(wd->scroller, &x, &y, &w, &h);\r
-\r
-       select_item(dit);\r
-\r
-       if(wd->idler){\r
-               ecore_idler_del(wd->idler);\r
-               wd->idler = NULL;\r
-       }\r
-\r
-       wd->init = EINA_TRUE;\r
-\r
-       check_string(wd);\r
-\r
-       return EXIT_SUCCESS;\r
-}\r
-\r
-static Elm_Diskcontroller_Item *item_new(Evas_Object *obj, Evas_Object *icon, const char *label, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data)\r
-{\r
-       Elm_Diskcontroller_Item *it;\r
-       Widget_Data *wd;\r
-\r
-       if(obj == NULL) return NULL;\r
-       wd = elm_widget_data_get(obj);\r
-       if(wd == NULL) return NULL;\r
-\r
-       it = ELM_NEW(Elm_Diskcontroller_Item);\r
-    if(it == NULL) return NULL;\r
-\r
-    it->obj = obj;\r
-    it->label = eina_stringshare_add(label);\r
-    it->icon = icon;\r
-    it->func = func;\r
-    it->data = data;\r
-       it->base = elm_layout_add(wd->edje);\r
-       if(it->base == NULL) return NULL;\r
-       elm_layout_theme_set(it->base, "diskcontroller", "item", "default");\r
-       evas_object_size_hint_weight_set(it->base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);\r
-       evas_object_size_hint_align_set(it->base, EVAS_HINT_FILL, EVAS_HINT_FILL);\r
-       evas_object_show(it->base);\r
-       elm_widget_sub_object_add(obj, it->base);\r
-\r
-       if (it->label){\r
-               //string_signal_emit(it);\r
-               edje_object_part_text_set(_EDJ(it->base), "elm.text", it->label);\r
-       }\r
-\r
-       if (it->icon){\r
-//             int ms = 0;\r
-\r
-//             ms = ((double)wd->icon_size * _elm_config->scale);\r
-               evas_object_size_hint_min_set(it->icon, 24, 24);\r
-               evas_object_size_hint_max_set(it->icon, 40, 40);\r
-               edje_object_part_swallow(_EDJ(it->base), "elm.swallow.icon", it->icon);\r
-               evas_object_show(it->icon);\r
-               elm_widget_sub_object_add(obj, it->icon);\r
-       }\r
-\r
-       if (it->label && it->icon){\r
-               edje_object_signal_emit(_EDJ(it->base), "elm,state,icon_text", "elm");\r
-       }\r
-\r
-       return it;\r
-}\r
-\r
-static void dummy_item_del(void *data)\r
-{\r
-       Widget_Data *wd = (Widget_Data *)data;\r
-\r
-       if(wd->last){\r
-               elm_box_unpack(wd->main_box, wd->last->base);\r
-               wd->r_items = eina_list_remove(wd->r_items, wd->last);\r
-               evas_object_del(wd->last->base);\r
-               free(wd->last);\r
-               wd->last = NULL;\r
-       }\r
-       if(wd->s_last){\r
-               elm_box_unpack(wd->main_box, wd->s_last->base);\r
-               wd->r_items = eina_list_remove(wd->r_items, wd->s_last);\r
-               evas_object_del(wd->s_last->base);\r
-               free(wd->s_last);\r
-               wd->s_last = NULL;\r
-       }\r
-       if(wd->second){\r
-               elm_box_unpack(wd->main_box, wd->second->base);\r
-               wd->r_items = eina_list_remove(wd->r_items, wd->second);\r
-               evas_object_del(wd->second->base);\r
-               free(wd->second);\r
-               wd->second = NULL;\r
-       }\r
-       if(wd->first){\r
-               elm_box_unpack(wd->main_box, wd->first->base);\r
-               wd->r_items = eina_list_remove(wd->r_items, wd->first);\r
-               evas_object_del(wd->first->base);\r
-               free(wd->first);\r
-               wd->first = NULL;\r
-       }\r
-}\r
-\r
-static void dummy_item_add(void *data)\r
-{\r
-       Widget_Data *wd = (Widget_Data *)data;\r
-       Elm_Diskcontroller_Item *dit;\r
-       Elm_Diskcontroller_Item *it;\r
-\r
-       dit = it = eina_list_nth(wd->items, 0);\r
-       if(it != NULL){\r
-               wd->first = item_new(it->obj, it->icon, it->label, it->func, it->data);\r
-               wd->r_items = eina_list_append(wd->r_items, wd->first);\r
-       }\r
-       it = eina_list_nth(wd->items, 1);\r
-       if(it != NULL){\r
-               wd->second = item_new(it->obj, it->icon, it->label, it->func, it->data);\r
-               wd->r_items = eina_list_append(wd->r_items, wd->second);\r
-       }else{\r
-               wd->second = item_new(dit->obj, dit->icon, dit->label, dit->func, dit->data);\r
-               wd->r_items = eina_list_append(wd->r_items, wd->second);\r
-       }\r
-       it = eina_list_nth(wd->items, wd->item_num-1);\r
-       if(it != NULL && wd->last == NULL){\r
-               wd->last = item_new(it->obj, it->icon, it->label, it->func, it->data);\r
-               wd->r_items = eina_list_prepend(wd->r_items, wd->last);\r
-       }else{\r
-               wd->last = item_new(dit->obj, dit->icon, dit->label, dit->func, dit->data);\r
-               wd->r_items = eina_list_prepend(wd->r_items, wd->last);\r
-       }\r
-       it = eina_list_nth(wd->items, wd->item_num-2);\r
-       if(it != NULL && wd->s_last == NULL){\r
-               wd->s_last = item_new(it->obj, it->icon, it->label, it->func, it->data);\r
-               wd->r_items = eina_list_prepend(wd->r_items, wd->s_last);\r
-       }else{\r
-               wd->s_last = item_new(dit->obj, dit->icon, dit->label, dit->func, dit->data);\r
-               wd->r_items = eina_list_prepend(wd->r_items, wd->s_last);\r
-       }\r
-}\r
-\r
-/**\r
- * Add a new diskcontroller object\r
- *\r
- * @param parent The parent object\r
- * @return The new object or NULL if it cannot be created\r
- *\r
- * @ingroup Diskcontroller\r
- */\r
-EAPI Evas_Object *elm_diskcontroller_add(Evas_Object *parent)\r
-{\r
-       Evas_Object *obj = NULL;\r
-       Widget_Data *wd = NULL;\r
-       Evas_Coord x, y, w, h;\r
-       Evas *e;\r
-\r
-       wd = ELM_NEW(Widget_Data);\r
-       e = evas_object_evas_get(parent);\r
-       if (e == NULL) return NULL;\r
-       obj = elm_widget_add(e);\r
-       if(obj == NULL) return NULL;\r
-       elm_widget_type_set(obj, "diskcontroller");\r
-       elm_widget_sub_object_add(parent, obj);\r
-       elm_widget_data_set(obj, wd);\r
-       elm_widget_del_hook_set(obj, _del_hook);\r
-       elm_widget_theme_hook_set(obj, _theme_hook);\r
-\r
-       // initialization\r
-       wd->parent = parent;\r
-       evas_object_geometry_get(parent, &x, &y, &w, &h);\r
-       wd->object = obj;\r
-       wd->x = x;\r
-       wd->y = y;\r
-       wd->w = w;\r
-       wd->h = h;\r
-       wd->item_num = 0;\r
-       wd->round = 0;\r
-       wd->stop = 0;\r
-       wd->init = EINA_FALSE;\r
-\r
-       /* load background edj */\r
-       wd->edje = edje_object_add(e);\r
-       _elm_theme_object_set(obj, wd->edje, "diskcontroller", "bg", "default");\r
-       if(wd->edje == NULL) {\r
-               printf("Cannot load bg edj\n");\r
-               return NULL;\r
-       }\r
-\r
-       evas_object_show(wd->edje);\r
-\r
-       evas_object_event_callback_add(wd->edje, EVAS_CALLBACK_RESIZE, _diskcontroller_object_resize, obj);\r
-       evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, _diskcontroller_object_move, obj);\r
-       evas_object_event_callback_add(obj, EVAS_CALLBACK_SHOW, _diskcontroller_object_show, obj);\r
-       evas_object_event_callback_add(obj, EVAS_CALLBACK_HIDE, _diskcontroller_object_hide, obj);\r
-\r
-       wd->scroller = elm_scroller_add(wd->edje);\r
-       elm_scroller_policy_set(wd->scroller, ELM_SMART_SCROLLER_POLICY_OFF, ELM_SMART_SCROLLER_POLICY_OFF);\r
-       elm_scroller_bounce_set(wd->scroller, 1, 0);\r
-       elm_scroller_page_size_set(wd->scroller, (int)(wd->w*SCROLLED_DISTANCE/STANDARD_W), 0);\r
-       edje_object_part_swallow(wd->edje, "elm.scroller", wd->scroller);\r
-\r
-       evas_object_smart_callback_add(wd->scroller, "scroll", scroller_move_cb, wd);\r
-       evas_object_smart_callback_add(wd->scroller, "scroll,anim,stop", scroller_stop_cb, wd);\r
-\r
-       wd->main_box = elm_box_add(wd->edje);\r
-       elm_box_horizontal_set(wd->main_box, 1);\r
-       elm_box_homogenous_set(wd->main_box, 2);\r
-       evas_object_show(wd->main_box);\r
-       evas_object_size_hint_weight_set(wd->main_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);\r
-       evas_object_size_hint_align_set(wd->main_box, EVAS_HINT_FILL, EVAS_HINT_FILL);\r
-\r
-       wd->left_blank = elm_layout_add(wd->edje);\r
-       if(wd->left_blank == NULL) return NULL;\r
-       elm_layout_theme_set(wd->left_blank, "diskcontroller", "item", "default");\r
-       evas_object_size_hint_weight_set(wd->left_blank, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);\r
-       evas_object_size_hint_align_set(wd->left_blank, EVAS_HINT_FILL, EVAS_HINT_FILL);\r
-       evas_object_show(wd->left_blank);\r
-       elm_box_pack_end(wd->main_box, wd->left_blank);\r
-       elm_widget_sub_object_add(obj, wd->left_blank);\r
-\r
-       wd->right_blank = elm_layout_add(wd->edje);\r
-       if(wd->right_blank == NULL) return NULL;\r
-       elm_layout_theme_set(wd->right_blank, "diskcontroller", "item", "default");\r
-       evas_object_size_hint_weight_set(wd->right_blank, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);\r
-       evas_object_size_hint_align_set(wd->right_blank, EVAS_HINT_FILL, EVAS_HINT_FILL);\r
-       evas_object_show(wd->right_blank);\r
-       elm_box_pack_end(wd->main_box, wd->right_blank);\r
-       elm_widget_sub_object_add(obj, wd->right_blank);\r
-\r
-       elm_scroller_content_set(wd->scroller, wd->main_box);\r
-\r
-       //FIXME\r
-       //      evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj);\r
-\r
-\r
-       elm_widget_resize_object_set(obj, wd->edje);\r
-       evas_object_smart_member_add(wd->scroller, obj);\r
-       evas_object_smart_member_add(wd->main_box, obj);\r
-\r
-       _sizing_eval(obj);\r
-       return obj;\r
-}\r
-\r
-/**\r
- * Set round mode\r
- *\r
- * @param it The item of diskcontroller\r
- * @param if or not set round mode\r
- *\r
- * @ingroup Diskcontroller\r
- */\r
-EAPI void elm_diskcontroller_round_set(Evas_Object *obj, Eina_Bool round)\r
-{\r
-       Widget_Data *wd;\r
-\r
-       if(obj == NULL) return;\r
-       wd = elm_widget_data_get(obj);\r
-       if(wd == NULL) return;\r
-\r
-       if(wd->round == round) return;\r
-       wd->round = round;\r
-\r
-\r
-       if(wd->r_items) eina_list_free(wd->r_items);\r
-       wd->r_items = eina_list_clone(wd->items);\r
-\r
-       if(wd->round) {\r
-               elm_box_unpack(wd->main_box, wd->left_blank);\r
-               evas_object_hide(wd->left_blank);\r
-               elm_box_unpack(wd->main_box, wd->right_blank);\r
-               evas_object_hide(wd->right_blank);\r
-\r
-               if(wd->items == NULL) return;\r
-\r
-               dummy_item_add(wd);\r
-               dummy_item_del(wd);\r
-\r
-               //composite another list\r
-               if(wd->first->base) elm_box_pack_end(wd->main_box, wd->first->base);\r
-               if(wd->second->base) elm_box_pack_end(wd->main_box, wd->second->base);\r
-               if(wd->last->base) elm_box_pack_start(wd->main_box, wd->last->base);\r
-               if(wd->s_last->base) elm_box_pack_start(wd->main_box, wd->s_last->base);\r
-\r
-       } else {\r
-               elm_box_unpack(wd->main_box, wd->first->base);\r
-               evas_object_hide(wd->first->base);\r
-               elm_box_unpack(wd->main_box, wd->second->base);\r
-               evas_object_hide(wd->second->base);\r
-               elm_box_unpack(wd->main_box, wd->last->base);\r
-               evas_object_hide(wd->last->base);\r
-               elm_box_unpack(wd->main_box, wd->s_last->base);\r
-               evas_object_hide(wd->s_last->base);\r
-\r
-\r
-               elm_box_pack_start(wd->main_box, wd->left_blank);\r
-               elm_box_pack_end(wd->main_box, wd->right_blank);\r
-       }\r
-\r
-       _sizing_eval(obj);\r
-}\r
-\r
-\r
-/**\r
- * @fn                 int elm_diskcontroller_item_add(Evas_Object *obj, Evas_Object *icon, const char *label, void (*func) (void *data, Evas_Object *obj, void event_info), const void *data)\r
- * @ingroup            TW3_diskcontroller_group\r
- * @brief              Add text item\r
- * @param[in]  obj The diskcontroller object\r
- * @param[in]  icon The icon of item\r
- * @param[in]  label The label of item\r
- * @param[in]  func Callback function of item\r
- * @param[in]  data The data of callback function\r
- * @return             0 (SUCCESS) or -1 (FAIL)\r
- */\r
-EAPI Elm_Diskcontroller_Item *elm_diskcontroller_item_add(Evas_Object *obj, Evas_Object *icon, const char *label, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data)\r
-{\r
-       Elm_Diskcontroller_Item *it;\r
-       Widget_Data *wd;\r
-\r
-       if(obj == NULL) return NULL;\r
-       wd = elm_widget_data_get(obj);\r
-       if(wd == NULL) return NULL;\r
-\r
-       it = item_new(obj, icon, label, func, data);\r
-\r
-       wd->items = eina_list_append(wd->items, it);\r
-\r
-       wd->item_num++;\r
-\r
-       if(wd->round){\r
-               dummy_item_del(wd);\r
-               wd->r_items = eina_list_append(wd->r_items, it);\r
-               dummy_item_add(wd);\r
-\r
-               if(wd->last) elm_box_pack_start(wd->main_box, wd->last->base);\r
-               if(wd->s_last) elm_box_pack_start(wd->main_box, wd->s_last->base);\r
-               elm_box_pack_end(wd->main_box, it->base);\r
-               if(wd->first) elm_box_pack_end(wd->main_box, wd->first->base);\r
-               if(wd->second) elm_box_pack_end(wd->main_box, wd->second->base);\r
-       }else{\r
-               elm_box_unpack(wd->main_box, wd->right_blank);\r
-               elm_box_pack_end(wd->main_box, it->base);\r
-               elm_box_pack_end(wd->main_box, wd->right_blank);\r
-       }\r
-\r
-       wd->selected_item = it;\r
-       if(wd->idler == NULL) wd->idler = ecore_idler_add(move_scroller, wd);\r
-\r
-       _sizing_eval(obj);\r
-\r
-       return it;\r
-}\r
-\r
-/**\r
- * Delete the item\r
- *\r
- * @param it The item of diskcontroller\r
- *\r
- * @ingroup Diskcontroller\r
- */\r
-EAPI void elm_diskcontroller_item_del(Elm_Diskcontroller_Item *it)\r
-{\r
-       Widget_Data *wd;\r
-       Elm_Diskcontroller_Item *dit;\r
-       Evas_Object *obj;\r
-       \r
-       if(it == NULL) return;\r
-       if(it->obj == NULL) return;\r
-       obj = it->obj;\r
-       wd = elm_widget_data_get(it->obj);\r
-       if(wd == NULL) return;\r
-\r
-       elm_box_unpack(wd->main_box, it->base);\r
-\r
-       if(wd->round){\r
-               wd->r_items = eina_list_remove(wd->r_items, it);\r
-       }\r
-       wd->items = eina_list_remove(wd->items, it);\r
-\r
-       if(wd->selected_item == it){\r
-               dit = (Elm_Diskcontroller_Item *)eina_list_nth(wd->items, 0);\r
-               if(dit != it){\r
-                       wd->selected_item = dit;\r
-               }else{\r
-                       wd->selected_item = (Elm_Diskcontroller_Item *)eina_list_nth(wd->items, 1);\r
-               }\r
-       }\r
-\r
-       if(it->base) evas_object_del(it->base);\r
-       if(it->icon) evas_object_del(it->icon);\r
-       if(it) free(it);\r
-       it = NULL;\r
-\r
-       wd->item_num -= 1;\r
-\r
-       if(wd->round){\r
-               if(wd->item_num == 0){\r
-                       evas_object_hide(wd->first->base);\r
-                       evas_object_hide(wd->second->base);\r
-                       evas_object_hide(wd->last->base);\r
-                       evas_object_hide(wd->s_last->base);\r
-               }else{\r
-                       dit = eina_list_nth(wd->items, 0);\r
-                       if(dit){\r
-                               wd->first->label = eina_stringshare_add(dit->label);\r
-                               edje_object_part_text_set(_EDJ(wd->first->base), "elm.text", wd->first->label);\r
-                       }\r
-                       dit = eina_list_nth(wd->items, 1);\r
-                       if(dit){\r
-                               wd->second->label = eina_stringshare_add(dit->label);\r
-                               edje_object_part_text_set(_EDJ(wd->second->base), "elm.text", wd->second->label);\r
-                       }\r
-                       dit = eina_list_nth(wd->items, eina_list_count(wd->items)-1);\r
-                       if(dit){\r
-                               wd->last->label = eina_stringshare_add(dit->label);\r
-                               edje_object_part_text_set(_EDJ(wd->last->base), "elm.text", wd->last->label);\r
-                       }\r
-                       dit = eina_list_nth(wd->items, eina_list_count(wd->items)-2);\r
-                       if(dit){\r
-                               wd->s_last->label = eina_stringshare_add(dit->label);\r
-                               edje_object_part_text_set(_EDJ(wd->s_last->base), "elm.text", wd->s_last->label);\r
-                       }\r
-               }\r
-       }\r
-\r
-       wd->check_idler = ecore_idler_add(check_string, wd);\r
-\r
-       _sizing_eval(obj);\r
-}\r
-\r
-/**\r
- * Get the label of item\r
- *\r
- * @param it The item of diskcontroller\r
- * @return The label of item\r
- *\r
- * @ingroup Diskcontroller\r
- */\r
-EAPI const char *elm_diskcontroller_item_label_get(Elm_Diskcontroller_Item *it)\r
-{\r
-       return it->label;\r
-}\r
-\r
-\r
-/**\r
- * Set the label of item\r
- *\r
- * @param it The item of diskcontroller\r
- * @return The label of item\r
- *\r
- * @ingroup Diskcontroller\r
- */\r
-EAPI void elm_diskcontroller_item_label_set(Elm_Diskcontroller_Item *it, const char *label)\r
-{\r
-       it->label = eina_stringshare_add(label);\r
-       edje_object_part_text_set(_EDJ(it->base), "elm.text", it->label);\r
-}\r
-\r
-/**\r
- * Set the item visible\r
- *\r
- * @param it The item of diskcontroller\r
- *\r
- * @ingroup Diskcontroller\r
- */\r
-EAPI void elm_diskcontroller_item_focus_set(Elm_Diskcontroller_Item *it)\r
-{\r
-       Widget_Data *wd;\r
-\r
-       if(it->obj == NULL) return;\r
-       wd = elm_widget_data_get(it->obj);\r
-       if(wd == NULL) return;\r
-\r
-       wd->selected_item = it;\r
-\r
-       if(wd->idler == NULL) ecore_idler_add(move_scroller, wd);\r
-}\r
-\r
-\r
-///////////////////////////////////////////////////////////////////\r
-//\r
-//  Smart Object basic function\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-\r
-static void _diskcontroller_object_move(void *data, Evas *e, Evas_Object *obj, void *event_info)\r
-{\r
-       DBG("%s", __func__);\r
-\r
-       Widget_Data *wd;\r
-       Evas_Coord x, y;\r
-\r
-       if(!data) return;\r
-       wd = elm_widget_data_get((Evas_Object *)data);\r
-       if(!wd) return;\r
-\r
-       evas_object_geometry_get(wd->edje, &x, &y, NULL, NULL);\r
-\r
-       wd->x = x;\r
-       wd->y = y;\r
-\r
-       evas_object_move(wd->edje, x, y);\r
-}\r
-\r
-\r
-static void _diskcontroller_object_resize(void *data, Evas *e, Evas_Object *obj, void *event_info)\r
-{\r
-       Widget_Data *wd;\r
-       Evas_Coord w, h;\r
-\r
-       if(!data) return;\r
-       wd = elm_widget_data_get((Evas_Object *)data);\r
-       if(!wd) return;\r
-\r
-       evas_object_geometry_get(wd->edje, NULL, NULL, &w, &h);\r
-\r
-       wd->w = w;\r
-       wd->h = h;\r
-\r
-       evas_object_resize(wd->edje, w, h);\r
-       if(wd->round){\r
-               evas_object_size_hint_min_set(wd->main_box, w*SCROLLED_DISTANCE*(wd->item_num+4)/STANDARD_W, h-1);\r
-       }else{\r
-               evas_object_size_hint_min_set(wd->main_box, w*SCROLLED_DISTANCE*(wd->item_num+2)/STANDARD_W, h-1);\r
-       }\r
-       elm_scroller_page_size_set(wd->scroller, (int)(wd->w*SCROLLED_DISTANCE/STANDARD_W), 0);\r
-\r
-       if(wd->idler == NULL) {\r
-               wd->idler = ecore_idler_add(move_scroller, wd);\r
-       }\r
-}\r
-\r
-\r
-static void _diskcontroller_object_show(void *data, Evas *e, Evas_Object *obj, void *event_info)\r
-{\r
-       DBG("%s", __func__);\r
-\r
-       Widget_Data *wd;\r
-\r
-       if(!data) return;\r
-       wd = elm_widget_data_get((Evas_Object *)data);\r
-       if(!wd) return;\r
-\r
-       evas_object_show(wd->edje);\r
-}\r
-\r
-\r
-\r
-static void _diskcontroller_object_hide(void *data, Evas *e, Evas_Object *obj, void *event_info)\r
-{\r
-    DBG("%s", __func__);\r
-\r
-       Widget_Data *wd;\r
-\r
-       if(!data) return;\r
-       wd = elm_widget_data_get((Evas_Object *)data);\r
-       if(!wd) return;\r
-\r
-       evas_object_hide(wd->edje);\r
-}\r
-\r