2 * Copyright 2013 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include "mf-language-mgr.h"
35 Elm_Object_Item *obj_item;
40 typedef struct _lang_mgr *lang_mgr;
49 static lang_mgr g_lang_mgr;
51 #define G_LIST_FOREACH(list, l, data) \
53 data = g_list_nth_data(l, 0); \
56 data = g_list_nth_data(l, 0))
58 static void __glist_free(void *data)
60 obj_data *item = data;
63 //free(item->text_id);
68 static void __update_obj(void *data, void *userdata)
71 obj_data *item = data;
73 mf_debug("handle: 0x%x, ID:%s",item->obj, item->text_id);
75 text = mf_util_get_text(item->text_id);
77 if(item->type == OBJ_TYPE_ELM_OBJECT)
78 elm_object_text_set(item->obj, text);
79 else if(item->type == OBJ_TYPE_EDJE_OBJECT)
80 edje_object_part_text_set(elm_layout_edje_get(item->obj), item->part, text);
82 mf_debug("Unhandled case");
85 static void __update_obj_item(void *data, void *userdata)
88 obj_item_data *item_data = data;
90 mf_debug("handle: 0x%x, ID:%s",item_data->obj_item, item_data->text_id);
91 text = mf_util_get_text(item_data->text_id);
92 elm_object_item_text_set(item_data->obj_item, text);
95 static void __update_list(void *data, void *userdata)
97 Elm_Object_Item *item = data;
99 mf_debug("handle: 0x%x",item);
100 elm_genlist_item_update(item);
103 static void __update_grid(void *data, void *userdata)
105 Elm_Object_Item *item = data;
107 mf_debug("handle: 0x%x",item);
108 elm_gengrid_item_update(item);
111 static void __obj_del_cb(void *data, Evas * e, Evas_Object * eo, void *event_info)
113 obj_data *item = data;
114 MF_CHECK(g_lang_mgr);
118 g_list_delete_link(g_lang_mgr->objs, g_list_find(g_lang_mgr->objs, item));
124 static void __obj_item_del_cb(void *data, Evas_Object *obj, void *event_info)
127 obj_item_data *item = data;
128 MF_CHECK(g_lang_mgr);
131 g_lang_mgr->obj_items=
132 g_list_delete_link(g_lang_mgr->obj_items, g_list_find(g_lang_mgr->obj_items, item));
138 int mf_language_mgr_create(void)
143 lang_mgr mgr = calloc(1, sizeof(_lang_mgr));
146 mf_debug("Error: calloc");
154 int mf_language_mgr_destroy(void)
156 MF_CHECK_VAL(g_lang_mgr, -1);
157 g_list_free_full(g_lang_mgr->objs, __glist_free);
158 g_lang_mgr->objs = NULL;
160 g_list_free(g_lang_mgr->glist_items);
161 g_lang_mgr->glist_items = NULL;
163 g_list_free(g_lang_mgr->grid_items);
164 g_lang_mgr->grid_items = NULL;
172 void mf_language_mgr_register_object(Evas_Object *obj, obj_type type, const char *part, const char *text_id)
174 MF_CHECK(g_lang_mgr);
175 obj_data *item = calloc(1, sizeof(obj_data));
180 item->text_id = text_id;
183 evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, __obj_del_cb, item);
185 g_lang_mgr->objs = g_list_append(g_lang_mgr->objs, item);
188 void mf_language_mgr_register_object_item(Elm_Object_Item *object_item, const char *text_ID, item_type type)
191 MF_CHECK(g_lang_mgr);
193 obj_item_data *data = calloc(1, sizeof(obj_item_data));
198 mf_debug("text id is [%s] item is [%p]", text_ID, object_item);
199 data->obj_item = object_item;
200 data->text_id = text_ID;
203 g_lang_mgr->obj_items= g_list_append(g_lang_mgr->obj_items, data);
204 mf_debug("======================length is [%d]", g_list_length(g_lang_mgr->obj_items));
208 void mf_language_mgr_unregister_object_item(Elm_Object_Item *object_item)
213 G_LIST_FOREACH(g_lang_mgr->obj_items, l, data)
215 if (data == NULL || data->obj_item == NULL) {
218 if(data->obj_item == object_item)
220 g_lang_mgr->obj_items = g_list_delete_link(g_lang_mgr->obj_items, l);
228 void mf_language_mgr_unregister_object_item_by_type(item_type type)
234 G_LIST_FOREACH(g_lang_mgr->obj_items, l, data)
239 if(data->type == type)
244 temp = g_list_append(temp, data);
248 g_list_free(g_lang_mgr->obj_items);
249 g_lang_mgr->obj_items = temp;
255 void mf_language_mgr_object_item_text_ID_set(Elm_Object_Item *object_item, const char *text_ID)
257 MF_CHECK(g_lang_mgr);
261 G_LIST_FOREACH(g_lang_mgr->obj_items, l, data)
263 if(data->obj_item == object_item)
265 mf_debug("set ID: %s", text_ID);
266 data->text_id = text_ID;
273 void mf_language_mgr_register_genlist_item(Elm_Object_Item *item)
275 MF_CHECK(g_lang_mgr);
276 g_lang_mgr->glist_items =
277 g_list_append(g_lang_mgr->glist_items, item);
280 void mf_language_mgr_unregister_genlist_item(Elm_Object_Item *item)
282 MF_CHECK(g_lang_mgr);
283 g_lang_mgr->glist_items =
284 g_list_delete_link(g_lang_mgr->glist_items, g_list_find(g_lang_mgr->glist_items, item));
287 void mf_language_mgr_register_gengrid_item(Elm_Object_Item *item)
289 MF_CHECK(g_lang_mgr);
290 g_lang_mgr->grid_items =
291 g_list_append(g_lang_mgr->grid_items, item);
294 void mf_language_mgr_unregister_gengrid_item(Elm_Object_Item *item)
296 MF_CHECK(g_lang_mgr);
297 g_lang_mgr->grid_items =
298 g_list_delete_link(g_lang_mgr->grid_items, g_list_find(g_lang_mgr->grid_items, item));
301 void mf_language_mgr_update()
303 mf_debug("language changed. update text");
304 MF_CHECK(g_lang_mgr);
305 g_list_foreach(g_lang_mgr->objs, __update_obj, NULL);
306 g_list_foreach(g_lang_mgr->obj_items, __update_obj_item, NULL);
307 g_list_foreach(g_lang_mgr->glist_items, __update_list, NULL);
308 g_list_foreach(g_lang_mgr->grid_items, __update_grid, NULL);