elm: Refactoring. Removed trailing whitespaces.
[framework/uifw/elementary.git] / src / lib / elc_naviframe.c
1 #include <Elementary.h>
2 #include "elm_priv.h"
3
4 typedef struct _Widget_Data Widget_Data;
5
6 struct _Widget_Data
7 {
8    Eina_List    *stack;
9    Evas_Object  *base;
10    Eina_Bool     preserve: 1;
11    Eina_Bool     pass_events: 1;
12 };
13
14 struct _Elm_Naviframe_Item
15 {
16    Elm_Widget_Item    base;
17    Evas_Object       *title;
18    Evas_Object       *content;
19    const char        *title_label;
20    const char        *title_sublabel;
21    Evas_Object       *title_prev_btn;
22    Evas_Object       *title_next_btn;
23    Evas_Object       *title_icon;
24    const char        *style;
25    Eina_Bool          back_btn: 1;
26    Eina_Bool          title_visible: 1;
27 };
28
29 static const char *widtype = NULL;
30
31 static const char SIG_TRANSITION_FINISHED[] = "transition,finished";
32 static const char SIG_TITLE_CLICKED[] = "title,clicked";
33
34 static const Evas_Smart_Cb_Description _signals[] = {
35        {SIG_TRANSITION_FINISHED, ""},
36        {SIG_TITLE_CLICKED, ""},
37        {NULL, NULL}
38 };
39
40 #define ELM_NAVIFRAME_ITEM_CHECK_RETURN(it, ...) \
41    ELM_WIDGET_ITEM_CHECK_OR_RETURN((Elm_Widget_Item *) it, __VA_ARGS__); \
42    ELM_CHECK_WIDTYPE(it->base.widget, widtype) __VA_ARGS__;
43
44 static void _del_hook(Evas_Object *obj);
45 static void _theme_hook(Evas_Object *obj);
46 static void _disable_hook(Evas_Object *obj);
47 static void _sizing_eval(Evas_Object *obj);
48 static void _item_sizing_eval(Elm_Naviframe_Item *it);
49 static void _move(void *data, Evas *e, Evas_Object *obj, void *event_info);
50 static void _resize(void *data,
51                     Evas *e,
52                     Evas_Object *obj,
53                     void *event_info);
54 static void _title_clicked(void *data, Evas_Object *obj,
55                            const char *emission,
56                            const char *source);
57 static void _back_btn_clicked(void *data,
58                               Evas_Object *obj,
59                               void *event_info);
60 static Evas_Object *_back_btn_new(Evas_Object *obj);
61 static void _title_prev_btn_del(void *data,
62                                 Evas *e,
63                                 Evas_Object *obj,
64                                 void *event_info);
65 static void _title_next_btn_del(void *data,
66                                 Evas *e,
67                                 Evas_Object *obj,
68                                 void *event_info);
69 static void _title_icon_del(void *data,
70                             Evas *e,
71                             Evas_Object *obj,
72                             void *event_info);
73 static void _content_del(void *data,
74                          Evas *e,
75                          Evas_Object *obj,
76                          void *event_info);
77 static void _title_prev_btn_set(Elm_Naviframe_Item *it,
78                                 Evas_Object *btn,
79                                 Eina_Bool back_btn);
80 static void _title_next_btn_set(Elm_Naviframe_Item *it, Evas_Object *btn);
81 static void _item_del(Elm_Naviframe_Item *it);
82 static void _pushed_finished(void *data,
83                              Evas_Object *obj,
84                              const char *emission,
85                              const char *source);
86 static void _popped_finished(void *data,
87                              Evas_Object *obj,
88                              const char *emission,
89                              const char *source);
90 static void _show_finished(void *data,
91                            Evas_Object *obj,
92                            const char *emission,
93                            const char *source);
94
95 static void
96 _del_hook(Evas_Object *obj)
97 {
98    Widget_Data *wd;
99    Eina_List *list;
100    Elm_Naviframe_Item *it;
101
102    wd = elm_widget_data_get(obj);
103    if (!wd) return;
104
105    EINA_LIST_FOREACH(wd->stack, list, it)
106      _item_del(it);
107    eina_list_free(wd->stack);
108    free(wd);
109 }
110
111 static void
112 _theme_hook(Evas_Object *obj __UNUSED__)
113 {
114    //FIXME:
115 }
116
117 static void
118 _disable_hook(Evas_Object *obj __UNUSED__)
119 {
120    //FIXME:
121 }
122
123 static void
124 _sizing_eval(Evas_Object *obj)
125 {
126    Widget_Data *wd;
127    Eina_List *list;
128    Elm_Naviframe_Item *it;
129    wd  = elm_widget_data_get(obj);
130    if (!wd) return;
131
132    list = eina_list_last(wd->stack);
133    if (!list) return;
134
135    EINA_LIST_FOREACH(wd->stack, list, it)
136      _item_sizing_eval(it);
137 }
138
139 static void
140 _item_sizing_eval(Elm_Naviframe_Item *it)
141 {
142    Widget_Data *wd;
143    Evas_Coord x, y, w, h;
144    if (!it) return;
145
146    wd = elm_widget_data_get(it->base.widget);
147    if (!wd) return;
148
149    evas_object_geometry_get(it->base.widget, &x, &y, &w, &h);
150    evas_object_move(it->base.view, x, y);
151    evas_object_resize(it->base.view, w, h);
152 }
153
154 static void
155 _move(void *data __UNUSED__,
156       Evas *e __UNUSED__,
157       Evas_Object *obj,
158       void *event_info __UNUSED__)
159 {
160    _sizing_eval(obj);
161 }
162
163 static void
164 _resize(void *data __UNUSED__,
165         Evas *e __UNUSED__,
166         Evas_Object *obj,
167         void *event_info __UNUSED__)
168 {
169    _sizing_eval(obj);
170 }
171
172 static void
173 _title_clicked(void *data,
174                Evas_Object *obj __UNUSED__,
175                const char *emission __UNUSED__,
176                const char *source __UNUSED__)
177 {
178    Elm_Naviframe_Item *it = data;
179    evas_object_smart_callback_call(it->base.widget, SIG_TITLE_CLICKED, it);
180 }
181
182 static void
183 _back_btn_clicked(void *data,
184                   Evas_Object *obj __UNUSED__,
185                   void *event_info __UNUSED__)
186 {
187    elm_naviframe_item_pop(data);
188 }
189
190 static Evas_Object *
191 _back_btn_new(Evas_Object *obj)
192 {
193    Evas_Object *btn;
194    char buf[256];   //FIXME: How to guarantee the size of style name?
195    btn = elm_button_add(obj);
196    if (!btn) return NULL;
197    evas_object_smart_callback_add(btn, "clicked", _back_btn_clicked, obj);
198    snprintf(buf, sizeof(buf), "naviframe/back_btn/%s", elm_widget_style_get(obj));
199    elm_object_style_set(btn, buf);
200    return btn;
201 }
202
203 static void
204 _title_prev_btn_del(void *data,
205                     Evas *e __UNUSED__,
206                     Evas_Object *obj __UNUSED__,
207                     void *event_info __UNUSED__)
208 {
209    Elm_Naviframe_Item *it = data;
210    it->back_btn = EINA_FALSE;
211    it->title_prev_btn = NULL;
212 }
213
214 static void
215 _title_next_btn_del(void *data,
216                     Evas *e __UNUSED__,
217                     Evas_Object *obj __UNUSED__,
218                     void *event_info __UNUSED__)
219 {
220    Elm_Naviframe_Item *it = data;
221    it->title_next_btn = NULL;
222 }
223
224 static void
225 _title_icon_del(void *data,
226                 Evas *e __UNUSED__,
227                 Evas_Object *obj __UNUSED__,
228                 void *event_info __UNUSED__)
229 {
230    Elm_Naviframe_Item *it = data;
231    it->title_icon = NULL;
232    edje_object_signal_emit(it->base.view, "elm,state,icon,hide", "elm");
233 }
234
235 static void
236 _content_del(void *data,
237              Evas *e __UNUSED__,
238              Evas_Object *obj __UNUSED__,
239              void *event_info __UNUSED__)
240 {
241    Elm_Naviframe_Item *it = data;
242    it->content = NULL;
243    edje_object_signal_emit(it->base.view, "elm,state,content,hide", "elm");
244 }
245
246 static void
247 _title_prev_btn_set(Elm_Naviframe_Item *it, Evas_Object *btn, Eina_Bool back_btn)
248 {
249    char buf[256];   //FIXME: How to guarantee the size of style name?
250
251    if (it->title_prev_btn == btn) return;
252
253    if (it->title_prev_btn)
254      evas_object_del(it->title_prev_btn);
255
256    it->title_prev_btn = btn;
257
258    if (!btn) return;
259
260    if (!back_btn)
261      {
262         snprintf(buf,
263                  sizeof(buf),
264                  "naviframe/prev_btn/%s",
265                  elm_widget_style_get(it->base.widget));
266         elm_object_style_set(btn, buf);
267      }
268    elm_widget_sub_object_add(it->base.widget, btn);
269    evas_object_event_callback_add(btn,
270                                   EVAS_CALLBACK_DEL,
271                                   _title_prev_btn_del,
272                                   it);
273    edje_object_part_swallow(it->title, "elm.swallow.prev_btn", btn);
274    it->back_btn = back_btn;
275 }
276
277 static void
278 _title_next_btn_set(Elm_Naviframe_Item *it, Evas_Object *btn)
279 {
280    char buf[256];   //FIXME: How to guarantee the size of style name?
281
282    if (it->title_next_btn == btn) return;
283
284    if (it->title_next_btn)
285      evas_object_del(it->title_next_btn);
286
287    it->title_next_btn = btn;
288
289    if (!btn) return;
290
291    snprintf(buf,
292             sizeof(buf),
293             "naviframe/next_btn/%s",
294             elm_widget_style_get(it->base.widget));
295    elm_object_style_set(btn, buf);
296    elm_widget_sub_object_add(it->base.widget, btn);
297    evas_object_event_callback_add(btn,
298                                   EVAS_CALLBACK_DEL,
299                                   _title_next_btn_del,
300                                   it);
301    edje_object_part_swallow(it->title, "elm.swallow.next_btn", btn);
302 }
303
304 static void
305 _item_del(Elm_Naviframe_Item *it)
306 {
307    Widget_Data *wd;
308
309    if (!it) return;
310
311    wd = elm_widget_data_get(it->base.widget);
312    if (!wd) return;
313
314    if (it->title_prev_btn)
315      evas_object_del(it->title_prev_btn);
316    if (it->title_next_btn)
317      evas_object_del(it->title_next_btn);
318    if (it->title_icon)
319      evas_object_del(it->title_icon);
320    if ((it->content) && (!wd->preserve))
321      evas_object_del(it->content);
322
323    evas_object_del(it->title);
324    evas_object_del(it->base.view);
325
326    wd->stack = eina_list_remove(wd->stack, it);
327
328    free(it);
329 }
330
331 static void
332 _pushed_finished(void *data,
333                  Evas_Object *obj __UNUSED__,
334                  const char *emission __UNUSED__,
335                  const char *source __UNUSED__)
336 {
337    Elm_Naviframe_Item *it = data;
338    if (!it) return;
339    evas_object_hide(it->base.view);
340 }
341
342 static void
343 _popped_finished(void *data,
344                  Evas_Object *obj __UNUSED__,
345                  const char *emission __UNUSED__,
346                  const char *source __UNUSED__)
347 {
348    _item_del(data);
349 }
350
351 static void
352 _show_finished(void *data,
353                Evas_Object *obj __UNUSED__,
354                const char *emission __UNUSED__,
355                const char *source __UNUSED__)
356 {
357    Elm_Naviframe_Item *it;
358    Widget_Data *wd;
359
360    it = data;
361    if (!it) return;
362    wd =  elm_widget_data_get(it->base.widget);
363    if (!wd) return;
364
365    evas_object_smart_callback_call(it->base.widget,
366                                    SIG_TRANSITION_FINISHED,
367                                    (void *) EINA_TRUE);
368    if (wd->pass_events)
369      evas_object_pass_events_set(wd->base, EINA_FALSE);
370 }
371
372 EAPI Evas_Object *
373 elm_naviframe_add(Evas_Object *parent)
374 {
375    Evas_Object *obj;
376    Evas *e;
377    Widget_Data *wd;
378
379    ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL);
380    ELM_SET_WIDTYPE(widtype, "naviframe");
381    elm_widget_type_set(obj, "naviframe");
382    elm_widget_sub_object_add(parent, obj);
383    elm_widget_data_set(obj, wd);
384    elm_widget_del_hook_set(obj, _del_hook);
385    elm_widget_disable_hook_set(obj, _disable_hook);
386    elm_widget_theme_hook_set(obj, _theme_hook);
387
388    //base
389    wd->base = edje_object_add(e);
390    elm_widget_resize_object_set(obj, wd->base);
391    _elm_theme_object_set(obj, wd->base, "naviframe", "base", "default");
392
393    evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, _move, obj);
394    evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _resize, obj);
395    evas_object_smart_callbacks_descriptions_set(obj, _signals);
396
397    wd->pass_events = EINA_TRUE;
398
399    return obj;
400 }
401
402 EAPI Elm_Naviframe_Item *
403 elm_naviframe_item_push(Evas_Object *obj, const char *title_label, Evas_Object *prev_btn, Evas_Object *next_btn, Evas_Object *content, const char *item_style)
404 {
405    ELM_CHECK_WIDTYPE(obj, widtype) NULL;
406    Widget_Data *wd;
407    Elm_Naviframe_Item *prev_it, *it;
408
409    wd = elm_widget_data_get(obj);
410    if (!wd) return NULL;
411
412    //create item
413    it = elm_widget_item_new(obj, Elm_Naviframe_Item);
414    if (!it)
415      {
416         ERR("Failed to allocate new item! : naviframe=%p", obj);
417         return NULL;
418      }
419    //item base layout
420    it->base.view = edje_object_add(evas_object_evas_get(obj));
421    evas_object_smart_member_add(it->base.view, wd->base);
422    elm_widget_sub_object_add(obj, it->base.view);
423    edje_object_signal_callback_add(it->base.view,
424                                    "elm,action,show,finished",
425                                    "",
426                                    _show_finished, it);
427    edje_object_signal_callback_add(it->base.view,
428                                    "elm,action,pushed,finished",
429                                    "",
430                                    _pushed_finished, it);
431    edje_object_signal_callback_add(it->base.view,
432                                    "elm,action,popped,finished",
433                                    "",
434                                    _popped_finished, it);
435    elm_naviframe_item_style_set(it, item_style);
436
437    //title
438    it->title = edje_object_add(evas_object_evas_get(obj));
439    elm_widget_sub_object_add(obj, it->title);
440    _elm_theme_object_set(obj,
441                          it->title, "naviframe",
442                          "title",
443                          elm_widget_style_get(obj));
444    edje_object_signal_callback_add(it->title,
445                                    "elm,action,clicked",
446                                    "elm",
447                                    _title_clicked, it);
448
449    elm_naviframe_item_title_label_set(it, title_label);
450
451    //title buttons
452    if ((!prev_btn) && (eina_list_count(wd->stack)))
453      {
454         prev_btn = _back_btn_new(obj);
455         _title_prev_btn_set(it, prev_btn, EINA_TRUE);
456      }
457    else
458      _title_prev_btn_set(it, prev_btn, EINA_FALSE);
459
460    _title_next_btn_set(it, next_btn);
461    edje_object_part_swallow(it->base.view, "elm.swallow.title", it->title);
462
463    elm_naviframe_item_content_set(it, content);
464
465    _item_sizing_eval(it);
466    evas_object_show(it->base.view);
467
468    prev_it = elm_naviframe_top_item_get(obj);
469    if (prev_it)
470      {
471         if (wd->pass_events)
472           evas_object_pass_events_set(wd->base, EINA_TRUE);
473         edje_object_signal_emit(prev_it->base.view,
474                                 "elm,state,pushed",
475                                 "elm");
476         edje_object_signal_emit(it->base.view,
477                                 "elm,state,show",
478                                 "elm");
479      }
480    else
481      edje_object_signal_emit(it->base.view, "elm,state,visible", "elm");
482    it->title_visible = EINA_TRUE;
483    wd->stack = eina_list_append(wd->stack, it);
484    return it;
485 }
486
487 EAPI Evas_Object *
488 elm_naviframe_item_pop(Evas_Object *obj)
489 {
490    ELM_CHECK_WIDTYPE(obj, widtype) NULL;
491    Elm_Naviframe_Item *it, *prev_it;
492    Widget_Data *wd;
493    Evas_Object *content = NULL;
494
495    wd = elm_widget_data_get(obj);
496    if (!wd) return NULL;
497
498    it = elm_naviframe_top_item_get(obj);
499    if (!it) return NULL;
500    wd->stack = eina_list_remove(wd->stack, it);
501
502    if (wd->preserve)
503      content = it->content;
504
505    prev_it = elm_naviframe_top_item_get(obj);
506    if (prev_it)
507      {
508         if (wd->pass_events)
509           evas_object_pass_events_set(wd->base, EINA_TRUE);
510         evas_object_show(prev_it->base.view);
511         evas_object_raise(prev_it->base.view);
512         edje_object_signal_emit(prev_it->base.view,
513                                 "elm,state,show",
514                                 "elm");
515         edje_object_signal_emit(it->base.view, "elm,state,popped", "elm");
516      }
517    else
518      _item_del(it);
519
520    return content;
521 }
522
523 EAPI void
524 elm_naviframe_content_preserve_on_pop_set(Evas_Object *obj, Eina_Bool preserve)
525 {
526    ELM_CHECK_WIDTYPE(obj, widtype);
527    Widget_Data *wd = elm_widget_data_get(obj);
528    if (!wd) return;
529    wd->preserve = !!preserve;
530 }
531
532 EAPI Eina_Bool
533 elm_naviframe_content_preserve_on_pop_get(const Evas_Object *obj)
534 {
535    ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
536    Widget_Data *wd = elm_widget_data_get(obj);
537    if (!wd) return EINA_FALSE;
538    return wd->preserve;
539 }
540
541 EAPI void
542 elm_naviframe_item_content_set(Elm_Naviframe_Item *it, Evas_Object *content)
543 {
544    ELM_NAVIFRAME_ITEM_CHECK_RETURN(it);
545
546    if (it->content == content) return;
547    if (it->content) evas_object_del(it->content);
548    elm_widget_sub_object_add(it->base.widget, content);
549    edje_object_part_swallow(it->base.view, "elm.swallow.content", content);
550    if (content)
551      edje_object_signal_emit(it->base.view,
552                              "elm,state,content,show",
553                              "elm");
554    else
555      edje_object_signal_emit(it->base.view,
556                              "elm,state,content,hide",
557                              "elm");
558    evas_object_event_callback_add(content,
559                                   EVAS_CALLBACK_DEL,
560                                   _content_del,
561                                   it);
562    it->content = content;
563    _item_sizing_eval(it);
564 }
565
566 EAPI Evas_Object *
567 elm_naviframe_item_content_get(const Elm_Naviframe_Item *it)
568 {
569    ELM_NAVIFRAME_ITEM_CHECK_RETURN(it, NULL);
570    return it->content;
571 }
572
573 EAPI void
574 elm_naviframe_item_title_label_set(Elm_Naviframe_Item *it, const char *label)
575 {
576    ELM_NAVIFRAME_ITEM_CHECK_RETURN(it);
577
578    edje_object_part_text_set(it->title, "elm.text.title", label);
579    if (label)
580      edje_object_signal_emit(it->title, "elm,state,title,show", "elm");
581    else
582      edje_object_signal_emit(it->title, "elm,state,title,hidew", "elm");
583
584    eina_stringshare_replace(&it->title_label, label);
585    _item_sizing_eval(it);
586 }
587
588 EAPI const char *
589 elm_naviframe_item_title_label_get(const Elm_Naviframe_Item *it)
590 {
591    ELM_NAVIFRAME_ITEM_CHECK_RETURN(it, NULL);
592    return it->title_label;
593 }
594
595 EAPI void
596 elm_naviframe_item_subtitle_label_set(Elm_Naviframe_Item *it, const char *label)
597 {
598    ELM_NAVIFRAME_ITEM_CHECK_RETURN(it);
599
600    edje_object_part_text_set(it->title, "elm.text.subtitle", label);
601    if (label)
602      edje_object_signal_emit(it->title, "elm,state,subtitle,show", "elm");
603    else
604      edje_object_signal_emit(it->title, "elm,state,subtitle,hide", "elm");
605
606    eina_stringshare_replace(&it->title_sublabel, label);
607    _item_sizing_eval(it);
608 }
609
610 EAPI const char *
611 elm_naviframe_item_subtitle_label_get(const Elm_Naviframe_Item *it)
612 {
613    ELM_NAVIFRAME_ITEM_CHECK_RETURN(it, NULL);
614    return it->title_sublabel;
615 }
616
617 EAPI Elm_Naviframe_Item*
618 elm_naviframe_top_item_get(const Evas_Object *obj)
619 {
620    ELM_CHECK_WIDTYPE(obj, widtype) NULL;
621    Widget_Data *wd = elm_widget_data_get(obj);
622    if ((!wd) || (!wd->stack)) return NULL;
623    return eina_list_last(wd->stack)->data;
624 }
625
626 EAPI Elm_Naviframe_Item*
627 elm_naviframe_bottom_item_get(const Evas_Object *obj)
628 {
629    ELM_CHECK_WIDTYPE(obj, widtype) NULL;
630    Widget_Data *wd = elm_widget_data_get(obj);
631    if (!wd) return NULL;
632    return NULL;
633 }
634
635 EAPI void
636 elm_naviframe_item_button_set(Elm_Naviframe_Item *it, Evas_Object *btn, Elm_Naviframe_Button_Type btn_type)
637 {
638    ELM_NAVIFRAME_ITEM_CHECK_RETURN(it);
639
640    switch(btn_type)
641      {
642         case ELM_NAVIFRAME_PREV_BUTTON:
643           _title_prev_btn_set(it, btn, EINA_FALSE);
644           break;
645         case ELM_NAVIFRAME_NEXT_BUTTON:
646           _title_next_btn_set(it, btn);
647           break;
648         default:
649           WRN("Button type is invalid! : naviframe=%p", it->base.widget);
650           break;
651      }
652    _item_sizing_eval(it);
653 }
654
655 EAPI Evas_Object *
656 elm_naviframe_item_button_get(const Elm_Naviframe_Item *it, Elm_Naviframe_Button_Type btn_type)
657 {
658    ELM_NAVIFRAME_ITEM_CHECK_RETURN(it, NULL);
659
660    switch(btn_type)
661      {
662         case ELM_NAVIFRAME_PREV_BUTTON:
663            return it->title_prev_btn;
664         case ELM_NAVIFRAME_NEXT_BUTTON:
665            return it->title_next_btn;
666         default:
667            WRN("Button type is invalid! : naviframe=%p", it->base.widget);
668            break;
669      }
670    return NULL;
671 }
672
673 EAPI void
674 elm_naviframe_item_icon_set(Elm_Naviframe_Item *it, Evas_Object *icon)
675 {
676    ELM_NAVIFRAME_ITEM_CHECK_RETURN(it);
677
678    Widget_Data *wd = elm_widget_data_get(it->base.widget);
679    if (!wd) return;
680
681    if (it->title_icon == icon) return;
682    if (it->title_icon) evas_object_del(it->title_icon);
683    it->title_icon = icon;
684    if (!icon)
685      {
686         edje_object_signal_emit(it->title,
687                                 "elm,state,icon,hide",
688                                 "elm");
689         return;
690      }
691    elm_widget_sub_object_add(it->base.widget, icon);
692    edje_object_part_swallow(it->title, "elm.swallow.icon", icon);
693    edje_object_signal_emit(it->title, "elm,state,icon,show", "elm");
694
695    evas_object_event_callback_add(icon, EVAS_CALLBACK_DEL, _title_icon_del, it);
696    _item_sizing_eval(it);
697 }
698
699 EAPI Evas_Object *
700 elm_naviframe_item_icon_get(const Elm_Naviframe_Item *it)
701 {
702    ELM_NAVIFRAME_ITEM_CHECK_RETURN(it, NULL);
703    return it->title_icon;
704 }
705
706 EAPI void
707 elm_naviframe_item_style_set(Elm_Naviframe_Item *it, const char *item_style)
708 {
709    ELM_NAVIFRAME_ITEM_CHECK_RETURN(it);
710
711    char buf[256];
712
713    if (!item_style) sprintf(buf, "item/basic");
714    else
715      {
716         if (strlen(item_style) > sizeof(buf))
717           WRN("too much long style name! : naviframe=%p", it->base.widget);
718         else
719           sprintf(buf, "item/%s", item_style);
720      }
721    _elm_theme_object_set(it->base.widget,
722                          it->base.view,
723                          "naviframe",
724                          buf,
725                          elm_widget_style_get(it->base.widget));
726 }
727
728 EAPI const char *
729 elm_naviframe_item_style_get(const Elm_Naviframe_Item *it)
730 {
731    ELM_NAVIFRAME_ITEM_CHECK_RETURN(it, NULL);
732    return it->style;
733 }
734
735 EAPI void
736 elm_naviframe_item_title_visible_set(Elm_Naviframe_Item *it, Eina_Bool visible)
737 {
738    ELM_NAVIFRAME_ITEM_CHECK_RETURN(it);
739
740    visible = !!visible;
741    if (it->title_visible == visible) return;
742
743    if (visible)
744      edje_object_signal_emit(it->base.view, "elm,state,title,show", "elm");
745    else
746      edje_object_signal_emit(it->base.view, "elm,state,title,hide", "elm");
747
748    it->title_visible = visible;
749 }
750
751 EAPI Eina_Bool
752 elm_naviframe_item_title_visible_get(const Elm_Naviframe_Item *it)
753 {
754    ELM_NAVIFRAME_ITEM_CHECK_RETURN(it, EINA_FALSE);
755    return it->title_visible;
756 }
757 /*
758 EAPI void
759 elm_naviframe_extension_set(Elm_Naviframe_Item *it, const char *swallow, Evas_Object *extension)
760 {
761    ELM_NAVIFRAME_ITEM_CHECK_RETURN(it);
762    Evas_Object *prev = elm_naviframe_extension_get(it, swallow);
763    if (prev) evas_object_del(prev);
764    edje_object_part_swallow(it->base.view, swallow, extension);
765    _sizing_eval(it->base.view);
766 }
767
768 EAPI Evas_Object *
769 elm_naviframe_extension_unset(Elm_Naviframe_Item *it, const char *swallow)
770 {
771    ELM_NAVIFRAME_ITEM_CHECK_RETURN(it, NULL);
772    Evas_Object *part_obj;
773    part_obj  = edje_object_part_swallow_get(it->base.view, swallow);
774    if (!part_obj) return NULL;
775    edje_object_part_unswallow(it->base.view, part_obj);
776    _sizing_eval(it->base.widget);
777    return part_obj;
778 }
779
780 EAPI Evas_Object *
781 elm_naviframe_extension_get(const Elm_Naviframe_Item *it, const char *swallow)
782 {
783    ELM_NAVIFRAME_ITEM_CHECK_RETURN(it, NULL);
784    Evas_Object *part_obj;
785    part_obj  = edje_object_part_swallow_get(it->base.view, swallow);
786    return part_obj;
787 }
788
789 EAPI void
790 elm_naviframe_item_promote(Elm_Naviframe_Item *it)
791 {
792 }
793
794 EAPI void
795 elm_naviframe_to_item_pop(Elm_Naviframe_Item *it)
796 {
797 }
798
799
800 EAPI void
801 elm_naviframe_extension_visible_set(Elm_Naviframe_Item *it, Eina_Bool visible)
802 {
803 }
804
805 EAPI Eina_Bool
806 elm_naviframe_extension_visible_get(const Elm_Naviframe_Item *it)
807 {
808 }
809 */