refactoring.

Added base_gui for handling basic window, layout and panes so that other files refer them.
This commit is contained in:
ChunEon Park 2014-02-04 17:17:43 +09:00
parent 34f3e57d9e
commit afb618365a
14 changed files with 212 additions and 131 deletions

View File

@ -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 \

147
src/bin/base_gui.c Normal file
View File

@ -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;
}

View File

@ -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);

View File

@ -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)
{

View File

@ -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;
}

View File

@ -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

View File

@ -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 \

10
src/include/base_gui.h Normal file
View File

@ -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();

View File

@ -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

View File

@ -1,4 +1,2 @@
extern const char *PROTO_EDC_PATH;
extern char EDJE_PATH[PATH_MAX];
void statusbar_toggle(app_data *ad);

View File

@ -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);

View File

@ -1 +0,0 @@
void hotkey_toggle(app_data *ad);

View File

@ -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);

View File

@ -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);