2 * Copyright 2012 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://www.tizenopensource.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.
17 #include "indicator.h"
18 #include "indicator_icon_list.h"
19 #include "indicator_icon_util.h"
21 static Eina_List *icon_list;
22 static Eina_List *nonfixed_icon_list;
24 void indicator_icon_object_free(Indicator_Icon_Object *icon)
30 if (icon->obj_exist == EINA_TRUE) {
31 if (indicator_util_icon_del(icon) == EINA_TRUE) {
32 icon->obj_exist = EINA_FALSE;
33 icon->txt_obj.obj = NULL;
34 icon->img_obj.obj = NULL;
41 int indicator_icon_list_free(void)
45 Indicator_Icon_Object *data;
47 retif(icon_list == NULL, OK, "Empty List!");
49 EINA_LIST_FOREACH_SAFE(icon_list, l, l_next, data) {
50 indicator_icon_object_free(data);
51 icon_list = eina_list_remove_list(icon_list, l);
55 eina_list_free(icon_list);
56 return eina_error_get();
59 int indicator_icon_list_update(Indicator_Icon_Object *obj)
63 Indicator_Icon_Object *data;
65 retif(obj == NULL, FAIL, "Invalid parameter!");
67 if (obj->fixed == EINA_TRUE) {
68 icon_list = eina_list_remove(icon_list, obj);
70 /* insert object to list */
71 EINA_LIST_REVERSE_FOREACH(icon_list, l, data) {
72 if (data->priority == obj->priority &&
73 data->always_top == EINA_TRUE)
76 if (data->priority <= obj->priority) {
77 icon_list = eina_list_append_relative_list(
79 return eina_error_get();
83 /* if finding condition is failed, append it at tail */
84 icon_list = eina_list_prepend(icon_list, obj);
86 nonfixed_icon_list = eina_list_remove(nonfixed_icon_list, obj);
88 /* insert object to list */
89 EINA_LIST_REVERSE_FOREACH(nonfixed_icon_list, l, data) {
90 if (data->priority == obj->priority &&
91 data->always_top == EINA_TRUE) {
94 if (data->priority <= obj->priority) {
96 eina_list_append_relative_list(
97 nonfixed_icon_list, obj, l);
98 return eina_error_get();
102 /* if finding condition is failed, append it at tail */
103 nonfixed_icon_list = eina_list_prepend(nonfixed_icon_list, obj);
105 return eina_error_get();
108 int indicator_icon_list_insert(Indicator_Icon_Object *obj)
111 Indicator_Icon_Object *data;
113 retif(obj == NULL || obj->name == NULL, FAIL, "Invalid parameter!");
115 if (obj->fixed == EINA_TRUE) {
117 EINA_LIST_REVERSE_FOREACH(icon_list, l, data) {
118 retif(data->name == obj->name, FAIL,
119 "%s is already exist in the list!", obj->name);
122 /* Set internal data */
123 obj->wish_to_show = EINA_FALSE;
125 /* insert object to list */
126 EINA_LIST_REVERSE_FOREACH(icon_list, l, data) {
127 if (data->priority == obj->priority
128 && data->always_top == EINA_TRUE)
131 if (data->priority <= obj->priority) {
132 icon_list = eina_list_append_relative_list(
134 return eina_error_get();
137 icon_list = eina_list_prepend(icon_list, obj);
140 EINA_LIST_REVERSE_FOREACH(nonfixed_icon_list, l, data) {
141 retif(data->name == obj->name, FAIL,
142 "%s is already exist in the list!", obj->name);
145 /* Set internal data */
146 obj->wish_to_show = EINA_FALSE;
148 /* insert object to list */
149 EINA_LIST_REVERSE_FOREACH(nonfixed_icon_list, l, data) {
150 if (data->priority == obj->priority &&
151 data->always_top == EINA_TRUE)
154 if (data->priority <= obj->priority) {
156 eina_list_append_relative_list(
157 nonfixed_icon_list, obj, l);
158 return eina_error_get();
161 /* if finding condition is failed, append it at tail */
162 nonfixed_icon_list = eina_list_prepend(nonfixed_icon_list, obj);
165 return eina_error_get();
168 int indicator_icon_list_remove(Indicator_Icon_Object *obj)
170 if (obj->fixed == EINA_TRUE) {
171 retif(icon_list == NULL
172 || obj == NULL, FAIL, "Invalid parameter!");
173 icon_list = eina_list_remove(icon_list, obj);
175 retif(nonfixed_icon_list == NULL
176 || obj == NULL, FAIL, "Invalid parameter!");
177 nonfixed_icon_list = eina_list_remove(nonfixed_icon_list, obj);
180 return eina_error_get();
183 Indicator_Icon_Object *indicator_get_prev_icon(Indicator_Icon_Object * obj)
186 Indicator_Icon_Object *data;
188 retif(obj == NULL || obj->name == NULL, NULL, "Invalid parameter!");
190 if (obj->fixed == EINA_TRUE) {
191 EINA_LIST_FOREACH(icon_list, l, data) {
192 if (data->name == obj->name)
196 EINA_LIST_FOREACH(nonfixed_icon_list, l, data) {
197 if (data->name == obj->name)
202 retif(l == NULL, NULL, "Cannot find %s in icon list!", obj->name);
204 for (l = eina_list_prev(l), data = eina_list_data_get(l);
205 l; l = eina_list_prev(l), data = eina_list_data_get(l)) {
206 if (obj->priority == data->priority
207 && indicator_util_is_show_icon(data))
213 Indicator_Icon_Object *indicator_get_last_shown_icon(void)
216 Indicator_Icon_Object *data;
218 retif(icon_list == NULL, NULL, "Invalid parameter!");
220 EINA_LIST_REVERSE_FOREACH(icon_list, l, data) {
221 if (indicator_util_is_show_icon(data))
227 Indicator_Icon_Object *indicator_get_first_shown_icon(void)
230 Indicator_Icon_Object *data;
232 retif(icon_list == NULL, NULL, "Invalid parameter!");
234 EINA_LIST_FOREACH(icon_list, l, data) {
235 if (indicator_util_is_show_icon(data))
241 Indicator_Icon_Object *indicator_get_hidden_icon(void)
244 Indicator_Icon_Object *data;
247 retif(icon_list == NULL, NULL, "Invalid parameter!");
249 EINA_LIST_REVERSE_FOREACH(icon_list, l, data) {
250 if (indicator_util_is_show_icon(data)) {
251 prio = data->priority;
256 for (l = eina_list_next(l), data = eina_list_data_get(l);
257 l; l = eina_list_next(l), data = eina_list_data_get(l)) {
258 if (data->wish_to_show == EINA_TRUE && data->priority != prio)
264 Indicator_Icon_Object
265 *indicator_get_shown_same_priority_icon_in_fixed_view_list(int prio)
268 Indicator_Icon_Object *data;
270 retif(icon_list == NULL, NULL, "Invalid parameter!");
272 EINA_LIST_FOREACH(icon_list, l, data) {
273 if (data->priority == prio && data->wish_to_show == EINA_TRUE)
279 Indicator_Icon_Object
280 *indicator_get_wish_to_show_icon(Indicator_Icon_Object *obj)
283 Indicator_Icon_Object *data;
285 DBG("indicator_get_wish_to_show_icon!");
286 retif(obj == NULL, NULL, "Invalid parameter!");
288 if (obj->fixed == EINA_TRUE) {
289 EINA_LIST_REVERSE_FOREACH(icon_list, l, data) {
290 if (data->priority == obj->priority
291 && data->wish_to_show == EINA_TRUE
292 && data->exist_in_view == EINA_FALSE) {
298 EINA_LIST_REVERSE_FOREACH(nonfixed_icon_list, l, data) {
299 if (data->wish_to_show == EINA_TRUE
300 && data->exist_in_view == EINA_FALSE)
307 Indicator_Icon_Object
308 *indicator_get_wish_to_remove_icon(Indicator_Icon_Object *obj)
311 Indicator_Icon_Object *data;
313 retif(obj == NULL, NULL, "Invalid parameter!");
315 if (obj->fixed == EINA_TRUE) {
316 EINA_LIST_REVERSE_FOREACH(icon_list, l, data) {
317 if (data->priority == obj->priority
318 && data->wish_to_show == EINA_TRUE)
323 /* find lowest priority of icon */
324 EINA_LIST_FOREACH(nonfixed_icon_list, l, data) {
325 if (data->wish_to_show == EINA_TRUE
326 && data->exist_in_view == EINA_TRUE)
334 Indicator_Icon_Object
335 *indicator_get_lowest_priority_icon_in_wish_show_list(void)
338 Indicator_Icon_Object *data;
340 EINA_LIST_FOREACH(nonfixed_icon_list, l, data) {
341 if (data->wish_to_show == EINA_TRUE
342 && data->exist_in_view == EINA_FALSE) {
343 DBG("Get Lowest Priority Item : %s", data->name);
351 Indicator_Icon_Object
352 *indicator_get_highest_priority_icon_in_wish_show_list(void)
355 Indicator_Icon_Object *data;
357 EINA_LIST_REVERSE_FOREACH(nonfixed_icon_list, l, data) {
358 if (data->wish_to_show == EINA_TRUE
359 && data->exist_in_view == EINA_FALSE) {
360 DBG("Get Highest Priority Item : %s", data->name);
368 int indicator_get_same_priority_icons(Eina_List **result,
369 Indicator_Icon_Object *obj)
372 Indicator_Icon_Object *data;
374 retif(icon_list == NULL || obj == NULL, FAIL, "Invalid parameter!");
376 EINA_LIST_FOREACH(icon_list, l, data) {
377 if (data->priority == obj->priority)
378 *result = eina_list_append(*result, data);
381 if (eina_list_count(*result) == 1)