ajwillia-ms pushed a commit to branch master. http://git.enlightenment.org/tools/examples.git/commit/?id=def8a4e5783227898713e969e0276f9ef25d86c7
commit def8a4e5783227898713e969e0276f9ef25d86c7 Author: Andy Williams <[email protected]> Date: Wed Dec 20 10:35:49 2017 +0000 texteditor: Update toolbar based on edit state --- apps/c/texteditor/src/texteditor_main.c | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/apps/c/texteditor/src/texteditor_main.c b/apps/c/texteditor/src/texteditor_main.c index 0029455..9600322 100644 --- a/apps/c/texteditor/src/texteditor_main.c +++ b/apps/c/texteditor/src/texteditor_main.c @@ -6,11 +6,18 @@ #include <Efl_Ui.h> Efl_Ui_Text *_editor; +Efl_Ui_Button *_toolbar_new; + +Eina_Bool _edited = EINA_FALSE; + +static void _gui_toolbar_refresh(void); static void _gui_new_clicked_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED) { efl_text_set(_editor, ""); + _edited = EINA_TRUE; + _gui_toolbar_refresh(); } static void @@ -20,6 +27,13 @@ _gui_quit_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED) } static void +_editor_changed_cb(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED) +{ + _edited = EINA_TRUE; + _gui_toolbar_refresh(); +} + +static Efl_Ui_Button * _gui_toolbar_button_add(Efl_Ui_Box *toolbar, const char *name, const char *icon_name, Efl_Event_Cb func) { @@ -34,6 +48,8 @@ _gui_toolbar_button_add(Efl_Ui_Box *toolbar, const char *name, efl_add(EFL_UI_IMAGE_CLASS, toolbar, efl_ui_image_icon_set(efl_added, icon_name), efl_content_set(efl_part(button, "elm.swallow.content"), efl_added)); + + return button; } static void @@ -46,15 +62,27 @@ _gui_toolbar_setup(Efl_Ui_Box *parent) efl_gfx_size_hint_weight_set(efl_added, 1, 0), efl_ui_direction_set(efl_added, EFL_UI_DIR_HORIZONTAL)); - _gui_toolbar_button_add(bar, "New", "document-new", _gui_new_clicked_cb); + _toolbar_new = _gui_toolbar_button_add(bar, "New", "document-new", _gui_new_clicked_cb); // spacer box efl_add(EFL_UI_BOX_CLASS, parent, efl_pack(bar, efl_added), efl_gfx_size_hint_weight_set(efl_added, 10, 0)); _gui_toolbar_button_add(bar, "Quit", "application-exit", _gui_quit_cb); + + _gui_toolbar_refresh(); +} + +static void +_gui_toolbar_refresh(void) +{ + efl_ui_widget_disabled_set(_toolbar_new, !_edited); } +EFL_CALLBACKS_ARRAY_DEFINE(_editor_callbacks, + { EFL_UI_TEXT_EVENT_CHANGED, _editor_changed_cb }, + { EFL_UI_TEXT_EVENT_CHANGED_USER, _editor_changed_cb }); + static void _gui_setup() { @@ -75,11 +103,11 @@ _gui_setup() _gui_toolbar_setup(box); _editor = efl_add(EFL_UI_TEXT_CLASS, box, - efl_text_set(efl_added, "Edit me"), efl_text_font_set(efl_added, "Mono", 14), efl_text_multiline_set(efl_added, EINA_TRUE), efl_ui_text_interactive_editable_set(efl_added, EINA_TRUE), efl_ui_text_scrollable_set(efl_added, EINA_TRUE), + efl_event_callback_array_add(efl_added, _editor_callbacks(), _editor_changed_cb, NULL), efl_pack(box, efl_added)); } --
