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;
25 for (l = e_manager_list(); l; l = l->next)
31 for (l2 = man->containers; l2; l2 = l2->next)
37 for (l3 = con->zones; l3; l3 = l3->next)
43 pop = _e_wizard_main_new(zone);
45 pops = eina_list_append(pops, _e_wizard_extra_new(zone));
53 e_wizard_shutdown(void)
57 e_object_del(E_OBJECT(pop));
62 e_object_del(E_OBJECT(pops->data));
63 pops = eina_list_remove_list(pops, pops);
67 e_wizard_page_del(pages->data);
79 curpage = pages->data;
80 if (pages->next) next_can = 1;
85 if ((!curpage->data) && (curpage->init)) curpage->init(curpage);
86 _e_wizard_next_eval();
87 if ((curpage->show) && (!curpage->show(curpage)))
99 for (l = pages; l; l = l->next)
104 if (pg->apply) pg->apply(pg);
113 for (l = pages; l; l = l->next)
115 if (l->data == curpage)
122 curpage->hide(curpage);
124 curpage = l->next->data;
128 curpage->init(curpage);
131 _e_wizard_next_eval();
132 if ((curpage->show) && (curpage->show(curpage)))
149 e_wizard_page_show(Evas_Object *obj)
151 if (o_content) evas_object_del(o_content);
155 Evas_Coord minw, minh;
157 e_widget_size_min_get(obj, &minw, &minh);
158 edje_extern_object_min_size_set(obj, minw, minh);
159 edje_object_part_swallow(o_bg, "e.swallow.content", obj);
160 evas_object_show(obj);
161 e_widget_focus_set(obj, 1);
162 edje_object_signal_emit(o_bg, "e,action,page,new", "e");
167 e_wizard_page_add(void *handle,
168 int (*init) (E_Wizard_Page *pg),
169 int (*shutdown) (E_Wizard_Page *pg),
170 int (*show) (E_Wizard_Page *pg),
171 int (*hide) (E_Wizard_Page *pg),
172 int (*apply) (E_Wizard_Page *pg)
177 pg = E_NEW(E_Wizard_Page, 1);
178 if (!pg) return NULL;
181 pg->evas = pop->evas;
184 pg->shutdown = shutdown;
189 pages = eina_list_append(pages, pg);
195 e_wizard_page_del(E_Wizard_Page *pg)
197 if (pg->handle) dlclose(pg->handle);
198 pages = eina_list_remove(pages, pg);
203 e_wizard_button_next_enable_set(int enable)
206 _e_wizard_next_eval();
210 e_wizard_title_set(const char *title)
212 edje_object_part_text_set(o_bg, "e.text.title", title);
216 e_wizard_labels_update(void)
218 edje_object_part_text_set(o_bg, "e.text.label", _("Next"));
222 _e_wizard_next_eval(void)
227 if (!next_ok) ok = 0;
230 if (ok) edje_object_signal_emit(o_bg, "e,state,next,enable", "e");
231 else edje_object_signal_emit(o_bg, "e,state,next,disable", "e");
237 _e_wizard_main_new(E_Zone *zone)
241 Evas_Modifier_Mask mask;
244 pop = e_popup_new(zone, 0, 0, zone->w, zone->h);
245 e_popup_layer_set(pop, 255);
246 o = edje_object_add(pop->evas);
248 e_theme_edje_object_set(o, "base/theme/wizard", "e/wizard/main");
249 evas_object_move(o, 0, 0);
250 evas_object_resize(o, zone->w, zone->h);
252 edje_object_signal_callback_add(o, "e,action,next", "",
253 _e_wizard_cb_next, pop);
256 o = evas_object_rectangle_add(pop->evas);
258 kg = evas_object_key_grab(o, "Tab", mask, ~mask, 0);
260 fprintf(stderr,"ERROR: unable to redirect \"Tab\" key events to object %p.\n", o);
261 mask = evas_key_modifier_mask_get(pop->evas, "Shift");
262 kg = evas_object_key_grab(o, "Tab", mask, ~mask, 0);
264 fprintf(stderr,"ERROR: unable to redirect \"Tab\" key events to object %p.\n", o);
266 kg = evas_object_key_grab(o, "Return", mask, ~mask, 0);
268 fprintf(stderr,"ERROR: unable to redirect \"Return\" key events to object %p.\n", o);
270 kg = evas_object_key_grab(o, "KP_Enter", mask, ~mask, 0);
272 fprintf(stderr,"ERROR: unable to redirect \"KP_Enter\" key events to object %p.\n", o);
273 evas_object_event_callback_add(o, EVAS_CALLBACK_KEY_DOWN,
274 _e_wizard_cb_key_down, pop);
276 /* set up next/prev buttons */
277 edje_object_part_text_set(o_bg, "e.text.title", _("Welcome to Enlightenment"));
278 edje_object_signal_emit(o_bg, "e,state,next,disable", "e");
279 e_wizard_labels_update();
281 e_popup_edje_bg_object_set(pop, o_bg);
283 if (!e_grabinput_get(ecore_evas_software_x11_window_get(pop->ecore_evas),
284 1, ecore_evas_software_x11_window_get(pop->ecore_evas)))
286 e_object_del(E_OBJECT(pop));
293 _e_wizard_extra_new(E_Zone *zone)
298 pop = e_popup_new(zone, 0, 0, zone->w, zone->h);
299 e_popup_layer_set(pop, 255);
300 o = edje_object_add(pop->evas);
301 e_theme_edje_object_set(o, "base/theme/wizard", "e/wizard/extra");
302 evas_object_move(o, 0, 0);
303 evas_object_resize(o, zone->w, zone->h);
305 e_popup_edje_bg_object_set(pop, o);
311 _e_wizard_cb_key_down(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event)
313 Evas_Event_Key_Down *ev;
316 if (!o_content) return;
317 if (!strcmp(ev->keyname, "Tab"))
319 if (evas_key_modifier_is_set(ev->modifiers, "Shift"))
320 e_widget_focus_jump(o_content, 0);
322 e_widget_focus_jump(o_content, 1);
324 else if (((!strcmp(ev->keyname, "Return")) ||
325 (!strcmp(ev->keyname, "KP_Enter")) ||
326 (!strcmp(ev->keyname, "space"))))
330 o = e_widget_focused_object_get(o_content);
331 if (o) e_widget_activate(o);
336 _e_wizard_cb_next(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)