1 #ifdef HAVE_CONFIG_H
2 # include "config.h"
3 #endif
4 
5 #include <Elementary.h>
6 #include "../cfg.h"
7 #include "../ecrire.h"
8 
9 static void _cleaning_cb(void *data, Evas_Object *obj, void *event_info);
10 static void _set_file_cb(void *data,
11                          Evas_Object *obj EINA_UNUSED,
12                          void *event_info);
13 
14 static Ecrire_Doc *_file_doc;
15 static Evas_Object *_inwin;
16 
17 static void
_cleaning_cb(void * data,Evas_Object * obj,void * event_info)18 _cleaning_cb(void *data, Evas_Object *obj, void *event_info)
19 {
20    void (*func) (void *, Evas_Object *, void *) = data;
21    func(_file_doc, obj, event_info);
22    evas_object_del(_inwin);  /* delete the test window */
23    _file_doc = NULL;
24 }
25 
26 static void
_set_file_cb(void * data,Evas_Object * obj EINA_UNUSED,void * event_info)27 _set_file_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
28 {
29   const char *file = elm_object_item_text_get(event_info);
30   evas_object_smart_callback_call((Evas_Object *)data,"done",(void *)file);
31 }
32 
33 void
ui_file_open_save_dialog_open(Ecrire_Doc * doc,Evas_Smart_Cb func,Eina_Bool save)34 ui_file_open_save_dialog_open(Ecrire_Doc *doc,
35                               Evas_Smart_Cb func,
36                               Eina_Bool save)
37 {
38    const char *file;
39    Eina_List *itr = NULL;
40    Evas_Coord h;
41    Evas_Coord w;
42    Evas_Object *fs;
43    Evas_Object *icon;
44    Evas_Object *sel;
45    Evas_Object *box;
46    Evas_Object *win;
47 
48    _file_doc = doc;
49    win = ecrire_win_get();
50    _inwin = elm_win_inwin_add(win);
51 
52    box = elm_box_add(_inwin);
53    elm_win_inwin_content_set(_inwin, box);
54    evas_object_show(box);
55 
56    sel = elm_hoversel_add(_inwin);
57    elm_hoversel_auto_update_set(sel,EINA_TRUE);
58    icon = elm_icon_add (_inwin);
59    if (elm_icon_standard_set (icon, "document-open-recent") ||
60        elm_icon_standard_set (icon, "document-multiple"))
61      {
62        elm_object_part_content_set(sel, "icon", icon);
63        evas_object_show (icon);
64      }
65    else
66      evas_object_del(icon);
67    elm_object_text_set(sel, _("Recent files"));
68    EINA_LIST_FOREACH(_ent_cfg->recent, itr, file)
69      {
70         elm_hoversel_item_add(sel, (char *)file, NULL, ELM_ICON_NONE, NULL, NULL);
71      }
72 
73    evas_object_size_hint_weight_set(sel, EVAS_HINT_EXPAND, 0);
74    evas_object_size_hint_align_set(sel, EVAS_HINT_FILL, EVAS_HINT_FILL);
75    elm_box_pack_start(box,sel);
76    evas_object_show(sel);
77 
78    fs = elm_fileselector_add(_inwin);
79    elm_fileselector_is_save_set(fs, EINA_TRUE);
80    if(save)
81      elm_layout_text_set(fs,"ok",_("Save"));
82    elm_fileselector_expandable_set(fs, EINA_FALSE);
83    if(doc->path)
84      elm_fileselector_path_set(fs, doc->path);
85    else
86      elm_fileselector_path_set(fs, getenv("HOME"));
87    evas_object_size_hint_weight_set(fs, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
88    evas_object_size_hint_align_set(fs, EVAS_HINT_FILL, EVAS_HINT_FILL);
89    elm_box_pack_end(box,fs);
90    evas_object_show(fs);
91 
92    evas_object_smart_callback_add(sel, "selected", _set_file_cb, fs);
93    evas_object_smart_callback_add(fs, "done", _cleaning_cb, func);
94 
95    evas_object_geometry_get(win, NULL, NULL, &w, &h);
96    evas_object_resize(_inwin, w, h);
97    evas_object_show(_inwin);
98    evas_object_event_callback_add(win,
99                                   EVAS_CALLBACK_RESIZE,
100                                   (Evas_Object_Event_Cb)ecrire_inwin_move_cb,
101                                   _inwin);
102 }
103