From e0eff2930a0adf2f416e830de4bfb64dac08757e Mon Sep 17 00:00:00 2001 From: MyoungJune Park Date: Sun, 3 Feb 2013 18:02:24 +0900 Subject: [PATCH] fixed N_SE_23995 --- src/setting-plugin.c | 166 ++++++++++++++++++++++++++++++++++++++------------- src/setting.c | 5 -- 2 files changed, 126 insertions(+), 45 deletions(-) diff --git a/src/setting-plugin.c b/src/setting-plugin.c index 71daaef..e37a7fc 100755 --- a/src/setting-plugin.c +++ b/src/setting-plugin.c @@ -125,7 +125,7 @@ static drawer_fp __drawer_find(char* type) SETTING_TRACE_BEGIN; SETTING_TRACE("node type:%s", type); Eina_List *check_list = _g_drawer_list; - Object_Drawer *list_item = NULL; + Object_Drawer *list_item = NULL; while (check_list) { list_item = (Object_Drawer *) eina_list_data_get(check_list); @@ -298,11 +298,23 @@ static DBusHandlerResult __signal_filter(DBusConnection* conn, DBusMessage* mess // access xml file doc = xmlParseFile(plugin_path); + if (doc == NULL) + { + SETTING_TRACE("unable to parse file : %s", plugin_path); + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; /* xml parsing error */ + } // generate xml tree xmlNode *root = xmlDocGetRootElement(doc); // find a node bool is_end = false; + + // TODO : message queing + // get key/value from d-bus and parse xml and search xml data with key + static int count = 0; + SETTING_TRACE(" BEGIN ---------------------------- dbus--> before __node_finder : %d", count); __node_finder((PluginNode*)ad->plugin_node, root, key_name ,val_name, &is_end); + SETTING_TRACE(" END ----------------------------- dbus--> after __node_finder : %d", count); + count += 1; } // update the node GError *error = NULL; @@ -1093,7 +1105,6 @@ static void __expanditem_func_exp_cb(void *data, Evas_Object *obj, void *event_i xmlNode *xmlObj = data_parentItem->userdata; - //char *value = (char*)xmlGetProp(xmlObj, "string"); char *value = (char*)xmlGetProp(xmlObj, "value"); SETTING_TRACE(">>> value = %s", value); Evas_Object *rgd = NULL; @@ -1109,6 +1120,30 @@ static void __expanditem_func_exp_cb(void *data, Evas_Object *obj, void *event_i int subitem_index = 0; int sel_idx = -1; +#if 1 + // print out debug message + if (data_parentItem->childs) + { + int howmany = 0; + Eina_List *li = data_parentItem->childs; + while(li) + { + Setting_GenGroupItem_Data* node = eina_list_data_get(li); + howmany += 1; + SETTING_TRACE(" <<< node->keyStr : %s >>> ", node->keyStr); + + // go next + li = eina_list_next(li); + } + SETTING_TRACE(" <<>> ", howmany); + } +#endif + if (data_parentItem->childs) + { + eina_list_free(data_parentItem->childs); + data_parentItem->childs = NULL; + } + while (cur != NULL) { if (!xmlStrcmp(cur->name, (const xmlChar*)"expanditem")) { type = (char*)xmlGetProp(cur, "type"); @@ -1122,12 +1157,12 @@ static void __expanditem_func_exp_cb(void *data, Evas_Object *obj, void *event_i subitem_index, subitem_title, NULL); - // SETTING_TRACE(">>> value = %s, subitem_title = %s ", value, subitem_title); if (0 == safeStrCmp(value, subitem_title)) { sel_idx = subitem_index; SETTING_TRACE("%d is selected in Radio Group", sel_idx); } + SETTING_TRACE(" eina list add >>> value = %s, subitem_title = %s ", value, subitem_title); data_parentItem->childs = eina_list_append(data_parentItem->childs, list_item); subitem_index++; @@ -1202,6 +1237,25 @@ Evas_Object *setting_create_layout_navi_bar2(Evas_Object *win_layout, Evas_Objec return layout; } +static void __plugin_genlist_unrealized_cb(void* data,Evas_Object* obj, void* event_info) +{ + SETTING_TRACE_BEGIN; + ret_if(data == NULL); + + Elm_Object_Item *item = (Elm_Object_Item*)event_info; + Setting_GenGroupItem_Data *node = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item); + ret_if(node== NULL); + + SETTING_TRACE("keyStr : %s ", node->keyStr); + //item_to_update->childs) + + if (node->childs) + { + eina_list_free(node->childs); + node->childs = NULL; + } +} + // static void* setting_func(void *data, xmlNode *xmlObj) { @@ -1224,6 +1278,9 @@ static void* setting_func(void *data, xmlNode *xmlObj) elm_object_style_set(pd->scroller, "dialogue"); elm_genlist_clear(pd->scroller); /* first to clear list */ + evas_object_smart_callback_add(pd->scroller, "unrealized", __plugin_genlist_unrealized_cb, node); + + SETTING_TRACE("_(title):%s", _(title)); setting_push_layout_navi_bar( @@ -1267,6 +1324,7 @@ static void* expandlist_func(void *data, xmlNode *xmlObj) if (list_item) { list_item->userdata = xmlObj; list_item->belongs_to = (int)pd; + list_item->childs = NULL; /* init */ } return list_item; @@ -1361,8 +1419,9 @@ static int __node_finder(PluginNode* context, xmlNode* cur, char* id_str, char* // case : toggle if ( 0 == strcmp (cur_node->name, "bool")) { - SETTING_TRACE(">>>>> UPDATE TOGGLE CONTROL %x --- %s ",context->ui_list, id_name); - Setting_GenGroupItem_Data* item_to_update = (Setting_GenGroupItem_Data*)eina_hash_find(context->ui_list, id_name); + SETTING_TRACE(">>>>> UPDATE TOGGLE CONTROL pluginpath:%s, ---- %x --- %s ", context->plugin_path, context->ui_list, id_name); + Setting_GenGroupItem_Data* item_to_update = NULL; + item_to_update = (Setting_GenGroupItem_Data*)eina_hash_find(context->ui_list, id_name); if (item_to_update) { item_to_update->chk_status = atoi(value); @@ -1403,49 +1462,78 @@ static int __node_finder(PluginNode* context, xmlNode* cur, char* id_str, char* //----------------------------------------------------------- if ( 0 == strcmp (cur_node->name, "expandlist")) { - SETTING_TRACE(">>>>> UPDATE EXPAND LIST CONTROL %x --- %s ",context->ui_list, id_name); - Setting_GenGroupItem_Data* item_to_update = (Setting_GenGroupItem_Data*)eina_hash_find(context->ui_list, id_name); - if (item_to_update) - { - char* old_string = item_to_update->sub_desc; - item_to_update->sub_desc = strdup(value); - SETTING_TRACE(">>> o-------------0 EXPAND LIST VALUE = %s ", value); - - // free old string - // string update - elm_object_item_data_set(item_to_update->item, item_to_update); - elm_genlist_item_update(item_to_update->item); - - // TODO: need to update child elements - // item_to_update->childs ---> expanded list + #if 1 + SETTING_TRACE(">>>>> UPDATE EXPAND LIST CONTROL %x --- %s ",context->ui_list, id_name); + Setting_GenGroupItem_Data* item_to_update = NULL; + item_to_update = (Setting_GenGroupItem_Data*)eina_hash_find(context->ui_list, id_name); + if (item_to_update) + { + char* old_string = item_to_update->sub_desc; + item_to_update->sub_desc = strdup(value); + SETTING_TRACE(">>> o-------------0 EXPAND LIST VALUE = %s ", value); + + // free old string + // string update + elm_object_item_data_set(item_to_update->item, item_to_update); + elm_genlist_item_update(item_to_update->item); + + // TODO: need to update child elements + // item_to_update->childs ---> expanded list + + // debug log + // there should have 4 sub items. + //----------------------------------------------------- + // has it already freed by someone? + //----------------------------------------------------- if (item_to_update->childs) { + int howmany2 =0; Eina_List *li = item_to_update->childs; - int radio_index = 0; while(li) { Setting_GenGroupItem_Data* node = eina_list_data_get(li); - // do something more - // SETTING_TRACE(">>> RADIO LIST STRING VALUE = %s ", node->keyStr); - // set position of radio button - if (strcmp(node->keyStr, value) == 0) - { - elm_radio_value_set(node->rgd, radio_index); - } - elm_object_item_data_set(item_to_update->item, item_to_update); - elm_genlist_item_update(item_to_update->item); - - // go next + howmany2 += 1; li = eina_list_next(li); - radio_index++; } - + SETTING_TRACE(" expandlist -- how many items are there? : %d ", howmany2); } - } else { - SETTING_TRACE("item_to_update is NULL"); - } - } + if (item_to_update->childs) + { + Eina_List *li = item_to_update->childs; + int radio_index = 0; + while(li) + { + Setting_GenGroupItem_Data* node = eina_list_data_get(li); + + if (node->item && node->keyStr) + { + // do something more + // SETTING_TRACE(">>> RADIO LIST STRING VALUE = %s ", node->keyStr); + // set position of radio button + if (strcmp(node->keyStr, value) == 0) // << CRAAH !!!! + { + elm_radio_value_set(node->rgd, radio_index); + } + } else { + SETTING_TRACE(">>> node has unproper values - Setting_GenGroupItem_Data"); + } + elm_object_item_data_set(item_to_update->item, item_to_update); + elm_genlist_item_update(item_to_update->item); + + // go next + li = eina_list_next(li); + radio_index++; + } + + } + } else { + SETTING_TRACE("item_to_update is NULL"); + } + + + #endif + } *is_end = true; } } @@ -1626,8 +1714,6 @@ bool setting_plugin_load(PluginNode* context, const char *cfg_file) return -1; } - - // TODO: error handler here __node_walker(context, context->pd->root); diff --git a/src/setting.c b/src/setting.c index 6149e69..ef4a776 100755 --- a/src/setting.c +++ b/src/setting.c @@ -48,11 +48,6 @@ void termination_handler(int signum) elm_exit(); } - - - - - static void __main_motion_sensor_cb( unsigned long long timestamp, void *data) { /* The code 'return ;' will be deleted after the defect of elm_genlist_item_top_show() is fixed */ -- 2.7.4