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.
19 #include "indicator.h"
20 #include "indicator_icon_list.h"
21 #include "indicator_icon_util.h"
23 static Eina_List *icon_list = NULL;
24 static Eina_List *nonfixed_icon_list = NULL;
26 void indicator_icon_object_free(Indicator_Icon_Object *icon)
32 if (icon->obj_exist == EINA_TRUE) {
33 if (indicator_util_icon_del(icon) == EINA_TRUE) {
34 icon->obj_exist = EINA_FALSE;
35 icon->txt_obj.obj = NULL;
36 icon->img_obj.obj = NULL;
42 int indicator_icon_list_free(void)
46 Indicator_Icon_Object *data;
48 retif(icon_list == NULL, OK, "Empty List!");
50 EINA_LIST_FOREACH_SAFE(icon_list, l, l_next, data) {
51 indicator_icon_object_free(data);
52 icon_list = eina_list_remove_list(icon_list, l);
56 eina_list_free(icon_list);
58 return eina_error_get();
61 int indicator_icon_list_update(Indicator_Icon_Object *obj)
65 Indicator_Icon_Object *data;
67 retif(obj == NULL, FAIL, "Invalid parameter!");
69 if (obj->fixed == EINA_TRUE) {
70 icon_list = eina_list_remove(icon_list, obj);
72 /* insert object to list */
73 EINA_LIST_REVERSE_FOREACH(icon_list, l, data) {
74 if (data->priority == obj->priority &&
75 data->always_top == EINA_TRUE)
78 if (data->priority <= obj->priority) {
79 icon_list = eina_list_append_relative_list(
81 return eina_error_get();
85 /* if finding condition is failed, append it at tail */
86 icon_list = eina_list_prepend(icon_list, obj);
88 nonfixed_icon_list = eina_list_remove(nonfixed_icon_list, obj);
90 /* insert object to list */
91 EINA_LIST_REVERSE_FOREACH(nonfixed_icon_list, l, data) {
92 if (data->priority == obj->priority &&
93 data->always_top == EINA_TRUE) {
96 if (data->priority <= obj->priority) {
98 eina_list_append_relative_list(
99 nonfixed_icon_list, obj, l);
100 return eina_error_get();
104 /* if finding condition is failed, append it at tail */
105 nonfixed_icon_list = eina_list_prepend(nonfixed_icon_list, obj);
107 return eina_error_get();
110 int indicator_icon_list_insert(Indicator_Icon_Object *obj)
113 Indicator_Icon_Object *data;
115 retif(obj == NULL || obj->name == NULL, FAIL, "Invalid parameter!");
117 if (obj->fixed == EINA_TRUE) {
119 EINA_LIST_REVERSE_FOREACH(icon_list, l, data) {
120 retif(data->name == obj->name, FAIL,
121 "%s is already exist in the list!", obj->name);
124 /* Set internal data */
125 obj->wish_to_show = EINA_FALSE;
127 /* insert object to list */
128 EINA_LIST_REVERSE_FOREACH(icon_list, l, data) {
129 if (data->priority == obj->priority
130 && data->always_top == EINA_TRUE)
133 if (data->priority <= obj->priority) {
134 icon_list = eina_list_append_relative_list(
136 return eina_error_get();
139 icon_list = eina_list_prepend(icon_list, obj);
142 EINA_LIST_REVERSE_FOREACH(nonfixed_icon_list, l, data) {
143 retif(data->name == obj->name, FAIL,
144 "%s is already exist in the list!", obj->name);
147 /* Set internal data */
148 obj->wish_to_show = EINA_FALSE;
150 /* insert object to list */
151 EINA_LIST_REVERSE_FOREACH(nonfixed_icon_list, l, data) {
152 if (data->priority == obj->priority &&
153 data->always_top == EINA_TRUE)
156 if (data->priority <= obj->priority) {
158 eina_list_append_relative_list(
159 nonfixed_icon_list, obj, l);
160 return eina_error_get();
163 /* if finding condition is failed, append it at tail */
164 nonfixed_icon_list = eina_list_prepend(nonfixed_icon_list, obj);
167 return eina_error_get();
170 int indicator_icon_list_remove(Indicator_Icon_Object *obj)
172 if (obj->fixed == EINA_TRUE) {
173 retif(icon_list == NULL
174 || obj == NULL, FAIL, "Invalid parameter!");
175 icon_list = eina_list_remove(icon_list, obj);
177 retif(nonfixed_icon_list == NULL
178 || obj == NULL, FAIL, "Invalid parameter!");
179 nonfixed_icon_list = eina_list_remove(nonfixed_icon_list, obj);
182 return eina_error_get();
185 Indicator_Icon_Object *indicator_get_prev_icon(Indicator_Icon_Object * obj)
188 Indicator_Icon_Object *data;
190 retif(obj == NULL || obj->name == NULL, NULL, "Invalid parameter!");
192 if (obj->fixed == EINA_TRUE) {
193 EINA_LIST_FOREACH(icon_list, l, data) {
194 if (data->name == obj->name)
198 EINA_LIST_FOREACH(nonfixed_icon_list, l, data) {
199 if (data->name == obj->name)
204 retif(l == NULL, NULL, "Cannot find %s in icon list!", obj->name);
206 for (l = eina_list_prev(l), data = eina_list_data_get(l);
207 l; l = eina_list_prev(l), data = eina_list_data_get(l)) {
208 if (obj->priority == data->priority
209 && indicator_util_is_show_icon(data))
215 Indicator_Icon_Object *indicator_get_last_shown_icon(void)
218 Indicator_Icon_Object *data;
220 retif(icon_list == NULL, NULL, "Invalid parameter!");
222 EINA_LIST_REVERSE_FOREACH(icon_list, l, data) {
223 if (indicator_util_is_show_icon(data))
229 Indicator_Icon_Object *indicator_get_first_shown_icon(void)
232 Indicator_Icon_Object *data;
234 retif(icon_list == NULL, NULL, "Invalid parameter!");
236 EINA_LIST_FOREACH(icon_list, l, data) {
237 if (indicator_util_is_show_icon(data))
243 Indicator_Icon_Object *indicator_get_hidden_icon(void)
246 Indicator_Icon_Object *data;
249 retif(icon_list == NULL, NULL, "Invalid parameter!");
251 EINA_LIST_REVERSE_FOREACH(icon_list, l, data) {
252 if (indicator_util_is_show_icon(data)) {
253 prio = data->priority;
258 for (l = eina_list_next(l), data = eina_list_data_get(l);
259 l; l = eina_list_next(l), data = eina_list_data_get(l)) {
260 if (data->wish_to_show == EINA_TRUE && data->priority != prio)
266 Indicator_Icon_Object
267 *indicator_get_shown_same_priority_icon_in_fixed_view_list(int prio)
270 Indicator_Icon_Object *data;
272 retif(icon_list == NULL, NULL, "Invalid parameter!");
274 EINA_LIST_FOREACH(icon_list, l, data) {
275 if (data->priority == prio && data->wish_to_show == EINA_TRUE)
281 Indicator_Icon_Object
282 *indicator_get_wish_to_show_icon(Indicator_Icon_Object *obj)
285 Indicator_Icon_Object *data;
287 DBG("indicator_get_wish_to_show_icon!");
288 retif(obj == NULL, NULL, "Invalid parameter!");
290 if (obj->fixed == EINA_TRUE) {
291 EINA_LIST_REVERSE_FOREACH(icon_list, l, data) {
292 if (data->priority == obj->priority
293 && data->wish_to_show == EINA_TRUE
294 && data->exist_in_view == EINA_FALSE) {
300 EINA_LIST_REVERSE_FOREACH(nonfixed_icon_list, l, data) {
301 if (data->wish_to_show == EINA_TRUE
302 && data->exist_in_view == EINA_FALSE)
309 Indicator_Icon_Object
310 *indicator_get_wish_to_remove_icon(Indicator_Icon_Object *obj)
313 Indicator_Icon_Object *data;
315 retif(obj == NULL, NULL, "Invalid parameter!");
317 if (obj->fixed == EINA_TRUE) {
318 EINA_LIST_REVERSE_FOREACH(icon_list, l, data) {
319 if (data->priority == obj->priority
320 && data->wish_to_show == EINA_TRUE)
325 /* find lowest priority of icon */
326 EINA_LIST_FOREACH(nonfixed_icon_list, l, data) {
327 if (data->wish_to_show == EINA_TRUE
328 && data->exist_in_view == EINA_TRUE)
336 Indicator_Icon_Object
337 *indicator_get_lowest_priority_icon_in_wish_show_list(void)
340 Indicator_Icon_Object *data;
342 EINA_LIST_FOREACH(nonfixed_icon_list, l, data) {
343 if (data->wish_to_show == EINA_TRUE
344 && data->exist_in_view == EINA_FALSE) {
345 DBG("Get Lowest Priority Item : %s", data->name);
353 Indicator_Icon_Object
354 *indicator_get_highest_priority_icon_in_wish_show_list(void)
357 Indicator_Icon_Object *data;
359 EINA_LIST_REVERSE_FOREACH(nonfixed_icon_list, l, data) {
360 if (data->wish_to_show == EINA_TRUE
361 && data->exist_in_view == EINA_FALSE) {
362 DBG("Get Highest Priority Item : %s", data->name);
370 int indicator_get_same_priority_icons(Eina_List **result,
371 Indicator_Icon_Object *obj)
374 Indicator_Icon_Object *data;
376 retif(icon_list == NULL || obj == NULL, FAIL, "Invalid parameter!");
378 EINA_LIST_FOREACH(icon_list, l, data) {
379 if (data->priority == obj->priority)
380 *result = eina_list_append(*result, data);
383 if (eina_list_count(*result) == 1)