From e61cfb6124d74223b08f2b903b126960500b86e1 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Wed, 29 Jun 2016 20:28:11 +0900 Subject: [PATCH] file_tab: add a partial implmentation. --- README | 1 + data/themes/default/images.edc | 8 +- data/themes/default/images/Makefile.am | 6 +- data/themes/default/images/filetab.png | Bin 0 -> 2887 bytes data/themes/default/images/left.png | Bin 0 -> 3019 bytes data/themes/default/images/right.png | Bin 0 -> 3003 bytes data/themes/default/layout_common.edc | 56 +++++++-- src/bin/Makefile.am | 3 +- src/bin/base_gui.c | 19 +++ src/bin/config_data.c | 34 ++++-- src/bin/file_tab.c | 156 +++++++++++++++++++++++++ src/bin/main.c | 10 +- src/bin/preference_setting.c | 6 +- src/bin/tools.c | 33 +++--- src/include/common.h | 5 +- src/include/config_data.h | 2 + src/include/file_tab.h | 3 + src/include/tools.h | 2 +- src/lib/Enventor_Legacy.h | 2 +- src/lib/edc_editor.c | 12 ++ src/lib/enventor_private.h | 1 + src/lib/enventor_smart.c | 14 +++ 22 files changed, 329 insertions(+), 44 deletions(-) create mode 100644 data/themes/default/images/filetab.png create mode 100644 data/themes/default/images/left.png create mode 100644 data/themes/default/images/right.png create mode 100644 src/bin/file_tab.c create mode 100644 src/include/file_tab.h diff --git a/README b/README index ecc9a53..cd545c3 100644 --- a/README +++ b/README @@ -39,6 +39,7 @@ F7 - Toggle Tools F8 - Toggle Status F9 - Toggle File Browser F10 - Toggle EDC Navigator +F11 - Toggle File Tab F12 - Settings Ctrl+S - Quick Save + Update Live View diff --git a/data/themes/default/images.edc b/data/themes/default/images.edc index 9b09c24..20f0d92 100644 --- a/data/themes/default/images.edc +++ b/data/themes/default/images.edc @@ -10,7 +10,6 @@ images { image: "highlight.png" COMP; image: "lines.png" COMP; image: "console.png" COMP; - image: "status.png" COMP; image: "dummy.png" COMP; image: "mirror.png" COMP; image: "goto.png" COMP; @@ -46,6 +45,9 @@ images { image: "brows_font.png" COMP; image: "template.png" COMP; image: "part_outline.png" COMP; + image: "left.png" COMP; + image: "right.png" COMP; + image: "filetab.png" COMP; } #define ICON_GROUP(_group_name, _image_path) \ @@ -64,7 +66,6 @@ ICON_GROUP("find", "find.png") ICON_GROUP("highlight", "highlight.png") ICON_GROUP("lines", "lines.png") ICON_GROUP("console", "console.png") -ICON_GROUP("status", "status.png") ICON_GROUP("dummy", "dummy.png") ICON_GROUP("mirror", "mirror.png") ICON_GROUP("up", "slider_up.png") @@ -105,5 +106,8 @@ ICON_GROUP("brows_sound", "brows_sound.png") ICON_GROUP("brows_font", "brows_font.png") ICON_GROUP("template", "template.png") ICON_GROUP("part_outline", "part_outline.png") +ICON_GROUP("left_arrow", "left.png") +ICON_GROUP("right_arrow", "right.png") +ICON_GROUP("filetab", "filetab.png") #undef ICON_GROUP diff --git a/data/themes/default/images/Makefile.am b/data/themes/default/images/Makefile.am index 4540b8d..717c0a9 100644 --- a/data/themes/default/images/Makefile.am +++ b/data/themes/default/images/Makefile.am @@ -45,7 +45,6 @@ EXTRA_DIST = \ lines.png \ setting_icon.png \ console.png \ - status.png \ dummy.png \ mirror.png \ goto.png \ @@ -94,4 +93,7 @@ EXTRA_DIST = \ brows_image.png \ brows_sound.png \ brows_font.png \ - template.png + template.png \ + left.png \ + right.png \ + filetab.png diff --git a/data/themes/default/images/filetab.png b/data/themes/default/images/filetab.png new file mode 100644 index 0000000000000000000000000000000000000000..10bdb9784229de87b3be265137b72f36bc7ba799 GIT binary patch literal 2887 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 literal 0 HcmV?d00001 diff --git a/data/themes/default/images/left.png b/data/themes/default/images/left.png new file mode 100644 index 0000000000000000000000000000000000000000..6f9fbc67e18daba9cd5c7cec430157dfad3b3df1 GIT binary patch literal 3019 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 literal 0 HcmV?d00001 diff --git a/data/themes/default/layout_common.edc b/data/themes/default/layout_common.edc index 4e7d126..898b024 100644 --- a/data/themes/default/layout_common.edc +++ b/data/themes/default/layout_common.edc @@ -1772,6 +1772,11 @@ group { "colorselector_layout"; group { "statusbar_layout"; parts { + rect { "bg"; + desc { "default"; + color: 64 64 64 255; + } + } rect { "base_clip"; desc { "default"; color: 255 255 255 255; @@ -2309,7 +2314,7 @@ group { "main_layout"; spacer { "base"; scale: 1; desc { - min: 810 440; + min: 810 475; } } swallow { "elm.swallow.panes"; @@ -2322,7 +2327,7 @@ group { "main_layout"; rel2 { relative: 0.0 0.0; to_x: "elm.swallow.edc_navigator"; - to_y: "elm.swallow.statusbar"; + to_y: "elm.swallow.file_tab"; } } } @@ -2338,6 +2343,31 @@ group { "main_layout"; color: 200 0 0 175; } } + swallow { "elm.swallow.file_tab"; + scale: 1; + desc { "default"; + rel1 { to: "elm.swallow.statusbar"; relative: 0 0; } + rel2 { to: "elm.swallow.statusbar"; relative: 1 0; } + align: 0.5 0; + min: 0 22; + fixed: 0 1; + } + desc { "visible"; + inherit: "default"; + align: 0.5 1; + } + } + rect { "separator"; + scale: 1; + desc { "default"; + rel1 { to: "elm.swallow.file_tab"; relative: 0 1; offset: 0 -2; } + rel2 { to: "elm.swallow.file_tab"; relative: 1 1; offset: -1 -3; } + align: 0.5 0; + min: 0 1; + fixed: 0 1; + color: 50 50 50 100; + } + } swallow { "elm.swallow.statusbar"; scale: 1; desc { "default"; @@ -2360,7 +2390,7 @@ group { "main_layout"; } rel2 { relative: 0.0 0.0; - to_y: "elm.swallow.statusbar"; + to_y: "elm.swallow.file_tab"; } align: 1 0; min: 200 0; @@ -2381,7 +2411,7 @@ group { "main_layout"; } rel2 { relative: 1.0 0.0; - to_y: "elm.swallow.statusbar"; + to_y: "elm.swallow.file_tab"; } align: 0 0; min: 200 0; @@ -2397,7 +2427,7 @@ group { "main_layout"; } rel2 { relative: 1.0 0.0; - to_y: "elm.swallow.statusbar"; + to_y: "elm.swallow.file_tab"; } visible: 1; } @@ -2440,6 +2470,18 @@ group { "main_layout"; target: "elm.swallow.statusbar"; transition: DECELERATE 0.25; } + program { "file_tab_show"; + signal: "elm,state,file_tab,show"; + action: STATE_SET "visible"; + target: "elm.swallow.file_tab"; + transition: DECELERATE 0.25; + } + program { "file_tab_hide"; + signal: "elm,state,file_tab,hide"; + action: STATE_SET "default"; + target: "elm.swallow.file_tab"; + transition: DECELERATE 0.25; + } program { "alert_show"; signal: "elm,state,alert,show"; action: STATE_SET "visible"; @@ -3028,7 +3070,7 @@ group { "text_editor_tools_layout"; align: 1.0 0.5; } } - swallow { "elm.swallow.status"; + swallow { "elm.swallow.file_tab"; scale: 1; desc { "default"; rel.to: "padding10"; @@ -3040,7 +3082,7 @@ group { "text_editor_tools_layout"; spacer { "padding11"; scale: 1; desc { "default"; - rel.to: "elm.swallow.status"; + rel.to: "elm.swallow.file_tab"; rel2.relative: 0.0 1.0; min: 8 0; fixed: 1 0; diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index 52bf3ed..4108157 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -33,7 +33,8 @@ enventor_SOURCES = \ file_browser.c \ build_setting.c \ preference_setting.c \ - help.c + help.c \ + file_tab.c enventor_LDADD = \ $(top_builddir)/src/lib/libenventor.la \ diff --git a/src/bin/base_gui.c b/src/bin/base_gui.c index 686993a..9d80dcd 100644 --- a/src/bin/base_gui.c +++ b/src/bin/base_gui.c @@ -82,6 +82,20 @@ base_statusbar_toggle(Eina_Bool toggle) elm_object_signal_emit(bd->layout, "elm,state,statusbar,hide", ""); } +void +base_file_tab_toggle(Eina_Bool toggle) +{ + base_data *bd = g_bd; + assert(bd); + + if (toggle) config_file_tab_set(!config_file_tab_get()); + + if (config_file_tab_get()) + elm_object_signal_emit(bd->layout, "elm,state,file_tab,show", ""); + else + elm_object_signal_emit(bd->layout, "elm,state,file_tab,hide", ""); +} + void base_file_browser_toggle(Eina_Bool toggle) { base_data *bd = g_bd; @@ -245,6 +259,7 @@ base_gui_term(void) ecore_timer_del(bd->edc_navi_update_timer); file_browser_term(); edc_navigator_term(); + file_tab_term(); panes_term(); free(bd); @@ -338,6 +353,10 @@ base_gui_init(void) Evas_Object *edc_navigator = edc_navigator_init(layout); elm_object_part_content_set(layout, "elm.swallow.edc_navigator", edc_navigator); + //File Tab + Evas_Object *file_tab = file_tab_init(layout); + elm_object_part_content_set(layout, "elm.swallow.file_tab", file_tab); + bd->win = win; bd->layout = layout; bd->console = console; diff --git a/src/bin/config_data.c b/src/bin/config_data.c index 9bd2a0d..27695ed 100644 --- a/src/bin/config_data.c +++ b/src/bin/config_data.c @@ -45,6 +45,7 @@ typedef struct config_s Eina_Bool file_browser_loaded; Eina_Bool edc_navigator; Eina_Bool red_alert; + Eina_Bool file_tab; } config_data; static config_data *g_cd = NULL; @@ -194,9 +195,10 @@ config_load(void) cd->auto_complete = EINA_TRUE; cd->version = ENVENTOR_CONFIG_VERSION; cd->smart_undo_redo = EINA_FALSE; - cd->file_browser = EINA_TRUE; + cd->file_browser = EINA_FALSE; cd->edc_navigator = EINA_TRUE; cd->red_alert = EINA_TRUE; + cd->file_tab = EINA_FALSE; } g_cd = cd; @@ -325,6 +327,8 @@ eddc_init(void) edc_navigator, EET_T_UCHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(edd_base, config_data, "red_alert", red_alert, EET_T_UCHAR); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd_base, config_data, "file_tab", file_tab, + EET_T_UCHAR); } void @@ -683,13 +687,6 @@ config_linenumber_get(void) return cd->linenumber; } -Eina_Bool -config_stats_bar_get(void) -{ - config_data *cd = g_cd; - return cd->stats_bar; -} - void config_linenumber_set(Eina_Bool enabled) { @@ -697,6 +694,27 @@ config_linenumber_set(Eina_Bool enabled) cd->linenumber = enabled; } +Eina_Bool +config_file_tab_get(void) +{ + config_data *cd = g_cd; + return cd->file_tab; +} + +void +config_file_tab_set(Eina_Bool enabled) +{ + config_data *cd = g_cd; + cd->file_tab = enabled; +} + +Eina_Bool +config_stats_bar_get(void) +{ + config_data *cd = g_cd; + return cd->stats_bar; +} + void config_stats_bar_set(Eina_Bool enabled) { diff --git a/src/bin/file_tab.c b/src/bin/file_tab.c new file mode 100644 index 0000000..2cef99a --- /dev/null +++ b/src/bin/file_tab.c @@ -0,0 +1,156 @@ +#include "common.h" + +typedef struct file_tab_s +{ + Evas_Object *in_box; + Evas_Object *scroller; + Evas_Object *out_box; +} file_data; + +typedef struct file_tab_it_s +{ + Enventor_Item *it; + file_data *fd; + +} file_tab_it; + +file_data *g_fd = NULL; + +/*****************************************************************************/ +/* Internal method implementation */ +/*****************************************************************************/ + +/*****************************************************************************/ +/* Externally accessible calls */ +/*****************************************************************************/ + +Eina_Bool file_tab_it_add(Enventor_Item *enventor_it) +{ + if (!enventor_it) + { + EINA_LOG_ERR("enventor_it = NULL?"); + return EINA_FALSE; + } + + file_data *fd = g_fd; + if (!fd) return EINA_FALSE; + + file_tab_it *fti = NULL; + fti = calloc(1, sizeof(file_tab_it)); + if (!fti) + { + EINA_LOG_ERR("Failed to allocate Memory!"); + return EINA_FALSE; + } + + const char *filepath = enventor_item_file_get(enventor_it); + if (!filepath) + { + EINA_LOG_ERR("No file path??"); + goto err; + } + + //Filter out file path and just have a file name without extension. + char *filename = ecore_file_strip_ext(ecore_file_file_get(filepath)); + if (!filename) + { + EINA_LOG_ERR("no filename??"); + goto err; + } + + Evas_Object *btn = elm_button_add(fd->in_box); + elm_object_text_set(btn, filename); + elm_object_style_set(btn, "enventor"); + evas_object_size_hint_weight_set(btn, 0, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(btn, 0, 0.5); + evas_object_show(btn); + + elm_box_pack_end(fd->in_box, btn); + + free(filename); + + return EINA_TRUE; + +err: + free(fti); + return EINA_FALSE; +} + +Evas_Object * +file_tab_init(Evas_Object *parent) +{ + file_data *fd = calloc(1, sizeof(file_data)); + if (!fd) + { + EINA_LOG_ERR("Failed to allocate Memory!"); + return NULL; + } + g_fd = fd; + + //Outer Box + Evas_Object *out_box = elm_box_add(parent); + elm_box_padding_set(out_box, ELM_SCALE_SIZE(5), 0); + elm_box_horizontal_set(out_box, EINA_TRUE); + + //Left Button + Evas_Object *left_btn = elm_button_add(out_box); + elm_object_style_set(left_btn, ENVENTOR_NAME); + evas_object_size_hint_weight_set(left_btn, 0, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(left_btn, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(left_btn); + elm_box_pack_end(out_box, left_btn); + + //Left Button Icon + Evas_Object *img1 = elm_image_add(left_btn); + elm_image_file_set(img1, EDJE_PATH, "left_arrow"); + elm_object_content_set(left_btn, img1); + + //Right Button + Evas_Object *right_btn = elm_button_add(out_box); + evas_object_size_hint_weight_set(right_btn, 0, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(right_btn, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_style_set(right_btn, ENVENTOR_NAME); + evas_object_show(right_btn); + elm_box_pack_end(out_box, right_btn); + + //Right Button Icon + Evas_Object *img2 = elm_image_add(right_btn); + elm_image_file_set(img2, EDJE_PATH, "right_arrow"); + elm_object_content_set(right_btn, img2); + + //Scroller + Evas_Object *scroller = elm_scroller_add(out_box); + elm_object_style_set(scroller, ENVENTOR_NAME); + elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, + ELM_SCROLLER_POLICY_OFF); + evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(scroller); + elm_box_pack_end(out_box, scroller); + + //Inner Box + Evas_Object *in_box = elm_box_add(scroller); + elm_box_horizontal_set(in_box, EINA_TRUE); + evas_object_size_hint_weight_set(in_box, 0, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(in_box, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_content_set(scroller, in_box); + + fd->out_box = out_box; + fd->in_box = in_box; + fd->scroller = scroller; + + return out_box; +} + +void +file_tab_term(void) +{ + file_data *fd = g_fd; + if (!fd) return; + + evas_object_del(fd->out_box); + + free(fd); + g_fd = NULL; +} diff --git a/src/bin/main.c b/src/bin/main.c index a90d7a5..60bafed 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -44,7 +44,7 @@ tools_update(void) tools_dummy_update(EINA_FALSE); tools_outline_update(EINA_FALSE); tools_mirror_mode_update(EINA_FALSE); - tools_status_update(EINA_FALSE); + tools_file_tab_update(EINA_FALSE); tools_file_browser_update(EINA_FALSE); tools_edc_navigator_update(EINA_FALSE); } @@ -594,6 +594,7 @@ enventor_setup(app_data *ad) ad->main_it = enventor_object_main_file_set(enventor, config_input_path_get()); + file_tab_it_add(ad->main_it); base_enventor_set(enventor); base_text_editor_set(ad->main_it); @@ -828,6 +829,13 @@ keygrabber_key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, tools_edc_navigator_update(EINA_TRUE); return; } + //File Tab + if (!strcmp(ev->key, "F11")) + { + enventor_object_ctxpopup_dismiss(base_enventor_get()); + tools_file_tab_update(EINA_TRUE); + return; + } //Setting if (!strcmp(ev->key, "F12")) { diff --git a/src/bin/preference_setting.c b/src/bin/preference_setting.c index 2ce69a2..0d196d6 100644 --- a/src/bin/preference_setting.c +++ b/src/bin/preference_setting.c @@ -227,7 +227,7 @@ preference_setting_content_get(preference_setting_data *psd, toggle_create(box, _("Tools"), config_tools_get(), _("Tools (F7)
" - "Display the tools on the top area.
" + "Display Tools on the top area.
" "Tools displays the essential function
" "toggles to edit the layout.")); elm_box_pack_end(box, toggle_tools); @@ -236,8 +236,8 @@ preference_setting_content_get(preference_setting_data *psd, Evas_Object *toggle_status = toggle_create(box, _("Status"), config_stats_bar_get(), _("Status (F8)
" - "Display Status bar on the bottom area.
" - "Status bar displays subsidiary information for
" + "Display Status bar, which shows subsidiary
" + "information for editing in the bottom area." "editing.")); elm_box_pack_end(box, toggle_status); diff --git a/src/bin/tools.c b/src/bin/tools.c index 9b1a846..e797986 100644 --- a/src/bin/tools.c +++ b/src/bin/tools.c @@ -8,7 +8,7 @@ typedef struct tools_s { Evas_Object *swallow_btn; Evas_Object *outline_btn; - Evas_Object *status_btn; + Evas_Object *file_tab; Evas_Object *file_browser_btn; Evas_Object *edc_navigator_btn; Evas_Object *lines_btn; @@ -93,10 +93,10 @@ edc_navigator_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } static void -status_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) +file_tab_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) { - tools_status_update(EINA_TRUE); + tools_file_tab_update(EINA_TRUE); } static void @@ -370,15 +370,16 @@ tools_init(Evas_Object *parent) btn); td->edc_navigator_btn = btn; - btn = tools_btn_create(text_editor_ly, "status", - _("Status (F11)
" - "Display the status bar, which shows subsidiary
" - "information for editing in the bottom area."), - status_cb); + btn = tools_btn_create(text_editor_ly, "filetab", + _("File Tab (F11)
" + "Display the file tab in the bottom area
" + "It shows an opened file list to switch
" + "files quickly. to switch files quickly."), + file_tab_cb); evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_object_part_content_set(text_editor_ly, "elm.swallow.status", btn); - td->status_btn = btn; + elm_object_part_content_set(text_editor_ly, "elm.swallow.file_tab", btn); + td->file_tab = btn; btn = tools_btn_create(text_editor_ly, "menu", _("Enventor menu (Esc)
" @@ -576,18 +577,18 @@ tools_mirror_mode_update(Eina_Bool toggle) } void -tools_status_update(Eina_Bool toggle) +tools_file_tab_update(Eina_Bool toggle) { tools_data *td = g_td; if (!td) return; - base_statusbar_toggle(toggle); + base_file_tab_toggle(toggle); //Toggle on/off - if (config_stats_bar_get()) - elm_object_signal_emit(td->status_btn, "icon,highlight,enabled", ""); + if (config_file_tab_get()) + elm_object_signal_emit(td->file_tab, "icon,highlight,enabled", ""); else - elm_object_signal_emit(td->status_btn, "icon,highlight,disabled", ""); + elm_object_signal_emit(td->file_tab, "icon,highlight,disabled", ""); } void diff --git a/src/include/common.h b/src/include/common.h index e976490..88217b6 100644 --- a/src/include/common.h +++ b/src/include/common.h @@ -57,14 +57,14 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n" #define ROUNDING(x, dig) (floor((x) * pow(10, dig) + 0.5) / pow(10, dig)) -#define ENVENTOR_CONFIG_VERSION 10 +#define ENVENTOR_CONFIG_VERSION 11 #define EVENT_KEY_MODIFIER_CHECK(NAME, MASK) \ ((MASK & ECORE_EVENT_MODIFIER_##NAME) && \ !((0xFF ^ ECORE_EVENT_MODIFIER_##NAME) & (MASK & 0x0F))) #define WIN_DEFAULT_W 900 -#define WIN_DEFAULT_H 440 +#define WIN_DEFAULT_H 475 #define ENVENTOR_BETA_API_SUPPORT 1 #include @@ -85,6 +85,7 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n" #include "build_setting.h" #include "preference_setting.h" #include "help.h" +#include "file_tab.h" /* localization */ #ifdef HAVE_GETTEXT diff --git a/src/include/config_data.h b/src/include/config_data.h index b4eb3f8..8ea200e 100644 --- a/src/include/config_data.h +++ b/src/include/config_data.h @@ -25,8 +25,10 @@ const char *config_syntax_color_get(Enventor_Syntax_Color_Type color_type); void config_update_cb_set(void (*cb)(void *data), void *data); void config_stats_bar_set(Eina_Bool enabled); void config_linenumber_set(Eina_Bool enabled); +void config_file_tab_set(Eina_Bool enabled); Eina_Bool config_stats_bar_get(void); Eina_Bool config_linenumber_get(void); +Eina_Bool config_file_tab_get(void); void config_apply(void); void config_input_path_set(const char *input_path); void config_view_size_get(Evas_Coord *w, Evas_Coord *h); diff --git a/src/include/file_tab.h b/src/include/file_tab.h new file mode 100644 index 0000000..768975d --- /dev/null +++ b/src/include/file_tab.h @@ -0,0 +1,3 @@ +Evas_Object *file_tab_init(Evas_Object *parent); +void file_tab_term(void); + diff --git a/src/include/tools.h b/src/include/tools.h index eef1c5b..f28be6f 100644 --- a/src/include/tools.h +++ b/src/include/tools.h @@ -5,7 +5,7 @@ void tools_lines_update(Eina_Bool toggle); void tools_dummy_update(Eina_Bool toggle); void tools_outline_update(Eina_Bool toggle); void tools_mirror_mode_update(Eina_Bool toggle); -void tools_status_update(Eina_Bool toggle); +void tools_file_tab_update(Eina_Bool toggle); void tools_file_browser_update(Eina_Bool toggle); void tools_edc_navigator_update(Eina_Bool toggle); void tools_goto_update(void); diff --git a/src/lib/Enventor_Legacy.h b/src/lib/Enventor_Legacy.h index e53f324..698fbf3 100644 --- a/src/lib/Enventor_Legacy.h +++ b/src/lib/Enventor_Legacy.h @@ -4,7 +4,7 @@ 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); +EAPI const char *enventor_item_file_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 0d016ad..4d63d08 100644 --- a/src/lib/edc_editor.c +++ b/src/lib/edc_editor.c @@ -29,6 +29,7 @@ struct editor_s Evas_Object *layout; Evas_Object *ctxpopup; Enventor_Object *enventor; + Eina_Stringshare *filepath; syntax_helper *sh; parser_data *pd; @@ -1012,6 +1013,9 @@ edit_edc_load(edit_data *ed, const char *file_path) ret = EINA_TRUE; + eina_stringshare_del(ed->filepath); + ed->filepath = eina_stringshare_add(file_path); + err: //Even any text is not inserted, line number should start with 1 if (ed->line_max == 0) line_init(ed); @@ -1444,6 +1448,7 @@ edit_term(edit_data *ed) ecore_thread_cancel(ed->syntax_color_thread); ecore_timer_del(ed->syntax_color_timer); evas_object_del(ed->scroller); + eina_stringshare_del(ed->filepath); free(ed); @@ -1744,6 +1749,13 @@ edit_key_up_event_dispatch(edit_data *ed, const char *key) return EINA_FALSE; } + +const char * +edit_file_get(edit_data *ed) +{ + return ed->filepath; +} + void edit_selection_region_center_set(edit_data *ed, int start, int end) { diff --git a/src/lib/enventor_private.h b/src/lib/enventor_private.h index 2c6461f..ea57c4d 100644 --- a/src/lib/enventor_private.h +++ b/src/lib/enventor_private.h @@ -275,5 +275,6 @@ void edit_text_insert(edit_data *ed, const char *text); void edit_part_cursor_set(edit_data *ed, const char *group_name, const char *part_name); redoundo_data *edit_redoundo_get(edit_data *ed); void edit_selection_region_center_set(edit_data *ed, int start, int end); +const char *edit_file_get(edit_data *ed); #endif diff --git a/src/lib/enventor_smart.c b/src/lib/enventor_smart.c index 7464342..bd3a51e 100644 --- a/src/lib/enventor_smart.c +++ b/src/lib/enventor_smart.c @@ -975,6 +975,9 @@ enventor_object_main_file_set(Enventor_Object *obj, const char *file) return &pd->main_it; } +/////////////////////////////////////////////////////////////////////////////// +/* Enventor_Item Functions. */ +/////////////////////////////////////////////////////////////////////////////// Evas_Object * enventor_item_editor_get(const Enventor_Item *it) { @@ -985,4 +988,15 @@ enventor_item_editor_get(const Enventor_Item *it) return edit_obj_get(it->ed); } +const char * +enventor_item_file_get(const Enventor_Item *it) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(it, NULL); + + if (!it->ed) return NULL; + + return edit_file_get(it->ed); +} + + #include "enventor_object.eo.c"