From 1fbaab35ba0f75e395e1304849a6250aad162c17 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Mon, 10 Oct 2005 12:16:18 +0000 Subject: [PATCH] started work on a quick & dirty widget infrastructure - designed ONLY for simple dialogs and ease of use. SVN revision: 17383 --- TODO | 2 + data/themes/Makefile.am | 6 +- data/themes/default.edc | 3 + data/themes/default_check.edc | 127 +++++++++ data/themes/default_frame.edc | 127 +++++++++ data/themes/default_menu.edc | 82 +----- data/themes/default_radio.edc | 127 +++++++++ data/themes/images/Makefile.am | 6 +- data/themes/images/e17_dialog_watermark.png | Bin 9420 -> 4986 bytes data/themes/images/e17_frame_label_over.png | Bin 0 -> 463 bytes data/themes/images/e17_frame_label_under.png | Bin 0 -> 215 bytes data/themes/images/e17_frame_outline.png | Bin 0 -> 497 bytes src/bin/Makefile.am | 6 +- src/bin/e_dialog.c | 51 ++-- src/bin/e_dialog.h | 17 +- src/bin/e_includes.h | 2 + src/bin/e_test.c | 28 ++ src/bin/e_widget.c | 266 +++++++++++++++++++ src/bin/e_widget.h | 22 ++ src/bin/e_widget_check.c | 69 +++++ src/bin/e_widget_check.h | 12 + 21 files changed, 855 insertions(+), 98 deletions(-) create mode 100644 data/themes/default_check.edc create mode 100644 data/themes/default_frame.edc create mode 100644 data/themes/default_radio.edc create mode 100644 data/themes/images/e17_frame_label_over.png create mode 100644 data/themes/images/e17_frame_label_under.png create mode 100644 data/themes/images/e17_frame_outline.png create mode 100644 src/bin/e_widget.c create mode 100644 src/bin/e_widget.h create mode 100644 src/bin/e_widget_check.c create mode 100644 src/bin/e_widget_check.h diff --git a/TODO b/TODO index 5ccdfce74..bef80d1e9 100644 --- a/TODO +++ b/TODO @@ -8,6 +8,8 @@ Some of the things (in very short form) that need to be done to E17... BUGS / FIXES ------------------------------------------------------------------------------- +* BUG: dnd to ibar of an icon that isnt a .eap (app provided for example) drop + indicator doesnt stop after error dialog report. * BUG: dnd to ibar is broken if u did an icon that isn't IN the ibar yet (from a window border) to either the very start or end of the ibar. * BUG: some bug if u flip desktops fast enough window s vanish (how the hell diff --git a/data/themes/Makefile.am b/data/themes/Makefile.am index d85535c97..8fb32e586 100644 --- a/data/themes/Makefile.am +++ b/data/themes/Makefile.am @@ -40,7 +40,11 @@ default_about.edc \ default_theme_about.edc \ default_entry.edc \ default_scrollbar.edc \ -default_fileman.edc +default_fileman.edc \ +default_check.edc \ +default_radio.edc \ +default_frame.edc + default.edj: Makefile $(EXTRA_DIST) $(EDJE_CC) $(EDJE_FLAGS) \ $(top_srcdir)/data/themes/default.edc \ diff --git a/data/themes/default.edc b/data/themes/default.edc index 22971e0e6..1cff647dd 100644 --- a/data/themes/default.edc +++ b/data/themes/default.edc @@ -49,5 +49,8 @@ collections { #include "default_entry.edc" #include "default_fileman.edc" #include "default_scrollbar.edc" +#include "default_check.edc" +#include "default_radio.edc" +#include "default_frame.edc" } diff --git a/data/themes/default_check.edc b/data/themes/default_check.edc new file mode 100644 index 000000000..08aa369dd --- /dev/null +++ b/data/themes/default_check.edc @@ -0,0 +1,127 @@ +images { + image: "e17_menu_check1.png" COMP; + image: "e17_menu_check2.png" COMP; +} +group { + name: "widgets/check"; + parts { + part { + name: "outline"; + mouse_events: 0; + description { + state: "default" 0.0; + min: 16 16; + max: 16 16; + align: 0.0 0.5; + fixed: 1 1; + rel1 { + relative: 0.0 0.0; + offset: 4 4; + } + rel2 { + relative: 0.0 1.0; + offset: 4 -5; + } + image { + normal: "e17_menu_check1.png"; + } + } + } + part { + name: "item1"; + mouse_events: 0; + description { + state: "default" 0.0; + visible: 0; + rel1 { + to: "outline"; + relative: 0.0 0.0; + offset: 0 0; + } + rel2 { + to: "outline"; + relative: 1.0 1.0; + offset: -1 -1; + } + image { + normal: "e17_menu_check2.png"; + } + } + description { + state: "active" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "label"; + type: TEXT; + effect: SHADOW; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { + to_x: "outline"; + relative: 1.0 0.0; + offset: 2 4; + } + rel2 { + relative: 1.0 1.0; + offset: -5 -5; + } + color: 0 0 0 255; + color3: 255 255 255 128; + text { + text: "Check Button"; + font: "Edje-Vera"; + size: 10; + min: 1 1; + align: 0.0 0.5; + } + } + } + part { + name: "event"; + type: RECT; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + } + programs { + program { + name: "turn_on1"; + signal: "toggle_on"; + source: ""; + action: STATE_SET "active" 0.0; + target: "item1"; + } + program { + name: "turn_off1"; + signal: "toggle_off"; + source: ""; + action: STATE_SET "default" 0.0; + target: "item1"; + } + program { + name: "click"; + signal: "mouse,down,1"; + source: "event"; + script { + new buf[100]; + new Float:val; + + get_state(PART:"item1", buf, sizeof(buf), val); + if (!strcmp(buf, "default")) { + set_state(PART:"item1", "active", 0.0); + emit("toggled", "on"); + } + else { + set_state(PART:"item1", "default", 0.0); + emit("toggled", "off"); + } + } + } + } +} diff --git a/data/themes/default_frame.edc b/data/themes/default_frame.edc new file mode 100644 index 000000000..f88ff6dba --- /dev/null +++ b/data/themes/default_frame.edc @@ -0,0 +1,127 @@ +images { + image: "e17_frame_label_over.png" COMP; + image: "e17_frame_label_under.png" COMP; + image: "e17_frame_outline.png" COMP; +} +group { + name: "widgets/frame"; + parts { + part { + name: "items"; + mouse_events: 0; + type: SWALLOW; + description { + state: "default" 0.0; + rel1 { + to_x: "outline"; + to_y: "label_over"; + relative: 0.0 1.0; + offset: 4 2; + } + rel2 { + to: "outline"; + relative: 1.0 1.0; + offset: -5 -5; + } + color: 0 0 0 0; + } + } + part { + name: "outline"; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { + to_y: "label"; + relative: 0.0 0.5; + offset: 3 -1; + } + rel2 { + relative: 1.0 1.0; + offset: -4 -4; + } + image { + normal: "e17_frame_outline.png"; + border: 7 7 7 7; + middle: 0; + } + fill { + smooth: 0; + } + } + } + part { + name: "label_under"; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { + to: "label_over"; + relative: 0.0 0.0; + offset: 1 1; + } + rel2 { + to: "label_over"; + relative: 1.0 1.0; + offset: -2 -2; + } + image { + normal: "e17_frame_label_under.png"; + border: 3 3 3 3; + } + fill { + smooth: 0; + } + } + } + part { + name: "label"; + type: TEXT; + mouse_events: 0; + description { + state: "default" 0.0; + align: 0.0 0.0; + rel1 { + relative: 0.0 0.0; + offset: 16 6; + } + rel2 { + relative: 0.0 0.0; + offset: 16 6; + } + color: 0 0 0 80; + text { + text: "Frame Label"; + font: "Edje-Vera-Bold"; + size: 10; + min: 1 1; + align: 0.0 0.5; + } + } + } + part { + name: "label_over"; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { + to: "label"; + relative: 0.0 0.0; + offset: -4 -4; + } + rel2 { + to: "label"; + relative: 1.0 1.0; + offset: 5 3; + } + image { + normal: "e17_frame_label_over.png"; + border: 7 7 7 7; + } + fill { + smooth: 0; + } + } + } + } +} diff --git a/data/themes/default_menu.edc b/data/themes/default_menu.edc index 4bdc0cb12..13a3b5798 100644 --- a/data/themes/default_menu.edc +++ b/data/themes/default_menu.edc @@ -171,26 +171,6 @@ group { group { name: "widgets/menu/default/check"; parts { - part { - name: "background"; - mouse_events: 0; - type: RECT; - description { - state: "default" 0.0; - visible: 0; - min: 18 18; - max: 18 18; - rel1 { - relative: 0.0 0.0; - offset: 0 0; - } - rel2 { - relative: 1.0 1.0; - offset: -1 -1; - } - color: 0 0 0 0; - } - } part { name: "outline"; mouse_events: 0; @@ -200,11 +180,11 @@ group { max: 16 16; rel1 { relative: 0.0 0.0; - offset: 0 0; + offset: 1 1; } rel2 { relative: 1.0 1.0; - offset: -1 -1; + offset: -2 -2; } image { normal: "e17_menu_check1.png"; @@ -220,10 +200,12 @@ group { max: 16 16; visible: 0; rel1 { + to: "outline"; relative: 0.0 0.0; offset: 0 0; } rel2 { + to: "outline"; relative: 1.0 1.0; offset: -1 -1; } @@ -237,10 +219,12 @@ group { max: 16 16; visible: 1; rel1 { + to: "outline"; relative: 0.0 0.0; offset: 0 0; } rel2 { + to: "outline"; relative: 1.0 1.0; offset: -1 -1; } @@ -270,26 +254,6 @@ group { group { name: "widgets/menu/default/radio"; parts { - part { - name: "background"; - mouse_events: 0; - type: RECT; - description { - state: "default" 0.0; - visible: 0; - min: 18 18; - max: 18 18; - rel1 { - relative: 0.0 0.0; - offset: 0 0; - } - rel2 { - relative: 1.0 1.0; - offset: -1 -1; - } - color: 0 0 0 0; - } - } part { name: "outline"; mouse_events: 0; @@ -299,11 +263,11 @@ group { max: 16 16; rel1 { relative: 0.0 0.0; - offset: 0 0; + offset: 1 1; } rel2 { relative: 1.0 1.0; - offset: -1 -1; + offset: -2 -2; } image { normal: "e17_menu_radio1.png"; @@ -319,10 +283,12 @@ group { max: 16 16; visible: 0; rel1 { + to: "outline"; relative: 0.0 0.0; offset: 0 0; } rel2 { + to: "outline"; relative: 1.0 1.0; offset: -1 -1; } @@ -336,10 +302,12 @@ group { max: 16 16; visible: 1; rel1 { + to: "outline"; relative: 0.0 0.0; offset: 0 0; } rel2 { + to: "outline"; relative: 1.0 1.0; offset: -1 -1; } @@ -883,26 +851,6 @@ group { group { name: "widgets/menu/default/submenu"; parts { - part { - name: "background"; - mouse_events: 0; - type: RECT; - description { - state: "default" 0.0; - visible: 0; - min: 12 12; - max: 12 12; - rel1 { - relative: 0.0 0.0; - offset: 0 0; - } - rel2 { - relative: 1.0 1.0; - offset: -1 -1; - } - color: 0 0 0 0; - } - } part { name: "arrow"; mouse_events: 0; @@ -912,13 +860,11 @@ group { max: 6 12; rel1 { relative: 0.0 0.0; - offset: 0 0; - to: "background"; + offset: 3 0; } rel2 { relative: 1.0 1.0; - offset: -1 -1; - to: "background"; + offset: -4 -1; } image { normal: "e17_menu_arrow.png"; diff --git a/data/themes/default_radio.edc b/data/themes/default_radio.edc new file mode 100644 index 000000000..3b224de76 --- /dev/null +++ b/data/themes/default_radio.edc @@ -0,0 +1,127 @@ +images { + image: "e17_menu_radio1.png" COMP; + image: "e17_menu_radio2.png" COMP; +} +group { + name: "widgets/radio"; + parts { + part { + name: "outline"; + mouse_events: 0; + description { + state: "default" 0.0; + min: 16 16; + max: 16 16; + align: 0.0 0.5; + fixed: 1 1; + rel1 { + relative: 0.0 0.0; + offset: 1 1; + } + rel2 { + relative: 1.0 1.0; + offset: -2 -2; + } + image { + normal: "e17_menu_radio1.png"; + } + } + } + part { + name: "item1"; + mouse_events: 0; + description { + state: "default" 0.0; + visible: 0; + rel1 { + to: "outline"; + relative: 0.0 0.0; + offset: 0 0; + } + rel2 { + to: "outline"; + relative: 1.0 1.0; + offset: -1 -1; + } + image { + normal: "e17_menu_radio2.png"; + } + } + description { + state: "active" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "label"; + type: TEXT; + effect: SHADOW; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { + to_x: "outline"; + relative: 1.0 0.0; + offset: 1 1; + } + rel2 { + relative: 1.0 1.0; + offset: -1 -2; + } + color: 0 0 0 255; + color3: 255 255 255 128; + text { + text: "Radio Button"; + font: "Edje-Vera"; + size: 10; + min: 1 1; + align: 0.0 0.5; + } + } + } + part { + name: "event"; + type: RECT; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + } + programs { + program { + name: "turn_on1"; + signal: "toggle_on"; + source: ""; + action: STATE_SET "active" 0.0; + target: "item1"; + } + program { + name: "turn_off1"; + signal: "toggle_off"; + source: ""; + action: STATE_SET "default" 0.0; + target: "item1"; + } + program { + name: "click"; + signal: "mouse,down,1"; + source: "event"; + script { + new buf[100]; + new Float:val; + + get_state(PART:"item1", buf, sizeof(buf), val); + if (!strcmp(buf, "default")) { + set_state(PART:"item1", "active", 0.0); + emit("toggled", "on"); + } + else { + set_state(PART:"item1", "default", 0.0); + emit("toggled", "off"); + } + } + } + } +} diff --git a/data/themes/images/Makefile.am b/data/themes/images/Makefile.am index 56e22f3a1..7fdbb8341 100644 --- a/data/themes/images/Makefile.am +++ b/data/themes/images/Makefile.am @@ -363,4 +363,8 @@ e17_button_detail_delete.png \ e17_button_detail_view_details.png \ e17_button_detail_view_name.png \ e17_button_detail_view.png \ -e17_button_detail_open.png +e17_button_detail_open.png \ +e17_frame_label_over.png \ +e17_frame_label_under.png \ +e17_frame_outline.png + diff --git a/data/themes/images/e17_dialog_watermark.png b/data/themes/images/e17_dialog_watermark.png index c5d6d38522095268971f9146a70869a50a09e05b..1496dd522878698744dec45addc54e272c230cf2 100644 GIT binary patch delta 4958 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 literal 9420 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 FV1nev!Yu#* literal 0 HcmV?d00001 diff --git a/data/themes/images/e17_frame_label_under.png b/data/themes/images/e17_frame_label_under.png new file mode 100644 index 0000000000000000000000000000000000000000..15d9126abc39fb5e9283d6ffc06b39385f406ff9 GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^kw7fK!3HF2V=i+8DYhhUcNd1cAox|3V=hpHv%n*= zn1O*?7=#%aX3dcR3bL1Y`ns}T<>KOGGS@3m{tXmL@pN$vi8%cB`bORc0}#X67VV;{Z`-F4ph~$Fk;^Tk+y$T zLT-XI8H#m)Gx&cW$#UcBlRnLi{*j!3SHJ>z$&)la(j1+p_akrsep~>H{eHh%uh(yy zrn#O9kf#rynVIIMlv2iVyc~w%`*OMblz^M#@p#)b%}?NCO6g!sn!CR5uTo0ySF6=8 zfSX$Dms;z>XcS4?wzsv`?!4_ut^kUr>$(RZXAi;(E}d6`Y!-@Gfd5M%MU^dqY=IHT z5=e1XOCS%%aLVU4NI_SEzjK0ekCy*TxoD(QK=LC`^kR>nzSpvxtNR~jd1d=6?V)6o=!uxlDu9RXK6wM2s?#$&3 zJdES`yzl!fb5WoIyxwlN8Tfqx9EM@|27GAS_H);Dk7lH~p940VP2TNx?|}ORP-|_0 nHSl)&(BCv^&dT)u3f%nx3jbahixIRI00000NkvXXu0mjfc{$bP literal 0 HcmV?d00001 diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index 706274bec..c4880a540 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -82,7 +82,9 @@ e_apps_cache.h \ e_entry.h \ e_fileman.h \ e_scrollbar.h \ -e_fileman_smart.h +e_fileman_smart.h \ +e_widget.h \ +e_widget_check.h enlightenment_src = \ e_user.c \ @@ -147,6 +149,8 @@ e_entry.c \ e_fileman.c \ e_scrollbar.c \ e_fileman_smart.c \ +e_widget.c \ +e_widget_check.c \ $(ENLIGHTENMENTHEADERS) enlightenment_SOURCES = \ diff --git a/src/bin/e_dialog.c b/src/bin/e_dialog.c index d7c8ca3d9..150325864 100644 --- a/src/bin/e_dialog.c +++ b/src/bin/e_dialog.c @@ -61,13 +61,6 @@ e_dialog_new(E_Container *con) evas_object_move(o, 0, 0); evas_object_show(o); - o = edje_object_add(e_win_evas_get(dia->win)); - dia->text_object = o; - e_theme_edje_object_set(o, "base/theme/dialog", - "widgets/dialog/text"); - edje_object_part_swallow(dia->bg_object, "content_swallow", o); - evas_object_show(o); - o = e_box_add(e_win_evas_get(dia->win)); dia->box_object = o; e_box_orientation_set(o, 1); @@ -207,20 +200,38 @@ e_dialog_title_set(E_Dialog *dia, char *title) void e_dialog_text_set(E_Dialog *dia, char *text) { + if (!dia->text_object) + { + Evas_Object *o; + + o = edje_object_add(e_win_evas_get(dia->win)); + dia->text_object = o; + e_theme_edje_object_set(o, "base/theme/dialog", + "widgets/dialog/text"); + edje_object_part_swallow(dia->bg_object, "content_swallow", o); + evas_object_show(o); + } edje_object_part_text_set(dia->text_object, "text", text); } void e_dialog_icon_set(E_Dialog *dia, char *icon, Evas_Coord size) { - if (icon) - { - dia->icon_object = edje_object_add(e_win_evas_get(dia->win)); - e_util_edje_icon_set(dia->icon_object, icon); - edje_extern_object_min_size_set(dia->icon_object, size, size); - edje_object_part_swallow(dia->bg_object, "icon_swallow", dia->icon_object); - evas_object_show(dia->icon_object); - } + if (!icon) return; + + dia->icon_object = edje_object_add(e_win_evas_get(dia->win)); + e_util_edje_icon_set(dia->icon_object, icon); + edje_extern_object_min_size_set(dia->icon_object, size, size); + edje_object_part_swallow(dia->bg_object, "icon_swallow", dia->icon_object); + evas_object_show(dia->icon_object); +} + +void +e_dialog_content_set(E_Dialog *dia, Evas_Object *obj, Evas_Coord minw, Evas_Coord minh) +{ + edje_extern_object_min_size_set(obj, minw, minh); + edje_object_part_swallow(dia->bg_object, "content_swallow", obj); + evas_object_show(obj); } void @@ -230,9 +241,12 @@ e_dialog_show(E_Dialog *dia) Evas_Object *o; o = dia->text_object; - edje_object_size_min_calc(o, &mw, &mh); - edje_extern_object_min_size_set(o, mw, mh); - edje_object_part_swallow(dia->bg_object, "content_swallow", o); + if (o) + { + edje_object_size_min_calc(o, &mw, &mh); + edje_extern_object_min_size_set(o, mw, mh); + edje_object_part_swallow(dia->bg_object, "content_swallow", o); + } o = dia->box_object; e_box_min_size_get(o, &mw, &mh); @@ -305,7 +319,6 @@ _e_dialog_button_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *even e_dialog_button_focus_button(dia, db); } -/* TODO: Implement shift-tab and left arrow */ static void _e_dialog_cb_key_down(void *data, Evas *e, Evas_Object *obj, void *event) { diff --git a/src/bin/e_dialog.h b/src/bin/e_dialog.h index fcab6d977..061d73b6b 100644 --- a/src/bin/e_dialog.h +++ b/src/bin/e_dialog.h @@ -27,14 +27,15 @@ struct _E_Dialog void *data; }; -EAPI E_Dialog *e_dialog_new (E_Container *con); -EAPI void e_dialog_button_add (E_Dialog *dia, char *label, char *icon, void (*func) (void *data, E_Dialog *dia), void *data); -EAPI int e_dialog_button_focus_num(E_Dialog *dia, int button); -EAPI int e_dialog_button_focus_button(E_Dialog *dia, E_Dialog_Button *button); -EAPI void e_dialog_title_set (E_Dialog *dia, char *title); -EAPI void e_dialog_text_set (E_Dialog *dia, char *text); -EAPI void e_dialog_icon_set (E_Dialog *dia, char *icon, Evas_Coord size); -EAPI void e_dialog_show (E_Dialog *dia); +EAPI E_Dialog *e_dialog_new (E_Container *con); +EAPI void e_dialog_button_add (E_Dialog *dia, char *label, char *icon, void (*func) (void *data, E_Dialog *dia), void *data); +EAPI int e_dialog_button_focus_num (E_Dialog *dia, int button); +EAPI int e_dialog_button_focus_button (E_Dialog *dia, E_Dialog_Button *button); +EAPI void e_dialog_title_set (E_Dialog *dia, char *title); +EAPI void e_dialog_text_set (E_Dialog *dia, char *text); +EAPI void e_dialog_icon_set (E_Dialog *dia, char *icon, Evas_Coord size); +EAPI void e_dialog_content_set (E_Dialog *dia, Evas_Object *obj, Evas_Coord minw, Evas_Coord minh); +EAPI void e_dialog_show (E_Dialog *dia); #endif #endif diff --git a/src/bin/e_includes.h b/src/bin/e_includes.h index b3bc2a4b6..4e0ffb636 100644 --- a/src/bin/e_includes.h +++ b/src/bin/e_includes.h @@ -64,3 +64,5 @@ #include "e_scrollbar.h" #include "e_fileman.h" #include "e_fileman_smart.h" +#include "e_widget.h" +#include "e_widget_check.h" diff --git a/src/bin/e_test.c b/src/bin/e_test.c index 422082b24..1dfbfe480 100644 --- a/src/bin/e_test.c +++ b/src/bin/e_test.c @@ -308,6 +308,34 @@ _e_test_internal(E_Container *con) e_dialog_show(dia); } #elif 0 +static int my_val = 0; + +static void +_e_test_internal(E_Container *con) +{ + E_Dialog *dia; + + dia = e_dialog_new(con); + e_dialog_title_set(dia, "A Test Dialog"); + { + Evas_Object *o; + Evas_Coord mw, mh; + + o = e_widget_checkbox_add(e_win_evas_get(dia->win), + "My checkbox widget which on toggles is modifying my_val", + &my_val); + e_widget_min_size_get(o, &mw, &mh); + e_dialog_content_set(dia, o, mw, mh); +// e_theme_edje_object_set(o, "base/theme/dialog", +// "widgets/frame"); + } + e_dialog_button_add(dia, "OK", NULL, NULL, NULL); + e_dialog_button_add(dia, "Apply", "enlightenment/reset", NULL, NULL); + e_dialog_button_add(dia, "Cancel", "enlightenment/exit", NULL, NULL); + e_win_centered_set(dia->win, 1); + e_dialog_show(dia); +} +#elif 0 #else static void _e_test_internal(E_Container *con) diff --git a/src/bin/e_widget.c b/src/bin/e_widget.c new file mode 100644 index 000000000..ca58e0af2 --- /dev/null +++ b/src/bin/e_widget.c @@ -0,0 +1,266 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#include "e.h" + +#define SMART_NAME "e_widget" +#define API_ENTRY E_Smart_Data *sd; sd = evas_object_smart_data_get(obj); if (!sd) +#define INTERNAL_ENTRY E_Smart_Data *sd; sd = evas_object_smart_data_get(obj); if (!sd) return; +typedef struct _E_Smart_Data E_Smart_Data; + +struct _E_Smart_Data +{ + Evas_Coord x, y, w, h; + Evas_Coord minw, minh, maxw, maxh; + Evas_List *subobjs; + Evas_Object *resize_obj; + void (*del_func) (Evas_Object *obj); + void *data; +}; + +/* local subsystem functions */ +static void _e_smart_reconfigure(E_Smart_Data *sd); +static void _e_smart_add(Evas_Object *obj); +static void _e_smart_del(Evas_Object *obj); +static void _e_smart_layer_set(Evas_Object *obj, int layer); +static void _e_smart_raise(Evas_Object *obj); +static void _e_smart_lower(Evas_Object *obj); +static void _e_smart_stack_above(Evas_Object *obj, Evas_Object *above); +static void _e_smart_stack_below(Evas_Object *obj, Evas_Object *below); +static void _e_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y); +static void _e_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h); +static void _e_smart_show(Evas_Object *obj); +static void _e_smart_hide(Evas_Object *obj); +static void _e_smart_color_set(Evas_Object *obj, int r, int g, int b, int a); +static void _e_smart_clip_set(Evas_Object *obj, Evas_Object * clip); +static void _e_smart_clip_unset(Evas_Object *obj); +static void _e_smart_init(void); + +/* local subsystem globals */ +static Evas_Smart *_e_smart = NULL; + +/* externally accessible functions */ +Evas_Object * +e_widget_add(Evas *evas) +{ + _e_smart_init(); + return evas_object_smart_add(evas, _e_smart); +} + +void +e_widget_del_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj)) +{ + API_ENTRY return; + sd->del_func = func; +} + +void +e_widget_data_set(Evas_Object *obj, void *data) +{ + API_ENTRY return; + sd->data = data; +} + +void * +e_widget_data_get(Evas_Object *obj) +{ + API_ENTRY return NULL; + return sd->data; +} + +void +e_widget_min_size_set(Evas_Object *obj, Evas_Coord minw, Evas_Coord minh) +{ + API_ENTRY return; + sd->minw = minw; + sd->minh = minh; +} + +void +e_widget_min_size_get(Evas_Object *obj, Evas_Coord *minw, Evas_Coord *minh) +{ + API_ENTRY return; + if (minw) *minw = sd->minw; + if (minh) *minh = sd->minh; +} + +void +e_widget_max_size_set(Evas_Object *obj, Evas_Coord maxw, Evas_Coord maxh) +{ + API_ENTRY return; + sd->minw = maxw; + sd->maxh = maxh; +} + +void +e_widget_max_size_get(Evas_Object *obj, Evas_Coord *maxw, Evas_Coord *maxh) +{ + API_ENTRY return; + if (maxw) *maxw = sd->maxw; + if (maxh) *maxh = sd->maxh; +} + +void +e_widget_sub_object_add(Evas_Object *obj, Evas_Object *sobj) +{ + API_ENTRY return; + sd->subobjs = evas_list_append(sd->subobjs, sobj); +} + +void +e_widget_sub_object_del(Evas_Object *obj, Evas_Object *sobj) +{ + API_ENTRY return; + sd->subobjs = evas_list_remove(sd->subobjs, sobj); +} + +void +e_widget_resize_object_set(Evas_Object *obj, Evas_Object *sobj) +{ + API_ENTRY return; + if (sd->resize_obj) evas_object_smart_member_del(sd->resize_obj); + sd->resize_obj = sobj; + evas_object_smart_member_add(obj, sobj); + _e_smart_reconfigure(sd); +} + +/* local subsystem functions */ +static void +_e_smart_reconfigure(E_Smart_Data *sd) +{ + if (sd->resize_obj) + { + evas_object_move(sd->resize_obj, sd->x, sd->y); + evas_object_resize(sd->resize_obj, sd->w, sd->h); + } +} + +static void +_e_smart_add(Evas_Object *obj) +{ + E_Smart_Data *sd; + + sd = calloc(1, sizeof(E_Smart_Data)); + if (!sd) return; + sd->x = 0; + sd->y = 0; + sd->w = 0; + sd->h = 0; + evas_object_smart_data_set(obj, sd); +} + +static void +_e_smart_del(Evas_Object *obj) +{ + INTERNAL_ENTRY; + if (sd->del_func) sd->del_func(obj); + while (sd->subobjs) + { + evas_object_del(sd->subobjs->data); + sd->subobjs = evas_list_remove_list(sd->subobjs, sd->subobjs); + } + free(sd); +} + +static void +_e_smart_layer_set(Evas_Object *obj, int layer) +{ + INTERNAL_ENTRY; + evas_object_layer_set(sd->resize_obj, layer); +} + +static void +_e_smart_raise(Evas_Object *obj) +{ + INTERNAL_ENTRY; + evas_object_raise(sd->resize_obj); +} + +static void +_e_smart_lower(Evas_Object *obj) +{ + INTERNAL_ENTRY; + evas_object_lower(sd->resize_obj); +} + +static void +_e_smart_stack_above(Evas_Object *obj, Evas_Object *above) +{ + INTERNAL_ENTRY; + evas_object_stack_above(sd->resize_obj, above); +} + +static void +_e_smart_stack_below(Evas_Object *obj, Evas_Object *below) +{ + INTERNAL_ENTRY; + evas_object_stack_below(sd->resize_obj, below); +} + +static void +_e_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + INTERNAL_ENTRY; + sd->x = x; + sd->y = y; + _e_smart_reconfigure(sd); +} + +static void +_e_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) +{ + INTERNAL_ENTRY; + sd->w = w; + sd->h = h; + _e_smart_reconfigure(sd); +} + +static void +_e_smart_show(Evas_Object *obj) +{ + INTERNAL_ENTRY; + evas_object_show(sd->resize_obj); +} + +static void +_e_smart_hide(Evas_Object *obj) +{ + INTERNAL_ENTRY; + evas_object_hide(sd->resize_obj); +} + +static void +_e_smart_color_set(Evas_Object *obj, int r, int g, int b, int a) +{ + INTERNAL_ENTRY; + evas_object_color_set(sd->resize_obj, r, g, b, a); +} + +static void +_e_smart_clip_set(Evas_Object *obj, Evas_Object *clip) +{ + INTERNAL_ENTRY; + evas_object_clip_set(sd->resize_obj, clip); +} + +static void +_e_smart_clip_unset(Evas_Object *obj) +{ + INTERNAL_ENTRY; + evas_object_clip_unset(sd->resize_obj); +} + +/* never need to touch this */ + +static void +_e_smart_init(void) +{ + if (_e_smart) return; + _e_smart = evas_smart_new + (SMART_NAME, _e_smart_add, _e_smart_del, _e_smart_layer_set, + _e_smart_raise, _e_smart_lower, _e_smart_stack_above, + _e_smart_stack_below, _e_smart_move, _e_smart_resize, + _e_smart_show, _e_smart_hide, _e_smart_color_set, + _e_smart_clip_set, _e_smart_clip_unset, NULL); +} + diff --git a/src/bin/e_widget.h b/src/bin/e_widget.h new file mode 100644 index 000000000..c9b3bbb23 --- /dev/null +++ b/src/bin/e_widget.h @@ -0,0 +1,22 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#ifdef E_TYPEDEFS +#else +#ifndef E_WIDGET_H +#define E_WIDGET_H + +EAPI Evas_Object *e_widget_add(Evas *evas); +EAPI void e_widget_del_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj)); +EAPI void e_widget_data_set(Evas_Object *obj, void *data); +EAPI void *e_widget_data_get(Evas_Object *obj); +EAPI void e_widget_min_size_set(Evas_Object *obj, Evas_Coord minw, Evas_Coord minh); +EAPI void e_widget_min_size_get(Evas_Object *obj, Evas_Coord *minw, Evas_Coord *minh); +EAPI void e_widget_max_size_set(Evas_Object *obj, Evas_Coord maxw, Evas_Coord maxh); +EAPI void e_widget_max_size_get(Evas_Object *obj, Evas_Coord *maxw, Evas_Coord *maxh); +EAPI void e_widget_sub_object_add(Evas_Object *obj, Evas_Object *sobj); +EAPI void e_widget_sub_object_del(Evas_Object *obj, Evas_Object *sobj); +EAPI void e_widget_resize_object_set(Evas_Object *obj, Evas_Object *sobj); + +#endif +#endif diff --git a/src/bin/e_widget_check.c b/src/bin/e_widget_check.c new file mode 100644 index 000000000..6a4fad2ac --- /dev/null +++ b/src/bin/e_widget_check.c @@ -0,0 +1,69 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#include "e.h" + +typedef struct _E_Widget_Data E_Widget_Data; +struct _E_Widget_Data +{ + int *valptr; +}; + +static void _e_wid_del_hook(Evas_Object *obj); +static void _e_wid_signal_cb1(void *data, Evas_Object *obj, const char *emission, const char *source); +/* local subsystem functions */ + +/* externally accessible functions */ +Evas_Object * +e_widget_checkbox_add(Evas *evas, char *label, int *val) +{ + Evas_Object *obj, *o; + E_Widget_Data *wd; + Evas_Coord mw, mh; + + obj = e_widget_add(evas); + + e_widget_del_hook_set(obj, _e_wid_del_hook); + wd = calloc(1, sizeof(E_Widget_Data)); + wd->valptr = val; + e_widget_data_set(obj, wd); + + o = edje_object_add(evas); + e_theme_edje_object_set(o, "base/theme/widgets", + "widgets/check"); + edje_object_signal_callback_add(o, "toggled", "*", _e_wid_signal_cb1, obj); + edje_object_part_text_set(o, "label", label); + edje_object_size_min_calc(o, &mw, &mh); + e_widget_min_size_set(obj, mw, mh); + if (wd->valptr) + { + if (*(wd->valptr)) edje_object_signal_emit(o, "toggle_on", ""); + } + + e_widget_sub_object_add(obj, o); + e_widget_resize_object_set(obj, o); + + return obj; +} + +static void +_e_wid_del_hook(Evas_Object *obj) +{ + E_Widget_Data *wd; + + wd = e_widget_data_get(obj); + free(wd); +} + +static void +_e_wid_signal_cb1(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Widget_Data *wd; + + wd = e_widget_data_get(data); + if (wd->valptr) + { + if (!strcmp(source, "on")) *(wd->valptr) = 1; + else *(wd->valptr) = 0; + } +} diff --git a/src/bin/e_widget_check.h b/src/bin/e_widget_check.h new file mode 100644 index 000000000..908cac318 --- /dev/null +++ b/src/bin/e_widget_check.h @@ -0,0 +1,12 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#ifdef E_TYPEDEFS +#else +#ifndef E_WIDGET_CHECK_H +#define E_WIDGET_CHECK_H + +EAPI Evas_Object *e_widget_checkbox_add(Evas *evas, char *label, int *val); + +#endif +#endif