hermet pushed a commit to branch master. http://git.enlightenment.org/tools/enventor.git/commit/?id=afb618365a4887e22a54af57be90d01012afad5a
commit afb618365a4887e22a54af57be90d01012afad5a Author: ChunEon Park <[email protected]> Date: Tue Feb 4 17:17:43 2014 +0900 refactoring. Added base_gui for handling basic window, layout and panes so that other files refer them. --- src/bin/Makefile.am | 1 + src/bin/base_gui.c | 147 ++++++++++++++++++++++++++++++++++++++++++++++++ src/bin/hotkeys.c | 8 +-- src/bin/main.c | 106 ++++++---------------------------- src/bin/menu.c | 28 +++++---- src/bin/panes.c | 27 ++++----- src/include/Makefile.am | 2 +- src/include/base_gui.h | 10 ++++ src/include/common.h | 3 +- src/include/globals.h | 2 - src/include/hotkeys.h | 2 +- src/include/main.h | 1 - src/include/menu.h | 2 +- src/include/panes.h | 4 +- 14 files changed, 212 insertions(+), 131 deletions(-) diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index 33d4697..16d09b2 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -10,6 +10,7 @@ AM_CPPFLAGS = -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \ @ENVENTOR_CFLAGS@ enventor_SOURCES = \ + base_gui.c \ config_data.c \ dummy_obj.c \ edc_editor.c \ diff --git a/src/bin/base_gui.c b/src/bin/base_gui.c new file mode 100644 index 0000000..54f5e09 --- /dev/null +++ b/src/bin/base_gui.c @@ -0,0 +1,147 @@ +#include <Elementary.h> +#include "common.h" + +struct base_s +{ + Evas_Object *win; + Evas_Object *layout; + Evas_Object *panes; +}; + +static base_data *g_bd = NULL; + +static void +win_delete_request_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + menu_exit(); +} + +void +base_statusbar_toggle() +{ + base_data *bd = g_bd; + + if (config_stats_bar_get()) + elm_object_signal_emit(bd->layout, "elm,state,statusbar,show", ""); + else + elm_object_signal_emit(bd->layout, "elm,state,statusbar,hide", ""); +} + +//This function is used in panes. Maybe layout should be separated from main. +void +base_hotkey_toggle() +{ + base_data *bd = g_bd; + + config_hotkeys_set(!config_hotkeys_get()); + + if (config_hotkeys_get()) + elm_object_signal_emit(bd->layout, "elm,state,hotkeys,show", ""); + else + elm_object_signal_emit(bd->layout, "elm,state,hotkeys,hide", ""); +} + +Evas_Object * +base_win_get() +{ + base_data *bd = g_bd; + return bd->win; +} + +Evas_Object * +base_layout_get() +{ + base_data *bd = g_bd; + return bd->layout; +} + +void +base_win_resize_object_add(Evas_Object *resize_obj) +{ + base_data *bd = g_bd; + elm_win_resize_object_add(bd->win, resize_obj); +} + +void base_hotkeys_set(Evas_Object *hotkeys) +{ + base_data *bd = g_bd; + elm_object_part_content_set(bd->layout, "elm.swallow.hotkeys", hotkeys); +} + +void +base_full_view_left() +{ + base_data *bd = g_bd; + panes_full_view_left(bd->panes); +} + +void +base_full_view_right() +{ + base_data *bd = g_bd; + panes_full_view_right(bd->panes); +} + +void +base_right_view_set(Evas_Object *right) +{ + base_data *bd = g_bd; + elm_object_part_content_set(bd->panes, "right", right); +} + +void +base_left_view_set(Evas_Object *left) +{ + base_data *bd = g_bd; + elm_object_part_content_set(bd->panes, "left", left); +} + +void +base_gui_term() +{ + base_data *bd = g_bd; + free(bd); +} + +Eina_Bool +base_gui_init() +{ + char buf[PATH_MAX]; + + base_data *bd = calloc(1, sizeof(base_data)); + g_bd = bd; + + //Window + Evas_Object *win = elm_win_util_standard_add(elm_app_name_get(), + "Enventor"); + elm_win_focus_highlight_enabled_set(win, EINA_TRUE); + evas_object_smart_callback_add(win, "delete,request", win_delete_request_cb, + NULL); + evas_object_show(win); + + //Window icon + Evas_Object *icon = evas_object_image_add(evas_object_evas_get(win)); + snprintf(buf, sizeof(buf), "%s/images/logo.png", elm_app_data_dir_get()); + evas_object_image_file_set(icon, buf, NULL); + evas_object_show(icon); + elm_win_icon_object_set(win, icon); + + //Base Layout + Evas_Object *layout = elm_layout_add(win); + elm_layout_file_set(layout, EDJE_PATH, "main_layout"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, layout); + evas_object_show(layout); + + //Panes + Evas_Object *panes = panes_create(layout); + elm_object_part_content_set(layout, "elm.swallow.panes", panes); + + bd->win = win; + bd->layout = layout; + bd->panes = panes; + + return EINA_TRUE; +} diff --git a/src/bin/hotkeys.c b/src/bin/hotkeys.c index 26ab599..d96394a 100644 --- a/src/bin/hotkeys.c +++ b/src/bin/hotkeys.c @@ -43,10 +43,8 @@ static void f6_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - //FIXME: ... how ad can be passed here? should be cut off from here. - app_data *ad = data; config_stats_bar_set(!config_stats_bar_get()); - statusbar_toggle(ad); + base_statusbar_toggle(); } static void @@ -72,7 +70,7 @@ btn_create(Evas_Object *parent, const char *text, Evas_Smart_Cb cb, void *data) } Evas_Object * -hotkeys_create(Evas_Object *parent, app_data *ad, edit_data *ed) +hotkeys_create(Evas_Object *parent, edit_data *ed) { Evas_Object *box = elm_box_add(parent); elm_box_horizontal_set(box, EINA_TRUE); @@ -95,7 +93,7 @@ hotkeys_create(Evas_Object *parent, app_data *ad, edit_data *ed) btn = btn_create(box, "F5: Line Num", f5_cb, ed); elm_box_pack_end(box, btn); - btn = btn_create(box, "F6: Status", f6_cb, ad); + btn = btn_create(box, "F6: Status", f6_cb, NULL); elm_box_pack_end(box, btn); btn = btn_create(box, "F7: ---", NULL, NULL); diff --git a/src/bin/main.c b/src/bin/main.c index 86dbefc..a4bf673 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -9,9 +9,6 @@ struct app_s edj_mgr *em; stats_data *sd; - Evas_Object *layout; - Evas_Object *panes; - Evas_Object *win; Eio_Monitor *edc_monitor; Eina_Bool ctrl_pressed : 1; @@ -38,52 +35,6 @@ edc_changed_cb(void *data, int type EINA_UNUSED, void *event) return ECORE_CALLBACK_RENEW; } -static void -win_delete_request_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - menu_exit(); -} - -static Eina_Bool -base_gui_construct(app_data *ad) -{ - char buf[PATH_MAX]; - - //Window - Evas_Object *win = elm_win_util_standard_add(elm_app_name_get(), - "Enventor"); - elm_win_focus_highlight_enabled_set(win, EINA_TRUE); - evas_object_smart_callback_add(win, "delete,request", win_delete_request_cb, - ad); - evas_object_show(win); - - //Window icon - Evas_Object *icon = evas_object_image_add(evas_object_evas_get(win)); - snprintf(buf, sizeof(buf), "%s/images/logo.png", elm_app_data_dir_get()); - evas_object_image_file_set(icon, buf, NULL); - evas_object_show(icon); - elm_win_icon_object_set(win, icon); - - //Base Layout - Evas_Object *layout = elm_layout_add(win); - elm_layout_file_set(layout, EDJE_PATH, "main_layout"); - evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, - EVAS_HINT_EXPAND); - elm_win_resize_object_add(win, layout); - evas_object_show(layout); - - //Panes - Evas_Object *panes = panes_create(layout, ad); - elm_object_part_content_set(layout, "elm.swallow.panes", panes); - - ad->win = win; - ad->layout = layout; - ad->panes = panes; - - return EINA_TRUE; -} - static Eina_Bool edc_proto_setup() { @@ -236,13 +187,13 @@ ctrl_func(app_data *ad, const char *key) //Full Edit View if (!strcmp(key, "comma")) { - panes_full_view_left(ad->panes); + base_full_view_left(); return ECORE_CALLBACK_DONE; } //Full Edje View if (!strcmp(key, "period")) { - panes_full_view_right(ad->panes); + base_full_view_right(); return ECORE_CALLBACK_DONE; } //Auto Indentation @@ -339,7 +290,7 @@ main_key_down_cb(void *data, int type EINA_UNUSED, void *ev) if (!strcmp(event->key, "F6")) { config_stats_bar_set(!config_stats_bar_get()); - statusbar_toggle(ad); + base_statusbar_toggle(); return ECORE_CALLBACK_DONE; } //Setting @@ -403,9 +354,9 @@ view_sync_cb(void *data, Eina_Stringshare *part_name, static void edc_edit_set(app_data *ad, stats_data *sd) { - edit_data *ed = edit_init(ad->panes, sd); + edit_data *ed = edit_init(base_layout_get(), sd); edit_edc_read(ed, config_edc_path_get()); - elm_object_part_content_set(ad->panes, "right", edit_obj_get(ed)); + base_right_view_set(edit_obj_get(ed)); edit_view_sync_cb_set(ed, view_sync_cb, ad); ad->ed = ed; } @@ -413,12 +364,12 @@ edc_edit_set(app_data *ad, stats_data *sd) static void statusbar_set(app_data *ad) { - stats_data *sd = stats_init(ad->layout); - elm_object_part_content_set(ad->layout, "elm.swallow.statusbar", + stats_data *sd = stats_init(base_layout_get()); + elm_object_part_content_set(base_layout_get(), "elm.swallow.statusbar", stats_obj_get(sd)); ad->sd = sd; config_stats_bar_set(EINA_TRUE); - statusbar_toggle(ad); + base_statusbar_toggle(); } static void @@ -429,7 +380,7 @@ config_update_cb(void *data) edit_line_number_toggle(ad->ed); edit_font_size_update(ad->ed, EINA_FALSE); - statusbar_toggle(ad); + base_statusbar_toggle(); part_highlight_toggle(ad, EINA_FALSE); view_dummy_toggle(VIEW_DATA, EINA_FALSE); @@ -560,15 +511,15 @@ elm_setup() static void edj_mgr_set(app_data *ad) { - ad->em = edj_mgr_init(ad->panes); - elm_object_part_content_set(ad->panes, "left", edj_mgr_obj_get(ad->em)); + ad->em = edj_mgr_init(base_layout_get()); + base_left_view_set(edj_mgr_obj_get(ad->em)); } static void -hotkeys_set(Evas_Object *layout, app_data *ad, edit_data *ed) +hotkeys_set(edit_data *ed) { - Evas_Object *hotkeys = hotkeys_create(layout, ad, ed); - elm_object_part_content_set(layout, "elm.swallow.hotkeys", hotkeys); + Evas_Object *hotkeys = hotkeys_create(base_layout_get(), ed); + base_hotkeys_set(hotkeys); } static Eina_Bool @@ -587,14 +538,14 @@ init(app_data *ad, int argc, char **argv) if (!build_init()) return EINA_FALSE; if (!edc_proto_setup()) return EINA_FALSE; - if (!base_gui_construct(ad)) return EINA_FALSE; + if (!base_gui_init()) return EINA_FALSE; edj_mgr_set(ad); statusbar_set(ad); edc_edit_set(ad, ad->sd); edc_view_set(ad, ad->sd, stats_group_name_get(ad->sd)); - menu_init(ad->win, ad->ed); - hotkeys_set(ad->layout, ad, ad->ed); + menu_init(ad->ed); + hotkeys_set(ad->ed); ad->edc_monitor = eio_monitor_add(config_edc_path_get()); ecore_event_handler_add(EIO_MONITOR_FILE_MODIFIED, edc_changed_cb, ad); @@ -610,34 +561,13 @@ term(app_data *ad) edit_term(ad->ed); edj_mgr_term(ad->em); stats_term(ad->sd); + base_gui_term(); config_term(); elm_shutdown(); ecore_event_shutdown(); } -//This function is used in hotkey. Maybe layout should be separated from main. -void -statusbar_toggle(app_data *ad) -{ - if (config_stats_bar_get()) - elm_object_signal_emit(ad->layout, "elm,state,statusbar,show", ""); - else - elm_object_signal_emit(ad->layout, "elm,state,statusbar,hide", ""); -} - -//This function is used in panes. Maybe layout should be separated from main. -void -hotkey_toggle(app_data *ad) -{ - config_hotkeys_set(!config_hotkeys_get()); - - if (config_hotkeys_get()) - elm_object_signal_emit(ad->layout, "elm,state,hotkeys,show", ""); - else - elm_object_signal_emit(ad->layout, "elm,state,hotkeys,hide", ""); -} - int main(int argc, char **argv) { diff --git a/src/bin/menu.c b/src/bin/menu.c index 47847dc..b979a80 100644 --- a/src/bin/menu.c +++ b/src/bin/menu.c @@ -3,7 +3,6 @@ struct menu_s { - Evas_Object *win; Evas_Object *menu_layout; Evas_Object *setting_layout; Evas_Object *warning_layout; @@ -152,13 +151,13 @@ warning_layout_create(menu_data *md, Evas_Smart_Cb yes_cb, if (md->warning_layout) return; //Layout - Evas_Object *layout = elm_layout_add(md->win); + Evas_Object *layout = elm_layout_add(base_win_get()); elm_layout_file_set(layout, EDJE_PATH, "warning_layout"); elm_object_signal_callback_add(layout, "elm,state,dismiss,done", "", warning_dismiss_done, md); evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(md->win, layout); evas_object_show(layout); + base_win_resize_object_add(layout); Evas_Object *btn; @@ -336,13 +335,13 @@ static void setting_open(menu_data *md) { //Layout - Evas_Object *layout = elm_layout_add(md->win); + Evas_Object *layout = elm_layout_add(base_win_get()); elm_layout_file_set(layout, EDJE_PATH, "setting_layout"); elm_object_signal_callback_add(layout, "elm,state,dismiss,done", "", setting_dismiss_done, md); evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(md->win, layout); evas_object_show(layout); + base_win_resize_object_add(layout); //Image Path Entry Evas_Object *img_path_entry = entry_create(layout); @@ -528,13 +527,13 @@ static void about_open(menu_data *md) { //Layout - Evas_Object *layout = elm_layout_add(md->win); + Evas_Object *layout = elm_layout_add(base_win_get()); elm_layout_file_set(layout, EDJE_PATH, "about_layout"); elm_object_signal_callback_add(layout, "elm,state,dismiss,done", "", about_dismiss_done, md); evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(md->win, layout); evas_object_show(layout); + base_win_resize_object_add(layout); //Entry Evas_Object *entry = elm_entry_add(layout); @@ -848,14 +847,14 @@ static void edc_file_save(menu_data *md) { //Layout - Evas_Object *layout = elm_layout_add(md->win); + Evas_Object *layout = elm_layout_add(base_win_get()); elm_layout_file_set(layout, EDJE_PATH, "fileselector_layout"); elm_object_part_text_set(layout, "elm.text.title", "Save"); elm_object_signal_callback_add(layout, "elm,state,dismiss,done", "", fileselector_dismiss_done, md); evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(md->win, layout); evas_object_show(layout); + base_win_resize_object_add(layout); Evas_Object *fs = elm_fileselector_add(layout); elm_object_part_text_set(fs, "ok", "Save"); @@ -882,14 +881,14 @@ static void edc_file_load(menu_data *md) { //Layout - Evas_Object *layout = elm_layout_add(md->win); + Evas_Object *layout = elm_layout_add(base_win_get()); elm_layout_file_set(layout, EDJE_PATH, "fileselector_layout"); elm_object_part_text_set(layout, "elm.text.title", "Load"); elm_object_signal_callback_add(layout, "elm,state,dismiss,done", "", fileselector_dismiss_done, md); evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(md->win, layout); evas_object_show(layout); + base_win_resize_object_add(layout); Evas_Object *fs = elm_fileselector_add(layout); elm_fileselector_path_set(fs, md->last_accessed_path ? md->last_accessed_path : getenv("HOME")); @@ -942,13 +941,13 @@ static void menu_open(menu_data *md) { //Layout - Evas_Object *layout = elm_layout_add(md->win); + Evas_Object *layout = elm_layout_add(base_win_get()); elm_layout_file_set(layout, EDJE_PATH, "menu_layout"); elm_object_signal_callback_add(layout, "elm,state,dismiss,done", "", menu_dismiss_done, md); evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(md->win, layout); evas_object_show(layout); + base_win_resize_object_add(layout); //Button Evas_Object *btn; @@ -997,12 +996,11 @@ ctxpopup_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } void -menu_init(Evas_Object *win, edit_data *ed) +menu_init(edit_data *ed) { menu_data *md = calloc(1, sizeof(menu_data)); g_md = md; - md->win = win; md->ed = ed; } diff --git a/src/bin/panes.c b/src/bin/panes.c index 160bbcf..1c22c46 100644 --- a/src/bin/panes.c +++ b/src/bin/panes.c @@ -23,6 +23,7 @@ typedef struct _panes_data static double panes_last_right_size1 = 0.5; //when down the panes bar static double panes_last_right_size2 = 0.5; //when up the panes bar +static panes_data *g_pd = NULL; static void transit_op(void *data, Elm_Transit *transit EINA_UNUSED, double progress) @@ -66,11 +67,10 @@ panes_full_view_cancel(panes_data *pd) } static void -hotkeys_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, +hotkeys_clicked_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - app_data *ad = data; - hotkey_toggle(ad); + base_hotkey_toggle(); } static void @@ -145,6 +145,14 @@ right_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) elm_image_file_set(right_arrow_img, EDJE_PATH, "panes_recover_arrow"); } +static void +panes_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + panes_data *pd = data; + free(pd); +} + void panes_full_view_right(Evas_Object *panes) { @@ -159,20 +167,13 @@ panes_full_view_left(Evas_Object *panes) left_clicked_cb(pd, pd->left_arrow, NULL); } -static void -panes_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - panes_data *pd = data; - free(pd); -} - Evas_Object * -panes_create(Evas_Object *parent, app_data *ad) +panes_create(Evas_Object *parent) { Evas_Object *img; panes_data *pd = malloc(sizeof(panes_data)); + g_pd = pd; //Panes Evas_Object *panes = elm_panes_add(parent); @@ -189,7 +190,7 @@ panes_create(Evas_Object *parent, app_data *ad) Evas_Object *hotkeys_btn = elm_button_add(panes); elm_object_focus_allow_set(hotkeys_btn, EINA_FALSE); evas_object_smart_callback_add(hotkeys_btn, "clicked", hotkeys_clicked_cb, - ad); + NULL); evas_object_show(hotkeys_btn); //Hotkey Image diff --git a/src/include/Makefile.am b/src/include/Makefile.am index 0b7408b..3cab40d 100644 --- a/src/include/Makefile.am +++ b/src/include/Makefile.am @@ -1,7 +1,7 @@ MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = common.h \ - main.h \ + base_gui.h \ config_data.h \ dummy_obj.h \ edc_editor.h \ diff --git a/src/include/base_gui.h b/src/include/base_gui.h new file mode 100644 index 0000000..cf56390 --- /dev/null +++ b/src/include/base_gui.h @@ -0,0 +1,10 @@ +Eina_Bool base_gui_init(); +Evas_Object *base_win_get(); +Evas_Object *base_layout_get(); +void base_win_resize_object_add(Evas_Object *resize_obj); +void base_statusbar_toggle(); +void base_hotkey_toggle(); +void base_full_view_left(); +void base_full_view_right(); +void base_left_view_set(); +void base_right_view_set(); diff --git a/src/include/common.h b/src/include/common.h index a218bcb..ee7cf93 100644 --- a/src/include/common.h +++ b/src/include/common.h @@ -12,8 +12,8 @@ typedef struct dummy_obj_s dummy_obj; typedef struct syntax_helper_s syntax_helper; typedef struct indent_s indent_data; typedef struct edj_mgr_s edj_mgr; +typedef struct base_s base_data; -#include "main.h" #include "edc_editor.h" #include "menu.h" #include "edj_viewer.h" @@ -30,5 +30,6 @@ typedef struct edj_mgr_s edj_mgr; #include "globals.h" #include "build.h" #include "hotkeys.h" +#include "base_gui.h" #endif diff --git a/src/include/globals.h b/src/include/globals.h index bb1c8a1..cbeaecb 100644 --- a/src/include/globals.h +++ b/src/include/globals.h @@ -1,4 +1,2 @@ extern const char *PROTO_EDC_PATH; extern char EDJE_PATH[PATH_MAX]; - -void statusbar_toggle(app_data *ad); diff --git a/src/include/hotkeys.h b/src/include/hotkeys.h index 6abff06..d2d569f 100644 --- a/src/include/hotkeys.h +++ b/src/include/hotkeys.h @@ -1,2 +1,2 @@ -Evas_Object *hotkeys_create(Evas_Object *parent, app_data *ad, edit_data *ed); +Evas_Object *hotkeys_create(Evas_Object *parent, edit_data *ed); diff --git a/src/include/main.h b/src/include/main.h deleted file mode 100644 index 2fff4e6..0000000 --- a/src/include/main.h +++ /dev/null @@ -1 +0,0 @@ -void hotkey_toggle(app_data *ad); diff --git a/src/include/menu.h b/src/include/menu.h index 1333254..9a6373c 100644 --- a/src/include/menu.h +++ b/src/include/menu.h @@ -1,6 +1,6 @@ #define VIEW_DATA edj_mgr_view_get(NULL, NULL) -void menu_init(Evas_Object *win, edit_data *ed); +void menu_init(edit_data *ed); void menu_term(); void menu_toggle(); void menu_ctxpopup_register(Evas_Object *ctxpopup); diff --git a/src/include/panes.h b/src/include/panes.h index bc85a2b..7800a5a 100644 --- a/src/include/panes.h +++ b/src/include/panes.h @@ -1,5 +1,3 @@ -Evas_Object *panes_create(Evas_Object *parent, app_data *ad); +Evas_Object *panes_create(Evas_Object *parent); void panes_full_view_right(Evas_Object *panes); void panes_full_view_left(Evas_Object *panes); - - --
