Tizen 2.0 Release
[profile/ivi/settings.git] / setting-common / src / setting-common-draw-naviframe.c
1 /*
2  * setting
3  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4  *
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
8  *
9  *     http://floralicense.org/license/
10  *
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.
16  */
17 #include <setting-common-draw-widget.h>
18 #include <glib.h>
19 #include <utilX.h>
20 #include <Ecore_X.h>
21
22 Evas_Object *setting_create_win_layout(Evas_Object *win_layout,
23                                        Evas_Object *win_obj)
24 {
25         Evas_Object *layout = NULL;
26
27         /*  Base Layout */
28         layout = elm_layout_add(win_obj);
29         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
30         setting_retvm_if(layout == NULL, FALSE, "layout == NULL");
31
32         elm_layout_theme_set(layout, "layout", "application", "default");
33
34         Evas_Object *bg = setting_create_bg(layout, win_obj, "group_list");
35         elm_object_part_content_set(layout, "elm.swallow.bg", bg);
36         evas_object_show(layout);
37
38         return layout;
39 }
40
41 #define HALF_SCREEN_STR_LEN 20
42 #define ONE_THIRD_SCREEN_STR_LEN 13
43 Evas_Object *setting_create_navi_bar(Evas_Object *layout)
44 {
45
46         Evas_Object *navi = NULL;
47         navi = elm_naviframe_add(layout);
48
49         if (navi == NULL) {
50                 SETTING_TRACE(" *** elm_naviframe_add returns NULL *** ");
51                 return NULL;
52         }
53         elm_object_part_content_set(layout, "elm.swallow.content", navi);
54         evas_object_show(navi);
55         return navi;
56 }
57
58 Elm_Object_Item * setting_create_navi_bar_top_buttons(char *title_str,
59                                          char *lbutton_str,
60                                          char *rbutton_str,
61                                          char *mbutton_str,
62                                          setting_call_back_func lbutton_click_cb,
63                                          setting_call_back_func rbutton_click_cb,
64                                          setting_call_back_func mbutton_click_cb,
65                                          void *cb_data, Evas_Object *eo_view,/*any container obj */
66                                          Evas_Object *navigate_bar )
67 {
68         //SETTING_TRACE_BEGIN;
69         Evas_Object *l_button = NULL;
70         Evas_Object *r_button = NULL;
71         Evas_Object *m_button = NULL;
72         Elm_Object_Item *navi_it = NULL;
73
74         /*  create buttons */
75         l_button = setting_create_button(navigate_bar, lbutton_str,
76                                          NULL,
77                                          lbutton_click_cb, cb_data);
78
79         r_button = setting_create_button(navigate_bar, rbutton_str,
80                                          NULL,
81                                          rbutton_click_cb, cb_data);
82         m_button = setting_create_button(navigate_bar, mbutton_str,
83                                          NULL,
84                                          mbutton_click_cb, cb_data);
85
86         navi_it = elm_naviframe_item_push(navigate_bar, title_str,
87                                           NULL, NULL, eo_view,
88                                           NULL);
89         retv_if(!navi_it, NULL);
90
91         /*  arrange buttons into  navi_it*/
92         if (l_button) {
93                 elm_object_item_part_content_set(navi_it, "title_left_btn", l_button);
94         }
95         if (r_button) {
96                 elm_object_item_part_content_set(navi_it, "title_right_btn", r_button);
97         }
98         if (m_button) {
99                 elm_object_item_part_content_set(navi_it, "title_more_btn", m_button);
100         }
101         //remove '<-' button
102         Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
103         if (back_btn) {
104                 elm_object_item_part_content_set(navi_it, "prev_btn", NULL);
105                 if (back_btn) evas_object_del(back_btn);
106         }
107
108         return navi_it;
109 }
110 Elm_Object_Item *__create_navi_bar_bottom_buttons(char *title_str, char *lbutton_str, char *rbutton_str,
111                                      char *mbutton_str, setting_call_back_func lbutton_click_cb,
112                                      setting_call_back_func rbutton_click_cb,
113                                      setting_call_back_func mbutton_click_cb,
114                                      void *cb_data, Evas_Object *eo_view,/*any container obj */
115                                      Evas_Object *navigate_bar, /*the specialized navigation bar */
116                                      Evas_Object *titleobj)
117 {
118         SETTING_TRACE_BEGIN;
119         Elm_Object_Item *navi_it = NULL;
120         Evas_Object *mbtn = NULL;
121         Evas_Object *rbtn = NULL;
122         Evas_Object *lbtn = NULL;
123
124         /*  arrange buttons into  controlbar*/
125         if (0 == safeStrCmp(lbutton_str, _("IDS_COM_BODY_BACK"))) {     /*  do special handling */
126                 lbtn = setting_create_button(navigate_bar, lbutton_str,
127                                                  NAVI_BACK_BUTTON_STYLE,
128                                                  lbutton_click_cb, cb_data);
129
130                 navi_it = elm_naviframe_item_push(navigate_bar, title_str, lbtn, NULL, eo_view, NULL);  /* add new button */
131                 elm_object_style_set(lbtn, NAVI_BACK_BUTTON_STYLE);     /* take into effect */
132
133                 if (!rbutton_str && !mbutton_str) {
134                         //do nothing..
135                 } else if (rbutton_str && mbutton_str) {        /* both exist.. */
136                         mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
137                         rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
138                         elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
139                         elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn);
140                 } else if (rbutton_str) {       /* r_btn exist.. */
141                         rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
142                         elm_object_item_part_content_set(navi_it, "toolbar_button1", rbtn);
143                         //elm_object_item_part_content_set(navi_it, "toolbar_button2", setting_create_button(navigate_bar, "", NULL, NULL, NULL));
144                 } else if (mbutton_str) {       /* m_btn exist.. */
145                         mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
146                         elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
147                         //elm_object_item_part_content_set(navi_it, "toolbar_button2", setting_create_button(navigate_bar, "", NULL, NULL, NULL));
148                 }
149                 return navi_it;
150         }
151         navi_it = elm_naviframe_item_push(navigate_bar, title_str, NULL, NULL, eo_view, NULL);
152         if (lbutton_str && mbutton_str && rbutton_str)
153         {
154                 lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
155                 elm_object_item_part_content_set(navi_it, "toolbar_more_btn", lbtn);
156                 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
157                 elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
158                 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
159                 elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn);
160         }
161         else
162         {
163                 bool has_btn_flag = FALSE;//first "toolbar_button1", then "toolbar_button2".
164                 if (lbutton_str)
165                 {
166                         lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
167                         elm_object_item_part_content_set(navi_it, "toolbar_button1", lbtn);
168                         has_btn_flag = TRUE;
169                 }
170                 if (mbutton_str)
171                 {
172                         mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
173                         elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", mbtn);
174                         has_btn_flag = TRUE;
175                 }
176                 if (rbutton_str)
177                 {
178                         rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
179                         elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", rbtn);
180                         has_btn_flag = TRUE;
181                 }
182         }
183         return navi_it;
184
185 }
186
187
188 /**
189 * Create buttons on the specialized navigation bar
190 *
191 * @param[in] eo_view    navigation bar's content
192 * @param[in] controlbar   title obj of navigation bar
193 *
194 */
195 void setting_create_navi_bar_buttons(char *title_str, char *lbutton_str, char *rbutton_str,
196                                      char *mbutton_str, setting_call_back_func lbutton_click_cb,
197                                      setting_call_back_func rbutton_click_cb,
198                                      setting_call_back_func mbutton_click_cb,
199                                      void *cb_data, Evas_Object *eo_view,/*any container obj */
200                                      Evas_Object *navigate_bar, /*the specialized navigation bar */
201                                      Evas_Object *titleobj)
202 {                               /* controlbar */
203         __create_navi_bar_bottom_buttons(title_str, lbutton_str,
204                                        rbutton_str, mbutton_str,
205                                        lbutton_click_cb,
206                                        rbutton_click_cb,
207                                        mbutton_click_cb,
208                                        cb_data, eo_view,
209                                        navigate_bar, titleobj);
210         return;
211 }
212
213 /**
214 * The general API to create a layout with navigation bar,
215 *   which contents any evas container object(@param[eo_view]) as its content
216 *
217 * @param[in] eo_view    navigation bar's content
218 * @param[out] titleobj   title obj of navigation bar
219 *
220 * return main layout of UG or App..
221 */
222 Evas_Object *setting_create_layout_navi_bar(Evas_Object *win_layout, Evas_Object *win_obj, char *title_str, char *lbutton_str, char *rbutton_str, char *mbutton_str, setting_call_back_func lbutton_click_cb, setting_call_back_func rbutton_click_cb, setting_call_back_func mbutton_click_cb, void *cb_data, Evas_Object *eo_view,    /*any container obj constructed on any evas obj */
223                                             Evas_Object **navi_bar,
224                                             Evas_Object **titleobj)
225 {
226
227         Evas_Object *layout = setting_create_win_layout(win_layout, win_obj);
228         *navi_bar = setting_create_navi_bar(layout);
229
230         setting_create_navi_bar_buttons(title_str,
231                                         lbutton_str, rbutton_str, mbutton_str,
232                                         lbutton_click_cb, rbutton_click_cb,
233                                         mbutton_click_cb, cb_data, eo_view /*content */ ,
234                                         *navi_bar, NULL);
235         return layout;
236 }
237
238 /**
239 * The API to create a layout with navigation bar,
240 *   which contents a scroller object as its content
241 *
242 * @param[out] scroller   navigation bar's content
243 *
244 * @return a layout with a special navigation bar and at most 2 buttons
245 */
246
247 Evas_Object *setting_create_layout_navi_bar_scroller(Evas_Object *win_layout,
248                                                      Evas_Object *win_obj,
249                                                      char *title_str,
250                                                      char *lbutton_str,
251                                                      char *rbutton_str,
252                                                      setting_call_back_func
253                                                      lbutton_click_cb,
254                                                      setting_call_back_func
255                                                      rbutton_click_cb,
256                                                      void *cb_data,
257                                                      Evas_Object **scroller,
258                                                      Evas_Object **navi_bar)
259 {
260
261         Evas_Object *layout = setting_create_win_layout(win_layout, win_obj);
262         *navi_bar = setting_create_navi_bar(layout);
263
264         /*****/
265         /*  create scroller as CONTENT */
266         Evas_Object *scrl = NULL;
267         /* Evas_Object *ret = NULL; */
268         if (scroller != NULL) {
269                 /* scrl =*scroller = elm_scroller_add(win_layout); */
270                 scrl = *scroller = elm_scroller_add(layout);
271                 retvm_if(*scroller == NULL, NULL,
272                          "Cannot set scroller object as contento of layout");
273                 elm_scroller_bounce_set(*scroller, EINA_FALSE, EINA_TRUE);
274                 elm_scroller_policy_set(*scroller, ELM_SCROLLER_POLICY_OFF,
275                                         ELM_SCROLLER_POLICY_AUTO);
276                 evas_object_show(*scroller);
277         }
278
279         /*****/
280
281         setting_create_navi_bar_buttons(title_str,
282                                         lbutton_str, rbutton_str, NULL,
283                                         lbutton_click_cb, rbutton_click_cb,
284                                         NULL, cb_data, scrl /*content */ ,
285                                         *navi_bar, NULL);
286         return layout;
287 }
288
289 /**
290 * The API to create a layout with navigation bar ,
291 *       which contents a genlist object as its content
292 *
293 * @return a layout with a special navigation bar and at most 2 buttons
294 */
295 Evas_Object *setting_create_layout_navi_bar_genlist(Evas_Object *win_layout,
296                                                     Evas_Object *win_obj,
297                                                     char *title_str,
298                                                     char *lbutton_str,
299                                                     char *rbutton_str,
300                                                     setting_call_back_func
301                                                     lbutton_click_cb,
302                                                     setting_call_back_func
303                                                     rbutton_click_cb,
304                                                     void *cb_data,
305                                                     Evas_Object **genlist,
306                                                     Evas_Object **navi_bar)
307 {
308         /*  win_layout -> layout */
309         Evas_Object *layout = setting_create_win_layout(win_layout, win_obj);
310         *navi_bar = setting_create_navi_bar(layout);
311
312         *genlist = elm_genlist_add(*navi_bar);
313         elm_object_style_set(*genlist, "dialogue");
314         retvm_if(*genlist == NULL, NULL,
315                  "Cannot set scroller object as contento of layout");
316         elm_genlist_clear(*genlist);    /* first to clear list */
317
318         setting_create_navi_bar_buttons(title_str,
319                                         lbutton_str, rbutton_str, NULL,
320                                         lbutton_click_cb, rbutton_click_cb,
321                                         NULL, cb_data, *genlist, *navi_bar,
322                                         NULL);
323         return layout;
324 }
325
326
327 Elm_Object_Item *__push_navi_bar_bottom_buttons(char *title_str,
328                              char *lbutton_str, char *rbutton_str,
329                              char *mbutton_str,
330                              setting_call_back_func lbutton_click_cb,
331                              setting_call_back_func rbutton_click_cb,
332                              setting_call_back_func mbutton_click_cb,
333                              void *cb_data, Evas_Object *eo_view,
334                              Evas_Object *navigate_bar, Evas_Object **titleobj)
335 {
336         Elm_Object_Item *navi_it = NULL;
337         Evas_Object *mbtn = NULL;
338         Evas_Object *rbtn = NULL;
339         Evas_Object *lbtn = NULL;
340
341         /*  arrange buttons into  controlbar*/
342         if (0 == safeStrCmp(lbutton_str, _("IDS_COM_BODY_BACK"))) {
343                 lbtn = setting_create_button(navigate_bar, lbutton_str,
344                                                  NAVI_BACK_BUTTON_STYLE,
345                                                  lbutton_click_cb, cb_data);
346
347                 navi_it = elm_naviframe_item_push(navigate_bar, title_str, lbtn, NULL, eo_view, NULL);
348                 elm_object_style_set(lbtn, NAVI_BACK_BUTTON_STYLE);     /* take into effect */
349                 if (!rbutton_str && !mbutton_str)
350                 {
351                         return navi_it;
352                 }
353
354                 if (rbutton_str && mbutton_str) {
355
356                         mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
357                         rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
358                         elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
359                         elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn);
360                 } else if (rbutton_str) {
361                         rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
362                         elm_object_item_part_content_set(navi_it, "toolbar_button1", rbtn);
363                         //elm_object_item_part_content_set(navi_it, "toolbar_button2", setting_create_button(navigate_bar, "", NULL, NULL, NULL));
364                 } else if (mbutton_str) {
365                         mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
366                         elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
367                         //elm_object_item_part_content_set(navi_it, "toolbar_button2", setting_create_button(navigate_bar, "", NULL, NULL, NULL));
368                 }
369         } else {        /*  no need back button on navi_bar */
370                 navi_it = elm_naviframe_item_push(navigate_bar, title_str, NULL, NULL, eo_view, NULL);
371                 if (!lbutton_str && !rbutton_str && !mbutton_str) {
372                         return navi_it;
373                 }
374
375                 //remove '<-' button, insteadly using controlbar
376                 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
377                 elm_object_item_part_content_set(navi_it, "prev_btn", NULL);
378                 evas_object_del(back_btn);
379
380                 if (lbutton_str && mbutton_str && rbutton_str)
381                 {
382                         lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
383                         elm_object_item_part_content_set(navi_it, "toolbar_more_btn", lbtn);
384                         mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
385                         elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
386                         rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
387                         elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn);
388                 }
389                 else
390                 {
391                         bool has_btn_flag = FALSE;//first "toolbar_button1", then "toolbar_button2".
392                         if (lbutton_str)
393                         {
394                                 lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
395                                 elm_object_item_part_content_set(navi_it, "toolbar_button1", lbtn);
396                                 has_btn_flag = TRUE;
397                         }
398                         if (mbutton_str)
399                         {
400                                 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
401                                 elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", mbtn);
402                                 has_btn_flag = TRUE;
403                         }
404                         if (rbutton_str)
405                         {
406                                 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
407                                 elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", rbtn);
408                                 has_btn_flag = TRUE;
409                         }
410                 }
411         }
412
413         return navi_it;
414 }
415
416
417 /**
418 * The general API to push any evas object(@param[eo_view]) to the specialized navi_bar,
419 *   which contents at most 3 buttons
420 */
421 Elm_Object_Item *
422 setting_push_layout_navi_bar(char *title_str,
423                              char *lbutton_str, char *rbutton_str,
424                              char *mbutton_str,
425                              setting_call_back_func lbutton_click_cb,
426                              setting_call_back_func rbutton_click_cb,
427                              setting_call_back_func mbutton_click_cb,
428                              void *cb_data, Evas_Object *eo_view,
429                              Evas_Object *navi_bar, Evas_Object **titleobj)
430 {
431         return __push_navi_bar_bottom_buttons(title_str,
432                                      lbutton_str, rbutton_str,mbutton_str,
433                                      lbutton_click_cb,
434                                      rbutton_click_cb,
435                                      mbutton_click_cb,
436                                      cb_data, eo_view, navi_bar, titleobj);
437 }
438
439 /**
440 * The API to push a scroller object(@param[scroller]) to the specialized navi_bar,
441 *   which contents at most 2 buttons
442 */
443
444 void
445 setting_push_layout_navi_bar_scroller(Evas_Object *win_main, char *title_str,
446                                       char *lbutton_str, char *rbutton_str,
447                                       setting_call_back_func lbutton_click_cb,
448                                       setting_call_back_func rbutton_click_cb,
449                                       void *cb_data,
450                                       Evas_Object **scroller,
451                                       Evas_Object *navi_bar)
452 {
453         /*  create scroller */
454         Evas_Object *scrl = NULL;
455         if (scroller != NULL) {
456                 scrl = *scroller = elm_scroller_add(win_main);
457                 retm_if(*scroller == NULL,
458                         "Cannot set scroller as contento of layout");
459                 elm_scroller_bounce_set(*scroller, EINA_FALSE, EINA_TRUE);
460                 elm_scroller_policy_set(*scroller, ELM_SCROLLER_POLICY_OFF,
461                                         ELM_SCROLLER_POLICY_AUTO);
462
463                 evas_object_show(*scroller);
464         }
465
466         setting_push_layout_navi_bar(title_str,
467                                      lbutton_str, rbutton_str, NULL,
468                                      lbutton_click_cb,
469                                      rbutton_click_cb,
470                                      NULL, cb_data, scrl, navi_bar, NULL);
471 }
472
473 /**
474 * @ The API to push a genlist object(@param[genlist]) to the specialized navi_bar,
475 *   which contents at most 2 buttons
476 */
477 void
478 setting_push_layout_navi_bar_genlist(Evas_Object *win_layout,
479                                      Evas_Object *win_obj, char *title_str,
480                                      char *lbutton_str, char *rbutton_str,
481                                      setting_call_back_func lbutton_click_cb,
482                                      setting_call_back_func rbutton_click_cb,
483                                      void *cb_data, Evas_Object **genlist,
484                                      Evas_Object *navi_bar)
485 {
486         /*  create scroller */
487         Evas_Object *gl = NULL;
488         if (genlist != NULL) {
489                 gl = *genlist = elm_genlist_add(win_layout);
490                 elm_object_style_set(*genlist, "dialogue");
491                 retm_if(*genlist == NULL,
492                         "Cannot set scroller object  as contento of layout");
493                 elm_genlist_clear(gl);  /* first to clear list */
494         }
495
496         setting_push_layout_navi_bar(title_str,
497                                      lbutton_str, rbutton_str, NULL,
498                                      lbutton_click_cb,
499                                      rbutton_click_cb,
500                                      NULL, cb_data, gl, navi_bar, NULL);
501 }
502
503 /*
504 * To go to top of list in top view of navibar.
505 * @param[in] navibar
506 */
507 void setting_go_to_navibar_list_top(Evas_Object *navibar)
508 {
509         Elm_Object_Item *navi_it = elm_naviframe_top_item_get(navibar);
510         if (navi_it)
511         {
512                 Evas_Object *content = elm_object_item_part_content_get(navi_it, "default");
513
514                 Elm_Object_Item *first_item = elm_genlist_first_item_get(content);
515                 if (first_item)
516                 {
517                         elm_genlist_item_show(first_item, ELM_GENLIST_ITEM_SCROLLTO_TOP);
518                 }
519         }
520 }
521
522