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