3 * Copyright 2012 Samsung Electronics Co., Ltd
5 * Licensed under the Flora License, Version 1.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://floralicense.org/license/
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
24 unsigned int max_item_count;
26 cal_grid_item_changed_callback callback_func;
31 Elm_Object_Item *item;
37 static Elm_Gengrid_Item_Class *gengrid_item_class = NULL;
39 static void __cal_grid_item_remove_button_callback(void *user_data, Evas_Object *obj, void *event_info)
46 cal_grid_item_s *item = (cal_grid_item_s *)user_data;
48 cal_grid_s *data = item->data;
51 cal_grid_item_changed_callback callback_func = data->callback_func;
52 void *callback_data = data->callback_data;
54 elm_object_item_del(item->item);
57 callback_func(callback_data);
60 static Evas_Object * __cal_grid_content_get_callback(void *data, Evas_Object *obj, const char *part)
62 cal_grid_item_s *item = (cal_grid_item_s *)data;
64 if (!CAL_STRCMP(part, "elm.swallow.icon")) {
66 Evas_Object *icon = elm_icon_add(obj);
68 elm_icon_file_set(icon, item->path, NULL);
69 elm_icon_aspect_fixed_set(icon, EINA_FALSE);
70 evas_object_show(icon);
74 } else if (!CAL_STRCMP(part, "elm.swallow.end")) {
76 Elm_Object_Select_Mode mode = elm_gengrid_select_mode_get(obj);
78 if (mode == ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY)
81 Evas_Object *remove_button = elm_button_add(obj);
83 elm_object_style_set(remove_button, "minus");
85 evas_object_propagate_events_set(remove_button, EINA_FALSE);
86 evas_object_smart_callback_add(remove_button, "clicked", __cal_grid_item_remove_button_callback, data);
87 evas_object_show(remove_button);
95 static void __cal_grid_item_delete_callback(void *data, Evas_Object *obj)
99 cal_grid_item_s *item = data;
106 static void __cal_grid_delete_callback(void *user_data, Evas *e, Evas_Object *ly, void *ei)
108 c_ret_if(!user_data);
110 cal_grid_s *data = user_data;
115 Evas_Object * cal_grid_create(Evas_Object *parent, cal_grid_item_changed_callback callback_func, void *callback_data)
119 c_retv_if(!parent, NULL);
121 Evas_Object *gengrid = elm_gengrid_add(parent);
122 c_retv_if(!gengrid, NULL);
124 cal_grid_s *data = calloc(1, sizeof(cal_grid_s));
126 evas_object_data_set(gengrid, "data", data);
128 data->gengrid = gengrid;
129 data->callback_func = callback_func;
130 data->callback_data = callback_data;
132 evas_object_size_hint_weight_set(gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
133 evas_object_size_hint_align_set(gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL);
135 elm_gengrid_item_size_set(gengrid, 205, 205);
136 elm_gengrid_align_set(gengrid, 0.0, 0.0);
137 elm_gengrid_horizontal_set(gengrid, EINA_TRUE);
138 elm_gengrid_bounce_set(gengrid, EINA_FALSE, EINA_FALSE);
139 elm_gengrid_reorder_mode_set(gengrid, EINA_FALSE);
140 elm_gengrid_scroller_policy_set(gengrid, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_OFF);
141 elm_gengrid_select_mode_set(gengrid, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
143 evas_object_event_callback_add(gengrid, EVAS_CALLBACK_DEL, __cal_grid_delete_callback, data);
145 if (!gengrid_item_class) {
146 gengrid_item_class = elm_gengrid_item_class_new();
148 gengrid_item_class->item_style = "grid";
149 gengrid_item_class->func.text_get = NULL;
150 gengrid_item_class->func.content_get = __cal_grid_content_get_callback;
151 gengrid_item_class->func.state_get = NULL;
152 gengrid_item_class->func.del = __cal_grid_item_delete_callback;
158 void cal_grid_set_edit_mode(Evas_Object *grid, Eina_Bool is_edit_mode)
164 if (is_edit_mode == EINA_TRUE)
165 elm_gengrid_select_mode_set(grid, ELM_OBJECT_SELECT_MODE_DEFAULT);
167 elm_gengrid_select_mode_set(grid, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
170 void cal_grid_set_max_item_count(Evas_Object *grid, unsigned int count)
176 cal_grid_s *data = evas_object_data_get(grid, "data");
179 data->max_item_count = count;
182 unsigned int cal_grid_get_current_item_count(Evas_Object *grid)
188 return elm_gengrid_items_count(grid);
191 static void __cal_grid_item_selected_callback(void *data, Evas_Object *obj, void *event_info)
198 cal_grid_item_s *item = (cal_grid_item_s *)data;
200 if (!elm_gengrid_reorder_mode_get(obj))
201 elm_gengrid_item_selected_set(item->item, EINA_FALSE);
204 Elm_Object_Item * cal_grid_append_item(Evas_Object *grid, const char *image_path)
206 c_retv_if(!grid, NULL);
207 c_retv_if(!CAL_STRLEN(image_path), NULL);
209 cal_grid_s *data = evas_object_data_get(grid, "data");
210 c_retv_if(!data, NULL);
212 if (elm_gengrid_items_count(grid) == data->max_item_count) {
214 ERR("Max item count is reached.");
219 cal_grid_item_s *item = NULL;
221 item = calloc(1, sizeof(cal_grid_item_s));
223 item->item = elm_gengrid_item_append(grid, gengrid_item_class, item, __cal_grid_item_selected_callback, item);
226 ERR("elm_gengrid_item_append() is failed");
232 item->path = strdup(image_path);
235 if (data->callback_func)
236 data->callback_func(data->callback_data);
241 void cal_grid_delete_item(Evas_Object *grid, Elm_Object_Item *item)
246 elm_object_item_del(item);
249 Eina_List * cal_grid_get_item_path_list(Evas_Object *grid)
253 Eina_List *item_path_list = NULL;
255 c_retv_if(!grid, NULL);
257 Elm_Object_Item *item = elm_gengrid_first_item_get(grid);
261 cal_grid_item_s *item_data = elm_object_item_data_get(item);
263 if (!CAL_STRLEN(item_data->path))
264 ERR("item path is null");
266 item_path_list = eina_list_append(item_path_list, strdup(item_data->path));
268 item = elm_gengrid_item_next_get(item);
272 return item_path_list;
275 void cal_grid_free_item_path_list(Eina_List *item_path_list)
279 c_ret_if(!item_path_list);
281 Eina_List *cursor = NULL;
283 char *item_path = NULL;
285 EINA_LIST_FOREACH(item_path_list, cursor, item_path)
288 eina_list_free(item_path_list);