From e16ff998b1a02ff8ccac4391cb1cb06eb8d38ce1 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Wed, 18 May 2016 23:38:18 +0900 Subject: [PATCH] implementing multi editor support. this feature will be come gradually... --- src/bin/base_gui.c | 9 +++++++- src/bin/file_mgr.c | 4 +++- src/bin/main.c | 4 +++- src/bin/menu.c | 7 +++++-- src/bin/newfile.c | 4 +++- src/bin/panes.c | 44 +++++++++++++++++++++++---------------- src/include/base_gui.h | 1 + src/lib/Enventor_Legacy.h | 4 ++++ src/lib/edc_editor.c | 2 -- src/lib/enventor_smart.c | 19 +++++++++++++---- src/lib/redoundo.c | 10 +++++++++ 11 files changed, 78 insertions(+), 30 deletions(-) diff --git a/src/bin/base_gui.c b/src/bin/base_gui.c index 2f87eac..9f15e7e 100644 --- a/src/bin/base_gui.c +++ b/src/bin/base_gui.c @@ -359,5 +359,12 @@ base_enventor_set(Enventor_Object *enventor) base_data *bd = g_bd; assert(bd); bd->enventor = enventor; - panes_text_editor_set(enventor); +} + +void +base_text_editor_set(Enventor_Item *it) +{ + base_data *bd = g_bd; + assert(bd); + panes_text_editor_set(enventor_item_editor_get(it)); } diff --git a/src/bin/file_mgr.c b/src/bin/file_mgr.c index 00c6871..ee8764b 100644 --- a/src/bin/file_mgr.c +++ b/src/bin/file_mgr.c @@ -53,7 +53,9 @@ warning_replace_btn_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { file_mgr_data *fmd = data; - enventor_object_main_file_set(base_enventor_get(), config_input_path_get()); + Enventor_Item *it = enventor_object_main_file_set(base_enventor_get(), + config_input_path_get()); + base_text_editor_set(it); warning_close(fmd); } diff --git a/src/bin/main.c b/src/bin/main.c index 977588c..e986a4c 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -565,9 +565,11 @@ enventor_setup(app_data *ad) enventor_common_setup(enventor); - enventor_object_main_file_set(enventor, config_input_path_get()); + Enventor_Item *it = + enventor_object_main_file_set(enventor, config_input_path_get()); base_enventor_set(enventor); + base_text_editor_set(it); base_title_set(config_input_path_get()); base_live_view_set(enventor_object_live_view_get(enventor)); } diff --git a/src/bin/menu.c b/src/bin/menu.c index 1e8b0cf..0bb0c2b 100644 --- a/src/bin/menu.c +++ b/src/bin/menu.c @@ -432,7 +432,8 @@ fileselector_save_done_cb(void *data, Evas_Object *obj, void *event_info) eina_stringshare_del(selected); return; } - enventor_object_main_file_set(enventor, selected); + Enventor_Item *it = enventor_object_main_file_set(enventor, selected); + base_text_editor_set(it); base_title_set(selected); } else if (is_edj) @@ -507,7 +508,9 @@ fileselector_load_done_cb(void *data, Evas_Object *obj, void *event_info) return; } config_input_path_set(selected); - enventor_object_main_file_set(base_enventor_get(), selected); + Enventor_Item *it = enventor_object_main_file_set(base_enventor_get(), + selected); + base_text_editor_set(it); base_title_set(selected); base_console_reset(); fileselector_close(md); diff --git a/src/bin/newfile.c b/src/bin/newfile.c index b03236d..75fb583 100644 --- a/src/bin/newfile.c +++ b/src/bin/newfile.c @@ -57,7 +57,9 @@ newfile_set(Eina_Bool template_new) EINA_LOG_ERR(_("Cannot find file! \"%s\""), buf); return; } - enventor_object_main_file_set(base_enventor_get(), path); + Enventor_Item *eit = + enventor_object_main_file_set(base_enventor_get(), path); + base_text_editor_set(eit); base_title_set(path); base_console_reset(); file_mgr_reset(); diff --git a/src/bin/panes.c b/src/bin/panes.c index 9989c13..f156848 100644 --- a/src/bin/panes.c +++ b/src/bin/panes.c @@ -23,6 +23,8 @@ typedef struct _panes_data { pane_data horiz; //horizontal pane data (live view, text editor) pane_data vert; //vertical pane data (editors, console) + Evas_Object *text_tool_layout; + Evas_Object *live_tool_layout; } panes_data; static panes_data *g_pd = NULL; @@ -283,30 +285,14 @@ void panes_text_editor_set(Evas_Object *text_editor) { panes_data *pd = g_pd; - - Evas_Object *base_layout = elm_layout_add(pd->horiz.obj); - elm_layout_file_set(base_layout, EDJE_PATH, "tools_layout"); - evas_object_size_hint_weight_set(base_layout, EVAS_HINT_EXPAND, - EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(base_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_object_content_set(base_layout, text_editor); - - elm_object_part_content_set(pd->horiz.obj, "right", base_layout); + elm_object_content_set(pd->text_tool_layout, text_editor); } void panes_live_view_set(Evas_Object *live_view) { panes_data *pd = g_pd; - - Evas_Object *base_layout = elm_layout_add(pd->horiz.obj); - elm_layout_file_set(base_layout, EDJE_PATH, "tools_layout"); - evas_object_size_hint_weight_set(base_layout, EVAS_HINT_EXPAND, - EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(base_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_object_content_set(base_layout, live_view); - - elm_object_part_content_set(pd->horiz.obj, "left", base_layout); + elm_object_content_set(pd->live_tool_layout, live_view); } void @@ -372,6 +358,28 @@ panes_init(Evas_Object *parent) elm_panes_content_right_size_set(panes_h, config_editor_size_get()); elm_panes_content_right_size_set(panes_v, config_console_size_get()); + //Text Tools + Evas_Object *text_tool_layout = elm_layout_add(pd->horiz.obj); + elm_layout_file_set(text_tool_layout, EDJE_PATH, "tools_layout"); + evas_object_size_hint_weight_set(text_tool_layout, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(text_tool_layout, EVAS_HINT_FILL, + EVAS_HINT_FILL); + elm_object_part_content_set(pd->horiz.obj, "right", text_tool_layout); + + pd->text_tool_layout = text_tool_layout; + + //Live Edit Tools + Evas_Object *live_tool_layout = elm_layout_add(pd->horiz.obj); + elm_layout_file_set(live_tool_layout, EDJE_PATH, "tools_layout"); + evas_object_size_hint_weight_set(live_tool_layout, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(live_tool_layout, EVAS_HINT_FILL, + EVAS_HINT_FILL); + elm_object_part_content_set(pd->horiz.obj, "left", live_tool_layout); + + pd->live_tool_layout = live_tool_layout; + return panes_v; } diff --git a/src/include/base_gui.h b/src/include/base_gui.h index c784fd5..54351f3 100644 --- a/src/include/base_gui.h +++ b/src/include/base_gui.h @@ -21,6 +21,7 @@ void base_console_auto_hide(void); void base_console_toggle(void); void base_live_view_set(Evas_Object *live_view); void base_enventor_set(Enventor_Object *enventor); +void base_text_editor_set(Enventor_Item *it); void base_gui_term(void); void base_console_reset(void); void base_error_msg_set(const char *msg); diff --git a/src/lib/Enventor_Legacy.h b/src/lib/Enventor_Legacy.h index ee5493e..e53f324 100644 --- a/src/lib/Enventor_Legacy.h +++ b/src/lib/Enventor_Legacy.h @@ -1,6 +1,10 @@ typedef struct _Enventor_Item_Data Enventor_Item; EAPI Evas_Object *enventor_object_add(Evas_Object *parent); + +//FIXME: Should be eofied. EAPI Enventor_Item *enventor_object_main_file_set(Evas_Object *obj, const char *file); +EAPI Evas_Object *enventor_item_editor_get(const Enventor_Item *it); + #include "enventor_object.eo.legacy.h" diff --git a/src/lib/edc_editor.c b/src/lib/edc_editor.c index e90fbc7..adebb4b 100644 --- a/src/lib/edc_editor.c +++ b/src/lib/edc_editor.c @@ -1407,8 +1407,6 @@ edit_init(Enventor_Object *enventor) elm_object_focus_set(en_edit, EINA_TRUE); elm_object_part_content_set(layout, "elm.swallow.edit", en_edit); - evas_object_smart_member_add(scroller, enventor); - ed->scroller = scroller; ed->en_line = en_line; ed->en_edit = en_edit; diff --git a/src/lib/enventor_smart.c b/src/lib/enventor_smart.c index c234368..f2b1511 100644 --- a/src/lib/enventor_smart.c +++ b/src/lib/enventor_smart.c @@ -727,15 +727,15 @@ _enventor_object_font_set(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd, eina_stringshare_replace(&pd->font_style, font_style); char *font = NULL; - if (font_name) font = elm_font_fontconfig_name_get(font_name, font_style); + if (font_name) font = elm_font_fontconfig_name_get(font_name, font_style); elm_config_font_overlay_set("enventor_entry", font, -100); elm_config_font_overlay_apply(); elm_config_save(); elm_font_fontconfig_name_free(font); - + //Main Item - edit_font_update(pd->main_it.ed); + edit_font_update(pd->main_it.ed); } EOLIAN static void @@ -842,7 +842,8 @@ _enventor_object_template_part_insert(Eo *obj EINA_UNUSED, char *rel2_x_to, char *rel2_y_to, float align_x, float align_y, int min_w, int min_h, - float rel1_x, float rel1_y, float rel2_x,float rel2_y, + float rel1_x, float rel1_y, + float rel2_x,float rel2_y, char *syntax, size_t n) { // if mirror mode, exchange properties about left and right @@ -957,4 +958,14 @@ enventor_object_main_file_set(Enventor_Object *obj, const char *file) return &pd->main_it; } +Evas_Object * +enventor_item_editor_get(const Enventor_Item *it) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(it, NULL); + + if (!it->ed) return NULL; + + return edit_obj_get(it->ed); +} + #include "enventor_object.eo.c" diff --git a/src/lib/redoundo.c b/src/lib/redoundo.c index 314ce57..34efef9 100644 --- a/src/lib/redoundo.c +++ b/src/lib/redoundo.c @@ -40,6 +40,14 @@ struct redoundo_s /*****************************************************************************/ /* Internal method implementation */ /*****************************************************************************/ +static void +entry_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + redoundo_data *rd = data; + rd->cursor = NULL; +} + Eina_Bool _input_timer_cb(void *data) { @@ -408,6 +416,8 @@ redoundo_init(edit_data *ed, Enventor_Object *enventor) //FIXME: Why signal callback? not smart callback? elm_object_signal_callback_add(rd->entry, "entry,changed,user", "*", entry_changed_user_cb, rd); + evas_object_event_callback_add(entry, EVAS_CALLBACK_DEL, + entry_del_cb, rd); return rd; }