summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile_conf2.am46
-rw-r--r--conf2/.gitignore1
-rw-r--r--conf2/e-module-conf2.edc2208
-rw-r--r--conf2/e_conf2.c1319
-rw-r--r--conf2/e_mod_main.c381
-rw-r--r--conf2/e_mod_main.h28
-rw-r--r--conf2/images/bevel_curved_horiz_out.pngbin0 -> 136 bytes
-rw-r--r--conf2/images/bevel_horiz_out.pngbin0 -> 74 bytes
-rw-r--r--conf2/images/bevel_in.pngbin0 -> 91 bytes
-rw-r--r--conf2/images/button_clicked.pngbin0 -> 1421 bytes
-rw-r--r--conf2/images/button_normal.pngbin0 -> 1774 bytes
-rw-r--r--conf2/images/inset_circle_tiny.pngbin0 -> 378 bytes
-rw-r--r--conf2/images/inset_shadow_circle_tiny.pngbin0 -> 504 bytes
-rw-r--r--conf2/images/inset_shadow_tiny.pngbin0 -> 169 bytes
-rw-r--r--conf2/images/shadow_rounded_horiz.pngbin0 -> 486 bytes
-rw-r--r--conf2/images/shine.pngbin0 -> 232 bytes
-rw-r--r--conf2/images/sym_check_alum.pngbin0 -> 346 bytes
-rw-r--r--conf2/images/sym_radio_alum.pngbin0 -> 389 bytes
-rw-r--r--conf2/images/vgrad_med_curved.pngbin0 -> 718 bytes
-rw-r--r--conf2/images/vgrad_med_dark.pngbin0 -> 1908 bytes
-rw-r--r--conf2/images/volume_knob.pngbin0 -> 16375 bytes
-rw-r--r--conf2/images/volume_knob_ledsoff.pngbin0 -> 4066 bytes
-rw-r--r--conf2/images/volume_knob_move.pngbin0 -> 28115 bytes
-rw-r--r--conf2/images/volume_led_01.pngbin0 -> 761 bytes
-rw-r--r--conf2/images/white_bar_vert_glow.pngbin0 -> 370 bytes
-rw-r--r--conf2/module.desktop.in17
-rw-r--r--e_configure_option.c2857
-rw-r--r--e_configure_option.h176
28 files changed, 7033 insertions, 0 deletions
diff --git a/Makefile_conf2.am b/Makefile_conf2.am
new file mode 100644
index 0000000..60e8caf
--- /dev/null
+++ b/Makefile_conf2.am
@@ -0,0 +1,46 @@
1conf2dir = $(MDIR)/conf2
2conf2_DATA = conf2/e-module-conf2.edj \
3 conf2/module.desktop
4CLEANFILES += conf2/e-module-conf2.edj
5EXTRA_DIST += $(conf2_DATA) \
6conf2/e-module-conf2.edc \
7conf2/module.desktop.in \
8conf2/images/sym_check_alum.png \
9conf2/images/bevel_curved_horiz_out.png \
10conf2/images/sym_radio_alum.png \
11conf2/images/volume_knob.png \
12conf2/images/vgrad_med_dark.png \
13conf2/images/bevel_in.png \
14conf2/images/inset_shadow_tiny.png \
15conf2/images/bevel_horiz_out.png \
16conf2/images/white_bar_vert_glow.png \
17conf2/images/vgrad_med_curved.png \
18conf2/images/shine.png \
19conf2/images/volume_knob_ledsoff.png \
20conf2/images/inset_circle_tiny.png \
21conf2/images/volume_knob_move.png \
22conf2/images/shadow_rounded_horiz.png \
23conf2/images/inset_shadow_circle_tiny.png \
24conf2/images/volume_led_01.png \
25conf2/images/button_normal.png \
26conf2/images/button_clicked.png
27
28conf2pkgdir = $(MDIR)/conf2/$(MODULE_ARCH)
29conf2pkg_LTLIBRARIES = conf2/module.la
30
31conf2_module_la_SOURCES = conf2/e_mod_main.c \
32 conf2/e_mod_main.h \
33 conf2/e_conf2.c
34
35conf2_module_la_CFLAGS = $(AM_CFLAGS)
36conf2_module_la_LIBADD =
37
38CONF2_EDJE_FLAGS = $(EDJE_FLAGS) -id $(srcdir)/conf2/images -id $(top_srcdir)/data/themes/img
39
40conf2/%.edj: $(srcdir)/conf2/%.edc Makefile
41 $(EDJE_CC) $(CONF2_EDJE_FLAGS) $< $@
42
43.PHONY: conf2 install-conf2
44conf2: $(conf2pkg_LTLIBRARIES) $(conf2_DATA)
45install-conf2: install-conf2DATA install-conf2pkgLTLIBRARIES
46
diff --git a/conf2/.gitignore b/conf2/.gitignore
new file mode 100644
index 0000000..bda70fc
--- /dev/null
+++ b/conf2/.gitignore
@@ -0,0 +1 @@
e-module-conf2.edj
diff --git a/conf2/e-module-conf2.edc b/conf2/e-module-conf2.edc
new file mode 100644
index 0000000..bbcdee4
--- /dev/null
+++ b/conf2/e-module-conf2.edc
@@ -0,0 +1,2208 @@
1#define ASPECT_FILL(_ASPECT) \
2 aspect: _ASPECT _ASPECT; aspect_preference: NONE;
3#define TILED_PATTERN(_WIDTH, _HEIGHT) \
4 fill { size { relative: 0.0 0.0; offset: _WIDTH _HEIGHT; } }
5#define TILED_HORIZ(_WIDTH) \
6 fill { size { relative: 0.0 1.0; offset: _WIDTH 0; } }
7#define FIXED_SIZE(_WIDTH, _HEIGHT) \
8 min: _WIDTH _HEIGHT; max: _WIDTH _HEIGHT; fixed: 1 1;
9
10collections {
11 group {
12 name: "elm/conf2/option/overlay";
13 images.image: "vgrad_med_curved.png" COMP;
14 parts {
15 part { name: "base";
16 mouse_events: 0;
17 description { state: "default" 0.0;
18 image.normal: "vgrad_med_curved.png";
19 fill {
20 smooth: 0;
21 size {
22 relative: 0.0 1.0;
23 offset: 64 0;
24 }
25 }
26 }
27 description { state: "hide" 0.0;
28 inherit: "default";
29 visible: 0;
30 }
31 }
32 part {
33 name: "e.text.label";
34 type: TEXT;
35 mouse_events: 0;
36 scale: 1;
37 description { state: "default";
38 fixed: 0 1;
39 rel1.offset: 2 -30;
40 rel2.offset: -3 -15;
41 rel2.to_y: "e.swallow.content";
42 rel2.relative: 1 0;
43 color: 51 153 255 255;
44 color2: 51 153 255 24;
45 color3: 51 153 255 18;
46 text { font: "Sans"; size: 10;
47 min: 1 1;
48 ellipsis: 0.8;
49 align: 0.5 0.5;
50 text_class: "ilist_item";
51 }
52 }
53 }
54 part {
55 name: "e.swallow.content";
56 type: SWALLOW;
57 scale: 1;
58 description {
59 state: "default";
60 min: 170 170;
61 rel1.offset: 2 3;
62 rel2.offset: -3 -3;
63 }
64 }
65 part {
66 name: "e.text.value";
67 type: TEXT;
68 mouse_events: 0;
69 scale: 1;
70 description { state: "default";
71 fixed: 0 1;
72 rel1.relative: 0 1;
73 rel1.offset: 2 5;
74 rel2.offset: -3 25;
75 color: 51 153 255 255;
76 color2: 51 153 255 24;
77 color3: 51 153 255 18;
78 text { font: "Sans"; size: 10;
79 min: 1 1;
80 ellipsis: 0.8;
81 align: 0.5 0.5;
82 text_class: "ilist_item";
83 }
84 }
85 }
86 }
87 programs {
88 program {
89 signal: "e,state,bg_hide";
90 source: "e";
91 action: STATE_SET "hide" 0;
92 target: "base";
93 }
94 }
95 }
96
97 group {
98 name: "elm/conf2/tag/list";
99 parts {
100 part {
101 name: "base";
102 type: RECT;
103 mouse_events: 0;
104 description {
105 state: "default";
106 color: 0 0 0 0;
107 visible: 0;
108 }
109 description {
110 state: "show";
111 color: 0 0 0 255;
112 visible: 1;
113 }
114 }
115 part {
116 name: "e.swallow.options";
117 type: SWALLOW;
118 repeat_events: 1;
119 scale: 1;
120 clip_to: "clip";
121 description {
122 state: "default";
123 rel2.relative: 1 0;
124 minmul: 1 0;
125 }
126 description {
127 state: "show";
128 rel2.relative: 1 0.5;
129 }
130 }
131 part {
132 name: "e.swallow.tags";
133 type: SWALLOW;
134 repeat_events: 1;
135 scale: 1;
136 clip_to: "clip";
137 description {
138 state: "default";
139 rel1.to_y: "e.swallow.options";
140 rel1.relative: 0 1;
141 }
142 }
143 part {
144 name: "clip";
145 type: RECT;
146 scale: 1;
147 mouse_events: 0;
148 description {
149 state: "default";
150 rel1.to: "e.swallow.options";
151 color: 255 255 255 255;
152 }
153 description {
154 state: "show";
155 color: 0 0 0 255;
156 }
157 }
158 part {
159 name: "clip_events";
160 type: RECT;
161 scale: 1;
162 mouse_events: 1;
163 description {
164 state: "default";
165 color: 0 0 0 0;
166 visible: 0;
167 }
168 description {
169 state: "show";
170 color: 0 0 0 0;
171 visible: 1;
172 }
173 }
174 part {
175 name: "e.swallow.discard";
176 type: SWALLOW;
177 scale: 1;
178 description {
179 state: "default";
180 fixed: 1 1;
181 max: 60 30;
182 rel1.to_y: "e.swallow.tags";
183 rel1.relative: 1 0;
184 rel1.offset: -180 30;
185 }
186 description {
187 state: "hidden";
188 inherit: "default";
189 rel1.to_x: "e.swallow.tags";
190 rel1.offset: 150 30;
191 }
192 }
193 part {
194 name: "e.swallow.apply";
195 type: SWALLOW;
196 scale: 1;
197 description {
198 state: "default";
199 fixed: 1 1;
200 max: 60 30;
201 rel1.to_y: "e.swallow.discard";
202 rel1.relative: 1 1;
203 rel1.offset: -180 20;
204 }
205 description {
206 state: "hidden";
207 inherit: "default";
208 rel1.to_x: "e.swallow.tags";
209 rel1.offset: 150 20;
210 }
211 }
212 part {
213 name: "e.swallow.overlay";
214 type: SWALLOW;
215 scale: 1;
216 description {
217 state: "default";
218 rel1.relative: 0.25 0.25;
219 rel2.relative: 0.75 0.75;
220 visible: 0;
221 }
222 description {
223 state: "show";
224 inherit: "default";
225 visible: 1;
226 }
227 }
228 }
229 programs {
230 program { name: "collapse";
231 signal: "e,action,collapse";
232 source: "e";
233 action: STATE_SET "default" 0.0;
234 target: "e.swallow.options";
235 transition: DECELERATE 0.3;
236 }
237 program { name: "expand";
238 signal: "e,action,expand";
239 source: "e";
240 action: STATE_SET "show" 0.0;
241 target: "e.swallow.options";
242 transition: DECELERATE 0.3;
243 }
244 program { name: "apply_show";
245 signal: "e,action,apply_show";
246 source: "e";
247 action: STATE_SET "default" 0.0;
248 target: "e.swallow.apply";
249 transition: DECELERATE 0.3;
250 }
251 program { name: "apply_hide";
252 signal: "e,action,apply_hide";
253 source: "e";
254 action: STATE_SET "hidden" 0.0;
255 target: "e.swallow.apply";
256 transition: DECELERATE 0.3;
257 }
258 program { name: "discard_show";
259 signal: "e,action,discard_show";
260 source: "e";
261 action: STATE_SET "default" 0.0;
262 target: "e.swallow.discard";
263 transition: DECELERATE 0.3;
264 }
265 program { name: "discard_hide";
266 signal: "e,action,discard_hide";
267 source: "e";
268 action: STATE_SET "hidden" 0.0;
269 target: "e.swallow.discard";
270 transition: DECELERATE 0.3;
271 }
272 program { name: "overlay_show";
273 signal: "e,action,overlay_show";
274 source: "e";
275 action: STATE_SET "show" 0.0;
276 target: "e.swallow.overlay";
277 target: "clip";
278 target: "base";
279 target: "clip_events";
280 transition: DECELERATE 0.3;
281 }
282 program { name: "overlay_hide";
283 signal: "e,action,overlay_hide";
284 source: "e";
285 action: STATE_SET "default" 0.0;
286 target: "e.swallow.overlay";
287 target: "clip";
288 target: "base";
289 target: "clip_events";
290 transition: DECELERATE 0.3;
291 }
292 program { name: "overlay_dismiss";
293 signal: "mouse,up,1";
294 source: "clip_events";
295 action: SIGNAL_EMIT "e,action,overlay_dismiss" "e";
296 }
297 }
298 }
299
300 group { name: "elm/label/base/conf2";
301 parts {
302 part { name: "elm.text"; type: TEXT;
303 effect: SHADOW BOTTOM;
304 scale: 1;
305 description { state: "default" 0.0;
306 rel1.offset: 2 2;
307 rel2.offset: -3 -3;
308 color: 255 255 255 255;
309 color3: 0 0 0 128;
310 color_class: "label_text";
311 text { font: "Sans"; size: 10;
312 min: 1 1;
313 align: 0.0 0.5;
314 text_class: "label";
315 }
316 }
317 description { state: "disabled" 0.0;
318 inherit: "default" 0.0;
319 color: 21 21 21 255;
320 color3: 255 255 255 25;
321 }
322 }
323 }
324 }
325
326 group { name: "elm/entry/base-single/conf2";
327 styles
328 {
329 style { name: "entry_textblock_style";
330 base: "font=Sans font_size=10 color=#ffffff wrap=none style=shadow,bottom shadow_color=#00000080 text_class=entry color_class=entry_text";
331 }
332 style { name: "entry_textblock_disabled_style";
333 base: "font=Sans font_size=10 color=#151515 wrap=none style=shadow,bottom shadow_color=#ffffff19 text_class=entry color_class=entry_text_disabled";
334 }
335 /* FIXME */
336 style { name: "entry_textblock_guide_style";
337 base: "font=Sans font_size=10 color=#00000080 wrap=none text_class=entry left_margin=2 right_margin=2 ellipsis=0.0";
338 tag: "em" "+ font_style=Oblique";
339 tag: "hilight" "+ font_weight=Bold";
340 }
341 }
342 parts {
343 part { name: "elm.guide";
344 type: TEXTBLOCK;
345 mouse_events: 0;
346 scale: 1;
347 description { state: "default" 0.0;
348 rel1.to: "elm.text";
349 rel2.to: "elm.text";
350 text {
351 style: "entry_textblock_guide_style";
352 min: 0 1;
353 align: 0.0 0.0;
354 }
355 }
356 description { state: "hidden" 0.0;
357 inherit: "default" 0.0;
358 visible: 0;
359 }
360 }
361 part { name: "elm.text";
362 type: TEXTBLOCK;
363 mouse_events: 1;
364 scale: 1;
365 entry_mode: EDITABLE;
366 select_mode: DEFAULT;
367 cursor_mode: BEFORE;
368 multiline: 0;
369 source: "elm/entry/selection/conf2"; // selection under
370 // source2: "X"; // selection over
371 // source3: "X"; // cursor under
372 source4: "elm/entry/cursor/conf2"; // cursorover
373 //source5: "elm/entry/anchor/conf2"; // anchor under
374 // source6: "X"; // anchor over
375 description { state: "default" 0.0;
376 /* we gotta use 0 0 here, because of scrolled entries */
377 fixed: 0 0;
378 text {
379 style: "entry_textblock_style";
380 min: 1 1;
381 max: 0 0;
382 align: 0.0 0.5;
383 }
384 }
385 description { state: "disabled" 0.0;
386 inherit: "default" 0.0;
387 text {
388 style: "entry_textblock_disabled_style";
389 min: 0 1;
390 }
391 }
392 }
393 }
394 programs {
395 program { name: "focus";
396 signal: "load";
397 source: "";
398 action: FOCUS_SET;
399 target: "elm.text";
400 }
401 program { name: "disable";
402 signal: "elm,state,disabled";
403 source: "elm";
404 action: STATE_SET "disabled" 0.0;
405 target: "elm.text";
406 }
407 program { name: "enable";
408 signal: "elm,state,enabled";
409 source: "elm";
410 action: STATE_SET "default" 0.0;
411 target: "elm.text";
412 }
413 program { name: "gdisable";
414 signal: "elm,guide,disabled";
415 source: "elm";
416 action: STATE_SET "hidden" 0.0;
417 target: "elm.guide";
418 }
419 program { name: "genable";
420 signal: "elm,guide,enabled";
421 source: "elm";
422 action: STATE_SET "default" 0.0;
423 target: "elm.guide";
424 }
425 }
426 }
427
428
429 group { name: "elm/entry/cursor/conf2";
430 min: 1 0;
431 images.image: "white_bar_vert_glow.png" COMP;
432 parts {
433 part { name: "cursor"; mouse_events: 0;
434 description { state: "default" 0.0;
435 rel1.offset: -4 -4;
436 rel2.offset: 3 3;
437 image.normal: "white_bar_vert_glow.png";
438 image.border: 4 4 4 4;
439 fill.smooth: 0;
440 color: 255 255 255 0;
441 min: 9 10;
442 }
443 description { state: "visible" 0.0;
444 inherit: "default" 0.0;
445 color: 255 255 255 255;
446 }
447 }
448 }
449 programs {
450 program {
451 signal: "elm,action,focus"; source: "elm";
452 action: ACTION_STOP;
453 target: "cursor_show";
454 target: "cursor_hide";
455 target: "cursor_show_timer";
456 target: "cursor_hide_timer";
457 after: "cursor_show";
458 }
459 program {
460 name: "on_cursor_hide";
461 signal: "elm,action,unfocus"; source: "elm";
462 action: ACTION_STOP;
463 target: "cursor_show";
464 target: "cursor_hide";
465 target: "cursor_show_timer";
466 target: "cursor_hide_timer";
467 after: "cursor_hide_stop";
468 }
469 program {
470 name: "cursor_hide_stop";
471 action: STATE_SET "default" 0.0;
472 target: "cursor";
473 }
474 program { name: "cursor_show";
475 action: STATE_SET "visible" 0.0;
476 target: "cursor";
477 after: "cursor_show_timer";
478 }
479 program { name: "cursor_hide";
480 action: STATE_SET "default" 0.0;
481 target: "cursor";
482 transition: SINUSOIDAL 0.2;
483 after: "cursor_hide_timer";
484 }
485 program { name: "cursor_show_timer";
486 in: 0.5 0.0;
487 after: "cursor_hide";
488 }
489 program { name: "cursor_hide_timer";
490 in: 0.2 0.0;
491 after: "cursor_show";
492 }
493 }
494 }
495
496
497
498 group { name: "elm/entry/selection/conf2";
499 parts {
500 part { name: "selection"; type: RECT; mouse_events: 0;
501 description { state: "default" 0.0;
502 color: 51 153 255 255;
503 }
504 }
505 }
506 }
507
508 group { name: "elm/button/base/conf2";
509 images.image: "button_normal.png" COMP;
510 images.image: "button_clicked.png" COMP;
511 parts {
512 part { name: "base";
513 description { state: "default" 0.0;
514 image.normal: "button_normal.png";
515 image.border: 4 4 3 5;
516 image.middle: SOLID;
517 rel1.offset: -1 0;
518 rel2.offset: 0 1;
519 fill.smooth: 0;
520 }
521 description { state: "clicked" 0.0;
522 inherit: "default" 0.0;
523 image.normal: "button_clicked.png";
524 image.border: 5 5 4 6;
525 }
526 }
527 part { name: "icon_clip"; type: RECT;
528 description { state: "default" 0.0;
529 }
530 description { state: "disabled" 0.0;
531 inherit: "default" 0.0;
532 color: 255 255 255 64;
533 }
534 }
535 part { name: "elm.swallow.content"; type: SWALLOW; mouse_events: 0;
536 clip_to: "icon_clip";
537 description { state: "default" 0.0;
538 min: 17 17;
539 align: 0.0 0.5;
540 fixed: 1 0;
541 rel1.offset: 6 5;
542 rel1.to: "base";
543 rel2.offset: 6 -8;
544 rel2.relative: 0 1;
545 rel2.to: "base";
546 }
547 description { state: "icon" 0.0;
548 inherit: "default" 0.0;
549 fixed: 0 0;
550 align: 0.5 0.5;
551 rel2.relative: 1.0 1.0;
552 rel2.offset: -7 -8;
553 }
554 }
555 part { name: "label_clip"; type: RECT;
556 description { state: "default" 0.0;
557 }
558 description { state: "disabled" 0.0;
559 inherit: "default" 0.0;
560 visible: 0;
561 }
562 }
563 part { name: "elm.text"; type: TEXT; mouse_events: 0;
564 effect: SHADOW BOTTOM;
565 scale: 1;
566 clip_to: "label_clip";
567 description { state: "default" 0.0;
568 rel1.offset: 2 5;
569 rel1.to_x: "elm.swallow.content";
570 rel1.relative: 1 0;
571 rel1.to_y: "base";
572 rel2.offset: -7 -9;
573 rel2.to: "base";
574 color: 255 255 255 255;
575 color3: 0 0 0 128;
576 color_class: "button_text";
577 text { font: "Sans"; size: 10;
578 min: 1 1;
579 align: 0.5 0.5;
580 text_class: "button";
581 }
582 }
583 description { state: "disabled" 0.0;
584 inherit: "default" 0.0;
585 color: 21 21 21 255;
586 color3: 255 255 255 25;
587 color_class: "button_text_disabled";
588 }
589 description { state: "icon" 0.0;
590 inherit: "default" 0.0;
591 visible: 0;
592 minmul: 0 1;
593 }
594 }
595 part { name: "label2"; type: TEXT; mouse_events: 0;
596 effect: SHADOW BOTTOM;
597 scale: 1;
598 description { state: "default" 0.0;
599 rel1.to: "elm.text";
600 rel2.to: "elm.text";
601 color: 21 21 21 255;
602 color3: 255 255 255 25;
603 color_class: "button_text_disabled";
604 text { font: "Sans"; size: 10;
605 text_source: "elm.text";
606 align: 0.5 0.5;
607 min: 1 1;
608 text_class: "button";
609 }
610 visible: 0;
611 }
612 description { state: "disabled" 0.0;
613 inherit: "default" 0.0;
614 visible: 1;
615 }
616 }
617 part { name: "event"; type: RECT;
618 ignore_flags: ON_HOLD;
619 description { state: "default" 0.0;
620 color: 0 0 0 0;
621 }
622 description { state: "disabled" 0.0;
623 inherit: "default" 0.0;
624 visible: 0;
625 }
626 }
627 }
628 programs {
629 program {
630 signal: "mouse,down,1"; source: "event";
631 action: SIGNAL_EMIT "elm,action,press" "";
632 after: "down_anim";
633 }
634 program {
635 name: "down_anim";
636 action: STATE_SET "clicked" 0.0;
637 target: "base";
638 }
639 program {
640 signal: "mouse,up,1"; source: "event";
641 action: SIGNAL_EMIT "elm,action,unpress" "";
642 after: "up_anim";
643 }
644 program {
645 name: "up_anim";
646 action: STATE_SET "default" 0.0;
647 target: "base";
648 }
649 program {
650 name: "button_pressed_anim";
651 signal: "elm,anim,activate";
652 source: "elm";
653 action: STATE_SET "clicked" 0.0;
654 target: "base";
655 }
656 program {
657 signal: "mouse,clicked,1*"; source: "event";
658 action: SIGNAL_EMIT "elm,action,click" "";
659 }
660 program {
661 signal: "elm,state,text,hidden"; source: "elm";
662 action: STATE_SET "icon" 0.0;
663 target: "elm.swallow.content";
664 target: "elm.text";
665
666 }
667 program {
668 signal: "elm,state,disabled"; source: "elm";
669 action: STATE_SET "disabled" 0.0;
670 target: "event";
671 target: "icon_clip";
672 target: "label_clip";
673 target: "label2";
674 transition: DECELERATE 0.3;
675 }
676 program {
677 signal: "elm,state,enabled"; source: "elm";
678 action: STATE_SET "default" 0.0;
679 target: "event";
680 target: "icon_clip";
681 target: "label_clip";
682 target: "label2";
683 transition: DECELERATE 0.3;
684 }
685 }
686 }
687
688 group { name: "elm/radio/base/conf2";
689 images.image: "inset_shadow_circle_tiny.png" COMP;
690 images.image: "inset_circle_tiny.png" COMP;
691 images.image: "sym_radio_alum.png" COMP;
692 parts {
693 part { name: "inset"; mouse_events: 0;
694 description { state: "default" 0.0;
695 rel1.offset: 2 2;
696 rel2.relative: 0.0 1.0;
697 rel2.offset: 2 -3;
698 image.normal: "inset_shadow_circle_tiny.png";
699 align: 0.0 0.5;
700 min: 13 13;
701 max: 13 13;
702 fixed: 1 1;
703 }
704 description { state: "disabled" 0.0;
705 inherit: "default" 0.0;
706 image.normal: "inset_circle_tiny.png";
707 }
708 }
709 part { name: "clip"; type: RECT;
710 description { state: "default" 0.0;
711 }
712 description { state: "disabled" 0.0;
713 inherit: "default" 0.0;
714 color: 255 255 255 64;
715 }
716 }
717 part { name: "indicator"; mouse_events: 0;
718 clip_to: "clip";
719 description { state: "default" 0.0;
720 rel1.to: "inset";
721 rel2.to: "inset";
722 image.normal: "sym_radio_alum.png";
723 min: 11 11;
724 max: 11 11;
725 visible: 0;
726 }
727 description { state: "selected" 0.0;
728 inherit: "default" 0.0;
729 visible: 1;
730 }
731 }
732 part { name: "elm.text"; type: TEXT;
733 effect: SHADOW BOTTOM;
734 scale: 1;
735 description { state: "default" 0.0;
736 rel1.offset: 2 2;
737 rel1.to_x: "inset";
738 rel1.relative: 1.0 0.0;
739 rel2.offset: -3 -3;
740 color: 255 255 255 255;
741 color3: 0 0 0 128;
742 color_class: "radio_text";
743 text { font: "Sans"; size: 10;
744 min: 1 1;
745 align: 0.0 0.5;
746 text_class: "radio_button";
747 }
748 }
749 description { state: "disabled" 0.0;
750 inherit: "default" 0.0;
751 color: 21 21 21 255;
752 color3: 255 255 255 25;
753 }
754 }
755 part { name: "event"; type: RECT;
756 ignore_flags: ON_HOLD;
757 description { state: "default" 0.0;
758 color: 0 0 0 0;
759 }
760 description { state: "disabled" 0.0;
761 inherit: "default" 0.0;
762 visible: 0;
763 }
764 }
765 }
766 programs {
767 program { name: "click";
768 signal: "mouse,up,1";
769 source: "event";
770 action: SIGNAL_EMIT "elm,action,radio,toggle" "";
771 }
772 program { name: "radio_on";
773 signal: "elm,state,radio,on";
774 source: "elm";
775 action: STATE_SET "selected" 0.0;
776 target: "indicator";
777 }
778 program { name: "radio_off";
779 signal: "elm,state,radio,off";
780 source: "elm";
781 action: STATE_SET "default" 0.0;
782 target: "indicator";
783 }
784 program { name: "disable";
785 signal: "elm,state,disabled";
786 source: "elm";
787 action: STATE_SET "disabled" 0.0;
788 target: "inset";
789 target: "clip";
790 target: "elm.text";
791 target: "event";
792 }
793 program { name: "enable";
794 signal: "elm,state,enabled";
795 source: "elm";
796 action: STATE_SET "default" 0.0;
797 target: "inset";
798 target: "clip";
799 target: "elm.text";
800 target: "event";
801 }
802 }
803 }
804
805 group { name: "elm/bg/base/conf2";
806 images.image: "vgrad_med_curved.png" COMP;
807 parts {
808 part { name: "base";
809 mouse_events: 0;
810 description { state: "default" 0.0;
811 image.normal: "vgrad_med_curved.png";
812 fill {
813 smooth: 0;
814 size {
815 relative: 0.0 1.0;
816 offset: 64 0;
817 }
818 }
819 }
820 }
821 part { name: "elm.swallow.rectangle";
822 type: SWALLOW;
823 description { state: "default" 0.0;
824 }
825 }
826 part { name: "elm.swallow.background";
827 type: SWALLOW;
828 description { state: "default" 0.0;
829 }
830 }
831 part { name: "elm.swallow.content";
832 type: SWALLOW;
833 description { state: "default" 0.0;
834 }
835 }
836 }
837 }
838
839 group { name: "elm/genlist/item/conf2_tag/default";
840 alias: "elm/genlist/item_compress/conf2_tag/default";
841 data.item: "stacking" "above";
842 data.item: "selectraise" "on";
843 data.item: "texts" "elm.text";
844 data.item: "contents" "elm.swallow.icon elm.swallow.end";
845 data.item: "treesize" "20";
846 images.image: "bevel_curved_horiz_out.png" COMP;
847 images.image: "shadow_rounded_horiz.png" COMP;
848 images.image: "vgrad_med_dark.png" COMP;
849 images.image: "bevel_horiz_out.png" COMP;
850 images.image: "shine.png" COMP;
851 parts {
852 part { name: "base"; type: RECT; mouse_events: 0;
853 description { state: "default" 0.0;
854 color: 64 64 64 255;
855 color_class: "ilist_item_base";
856 }
857 }
858 part { name: "bevel"; mouse_events: 0;
859 description { state: "default" 0.0;
860 image.normal: "bevel_curved_horiz_out.png";
861 image.border: 0 0 2 2;
862 image.middle: 0;
863 fill.smooth: 0;
864 }
865 }
866 part { name: "sel_shadow"; mouse_events: 0;
867 description { state: "default" 0.0;
868 image.normal: "shadow_rounded_horiz.png";
869 image.border: 0 0 9 9;
870 rel1.offset: 0 -4;
871 rel2.offset: -1 5;
872 fill.smooth: 0;
873 visible: 0;
874 }
875 description { state: "selected" 0.0;
876 inherit: "default" 0.0;
877 visible: 1;
878 }
879 }
880 part { name: "sel_base"; mouse_events: 0;
881 description { state: "default" 0.0;
882 image.normal: "vgrad_med_dark.png";
883 fill.smooth: 0;
884 TILED_HORIZ(120)
885 visible: 0;
886 }
887 description { state: "selected" 0.0;
888 inherit: "default" 0.0;
889 visible: 1;
890 }
891 }
892 part { name: "sel_bevel"; mouse_events: 0;
893 description { state: "default" 0.0;
894 image.normal: "bevel_horiz_out.png";
895 image.border: 0 0 2 2;
896 image.middle: 0;
897 fill.smooth: 0;
898 visible: 0;
899 }
900 description { state: "selected" 0.0;
901 inherit: "default" 0.0;
902 visible: 1;
903 }
904 }
905 part { name: "elm.swallow.pad";
906 type: SWALLOW;
907 description { state: "default" 0.0;
908 fixed: 1 0;
909 align: 0.0 0.5;
910 rel1 {
911 relative: 0.0 0.0;
912 offset: 4 4;
913 }
914 rel2 {
915 relative: 0.0 1.0;
916 offset: 4 -5;
917 }
918 }
919 }
920 part { name: "elm.swallow.icon"; type: SWALLOW;
921 description { state: "default" 0.0;
922 align: 0.0 0.5;
923 aspect: 1.0 1.0; aspect_preference: VERTICAL;
924 rel1.offset: 2 2;
925 rel2.relative: 0.0 1.0;
926 rel2.offset: 2 -3;
927 }
928 }
929 part { name: "elm.text"; type: TEXT; mouse_events: 0;
930 effect: SHADOW BOTTOM;
931 scale: 1;
932 description { state: "default" 0.0;
933 rel1.offset: 2 3;
934 rel1.relative: 1.0 0.0;
935 rel1.to_x: "elm.swallow.icon";
936 rel2.offset: -3 -3;
937 rel2.relative: 0.0 1.0;
938 rel2.to_x: "elm.swallow.end";
939 color: 255 255 255 255;
940 color3: 0 0 0 128;
941 color_class: "ilist_item";
942 text { font: "Sans"; size: 10;
943 min: 1 1;
944 ellipsis: 0.8;
945 align: 0.0 0.5;
946 text_class: "ilist_item";
947 }
948 }
949 description { state: "selected" 0.0;
950 inherit: "default" 0.0;
951 visible: 0;
952 }
953 description { state: "disabled" 0.0;
954 inherit: "default" 0.0;
955 visible: 0;
956 }
957 }
958 part { name: "label2"; type: TEXT; mouse_events: 0;
959 effect: SHADOW BOTTOM;
960 scale: 1;
961 description { state: "default" 0.0;
962 rel1.to: "elm.text";
963 rel2.to: "elm.text";
964 color: 21 21 21 255;
965 color3: 255 255 255 25;
966 color_class: "ilist_item_disabled";
967 text { font: "Sans"; size: 10;
968 text_source: "elm.text";
969 align: 0.0 0.5;
970 text_class: "ilist_item";
971 }
972 visible: 0;
973 }
974 description { state: "selected" 0.0;
975 inherit: "default" 0.0;
976 visible: 0;
977 }
978 description { state: "disabled" 0.0;
979 inherit: "default" 0.0;
980 visible: 1;
981 }
982 }
983 part { name: "label3"; type: TEXT; mouse_events: 0;
984 effect: GLOW;
985 scale: 1;
986 description { state: "default" 0.0;
987 rel1.offset: -2 -3;
988 rel1.to: "elm.text";
989 rel2.offset: 2 1;
990 rel2.to: "elm.text";
991 color: 51 153 255 255;
992 color2: 51 153 255 24;
993 color3: 51 153 255 18;
994 color_class: "ilist_item_selected";
995 text { font: "Sans"; size: 10;
996 text_source: "elm.text";
997 align: 0.0 0.5;
998 text_class: "ilist_item";
999 }
1000 visible: 0;
1001 }
1002 description { state: "selected" 0.0;
1003 inherit: "default" 0.0;
1004 visible: 1;
1005 }
1006 description { state: "disabled" 0.0;
1007 inherit: "default" 0.0;
1008 visible: 0;
1009 }
1010 }
1011 part { name: "elm.swallow.end"; type: SWALLOW;
1012 description { state: "default" 0.0;
1013 align: 1.0 0.5;
1014 aspect: 1.0 1.0; aspect_preference: VERTICAL;
1015 rel1.offset: -3 2;
1016 rel1.relative: 1.0 0.0;
1017 rel2.offset: -3 -3;
1018 }
1019 }
1020 part { name: "sel_shine"; mouse_events: 0;
1021 description { state: "default" 0.0;
1022 image.normal: "shine.png";
1023 rel1.offset: 0 -2;
1024 rel1.to: "sel_base";
1025 rel2.relative: 1.0 0.0;
1026 rel2.offset: -1 2;
1027 rel2.to: "sel_base";
1028 FIXED_SIZE(69, 5)
1029 visible: 0;
1030 }
1031 description { state: "selected" 0.0;
1032 inherit: "default" 0.0;
1033 visible: 1;
1034 }
1035 }
1036 part { name: "event"; type: RECT;
1037 repeat_events: 1;
1038 description { state: "default" 0.0;
1039 color: 0 0 0 0;
1040 }
1041 description { state: "disabled" 0.0;
1042 inherit: "default" 0.0;
1043 visible: 0;
1044 }
1045 }
1046 }
1047 programs {
1048 program {
1049 signal: "elm,state,selected"; source: "elm";
1050 action: STATE_SET "selected" 0.0;
1051 target: "sel_shadow";
1052 target: "sel_base";
1053 target: "sel_bevel";
1054 target: "sel_shine";
1055 target: "elm.text";
1056 target: "label2";
1057 target: "label3";
1058 }
1059 program {
1060 signal: "elm,state,unselected"; source: "elm";
1061 action: STATE_SET "default" 0.0;
1062 target: "sel_shadow";
1063 target: "sel_base";
1064 target: "sel_bevel";
1065 target: "sel_shine";
1066 target: "elm.text";
1067 target: "label2";
1068 target: "label3";
1069 }
1070 program {
1071 signal: "elm,state,disabled"; source: "elm";
1072 action: STATE_SET "disabled" 0.0;
1073 target: "event";
1074 target: "elm.text";
1075 target: "label2";
1076 target: "label3";
1077 }
1078 program {
1079 signal: "elm,state,enabled"; source: "elm";
1080 action: STATE_SET "default" 0.0;
1081 target: "event";
1082 target: "elm.text";
1083 target: "label2";
1084 target: "label3";
1085 }
1086 }
1087 }
1088
1089 group { name: "elm/genlist/item/conf2_double_label/default";
1090 alias: "elm/genlist/item_compress/conf2_double_label/default";
1091 data.item: "stacking" "above";
1092 data.item: "selectraise" "on";
1093 data.item: "texts" "elm.text elm.text.sub";
1094 data.item: "contents" "elm.swallow.icon elm.swallow.end";
1095 data.item: "treesize" "20";
1096 images.image: "bevel_curved_horiz_out.png" COMP;
1097 images.image: "shadow_rounded_horiz.png" COMP;
1098 images.image: "vgrad_med_dark.png" COMP;
1099 images.image: "bevel_horiz_out.png" COMP;
1100 images.image: "shine.png" COMP;
1101 parts {
1102 part { name: "base"; type: RECT; mouse_events: 0;
1103 description { state: "default" 0.0;
1104 color: 64 64 64 255;
1105 color_class: "ilist_item_base";
1106 }
1107 }
1108 part { name: "bevel"; mouse_events: 0;
1109 description { state: "default" 0.0;
1110 image.normal: "bevel_curved_horiz_out.png";
1111 image.border: 0 0 2 2;
1112 image.middle: 0;
1113 fill.smooth: 0;
1114 }
1115 }
1116 part { name: "sel_shadow"; mouse_events: 0;
1117 description { state: "default" 0.0;
1118 image.normal: "shadow_rounded_horiz.png";
1119 image.border: 0 0 9 9;
1120 rel1.offset: 0 -4;
1121 rel2.offset: -1 5;
1122 fill.smooth: 0;
1123 visible: 0;
1124 }
1125 description { state: "selected" 0.0;
1126 inherit: "default" 0.0;
1127 visible: 1;
1128 }
1129 }
1130 part { name: "sel_base"; mouse_events: 0;
1131 description { state: "default" 0.0;
1132 image.normal: "vgrad_med_dark.png";
1133 fill.smooth: 0;
1134 TILED_HORIZ(120)
1135 visible: 0;
1136 }
1137 description { state: "selected" 0.0;
1138 inherit: "default" 0.0;
1139 visible: 1;
1140 }
1141 }
1142 part { name: "sel_bevel"; mouse_events: 0;
1143 description { state: "default" 0.0;
1144 image.normal: "bevel_horiz_out.png";
1145 image.border: 0 0 2 2;
1146 image.middle: 0;
1147 fill.smooth: 0;
1148 visible: 0;
1149 }
1150 description { state: "selected" 0.0;
1151 inherit: "default" 0.0;
1152 visible: 1;
1153 }
1154 }
1155 part { name: "elm.swallow.pad";
1156 type: SWALLOW;
1157 description { state: "default" 0.0;
1158 fixed: 1 0;
1159 align: 0.0 0.5;
1160 rel1 {
1161 relative: 0.0 0.0;
1162 offset: 4 4;
1163 }
1164 rel2 {
1165 relative: 0.0 1.0;
1166 offset: 4 -5;
1167 }
1168 }
1169 }
1170 part { name: "elm.swallow.icon"; type: SWALLOW;
1171 description { state: "default" 0.0;
1172 align: 0.0 0.5;
1173 aspect: 1.0 1.0; aspect_preference: VERTICAL;
1174 rel1.offset: 2 2;
1175 rel2.relative: 0.0 1.0;
1176 rel2.offset: 2 -3;
1177 }
1178 }
1179 part { name: "elm.text"; type: TEXT; mouse_events: 0;
1180 effect: SHADOW BOTTOM;
1181 scale: 1;
1182 description { state: "default" 0.0;
1183 rel1.offset: 2 3;
1184 rel1.relative: 1.0 0.0;
1185 rel1.to_x: "elm.swallow.icon";
1186 rel2.offset: -3 -3;
1187 rel2.relative: 0.0 1.0;
1188 rel2.to_x: "elm.swallow.end";
1189 color: 255 255 255 255;
1190 color3: 0 0 0 128;
1191 color_class: "ilist_item";
1192 text { font: "Sans"; size: 10;
1193 min: 1 1;
1194 ellipsis: 0.8;
1195 align: 0.0 0.5;
1196 text_class: "ilist_item";
1197 }
1198 }
1199 description { state: "selected" 0.0;
1200 inherit: "default" 0.0;
1201 visible: 0;
1202 }
1203 description { state: "disabled" 0.0;
1204 inherit: "default" 0.0;
1205 visible: 0;
1206 }
1207 }
1208 part { name: "label2"; type: TEXT; mouse_events: 0;
1209 effect: SHADOW BOTTOM;
1210 scale: 1;
1211 description { state: "default" 0.0;
1212 rel1.to: "elm.text";
1213 rel2.to: "elm.text";
1214 color: 21 21 21 255;
1215 color3: 255 255 255 25;
1216 color_class: "ilist_item_disabled";
1217 text { font: "Sans"; size: 10;
1218 text_source: "elm.text";
1219 align: 0.0 0.5;
1220 text_class: "ilist_item";
1221 }
1222 visible: 0;
1223 }
1224 description { state: "selected" 0.0;
1225 inherit: "default" 0.0;
1226 visible: 0;
1227 }
1228 description { state: "disabled" 0.0;
1229 inherit: "default" 0.0;
1230 visible: 1;
1231 }
1232 }
1233 part { name: "label3"; type: TEXT; mouse_events: 0;
1234 effect: GLOW;
1235 scale: 1;
1236 description { state: "default" 0.0;
1237 rel1.offset: -2 -3;
1238 rel1.to: "elm.text";
1239 rel2.offset: 2 1;
1240 rel2.to: "elm.text";
1241 color: 51 153 255 255;
1242 color2: 51 153 255 24;
1243 color3: 51 153 255 18;
1244 color_class: "ilist_item_selected";
1245 text { font: "Sans"; size: 10;
1246 text_source: "elm.text";
1247 align: 0.0 0.5;
1248 text_class: "ilist_item";
1249 }
1250 visible: 0;
1251 }
1252 description { state: "selected" 0.0;
1253 inherit: "default" 0.0;
1254 visible: 1;
1255 }
1256 description { state: "disabled" 0.0;
1257 inherit: "default" 0.0;
1258 visible: 0;
1259 }
1260 }
1261 part { name: "elm.text.sub"; type: TEXT; mouse_events: 0;
1262 scale: 1;
1263 description {
1264 state: "default" 0.0;
1265 rel1.offset: 2 3;
1266 rel1.relative: 1.0 0.5;
1267 rel1.to_x: "elm.swallow.icon";
1268 rel2.offset: -3 -3;
1269 rel2.relative: 0.0 1.0;
1270 rel2.to_x: "elm.swallow.end";
1271 color: 255 255 255 255;
1272 color3: 0 0 0 128;
1273 text {
1274 font: "Sans";
1275 size: 8;
1276 min: 1 1;
1277 align: 0.0 0.5;
1278 text_class: "list_item";
1279 }
1280 }
1281 description { state: "selected" 0.0;
1282 inherit: "default" 0.0;
1283 color: 51 153 255 255;
1284 color2: 51 153 255 24;
1285 color3: 51 153 255 18;
1286 }
1287 }
1288 part { name: "elm.swallow.end"; type: SWALLOW;
1289 description { state: "default" 0.0;
1290 align: 1.0 0.5;
1291 aspect: 1.0 1.0; aspect_preference: VERTICAL;
1292 rel1.offset: -3 2;
1293 rel1.relative: 1.0 0.0;
1294 rel2.offset: -3 -3;
1295 }
1296 }
1297 part { name: "sel_shine"; mouse_events: 0;
1298 description { state: "default" 0.0;
1299 image.normal: "shine.png";
1300 rel1.offset: 0 -2;
1301 rel1.to: "sel_base";
1302 rel2.relative: 1.0 0.0;
1303 rel2.offset: -1 2;
1304 rel2.to: "sel_base";
1305 FIXED_SIZE(69, 5)
1306 visible: 0;
1307 }
1308 description { state: "selected" 0.0;
1309 inherit: "default" 0.0;
1310 visible: 1;
1311 }
1312 }
1313 part { name: "event"; type: RECT;
1314 repeat_events: 1;
1315 description { state: "default" 0.0;
1316 color: 0 0 0 0;
1317 }
1318 description { state: "disabled" 0.0;
1319 inherit: "default" 0.0;
1320 visible: 0;
1321 }
1322 }
1323 }
1324 programs {
1325 program {
1326 signal: "elm,state,selected"; source: "elm";
1327 action: STATE_SET "selected" 0.0;
1328 target: "sel_shadow";
1329 target: "sel_base";
1330 target: "sel_bevel";
1331 target: "sel_shine";
1332 target: "elm.text";
1333 target: "elm.text.sub";
1334 target: "label2";
1335 target: "label3";
1336 }
1337 program {
1338 signal: "elm,state,unselected"; source: "elm";
1339 action: STATE_SET "default" 0.0;
1340 target: "sel_shadow";
1341 target: "sel_base";
1342 target: "sel_bevel";
1343 target: "sel_shine";
1344 target: "elm.text";
1345 target: "elm.text.sub";
1346 target: "label2";
1347 target: "label3";
1348 }
1349 program {
1350 signal: "elm,state,disabled"; source: "elm";
1351 action: STATE_SET "disabled" 0.0;
1352 target: "event";
1353 target: "elm.text";
1354 target: "label2";
1355 target: "label3";
1356 }
1357 program {
1358 signal: "elm,state,enabled"; source: "elm";
1359 action: STATE_SET "default" 0.0;
1360 target: "event";
1361 target: "elm.text";
1362 target: "label2";
1363 target: "label3";
1364 }
1365 }
1366 }
1367
1368 group { name: "elm/genlist/item/conf2_thumb/default";
1369 data.item: "stacking" "above";
1370 data.item: "selectraise" "on";
1371 data.item: "texts" "elm.text";
1372 data.item: "contents" "elm.swallow.icon";
1373 data.item: "treesize" "20";
1374 images.image: "bevel_curved_horiz_out.png" COMP;
1375 images.image: "shadow_rounded_horiz.png" COMP;
1376 images.image: "vgrad_med_dark.png" COMP;
1377 images.image: "bevel_horiz_out.png" COMP;
1378 images.image: "shine.png" COMP;
1379 parts {
1380 part { name: "base"; type: RECT; mouse_events: 0;
1381 description { state: "default" 0.0;
1382 color: 64 64 64 255;
1383 color_class: "ilist_item_base";
1384 }
1385 }
1386 part { name: "bevel"; mouse_events: 0;
1387 description { state: "default" 0.0;
1388 image.normal: "bevel_curved_horiz_out.png";
1389 image.border: 0 0 2 2;
1390 image.middle: 0;
1391 fill.smooth: 0;
1392 }
1393 }
1394 part { name: "sel_shadow"; mouse_events: 0;
1395 description { state: "default" 0.0;
1396 image.normal: "shadow_rounded_horiz.png";
1397 image.border: 0 0 9 9;
1398 rel1.offset: 0 -4;
1399 rel2.offset: -1 5;
1400 fill.smooth: 0;
1401 visible: 0;
1402 }
1403 description { state: "selected" 0.0;
1404 inherit: "default" 0.0;
1405 visible: 1;
1406 }
1407 }
1408 part { name: "sel_base"; mouse_events: 0;
1409 description { state: "default" 0.0;
1410 image.normal: "vgrad_med_dark.png";
1411 fill.smooth: 0;
1412 TILED_HORIZ(120)
1413 visible: 0;
1414 }
1415 description { state: "selected" 0.0;
1416 inherit: "default" 0.0;
1417 visible: 1;
1418 }
1419 }
1420 part { name: "sel_bevel"; mouse_events: 0;
1421 description { state: "default" 0.0;
1422 image.normal: "bevel_horiz_out.png";
1423 image.border: 0 0 2 2;
1424 image.middle: 0;
1425 fill.smooth: 0;
1426 visible: 0;
1427 }
1428 description { state: "selected" 0.0;
1429 inherit: "default" 0.0;
1430 visible: 1;
1431 }
1432 }
1433 part { name: "elm.swallow.icon"; type: SWALLOW; mouse_events: 0;
1434 description { state: "default" 0.0;
1435 min: 150 150;
1436 max: 170 150;
1437 align: 0.5 0.0;
1438 aspect: 1.0 1.0; aspect_preference: VERTICAL;
1439 rel1.offset: 2 2;
1440 rel2.offset: 2 -3;
1441 }
1442 }
1443 part { name: "elm.text"; type: TEXT; mouse_events: 0;
1444 effect: SHADOW BOTTOM;
1445 scale: 1;
1446 description { state: "default" 0.0;
1447 rel1.offset: 2 3;
1448 rel1.relative: 0.0 1.0;
1449 rel1.to_y: "elm.swallow.icon";
1450 rel2.offset: -3 -3;
1451 color: 255 255 255 255;
1452 color3: 0 0 0 128;
1453 color_class: "ilist_item";
1454 text { font: "Sans"; size: 10;
1455 min: 1 1;
1456 ellipsis: 0.8;
1457 align: 0.5 0.5;
1458 text_class: "ilist_item";
1459 }
1460 }
1461 description { state: "selected" 0.0;
1462 inherit: "default" 0.0;
1463 visible: 0;
1464 }
1465 description { state: "disabled" 0.0;
1466 inherit: "default" 0.0;
1467 visible: 0;
1468 }
1469 }
1470 part { name: "label2"; type: TEXT; mouse_events: 0;
1471 effect: SHADOW BOTTOM;
1472 scale: 1;
1473 description { state: "default" 0.0;
1474 rel1.to: "elm.text";
1475 rel2.to: "elm.text";
1476 color: 21 21 21 255;
1477 color3: 255 255 255 25;
1478 color_class: "ilist_item_disabled";
1479 text { font: "Sans"; size: 10;
1480 text_source: "elm.text";
1481 align: 0.5 0.5;
1482 text_class: "ilist_item";
1483 }
1484 visible: 0;
1485 }
1486 description { state: "selected" 0.0;
1487 inherit: "default" 0.0;
1488 visible: 0;
1489 }
1490 description { state: "disabled" 0.0;
1491 inherit: "default" 0.0;
1492 visible: 1;
1493 }
1494 }
1495 part { name: "label3"; type: TEXT; mouse_events: 0;
1496 effect: GLOW;
1497 scale: 1;
1498 description { state: "default" 0.0;
1499 rel1.offset: -2 -3;
1500 rel1.to: "elm.text";
1501 rel2.offset: 2 1;
1502 rel2.to: "elm.text";
1503 color: 51 153 255 255;
1504 color2: 51 153 255 24;
1505 color3: 51 153 255 18;
1506 color_class: "ilist_item_selected";
1507 text { font: "Sans"; size: 10;
1508 text_source: "elm.text";
1509 align: 0.5 0.5;
1510 text_class: "ilist_item";
1511 }
1512 visible: 0;
1513 }
1514 description { state: "selected" 0.0;
1515 inherit: "default" 0.0;
1516 visible: 1;
1517 }
1518 description { state: "disabled" 0.0;
1519 inherit: "default" 0.0;
1520 visible: 0;
1521 }
1522 }
1523 part { name: "sel_shine"; mouse_events: 0;
1524 description { state: "default" 0.0;
1525 image.normal: "shine.png";
1526 rel1.offset: 0 -2;
1527 rel1.to: "sel_base";
1528 rel2.relative: 1.0 0.0;
1529 rel2.offset: -1 2;
1530 rel2.to: "sel_base";
1531 FIXED_SIZE(69, 5)
1532 visible: 0;
1533 }
1534 description { state: "selected" 0.0;
1535 inherit: "default" 0.0;
1536 visible: 1;
1537 }
1538 }
1539 part { name: "event"; type: RECT;
1540 description { state: "default" 0.0;
1541 color: 0 0 0 0;
1542 }
1543 description { state: "disabled" 0.0;
1544 inherit: "default" 0.0;
1545 visible: 0;
1546 }
1547 }
1548 }
1549 programs {
1550 program {
1551 signal: "elm,state,selected"; source: "elm";
1552 action: STATE_SET "selected" 0.0;
1553 target: "sel_shadow";
1554 target: "sel_base";
1555 target: "sel_bevel";
1556 target: "sel_shine";
1557 target: "elm.text";
1558 target: "label2";
1559 target: "label3";
1560 }
1561 program {
1562 signal: "elm,state,unselected"; source: "elm";
1563 action: STATE_SET "default" 0.0;
1564 target: "sel_shadow";
1565 target: "sel_base";
1566 target: "sel_bevel";
1567 target: "sel_shine";
1568 target: "elm.text";
1569 target: "label2";
1570 target: "label3";
1571 }
1572 program {
1573 signal: "elm,state,disabled"; source: "elm";
1574 action: STATE_SET "disabled" 0.0;
1575 target: "event";
1576 target: "elm.text";
1577 target: "label2";
1578 target: "label3";
1579 }
1580 program {
1581 signal: "elm,state,enabled"; source: "elm";
1582 action: STATE_SET "default" 0.0;
1583 target: "event";
1584 target: "elm.text";
1585 target: "label2";
1586 target: "label3";
1587 }
1588 }
1589 }
1590
1591 group { name: "elm/check/base/conf2";
1592 images.image: "inset_shadow_tiny.png" COMP;
1593 images.image: "bevel_in.png" COMP;
1594 images.image: "sym_check_alum.png" COMP;
1595 parts {
1596 part { name: "base"; type: RECT;
1597 description { state: "default" 0.0;
1598 rel1.offset: 1 1;
1599 rel1.to: "inset";
1600 rel2.offset: -2 -2;
1601 rel2.to: "inset";
1602 color: 24 24 24 255;
1603 }
1604 description { state: "disabled" 0.0;
1605 inherit: "default" 0.0;
1606 color: 64 64 64 255;
1607 }
1608 }
1609 part { name: "shadow"; mouse_events: 0;
1610 description { state: "default" 0.0;
1611 image.normal: "inset_shadow_tiny.png";
1612 rel1.to: "base";
1613 rel2.to: "base";
1614 }
1615 description { state: "disabled" 0.0;
1616 inherit: "default" 0.0;
1617 visible: 0;
1618 }
1619 }
1620 part { name: "inset"; mouse_events: 0;
1621 description { state: "default" 0.0;
1622 rel1.offset: 1 2;
1623 rel2.offset: 1 -3;
1624 image.normal: "bevel_in.png";
1625 image.border: 1 1 1 1;
1626 image.middle: 0;
1627 fill.smooth: 0;
1628 min: 18 18;
1629 max: 18 18;
1630 fixed: 1 1;
1631 }
1632 }
1633 part { name: "clip"; type: RECT;
1634 description { state: "default" 0.0;
1635 }
1636 description { state: "disabled" 0.0;
1637 inherit: "default" 0.0;
1638 color: 255 255 255 64;
1639 }
1640 }
1641 part { name: "check"; mouse_events: 0;
1642 clip_to: "clip";
1643 description { state: "default" 0.0;
1644 rel1.to: "base";
1645 rel2.to: "base";
1646 image.normal: "sym_check_alum.png";
1647 min: 16 16;
1648 max: 16 16;
1649 visible: 0;
1650 }
1651 description { state: "visible" 0.0;
1652 inherit: "default" 0.0;
1653 visible: 1;
1654 }
1655 }
1656 part { name: "event"; type: RECT;
1657 ignore_flags: ON_HOLD;
1658 description { state: "default" 0.0;
1659 color: 0 0 0 0;
1660 }
1661 description { state: "disabled" 0.0;
1662 inherit: "default" 0.0;
1663 visible: 0;
1664 }
1665 }
1666 }
1667 programs {
1668 program { name: "click";
1669 signal: "mouse,clicked,1";
1670 source: "event";
1671 action: SIGNAL_EMIT "elm,action,check,toggle" "";
1672 }
1673 program { name: "check_on";
1674 signal: "elm,state,check,on";
1675 source: "elm";
1676 action: STATE_SET "visible" 0.0;
1677 target: "check";
1678 }
1679 program { name: "check_off";
1680 signal: "elm,state,check,off";
1681 source: "elm";
1682 action: STATE_SET "default" 0.0;
1683 target: "check";
1684 }
1685 program {
1686 signal: "elm,state,disabled"; source: "e";
1687 action: STATE_SET "disabled" 0.0;
1688 target: "base";
1689 target: "shadow";
1690 target: "clip";
1691 target: "event";
1692 }
1693 program {
1694 signal: "e,state,enabled"; source: "e";
1695 action: STATE_SET "default" 0.0;
1696 target: "base";
1697 target: "shadow";
1698 target: "clip";
1699 target: "event";
1700 }
1701 }
1702 }
1703
1704 group { name: "elm/tooltip/base/conf2";
1705 min: 30 30;
1706 data {
1707 item: "pad_x" "20";
1708 item: "pad_y" "20";
1709 item: "pad_border_x" "10";
1710 item: "pad_border_y" "10";
1711 item: "hide_timeout" "0.3";
1712 }
1713 images.image: "vgrad_med_curved.png" COMP;
1714
1715 parts {
1716 part { name: "pop";
1717 mouse_events: 0;
1718 description { state: "default" 0.0;
1719 min: 30 30;
1720 rel1 {
1721 to: "elm.swallow.content";
1722 offset: -15 -15;
1723 }
1724 rel2 {
1725 to: "elm.swallow.content";
1726 offset: 14 14;
1727 }
1728 image {
1729 normal: "vgrad_med_curved.png";
1730 border: 14 14 14 14;
1731 }
1732 image.middle: SOLID;
1733 }
1734 }
1735
1736 part { name: "elm.swallow.content";
1737 type: SWALLOW;
1738 description { state: "default" 0.0; }
1739 }
1740 }
1741 }
1742
1743///////////////////////////////////////////////////////////////////////////////
1744
1745
1746 /*
1747 Round volume knob.
1748 2012 - Raoul Hecky <raoul.hecky@gmail.com>
1749
1750 It's a new custom style for an elm_slider.
1751 It uses embryo and hidden dragable part to set/get the position
1752 of the volume knob. Another hidden dragable is used to move the
1753 knob using the mouse/finger. All math are done using embryo.
1754 */
1755
1756 group
1757 {
1758 name: "base/knob_volume";
1759
1760 images
1761 {
1762 image: "volume_knob.png" COMP;
1763 image: "volume_knob_move.png" COMP;
1764 image: "volume_knob_ledsoff.png" COMP;
1765
1766 image: "volume_led_01.png" COMP;
1767 }
1768
1769 script
1770 {
1771 #define VOLUME_MIN_ANGLE 0.0
1772 #define VOLUME_MAX_ANGLE 264.0
1773 #define VOLUME_MAX_LEDS 45
1774
1775 public knob_angle;
1776 public knob_offset;
1777 public leds_on;
1778
1779 public led_status; //edje list to keep track of each led status
1780
1781 public Float:calc_angle(mx, my)
1782 {
1783 new px, py, pw, ph;
1784 get_geometry(PART:"bg", px, py, pw, ph);
1785
1786 new center_x, center_y;
1787 center_x = px + pw / 2;
1788 center_y = py + ph / 2;
1789
1790 new dx, dy;
1791 dx = center_x - mx;
1792 dy = center_y - my;
1793
1794 new Float:angle;
1795 angle = atan2(-dx, dy) * 180.0 / PI + 180.0;
1796
1797 return angle;
1798 }
1799
1800 public rotate_knob(Float:val)
1801 {
1802 custom_state(PART:"knob", "default", 0.0);
1803 set_state_val(PART:"knob", STATE_MAP_ROT_Z, val);
1804 set_state(PART:"knob", "custom", 0.0);
1805
1806 //set needed leds on or off from current value
1807 set_int(leds_on, round(val * VOLUME_MAX_LEDS / VOLUME_MAX_ANGLE));
1808 emit("leds,changed", "volume");
1809 }
1810 }
1811
1812 parts
1813 {
1814 part
1815 {
1816 name: "bg";
1817 type: RECT;
1818 scale: 1;
1819 description
1820 {
1821 state: "default" 0.0;
1822 visible: 0;
1823 rel1.to: "leds_off";
1824 rel2.to: "leds_off";
1825 }
1826 }
1827
1828 part
1829 {
1830 name: "knob_back";
1831 mouse_events: 0;
1832 scale: 1;
1833 description
1834 {
1835 state: "default" 0.0;
1836 image.normal: "volume_knob.png";
1837 }
1838 }
1839
1840 part
1841 {
1842 name: "knob";
1843 mouse_events: 0;
1844 scale: 1;
1845 description
1846 {
1847 state: "default" 0.0;
1848 image.normal: "volume_knob_move.png";
1849 map.on: 1;
1850 }
1851 }
1852
1853 part
1854 {
1855 name: "leds_off";
1856 mouse_events: 0;
1857 scale: 1;
1858 description
1859 {
1860 state: "default" 0.0;
1861 image.normal: "volume_knob_ledsoff.png";
1862 color: 255 255 255 50;
1863 }
1864 }
1865
1866 #define VOLUME_LED_ON(num, inum) \
1867 part \
1868 { \
1869 name: "led_"num; \
1870 mouse_events: 0; \
1871 scale: 1; \
1872 description \
1873 { \
1874 state: "default" 0.0; \
1875 rel1.to: "leds_off"; \
1876 rel2.to: "leds_off"; \
1877 image.normal: "volume_led_01.png"; \
1878 map { \
1879 on: 1; \
1880 rotation { \
1881 center: "bg"; \
1882 z: (((inum-1)*VOLUME_MAX_ANGLE)/45); \
1883 } \
1884 } \
1885 visible: 0; \
1886 color: 255 255 255 0; \
1887 } \
1888 description \
1889 { \
1890 state: "visible" 0.0; \
1891 inherit: "default" 0.0; \
1892 visible: 1; \
1893 color: 255 255 255 255; \
1894 } \
1895 } \
1896 program \
1897 { \
1898 name: "show_led_"num; \
1899 action: STATE_SET "visible" 0.0; \
1900 transition: DECELERATE 0.6 CURRENT; \
1901 target: "led_"num; \
1902 } \
1903 program \
1904 { \
1905 name: "hide_led_"num; \
1906 action: STATE_SET "default" 0.0; \
1907 transition: DECELERATE 0.6 CURRENT; \
1908 target: "led_"num; \
1909 } \
1910 program \
1911 { \
1912 name: "sig_led_changed_"num; \
1913 signal: "leds,changed"; \
1914 source: "volume"; \
1915 script \
1916 { \
1917 new current_status = fetch_int(led_status, inum - 1); \
1918 new new_status; \
1919 if (get_int(leds_on) >= inum) \
1920 new_status = 1; \
1921 else \
1922 new_status = 0; \
1923 \
1924 if (current_status != new_status) \
1925 { \
1926 if (new_status == 1) \
1927 run_program(PROGRAM:"show_led_"num); \
1928 else if (new_status == 0) \
1929 run_program(PROGRAM:"hide_led_"num); \
1930 \
1931 replace_int(led_status, inum - 1, new_status); \
1932 } \
1933 } \
1934 }
1935
1936 VOLUME_LED_ON("01", 1)
1937 VOLUME_LED_ON("02", 2)
1938 VOLUME_LED_ON("03", 3)
1939 VOLUME_LED_ON("04", 4)
1940 VOLUME_LED_ON("05", 5)
1941 VOLUME_LED_ON("06", 6)
1942 VOLUME_LED_ON("07", 7)
1943 VOLUME_LED_ON("08", 8)
1944 VOLUME_LED_ON("09", 9)
1945 VOLUME_LED_ON("10", 10)
1946
1947 VOLUME_LED_ON("11", 11)
1948 VOLUME_LED_ON("12", 12)
1949 VOLUME_LED_ON("13", 13)
1950 VOLUME_LED_ON("14", 14)
1951 VOLUME_LED_ON("15", 15)
1952 VOLUME_LED_ON("16", 16)
1953 VOLUME_LED_ON("17", 17)
1954 VOLUME_LED_ON("18", 18)
1955 VOLUME_LED_ON("19", 19)
1956 VOLUME_LED_ON("20", 20)
1957
1958 VOLUME_LED_ON("21", 21)
1959 VOLUME_LED_ON("22", 22)
1960 VOLUME_LED_ON("23", 23)
1961 VOLUME_LED_ON("24", 24)
1962 VOLUME_LED_ON("25", 25)
1963 VOLUME_LED_ON("26", 26)
1964 VOLUME_LED_ON("27", 27)
1965 VOLUME_LED_ON("28", 28)
1966 VOLUME_LED_ON("29", 29)
1967 VOLUME_LED_ON("30", 30)
1968
1969 VOLUME_LED_ON("31", 31)
1970 VOLUME_LED_ON("32", 32)
1971 VOLUME_LED_ON("33", 33)
1972 VOLUME_LED_ON("34", 34)
1973 VOLUME_LED_ON("35", 35)
1974 VOLUME_LED_ON("36", 36)
1975 VOLUME_LED_ON("37", 37)
1976 VOLUME_LED_ON("38", 38)
1977 VOLUME_LED_ON("39", 39)
1978 VOLUME_LED_ON("40", 40)
1979
1980 VOLUME_LED_ON("41", 41)
1981 VOLUME_LED_ON("42", 42)
1982 VOLUME_LED_ON("43", 43)
1983 VOLUME_LED_ON("44", 44)
1984 VOLUME_LED_ON("45", 45)
1985
1986 part
1987 {
1988 name: "event";
1989 type: RECT;
1990 description
1991 {
1992 state: "default" 0.0;
1993 rel1.to: "knob";
1994 rel2.to: "knob";
1995 color: 0 0 0 0;
1996
1997 }
1998 dragable
1999 {
2000 x: 1 1 0;
2001 y: 1 1 0;
2002 }
2003 }
2004
2005 part
2006 {
2007 //The real slider for elm_slider
2008 name: "elm.dragable.slider";
2009 type: RECT;
2010 description
2011 {
2012 state: "default" 0.0;
2013 visible: 0;
2014
2015 }
2016 dragable
2017 {
2018 x: 1 1 0;
2019 y: 0 0 0;
2020 }
2021 }
2022
2023 }
2024
2025 programs
2026 {
2027 program
2028 {
2029 name: "on_drag_start";
2030 signal: "drag,start";
2031 source: "event";
2032 script
2033 {
2034 new mx, my;
2035 get_mouse(mx, my);
2036
2037 set_float(knob_offset, calc_angle(mx, my) - get_float(knob_angle));
2038 }
2039 }
2040
2041 program
2042 {
2043 name: "on_drag_move";
2044 signal: "drag";
2045 source: "event";
2046 script
2047 {
2048 new mx, my;
2049 get_mouse(mx, my);
2050
2051 new Float:angle = calc_angle(mx, my) - get_float(knob_offset);
2052
2053 //Limits the button range
2054 if (angle < VOLUME_MIN_ANGLE) angle = VOLUME_MIN_ANGLE;
2055 if (angle > VOLUME_MAX_ANGLE) angle = VOLUME_MAX_ANGLE;
2056
2057 set_float(knob_angle, angle);
2058
2059 rotate_knob(angle);
2060 set_drag(PART:"elm.dragable.slider",
2061 get_float(knob_angle) / VOLUME_MAX_ANGLE, 0.0);
2062 }
2063 }
2064
2065
2066 program
2067 {
2068 name: "on_drag_stop";
2069 signal: "drag,stop";
2070 source: "event";
2071 script
2072 {
2073 set_drag(PART:"event", 0.0, 0.0);
2074 }
2075 }
2076
2077 program
2078 {
2079 name: "on_slider_set";
2080 signal: "drag,set";
2081 source: "elm.dragable.slider";
2082 script
2083 {
2084 new Float:dx, Float:dy;
2085 get_drag(PART:"elm.dragable.slider", dx, dy);
2086
2087 new Float:angle = dx * VOLUME_MAX_ANGLE;
2088 set_float(knob_angle, angle);
2089
2090 rotate_knob(angle);
2091 }
2092 }
2093
2094 program
2095 {
2096 name: "on_init";
2097 signal: "show";
2098 script
2099 {
2100 while (count(led_status) < VOLUME_MAX_LEDS)
2101 append_int(led_status, 0);
2102 }
2103 }
2104 program
2105 {
2106 name: "on_wheel";
2107 signal: "mouse,wheel*";
2108 source: "event";
2109 after: "on_slider_set";
2110 }
2111 }
2112 }
2113
2114 group
2115 {
2116 name: "elm/slider/horizontal/knob_volume";
2117 inherit: "base/knob_volume";
2118 parts
2119 {
2120 part
2121 {
2122 name: "knob_back";
2123 description
2124 {
2125 state: "default" 0.0;
2126 rel1.to: "knob";
2127 rel2.to: "knob";
2128 aspect: 1.0 1.0;
2129 aspect_preference: VERTICAL;
2130 }
2131 }
2132
2133 part
2134 {
2135 name: "knob";
2136 description
2137 {
2138 state: "default" 0.0;
2139 min: 24 24;
2140 aspect: 1.0 1.0;
2141 aspect_preference: VERTICAL;
2142 rel1.offset: 1 1;
2143 rel2.relative: 0.0 1.0;
2144 rel2.offset: 1 -2;
2145 align: 0.0 0.5;
2146 }
2147 }
2148
2149 part
2150 {
2151 name: "leds_off";
2152 description
2153 {
2154 state: "default" 0.0;
2155 rel1.to: "knob";
2156 rel2.to: "knob";
2157 aspect: 1.0 1.0;
2158 aspect_preference: VERTICAL;
2159 }
2160 }
2161 }
2162 }
2163
2164
2165/* aaaaaaaaaand because the volume knob doesn't resize we need another group here */
2166 group
2167 {
2168 name: "elm/slider/horizontal/knob_volume_big";
2169 inherit: "base/knob_volume";
2170 min: 200 200;
2171
2172 parts
2173 {
2174 part
2175 {
2176 name: "knob_back";
2177 description
2178 {
2179 state: "default" 0.0;
2180 rel1 { relative: 0.5 0.5; offset: -100 -100; }
2181 rel2 { relative: 0.5 0.5; offset: 99 99; }
2182 }
2183 }
2184
2185 part
2186 {
2187 name: "knob";
2188 description
2189 {
2190 state: "default" 0.0;
2191 rel1 { relative: 0.5 0.5; offset: -100 -100; }
2192 rel2 { relative: 0.5 0.5; offset: 99 99; }
2193 }
2194 }
2195
2196 part
2197 {
2198 name: "leds_off";
2199 description
2200 {
2201 state: "default" 0.0;
2202 rel1 { relative: 0.5 0.5; offset: -100 -100; }
2203 rel2 { relative: 0.5 0.5; offset: 99 99; }
2204 }
2205 }
2206 }
2207 }
2208}
diff --git a/conf2/e_conf2.c b/conf2/e_conf2.c
new file mode 100644
index 0000000..cd41109
--- /dev/null
+++ b/conf2/e_conf2.c
@@ -0,0 +1,1319 @@
1#include "e.h"
2
3#include "e_mod_main.h"
4
5static Elm_Genlist_Item_Class *itc_cats = NULL;
6static Elm_Genlist_Item_Class *itc_tags = NULL;
7static Elm_Genlist_Item_Class *itc_opts = NULL;
8static Elm_Genlist_Item_Class *itc_thumb = NULL;
9static E_Configure_Option_Ctx *ctx_entry = NULL;
10static E_Configure_Option_Ctx *ctx_click = NULL;
11static E_Configure_Option_Ctx *ctx_active = NULL;
12static Evas_Object *list[2] = {NULL, NULL};
13static Evas_Object *layout = NULL;
14static Evas_Object *overlay = NULL;
15static Evas_Object *back = NULL;
16static Evas_Object *entry = NULL;
17static Ecore_Timer *reset_timer = NULL;
18static Eina_List *handlers = NULL;
19static Eina_Bool overlay_locked = EINA_FALSE;
20
21static Eina_Bool buttons_visible = EINA_TRUE;
22
23static Eina_Bool _event_opt_changed(void *d EINA_UNUSED, int type EINA_UNUSED, E_Event_Configure_Option_Changed *ev);
24static void _tag_sel(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
25static void _opt_sel(void *data, Evas_Object *obj EINA_UNUSED, void *event_info);
26
27static void
28_buttons_toggle(E_Configure_Option *co, Eina_Bool global)
29{
30 Eina_Bool show;
31
32 if (global)
33 show = !!e_configure_option_changed_list();
34 else
35 show = co->changed;
36 if (show)
37 {
38 if (!buttons_visible)
39 {
40 elm_layout_signal_emit(layout, "e,action,apply_show", "e");
41 elm_layout_signal_emit(layout, "e,action,discard_show", "e");
42 }
43 buttons_visible = EINA_TRUE;
44 }
45 else
46 {
47 if (buttons_visible)
48 {
49 elm_layout_signal_emit(layout, "e,action,apply_hide", "e");
50 elm_layout_signal_emit(layout, "e,action,discard_hide", "e");
51 }
52 buttons_visible = EINA_FALSE;
53 }
54}
55
56static double
57_opt_overlay_value_update(E_Configure_Option *co, Evas_Object *obj)
58{
59 char buf[256];
60 double d;
61 Elm_Object_Item *it;
62 Evas_Object *o;
63
64 it = e_configure_option_data_get(co, "conf_item");
65 if (overlay_locked)
66 o = elm_object_part_content_get(overlay, "e.swallow.content");
67 else
68 o = elm_object_item_part_content_get(it, "elm.swallow.icon");
69 d = elm_slider_value_get(obj);
70
71
72 elm_slider_value_set(o, d);
73 snprintf(buf, sizeof(buf), co->info, d);
74 elm_object_part_text_set(overlay, "e.text.value", buf);
75 return d;
76}
77
78static void
79_opt_item_update(E_Configure_Option *co)
80{
81 Elm_Object_Item *it;
82 Evas_Object *o, *o2 = NULL;
83 void *val;
84
85 it = e_configure_option_data_get(co, "conf_item");
86 if (!it) return;
87 o = elm_object_item_part_content_get(it, "elm.swallow.icon");
88 if (overlay && (!overlay_locked) && (co == evas_object_data_get(overlay, "config_option")))
89 o2 = elm_object_part_content_get(overlay, "e.swallow.content");
90 val = (void*)e_configure_option_value_get(co);
91 switch (co->type)
92 {
93 case E_CONFIGURE_OPTION_TYPE_BOOL:
94 elm_check_state_pointer_set(o, val);
95 elm_check_state_pointer_set(o, NULL);
96 break;
97 case E_CONFIGURE_OPTION_TYPE_DOUBLE_UCHAR:
98 elm_slider_value_set(o, *(unsigned char*)val);
99 if (o2)
100 {
101 elm_slider_value_set(o2, *(unsigned char*)val);
102 _opt_overlay_value_update(co, o2);
103 }
104 break;
105 case E_CONFIGURE_OPTION_TYPE_DOUBLE:
106 elm_slider_value_set(o, *(double*)val);
107 if (o2)
108 {
109 elm_slider_value_set(o2, *(double*)val);
110 _opt_overlay_value_update(co, o2);
111 }
112 break;
113 case E_CONFIGURE_OPTION_TYPE_DOUBLE_INT:
114 elm_slider_value_set(o, *(int*)val);
115 if (o2)
116 {
117 elm_slider_value_set(o2, *(int*)val);
118 _opt_overlay_value_update(co, o2);
119 }
120 break;
121 case E_CONFIGURE_OPTION_TYPE_DOUBLE_UINT:
122 elm_slider_value_set(o, *(unsigned int*)val);
123 if (o2)
124 {
125 elm_slider_value_set(o2, *(unsigned int*)val);
126 _opt_overlay_value_update(co, o2);
127 }
128 break;
129 case E_CONFIGURE_OPTION_TYPE_ENUM:
130 if (o2) evas_object_smart_callback_call(o2, "changed", NULL);
131 break;
132 case E_CONFIGURE_OPTION_TYPE_STR:
133 if (o2) evas_object_smart_callback_call(o2, "activated", NULL);
134 break;
135 case E_CONFIGURE_OPTION_TYPE_INT:
136 case E_CONFIGURE_OPTION_TYPE_UINT:
137 case E_CONFIGURE_OPTION_TYPE_CUSTOM:
138 break; //not applicable
139 }
140
141}
142
143static Eina_Bool
144_button_icon_set(Evas_Object *o, const char *name)
145{
146 Evas_Object *ob;
147
148 ob = elm_icon_add(o);
149 if (!elm_icon_standard_set(ob, name))
150 {
151 char buf[4096];
152 const char *file;
153
154 snprintf(buf, sizeof(buf), "e/icons/%s", name);
155 file = e_theme_edje_icon_fallback_file_get(buf);
156 if ((!file) || (!file[0])) return EINA_FALSE;
157 if (!elm_image_file_set(ob, file, buf))
158 {
159 evas_object_del(ob);
160 return EINA_FALSE;
161 }
162 }
163 elm_object_content_set(o, ob);
164 elm_object_style_set(o, "conf2");
165 return EINA_TRUE;
166}
167
168static Evas_Object *
169_e_conf2_opt_tooltip_cb(void *data, Evas_Object *owner EINA_UNUSED, Evas_Object *tt, void *item EINA_UNUSED)
170{
171 Evas_Object *o;
172
173 /* FIXME: tooltip theme seems to be broken for sizing */
174 //e = elm_layout_add(tt);
175 //elm_layout_theme_set(e, "tooltip", "base", "conf2");
176 o = elm_label_add(tt);
177 elm_object_style_set(o, "conf2");
178 elm_object_text_set(o, data);
179 evas_object_show(o);
180 //elm_object_part_content_set(e, "elm.swallow.content", o);
181 return o;
182}
183
184static void
185_e_conf2_opt_realize(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *it)
186{
187 E_Configure_Option *co;
188
189 co = elm_object_item_data_get(it);
190 if (!co->help) return;
191 elm_object_item_tooltip_content_cb_set(it, _e_conf2_opt_tooltip_cb, co->help, NULL);
192 elm_object_item_tooltip_style_set(it, "conf2");
193 elm_object_item_tooltip_window_mode_set(it, EINA_TRUE);
194}
195
196static void
197_e_conf2_opts_list(E_Configure_Option_Ctx *ctx)
198{
199 Eina_List *l;
200 E_Configure_Option *co;
201 Elm_Object_Item *it;
202
203 elm_genlist_clear(list[1]);
204 EINA_LIST_FOREACH(ctx->opts, l, co)
205 {
206 it = elm_genlist_item_append(list[1], itc_opts, co, NULL, 0, _opt_sel, co);
207 e_configure_option_data_set(co, "conf_item", it);
208 }
209}
210
211static void
212_ctx_active_update(void)
213{
214 Eina_List *l;
215 Eina_Stringshare *tag;
216
217 ctx_active->tags = eina_list_free(ctx_active->tags);
218 ctx_active->changed = EINA_TRUE;
219 if (ctx_entry && ctx_entry->tags)
220 ctx_active->tags = eina_list_clone(ctx_entry->tags);
221 else
222 {
223 if (ctx_click && ctx_click->tags)
224 ctx_active->tags = eina_list_clone(ctx_click->tags);
225 return;
226 }
227 if ((!ctx_click) || (!ctx_click->tags)) return;
228 EINA_LIST_FOREACH(ctx_click->tags, l, tag)
229 e_configure_option_ctx_tag_add(ctx_active, tag);
230}
231
232static void
233_tag_sel(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
234{
235 const Eina_List *l;
236 Eina_Stringshare *tag;
237
238 E_FREE_FUNC(reset_timer, ecore_timer_del);
239 if (!ctx_click) ctx_click = e_configure_option_ctx_new();
240 if (!e_configure_option_ctx_tag_add(ctx_click, data)) return;
241 _ctx_active_update();
242 e_configure_option_ctx_option_list(ctx_active);
243 elm_object_disabled_set(back, 0);
244 if (!elm_genlist_items_count(list[1]))
245 elm_layout_signal_emit(layout, "e,action,expand", "e");
246 _e_conf2_opts_list(ctx_active);
247 elm_genlist_clear(list[0]);
248 e_configure_option_ctx_match_tag_list(ctx_active);
249 EINA_LIST_FOREACH(ctx_active->match_tags, l, tag)
250 elm_genlist_item_append(list[0], itc_tags, tag, NULL, 0, _tag_sel, tag);
251}
252
253static void
254_cat_sel(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
255{
256 Eina_Stringshare *tag;
257 const Eina_List *l;
258 Eina_List *ll, *lll, *opts = NULL;
259 E_Configure_Option *co;
260
261 elm_object_disabled_set(back, 0);
262 if (!ctx_click) ctx_click = e_configure_option_ctx_new();
263 ctx_click->category = ctx_active->category = data;
264 E_FREE_FUNC(reset_timer, ecore_timer_del);
265 elm_genlist_clear(list[0]);
266 EINA_LIST_FOREACH(e_configure_option_category_list_tags(data), l, tag)
267 {
268 elm_genlist_item_append(list[0], itc_tags, tag, NULL, 0, _tag_sel, tag);
269 opts = eina_list_merge(opts, eina_list_clone(e_configure_option_tag_list_options(tag)));
270 }
271 EINA_LIST_FOREACH_SAFE(opts, ll, lll, co)
272 {
273 Eina_List *lc;
274
275 while (1)
276 {
277 if (!lll) break;
278 lc = eina_list_data_find_list(lll, co);
279 if (!lc) break;
280 if (lc == lll) lll = eina_list_next(lll);
281 opts = eina_list_remove_list(opts, lc);
282 }
283 }
284 ctx_active->opts = opts;
285 if (!elm_genlist_items_count(list[1]))
286 elm_layout_signal_emit(layout, "e,action,expand", "e");
287 _e_conf2_opts_list(ctx_active);
288}
289
290static Eina_Bool
291_reset_cb(void *d EINA_UNUSED)
292{
293 const Eina_List *l;
294 Eina_Stringshare *cat;
295
296 elm_layout_signal_emit(layout, "e,action,collapse", "e");
297 elm_genlist_clear(list[0]);
298 elm_genlist_clear(list[1]);
299 ctx_active->match_tags = eina_list_free(ctx_active->match_tags);
300 ctx_active->tags = eina_list_free(ctx_active->tags);
301 ctx_active->opts = eina_list_free(ctx_active->opts);
302 E_FREE_FUNC(ctx_entry, e_configure_option_ctx_free);
303 E_FREE_FUNC(ctx_click, e_configure_option_ctx_free);
304 EINA_LIST_FOREACH(e_configure_option_category_list(), l, cat)
305 elm_genlist_item_append(list[0], itc_cats, cat, NULL, 0, _cat_sel, cat);
306 elm_object_disabled_set(back, 1);
307 _buttons_toggle(NULL, EINA_TRUE);
308 ctx_active->category = NULL;
309 reset_timer = NULL;
310 return EINA_FALSE;
311}
312
313static void
314_entry_change_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
315{
316 Eina_Stringshare *txt, *tag;
317 Eina_List *l;
318
319 E_FREE_FUNC(reset_timer, ecore_timer_del);
320 txt = elm_entry_entry_get(obj);
321 E_FREE_FUNC(overlay, evas_object_del);
322 if (!ctx_entry) ctx_entry = e_configure_option_ctx_new();
323 if (!e_configure_option_ctx_update(ctx_entry, txt)) return;
324 _ctx_active_update();
325 if (!e_configure_option_ctx_option_list(ctx_active))
326 {
327 if (!ctx_active->tags) _reset_cb(NULL);
328 else elm_genlist_clear(list[1]);
329 return;
330 }
331 if ((ctx_click && ctx_click->tags) || ctx_active->category)
332 elm_object_disabled_set(back, 0);
333 if (!elm_genlist_items_count(list[1]))
334 elm_layout_signal_emit(layout, "e,action,expand", "e");
335 _e_conf2_opts_list(ctx_active);
336 elm_genlist_clear(list[0]);
337 e_configure_option_ctx_match_tag_list(ctx_active);
338 EINA_LIST_FOREACH(ctx_active->match_tags, l, tag)
339 elm_genlist_item_append(list[0], itc_tags, tag, NULL, 0, _tag_sel, tag);
340}
341
342static void
343_apply_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
344{
345 e_configure_option_apply_all();
346 _buttons_toggle(NULL, EINA_TRUE);
347}
348
349static void
350_discard_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
351{
352 /* buttons hidden in event callback */
353 if (overlay)
354 {
355 E_Configure_Option *co;
356
357 co = evas_object_data_get(overlay, "config_option");
358 if (co)
359 {
360 e_configure_option_reset(co);
361 return;
362 }
363
364 }
365 e_configure_option_reset_all();
366}
367
368static Eina_Bool
369_cat_back_cb(void *data EINA_UNUSED)
370{
371 ctx_active->tags = eina_list_free(ctx_active->tags);
372 ctx_active->opts = eina_list_free(ctx_active->opts);
373 _cat_sel((void*)ctx_active->category, NULL, NULL);
374 reset_timer = NULL;
375 return EINA_FALSE;
376}
377
378static void
379_back_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
380{
381 Elm_Object_Item *it;
382 const Eina_List *l;
383 Eina_Stringshare *tag;
384 Eina_Bool cat = EINA_FALSE;
385
386 E_FREE_FUNC(reset_timer, ecore_timer_del);
387 if (overlay)
388 {
389 evas_object_del(overlay);
390 return;
391 }
392 if (!ctx_click) return;
393 E_FREE_FUNC(overlay, evas_object_del);
394 if (ctx_click->tags)
395 {
396 cat = EINA_TRUE;
397 if (!e_configure_option_ctx_tag_pop(ctx_click)) return;
398 _ctx_active_update();
399 }
400 if ((!ctx_click->tags) && (!ctx_active->tags))
401 {
402 if (cat)
403 reset_timer = ecore_timer_add(0.1, _cat_back_cb, NULL);
404 else
405 reset_timer = ecore_timer_add(0.01, _reset_cb, NULL);
406 return;
407 }
408 e_configure_option_ctx_option_list(ctx_active);
409 _e_conf2_opts_list(ctx_active);
410 e_configure_option_ctx_match_tag_list(ctx_active);
411 EINA_LIST_FOREACH(ctx_active->match_tags, l, tag)
412 elm_genlist_item_append(list[0], itc_tags, tag, NULL, 0, _tag_sel, tag);
413 it = elm_genlist_selected_item_get(list[0]);
414 if (it) elm_genlist_item_selected_set(it, EINA_FALSE);
415}
416
417static void
418_e_conf2_del(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
419{
420 E_FREE_FUNC(itc_cats, elm_genlist_item_class_free);
421 E_FREE_FUNC(itc_tags, elm_genlist_item_class_free);
422 E_FREE_FUNC(itc_opts, elm_genlist_item_class_free);
423 E_FREE_FUNC(itc_thumb, elm_genlist_item_class_free);
424 E_FREE_FUNC(ctx_entry, e_configure_option_ctx_free);
425 E_FREE_FUNC(ctx_click, e_configure_option_ctx_free);
426 E_FREE_FUNC(ctx_active, e_configure_option_ctx_free);
427 E_FREE_FUNC(reset_timer, ecore_timer_del);
428 list[0] = list[1] = layout = overlay = back = entry = NULL;
429 E_FREE_LIST(handlers, ecore_event_handler_del);
430 e_configure_option_reset_all();
431 buttons_visible = EINA_TRUE;
432 overlay_locked = EINA_FALSE;
433}
434
435static char *
436_e_conf2_text_get_opts(void *data, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED)
437{
438 E_Configure_Option *co = data;
439 char *txt = NULL;
440
441 if (!strcmp(part, "elm.text"))
442 txt = strdup(co->desc);
443 else if (!strcmp(part, "elm.text.sub"))
444 txt = strdup(co->name);
445
446 return txt;
447}
448
449static void
450_e_conf2_opt_change_double_int(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
451{
452 E_Configure_Option *co = data;
453 int x;
454
455 x = lround(elm_slider_value_get(obj));
456
457 if (e_config->cfgdlg_auto_apply)
458 *(int*)co->valptr = x;
459 else
460 eina_value_set(&co->val, x);
461 e_configure_option_changed(co);
462}
463
464static void
465_e_conf2_opt_change_double(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
466{
467 E_Configure_Option *co = data;
468
469 if (e_config->cfgdlg_auto_apply)
470 *(double*)co->valptr = elm_slider_value_get(obj);
471 else
472 eina_value_set(&co->val, elm_slider_value_get(obj));
473 e_configure_option_changed(co);
474}
475
476static void
477_e_conf2_opt_change_double_uchar(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
478{
479 E_Configure_Option *co = data;
480 int x;
481 unsigned char u;
482
483 x = lround(elm_slider_value_get(obj));
484 u = MAX(0, x);
485
486 if (e_config->cfgdlg_auto_apply)
487 *(unsigned char*)co->valptr = u;
488 else
489 eina_value_set(&co->val, u);
490 e_configure_option_changed(co);
491}
492
493static void
494_e_conf2_opt_change_bool(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
495{
496 E_Configure_Option *co = data;
497
498 if (e_config->cfgdlg_auto_apply)
499 *(Eina_Bool*)co->valptr = elm_check_state_get(obj);
500 else
501 eina_value_set(&co->val, elm_check_state_get(obj));
502 e_configure_option_changed(co);
503}
504
505static void
506_opt_overlay_slider_change(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
507{
508 E_Configure_Option *co = data;
509
510 switch (co->type)
511 {
512 case E_CONFIGURE_OPTION_TYPE_DOUBLE:
513 _opt_overlay_value_update(co, obj);
514 _e_conf2_opt_change_double(co, obj, NULL);
515 break;
516 case E_CONFIGURE_OPTION_TYPE_DOUBLE_INT:
517 _opt_overlay_value_update(co, obj);
518 _e_conf2_opt_change_double_int(co, obj, NULL);
519 break;
520 case E_CONFIGURE_OPTION_TYPE_DOUBLE_UCHAR:
521 _opt_overlay_value_update(co, obj);
522 _e_conf2_opt_change_double_uchar(co, obj, NULL);
523 default:
524 break;
525 }
526}
527
528static void
529_opt_overlay_del(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
530{
531 Elm_Object_Item *it;
532 E_Event_Configure_Option_Changed ev;
533
534 if (!e_configure_option_tags_list()) return;
535 overlay = NULL;
536 it = elm_genlist_selected_item_get(list[1]);
537 if (it) elm_genlist_item_selected_set(it, EINA_FALSE);
538 elm_layout_signal_emit(layout, "e,action,overlay_hide", "e");
539 elm_object_disabled_set(list[0], EINA_FALSE);
540 elm_object_disabled_set(list[1], EINA_FALSE);
541 elm_object_focus_allow_set(entry, EINA_TRUE);
542 elm_object_focus_allow_set(list[0], EINA_TRUE);
543 elm_object_focus_allow_set(list[1], EINA_TRUE);
544 elm_object_focus_set(list[1], EINA_TRUE);
545 ev.co = evas_object_data_get(obj, "config_option");
546 _event_opt_changed(NULL, E_EVENT_CONFIGURE_OPTION_CHANGED, &ev);
547}
548
549static void
550_opt_overlay_list_change(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
551{
552 E_Configure_Option_Info *oi = data;
553
554 elm_object_part_text_set(overlay, "e.text.value", oi->name);
555 if (oi->co->type == E_CONFIGURE_OPTION_TYPE_STR)
556 {
557 if (e_config->cfgdlg_auto_apply)
558 eina_stringshare_replace(oi->co->valptr, oi->value);
559 else
560 eina_value_set(&oi->co->val, oi->value);
561 }
562 else
563 {
564 if (e_config->cfgdlg_auto_apply)
565 *(int*)oi->co->valptr = *(int*)oi->value;
566 else
567 eina_value_set(&oi->co->val, *(int*)oi->value);
568 }
569
570 e_configure_option_changed(oi->co);
571}
572
573static void
574_opt_overlay_dismiss(void *d EINA_UNUSED, Evas_Object *obj EINA_UNUSED, const char *sig EINA_UNUSED, const char *source EINA_UNUSED)
575{
576 evas_object_del(overlay);
577}
578
579static void
580_opt_overlay_create(void)
581{
582 Evas_Object *o;
583
584 overlay = o = elm_layout_add(layout);
585 evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, _opt_overlay_del, NULL);
586 elm_layout_theme_set(o, "conf2", "option", "overlay");
587}
588
589static void
590_e_conf2_item_del_thumb(void *data, Evas_Object *obj EINA_UNUSED)
591{
592 E_Configure_Option_Info *oi = data;
593
594 eina_stringshare_del(oi->value);
595 e_configure_option_info_free(oi);
596}
597
598static Evas_Object *
599_e_conf2_content_get_thumb(void *data, Evas_Object *obj, const char *part EINA_UNUSED)
600{
601 E_Configure_Option_Info *oi = data;
602 Evas_Object *o;
603 Evas *e;
604 E_Zone *zone;
605
606 e = evas_object_evas_get(obj);
607 o = e_configure_option_info_thumb_get(oi, e);
608 if (o) return o;
609
610 if (!oi->thumb_file) return NULL;
611 zone = e_util_zone_current_get(e_manager_current_get());
612 /* viva la revolucion de livethumb!!! */
613 o = e_widget_preview_add(e, 170, (170 * zone->h) / zone->w);
614 if (oi->thumb_key)
615 e_widget_preview_edje_set(o, oi->thumb_file, oi->thumb_key);
616 else
617 e_widget_preview_file_set(o, oi->thumb_file, oi->thumb_key);
618
619/* I guess elm_image sucks, this looks like shit :/
620 o = elm_image_add(obj);
621 elm_image_file_set(o, oi->thumb_file, oi->thumb_key);
622 if (elm_image_animated_available_get(o))
623 {
624 elm_image_animated_set(o, EINA_TRUE);
625 elm_image_animated_play_set(o, EINA_TRUE);
626 }
627 elm_image_aspect_fixed_set(o, EINA_TRUE);
628 elm_image_prescale_set(o, 300);
629*/
630 return o;
631}
632
633static char *
634_e_conf2_text_get_thumb(void *data, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED)
635{
636 E_Configure_Option_Info *oi = data;
637
638 return oi->name ? strdup(oi->name) : NULL;
639}
640
641static void
642_opt_overlay_entry_change(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
643{
644 E_Configure_Option *co = data;
645 Eina_Stringshare *str;
646
647 str = elm_entry_entry_get(obj);
648 if (str == *(Eina_Stringshare**)co->valptr) return;
649 if (e_config->cfgdlg_auto_apply)
650 eina_stringshare_replace(co->valptr, str);
651 else
652 eina_value_set(&co->val, str);
653 e_configure_option_changed(co);
654}
655
656static void
657_opt_overlay_radio_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
658{
659 e_configure_option_info_free(data);
660}
661
662static void
663_opt_overlay_radio_change(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
664{
665 E_Configure_Option_Info *oi = data;
666
667 elm_object_part_text_set(overlay, "e.text.value", oi->name);
668 if (e_config->cfgdlg_auto_apply)
669 *(int*)oi->co->valptr = (long)(intptr_t)oi->value;
670 else
671 eina_value_set(&oi->co->val, (long)(intptr_t)oi->value);
672
673 e_configure_option_changed(oi->co);
674}
675
676static void
677_opt_overlay_show(E_Configure_Option *co, Elm_Object_Item *it)
678{
679 Evas_Object *o, *sl;
680 Eina_Bool global = EINA_FALSE, show = EINA_TRUE;
681 Eina_List *l;
682 double d;
683 char buf[256];
684
685 if (!it) it = e_configure_option_data_get(co, "conf_item");
686 switch (co->type)
687 {
688 case E_CONFIGURE_OPTION_TYPE_CUSTOM:
689 EINA_SAFETY_ON_NULL_RETURN(co->info);
690 e_configure_registry_call(co->info, NULL, NULL);
691 if (it) elm_genlist_item_selected_set(it, EINA_FALSE);
692 break;
693 case E_CONFIGURE_OPTION_TYPE_ENUM:
694 if (!overlay) _opt_overlay_create();
695 else show = EINA_FALSE;
696 o = overlay;
697 evas_object_data_set(overlay, "config_option", co);
698 elm_object_part_text_set(o, "e.text.label", co->desc);
699 l = e_configure_option_info_get(co);
700 if (l)
701 {
702 E_Configure_Option_Info *oi;
703 Evas_Object *bx, *g, *r;
704
705 sl = elm_scroller_add(overlay);
706 EXPAND(sl);
707 FILL(sl);
708 elm_scroller_bounce_set(sl, 0, 0);
709 elm_scroller_policy_set(sl, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_AUTO);
710 bx = elm_box_add(o);
711 EXPAND(bx);
712 FILL(bx);
713 elm_object_content_set(sl, bx);
714 elm_box_homogeneous_set(bx, 1);
715 g = elm_radio_add(overlay);
716 elm_object_focus_allow_set(list[0], EINA_FALSE);
717 elm_object_focus_allow_set(list[1], EINA_FALSE);
718 elm_object_focus_allow_set(entry, EINA_FALSE);
719 EINA_LIST_FREE(l, oi)
720 {
721 if (!oi->name) continue; //FIXME sep
722 r = elm_radio_add(overlay);
723 elm_object_style_set(r, "conf2");
724 EXPAND(r);
725 FILL(r);
726 elm_radio_group_add(r, g);
727 elm_object_text_set(r, oi->name);
728 elm_radio_state_value_set(r, (long)(intptr_t)oi->value);
729 evas_object_event_callback_add(r, EVAS_CALLBACK_DEL, _opt_overlay_radio_del, oi);
730 evas_object_smart_callback_add(r, "changed", _opt_overlay_radio_change, oi);
731 if (oi->current)
732 {
733 elm_radio_value_set(g, (long)(intptr_t)oi->value);
734 elm_object_part_text_set(overlay, "e.text.value", oi->name);
735 }
736 evas_object_show(r);
737 elm_object_focus_set(r, EINA_TRUE);
738 elm_box_pack_end(bx, r);
739 }
740 evas_object_show(bx);
741 }
742 else
743 {
744 /* FIXME? */
745 evas_object_del(overlay);
746 return;
747 }
748 elm_object_part_content_set(o, "e.swallow.content", sl);
749 evas_object_show(sl);
750 evas_object_show(o);
751 elm_object_part_content_set(layout, "e.swallow.overlay", o);
752 if (show)
753 elm_layout_signal_emit(layout, "e,action,overlay_show", "e");
754 elm_object_disabled_set(list[0], EINA_TRUE);
755 elm_object_disabled_set(list[1], EINA_TRUE);
756 break;
757 case E_CONFIGURE_OPTION_TYPE_STR:
758 if (!overlay) _opt_overlay_create();
759 else show = EINA_FALSE;
760 o = overlay;
761 evas_object_data_set(overlay, "config_option", co);
762 elm_object_part_text_set(o, "e.text.label", co->desc);
763 l = e_configure_option_info_get(co);
764 if (l)
765 {
766 E_Configure_Option_Info *oi;
767 Elm_Object_Item *iit;
768
769 sl = elm_genlist_add(overlay);
770 elm_genlist_homogeneous_set(sl, EINA_TRUE);
771 elm_scroller_bounce_set(sl, 0, 0);
772 elm_scroller_policy_set(sl, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
773 EINA_LIST_FREE(l, oi)
774 {
775 if (!oi->name) continue; //FIXME sep
776 iit = elm_genlist_item_append(sl, itc_thumb, oi, NULL, 0, _opt_overlay_list_change, oi);
777 elm_genlist_item_selected_set(iit, oi->current);
778 if (oi->current) elm_genlist_item_show(iit, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
779 }
780 }
781 else
782 {
783 Eina_Stringshare **s;
784
785 sl = elm_entry_add(overlay);
786 s = (Eina_Stringshare**)e_configure_option_value_get(co);
787 if (s)
788 {
789 elm_entry_entry_set(sl, *s);
790 elm_entry_select_all(sl);
791 }
792 elm_entry_single_line_set(sl, EINA_TRUE);
793 elm_entry_scrollable_set(sl, EINA_TRUE);
794 elm_entry_cursor_begin_set(sl);
795 evas_object_smart_callback_add(sl, "activated", _opt_overlay_entry_change, co);
796 edje_extern_object_min_size_set(sl, 170, 20);
797 elm_object_part_text_set(overlay, "e.text.value", NULL);
798 }
799 elm_object_part_content_set(o, "e.swallow.content", sl);
800 evas_object_show(sl);
801 elm_object_focus_allow_set(list[0], EINA_FALSE);
802 elm_object_focus_allow_set(list[1], EINA_FALSE);
803 elm_object_focus_allow_set(entry, EINA_FALSE);
804 elm_object_focus_set(sl, EINA_TRUE);
805 evas_object_show(o);
806 elm_object_part_content_set(layout, "e.swallow.overlay", o);
807 if (show)
808 elm_layout_signal_emit(layout, "e,action,overlay_show", "e");
809 elm_object_disabled_set(list[0], EINA_TRUE);
810 elm_object_disabled_set(list[1], EINA_TRUE);
811 break;
812 case E_CONFIGURE_OPTION_TYPE_DOUBLE:
813 case E_CONFIGURE_OPTION_TYPE_DOUBLE_INT:
814 case E_CONFIGURE_OPTION_TYPE_DOUBLE_UINT:
815 case E_CONFIGURE_OPTION_TYPE_DOUBLE_UCHAR:
816 sl = elm_object_item_part_content_get(it, "elm.swallow.icon");
817 if (!overlay) _opt_overlay_create();
818 else show = EINA_FALSE;
819 o = overlay;
820 evas_object_data_set(overlay, "config_option", co);
821 elm_layout_signal_emit(overlay, "e,state,bg_hide", "e");
822 elm_object_part_text_set(o, "e.text.label", co->desc);
823 d = elm_slider_value_get(sl);
824 snprintf(buf, sizeof(buf), co->info, d);
825 elm_object_part_text_set(overlay, "e.text.value", buf);
826 sl = elm_slider_add(layout);
827 elm_slider_min_max_set(sl, co->minmax[0], co->minmax[1]);
828 /* raoulh! :) */
829 elm_slider_value_set(sl, d);
830 elm_object_style_set(sl, "knob_volume_big");
831 evas_object_smart_callback_add(sl, "changed", _opt_overlay_slider_change, co);
832 evas_object_show(sl);
833 elm_object_part_content_set(o, "e.swallow.content", sl);
834 evas_object_show(o);
835 elm_object_part_content_set(layout, "e.swallow.overlay", o);
836 if (show)
837 elm_layout_signal_emit(layout, "e,action,overlay_show", "e");
838 elm_object_disabled_set(list[0], EINA_TRUE);
839 elm_object_disabled_set(list[1], EINA_TRUE);
840 break;
841 default:
842 if (overlay) evas_object_del(overlay);
843 global = EINA_TRUE;
844 }
845 _buttons_toggle(co, global);
846}
847
848static void
849_opt_sel(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
850{
851 _opt_overlay_show(data, event_info);
852}
853
854static void
855_e_conf2_slider_drag_start(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
856{
857 overlay_locked = EINA_TRUE;
858 _opt_overlay_show(data, NULL);
859}
860
861static void
862_e_conf2_slider_drag_stop(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
863{
864 evas_object_del(overlay);
865 overlay_locked = EINA_FALSE;
866}
867
868static Evas_Object *
869_e_conf2_content_get_opts_slider_helper(E_Configure_Option *co)
870{
871 Evas_Object *o;
872
873 o = elm_slider_add(layout);
874 /* raoulh! :) */
875 elm_object_style_set(o, "knob_volume");
876 elm_slider_min_max_set(o, co->minmax[0], co->minmax[1]);
877 evas_object_smart_callback_add(o, "changed", _opt_overlay_slider_change, co);
878 evas_object_smart_callback_add(o, "slider,drag,start", _e_conf2_slider_drag_start, co);
879 evas_object_smart_callback_add(o, "slider,drag,stop", _e_conf2_slider_drag_stop, co);
880 return o;
881}
882
883static Evas_Object *
884_e_conf2_content_get_opts(void *data, Evas_Object *obj, const char *part EINA_UNUSED)
885{
886 E_Configure_Option *co = data;
887 Evas_Object *o = NULL;
888 const void *val;
889 //char buf[PATH_MAX];
890
891 if (!strcmp(part, "elm.swallow.icon"))
892 {
893 switch (co->type)
894 {
895 case E_CONFIGURE_OPTION_TYPE_BOOL:
896 o = elm_check_add(obj);
897 elm_object_style_set(o, "conf2");
898 val = e_configure_option_value_get(co);
899 elm_check_state_set(o, *(Eina_Bool*)val);
900 evas_object_smart_callback_add(o, "changed", _e_conf2_opt_change_bool, co);
901 break;
902 case E_CONFIGURE_OPTION_TYPE_DOUBLE_UCHAR:
903 o = _e_conf2_content_get_opts_slider_helper(co);
904 val = e_configure_option_value_get(co);
905 elm_slider_value_set(o, *(unsigned char*)val);
906 break;
907 case E_CONFIGURE_OPTION_TYPE_DOUBLE:
908 o = _e_conf2_content_get_opts_slider_helper(co);
909 val = e_configure_option_value_get(co);
910 elm_slider_value_set(o, *(double*)val);
911 break;
912 case E_CONFIGURE_OPTION_TYPE_DOUBLE_INT:
913 o = _e_conf2_content_get_opts_slider_helper(co);
914 val = e_configure_option_value_get(co);
915 elm_slider_value_set(o, *(int*)val);
916 break;
917 case E_CONFIGURE_OPTION_TYPE_DOUBLE_UINT:
918 o = _e_conf2_content_get_opts_slider_helper(co);
919 val = e_configure_option_value_get(co);
920 elm_slider_value_set(o, *(unsigned int*)val);
921 break;
922 case E_CONFIGURE_OPTION_TYPE_CUSTOM:
923 case E_CONFIGURE_OPTION_TYPE_STR:
924 case E_CONFIGURE_OPTION_TYPE_ENUM:
925 case E_CONFIGURE_OPTION_TYPE_INT:
926 case E_CONFIGURE_OPTION_TYPE_UINT:
927 {
928 Eina_Stringshare *icon;
929 char buf[4096];
930
931 icon = e_configure_option_data_get(co, "icon");
932 if (!icon) break;
933 if (eina_str_has_extension(icon, ".edj"))
934 o = e_util_icon_add(icon, evas_object_evas_get(obj));
935 else
936 {
937 snprintf(buf, sizeof(buf), "e/icons/%s", icon);
938
939 o = e_icon_add(evas_object_evas_get(obj));
940 e_util_icon_theme_set(o, icon);
941 }
942 }
943 break;
944 }
945 }
946 else if (!strcmp(part, "elm.swallow.end"))
947 {
948 if (!co->changed) return NULL;
949 o = edje_object_add(evas_object_evas_get(obj));
950 e_theme_edje_object_set(o, "base/theme/widgets", "e/widgets/ilist/toggle_end");
951 }
952 return o;
953}
954
955static void
956_e_conf2_item_del_opts(void *data, Evas_Object *obj EINA_UNUSED)
957{
958 if (e_configure_option_tags_list()) //if this is false, e is shutting down and the next call will crash
959 e_configure_option_data_set(data, "conf_item", NULL);
960}
961
962static char *
963_e_conf2_text_get_tags(void *data, Evas_Object *obj EINA_UNUSED, const char *part)
964{
965 char *txt;
966
967 if (strcmp(part, "elm.text")) return NULL;
968 txt = strdup(data);
969 txt[0] = toupper(txt[0]);
970 return txt;
971}
972
973static Evas_Object *
974_e_conf2_content_get_cats(void *data, Evas_Object *obj, const char *part)
975{
976 char buf[4096];
977 Eina_Stringshare *icon;
978 Evas_Object *o;
979
980 if (!strcmp(part, "elm.swallow.end")) return NULL;
981 icon = e_configure_option_category_icon_get(data);
982 if (!icon) return NULL;
983 if (eina_str_has_extension(icon, ".edj"))
984 o = e_util_icon_add(icon, evas_object_evas_get(obj));
985 else
986 {
987 snprintf(buf, sizeof(buf), "e/icons/%s", icon);
988
989 o = e_icon_add(evas_object_evas_get(obj));
990 e_util_icon_theme_set(o, icon);
991 }
992 return o;
993}
994
995static Evas_Object *
996_e_conf2_content_get_tags(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED)
997{
998 /* FIXME */
999 return NULL;
1000}
1001
1002static void
1003_e_conf2_key(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
1004{
1005 if (overlay) evas_object_del(overlay);
1006 else evas_object_del(obj);
1007}
1008
1009static Eina_Bool
1010_event_tag_del(void *d EINA_UNUSED, int type EINA_UNUSED, E_Event_Configure_Option_Tag_Del *ev EINA_UNUSED)
1011{
1012 /* not even gonna fuck with this */
1013 _reset_cb(NULL);
1014 return ECORE_CALLBACK_RENEW;
1015}
1016
1017static Eina_Bool
1018_event_tag_add(void *d EINA_UNUSED, int type EINA_UNUSED, E_Event_Configure_Option_Tag_Add *ev)
1019{
1020 Eina_List *l;
1021 Eina_Stringshare *tag;
1022
1023 e_configure_option_ctx_match_tag_list(ctx_active);
1024 if ((!ctx_active->match_tags) || (!eina_list_data_find(ctx_active->match_tags, ev->tag)))
1025 return ECORE_CALLBACK_RENEW;
1026 elm_genlist_clear(list[0]);
1027 EINA_LIST_FOREACH(ctx_active->match_tags, l, tag)
1028 elm_genlist_item_append(list[0], itc_tags, tag, NULL, 0, _tag_sel, tag);
1029 return ECORE_CALLBACK_RENEW;
1030}
1031
1032static Eina_Bool
1033_event_cat_del(void *d EINA_UNUSED, int type EINA_UNUSED, E_Event_Configure_Option_Category_Add *ev)
1034{
1035 Elm_Object_Item *it;
1036 Eina_Stringshare *cat;
1037
1038 if (ctx_active->category == ev->category)
1039 {
1040 _reset_cb(NULL);
1041 return ECORE_CALLBACK_RENEW;
1042 }
1043 if (ctx_active->tags || ctx_active->opts) return ECORE_CALLBACK_RENEW; //not showing categories at present
1044 //new categories are added at end, so go backward
1045 for (it = elm_genlist_last_item_get(list[0]); it; it = elm_genlist_item_prev_get(it))
1046 {
1047 cat = elm_object_item_data_get(it);
1048 if (cat != ev->category) continue;
1049 elm_object_item_del(it);
1050 break;
1051 }
1052 return ECORE_CALLBACK_RENEW;
1053}
1054
1055static Eina_Bool
1056_event_cat_add(void *d EINA_UNUSED, int type EINA_UNUSED, E_Event_Configure_Option_Category_Add *ev)
1057{
1058 if (ctx_active->category || ctx_active->tags || ctx_active->opts) return ECORE_CALLBACK_RENEW; //not showing categories at present
1059 elm_genlist_item_append(list[0], itc_cats, ev->category, NULL, 0, _cat_sel, ev->category);
1060 return ECORE_CALLBACK_RENEW;
1061}
1062
1063static Eina_Bool
1064_event_opt_del(void *d EINA_UNUSED, int type EINA_UNUSED, E_Event_Configure_Option_Del *ev)
1065{
1066 Elm_Object_Item *it;
1067 Eina_List *l;
1068
1069 if (!ctx_active->opts) return ECORE_CALLBACK_RENEW;
1070 l = eina_list_data_find(ctx_active->opts, ev->co);
1071 if (!l) return ECORE_CALLBACK_RENEW;
1072 ctx_active->opts = eina_list_remove_list(ctx_active->opts, l);
1073
1074 if (ctx_click && ctx_click->opts)
1075 ctx_click->opts = eina_list_remove(ctx_click->opts, ev->co);
1076 if (ctx_entry && ctx_entry->opts)
1077 ctx_entry->opts = eina_list_remove(ctx_entry->opts, ev->co);
1078
1079 for (it = elm_genlist_last_item_get(list[1]); it; it = elm_genlist_item_prev_get(it))
1080 {
1081 if (ev->co != elm_object_item_data_get(it)) continue;
1082 elm_object_item_del(it);
1083 break;
1084 }
1085
1086 return ECORE_CALLBACK_RENEW;
1087}
1088
1089static Eina_Bool
1090_event_opt_add(void *d EINA_UNUSED, int type EINA_UNUSED, E_Event_Configure_Option_Add *ev)
1091{
1092 Eina_List *l;
1093 Eina_Stringshare *tag;
1094
1095 if (!ctx_active->opts) return ECORE_CALLBACK_RENEW;
1096 /* FIXME: this will only add the item if we are NOT directly viewing a category */
1097 if (!ctx_active->tags) return ECORE_CALLBACK_RENEW;
1098 EINA_LIST_FOREACH(ev->co->tags, l, tag)
1099 if (eina_list_data_find(ctx_active->tags, tag))
1100 {
1101 ctx_active->changed = EINA_TRUE;
1102 break;
1103 }
1104 if (!ctx_active->changed) return ECORE_CALLBACK_RENEW;
1105 e_configure_option_ctx_option_list(ctx_active);
1106 _e_conf2_opts_list(ctx_active);
1107 return ECORE_CALLBACK_RENEW;
1108}
1109
1110static Eina_Bool
1111_event_opt_changed(void *d EINA_UNUSED, int type EINA_UNUSED, E_Event_Configure_Option_Changed *ev)
1112{
1113 E_Configure_Option *co;
1114 Elm_Object_Item *it;
1115
1116 it = e_configure_option_data_get(ev->co, "conf_item");
1117 if (it)
1118 elm_genlist_item_fields_update(it, "elm.swallow.end", ELM_GENLIST_ITEM_FIELD_CONTENT);
1119 if (overlay)
1120 {
1121 co = evas_object_data_get(overlay, "config_option");
1122 if (ev->co != co) return ECORE_CALLBACK_RENEW;
1123 _buttons_toggle(co, EINA_FALSE);
1124 if (!co->changed) _opt_item_update(co);
1125 return ECORE_CALLBACK_RENEW;
1126 }
1127 _buttons_toggle(NULL, EINA_TRUE);
1128 if (buttons_visible) return ECORE_CALLBACK_RENEW;
1129 _opt_item_update(ev->co);
1130 return ECORE_CALLBACK_RENEW;
1131}
1132
1133static void
1134_theme_change(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
1135{
1136 _reset_cb(NULL);
1137 _entry_change_cb(NULL, entry, NULL);
1138}
1139
1140EINTERN void
1141e_conf2_show(E_Container *con EINA_UNUSED, const char *params)
1142{
1143 Evas_Object *box, *box2, *o, *win;
1144
1145 if (list[0])
1146 {
1147 elm_win_activate(elm_object_top_widget_get(list[0]));
1148 return;
1149 }
1150
1151 win = elm_win_add(NULL, "conf2", ELM_WIN_DIALOG_BASIC);
1152 elm_win_title_set(win, _("Control Panel"));
1153 o = elm_bg_add(win);
1154 elm_object_style_set(o, "conf2");
1155 EXPAND(o);
1156 elm_win_resize_object_add(win, o);
1157 evas_object_show(o);
1158 if (!evas_object_key_grab(win, "Escape", 0, 0, 1)) ERR("Grabbing Escape failed");
1159 evas_object_event_callback_add(win, EVAS_CALLBACK_KEY_DOWN, _e_conf2_key, NULL);
1160 /* FIXME this is insane */
1161 ecore_evas_name_class_set(ecore_evas_ecore_evas_get(evas_object_evas_get(win)), "conf2", "_configure");
1162 elm_win_autodel_set(win, EINA_TRUE);
1163 evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _e_conf2_del, NULL);
1164 box = elm_box_add(win);
1165 EXPAND(box);
1166 FILL(box);
1167 elm_win_resize_object_add(win, box);
1168 evas_object_show(box);
1169
1170 box2 = elm_box_add(win);
1171 elm_box_horizontal_set(box2, EINA_TRUE);
1172 WEIGHT(box2, EVAS_HINT_EXPAND, 0);
1173 ALIGN(box2, EVAS_HINT_FILL, 0);
1174 elm_box_pack_end(box, box2);
1175 evas_object_show(box2);
1176
1177 back = o = elm_button_add(win);
1178 elm_object_focus_allow_set(back, EINA_FALSE);
1179 evas_object_smart_callback_add(o, "clicked", _back_cb, NULL);
1180 //elm_object_text_set(o, _("Back"));
1181 if (!_button_icon_set(o, "back"))
1182 _button_icon_set(o, "go-previous");
1183 WEIGHT(o, 0, 0);
1184 FILL(o);
1185 elm_object_disabled_set(o, (params && params[0]));
1186 elm_box_pack_end(box2, o);
1187 evas_object_show(o);
1188
1189 o = elm_label_add(win);
1190 elm_object_style_set(o, "conf2");
1191 elm_object_text_set(o, _("Search: "));
1192 WEIGHT(o, 0, EVAS_HINT_EXPAND);
1193 ALIGN(o, 0, EVAS_HINT_FILL);
1194 elm_box_pack_end(box2, o);
1195 evas_object_show(o);
1196
1197 entry = o = elm_entry_add(win);
1198 elm_entry_single_line_set(o, EINA_TRUE);
1199 elm_entry_scrollable_set(o, EINA_TRUE);
1200 elm_object_style_set(o, "conf2");
1201 if (params && params[0])
1202 {
1203 elm_entry_entry_set(o, params);
1204 _entry_change_cb(NULL, o, NULL);
1205 }
1206 else
1207 reset_timer = ecore_timer_add(0.01, _reset_cb, NULL);
1208 EXPAND(o);
1209 FILL(o);
1210 evas_object_smart_callback_add(o, "changed", _entry_change_cb, NULL);
1211 evas_object_smart_callback_add(o, "activated", _entry_change_cb, NULL);
1212 elm_box_pack_end(box2, o);
1213 evas_object_show(o);
1214 elm_object_focus_set(o, EINA_TRUE);
1215
1216 o = layout = elm_layout_add(win);
1217 EXPAND(o);
1218 FILL(o);
1219 elm_layout_freeze(o);
1220 elm_layout_theme_set(o, "conf2", "tag", "list");
1221 evas_object_smart_callback_add(o, "theme,changed", _theme_change, NULL);
1222 elm_layout_signal_callback_add(layout, "e,action,overlay_dismiss", "e", _opt_overlay_dismiss, NULL);
1223
1224 o = list[0] = elm_genlist_add(win);
1225 elm_genlist_homogeneous_set(o, EINA_TRUE);
1226 elm_genlist_mode_set(o, ELM_LIST_COMPRESS);
1227 EXPAND(o);
1228 FILL(o);
1229
1230 itc_cats = elm_genlist_item_class_new();
1231 itc_cats->item_style = "conf2_double_label";
1232 itc_cats->func.text_get = _e_conf2_text_get_tags;
1233 itc_cats->func.content_get = _e_conf2_content_get_cats;
1234 itc_cats->func.state_get = NULL;
1235 itc_cats->func.del = NULL;
1236
1237 itc_tags = elm_genlist_item_class_new();
1238 itc_tags->item_style = "conf2_tag";
1239 itc_tags->func.text_get = _e_conf2_text_get_tags;
1240 itc_tags->func.content_get = _e_conf2_content_get_tags;
1241 itc_tags->func.state_get = NULL;
1242 itc_tags->func.del = NULL;
1243 elm_object_part_content_set(layout, "e.swallow.tags", o);
1244 evas_object_show(o);
1245
1246 o = list[1] = elm_genlist_add(win);
1247 evas_object_smart_callback_add(o, "realized", _e_conf2_opt_realize, NULL);
1248 elm_genlist_homogeneous_set(o, EINA_TRUE);
1249 EXPAND(o);
1250 FILL(o);
1251 itc_opts = elm_genlist_item_class_new();
1252 itc_opts->item_style = "conf2_double_label";
1253 itc_opts->func.text_get = _e_conf2_text_get_opts;
1254 itc_opts->func.content_get = _e_conf2_content_get_opts;
1255 itc_opts->func.state_get = NULL;
1256 itc_opts->func.del = _e_conf2_item_del_opts;
1257 elm_object_part_content_set(layout, "e.swallow.options", o);
1258 evas_object_show(o);
1259
1260 itc_thumb = elm_genlist_item_class_new();
1261 itc_thumb->item_style = "conf2_thumb";
1262 itc_thumb->func.text_get = _e_conf2_text_get_thumb;
1263 itc_thumb->func.content_get = _e_conf2_content_get_thumb;
1264 itc_thumb->func.state_get = NULL;
1265 itc_thumb->func.del = _e_conf2_item_del_thumb;
1266
1267 o = elm_button_add(win);
1268 evas_object_smart_callback_add(o, "clicked", _discard_cb, NULL);
1269 elm_object_text_set(o, _("Discard"));
1270 if (!_button_icon_set(o, "dialog-cancel"))
1271 _button_icon_set(o, "view-refresh");
1272 WEIGHT(o, 0, 0);
1273 FILL(o);
1274 elm_object_part_content_set(layout, "e.swallow.discard", o);
1275 evas_object_show(o);
1276
1277 o = elm_button_add(win);
1278 evas_object_smart_callback_add(o, "clicked", _apply_cb, NULL);
1279 elm_object_text_set(o, _("Apply"));
1280 _button_icon_set(o, "dialog-ok-apply");
1281 WEIGHT(o, 0, 0);
1282 FILL(o);
1283 elm_object_part_content_set(layout, "e.swallow.apply", o);
1284 evas_object_show(o);
1285
1286 elm_layout_thaw(layout);
1287 evas_object_show(layout);
1288 elm_box_pack_end(box, layout);
1289
1290 evas_object_show(win);
1291 {
1292 E_Border *bd;
1293
1294 bd = evas_object_data_get(win, "E_Border");
1295 if (bd)
1296 {
1297 bd->client.icccm.min_w = 360;
1298 bd->client.icccm.min_h = 360;
1299 }
1300 }
1301 elm_win_size_base_set(win, 360, 360);
1302 evas_object_resize(win, 480, 480);
1303
1304 E_LIST_HANDLER_APPEND(handlers, E_EVENT_CONFIGURE_OPTION_CHANGED, _event_opt_changed, NULL);
1305 E_LIST_HANDLER_APPEND(handlers, E_EVENT_CONFIGURE_OPTION_ADD, _event_opt_add, NULL);
1306 E_LIST_HANDLER_APPEND(handlers, E_EVENT_CONFIGURE_OPTION_DEL, _event_opt_del, NULL);
1307 E_LIST_HANDLER_APPEND(handlers, E_EVENT_CONFIGURE_OPTION_CATEGORY_ADD, _event_cat_add, NULL);
1308 E_LIST_HANDLER_APPEND(handlers, E_EVENT_CONFIGURE_OPTION_CATEGORY_DEL, _event_cat_del, NULL);
1309 E_LIST_HANDLER_APPEND(handlers, E_EVENT_CONFIGURE_OPTION_TAG_ADD, _event_tag_add, NULL);
1310 E_LIST_HANDLER_APPEND(handlers, E_EVENT_CONFIGURE_OPTION_TAG_DEL, _event_tag_del, NULL);
1311 ctx_active = e_configure_option_ctx_new();
1312}
1313
1314EINTERN void
1315e_conf2_hide(void)
1316{
1317 if (!back) return;
1318 evas_object_del(elm_object_top_widget_get(back));
1319}
diff --git a/conf2/e_mod_main.c b/conf2/e_mod_main.c
new file mode 100644
index 0000000..fc85c42
--- /dev/null
+++ b/conf2/e_mod_main.c
@@ -0,0 +1,381 @@
1#include "e.h"
2#include "e_mod_main.h"
3
4typedef struct _Instance Instance;
5struct _Instance
6{
7 E_Gadcon_Client *gcc;
8 Evas_Object *o_toggle;
9};
10
11/* actual module specifics */
12
13//static void _e_mod_conf_cb(void *data, E_Menu *m, E_Menu_Item *mi);
14//static void _e_mod_run_cb(void *data, E_Menu *m, E_Menu_Item *mi);
15//static void _config_pre_activate_cb(void *data, E_Menu *m);
16
17/* gadcon requirements */
18static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style);
19static void _gc_shutdown(E_Gadcon_Client *gcc);
20static void _gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient);
21static const char *_gc_label(const E_Gadcon_Client_Class *client_class);
22static Evas_Object *_gc_icon(const E_Gadcon_Client_Class *client_class, Evas *evas);
23static const char *_gc_id_new(const E_Gadcon_Client_Class *client_class);
24static void _cb_action_conf(void *data, Evas_Object *obj, const char *emission, const char *source);
25
26static E_Module *conf_module = NULL;
27static E_Action *act = NULL;
28static E_Int_Menu_Augmentation *maug = NULL;
29static Eina_List *instances = NULL;
30
31EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Conf2" };
32
33/* and actually define the gadcon class that this module provides (just 1) */
34static const E_Gadcon_Client_Class _gadcon_class =
35{
36 GADCON_CLIENT_CLASS_VERSION, "configuration",
37 {
38 _gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, NULL,
39 e_gadcon_site_is_not_toolbar
40 },
41 E_GADCON_CLIENT_STYLE_PLAIN
42};
43
44static E_Gadcon_Client *
45_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
46{
47 Instance *inst;
48
49 inst = E_NEW(Instance, 1);
50 inst->o_toggle = edje_object_add(gc->evas);
51 e_theme_edje_object_set(inst->o_toggle,
52 "base/theme/modules/conf2",
53 "e/modules/conf2/main");
54
55 inst->gcc = e_gadcon_client_new(gc, name, id, style, inst->o_toggle);
56 inst->gcc->data = inst;
57
58 edje_object_signal_callback_add(inst->o_toggle, "e,action,conf2", "",
59 _cb_action_conf, inst);
60
61 instances = eina_list_append(instances, inst);
62 e_gadcon_client_util_menu_attach(inst->gcc);
63
64 return inst->gcc;
65}
66
67static void
68_gc_shutdown(E_Gadcon_Client *gcc)
69{
70 Instance *inst;
71
72 if (!(inst = gcc->data)) return;
73 instances = eina_list_remove(instances, inst);
74 if (inst->o_toggle) evas_object_del(inst->o_toggle);
75 E_FREE(inst);
76}
77
78static void
79_gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient EINA_UNUSED)
80{
81 Evas_Coord mw, mh;
82
83 edje_object_size_min_get(gcc->o_base, &mw, &mh);
84 if ((mw < 1) || (mh < 1))
85 edje_object_size_min_calc(gcc->o_base, &mw, &mh);
86 if (mw < 4) mw = 4;
87 if (mh < 4) mh = 4;
88 e_gadcon_client_aspect_set(gcc, mw, mh);
89 e_gadcon_client_min_size_set(gcc, mw, mh);
90}
91
92static const char *
93_gc_label(const E_Gadcon_Client_Class *client_class EINA_UNUSED)
94{
95 return _("Settings");
96}
97
98static Evas_Object *
99_gc_icon(const E_Gadcon_Client_Class *client_class EINA_UNUSED, Evas *evas)
100{
101 Evas_Object *o;
102 char buf[PATH_MAX];
103
104 o = edje_object_add(evas);
105 snprintf(buf, sizeof(buf), "%s/e-module-conf.edj",
106 e_module_dir_get(conf_module));
107 edje_object_file_set(o, buf, "icon");
108 return o;
109}
110
111static const char *
112_gc_id_new(const E_Gadcon_Client_Class *client_class EINA_UNUSED)
113{
114 return _gadcon_class.name;
115}
116
117/*
118 static void
119 _cb_button_click(void *data EINA_UNUSED, void *data2 EINA_UNUSED)
120 {
121 E_Action *a;
122
123 a = e_action_find("configuration");
124 if ((a) && (a->func.go)) a->func.go(NULL, NULL);
125 }
126 */
127
128static void
129_cb_action_conf(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED)
130{
131 Instance *inst;
132 E_Action *a;
133
134 if (!(inst = data)) return;
135 a = e_action_find("configuration");
136 if ((a) && (a->func.go)) a->func.go(NULL, NULL);
137}
138
139#if 0
140static void
141_e_mod_run_cb(void *data, E_Menu *m, E_Menu_Item *mi EINA_UNUSED)
142{
143 Eina_List *l;
144 E_Configure_Cat *ecat;
145
146 EINA_LIST_FOREACH(e_configure_registry, l, ecat)
147 {
148 if ((ecat->pri >= 0) && (ecat->items))
149 {
150 E_Configure_It *eci;
151 Eina_List *ll;
152
153 EINA_LIST_FOREACH(ecat->items, ll, eci)
154 {
155 char buf[1024];
156
157 if ((eci->pri >= 0) && (eci == data))
158 {
159 snprintf(buf, sizeof(buf), "%s/%s", ecat->cat, eci->item);
160 e_configure_registry_call(buf, m->zone->container, NULL);
161 }
162 }
163 }
164 }
165}
166
167static void
168_config_pre_activate_cb(void *data, E_Menu *m)
169{
170 E_Configure_Cat *ecat = data;
171 E_Configure_It *eci;
172 Eina_List *l;
173 E_Menu_Item *mi;
174
175 e_menu_pre_activate_callback_set(m, NULL, NULL);
176
177 EINA_LIST_FOREACH(ecat->items, l, eci)
178 {
179 if (eci->pri >= 0)
180 {
181 mi = e_menu_item_new(m);
182 e_menu_item_label_set(mi, eci->label);
183 if (eci->icon)
184 {
185 if (eci->icon_file)
186 e_menu_item_icon_edje_set(mi, eci->icon_file, eci->icon);
187 else
188 e_util_menu_item_theme_icon_set(mi, eci->icon);
189 }
190 e_menu_item_callback_set(mi, _e_mod_run_cb, eci);
191 }
192 }
193}
194
195static void
196_config_item_activate_cb(void *data, E_Menu *m, E_Menu_Item *mi EINA_UNUSED)
197{
198 E_Configure_Cat *ecat = data;
199 e_configure_show(m->zone->container, ecat->cat);
200}
201
202static void
203_config_all_pre_activate_cb(void *data EINA_UNUSED, E_Menu *m)
204{
205 const Eina_List *l;
206 E_Configure_Cat *ecat;
207
208 e_menu_pre_activate_callback_set(m, NULL, NULL);
209
210 EINA_LIST_FOREACH(e_configure_registry, l, ecat)
211 {
212 E_Menu_Item *mi;
213 E_Menu *sub;
214
215 if ((ecat->pri < 0) || (!ecat->items)) continue;
216
217 mi = e_menu_item_new(m);
218 e_menu_item_label_set(mi, ecat->label);
219 if (ecat->icon)
220 {
221 if (ecat->icon_file)
222 e_menu_item_icon_edje_set(mi, ecat->icon_file, ecat->icon);
223 else
224 e_util_menu_item_theme_icon_set(mi, ecat->icon);
225 }
226 e_menu_item_callback_set(mi, _config_item_activate_cb, ecat);
227 sub = e_menu_new();
228 e_menu_item_submenu_set(mi, sub);
229 e_object_unref(E_OBJECT(sub));
230 e_menu_pre_activate_callback_set(sub, _config_pre_activate_cb, ecat);
231 }
232}
233
234/* menu item add hook */
235void
236e_mod_config_menu_add(void *data EINA_UNUSED, E_Menu *m)
237{
238 E_Menu_Item *mi;
239 E_Menu *sub;
240
241 e_menu_pre_activate_callback_set(m, NULL, NULL);
242
243 sub = e_menu_new();
244 e_menu_pre_activate_callback_set(sub, _config_all_pre_activate_cb, NULL);
245
246 mi = e_menu_item_new(m);
247 e_menu_item_label_set(mi, _("All"));
248 e_menu_item_submenu_set(mi, sub);
249 e_object_unref(E_OBJECT(sub));
250}
251#endif
252static void
253_e_mod_action_conf_cb(E_Object *obj, const char *params)
254{
255 E_Zone *zone = NULL;
256
257 if (obj)
258 {
259 if (obj->type == E_MANAGER_TYPE)
260 zone = e_util_zone_current_get((E_Manager *)obj);
261 else if (obj->type == E_CONTAINER_TYPE)
262 zone = e_util_zone_current_get(((E_Container *)obj)->manager);
263 else if (obj->type == E_ZONE_TYPE)
264 zone = ((E_Zone *)obj);
265 else
266 zone = e_util_zone_current_get(e_manager_current_get());
267 }
268 if (!zone) zone = e_util_zone_current_get(e_manager_current_get());
269 if ((zone) && (params))
270 e_configure_registry_call(params, zone->container, params);
271 else if (zone)
272 e_conf2_show(zone->container, params);
273}
274
275static void
276_e_mod_menu_cb(void *data EINA_UNUSED, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED)
277{
278 e_conf2_show(NULL, NULL);
279}
280
281static void
282_e_mod_menu_add(void *data EINA_UNUSED, E_Menu *m)
283{
284 E_Menu_Item *mi;
285
286 mi = e_menu_item_new(m);
287 e_menu_item_label_set(mi, _("Configuration"));
288 e_util_menu_item_theme_icon_set(mi, "preferences-system");
289 e_menu_item_callback_set(mi, _e_mod_menu_cb, NULL);
290}
291
292EAPI void *
293e_modapi_init(E_Module *m)
294{
295 char buf[PATH_MAX];
296
297 if (!e_win_elm_available()) return NULL;
298 if (e_action_find("configuration"))
299 {
300 e_util_dialog_show(_("Error"), _("conf2 module cannot be loaded when conf module is already loaded!"));
301 return NULL;
302 }
303 conf_module = m;
304
305 /* add module supplied action */
306 act = e_action_add("configuration");
307 if (act)
308 {
309 act->func.go = _e_mod_action_conf_cb;
310 e_action_predef_name_set(N_("Launch"), N_("Control Panel"),
311 "configuration", NULL, NULL, 0);
312 }
313 maug =
314 e_int_menus_menu_augmentation_add_sorted("config/0", _("Configuration"),
315 _e_mod_menu_add, NULL, NULL, NULL);
316 e_module_delayed_set(m, 1);
317
318 snprintf(buf, sizeof(buf), "%s/e-module-conf2.edj", e_module_dir_get(conf_module));
319 elm_theme_extension_add(NULL, buf);
320
321 //e_configure_registry_category_add("settings", 80, _("Settings"),
322 //NULL, "preferences-settings");
323 //e_configure_registry_item_add("settings/conf2", 110, _("Control Panel"),
324 //NULL, buf, e_int_config_conf2);
325/*
326 if (conf->menu_augmentation)
327 {
328 conf->aug =
329 e_int_menus_menu_augmentation_add
330 ("config/2", e_mod_config_menu_add, NULL, NULL, NULL);
331 }
332*/
333 e_gadcon_provider_register(&_gadcon_class);
334 return m;
335}
336
337EAPI int
338e_modapi_shutdown(E_Module *m EINA_UNUSED)
339{
340 char buf[PATH_MAX];
341
342 e_conf2_hide();
343
344 snprintf(buf, sizeof(buf), "%s/e-module-conf2.edj", e_module_dir_get(conf_module));
345 elm_theme_extension_del(NULL, buf);
346
347 e_configure_registry_item_del("advanced/conf2");
348 e_configure_registry_category_del("advanced");
349
350 e_gadcon_provider_unregister(&_gadcon_class);
351
352 /* remove module-supplied menu additions */
353 if (maug)
354 {
355 e_int_menus_menu_augmentation_del("config/0", maug);
356 maug = NULL;
357 }
358/*
359 if (conf->aug)
360 {
361 e_int_menus_menu_augmentation_del("config/2", conf->aug);
362 conf->aug = NULL;
363 }
364*/
365 /* remove module-supplied action */
366 if (act)
367 {
368 e_action_predef_name_del("Launch", "Control Panel");
369 e_action_del("configuration");
370 act = NULL;
371 }
372 conf_module = NULL;
373
374 return 1;
375}
376
377EAPI int
378e_modapi_save(E_Module *m EINA_UNUSED)
379{
380 return 1;
381}
diff --git a/conf2/e_mod_main.h b/conf2/e_mod_main.h
new file mode 100644
index 0000000..c76b8d8
--- /dev/null
+++ b/conf2/e_mod_main.h
@@ -0,0 +1,28 @@
1#ifndef E_MOD_MAIN_H
2#define E_MOD_MAIN_H
3
4#define WEIGHT evas_object_size_hint_weight_set
5#define ALIGN evas_object_size_hint_align_set
6#define EXPAND(X) WEIGHT((X), EVAS_HINT_EXPAND, EVAS_HINT_EXPAND)
7#define FILL(X) ALIGN((X), EVAS_HINT_FILL, EVAS_HINT_FILL)
8
9/**
10 * @addtogroup Optional_Conf
11 * @{
12 *
13 * @defgroup Module_Conf2 Improved Configuration Dialog
14 *
15 * Show the main configuration dialog used to access other
16 * configuration.
17 *
18 * @}
19 */
20
21typedef struct Config
22{
23} Config;
24
25EINTERN void e_conf2_show(E_Container *con, const char *params);
26EINTERN void e_conf2_hide(void);
27
28#endif
diff --git a/conf2/images/bevel_curved_horiz_out.png b/conf2/images/bevel_curved_horiz_out.png
new file mode 100644
index 0000000..75426a2
--- /dev/null
+++ b/conf2/images/bevel_curved_horiz_out.png
Binary files differ
diff --git a/conf2/images/bevel_horiz_out.png b/conf2/images/bevel_horiz_out.png
new file mode 100644
index 0000000..38784d7
--- /dev/null
+++ b/conf2/images/bevel_horiz_out.png
Binary files differ
diff --git a/conf2/images/bevel_in.png b/conf2/images/bevel_in.png
new file mode 100644
index 0000000..152e5ac
--- /dev/null
+++ b/conf2/images/bevel_in.png
Binary files differ
diff --git a/conf2/images/button_clicked.png b/conf2/images/button_clicked.png
new file mode 100644
index 0000000..fd76490
--- /dev/null
+++ b/conf2/images/button_clicked.png
Binary files differ
diff --git a/conf2/images/button_normal.png b/conf2/images/button_normal.png
new file mode 100644
index 0000000..a7feada
--- /dev/null
+++ b/conf2/images/button_normal.png
Binary files differ
diff --git a/conf2/images/inset_circle_tiny.png b/conf2/images/inset_circle_tiny.png
new file mode 100644
index 0000000..9ed6af9
--- /dev/null
+++ b/conf2/images/inset_circle_tiny.png
Binary files differ
diff --git a/conf2/images/inset_shadow_circle_tiny.png b/conf2/images/inset_shadow_circle_tiny.png
new file mode 100644
index 0000000..db416a9
--- /dev/null
+++ b/conf2/images/inset_shadow_circle_tiny.png
Binary files differ
diff --git a/conf2/images/inset_shadow_tiny.png b/conf2/images/inset_shadow_tiny.png
new file mode 100644
index 0000000..773237c
--- /dev/null
+++ b/conf2/images/inset_shadow_tiny.png
Binary files differ
diff --git a/conf2/images/shadow_rounded_horiz.png b/conf2/images/shadow_rounded_horiz.png
new file mode 100644
index 0000000..5030a08
--- /dev/null
+++ b/conf2/images/shadow_rounded_horiz.png
Binary files differ
diff --git a/conf2/images/shine.png b/conf2/images/shine.png
new file mode 100644
index 0000000..e433c02
--- /dev/null
+++ b/conf2/images/shine.png
Binary files differ
diff --git a/conf2/images/sym_check_alum.png b/conf2/images/sym_check_alum.png
new file mode 100644
index 0000000..fa9e2fc
--- /dev/null
+++ b/conf2/images/sym_check_alum.png
Binary files differ
diff --git a/conf2/images/sym_radio_alum.png b/conf2/images/sym_radio_alum.png
new file mode 100644
index 0000000..3f46d93
--- /dev/null
+++ b/conf2/images/sym_radio_alum.png
Binary files differ
diff --git a/conf2/images/vgrad_med_curved.png b/conf2/images/vgrad_med_curved.png
new file mode 100644
index 0000000..7ad2476
--- /dev/null
+++ b/conf2/images/vgrad_med_curved.png
Binary files differ
diff --git a/conf2/images/vgrad_med_dark.png b/conf2/images/vgrad_med_dark.png
new file mode 100644
index 0000000..8543044
--- /dev/null
+++ b/conf2/images/vgrad_med_dark.png
Binary files differ
diff --git a/conf2/images/volume_knob.png b/conf2/images/volume_knob.png
new file mode 100644
index 0000000..4a2dc8d
--- /dev/null
+++ b/conf2/images/volume_knob.png
Binary files differ
diff --git a/conf2/images/volume_knob_ledsoff.png b/conf2/images/volume_knob_ledsoff.png
new file mode 100644
index 0000000..a721abd
--- /dev/null
+++ b/conf2/images/volume_knob_ledsoff.png
Binary files differ
diff --git a/conf2/images/volume_knob_move.png b/conf2/images/volume_knob_move.png
new file mode 100644
index 0000000..c13e93e
--- /dev/null
+++ b/conf2/images/volume_knob_move.png
Binary files differ
diff --git a/conf2/images/volume_led_01.png b/conf2/images/volume_led_01.png
new file mode 100644
index 0000000..d62ed27
--- /dev/null
+++ b/conf2/images/volume_led_01.png
Binary files differ
diff --git a/conf2/images/white_bar_vert_glow.png b/conf2/images/white_bar_vert_glow.png
new file mode 100644
index 0000000..49c6735
--- /dev/null
+++ b/conf2/images/white_bar_vert_glow.png
Binary files differ
diff --git a/conf2/module.desktop.in b/conf2/module.desktop.in
new file mode 100644
index 0000000..e0352c3
--- /dev/null
+++ b/conf2/module.desktop.in
@@ -0,0 +1,17 @@
1[Desktop Entry]
2Encoding=UTF-8
3Type=Link
4Name=Configuration
5Name[ca]=Configuració
6Name[eo]=Agordoj
7Name[fr]=Configuration
8Name[ru]=Настройки
9Name[sr]=Подешавања
10Comment=Improved Enlightenment configuration panel.
11Comment[ca]=El nou panell de configuració millorat d'Enlightenment.
12Comment[eo]=Plibonigata panelo de agordoj de Enlightenment
13Comment[it]=Il nuovo pannello di configurazione potenziato di Enlightenment.
14Comment[ru]=Улучшенная панель настройки Enlightenment.
15Comment[sr]=Побошана плоча поставки Просвећења.
16Icon=e-module-conf2
17X-Enlightenment-ModuleType=core
diff --git a/e_configure_option.c b/e_configure_option.c
new file mode 100644
index 0000000..b743176
--- /dev/null
+++ b/e_configure_option.c
@@ -0,0 +1,2857 @@
1#include "e.h"
2#include "e_fm_device.h"
3
4EAPI int E_EVENT_CONFIGURE_OPTION_CHANGED = -1;
5EAPI int E_EVENT_CONFIGURE_OPTION_ADD = -1;
6EAPI int E_EVENT_CONFIGURE_OPTION_DEL = -1;
7EAPI int E_EVENT_CONFIGURE_OPTION_CATEGORY_ADD = -1;
8EAPI int E_EVENT_CONFIGURE_OPTION_CATEGORY_DEL = -1;
9EAPI int E_EVENT_CONFIGURE_OPTION_TAG_ADD = -1;
10EAPI int E_EVENT_CONFIGURE_OPTION_TAG_DEL = -1;
11
12static Eio_File *theme_ls[2] = {NULL, NULL};
13static Eio_Monitor *theme_mon[2] = {NULL, NULL};
14static Eio_File *gtk_theme_ls = NULL;
15static Eina_List *gtk_theme_dirs = NULL; //Eio_File
16static Eio_Monitor *gtk_theme_mon = NULL;
17static Eina_List *gtk_theme_mons = NULL; //Eio_Monitor
18static Eio_File *bg_ls[2] = {NULL, NULL};
19static Eio_Monitor *bg_mon[2] = {NULL, NULL};
20static Eina_Hash *tags_name_hash = NULL; /* (const char*)tag:(Eina_Stringshare*)tag */
21static Eina_Hash *tags_hash = NULL; /* tag:item */
22static Eina_Hash *tags_alias_hash = NULL; /* alias:tag */
23static Eina_Hash *tags_tag_alias_hash = NULL; /* tag:Eina_List(aliases) */
24static Eina_Hash *tags_alias_name_hash = NULL; /* (const char*)alias:(Eina_Stringshare*)alias */
25static Eina_List *tags_alias_list = NULL; /* alias:tag */
26static Eina_List *tags_list = NULL; /* Eina_Stringshare */
27static Eina_List *opts_changed_list = NULL; //co->changed
28static Eina_List *handlers = NULL;
29static Eina_List *bgs = NULL;
30static Eina_List *sbgs = NULL;
31static Eina_List *themes = NULL;
32static Eina_List *sthemes = NULL;
33static Eina_List *gtk_themes = NULL;
34static Eina_Bool event_block = EINA_TRUE;
35static Eina_List *categories = NULL;
36static Eina_Hash *category_hash = NULL;
37static Eina_Hash *category_icon_hash = NULL;
38static Eina_Hash *domain_hash = NULL;
39static const char *domain_current = NULL;
40
41static void
42_e_configure_option_event_str_end(void *d EINA_UNUSED, E_Event_Configure_Option_Category_Add *ev)
43{
44 eina_stringshare_del(ev->category);
45 free(ev);
46}
47
48static void
49_e_configure_option_event_category_add_del(Eina_Stringshare *cat, Eina_Bool del)
50{
51 E_Event_Configure_Option_Category_Add *ev;
52