2 #include "e_mod_main.h"
4 static void _e_wizard_next_eval(void);
5 static E_Popup *_e_wizard_main_new(E_Zone *zone);
6 static E_Popup *_e_wizard_extra_new(E_Zone *zone);
7 static void _e_wizard_cb_key_down(void *data, Evas *e, Evas_Object *obj, void *event);
8 static void _e_wizard_cb_next(void *data, Evas_Object *obj, const char *emission, const char *source);
10 static E_Popup *pop = NULL;
11 static Eina_List *pops = NULL;
12 static Evas_Object *o_bg = NULL;
13 static Evas_Object *o_content = NULL;
14 static Eina_List *pages = NULL;
15 static E_Wizard_Page *curpage = NULL;
16 static int next_ok = 1;
17 static int next_can = 0;
18 static int next_prev = 0;
26 EINA_LIST_FOREACH(e_manager_list(), l, man)
31 EINA_LIST_FOREACH(man->containers, l2, con)
36 EINA_LIST_FOREACH(con->zones, l3, zone)
39 pop = _e_wizard_main_new(zone);
41 pops = eina_list_append(pops, _e_wizard_extra_new(zone));
49 e_wizard_shutdown(void)
56 e_object_del(E_OBJECT(pop));
60 EINA_LIST_FREE(pops, eo)
62 EINA_LIST_FREE(pages, pg)
63 e_wizard_page_del(pg);
74 curpage = pages->data;
75 if (pages->next) next_can = 1;
80 if ((!curpage->data) && (curpage->init)) curpage->init(curpage);
81 _e_wizard_next_eval();
82 if ((curpage->show) && (!curpage->show(curpage)))
94 for (l = pages; l; l = l->next)
99 if (pg->apply) pg->apply(pg);
109 EINA_LIST_FOREACH(pages, l, page)
113 if (eina_list_next(l))
118 curpage->hide(curpage);
120 curpage = eina_list_data_get(eina_list_next(l));
124 curpage->init(curpage);
127 _e_wizard_next_eval();
128 if ((curpage->show) && (curpage->show(curpage)))
145 e_wizard_page_show(Evas_Object *obj)
147 if (o_content) evas_object_del(o_content);
151 Evas_Coord minw, minh;
153 e_widget_size_min_get(obj, &minw, &minh);
154 edje_extern_object_min_size_set(obj, minw, minh);
155 edje_object_part_swallow(o_bg, "e.swallow.content", obj);
156 evas_object_show(obj);
157 e_widget_focus_set(obj, 1);
158 edje_object_signal_emit(o_bg, "e,action,page,new", "e");
163 e_wizard_page_add(void *handle,
164 int (*init_cb)(E_Wizard_Page *pg),
165 int (*shutdown_cb)(E_Wizard_Page *pg),
166 int (*show_cb)(E_Wizard_Page *pg),
167 int (*hide_cb)(E_Wizard_Page *pg),
168 int (*apply_cb)(E_Wizard_Page *pg)
173 pg = E_NEW(E_Wizard_Page, 1);
174 if (!pg) return NULL;
177 pg->evas = pop->evas;
180 pg->shutdown = shutdown_cb;
183 pg->apply = apply_cb;
185 pages = eina_list_append(pages, pg);
191 e_wizard_page_del(E_Wizard_Page *pg)
193 // rare thing.. if we do e_wizard_next() from a page and we end up finishing
194 // ther page seq.. we cant REALLY dlclose... not a problem as wizard runs
195 // once only then e restarts itself with final wizard page
196 // if (pg->handle) dlclose(pg->handle);
197 pages = eina_list_remove(pages, pg);
202 e_wizard_button_next_enable_set(int enable)
205 _e_wizard_next_eval();
209 e_wizard_title_set(const char *title)
211 edje_object_part_text_set(o_bg, "e.text.title", title);
215 e_wizard_labels_update(void)
217 edje_object_part_text_set(o_bg, "e.text.label", _("Next"));
221 e_wizard_dir_get(void)
223 return e_module_dir_get(wiz_module);
227 _e_wizard_next_eval(void)
232 if (!next_ok) ok = 0;
235 if (ok) edje_object_signal_emit(o_bg, "e,state,next,enable", "e");
236 else edje_object_signal_emit(o_bg, "e,state,next,disable", "e");
242 _e_wizard_main_new(E_Zone *zone)
246 Evas_Modifier_Mask mask;
249 popup = e_popup_new(zone, 0, 0, zone->w, zone->h);
250 e_popup_layer_set(popup, 350);
251 o = edje_object_add(popup->evas);
253 e_theme_edje_object_set(o, "base/theme/wizard", "e/wizard/main");
254 evas_object_move(o, 0, 0);
255 evas_object_resize(o, zone->w, zone->h);
257 edje_object_signal_callback_add(o, "e,action,next", "",
258 _e_wizard_cb_next, popup);
261 o = evas_object_rectangle_add(popup->evas);
263 kg = evas_object_key_grab(o, "Tab", mask, ~mask, 0);
265 fprintf(stderr, "ERROR: unable to redirect \"Tab\" key events to object %p.\n", o);
266 mask = evas_key_modifier_mask_get(popup->evas, "Shift");
267 kg = evas_object_key_grab(o, "Tab", mask, ~mask, 0);
269 fprintf(stderr, "ERROR: unable to redirect \"Tab\" key events to object %p.\n", o);
271 kg = evas_object_key_grab(o, "Return", mask, ~mask, 0);
273 fprintf(stderr, "ERROR: unable to redirect \"Return\" key events to object %p.\n", o);
275 kg = evas_object_key_grab(o, "KP_Enter", mask, ~mask, 0);
277 fprintf(stderr, "ERROR: unable to redirect \"KP_Enter\" key events to object %p.\n", o);
278 evas_object_event_callback_add(o, EVAS_CALLBACK_KEY_DOWN,
279 _e_wizard_cb_key_down, popup);
281 /* set up next/prev buttons */
282 edje_object_part_text_set(o_bg, "e.text.title", _("Welcome to Enlightenment"));
283 edje_object_signal_emit(o_bg, "e,state,next,disable", "e");
284 e_wizard_labels_update();
286 e_popup_edje_bg_object_set(popup, o_bg);
288 if (!e_grabinput_get(ecore_evas_software_x11_window_get(popup->ecore_evas),
289 1, ecore_evas_software_x11_window_get(popup->ecore_evas)))
291 e_object_del(E_OBJECT(popup));
298 _e_wizard_extra_new(E_Zone *zone)
303 popup = e_popup_new(zone, 0, 0, zone->w, zone->h);
304 e_popup_layer_set(popup, 350);
305 o = edje_object_add(popup->evas);
306 e_theme_edje_object_set(o, "base/theme/wizard", "e/wizard/extra");
307 evas_object_move(o, 0, 0);
308 evas_object_resize(o, zone->w, zone->h);
310 e_popup_edje_bg_object_set(popup, o);
316 _e_wizard_cb_key_down(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event)
318 Evas_Event_Key_Down *ev;
321 if (!o_content) return;
322 if (!strcmp(ev->keyname, "Tab"))
324 if (evas_key_modifier_is_set(ev->modifiers, "Shift"))
325 e_widget_focus_jump(o_content, 0);
327 e_widget_focus_jump(o_content, 1);
329 else if (((!strcmp(ev->keyname, "Return")) ||
330 (!strcmp(ev->keyname, "KP_Enter")) ||
331 (!strcmp(ev->keyname, "space"))))
335 o = e_widget_focused_object_get(o_content);
336 if (o) e_widget_activate(o);
341 _e_wizard_cb_next(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)