2 * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0
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.
18 #include <glib-object.h>
19 #include <json-glib/json-glib.h>
20 #include "data_wrapper.h"
23 struct settingui_args {
45 char *step_disp_value;
52 struct slideritem *slider_item;
56 char item_name[ARRAY_SIZE];
60 struct setting_ui *setting_ui;
62 Eina_List *sub_settingitems;
63 Eina_List *group_list;
67 struct settingmgr_data {
69 Eina_List *parsed_json_file;
72 struct settingview_data {
73 struct settingitem *parentitem;
74 Eina_Array *childitems;
78 * This function is invoked to release slider item data.
80 * @param item [in] The slideritem data pointer.
83 static void _free_slider_item(struct slideritem *item)
86 _ERR("Invalid argument");
90 free(item->min_value);
91 free(item->min_disp_value);
92 free(item->max_value);
93 free(item->max_disp_value);
94 free(item->step_value);
95 free(item->step_disp_value);
100 * This function is invoked to release item list data.
102 * @param list [in] The Eina_List data pointer.
105 static void _free_list_item(Eina_List *list)
107 struct listitem *litem;
110 _ERR("Invalid argument");
114 EINA_LIST_FREE(list, litem) {
115 free(litem->display_name);
122 * This function is invoked to release item UI data.
124 * @param data [in] The uidata data pointer.
127 static void _free_uidata(struct uidata *data)
130 _ERR("Invalid argument");
136 _free_slider_item(data->slider_item);
137 _free_list_item(data->item);
142 * This function is invoked to release UI arguments list.
144 * @param list [in] The Eina_List data pointer.
147 static void _free_ui_args(Eina_List *list)
149 struct settingui_args *args;
152 _ERR("Invalid argument");
156 EINA_LIST_FREE(list, args) {
164 * This function is invoked to release setting UI data.
166 * @param data [in] The setting_ui data pointer.
169 static void _free_setting_ui(struct setting_ui *data)
172 _ERR("Invalid argument");
178 _free_ui_args(data->args);
183 * This function is invoked to release string list.
185 * @param list [in] The Eina_List data pointer.
188 static void _free_str_list(Eina_List *list)
193 _ERR("Invalid argument");
197 EINA_LIST_FREE(list, item)
202 * This function is @Eina_Free_Cb type callback to release every
203 * setting item data stored in eina hash.
205 * @param data [in] The function specific data which hold settingitem pointer.
208 static void _free_settingitem_cb(void *data)
210 struct settingitem *item;
213 _ERR("Invalid argument");
219 free(item->display_name);
222 _free_str_list(item->sub_settingitems);
223 _free_uidata(item->data);
224 _free_setting_ui(item->setting_ui);
225 free(item->parent_item);
226 _free_str_list(item->group_list);
231 * This function is invoked to initialize eina hash.
234 * @return The Eina_Hash data pointer, NULL on error.
236 static Eina_Hash *_hash_init(void)
240 hash = eina_hash_string_superfast_new(_free_settingitem_cb);
246 * This function is invoked to destroy eina hash and release every element.
248 * @param hash [in] The Eina_Hash data pointer.
251 static void _hash_fini(Eina_Hash *hash)
256 eina_hash_free(hash);
260 * This function is invoked to read slider item data from json file.
262 * @param jparser [in] The json_parser data pointer.
263 * @param name [in] The item name to be read.
264 * @return The slideritem data pointer, NULL on error.
266 static struct slideritem *_read_slider_data_from_json(
267 struct json_parser *jparser, const char *name)
270 struct slideritem *item;
272 if (!jparser || !name) {
273 _ERR("Invalid argument");
277 item = calloc(1, sizeof(struct slideritem));
281 snprintf(buf, sizeof(buf), "$.settingitems.%s.%s.%s.%s",
282 name, JSONSTR_DATA, JSONSTR_DATA_SLIDER,
283 JSONSTR_SLIDER_MIN_DISPLAYVALUE);
284 item->min_disp_value = parser_get_string_value_from_json(jparser, buf);
286 snprintf(buf, sizeof(buf), "$.settingitems.%s.%s.%s.%s",
287 name, JSONSTR_DATA, JSONSTR_DATA_SLIDER,
288 JSONSTR_SLIDER_MIN_VALUE);
289 item->min_value = parser_get_string_value_from_json(jparser, buf);
291 snprintf(buf, sizeof(buf), "$.settingitems.%s.%s.%s.%s",
292 name, JSONSTR_DATA, JSONSTR_DATA_SLIDER,
293 JSONSTR_SLIDER_MAX_DISPLAYVALUE);
294 item->max_disp_value = parser_get_string_value_from_json(jparser, buf);
296 snprintf(buf, sizeof(buf), "$.settingitems.%s.%s.%s.%s",
297 name, JSONSTR_DATA, JSONSTR_DATA_SLIDER,
298 JSONSTR_SLIDER_MAX_VALUE);
299 item->max_value = parser_get_string_value_from_json(jparser, buf);
301 snprintf(buf, sizeof(buf), "$.settingitems.%s.%s.%s.%s",
302 name, JSONSTR_DATA, JSONSTR_DATA_SLIDER,
303 JSONSTR_SLIDER_STEP_DISPLAYVALUE);
304 item->step_disp_value = parser_get_string_value_from_json(jparser, buf);
306 snprintf(buf, sizeof(buf), "$.settingitems.%s.%s.%s.%s",
307 name, JSONSTR_DATA, JSONSTR_DATA_SLIDER,
308 JSONSTR_SLIDER_STEP_VALUE);
309 item->step_value = parser_get_string_value_from_json(jparser, buf);
315 * This function is invoked to read list item data from json file and store them into eina list.
317 * @param jparser [in] The json_parser data pointer.
318 * @param name [in] The item name to be read.
319 * @return The Eina_List data pointer, NULL on error.
321 static Eina_List *_read_list_data_from_json(
322 struct json_parser *jparser, const char *name)
325 struct listitem *item;
329 if (!jparser || !name) {
330 _ERR("Invalid argument");
334 snprintf(buf, sizeof(buf), "$.settingitems.%s.%s.%s", name,
335 JSONSTR_DATA, JSONSTR_DATA_LIST);
336 length = parser_get_array_length_from_json(jparser, buf);
340 for (i = 0; i < length; i++) {
341 item = calloc(1, sizeof(struct listitem));
343 _free_list_item(list);
347 snprintf(buf, sizeof(buf), "$.settingitems.%s.%s.%s[%d].%s",
348 name, JSONSTR_DATA, JSONSTR_DATA_LIST,
349 i, JSONSTR_LIST_DISPLAYVALUE);
350 item->display_name = parser_get_string_value_from_json(
353 snprintf(buf, sizeof(buf), "$.settingitems.%s.%s.%s[%d].%s",
354 name, JSONSTR_DATA, JSONSTR_DATA_LIST,
355 i, JSONSTR_LIST_VALUE);
356 item->value = parser_get_string_value_from_json(jparser, buf);
358 list = eina_list_append(list, item);
365 * This function is invoked to read setting UI property's arguments list from json file.
367 * @param jparser [in] The json_parser data pointer.
368 * @param name [in] The item name to be read.
369 * @return The Eina_List data pointer, NULL on error.
371 static Eina_List *_get_settingui_args_list(
372 struct json_parser *jparser, const char *name)
376 struct settingui_args *data;
380 if (!jparser || !name) {
381 _ERR("Invalid argument");
386 args = parser_get_settingui_args_from_json(jparser,
387 name, JSONSTR_SETTINGUI, &cnt);
393 for (i = 0; i < cnt; i++) {
395 _ERR("Memory error");
399 data = calloc(1, sizeof(*data));
401 _ERR("Allocate memory failed");
405 data->keyname = calloc(1, sizeof(char) * ARRAY_SIZE);
406 if (!data->keyname) {
407 _ERR("Allocate memory failed");
412 strncpy((char *)data->keyname, args[i], ARRAY_SIZE - 1);
414 snprintf(buf, sizeof(buf), "$.menuitems.%s.%s.%s.%s",
415 name, JSONSTR_SETTINGUI,
416 JSONSTR_SETTINGUI_ARGS, args[i]);
417 data->value = parser_get_string_value_from_json(jparser, buf);
419 list = eina_list_append(list, data);
422 parser_release_member_list(args);
427 parser_release_member_list(args);
434 * This function is invoked to read setting item's "data" property infomation from json file.
436 * @param jparser [in] The json_parser data pointer.
437 * @param name [in] The item name to be read.
438 * @return The uidata data pointer, NULL on error.
440 static struct uidata *_get_datainfo_from_json(
441 struct json_parser *jparser, const char *name)
448 if (!jparser || !name) {
449 _ERR("Invalid argument");
453 data = calloc(1, sizeof(struct uidata));
458 list = parser_get_data_list_from_json(jparser, name, &cnt);
464 for (i = 0; i < cnt; i++) {
466 _ERR("Memory error");
467 parser_release_member_list(list);
472 if (!strncmp(list[i], JSONSTR_DATA_KEY, strlen(list[i]))) {
473 snprintf(buf, sizeof(buf), "$.settingitems.%s.%s.%s",
474 name, JSONSTR_DATA, JSONSTR_DATA_KEY);
475 data->key = parser_get_string_value_from_json(
477 } else if (!strncmp(list[i], JSONSTR_DATA_TYPE,
479 snprintf(buf, sizeof(buf), "$.settingitems.%s.%s.%s",
480 name, JSONSTR_DATA, JSONSTR_DATA_TYPE);
481 data->type = parser_get_string_value_from_json(
483 } else if (!strncmp(list[i], JSONSTR_DATA_SLIDER,
485 data->slider_item = _read_slider_data_from_json(
487 } else if (!strncmp(list[i], JSONSTR_DATA_LIST,
489 data->item = _read_list_data_from_json(jparser, name);
493 parser_release_member_list(list);
499 * This function is invoked to read setting item's infomation from json file.
501 * @param jparser [in] The json_parser data pointer.
502 * @param data [in] The settingitem data pointer which stored infomation read from json file.
503 * @param name [in] The item name to be read.
506 static void _get_iteminfo_from_json(struct json_parser *jparser,
507 struct settingitem *data, const char *name)
509 struct settingitem *item;
514 if (!jparser || !data || !name) {
515 _ERR("Invalid argument");
522 list = parser_get_itemlist_from_json(jparser, name, &cnt, DRAWING_INFO);
526 for (i = 0; i < cnt; i++) {
528 _ERR("Memory error");
529 parser_release_member_list(list);
533 if (!strncmp(list[i], JSONSTR_DISPLAY_NAME, strlen(list[i]))) {
534 snprintf(buf, sizeof(buf), "$.settingitems.%s.%s",
535 name, JSONSTR_DISPLAY_NAME);
536 item->display_name = parser_get_string_value_from_json(
538 } else if (!strncmp(list[i], JSONSTR_STYLE, strlen(list[i]))) {
539 snprintf(buf, sizeof(buf), "$.settingitems.%s.%s",
540 name, JSONSTR_STYLE);
541 item->style = parser_get_string_value_from_json(
543 } else if (!strncmp(list[i], JSONSTR_STATUS, strlen(list[i]))) {
544 snprintf(buf, sizeof(buf), "$.settingitems.%s.%s",
545 name, JSONSTR_STATUS);
546 item->status = parser_get_string_value_from_json(
548 } else if (!strncmp(list[i], JSONSTR_SETTINGUI,
550 item->setting_ui = calloc(1, sizeof(struct setting_ui));
551 if (!item->setting_ui)
554 snprintf(buf, sizeof(buf), "$.settingitems.%s.%s", name,
555 JSONSTR_SETTINGUI_STYLE);
556 item->setting_ui->style =
557 parser_get_string_value_from_json(
560 snprintf(buf, sizeof(buf), "$.settingitems.%s.%s", name,
561 JSONSTR_SETTINGUI_NAME);
562 item->setting_ui->name =
563 parser_get_string_value_from_json(
565 item->setting_ui->args = _get_settingui_args_list(
567 } else if (!strncmp(list[i], JSONSTR_DATA, strlen(list[i]))) {
568 item->data = _get_datainfo_from_json(jparser, name);
574 parser_release_member_list(list);
578 * This function is invoked to read setting tree's infomation from json file.
580 * @param jparser [in] The json_parser data pointer.
581 * @param data [in] The settingitem data pointer which stored infomation read from json file.
582 * @param name [in] The item name to be read.
585 static void _get_treeinfo_from_json(struct json_parser *jparser,
586 struct settingitem *data, const char *name)
588 struct settingitem *item;
593 if (!jparser || !data || !name) {
594 _ERR("Invalid argument");
601 list = parser_get_itemlist_from_json(jparser, name, &cnt, SUBMENU_INFO);
605 for (i = 0; i < cnt; i++) {
607 _ERR("Memory error");
608 parser_release_member_list(list);
612 if (!strncmp(list[i], JSONSTR_SUBSETTING_SUBITEMS,
614 snprintf(buf, sizeof(buf), "$.settingtree.%s.%s",
615 name, JSONSTR_SUBSETTING_SUBITEMS);
616 item->sub_settingitems =
617 parser_get_string_list_from_json(
619 } else if (!strncmp(list[i], JSONSTR_SUBSETTING_PARENTITEM,
621 snprintf(buf, sizeof(buf), "$.settingtree.%s.%s",
622 name, JSONSTR_SUBSETTING_PARENTITEM);
623 item->parent_item = parser_get_string_value_from_json(
625 } else if (!strncmp(list[i], JSONSTR_GROUP, strlen(list[i]))) {
626 snprintf(buf, sizeof(buf), "$.settingtree.%s.%s",
627 name, JSONSTR_GROUP);
628 item->group_list = parser_get_string_list_from_json(
633 parser_release_member_list(list);
637 * This function is invoked to read item infomation from json file.
639 * @param jparser [in] The json_parser data pointer.
640 * @param name [in] The item name to be read.
641 * @return The settingitem data pointer, NULL on error.
643 static struct settingitem *_get_settingitem_from_json(
644 struct json_parser *jparser, const char *name)
646 struct settingitem *item;
648 if (!jparser || !name) {
649 _ERR("Parameter error!");
653 item = calloc(1, sizeof(*item));
657 item->parent_item = NULL;
658 item->sub_settingitems = NULL;
660 strncpy(item->item_name, name, ARRAY_SIZE - 1);
662 _get_iteminfo_from_json(jparser, item, name);
663 _get_treeinfo_from_json(jparser, item, name);
669 * This function is invoked to merge item infomation between existed and new item.
671 * @param existed [in] The existed settingitem data pointer.
672 * @param newer [in] The new settingitem data pointer.
675 static void _merge_settingitems(struct settingitem *existed,
676 struct settingitem *newer)
678 if (!existed || !newer) {
679 _ERR("Invalid argument");
683 if (newer->sub_settingitems) {
684 _free_str_list(existed->sub_settingitems);
685 existed->sub_settingitems = newer->sub_settingitems;
688 if (newer->parent_item) {
689 free(existed->parent_item);
690 existed->parent_item = newer->parent_item;
693 if (newer->display_name) {
694 free(existed->display_name);
695 existed->display_name = newer->display_name;
698 if (newer->setting_ui) {
699 _free_setting_ui(existed->setting_ui);
700 existed->setting_ui = newer->setting_ui;
704 free(existed->style);
705 existed->style = newer->style;
709 _free_uidata(existed->data);
710 existed->data = newer->data;
713 if (newer->group_list) {
714 _free_str_list(existed->group_list);
715 existed->group_list = newer->group_list;
720 * This function is invoked to read a json file and store item infomation to eina hash.
722 * @param hash [in] The Eina_Hash data pointer.
723 * @param conf [in] The absolute json file path.
724 * @param name [in] The json file name.
725 * @return 0 if success, -1 if fail.
727 static int _write_settingitems_to_hash(Eina_Hash *hash,
728 const char *conf, const char *name)
730 struct json_parser *jparser;
732 struct settingitem *newer;
733 struct settingitem *existed;
735 char path[ARRAY_SIZE];
738 if (!hash || !name) {
739 _ERR("Parameter error!");
744 snprintf(path, sizeof(path), "%s/%s.json",
745 JSON_OUTPUT_DIR, name);
747 snprintf(path, sizeof(path), "%s", conf);
749 jparser = parser_init(path);
751 _ERR("parser_init failed!\n");
755 reader = parser_get_json_reader(jparser);
757 _ERR("parser_get_json_reader failed!\n");
758 parser_fini(jparser);
762 json_reader_read_member(reader, JSONSTR_SETTING_ITEMS);
763 cnt = json_reader_count_members(reader);
764 list = json_reader_list_members(reader);
765 json_reader_end_member(reader);
767 for (i = 0; i < cnt; i++) {
768 newer = _get_settingitem_from_json(jparser, list[i]);
772 existed = eina_hash_find(hash, list[i]);
774 eina_hash_add(hash, list[i], newer);
776 _merge_settingitems(existed, newer);
779 newer = _get_settingitem_from_json(jparser, name);
780 existed = eina_hash_find(hash, name);
782 eina_hash_add(hash, name, newer);
784 _merge_settingitems(existed, newer);
786 parser_release_member_list(list);
787 parser_fini(jparser);
793 * This function is invoked to check slider item style.
795 * @param hash [in] The settingitem data pointer.
796 * @return true if style is bottom slider or bottom 2-way slider
797 * false if style is other kind of view.
799 static bool _check_slider_item(struct settingitem *item)
804 _ERR("Invalid argument");
808 style = settingitem_get_settingui_style(item);
812 if (!strncmp(style, STYLE_BOTTOMSLIDER, strlen(style)) ||
813 !strncmp(style, STYLE_BOTTOM2WAYSLIDER, strlen(style)))
820 * This function is invoked to tranform string type value to float.
822 * @param str [in] The string value.
823 * @param val [out] The float value.
824 * @return 0 if success, -1 if fail.
826 static int _get_slider_value(const char *str, double *val)
828 if (!str || !strlen(str) || !val) {
829 _ERR("Invalid argument");
839 * This function is invoked to create and initialize setting manager data structure.
842 * @return The settingmgr_data data pointer, NULL on error.
844 struct settingmgr_data *viewmgr_data_init(void)
846 struct settingmgr_data *data;
848 data = calloc(1, sizeof(struct settingmgr_data));
850 _ERR("calloc data failed\n");
854 data->jsonhash = _hash_init();
855 if (!data->jsonhash) {
860 data->parsed_json_file = NULL;
866 * This function is invoked to destroy and release setting manager data structure.
868 * @param data [in] The settingmgr_data data pointer.
871 void viewmgr_data_fini(struct settingmgr_data *data)
876 _ERR("Parameter error!");
880 _hash_fini(data->jsonhash);
882 if (data->parsed_json_file) {
883 EINA_LIST_FREE(data->parsed_json_file, node)
891 * This function is invoked to get setting item data with specific name.
893 * @param data [in] The settingmgr_data data pointer.
894 * @param name [in] The item name want to get.
895 * @return The settingitem data pointer, NULL on error.
897 struct settingitem *viewmgr_data_get_settingitem(
898 struct settingmgr_data *data, const char *name)
900 struct settingitem *item;
905 item = eina_hash_find(data->jsonhash, name);
911 * This function is invoked to parse specific json file and store data into eina hash.
913 * @param data [in] The settingmgr_data data pointer.
914 * @param name [in] The item name want to read.
915 * @return 0 if success, -1 if fail.
917 int viewmgr_data_read_jsonfile_into_hash(
918 struct settingmgr_data *data, const char *name)
921 const char *style, *ui_name;
922 struct settingitem *item;
927 if (!data || !name) {
928 _ERR("Parameter error!");
932 hash = data->jsonhash;
933 list = data->parsed_json_file;
936 item = viewmgr_data_get_settingitem(data, name);
937 style = settingitem_get_settingui_style(item);
938 ui_name = settingitem_get_settingui_name(item);
940 if (style && !ui_name && strncmp(style,
941 STYLE_NEED_PASSCODE, strlen(style)))
944 if (style && ui_name && !strncmp(style, STYLE_UIGADGET, strlen(style)))
947 EINA_LIST_FOREACH(list, l, tmp) {
948 if (!strncmp(tmp, name, BUF_SIZE))
953 r = _write_settingitems_to_hash(hash, NULL, name);
955 _ERR("_write_settingitems_to_hash failed!\n");
960 data->parsed_json_file = eina_list_prepend(
961 data->parsed_json_file, tmp);
968 * This function is invoked to build setting manager data structure with specific name.
970 * @param sdata [in] The settingmgr_data data pointer.
971 * @param name [in] The item name.
972 * @return The settingview_data data pointer, NULL on error.
974 struct settingview_data *viewmgr_data_build_view(
975 struct settingmgr_data *sdata, const char *name)
978 struct settingitem *item;
980 struct settingview_data *vdata;
982 if (!sdata || !name) {
983 _ERR("Parameter error!");
987 vdata = viewdata_allocate();
989 _ERR("Allocate memory failed");
996 vdata->parentitem = viewmgr_data_get_settingitem(sdata, name);
997 list = settingitem_get_subitems(vdata->parentitem);
999 vdata->childitems = eina_array_new(1);
1000 EINA_LIST_FOREACH(list, l, node) {
1001 item = viewmgr_data_get_settingitem(sdata, node);
1003 _ERR("childitem not found, continuing");
1007 eina_array_push(vdata->childitems, item);
1015 * This function is invoked to get sub item list from setting item data structure.
1017 * @param sitem [in] The settingitem data pointer.
1018 * @return The Eina_List data pointer, NULL on error.
1020 Eina_List *settingitem_get_subitems(struct settingitem *sitem)
1025 return sitem->sub_settingitems;
1029 * This function is invoked to get item group list from setting item data structure.
1031 * @param sitem [in] The settingitem data pointer.
1032 * @return The Eina_List data pointer, NULL on error.
1034 Eina_List *settingitem_get_group_list(struct settingitem *sitem)
1039 return sitem->group_list;
1043 * This function is invoked to get parent item name from setting item data structure.
1045 * @param item [in] The settingitem data pointer.
1046 * @return The string value, NULL on error.
1048 const char *settingitem_get_parentitem(struct settingitem *item)
1053 return item->parent_item;
1057 * This function is invoked to get item display name from setting item data structure.
1059 * @param item [in] The settingitem data pointer.
1060 * @return The string value, NULL on error.
1062 const char *settingitem_get_display_name(struct settingitem *item)
1067 return item->display_name;
1071 * This function is invoked to get item id from setting item data structure.
1073 * @param item [in] The settingitem data pointer.
1074 * @return The string value, NULL on error.
1076 const char *settingitem_get_id(struct settingitem *item)
1081 return item->item_name;
1085 * This function is invoked to get item style from setting item data structure.
1087 * @param item [in] The settingitem data pointer.
1088 * @return The string value, NULL on error.
1090 const char *settingitem_get_style(struct settingitem *item)
1099 * This function is invoked to get item status from setting item data structure.
1101 * @param item [in] The settingitem data pointer.
1102 * @return The string value, NULL on error.
1104 const char *settingitem_get_status(struct settingitem *item)
1109 return item->status;
1113 * This function is invoked to get item's setting UI style from setting item data structure.
1115 * @param item [in] The settingitem data pointer.
1116 * @return The string value, NULL on error.
1118 const char *settingitem_get_settingui_style(struct settingitem *item)
1120 if (!item || !item->setting_ui)
1123 return item->setting_ui->style;
1127 * This function is invoked to get item's setting UI name from setting item data structure.
1129 * @param item [in] The settingitem data pointer.
1130 * @return The string value, NULL on error.
1132 const char *settingitem_get_settingui_name(struct settingitem *item)
1134 if (!item || !item->setting_ui)
1137 return item->setting_ui->name;
1141 * This function is invoked to get item's setting UI arguments from setting item data structure.
1143 * @param item [in] The settingitem data pointer.
1144 * @return The Eina_List data pointer, NULL on error.
1146 Eina_List *settingitem_get_settingui_args(struct settingitem *item)
1148 if (!item || !item->setting_ui)
1151 return item->setting_ui->args;
1155 * This function is invoked to get item's data key value from setting item data structure.
1157 * @param item [in] The settingitem data pointer.
1158 * @return The string value, NULL on error.
1160 const char *settingitem_get_data_key(struct settingitem *item)
1162 if (!item || !item->data)
1165 return item->data->key;
1169 * This function is invoked to get item's data type value from setting item data structure.
1171 * @param item [in] The settingitem data pointer.
1172 * @return The string value, NULL on error.
1174 const char *settingitem_get_data_type(struct settingitem *item)
1176 if (!item || !item->data)
1179 return item->data->type;
1183 * This function is invoked to get item's data list from setting item data structure.
1185 * @param item [in] The settingitem data pointer.
1186 * @return The Eina_List data pointer, NULL on error.
1188 Eina_List *settingitem_get_data_list(struct settingitem *item)
1190 if (!item || !item->data)
1193 return item->data->item;
1197 * This function is invoked to get item's slider data from setting item data structure.
1199 * @param item [in] The settingitem data pointer.
1200 * @return The slideritem data pointer, NULL on error.
1202 struct slideritem *settingitem_get_data_slideritem(struct settingitem *item)
1204 if (!item || !item->data)
1207 return item->data->slider_item;
1211 * This function is invoked to get item's list data display name from listitem data structure.
1213 * @param litem [in] The listitem data pointer.
1214 * @return The string value, NULL on error.
1216 const char *listitem_get_display_name(struct listitem *litem)
1221 return litem->display_name;
1225 * This function is invoked to get item's list data value from listitem data structure.
1227 * @param litem [in] The listitem data pointer.
1228 * @return The string value, NULL on error.
1230 const char *listitem_get_value(struct listitem *litem)
1235 return litem->value;
1239 * This function is invoked to get item's slider minimum value from slideritem data structure.
1241 * @param sitem [in] The slideritem data pointer.
1242 * @return The string value, NULL on error.
1244 const char *slideritem_get_min_value(struct slideritem *sitem)
1249 return sitem->min_value;
1253 * This function is invoked to get item's slider step value from slideritem data structure.
1255 * @param sitem [in] The slideritem data pointer.
1256 * @return The string value, NULL on error.
1258 const char *slideritem_get_step_value(struct slideritem *sitem)
1263 return sitem->step_value;
1267 * This function is invoked to get item's slider maximum value from slideritem data structure.
1269 * @param sitem [in] The slideritem data pointer.
1270 * @return The string value, NULL on error.
1272 const char *slideritem_get_max_value(struct slideritem *sitem)
1277 return sitem->max_value;
1281 * This function is invoked to get item's slider minimum display value
1282 * from slideritem data structure.
1284 * @param sitem [in] The slideritem data pointer.
1285 * @return The string value, NULL on error.
1287 const char *slideritem_get_min_display_value(struct slideritem *sitem)
1292 return sitem->min_disp_value;
1296 * This function is invoked to get item's slider step display value
1297 * from slideritem data structure.
1299 * @param sitem [in] The slideritem data pointer.
1300 * @return The string value, NULL on error.
1302 const char *slideritem_get_step_display_value(struct slideritem *sitem)
1307 return sitem->step_disp_value;
1311 * This function is invoked to get item's slider maximum display value
1312 * from slideritem data structure.
1314 * @param sitem [in] The slideritem data pointer.
1315 * @return The string value, NULL on error.
1317 const char *slideritem_get_max_display_value(struct slideritem *sitem)
1322 return sitem->max_disp_value;
1326 * This function is invoked to calculate slider real value with specific original value.
1328 * @param val [in] The original value.
1329 * @param data [in] The slideritem data pointer.
1330 * @return The float slider value, 0.0 on error.
1332 double slideritem_find_slider_value(double val, struct slideritem *data)
1334 double sval, min, max;
1338 _ERR("Invalid arguments");
1345 r = _get_slider_value(slideritem_get_min_value(data), &min);
1349 r = _get_slider_value(slideritem_get_max_value(data), &max);
1353 if (max - min == 0.0)
1356 sval = (val - min) / (max - min);
1362 * This function is invoked to calculate slider display value with specific real value.
1364 * @param val [in] The real value.
1365 * @param data [in] The slideritem data pointer.
1366 * @return The float slider display value, 0.0 on error.
1368 double slideritem_find_slider_display_value(double val,
1369 struct slideritem *data)
1371 double sval, min, max;
1375 _ERR("Invalid arguments");
1382 r = _get_slider_value(slideritem_get_min_display_value(data), &min);
1386 r = _get_slider_value(slideritem_get_max_display_value(data), &max);
1390 sval = min + (val * (max - min));
1396 * This function is invoked to get parent item from setting view data.
1398 * @param data [in] The settingview_data data pointer.
1399 * @return The settingitem data pointer, NULL on error.
1401 struct settingitem *viewdata_get_parentitem(struct settingview_data *data)
1404 _ERR("Parameter error!");
1408 return data->parentitem;
1412 * This function is invoked to get child items array from setting view data.
1414 * @param data [in] The settingview_data data pointer.
1415 * @return The Eina_Array data pointer, NULL on error.
1417 Eina_Array *viewdata_get_childitems(struct settingview_data *data)
1420 _ERR("Parameter error!");
1424 return data->childitems;
1428 * This function is invoked to build child items list.
1430 * @param view [in] The settingview_data data pointer.
1431 * @return The Eina_List data pointer, NULL on error.
1433 Eina_List *viewdata_get_childitems_list(struct settingview_data *view)
1436 Eina_List *subitems, *list;
1437 struct settingitem *subitem;
1439 subitems = settingitem_get_subitems(view->parentitem);
1444 cnt = eina_list_count(subitems);
1445 for (i = 0; i < cnt; i++) {
1446 subitem = eina_array_data_get(view->childitems, i);
1447 list = eina_list_append(list, subitem);
1454 * This function is invoked to free child items list.
1456 * @param list [in] The Eina_List data pointer.
1459 void viewdata_free_childitems_list(Eina_List *list)
1462 _ERR("the list is null.");
1466 eina_list_free(list);
1470 * This function is invoked to allocate setting view data.
1473 * @return The settingview_data data pointer, NULL on error.
1475 struct settingview_data *viewdata_allocate(void)
1477 struct settingview_data *vdata;
1479 vdata = calloc(1, sizeof(*vdata));
1481 _ERR("Allocate memory failed\n");
1489 * This function is invoked to release setting view data.
1491 * @param data [in] The settingview_data data pointer.
1494 void viewdata_release(struct settingview_data *data)
1497 _ERR("Invalid argument");
1501 if (data->childitems)
1502 eina_array_free(data->childitems);
1508 * This function is invoked to get item group list, these items are slider setting UI style
1509 * and contained specific item.
1511 * @param item [in] The settingitem data pointer.
1512 * @param sdata [in] The settingmgr_data data pointer.
1513 * @param name [in] The item name.
1514 * @return The Eina_List data pointer, NULL on error.
1516 Eina_List *settingitem_get_slider_group_list(struct settingitem *item,
1517 struct settingmgr_data *sdata, const char *name)
1519 Eina_List *l, *group, *result;
1520 struct settingitem *sitem;
1524 if (!item || !sdata || !name) {
1525 _ERR("Invalid argument");
1529 group = settingitem_get_group_list(item);
1535 EINA_LIST_FOREACH(group, l, node) {
1536 if (!strncmp(name, node, strlen(name))) {
1547 EINA_LIST_FOREACH(group, l, node) {
1548 sitem = viewmgr_data_get_settingitem(sdata, node);
1549 if (_check_slider_item(sitem))
1550 result = eina_list_append(result, node);