3 * Copyright (c) 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.
17 #include <setting-common-view.h>
19 #include <Elementary.h>
21 #include <setting-common-data-error.h>
22 #include <setting-debug.h>
24 #define MAX_VIEWNODE_NUM 15
25 typedef struct _SettingViewNode {
27 setting_view *topview;
29 static setting_view *g_cur_view;; /* use by 'End Key' process */
30 static SettingViewNode g_view_node_table[MAX_VIEWNODE_NUM];
31 static int g_view_node_table_cur_size = 0;
33 int setting_view_node_set_cur_view(setting_view *view)
39 setting_view *setting_view_node_get_cur_view()
44 int setting_view_node_table_intialize()
47 g_view_node_table_cur_size = 0;
52 setting_view_node_table_register(setting_view *view, setting_view *topview)
54 //SETTING_TRACE_BEGIN;
55 if (g_view_node_table_cur_size >= MAX_VIEWNODE_NUM) {
56 return SETTING_RETURN_FAIL;
59 g_view_node_table[g_view_node_table_cur_size].view = view;
60 g_view_node_table[g_view_node_table_cur_size].topview = topview;
61 g_view_node_table_cur_size++;
65 int setting_view_cb_at_endKey(void *cb)
69 SettingViewNode *viewnode = NULL;
70 for (; idx < g_view_node_table_cur_size; idx++) {
71 if (g_cur_view == g_view_node_table[idx].view) {
72 viewnode = &(g_view_node_table[idx]);
76 if (viewnode && viewnode->view && viewnode->topview) {
77 setting_view_change(viewnode->view, viewnode->topview, cb);
82 setting_view *setting_view_get_topview(setting_view *view)
85 retv_if(NULL == view, NULL);
87 SettingViewNode *viewnode = NULL;
88 for (; idx < g_view_node_table_cur_size; idx++) {
89 if (view == g_view_node_table[idx].view) {
90 viewnode = &(g_view_node_table[idx]);
94 if (viewnode && viewnode->topview) {
95 return viewnode->topview;
103 void setting_view_update_topview(setting_view *view, setting_view *topview)
106 ret_if(NULL == view);
108 SettingViewNode *viewnode = NULL;
109 for (; idx < g_view_node_table_cur_size; idx++) {
110 if (view == g_view_node_table[idx].view) {
111 viewnode = &(g_view_node_table[idx]);
116 viewnode->topview = topview;
124 int setting_view_create(setting_view *view, void *cb)
127 setting_retvm_if(!view || !cb , SETTING_GENERAL_ERR_NULL_DATA_PARAMETER, "Invalid arguement");
129 int ret = SETTING_RETURN_FAIL;
131 if (!view->is_create && view->create) {//error handle:create only when the view doesn't exit
132 ret = view->create(cb);
138 int setting_view_destroy(setting_view *view, void *cb)
141 setting_retvm_if(!view || !cb , SETTING_GENERAL_ERR_NULL_DATA_PARAMETER, "Invalid arguement");
143 int ret = SETTING_RETURN_FAIL;
145 if (view->is_create && view->destroy) {//error handle:destroy only when the view exits
146 ret = view->destroy(cb);
152 int setting_view_update(setting_view *view, void *cb)
155 setting_retvm_if(!view || !cb , SETTING_GENERAL_ERR_NULL_DATA_PARAMETER, "Invalid arguement");
157 int ret = SETTING_RETURN_FAIL;
159 if (view->is_create && view->update) {//error handle:update only when the view exits
160 ret = view->update(cb);
166 int setting_view_cleanup(setting_view *view, void *cb)
169 setting_retvm_if(!view || !cb , SETTING_GENERAL_ERR_NULL_DATA_PARAMETER, "Invalid arguement");
171 int ret = SETTING_RETURN_FAIL;
173 if (view->is_create && view->cleanup) {//error handle:cleanup only when the view exits
174 ret = view->cleanup(cb);
181 setting_view_change(setting_view *from_view, setting_view *to_view, void *cb)
184 setting_retvm_if(!from_view || !to_view || !cb ,
185 SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
186 "Invalid arguement");
188 int ret = SETTING_RETURN_SUCCESS;
189 if (from_view == setting_view_get_topview(to_view)) {
190 //from a parent view to his child view, don't need cleanup parent view
192 //from a child view to his parent view, need cleanup child view
193 ret = setting_view_cleanup(from_view, cb);
196 if (ret == SETTING_RETURN_FAIL) {
197 return SETTING_RETURN_FAIL;
200 if (to_view->is_create == 1) {
201 ret = setting_view_update(to_view, cb);
203 ret = setting_view_create(to_view, cb);
205 g_cur_view = to_view; /* compute new value of g_cur_view. */