diff --git a/.gitignore b/.gitignore index 948b6e2..8acf0c6 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,9 @@ *.swp *.eet *~ +.* +*.eo.* + enventor enventorql Makefile.in diff --git a/Makefile.am b/Makefile.am index c599adc..d4c9f63 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,12 +1,28 @@ -MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.guess \ - config.h.in config.sub configure install-sh \ - depcomp libtool missing +MAINTAINERCLEANFILES = \ +Makefile.in \ +aclocal.m4 \ +config.guess \ +config.h.in \ +config.sub \ +configure \ +install-sh \ +depcomp \ +libtool \ +missing filesdir = $(datadir)/$(PACKAGE)/docs files_DATA = README -EXTRA_DIST = README AUTHORS COPYING autogen.sh +EXTRA_DIST = \ +README \ +AUTHORS \ +COPYING \ +autogen.sh SUBDIRS = src data ACLOCAL_AMFLAGS = -I m4 + +pkgconfigdir = $(libdir)/pkgconfig + +pkgconfig_DATA = pc/enventor.pc diff --git a/Makefile_Eolian_Cxx_Helper.am b/Makefile_Eolian_Cxx_Helper.am new file mode 100644 index 0000000..12ac58e --- /dev/null +++ b/Makefile_Eolian_Cxx_Helper.am @@ -0,0 +1,19 @@ + +if HAVE_EOLIAN_CXX +EOLIAN_CXX = @eolian_cxx@ +_EOLIAN_CXX_DEP = @eolian_cxx@ +else +EOLIAN_CXX = EFL_RUN_IN_TREE=1 $(top_builddir)/src/bin/eolian_cxx/eolian_cxx${EXEEXT} +_EOLIAN_CXX_DEP = bin/eolian_cxx/eolian_cxx${EXEEXT} +endif + +AM_V_EOLCXX = $(am__v_EOLCXX_@AM_V@) +am__v_EOLCXX_ = $(am__v_EOLCXX_@AM_DEFAULT_V@) +am__v_EOLCXX_0 = @echo " EOLCXX " $@; + +SUFFIXES += .eo.hh + +%.eo.hh: %.eo $(_EOLIAN_CXX_DEP) + $(AM_V_EOLCXX)$(EOLIAN_CXX) $(EOLIAN_FLAGS) -o $@ $< + +CLEANFILES += $(BUILT_SOURCES) diff --git a/Makefile_Eolian_Helper.am b/Makefile_Eolian_Helper.am new file mode 100644 index 0000000..168f659 --- /dev/null +++ b/Makefile_Eolian_Helper.am @@ -0,0 +1,24 @@ +if HAVE_EOLIAN_GEN +EOLIAN_GEN = @eolian_gen@ +_EOLIAN_GEN_DEP = @eolian_gen@ +else +EOLIAN_GEN = EFL_RUN_IN_TREE=1 $(top_builddir)/src/bin/eolian/eolian_gen${EXEEXT} +_EOLIAN_GEN_DEP = bin/eolian/eolian_gen${EXEEXT} +endif + +AM_V_EOL = $(am__v_EOL_@AM_V@) +am__v_EOL_ = $(am__v_EOL_@AM_DEFAULT_V@) +am__v_EOL_0 = @echo " EOLIAN " $@; + +SUFFIXES = .eo .eo.c .eo.h .eo.legacy.h + +%.eo.c: %.eo ${_EOLIAN_GEN_DEP} + $(AM_V_EOL)$(EOLIAN_GEN) --eo --legacy $(EOLIAN_FLAGS) --gc -o $@ $< + +%.eo.h: %.eo ${_EOLIAN_GEN_DEP} + $(AM_V_EOL)$(EOLIAN_GEN) --eo $(EOLIAN_FLAGS) --gh -o $@ $< + +%.eo.legacy.h: %.eo ${_EOLIAN_GEN_DEP} + $(AM_V_EOL)$(EOLIAN_GEN) --legacy $(EOLIAN_FLAGS) --gh -o $@ $< + +CLEANFILES += $(BUILT_SOURCES) diff --git a/configure.ac b/configure.ac index 6361b92..8af2ab2 100644 --- a/configure.ac +++ b/configure.ac @@ -49,22 +49,32 @@ AC_SUBST(version_info) AC_SUBST(release_info) ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## -VMAJ=v_maj -AC_SUBST(VMAJ) +ENVENTOR_VERSION_MAJOR=v_maj +ENVENTOR_VERSION_MINOR=v_min +AC_SUBST(ENVENTOR_VERSION_MAJOR) +AC_SUBST(ENVENTOR_VERSION_MINOR) + +EFL_ENABLE_EO_API_SUPPORT +EFL_ENABLE_BETA_API_SUPPORT efl_version="1.9.0" +requirement_enventor=" \ +eo >= ${efl_version} \ +eina >= ${efl_version} \ +eet >= ${efl_version} \ +elementary >= ${efl_version} \ +evas >= ${efl_version} \ +ecore >= ${efl_version} \ +ecore-file >= ${efl_version} \ +edje >= ${efl_version} \ +eio >= ${efl_version} \ +efreet >= ${efl_version}" + +AC_SUBST(requirement_enventor) PKG_CHECK_MODULES([ENVENTOR], [ - eina >= ${efl_version} - eet >= ${efl_version} - elementary >= ${efl_version} - evas >= ${efl_version} - ecore >= ${efl_version} - ecore-file >= ${efl_version} - edje >= ${efl_version} - eio >= ${efl_version} - efreet >= ${efl_version} + ${requirement_enventor} ] ) @@ -82,16 +92,28 @@ case "$host_vendor" in esac AC_SUBST([lt_enable_auto_import]) +# Needs to be moved into a macro, and also, needs a way to automatically fetch from all the dependencies using the Requires. +DEPS_EOLIAN_FLAGS=`${PKG_CONFIG} --variable=eolian_flags eo evas edje ecore elementary efl` +AC_SUBST([DEPS_EOLIAN_FLAGS]) + EFL_ATTRIBUTE_UNUSED # Check edje_cc EFL_WITH_BIN([eet], [eet-eet], [eet]) EFL_WITH_BIN([edje], [edje-cc], [edje_cc]) +EFL_WITH_BIN([eolian], [eolian-gen], [eolian_gen]) +EFL_WITH_BIN([eolian-cxx], [eolian-cxx], [eolian_cxx]) + +# Force the helper to try external eolian generator +AM_CONDITIONAL([HAVE_EOLIAN_GEN], [true]) +AM_CONDITIONAL([HAVE_EOLIAN_CXX], [true]) AC_CONFIG_FILES([ Makefile src/Makefile src/include/Makefile +src/lib/Makefile +src/lib/Enventor.h src/bin/Makefile data/Makefile data/desktop/Makefile @@ -104,6 +126,7 @@ data/templates/Makefile data/color/Makefile data/sounds/Makefile data/about/Makefile +pc/enventor.pc ]) AC_OUTPUT diff --git a/data/themes/default/layout_setting.edc b/data/themes/default/layout_setting.edc index 3a17df5..1acc211 100644 --- a/data/themes/default/layout_setting.edc +++ b/data/themes/default/layout_setting.edc @@ -135,7 +135,7 @@ group { name: "setting_layout"; fixed: 0 1; } } - part { name: "data_path_frame"; + part { name: "dat_path_frame"; type: SPACER; scale: 1; description { @@ -150,8 +150,8 @@ group { name: "setting_layout"; type: SPACER; scale: 1; description { - rel1 {to: "data_path_frame"; relative: 0 1; offset: 0 5;} - rel2 {to: "data_path_frame"; relative: 1 1;} + rel1 {to: "dat_path_frame"; relative: 0 1; offset: 0 5;} + rel2 {to: "dat_path_frame"; relative: 1 1;} align: 0.5 0; min: 0 140; fixed: 0 1; @@ -301,7 +301,7 @@ group { name: "setting_layout"; rel2.to: "fnt_path_frame"; } } - part { name: "data_path_icon"; + part { name: "dat_path_icon"; type: IMAGE; scale: 1; clip_to: "clipper"; @@ -310,19 +310,19 @@ group { name: "setting_layout"; min: 20 20; max: 20 20; fixed: 1 1; - rel1.to: "data_path_frame"; - rel2.to: "data_path_frame"; + rel1.to: "dat_path_frame"; + rel2.to: "dat_path_frame"; image.normal: "folder.png"; } } - part { name: "data_path_guide"; + part { name: "dat_path_guide"; type: TEXT; effect: SHADOW BOTTOM; scale: 1; clip_to: "clipper"; description { - rel1 {to: "data_path_icon"; relative: 1 0; offset: 5 1;} - rel2 {to: "data_path_icon"; relative: 1 1;} + rel1 {to: "dat_path_icon"; relative: 1 0; offset: 5 1;} + rel2 {to: "dat_path_icon"; relative: 1 1;} color: COL_NM; align: 0 0.5; fixed: 1 1; @@ -335,18 +335,18 @@ group { name: "setting_layout"; } } } - part { name: "elm.swallow.data_path_entry"; + part { name: "elm.swallow.dat_path_entry"; type: SWALLOW; scale: 1; clip_to: "clipper"; description { align: 0 0; fixed: 1 1; - rel1.to_x: "data_path_guide"; - rel1.to_y: "data_path_guide"; + rel1.to_x: "dat_path_guide"; + rel1.to_y: "dat_path_guide"; rel1.offset: 14 0; rel1.relative: 1 0; - rel2.to: "data_path_frame"; + rel2.to: "dat_path_frame"; } } part { name: "preference_icon"; diff --git a/m4/efl_beta.m4 b/m4/efl_beta.m4 new file mode 100644 index 0000000..c804729 --- /dev/null +++ b/m4/efl_beta.m4 @@ -0,0 +1,5 @@ +dnl use: EFL_ENABLE_BETA_API_SUPPORT +AC_DEFUN([EFL_ENABLE_BETA_API_SUPPORT], +[ + AC_DEFINE([EFL_BETA_API_SUPPORT], [1], [Enable access to unstable EFL API that are still in beta]) +]) diff --git a/m4/efl_eo.m4 b/m4/efl_eo.m4 new file mode 100644 index 0000000..864baf5 --- /dev/null +++ b/m4/efl_eo.m4 @@ -0,0 +1,6 @@ +dnl use: EFL_ENABLE_EO_API_SUPPORT +AC_DEFUN([EFL_ENABLE_EO_API_SUPPORT], +[ + AC_DEFINE([EFL_EO_API_SUPPORT], [1], [Enable access to unstable EFL Eo API]) +]) + diff --git a/pc/enventor.pc.in b/pc/enventor.pc.in new file mode 100644 index 0000000..8f43637 --- /dev/null +++ b/pc/enventor.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: enventor +Description: dynamic edc editor to write your layout fast and easy. +Requires.private:@requirement_enventor@ +Version: @VERSION@ +Libs: -L${libdir} -lenventor +Cflags: -I${includedir}/enventor-@ENVENTOR_VERSION_MAJOR@ diff --git a/src/Makefile.am b/src/Makefile.am index 644f7ba..c06362f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,3 +1,3 @@ MAINTAINERCLEANFILES = Makefile.in -SUBDIRS = bin include +SUBDIRS = lib bin include diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index 3fcadbb..e353761 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -12,33 +12,26 @@ AM_CPPFLAGS = -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \ enventor_SOURCES = \ base_gui.c \ config_data.c \ - dummy_obj.c \ - edc_editor.c \ - edc_parser.c \ - edj_viewer.c \ main.c \ menu.c \ panes.c \ statusbar.c \ - syntax_color.c \ - ctxpopup.c \ - syntax_helper.c \ - indent.c \ - edj_mgr.c \ - build.c \ tools.c \ search.c \ goto.c \ newfile.c \ - auto_comp.c \ setting.c \ globals.c \ - redoundo.c \ - template.c \ live_edit.c \ console.c -enventor_LDADD = @ENVENTOR_LIBS@ +enventor_LDADD = \ + $(top_builddir)/src/lib/libenventor.la \ + @ENVENTOR_LIBS@ enventor_LDFLAGS = $(LTLIBINTL) +enventor_CFLAGS = \ + -I$(top_builddir)/src/lib \ + @ENVENTOR_CFLAGS@ + EXTRA_DIST = diff --git a/src/bin/base_gui.c b/src/bin/base_gui.c index cad8e54..7e1cd9a 100644 --- a/src/bin/base_gui.c +++ b/src/bin/base_gui.c @@ -10,6 +10,10 @@ typedef struct base_s static base_data *g_bd = NULL; +/*****************************************************************************/ +/* Internal method implementation */ +/*****************************************************************************/ + static void win_delete_request_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -24,6 +28,19 @@ win_focused_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, goto_close(); } +/*****************************************************************************/ +/* Externally accessible calls */ +/*****************************************************************************/ + +void +base_error_msg_set(const char *msg) +{ + base_data *bd = g_bd; + if (panes_editors_full_view_get()) base_editors_full_view(); + elm_object_signal_emit(bd->layout, "elm,state,alert,show", ""); + console_text_set(bd->console, msg); +} + void base_title_set(const char *path) { @@ -98,7 +115,7 @@ base_live_view_full_view(void) } void -base_text_editor_full_view(void) +base_enventor_full_view(void) { panes_text_editor_full_view(); } @@ -115,12 +132,6 @@ base_console_full_view(void) panes_console_full_view(); } -void -base_text_editor_set(Evas_Object *text_editor) -{ - panes_text_editor_set(text_editor); -} - void base_live_view_set(Evas_Object *live_view) { @@ -142,15 +153,6 @@ base_gui_term(void) free(bd); } -static void -err_noti_cb(void *data, const char *msg) -{ - base_data *bd = data; - if (panes_editors_full_view_get()) base_editors_full_view(); - elm_object_signal_emit(bd->layout, "elm,state,alert,show", ""); - console_text_set(bd->console, msg); -} - void base_console_reset(void) { @@ -200,8 +202,6 @@ base_gui_init(void) Evas_Object *console = console_create(panes); panes_console_set(console); - build_err_noti_cb_set(err_noti_cb, bd); - bd->win = win; bd->layout = layout; bd->console = console; @@ -214,3 +214,9 @@ base_gui_show(void) { evas_object_show(g_bd->win); } + +void +base_enventor_set(Evas_Object *enventor) +{ + panes_text_editor_set(enventor); +} diff --git a/src/bin/build.c b/src/bin/build.c deleted file mode 100644 index 67914a7..0000000 --- a/src/bin/build.c +++ /dev/null @@ -1,130 +0,0 @@ -#include -#include "common.h" - -typedef struct builder_s -{ - Eina_Strbuf *strbuf; - char *build_cmd; - void (*noti_cb)(void *data, const char *msg); - void *noti_data; - Ecore_Event_Handler *event_data_handler; - Ecore_Event_Handler *event_err_handler; - -} build_data; - -static build_data *g_bd = NULL; - -static Eina_Bool -exe_event_error_cb(void *data, int type EINA_UNUSED, void *event_info) -{ - build_data *bd = data; - Ecore_Exe_Event_Data *ev = event_info; - Ecore_Exe_Event_Data_Line *el; - - eina_strbuf_reset(bd->strbuf); - - for (el = ev->lines; el && el->line; el++) - { - eina_strbuf_append(bd->strbuf, el->line); - eina_strbuf_append_char(bd->strbuf, '\n'); - } - - bd->noti_cb(bd->noti_data, eina_strbuf_string_get(bd->strbuf)); - - return ECORE_CALLBACK_RENEW; -} - -Eina_Bool -build_cmd_set(void) -{ - build_data *bd = g_bd; - - free(bd->build_cmd); - bd->build_cmd = NULL; - - Eina_Strbuf *strbuf = eina_strbuf_new(); - if (!strbuf) - { - EINA_LOG_ERR("Failed to new strbuf"); - return EINA_FALSE; - } - - eina_strbuf_append_printf(strbuf, - "edje_cc -fastcomp %s %s -id %s/images -sd %s/sounds -fd %s/fonts -dd %s/data %s %s %s %s", - config_edc_path_get(), - config_edj_path_get(), - elm_app_data_dir_get(), - elm_app_data_dir_get(), - elm_app_data_dir_get(), - elm_app_data_dir_get(), - config_edc_img_path_get(), - config_edc_snd_path_get(), - config_edc_fnt_path_get(), - config_edc_data_path_get()); - - bd->build_cmd = eina_strbuf_string_steal(strbuf); - eina_strbuf_free(strbuf); - - return EINA_TRUE; -} - -void -build_edc(void) -{ - build_data *bd = g_bd; - if (!bd->build_cmd) - { - EINA_LOG_ERR("Build Command is not set!"); - return; - } - Ecore_Exe_Flags flags = - (ECORE_EXE_PIPE_READ_LINE_BUFFERED | ECORE_EXE_PIPE_READ | - ECORE_EXE_PIPE_ERROR_LINE_BUFFERED | ECORE_EXE_PIPE_ERROR); - ecore_exe_pipe_run(bd->build_cmd, flags, NULL); -} - -Eina_Bool -build_init(void) -{ - build_data *bd = g_bd; - if (bd) return EINA_TRUE; - - bd = calloc(1, sizeof(build_data)); - if (!bd) - { - EINA_LOG_ERR("Failed to allocate Memory!"); - return EINA_FALSE; - } - g_bd = bd; - - Eina_Bool ret = build_cmd_set(); - - bd->event_data_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DATA, - exe_event_error_cb, bd); - bd->event_err_handler = ecore_event_handler_add(ECORE_EXE_EVENT_ERROR, - exe_event_error_cb, bd); - - bd->strbuf = eina_strbuf_new(); - - return ret; -} - -void -build_term(void) -{ - build_data *bd = g_bd; - ecore_event_handler_del(bd->event_data_handler); - ecore_event_handler_del(bd->event_err_handler); - eina_strbuf_free(bd->strbuf); - free(bd->build_cmd); - free(bd); - g_bd = NULL; -} - -void -build_err_noti_cb_set(void (*cb)(void *data, const char *msg), void *data) -{ - build_data *bd = g_bd; - bd->noti_cb = cb; - bd->noti_data = data; -} diff --git a/src/bin/config_data.c b/src/bin/config_data.c index 459e908..e7c0948 100644 --- a/src/bin/config_data.c +++ b/src/bin/config_data.c @@ -9,13 +9,13 @@ typedef struct config_s Eina_List *edc_img_path_list; Eina_List *edc_snd_path_list; Eina_List *edc_fnt_path_list; - Eina_List *edc_data_path_list; + Eina_List *edc_dat_path_list; Eina_Strbuf *edc_img_path_buf; //pre-stored image paths for edc compile. Eina_Strbuf *edc_snd_path_buf; //pre-stored sound paths for edc compile. Eina_Strbuf *edc_fnt_path_buf; //pre-stored font paths for edc compile. - Eina_Strbuf *edc_data_path_buf; //pre-stored data paths for edc compile. + Eina_Strbuf *edc_dat_path_buf; //pre-stored data paths for edc compile. - float font_size; + float font_scale; double view_scale; double console_size; @@ -127,7 +127,7 @@ config_load(void) EINA_LOG_ERR("Failed to allocate Memory!"); return NULL; } - cd->font_size = 1.0f; + cd->font_scale = 1.0f; cd->view_scale = 1; cd->console_size = 0.175; cd->stats_bar = EINA_TRUE; @@ -166,13 +166,13 @@ config_load(void) else cd->edc_fnt_path_buf = config_paths_buf_set(cd->edc_fnt_path_list, " -fd "); - if (!cd->edc_data_path_list) + if (!cd->edc_dat_path_list) { sprintf(buf, "%s/data", elm_app_data_dir_get()); - config_edc_data_path_set(buf); + config_edc_dat_path_set(buf); } - else cd->edc_data_path_buf = - config_paths_buf_set(cd->edc_data_path_list, " -dd "); + else cd->edc_dat_path_buf = + config_paths_buf_set(cd->edc_dat_path_list, " -dd "); return cd; } @@ -192,9 +192,8 @@ eddc_init(void) EET_DATA_DESCRIPTOR_ADD_LIST_STRING(edd_base, config_data, "edc_fnt_path_list", edc_fnt_path_list); EET_DATA_DESCRIPTOR_ADD_LIST_STRING(edd_base, config_data, - "edc_data_path_list", - edc_data_path_list); - EET_DATA_DESCRIPTOR_ADD_BASIC(edd_base, config_data, "font_size", font_size, + "edc_dat_path_list", edc_dat_path_list); + EET_DATA_DESCRIPTOR_ADD_BASIC(edd_base, config_data, "font_scale", font_scale, EET_T_FLOAT); EET_DATA_DESCRIPTOR_ADD_BASIC(edd_base, config_data, "view_scale", view_scale, EET_T_DOUBLE); @@ -227,7 +226,7 @@ config_edc_path_set(const char *edc_path) void config_init(const char *edc_path, const char *edc_img_path, const char *edc_snd_path, const char *edc_fnt_path, - const char *edc_data_path) + const char *edc_dat_path) { eddc_init(); @@ -238,7 +237,7 @@ config_init(const char *edc_path, const char *edc_img_path, if (edc_img_path[0]) config_edc_img_path_set(edc_img_path); if (edc_snd_path[0]) config_edc_snd_path_set(edc_snd_path); if (edc_fnt_path[0]) config_edc_fnt_path_set(edc_fnt_path); - if (edc_data_path[0]) config_edc_data_path_set(edc_data_path); + if (edc_dat_path[0]) config_edc_dat_path_set(edc_dat_path); } void @@ -255,12 +254,12 @@ config_term(void) EINA_LIST_FREE(cd->edc_img_path_list, str) eina_stringshare_del(str); EINA_LIST_FREE(cd->edc_snd_path_list, str) eina_stringshare_del(str); EINA_LIST_FREE(cd->edc_fnt_path_list, str) eina_stringshare_del(str); - EINA_LIST_FREE(cd->edc_data_path_list, str) eina_stringshare_del(str); + EINA_LIST_FREE(cd->edc_dat_path_list, str) eina_stringshare_del(str); if (cd->edc_img_path_buf) eina_strbuf_free(cd->edc_img_path_buf); if (cd->edc_snd_path_buf) eina_strbuf_free(cd->edc_snd_path_buf); if (cd->edc_fnt_path_buf) eina_strbuf_free(cd->edc_fnt_path_buf); - if (cd->edc_data_path_buf) eina_strbuf_free(cd->edc_data_path_buf); + if (cd->edc_dat_path_buf) eina_strbuf_free(cd->edc_dat_path_buf); eet_data_descriptor_free(edd_base); free(cd); @@ -309,44 +308,44 @@ config_edc_snd_path_set(const char *edc_snd_path) } void -config_edc_data_path_set(const char *edc_data_path) +config_edc_dat_path_set(const char *edc_dat_path) { config_data *cd = g_cd; //Free the existing paths const char *s; - EINA_LIST_FREE(cd->edc_data_path_list, s) eina_stringshare_del(s); + EINA_LIST_FREE(cd->edc_dat_path_list, s) eina_stringshare_del(s); - if (cd->edc_data_path_buf) eina_strbuf_free(cd->edc_data_path_buf); - cd->edc_data_path_buf = eina_strbuf_new(); + if (cd->edc_dat_path_buf) eina_strbuf_free(cd->edc_dat_path_buf); + cd->edc_dat_path_buf = eina_strbuf_new(); //parse paths by ';' const char *lex; Eina_Stringshare *append; - while(edc_data_path && (strlen(edc_data_path) > 0)) + while(edc_dat_path && (strlen(edc_dat_path) > 0)) { - lex = strstr(edc_data_path, ";"); + lex = strstr(edc_dat_path, ";"); if (lex) { - append = eina_stringshare_add_length(edc_data_path, - (lex - edc_data_path)); - cd->edc_data_path_list = eina_list_append(cd->edc_data_path_list, + append = eina_stringshare_add_length(edc_dat_path, + (lex - edc_dat_path)); + cd->edc_dat_path_list = eina_list_append(cd->edc_dat_path_list, append); - eina_strbuf_append(cd->edc_data_path_buf, " -fd "); - eina_strbuf_append(cd->edc_data_path_buf, append); + eina_strbuf_append(cd->edc_dat_path_buf, " -dd "); + eina_strbuf_append(cd->edc_dat_path_buf, append); lex++; } else { - append = eina_stringshare_add(edc_data_path); - cd->edc_data_path_list = eina_list_append(cd->edc_data_path_list, + append = eina_stringshare_add(edc_dat_path); + cd->edc_dat_path_list = eina_list_append(cd->edc_dat_path_list, append); - eina_strbuf_append(cd->edc_data_path_buf, " -fd "); - eina_strbuf_append(cd->edc_data_path_buf, append); + eina_strbuf_append(cd->edc_dat_path_buf, " -dd "); + eina_strbuf_append(cd->edc_dat_path_buf, append); } - edc_data_path = lex; + edc_dat_path = lex; } } @@ -456,10 +455,10 @@ config_edc_snd_path_list_get(void) } Eina_List * -config_edc_data_path_list_get(void) +config_edc_dat_path_list_get(void) { config_data *cd = g_cd; - return cd->edc_data_path_list; + return cd->edc_dat_path_list; } Eina_List * @@ -486,11 +485,11 @@ config_edc_snd_path_get(void) } const char * -config_edc_data_path_get(void) +config_edc_dat_path_get(void) { config_data *cd = g_cd; - if (!cd->edc_data_path_buf) return NULL; - return eina_strbuf_string_get(cd->edc_data_path_buf); + if (!cd->edc_dat_path_buf) return NULL; + return eina_strbuf_string_get(cd->edc_dat_path_buf); } const char * @@ -594,23 +593,23 @@ config_auto_complete_get(void) } void -config_font_size_set(float font_size) +config_font_scale_set(float font_scale) { config_data *cd = g_cd; - if (font_size > MAX_FONT_SIZE) - font_size = MAX_FONT_SIZE; - else if (font_size < MIN_FONT_SIZE) - font_size = MIN_FONT_SIZE; + if (font_scale > MAX_FONT_SCALE) + font_scale = MAX_FONT_SCALE; + else if (font_scale < MIN_FONT_SCALE) + font_scale = MIN_FONT_SCALE; - cd->font_size = font_size; + cd->font_scale = font_scale; } float -config_font_size_get(void) +config_font_scale_get(void) { config_data *cd = g_cd; - return cd->font_size; + return cd->font_scale; } Eina_Bool diff --git a/src/bin/goto.c b/src/bin/goto.c index 13772ce..0c2f724 100644 --- a/src/bin/goto.c +++ b/src/bin/goto.c @@ -1,4 +1,10 @@ -#include +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define ENVENTOR_BETA_API_SUPPORT 1 + +#include #include "common.h" typedef struct goto_s @@ -7,7 +13,7 @@ typedef struct goto_s Evas_Object *layout; Evas_Object *entry; Evas_Object *btn; - edit_data *ed; + Evas_Object *enventor; } goto_data; static goto_data *g_gd = NULL; @@ -38,7 +44,7 @@ goto_line(goto_data *gd) { const char *txt = elm_entry_entry_get(gd->entry); int line = atoi(txt); - edit_goto(gd->ed, line); + enventor_object_line_goto(gd->enventor, line); goto_close(); } @@ -60,7 +66,7 @@ entry_changed_cb(void *data, Evas_Object *obj, void* event_info EINA_UNUSED) int line = atoi(txt); - if ((line < 1) || (line > edit_max_line_get(gd->ed))) + if ((line < 1) || (line > enventor_object_max_line_get(gd->enventor))) { elm_object_part_text_set(gd->layout, "elm.text.msg", "Invalid line number"); @@ -82,7 +88,7 @@ btn_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, } void -goto_open(edit_data *ed) +goto_open(Evas_Object *enventor) { static Elm_Entry_Filter_Accept_Set digits_filter_data; goto_data *gd = g_gd; @@ -130,7 +136,7 @@ goto_open(edit_data *ed) char buf[256]; snprintf(buf, sizeof(buf), "Enter line number [1..%d]:", - edit_max_line_get(ed)); + enventor_object_max_line_get(enventor)); elm_object_part_text_set(layout, "elm.text.goto", buf); //Entry (line) @@ -157,14 +163,13 @@ goto_open(edit_data *ed) evas_object_smart_callback_add(btn, "clicked", btn_clicked_cb, gd); elm_object_part_content_set(layout, "elm.swallow.btn", btn); - evas_object_show(win); gd->win = win; gd->layout = layout; gd->entry = entry; gd->btn = btn; - gd->ed = ed; + gd->enventor = enventor; } Eina_Bool diff --git a/src/bin/live_edit.c b/src/bin/live_edit.c index 0a98dcb..8ee7b3f 100644 --- a/src/bin/live_edit.c +++ b/src/bin/live_edit.c @@ -1,5 +1,11 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define ENVENTOR_BETA_API_SUPPORT 1 + #include -#include +#include #include "common.h" typedef struct menu_data_s @@ -19,7 +25,7 @@ typedef struct live_editor_s { Evas_Object *menu; Evas_Object *layout; - edit_data *ed; + Evas_Object *enventor; cur_part_data *cur_part_data; Ecore_Event_Handler *key_down_handler; @@ -193,6 +199,7 @@ key_down_cb(void *data, int type EINA_UNUSED, void *ev) if (!strcmp(event->key, "Return")) { +#if 0 template_part_insert(ld->ed, MENU_ITEMS[ld->cur_part_data->type].type, TEMPLATE_INSERT_LIVE_EDIT, @@ -201,6 +208,7 @@ key_down_cb(void *data, int type EINA_UNUSED, void *ev) ld->cur_part_data->rel2_x, ld->cur_part_data->rel2_y, view_group_name_get(VIEW_DATA)); +#endif } else if (strcmp(event->key, "Delete")) return EINA_TRUE; @@ -300,7 +308,7 @@ live_edit_toggle(void) { live_data *ld = g_ld; Eina_Bool on = !config_live_edit_get(); - +#if 0 Evas_Object *event_obj = view_obj_get(VIEW_DATA); if (!event_obj) return; @@ -315,8 +323,10 @@ live_edit_toggle(void) layout_mouse_up_cb); live_edit_reset(ld); } - - edit_disabled_set(ld->ed, on); +#endif +#if 0 + enventor_object_disabled_set(ld->enventor, on); +#endif if (on) stats_info_msg_update("Live View Edit Mode Enabled."); else stats_info_msg_update("Live View Edit Mode Disabled."); @@ -332,7 +342,7 @@ live_edit_cancel(void) } void -live_edit_init(edit_data *ed) +live_edit_init(Evas_Object *enventor) { live_data *ld = calloc(1, sizeof(live_data)); if (!ld) @@ -349,7 +359,7 @@ live_edit_init(edit_data *ed) return; } - ld->ed = ed; + ld->enventor = enventor; ld->menu = NULL; ld->layout = NULL; diff --git a/src/bin/main.c b/src/bin/main.c index 2f71ffd..0fad19d 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -1,13 +1,16 @@ -#include -#include +#ifdef HAVE_CONFIG_H #include "config.h" +#endif + +#define ENVENTOR_BETA_API_SUPPORT 1 + +#include +#include #include "common.h" typedef struct app_s { - edit_data *ed; - - Eio_Monitor *edc_monitor; + Evas_Object *enventor; Eina_Bool ctrl_pressed : 1; Eina_Bool shift_pressed : 1; @@ -15,33 +18,6 @@ typedef struct app_s int main(int argc, char **argv); -static Eina_Bool -edc_changed_cb(void *data, int type EINA_UNUSED, void *event) -{ - Eio_Monitor_Event *ev = event; - app_data *ad = data; - - if (ev->monitor != ad->edc_monitor) return ECORE_CALLBACK_PASS_ON; - - if (!edit_changed_get(ad->ed)) return ECORE_CALLBACK_DONE; - - if (strcmp(ev->filename, config_edc_path_get())) - return ECORE_CALLBACK_DONE; - build_edc(); - edit_changed_set(ad->ed, EINA_FALSE); - - return ECORE_CALLBACK_DONE; -} - -static Eina_Bool -edc_default_setup() -{ - newfile_default_set(); - build_edc(); - - return EINA_TRUE; -} - static Eina_Bool main_key_up_cb(void *data, int type EINA_UNUSED, void *ev) { @@ -49,20 +25,28 @@ main_key_up_cb(void *data, int type EINA_UNUSED, void *ev) app_data *ad = data; if (!strcmp("Control_L", event->key)) - { - edit_editable_set(ad->ed, EINA_TRUE); - ad->ctrl_pressed = EINA_FALSE; - } + ad->ctrl_pressed = EINA_FALSE; else if (!strcmp("Shift_L", event->key)) ad->shift_pressed = EINA_FALSE; return ECORE_CALLBACK_PASS_ON; } +void +auto_comp_toggle(app_data *ad) +{ + Eina_Bool toggle = !config_auto_complete_get(); + enventor_object_auto_complete_set(ad->enventor, toggle); + if (toggle) stats_info_msg_update("Auto Completion Enabled."); + else stats_info_msg_update("Auto Completion Disabled."); + config_auto_complete_set(toggle); +} + static void -auto_indentation_toggle() +auto_indent_toggle(app_data *ad) { Eina_Bool toggle = !config_auto_indent_get(); + enventor_object_auto_indent_set(ad->enventor, toggle); if (toggle) stats_info_msg_update("Auto Indentation Enabled."); else stats_info_msg_update("Auto Indentation Disabled."); config_auto_indent_set(toggle); @@ -106,211 +90,61 @@ template_insert_patch(app_data *ad, const char *key) else part_type = EDJE_PART_TYPE_NONE; - template_part_insert(ad->ed, part_type, TEMPLATE_INSERT_DEFAULT, - REL1_X, REL1_Y, REL2_X, REL2_Y, NULL); - + char syntax[12]; + if (enventor_object_template_part_insert(ad->enventor, part_type, REL1_X, + REL1_Y, REL2_X, REL2_Y, syntax, + sizeof(syntax))) + { + char msg[64]; + snprintf(msg, sizeof(msg), "Template code inserted, (%s)", syntax); + stats_info_msg_update(msg); + enventor_object_save(ad->enventor, config_edc_path_get()); + } + else + { + stats_info_msg_update("Can't insert template code here. Move the " + "cursor inside the \"Collections,Images,Parts," + "Part,Programs\" scope."); + } return ECORE_CALLBACK_DONE; } -static Eina_Bool -ctrl_func(app_data *ad, const char *key) +static void +config_update_cb(void *data) { - //Save - if (!strcmp(key, "s") || !strcmp(key, "S")) - { - edit_save(ad->ed); - return ECORE_CALLBACK_DONE; - } - //Delete Line - if (!strcmp(key, "d") || !strcmp(key, "D")) - { - edit_line_delete(ad->ed); - return ECORE_CALLBACK_DONE; - } - //Find/Replace - if (!strcmp(key, "f") || !strcmp(key, "F")) - { - search_open(ad->ed); - return ECORE_CALLBACK_DONE; - } - //Goto Line - if (!strcmp(key, "l") || !strcmp(key, "L")) - { - goto_open(ad->ed); - return ECORE_CALLBACK_DONE; - } - //Part Highlight - if (!strcmp(key, "h") || !strcmp(key, "H")) - { - config_part_highlight_set(!config_part_highlight_get()); - edit_part_highlight_toggle(ad->ed, EINA_TRUE); - return ECORE_CALLBACK_DONE; - } - //Swallow Dummy Object - if (!strcmp(key, "w") || !strcmp(key, "W")) - { - config_dummy_swallow_set(!config_dummy_swallow_get()); - view_dummy_toggle(VIEW_DATA, EINA_TRUE); - return ECORE_CALLBACK_DONE; - } - //Template Code - if (!strcmp(key, "t") || !strcmp(key, "T")) - { - if (config_live_edit_get()) - { - stats_info_msg_update("Insertion of template code is disabled " - "while in Live Edit mode"); - return ECORE_CALLBACK_DONE; - } - template_insert(ad->ed, TEMPLATE_INSERT_DEFAULT); - return ECORE_CALLBACK_DONE; - } - //Full Edit View - if (!strcmp(key, "Left")) - { - base_live_view_full_view(); - return ECORE_CALLBACK_DONE; - } - //Full Live View - if (!strcmp(key, "Right")) - { - base_text_editor_full_view(); - return ECORE_CALLBACK_DONE; - } - //Full Console View - if (!strcmp(key, "Up")) - { - base_console_full_view(); - return ECORE_CALLBACK_DONE; - } - //Full Editors View - if (!strcmp(key, "Down")) - { - base_editors_full_view(); - return ECORE_CALLBACK_DONE; - } - //Auto Indentation - if (!strcmp(key, "i") || !strcmp(key, "I")) - { - auto_indentation_toggle(); - return ECORE_CALLBACK_DONE; - } - //Auto Completion - if (!strcmp(key, "o") || !strcmp(key, "O")) - { - autocomp_toggle(); - return ECORE_CALLBACK_DONE; - } - //Live Edit - if (!strcmp(key, "e") || !strcmp(key, "E")) - { - live_edit_toggle(); - return ECORE_CALLBACK_DONE; - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -main_key_down_cb(void *data, int type EINA_UNUSED, void *ev) -{ - Ecore_Event_Key *event = ev; app_data *ad = data; + Evas_Object *enventor = ad->enventor; - if (autocomp_key_event_hook(event->key)) return ECORE_CALLBACK_DONE; + Eina_List *list = eina_list_append(NULL, config_edj_path_get()); + enventor_object_path_set(enventor, ENVENTOR_OUT_EDJ, list); + eina_list_free(list); - //Shift Key - if (!strcmp("Shift_L", event->key)) - { - ad->shift_pressed = EINA_TRUE; - return ECORE_CALLBACK_DONE; - } + enventor_object_path_set(enventor, ENVENTOR_RES_IMAGE, + config_edc_img_path_list_get()); + enventor_object_path_set(enventor, ENVENTOR_RES_SOUND, + config_edc_snd_path_list_get()); + enventor_object_path_set(enventor, ENVENTOR_RES_FONT, + config_edc_fnt_path_list_get()); + enventor_object_path_set(enventor, ENVENTOR_RES_DATA, + config_edc_dat_path_list_get()); + enventor_object_font_scale_set(enventor, config_font_scale_get()); + enventor_object_linenumber_set(enventor, config_linenumber_get()); + enventor_object_dummy_swallow_set(enventor, config_dummy_swallow_get()); + enventor_object_part_highlight_set(enventor, config_part_highlight_get()); + enventor_object_live_view_scale_set(enventor, config_view_scale_get()); - if (ad->ctrl_pressed) - { - if (ad->shift_pressed) return template_insert_patch(ad, event->key); - else return ctrl_func(ad, event->key); - } + base_tools_toggle(EINA_FALSE); + base_statusbar_toggle(EINA_FALSE); - //Main Menu - if (!strcmp(event->key, "Escape")) + //previous build was failed, Need to rebuild then reload the edj. +#if 0 + if (edj_mgr_reload_need_get()) { - if (search_is_opened() || goto_is_opened()) - { - goto_close(); - search_close(); - edit_focus_set(ad->ed); - return ECORE_CALLBACK_DONE; - } - menu_toggle(); - return ECORE_CALLBACK_DONE; + build_edc(); + edj_mgr_clear(); + //edc_view_set(stats_group_name_get()); } - - if (menu_activated_get() > 0) return ECORE_CALLBACK_PASS_ON; - - //Control Key - if (!strcmp("Control_L", event->key)) - { - ad->ctrl_pressed = EINA_TRUE; - return ECORE_CALLBACK_PASS_ON; - } - //README - if (!strcmp(event->key, "F1")) - { - menu_about(); - return ECORE_CALLBACK_DONE; - } - //New - if (!strcmp(event->key, "F2")) - { - menu_edc_new(); - return ECORE_CALLBACK_DONE; - } - //Save - if (!strcmp(event->key, "F3")) - { - menu_edc_save(); - return ECORE_CALLBACK_DONE; - } - //Load - if (!strcmp(event->key, "F4")) - { - menu_edc_load(); - return ECORE_CALLBACK_DONE; - } - //Line Number - if (!strcmp(event->key, "F5")) - { - config_linenumber_set(!config_linenumber_get()); - edit_line_number_toggle(ad->ed); - return ECORE_CALLBACK_DONE; - } - //Tools - if (!strcmp(event->key, "F9")) - { - base_tools_toggle(EINA_TRUE); - return ECORE_CALLBACK_DONE; - } - //Console - if (!strcmp(event->key, "F10")) - { - base_console_toggle(); - return ECORE_CALLBACK_DONE; - } - //Statusbar - if (!strcmp(event->key, "F11")) - { - base_statusbar_toggle(EINA_TRUE); - return ECORE_CALLBACK_DONE; - } - //Setting - if (!strcmp(event->key, "F12")) - { - menu_setting(); - return ECORE_CALLBACK_DONE; - } - - return ECORE_CALLBACK_PASS_ON; +#endif } static Eina_Bool @@ -323,8 +157,7 @@ main_mouse_wheel_cb(void *data, int type EINA_UNUSED, void *ev) if (!ad->ctrl_pressed) return ECORE_CALLBACK_PASS_ON; //View Scale - view_data *vd = edj_mgr_view_get(NULL); - Evas_Object *view = view_obj_get(vd); + Evas_Object *view = enventor_object_live_view_get(ad->enventor); evas_object_geometry_get(view, &x, &y, &w, &h); if ((event->x >= x) && (event->x <= (x + w)) && @@ -337,7 +170,7 @@ main_mouse_wheel_cb(void *data, int type EINA_UNUSED, void *ev) config_view_scale_set(scale); scale = config_view_scale_get(); - view_scale_set(vd, scale); + enventor_object_live_view_scale_set(ad->enventor, scale); char buf[256]; snprintf(buf, sizeof(buf), "View Scale: %2.2fx", scale); @@ -347,23 +180,29 @@ main_mouse_wheel_cb(void *data, int type EINA_UNUSED, void *ev) } //Font Size - Evas_Object *editor = edit_obj_get(ad->ed); - evas_object_geometry_get(editor, &x, &y, &w, &h); + evas_object_geometry_get(ad->enventor, &x, &y, &w, &h); if ((event->x >= x) && (event->x <= (x + w)) && (event->y >= y) && (event->y <= (y + h))) { if (event->z < 0) { - config_font_size_set(config_font_size_get() + 0.1f); - edit_font_size_update(ad->ed, EINA_TRUE, EINA_TRUE); + config_font_scale_set(config_font_scale_get() + 0.1f); + enventor_object_font_scale_set(ad->enventor, + config_font_scale_get()); } else { - config_font_size_set(config_font_size_get() - 0.1f); - edit_font_size_update(ad->ed, EINA_TRUE, EINA_TRUE); + config_font_scale_set(config_font_scale_get() - 0.1f); + enventor_object_font_scale_set(ad->enventor, + config_font_scale_get()); } + char buf[128]; + snprintf(buf, sizeof(buf), "Font Size: %1.1fx", + config_font_scale_get()); + stats_info_msg_update(buf); + return ECORE_CALLBACK_PASS_ON; } @@ -371,81 +210,15 @@ main_mouse_wheel_cb(void *data, int type EINA_UNUSED, void *ev) } static void -edc_view_set(Eina_Stringshare *group) +tools_set(Evas_Object *enventor) { - view_data *vd = edj_mgr_view_get(group); - if (vd) edj_mgr_view_switch_to(vd); - else vd = edj_mgr_view_new(group); - - if (!vd) return; - - if (group) stats_edc_group_update(group); -} - -static void -view_sync_cb(void *data EINA_UNUSED, Eina_Stringshare *part_name, - Eina_Stringshare *group_name) -{ - if (stats_group_name_get() != group_name) - edc_view_set(group_name); - view_part_highlight_set(VIEW_DATA, part_name); -} - -static void -edc_edit_set(app_data *ad) -{ - edit_data *ed = edit_init(base_layout_get()); - edit_edc_read(ed, config_edc_path_get()); - base_text_editor_set(edit_obj_get(ed)); - edit_view_sync_cb_set(ed, view_sync_cb, ad); - ad->ed = ed; -} - -static void -statusbar_set() -{ - Evas_Object *obj = stats_init(base_layout_get()); - elm_object_part_content_set(base_layout_get(), "elm.swallow.statusbar", - obj); - base_statusbar_toggle(EINA_FALSE); -} - -static void -config_update_cb(void *data) -{ - app_data *ad = data; - build_cmd_set(); - edit_line_number_toggle(ad->ed); - edit_font_size_update(ad->ed, EINA_FALSE, EINA_TRUE); - - base_tools_toggle(EINA_FALSE); - base_statusbar_toggle(EINA_FALSE); - edit_part_highlight_toggle(ad->ed, EINA_FALSE); - view_dummy_toggle(VIEW_DATA, EINA_FALSE); - - //previous build was failed, Need to rebuild then reload the edj. - if (edj_mgr_reload_need_get()) - { - build_edc(); - edit_changed_set(ad->ed, EINA_FALSE); - edj_mgr_clear(); - edc_view_set(stats_group_name_get()); - eio_monitor_del(ad->edc_monitor); - ad->edc_monitor = eio_monitor_add(config_edc_path_get()); - if (!ad->edc_monitor) EINA_LOG_ERR("Failed to add Eio_Monitor"); - } - //If the edc is reloaded, then rebuild it! - else if (edit_changed_get(ad->ed)) - { - edit_changed_set(ad->ed, EINA_FALSE); - } - - view_scale_set(edj_mgr_view_get(NULL), config_view_scale_get()); + Evas_Object *tools = tools_create(base_layout_get(), enventor); + base_tools_set(tools); } static void args_dispatch(int argc, char **argv, char *edc_path, char *img_path, - char *snd_path, char *fnt_path, char *data_path) + char *snd_path, char *fnt_path, char *dat_path) { Eina_Bool default_edc = EINA_TRUE; @@ -455,7 +228,8 @@ args_dispatch(int argc, char **argv, char *edc_path, char *img_path, //Help if ((argc >=2 ) && !strcmp(argv[1], "--help")) { - fprintf(stdout, "Usage: enventor [input file] [-id image path] [-sd sound path] [-fd font path] [-dd data path]\n"); + fprintf(stdout, "Usage: enventor [input file] [-id image path]" + "[-sd sound path] [-fd font path] [-dd data path]\n"); exit(0); } @@ -481,7 +255,7 @@ args_dispatch(int argc, char **argv, char *edc_path, char *img_path, else if (!strcmp("-fd", argv[cur_arg])) sprintf(fnt_path, "%s", argv[cur_arg + 1]); else if (!strcmp("-dd", argv[cur_arg])) - sprintf(data_path, "%s", argv[cur_arg + 1]); + sprintf(dat_path, "%s", argv[cur_arg + 1]); } cur_arg += 2; } @@ -497,10 +271,10 @@ config_data_set(app_data *ad, int argc, char **argv) char img_path[PATH_MAX] = { 0, }; char snd_path[PATH_MAX] = { 0, }; char fnt_path[PATH_MAX] = { 0, }; - char data_path[PATH_MAX] = { 0, }; + char dat_path[PATH_MAX] = { 0, }; - args_dispatch(argc, argv, edc_path, img_path, snd_path, fnt_path, data_path); - config_init(edc_path, img_path, snd_path, fnt_path, data_path); + args_dispatch(argc, argv, edc_path, img_path, snd_path, fnt_path, dat_path); + config_init(edc_path, img_path, snd_path, fnt_path, dat_path); config_update_cb_set(config_update_cb, ad); } @@ -527,8 +301,7 @@ elm_setup() elm_app_compile_bin_dir_set(PACKAGE_BIN_DIR); elm_app_compile_data_dir_set(PACKAGE_DATA_DIR); elm_app_compile_lib_dir_set(PACKAGE_LIB_DIR); - elm_app_info_set(main, "enventor", - "images/logo.png"); + elm_app_info_set(main, "enventor", "images/logo.png"); snprintf(EDJE_PATH, sizeof(EDJE_PATH), "%s/themes/enventor.edj", elm_app_data_dir_get()); @@ -536,23 +309,415 @@ elm_setup() } static void -edj_mgr_set() +enventor_cursor_line_changed_cb(void *data EINA_UNUSED, Evas_Object *obj, + void *event_info) { - edj_mgr_init(base_layout_get()); - base_live_view_set(edj_mgr_obj_get()); + int linenumber = (int) event_info; + stats_line_num_update(linenumber, enventor_object_max_line_get(obj)); } static void -tools_set(edit_data *ed) +enventor_cursor_group_changed_cb(void *data EINA_UNUSED, + Evas_Object *obj EINA_UNUSED, + void *event_info) { - Evas_Object *tools = tools_create(base_layout_get(), ed); - base_tools_set(tools); + const char *group_name = event_info; + if (!group_name) return; + stats_edc_group_update(group_name); +} + +static void +enventor_compile_error_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info) +{ + const char *msg = event_info; + base_error_msg_set(msg); +} + +static void +enventor_live_view_resized_cb(void *data EINA_UNUSED, + Evas_Object *obj EINA_UNUSED, + void *event_info) +{ + if (!config_stats_bar_get()) return; + Enventor_Live_View_Size *size = event_info; + config_view_size_set(size->w, size->h); + stats_view_size_update(size->w, size->h); +} + +static void +enventor_live_view_cursor_moved_cb(void *data EINA_UNUSED, + Evas_Object *obj EINA_UNUSED, + void *event_info) +{ + if (!config_stats_bar_get()) return; + Enventor_Live_View_Cursor *cursor = event_info; + stats_cursor_pos_update(cursor->x, cursor->y, cursor->relx, cursor->rely); +} + +static void +enventor_live_view_resize_cb(void *data EINA_UNUSED, + Evas_Object *obj EINA_UNUSED, + void *event_info) +{ + if (!config_stats_bar_get()) return; + Enventor_Live_View_Cursor *cursor = event_info; + stats_cursor_pos_update(cursor->x, cursor->y, cursor->relx, cursor->rely); +} + +static void +enventor_program_run_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info) +{ + if (!config_stats_bar_get()) return; + const char *program = event_info; + char buf[256]; + snprintf(buf, sizeof(buf), "Program Run: \"%s\"", program); + stats_info_msg_update(buf); +} + +static void +enventor_ctxpopup_selected_cb(void *data EINA_UNUSED, Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + EINA_LOG_ERR("!!"); + enventor_object_save(obj, config_edc_path_get()); +} + +static void +enventor_setup(app_data *ad) +{ + Evas_Object *enventor = enventor_object_add(base_layout_get()); + evas_object_smart_callback_add(enventor, "cursor,line,changed", + enventor_cursor_line_changed_cb, ad); + evas_object_smart_callback_add(enventor, "cursor,group,changed", + enventor_cursor_group_changed_cb, ad); + evas_object_smart_callback_add(enventor, "compile,error", + enventor_compile_error_cb, ad); + evas_object_smart_callback_add(enventor, "live_view,cursor,moved", + enventor_live_view_cursor_moved_cb, ad); + evas_object_smart_callback_add(enventor, "live_view,resized", + enventor_live_view_resized_cb, ad); + evas_object_smart_callback_add(enventor, "program,run", + enventor_program_run_cb, ad); + evas_object_smart_callback_add(enventor, "ctxpopup,selected", + enventor_ctxpopup_selected_cb, ad); + enventor_object_font_scale_set(enventor, config_font_scale_get()); + enventor_object_live_view_scale_set(enventor, config_view_scale_get()); + enventor_object_linenumber_set(ad->enventor, config_linenumber_get()); + enventor_object_part_highlight_set(ad->enventor, + config_part_highlight_get()); + enventor_object_auto_indent_set(ad->enventor, config_auto_indent_get()); + enventor_object_auto_complete_set(ad->enventor, config_auto_complete_get()); + enventor_object_dummy_swallow_set(ad->enventor, config_dummy_swallow_get()); + + Eina_List *list = eina_list_append(NULL, config_edj_path_get()); + enventor_object_path_set(enventor, ENVENTOR_OUT_EDJ, list); + eina_list_free(list); + + enventor_object_path_set(enventor, ENVENTOR_RES_IMAGE, + config_edc_img_path_list_get()); + enventor_object_path_set(enventor, ENVENTOR_RES_SOUND, + config_edc_snd_path_list_get()); + enventor_object_path_set(enventor, ENVENTOR_RES_FONT, + config_edc_fnt_path_list_get()); + enventor_object_path_set(enventor, ENVENTOR_RES_DATA, + config_edc_dat_path_list_get()); + enventor_object_file_set(enventor, config_edc_path_get()); + + evas_object_size_hint_expand_set(enventor, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(enventor, EVAS_HINT_FILL, EVAS_HINT_FILL); + + base_enventor_set(enventor); + base_title_set(config_edc_path_get()); + + base_live_view_set(enventor_object_live_view_get(enventor)); + + ad->enventor = enventor; +} + +static void +edc_save(app_data *ad) +{ + char buf[PATH_MAX]; + + if (enventor_object_save(ad->enventor, config_edc_path_get())) + { + if (config_stats_bar_get()) + { + snprintf(buf, sizeof(buf), "File saved. \"%s\"", + config_edc_path_get()); + } + } + else + { + if (config_stats_bar_get()) + { + snprintf(buf, sizeof(buf), "Already saved. \"%s\"", + config_edc_path_get()); + } + + } + stats_info_msg_update(buf); +} + +static void +part_highlight_toggle(app_data *ad) +{ + config_part_highlight_set(!config_part_highlight_get()); + enventor_object_part_highlight_set(ad->enventor, + config_part_highlight_get()); + if (config_part_highlight_get()) + stats_info_msg_update("Part Highlighting Enabled."); + else + stats_info_msg_update("Part Highlighting Disabled."); +} + +static void +dummy_swallow_toggle(app_data *ad) +{ + config_dummy_swallow_set(!config_dummy_swallow_get()); + enventor_object_dummy_swallow_set(ad->enventor, config_dummy_swallow_get()); + if (config_dummy_swallow_get()) + stats_info_msg_update("Dummy Swallow Enabled."); + else + stats_info_msg_update("Dummy Swallow Disabled."); +} + +static void +default_template_insert(app_data *ad) +{ + if (config_live_edit_get()) + { + stats_info_msg_update("Insertion of template code is disabled " + "while in Live Edit mode"); + return; + } + + char syntax[12]; + if (enventor_object_template_insert(ad->enventor, syntax, sizeof(syntax))) + { + char msg[64]; + snprintf(msg, sizeof(msg), "Template code inserted, (%s)", syntax); + stats_info_msg_update(msg); + enventor_object_save(ad->enventor, config_edc_path_get()); + } + else + { + stats_info_msg_update("Can't insert template code here. Move the " + "cursor inside the \"Collections,Images,Parts," + "Part,Programs\" scope."); + } +} + +static Eina_Bool +ctrl_func(app_data *ad, const char *key) +{ + //Save + if (!strcmp(key, "s") || !strcmp(key, "S")) + { + edc_save(ad); + return ECORE_CALLBACK_DONE; + } + //Delete Line + if (!strcmp(key, "d") || !strcmp(key, "D")) + { + enventor_object_line_delete(ad->enventor); + return ECORE_CALLBACK_DONE; + } + //Find/Replace + if (!strcmp(key, "f") || !strcmp(key, "F")) + { + search_open(ad->enventor); + return ECORE_CALLBACK_DONE; + } + //Goto Line + if (!strcmp(key, "l") || !strcmp(key, "L")) + { + goto_open(ad->enventor); + return ECORE_CALLBACK_DONE; + } + //Part Highlight + if (!strcmp(key, "h") || !strcmp(key, "H")) + { + part_highlight_toggle(ad); + return ECORE_CALLBACK_DONE; + } + //Swallow Dummy Object + if (!strcmp(key, "w") || !strcmp(key, "W")) + { + dummy_swallow_toggle(ad); + return ECORE_CALLBACK_DONE; + } + //Template Code + if (!strcmp(key, "t") || !strcmp(key, "T")) + { + default_template_insert(ad); + return ECORE_CALLBACK_DONE; + } + //Full Edit View + if (!strcmp(key, "Left")) + { + base_live_view_full_view(); + return ECORE_CALLBACK_DONE; + } + //Full Live View + if (!strcmp(key, "Right")) + { + base_enventor_full_view(); + return ECORE_CALLBACK_DONE; + } + //Full Console View + if (!strcmp(key, "Up")) + { + base_console_full_view(); + return ECORE_CALLBACK_DONE; + } + //Full Editors View + if (!strcmp(key, "Down")) + { + base_editors_full_view(); + return ECORE_CALLBACK_DONE; + } + //Auto Indentation + if (!strcmp(key, "i") || !strcmp(key, "I")) + { + auto_indent_toggle(ad); + return ECORE_CALLBACK_DONE; + } + //Auto Completion + if (!strcmp(key, "o") || !strcmp(key, "O")) + { + auto_comp_toggle(ad); + return ECORE_CALLBACK_DONE; + } + //Live Edit + if (!strcmp(key, "e") || !strcmp(key, "E")) + { + live_edit_toggle(); + return ECORE_CALLBACK_DONE; + } + + return ECORE_CALLBACK_PASS_ON; +} + +static Eina_Bool +main_key_down_cb(void *data, int type EINA_UNUSED, void *ev) +{ + Ecore_Event_Key *event = ev; + app_data *ad = data; + + //Shift Key + if (!strcmp("Shift_L", event->key)) + { + ad->shift_pressed = EINA_TRUE; + return ECORE_CALLBACK_DONE; + } + + if (ad->ctrl_pressed) + { + if (ad->shift_pressed) return template_insert_patch(ad, event->key); + else return ctrl_func(ad, event->key); + } + + //Main Menu + if (!strcmp(event->key, "Escape")) + { + if (search_is_opened() || goto_is_opened()) + { + goto_close(); + search_close(); + enventor_object_focus_set(ad->enventor, EINA_TRUE); + return ECORE_CALLBACK_DONE; + } + menu_toggle(); + return ECORE_CALLBACK_DONE; + } + + if (menu_activated_get() > 0) return ECORE_CALLBACK_PASS_ON; + + //Control Key + if (!strcmp("Control_L", event->key)) + { + ad->ctrl_pressed = EINA_TRUE; + return ECORE_CALLBACK_PASS_ON; + } + + //README + if (!strcmp(event->key, "F1")) + { + menu_about(); + return ECORE_CALLBACK_DONE; + } + + //New + if (!strcmp(event->key, "F2")) + { + menu_edc_new(); + return ECORE_CALLBACK_DONE; + } + //Save + if (!strcmp(event->key, "F3")) + { + menu_edc_save(); + return ECORE_CALLBACK_DONE; + } + //Load + if (!strcmp(event->key, "F4")) + { + menu_edc_load(); + return ECORE_CALLBACK_DONE; + } + //Line Number + if (!strcmp(event->key, "F5")) + { + config_linenumber_set(!config_linenumber_get()); + enventor_object_linenumber_set(ad->enventor, config_linenumber_get()); + return ECORE_CALLBACK_DONE; + } + + //Tools + if (!strcmp(event->key, "F9")) + { + base_tools_toggle(EINA_TRUE); + return ECORE_CALLBACK_DONE; + } + + //Console + if (!strcmp(event->key, "F10")) + { + base_console_toggle(); + return ECORE_CALLBACK_DONE; + } + //Statusbar + if (!strcmp(event->key, "F11")) + { + base_statusbar_toggle(EINA_TRUE); + return ECORE_CALLBACK_DONE; + } + //Setting + if (!strcmp(event->key, "F12")) + { + menu_setting(); + return ECORE_CALLBACK_DONE; + } + + return ECORE_CALLBACK_PASS_ON; +} + +static void +statusbar_set() +{ + Evas_Object *obj = stats_init(base_layout_get()); + elm_object_part_content_set(base_layout_get(), "elm.swallow.statusbar", obj); + base_statusbar_toggle(EINA_FALSE); } static Eina_Bool init(app_data *ad, int argc, char **argv) { - elm_init(argc, argv); + enventor_init(argc, argv); ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, main_key_down_cb, ad); ecore_event_handler_add(ECORE_EVENT_KEY_UP, main_key_up_cb, ad); @@ -561,53 +726,39 @@ init(app_data *ad, int argc, char **argv) elm_setup(); config_data_set(ad, argc, argv); - - if (!build_init()) return EINA_FALSE; - if (!edc_default_setup()) return EINA_FALSE; - if (!base_gui_init()) return EINA_FALSE; - - autocomp_init(base_layout_get()); - edj_mgr_set(); + newfile_default_set(); + base_gui_init(); statusbar_set(); - edc_edit_set(ad); - edc_view_set(stats_group_name_get()); - menu_init(ad->ed); - tools_set(ad->ed); - live_edit_init(ad->ed); + enventor_setup(ad); + tools_set(ad->enventor); base_gui_show(); - ad->edc_monitor = eio_monitor_add(config_edc_path_get()); - if (!ad->edc_monitor) EINA_LOG_ERR("Failed to add Eio_Monitor"); + //Guarantee Enventor editor has focus. + enventor_object_focus_set(ad->enventor, EINA_TRUE); - ecore_event_handler_add(EIO_MONITOR_FILE_MODIFIED, edc_changed_cb, ad); + menu_init(ad->enventor); return EINA_TRUE; } static void -term(app_data *ad) +term(app_data *ad EINA_UNUSED) { - build_term(); menu_term(); - edit_term(ad->ed); +#if 0 live_edit_term(); - edj_mgr_term(); +#endif stats_term(); base_gui_term(); config_term(); - autocomp_term(); - - eio_monitor_del(ad->edc_monitor); - - elm_shutdown(); + enventor_shutdown(); } -int -main(int argc, char **argv) +EAPI_MAIN +int elm_main(int argc, char **argv) { - app_data ad; - memset(&ad, 0x00, sizeof(ad)); + app_data ad = {0, }; if (!init(&ad, argc, argv)) { @@ -619,5 +770,8 @@ main(int argc, char **argv) term(&ad); + elm_shutdown(); + return 0; } +ELM_MAIN() diff --git a/src/bin/menu.c b/src/bin/menu.c index 8faa012..e73c970 100644 --- a/src/bin/menu.c +++ b/src/bin/menu.c @@ -10,12 +10,12 @@ struct menu_s Evas_Object *about_layout; Evas_Object *ctxpopup; + Evas_Object *enventor; const char *last_accessed_path; int active_request; - edit_data *ed; }; typedef struct menu_s menu_data; @@ -121,7 +121,7 @@ newfile_ok_btn_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { menu_data *md = data; - newfile_set(md->ed); + newfile_set(md->enventor); newfile_close(md); menu_close(md); } @@ -308,7 +308,7 @@ exit_save_btn_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { menu_data *md = data; - edit_save(md->ed); + enventor_object_save(md->enventor, config_edc_path_get()); elm_exit(); } @@ -324,7 +324,7 @@ prev_btn_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { menu_data *md = data; - edit_focus_set(md->ed); + enventor_object_focus_set(md->enventor, EINA_TRUE); menu_toggle(); } @@ -356,8 +356,7 @@ new_save_btn_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { menu_data *md = data; - - edit_save(md->ed); + enventor_object_save(md->enventor, config_edc_path_get()); newfile_open(md); warning_close(md); menu_close(md); @@ -417,22 +416,22 @@ fileselector_save_done_cb(void *data, Evas_Object *obj, void *event_info) //Update the edc file and try to save. if (strcmp(config_edc_path_get(), selected)) - edit_changed_set(md->ed, EINA_TRUE); - + enventor_object_modified_set(md->enventor, EINA_TRUE); config_edc_path_set(selected); - if (!edit_save(md->ed)) + if (!enventor_object_save(md->enventor, selected)) { char buf[PATH_MAX]; - snprintf(buf, sizeof(buf), "Failed to load: %s.", selected); + snprintf(buf, sizeof(buf), "Failed to save: %s.", selected); elm_object_part_text_set(md->fileselector_layout, "elm.text.msg", buf); elm_object_signal_emit(md->fileselector_layout, "elm,action,msg,show", ""); return; } - +#if 0 edj_mgr_reload_need_set(EINA_TRUE); +#endif config_apply(); base_title_set(selected); @@ -495,7 +494,8 @@ fileselector_load_done_cb(void *data, Evas_Object *obj, void *event_info) "elm,action,msg,show", ""); return; } - edit_edc_reload(md->ed, selected); + enventor_object_file_set(md->enventor, selected); + base_title_set(selected); fileselector_close(md); menu_close(md); } @@ -586,7 +586,7 @@ load_save_btn_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { menu_data *md = data; - edit_save(md->ed); + enventor_object_save(md->enventor); edc_file_load(md); warning_close(md); } @@ -658,7 +658,7 @@ ctxpopup_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } void -menu_init(edit_data *ed) +menu_init(Evas_Object *enventor) { menu_data *md = calloc(1, sizeof(menu_data)); if (!md) @@ -668,7 +668,7 @@ menu_init(edit_data *ed) } g_md = md; - md->ed = ed; + md->enventor = enventor; } void @@ -695,7 +695,7 @@ void menu_edc_new(void) { menu_data *md = g_md; - if (edit_changed_get(md->ed)) + if (enventor_object_modified_get(md->enventor)) warning_open(md, new_yes_btn_cb, new_save_btn_cb); else newfile_open(md); @@ -712,7 +712,7 @@ void menu_edc_load(void) { menu_data *md = g_md; - if (edit_changed_get(md->ed)) + if (enventor_object_modified_get(md->enventor)) warning_open(md, load_yes_btn_cb, load_save_btn_cb); else edc_file_load(md); @@ -792,7 +792,7 @@ void menu_exit(void) { menu_data *md = g_md; - if (edit_changed_get(md->ed)) + if (enventor_object_modified_get(md->enventor)) { search_close(); warning_open(md, exit_yes_btn_cb, exit_save_btn_cb); @@ -806,7 +806,9 @@ menu_deactivate_request(void) { menu_data *md = g_md; md->active_request--; - if (md->active_request == 0) edit_focus_set(md->ed); + + if (md->active_request == 0) + enventor_object_focus_set(md->enventor, EINA_TRUE); if (!md->menu_layout) return; elm_object_disabled_set(md->menu_layout, EINA_FALSE); elm_object_focus_set(md->menu_layout, EINA_TRUE); diff --git a/src/bin/newfile.c b/src/bin/newfile.c index a148a5d..8eaae1b 100644 --- a/src/bin/newfile.c +++ b/src/bin/newfile.c @@ -18,7 +18,7 @@ list_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } void -newfile_set(edit_data *ed) +newfile_set(Evas_Object *enventor) { new_data *nd = g_nd; if (!nd) return; @@ -40,7 +40,8 @@ newfile_set(edit_data *ed) EINA_LOG_ERR("Cannot find file! \"%s\"", buf); return; } - edit_edc_reload(ed, default_path); + enventor_object_file_set(enventor, default_path); + base_title_set(default_path); } void diff --git a/src/bin/search.c b/src/bin/search.c index 89fd709..ebaa114 100644 --- a/src/bin/search.c +++ b/src/bin/search.c @@ -1,4 +1,10 @@ -#include +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define ENVENTOR_BETA_API_SUPPORT 1 + +#include #include "common.h" typedef struct search_s @@ -7,8 +13,7 @@ typedef struct search_s Evas_Object *layout; Evas_Object *en_find; Evas_Object *en_replace; - Evas_Object *entry; - edit_data *ed; + Evas_Object *enventor; int pos; int len; int syntax_color; @@ -59,7 +64,7 @@ replace_all_proc(search_data *sd) char buf[256]; int replace_cnt = 0; - const char *text = elm_entry_entry_get(sd->entry); + const char *text = (const char *) enventor_object_text_get(sd->enventor); char *utf8 = elm_entry_markup_to_utf8(text); char *s = utf8; @@ -69,9 +74,9 @@ replace_all_proc(search_data *sd) while ((s = strstr(s, find))) { pos = s + (delta * replace_cnt) - utf8; - elm_entry_select_region_set(sd->entry, pos, pos + find_len); - elm_entry_entry_insert(sd->entry, replace); - elm_entry_select_none(sd->entry); + enventor_object_select_region_set(sd->enventor, pos, (pos + find_len)); + enventor_object_text_insert(sd->enventor, replace); + enventor_object_select_none(sd->enventor); replace_cnt++; s++; } @@ -88,7 +93,8 @@ static Eina_Bool selection_region_anim_cb(void *data) { search_data *sd = data; - elm_entry_select_region_set(sd->entry, sd->pos, sd->pos + sd->len); + enventor_object_select_region_set(sd->enventor, sd->pos, + (sd->pos + sd->len)); return ECORE_CALLBACK_CANCEL; } @@ -101,12 +107,12 @@ find_forward_proc(search_data *sd) char buf[256]; Eina_Bool need_iterate = EINA_TRUE; - const char *text = elm_entry_entry_get(sd->entry); + const char *text = (const char *) enventor_object_text_get(sd->enventor); if (!text) return; char *utf8 = elm_entry_markup_to_utf8(text); //get the character position begun with searching. - if (sd->pos == -1) sd->pos = elm_entry_cursor_pos_get(sd->entry); + if (sd->pos == -1) sd->pos = enventor_object_cursor_pos_get(sd->enventor); else if (sd->pos == 0) need_iterate = EINA_FALSE; else sd->pos++; @@ -149,14 +155,14 @@ find_backward_proc(search_data *sd) Eina_Bool need_iterate = EINA_TRUE; int len = 0; - const char *text = elm_entry_entry_get(sd->entry); + const char *text = (const char *) enventor_object_text_get(sd->enventor); if (!text) return; char *utf8 = elm_entry_markup_to_utf8(text); //get the character position begun with searching. if (sd->pos == -1) { - sd->pos = elm_entry_cursor_pos_get(sd->entry); + sd->pos = enventor_object_cursor_pos_get(sd->enventor); } else { @@ -204,12 +210,13 @@ static Eina_Bool replace_proc(search_data *sd) { const char *find = elm_entry_entry_get(sd->en_find); - const char *selection = elm_entry_selection_get(sd->entry); + const char *selection = + (const char * ) enventor_object_selection_get(sd->enventor); if (!find || !selection) return EINA_FALSE; char *utf8 = elm_entry_markup_to_utf8(selection); if (strcmp(find, utf8)) return EINA_FALSE; const char *replace = elm_entry_entry_get(sd->en_replace); - elm_entry_entry_insert(sd->entry, replace); + enventor_object_text_insert(sd->enventor, replace); free(utf8); return EINA_TRUE; } @@ -231,7 +238,7 @@ replace_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, search_data *sd = data; Eina_Bool next; next = replace_proc(sd); - edit_syntax_color_full_apply(sd->ed, EINA_TRUE); + enventor_object_syntax_color_full_apply(sd->enventor, EINA_TRUE); if (!next) return; if (sd->forward) find_forward_proc(sd); else find_backward_proc(sd); @@ -243,7 +250,7 @@ replace_all_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, { search_data *sd = data; replace_all_proc(sd); - edit_syntax_color_full_apply(sd->ed, EINA_TRUE); + enventor_object_syntax_color_full_apply(sd->enventor, EINA_TRUE); } static void @@ -272,7 +279,7 @@ replace_activated_cb(void *data, Evas_Object *obj EINA_UNUSED, search_data *sd = data; Eina_Bool next; next = replace_proc(sd); - edit_syntax_color_full_apply(sd->ed, EINA_TRUE); + enventor_object_syntax_color_full_apply(sd->enventor, EINA_TRUE); if (!next) return; if (sd->forward) find_forward_proc(sd); else find_backward_proc(sd); @@ -283,7 +290,7 @@ win_focused_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { search_data *sd = g_sd; - edit_syntax_color_full_apply(sd->ed, EINA_FALSE); + enventor_object_syntax_color_full_apply(sd->enventor, EINA_FALSE); sd->syntax_color++; /* FIXME: reset position because search requests syntax color partial apply when it's window is unfocused. the selection region would be dismissed. @@ -297,12 +304,12 @@ win_unfocused_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { search_data *sd = g_sd; - edit_syntax_color_partial_apply(sd->ed, -1); + enventor_object_syntax_color_partial_apply(sd->enventor, -1); sd->syntax_color--; } void -search_open(edit_data *ed) +search_open(Evas_Object *enventor) { search_data *sd = g_sd; @@ -402,11 +409,10 @@ search_open(edit_data *ed) evas_object_show(win); sd->win = win; - sd->ed = ed; + sd->enventor = enventor; sd->layout = layout; sd->en_find = entry_find; sd->en_replace = entry_replace; - sd->entry = edit_entry_get(ed); sd->pos = -1; sd->forward = EINA_TRUE; } @@ -426,7 +432,7 @@ search_close(void) while (sd->syntax_color > 0) { - edit_syntax_color_partial_apply(sd->ed, -1); + enventor_object_syntax_color_partial_apply(sd->enventor, -1); sd->syntax_color--; } diff --git a/src/bin/setting.c b/src/bin/setting.c index c6fd33e..dc38c5a 100644 --- a/src/bin/setting.c +++ b/src/bin/setting.c @@ -7,7 +7,7 @@ struct setting_s Evas_Object *img_path_entry; Evas_Object *snd_path_entry; Evas_Object *fnt_path_entry; - Evas_Object *data_path_entry; + Evas_Object *dat_path_entry; Evas_Object *slider_font; Evas_Object *slider_view; @@ -53,15 +53,15 @@ fnt_path_entry_update(Evas_Object *entry, Eina_List *edc_fnt_paths) } static void -data_path_entry_update(Evas_Object *entry, Eina_List *edc_data_paths) +dat_path_entry_update(Evas_Object *entry, Eina_List *edc_dat_paths) { elm_entry_entry_set(entry, NULL); Eina_List *l; - char *edc_data_path; - EINA_LIST_FOREACH(edc_data_paths, l, edc_data_path) + char *edc_dat_path; + EINA_LIST_FOREACH(edc_dat_paths, l, edc_dat_path) { - elm_entry_entry_append(entry, edc_data_path); + elm_entry_entry_append(entry, edc_dat_path); elm_entry_entry_append(entry, ";"); } } @@ -103,8 +103,8 @@ setting_apply_btn_cb(void *data, Evas_Object *obj EINA_UNUSED, config_edc_img_path_set(elm_object_text_get(sd->img_path_entry)); config_edc_snd_path_set(elm_object_text_get(sd->snd_path_entry)); config_edc_fnt_path_set(elm_object_text_get(sd->fnt_path_entry)); - config_edc_data_path_set(elm_object_text_get(sd->data_path_entry)); - config_font_size_set((float) elm_slider_value_get(sd->slider_font)); + config_edc_dat_path_set(elm_object_text_get(sd->dat_path_entry)); + config_font_scale_set((float) elm_slider_value_get(sd->slider_font)); config_view_scale_set(elm_slider_value_get(sd->slider_view)); config_tools_set(elm_check_state_get(sd->toggle_tools)); config_stats_bar_set(elm_check_state_get(sd->toggle_stats)); @@ -138,10 +138,10 @@ setting_reset_btn_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, (Eina_List *)config_edc_snd_path_list_get()); fnt_path_entry_update(sd->fnt_path_entry, (Eina_List *)config_edc_fnt_path_list_get()); - data_path_entry_update(sd->data_path_entry, - (Eina_List *)config_edc_data_path_list_get()); + dat_path_entry_update(sd->dat_path_entry, + (Eina_List *)config_edc_dat_path_list_get()); - elm_slider_value_set(sd->slider_font, (double) config_font_size_get()); + elm_slider_value_set(sd->slider_font, (double) config_font_scale_get()); elm_slider_value_set(sd->slider_view, (double) config_view_scale_get()); elm_check_state_set(sd->toggle_tools, config_tools_get()); @@ -226,11 +226,11 @@ setting_open(void) fnt_path_entry); //Data Path Entry - Evas_Object *data_path_entry = entry_create(layout); - data_path_entry_update(data_path_entry, - (Eina_List *)config_edc_data_path_list_get()); - elm_object_part_content_set(layout, "elm.swallow.data_path_entry", - data_path_entry); + Evas_Object *dat_path_entry = entry_create(layout); + dat_path_entry_update(dat_path_entry, + (Eina_List *)config_edc_dat_path_list_get()); + elm_object_part_content_set(layout, "elm.swallow.dat_path_entry", + dat_path_entry); //Preference Evas_Object *scroller = elm_scroller_add(layout); @@ -266,13 +266,13 @@ setting_open(void) //Font Size (Slider) Evas_Object *slider_font = elm_slider_add(box3); - evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_weight_set(slider_font, EVAS_HINT_EXPAND, 0); evas_object_size_hint_align_set(slider_font, 0, 0); elm_slider_span_size_set(slider_font, 190); elm_slider_indicator_show_set(slider_font, EINA_FALSE); elm_slider_unit_format_set(slider_font, "%1.1fx"); - elm_slider_min_max_set(slider_font, MIN_FONT_SIZE, MAX_FONT_SIZE); - elm_slider_value_set(slider_font, (double) config_font_size_get()); + elm_slider_min_max_set(slider_font, MIN_FONT_SCALE, MAX_FONT_SCALE); + elm_slider_value_set(slider_font, (double) config_font_scale_get()); elm_object_text_set(slider_font, "Font Size"); evas_object_show(slider_font); @@ -323,7 +323,7 @@ setting_open(void) //View Scale (Slider) Evas_Object *slider_view = elm_slider_add(box2); - evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_weight_set(slider_view, EVAS_HINT_EXPAND, 0); evas_object_size_hint_align_set(slider_view, 0, 0); elm_slider_span_size_set(slider_view, 190); elm_slider_indicator_show_set(slider_view, EINA_FALSE); @@ -377,7 +377,7 @@ setting_open(void) sd->img_path_entry = img_path_entry; sd->snd_path_entry = snd_path_entry; sd->fnt_path_entry = fnt_path_entry; - sd->data_path_entry = data_path_entry; + sd->dat_path_entry = dat_path_entry; sd->slider_font = slider_font; sd->slider_view = slider_view; sd->toggle_tools = toggle_tools; diff --git a/src/bin/statusbar.c b/src/bin/statusbar.c index b42956b..1af9a91 100644 --- a/src/bin/statusbar.c +++ b/src/bin/statusbar.c @@ -81,13 +81,10 @@ stats_info_msg_update(const char *msg) } void -stats_view_size_update(void) +stats_view_size_update(Evas_Coord w, Evas_Coord h) { stats_data *sd = g_sd; - Evas_Coord w, h; - config_view_size_get(&w, &h); - char buf[10]; snprintf(buf, sizeof(buf), "%d", w); elm_object_part_text_set(sd->layout, "elm.text.size_w", buf); diff --git a/src/bin/tools.c b/src/bin/tools.c index 95443c5..7b0beab 100644 --- a/src/bin/tools.c +++ b/src/bin/tools.c @@ -4,55 +4,52 @@ #define TOOLBAR_ICON_SIZE 16 static void -menu_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) +menu_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - edit_data *ed = data; + Evas_Object *enventor = data; if (search_is_opened() || goto_is_opened()) { goto_close(); search_close(); - edit_focus_set(ed); + enventor_object_focus_set(enventor, EINA_TRUE); } - menu_toggle(); } static void -save_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +highlight_cb(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) { - menu_edc_save(); -} - -static void -load_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - menu_edc_load(); -} - -static void -highlight_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, - void *event_info) -{ - edit_data *ed = data; + Evas_Object *enventor = data; config_part_highlight_set(!config_part_highlight_get()); - edit_part_highlight_toggle(ed, EINA_TRUE); + enventor_object_part_highlight_set(enventor, config_part_highlight_get()); + if (config_part_highlight_get()) + stats_info_msg_update("Part Highlighting Enabled."); + else + stats_info_msg_update("Part Highlighting Disabled."); } static void -swallow_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, - void *event_info) +swallow_cb(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) { + Evas_Object *enventor = data; config_dummy_swallow_set(!config_dummy_swallow_get()); - view_dummy_toggle(VIEW_DATA, EINA_TRUE); + enventor_object_dummy_swallow_set(enventor, config_dummy_swallow_get()); + + if (config_dummy_swallow_get()) + stats_info_msg_update("Dummy Swallow Enabled."); + else + stats_info_msg_update("Dummy Swallow Disabled."); } static void -lines_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) +lines_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - edit_data *ed = data; + Evas_Object *enventor = data; config_linenumber_set(!config_linenumber_get()); - edit_line_number_toggle(ed); + enventor_object_linenumber_set(enventor, config_linenumber_get()); } static void @@ -65,17 +62,17 @@ status_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, static void find_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) { - edit_data *ed = data; + Evas_Object *enventor = data; if (search_is_opened()) search_close(); - else search_open(ed); + else search_open(enventor); } static void goto_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) { - edit_data *ed = data; + Evas_Object *enventor = data; if (goto_is_opened()) goto_close(); - else goto_open(ed); + else goto_open(enventor); } static void @@ -111,7 +108,7 @@ tools_btn_create(Evas_Object *parent, const char *icon, const char *label, } Evas_Object * -tools_create(Evas_Object *parent, edit_data *ed) +tools_create(Evas_Object *parent, Evas_Object *enventor) { Evas_Object *box = elm_box_add(parent); elm_box_horizontal_set(box, EINA_TRUE); @@ -121,7 +118,7 @@ tools_create(Evas_Object *parent, edit_data *ed) evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); Evas_Object *btn; - btn = tools_btn_create(box, "menu", "Menu", menu_cb, ed); + btn = tools_btn_create(box, "menu", "Menu", menu_cb, enventor); evas_object_size_hint_weight_set(btn, 0, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(btn, 0.0, EVAS_HINT_FILL); elm_box_pack_end(box, btn); @@ -131,7 +128,8 @@ tools_create(Evas_Object *parent, edit_data *ed) evas_object_show(sp); elm_box_pack_end(box, sp); - btn = tools_btn_create(box, "highlight", "Highlight", highlight_cb, ed); + btn = tools_btn_create(box, "highlight", "Highlight", highlight_cb, + enventor); evas_object_size_hint_weight_set(btn, 0, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(btn, 0.0, EVAS_HINT_FILL); elm_box_pack_end(box, btn); @@ -151,17 +149,17 @@ tools_create(Evas_Object *parent, edit_data *ed) evas_object_show(sp); elm_box_pack_end(box, sp); - btn = tools_btn_create(box, "lines", "Lines", lines_cb, ed); + btn = tools_btn_create(box, "lines", "Lines", lines_cb, enventor); evas_object_size_hint_weight_set(btn, 0, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(btn, 0.0, EVAS_HINT_FILL); elm_box_pack_end(box, btn); - btn = tools_btn_create(box, "find", "Find", find_cb, ed); + btn = tools_btn_create(box, "find", "Find", find_cb, enventor); evas_object_size_hint_weight_set(btn, 0, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(btn, 0.0, EVAS_HINT_FILL); elm_box_pack_end(box, btn); - btn = tools_btn_create(box, "line", "Goto", goto_cb, ed); + btn = tools_btn_create(box, "line", "Goto", goto_cb, enventor); evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(btn, 0.0, EVAS_HINT_FILL); diff --git a/src/include/Makefile.am b/src/include/Makefile.am index ae5f03c..9a64c9e 100644 --- a/src/include/Makefile.am +++ b/src/include/Makefile.am @@ -4,28 +4,15 @@ EXTRA_DIST = common.h \ base_gui.h \ config_data.h \ dummy_obj.h \ - edc_editor.h \ - edc_parser.h \ edj_viewer.h \ menu.h \ panes.h \ statusbar.h \ - edj_mgr.h \ - syntax_color.h \ - build.h \ - ctxpopup.h \ globals.h \ - indent.h \ - syntax_helper.h \ - template_code.h \ tools.h \ newfile.h \ - auto_comp.h \ - auto_comp_code.h \ goto.h \ setting.h \ search.h \ - redoundo.h \ - template.h \ live_edit.h \ console.h diff --git a/src/include/auto_comp.h b/src/include/auto_comp.h deleted file mode 100644 index e8d388b..0000000 --- a/src/include/auto_comp.h +++ /dev/null @@ -1,5 +0,0 @@ -void autocomp_init(Evas_Object *parent); -void autocomp_term(void); -void autocomp_target_set(edit_data *ed); -void autocomp_toggle(void); -Eina_Bool autocomp_key_event_hook(const char *key); diff --git a/src/include/base_gui.h b/src/include/base_gui.h index 96c6f36..81e8242 100644 --- a/src/include/base_gui.h +++ b/src/include/base_gui.h @@ -9,11 +9,13 @@ void base_title_set(const char *path); void base_statusbar_toggle(Eina_Bool config); void base_tools_toggle(Eina_Bool config); void base_tools_set(Evas_Object *tools); -void base_text_editor_full_view(void); +void base_enventor_full_view(void); void base_live_view_full_view(void); void base_editors_full_view(void); void base_console_full_view(void); +void base_console_toggle(void); void base_live_view_set(Evas_Object *live_view); -void base_text_editor_set(Evas_Object *text_editor); +void base_enventor_set(Evas_Object *enventor); void base_gui_term(void); void base_console_reset(void); +void base_error_msg_set(const char *msg); diff --git a/src/include/build.h b/src/include/build.h deleted file mode 100644 index 1dcf18c..0000000 --- a/src/include/build.h +++ /dev/null @@ -1,5 +0,0 @@ -void build_edc(void); -Eina_Bool build_init(void); -void build_term(void); -Eina_Bool build_cmd_set(void); -void build_err_noti_cb_set(void (*cb)(void *data, const char *msg), void *data); diff --git a/src/include/common.h b/src/include/common.h index 7bc7002..7185261 100644 --- a/src/include/common.h +++ b/src/include/common.h @@ -1,39 +1,25 @@ #ifndef __COMMON_H__ #define __COMMON_H__ -typedef struct viewer_s view_data; typedef struct statusbar_s stats_data; -typedef struct editor_s edit_data; -typedef struct syntax_color_s color_data; -typedef struct parser_s parser_data; -typedef struct attr_value_s attr_value; -typedef struct syntax_helper_s syntax_helper; -typedef struct indent_s indent_data; -typedef struct redoundo_s redoundo_data; -#include "edc_editor.h" +#define EOL "
" +#define EOL_LEN 5 +#define REL1_X 0.25f +#define REL1_Y 0.25f +#define REL2_X 0.75f +#define REL2_Y 0.75f + #include "menu.h" -#include "edj_viewer.h" #include "statusbar.h" -#include "syntax_helper.h" -#include "syntax_color.h" #include "config_data.h" -#include "edc_parser.h" -#include "dummy_obj.h" -#include "ctxpopup.h" -#include "indent.h" -#include "edj_mgr.h" #include "globals.h" -#include "build.h" #include "tools.h" #include "base_gui.h" #include "search.h" #include "goto.h" #include "newfile.h" -#include "auto_comp.h" #include "setting.h" -#include "redoundo.h" -#include "template.h" #include "live_edit.h" #include "console.h" diff --git a/src/include/config_data.h b/src/include/config_data.h index 04afe54..fa252e9 100644 --- a/src/include/config_data.h +++ b/src/include/config_data.h @@ -1,24 +1,24 @@ -#define MAX_FONT_SIZE 5.0 -#define MIN_FONT_SIZE 0.5 +#define MAX_FONT_SCALE 5.0 +#define MIN_FONT_SCALE 0.5 #define MAX_VIEW_SCALE 5.0 #define MIN_VIEW_SCALE 0.5 -void config_init(const char *edc_path, const char *edc_img_path, const char *edc_snd_path, const char *edc_fnt_path, const char *edc_data_path); +void config_init(const char *edc_path, const char *edc_img_path, const char *edc_snd_path, const char *edc_fnt_path, const char *edc_dat_path); void config_term(void); const char *config_edc_path_get(void); const char *config_edj_path_get(void); const char *config_edc_img_path_get(void); const char *config_edc_snd_path_get(void); const char *config_edc_fnt_path_get(void); -const char *config_edc_data_path_get(void); +const char *config_edc_dat_path_get(void); void config_edc_img_path_set(const char *edc_img_path); void config_edc_snd_path_set(const char *edc_snd_path); void config_edc_fnt_path_set(const char *edc_fnt_path); -void config_edc_data_path_set(const char *edc_fnt_path); +void config_edc_dat_path_set(const char *edc_fnt_path); Eina_List *config_edc_img_path_list_get(void); Eina_List *config_edc_snd_path_list_get(void); Eina_List *config_edc_fnt_path_list_get(void); -Eina_List *config_edc_data_path_list_get(void); +Eina_List *config_edc_dat_path_list_get(void); 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); @@ -38,8 +38,8 @@ void config_auto_complete_set(Eina_Bool auto_complete); Eina_Bool config_auto_complete_get(void); Eina_Bool config_live_edit_get(void); void config_live_edit_set(Eina_Bool live_edit); -void config_font_size_set(float font_size); -float config_font_size_get(void); +void config_font_scale_set(float font_scale); +float config_font_scale_get(void); void config_view_scale_set(double view_scale); double config_view_scale_get(void); Eina_Bool config_tools_get(void); diff --git a/src/include/ctxpopup.h b/src/include/ctxpopup.h deleted file mode 100644 index d498827..0000000 --- a/src/include/ctxpopup.h +++ /dev/null @@ -1,25 +0,0 @@ -typedef enum attr_value_type -{ - ATTR_VALUE_INTEGER = 1, - ATTR_VALUE_FLOAT = 2, - ATTR_VALUE_CONSTANT = 4, - ATTR_VALUE_PART = 8, - ATTR_VALUE_STATE = 16, - ATTR_VALUE_IMAGE = 32, - ATTR_VALUE_PROGRAM = 64 -} attr_value_type; - -struct attr_value_s -{ - Eina_Array *strs; - float min; - float max; - attr_value_type type; - Eina_Bool program : 1; -}; - -Evas_Object * ctxpopup_candidate_list_create(edit_data *ed, attr_value *attr, double slider_val, Evas_Smart_Cb ctxpopup_dismiss_cb, Evas_Smart_Cb ctxpopup_selected_cb); -Evas_Object * ctxpopup_img_preview_create(edit_data *ed, const char *imgpath, Evas_Smart_Cb ctxpopup_dismiss_cb, Evas_Smart_Cb ctxpopup_relay_cb); - - - diff --git a/src/include/dummy_obj.h b/src/include/dummy_obj.h deleted file mode 100644 index 7cec17f..0000000 --- a/src/include/dummy_obj.h +++ /dev/null @@ -1,4 +0,0 @@ -void dummy_obj_new(Evas_Object *layout); -void dummy_obj_del(Evas_Object *layout); -void dummy_obj_update(Evas_Object *layout); - diff --git a/src/include/edc_editor.h b/src/include/edc_editor.h deleted file mode 100644 index a292920..0000000 --- a/src/include/edc_editor.h +++ /dev/null @@ -1,30 +0,0 @@ -edit_data *edit_init(Evas_Object *win); -void edit_term(edit_data *ed); -void edit_edc_read(edit_data *ed, const char *file_path); -void edit_focus_set(edit_data *ed); -Evas_Object *edit_obj_get(edit_data *ed); -Eina_Bool edit_changed_get(edit_data *ed); -void edit_changed_set(edit_data *ed, Eina_Bool changed); -void edit_line_number_toggle(edit_data *ed); -void edit_editable_set(edit_data *ed, Eina_Bool editable); -Eina_Bool edit_save(edit_data *ed); -void edit_new(edit_data* ed); -void edit_view_sync_cb_set(edit_data *ed, void (*cb)(void *data, Eina_Stringshare *part_name, Eina_Stringshare *group_name), void *data); -void edit_view_sync(edit_data *ed); -void edit_font_size_update(edit_data *ed, Eina_Bool msg, Eina_Bool update); -void edit_part_highlight_toggle(edit_data *ed, Eina_Bool msg); -void edit_line_delete(edit_data *ed); -void edit_edc_reload(edit_data *ed, const char *edc_path); -Eina_Stringshare *edit_cur_prog_name_get(edit_data *ed); -Eina_Stringshare *edit_cur_part_name_get(edit_data *ed); -Eina_Stringshare *edit_cur_paragh_get(edit_data *ed); -int edit_max_line_get(edit_data *ed); -void edit_goto(edit_data *ed, int line); -void edit_syntax_color_full_apply(edit_data *ed, Eina_Bool force); -void edit_syntax_color_partial_apply(edit_data *ed, double interval); -Evas_Object * edit_entry_get(edit_data *ed); -void edit_line_increase(edit_data *ed, int cnt); -void edit_line_decrease(edit_data *ed, int cnt); -int edit_cur_indent_depth_get(edit_data *ed); -void edit_redoundo_region_push(edit_data *ed, int cursor_pos1, int cursor_pos2); -void edit_disabled_set(edit_data *ed, Eina_Bool disable); diff --git a/src/include/edc_parser.h b/src/include/edc_parser.h deleted file mode 100644 index bf53ab7..0000000 --- a/src/include/edc_parser.h +++ /dev/null @@ -1,26 +0,0 @@ -#define QUOT "\"" -#define QUOT_C '\"' -#define QUOT_LEN 1 -#define EOL "
" -#define EOL_LEN 5 -#define TAB "" -#define TAB_LEN 6 - -parser_data *parser_init(void); -void parser_term(parser_data *pd); -Eina_Stringshare *parser_first_group_name_get(parser_data *pd, Evas_Object *entry); -void parser_cur_name_get(parser_data *pd, Evas_Object *entry, void (*cb)(void *data, Eina_Stringshare *part_name, Eina_Stringshare *group_name), void *data); -void parser_cur_group_name_get(parser_data *pd, Evas_Object *entry, void (*cb)(void *data, Eina_Stringshare *part_name, Eina_Stringshare *group_name), void *data); -Eina_Stringshare *parser_cur_name_fast_get(Evas_Object *entry, const char *scope); -Eina_Bool parser_type_name_compare(parser_data *pd, const char *str); -attr_value *parser_attribute_get(parser_data *pd, const char *text, const char *cur); -Eina_Stringshare *parser_paragh_name_get(parser_data *pd, Evas_Object *entry); -char *parser_name_get(parser_data *pd, const char *cur); -void parser_cancel(parser_data *pd); -int parser_line_cnt_get(parser_data *pd EINA_UNUSED, const char *src); -Eina_List *parser_states_filtered_name_get(Eina_List *states); -int parser_end_of_parts_block_pos_get(const Evas_Object *entry, const char *group_name); -Eina_Bool parser_images_pos_get(const Evas_Object *entry, int *ret); -Eina_Bool parser_styles_pos_get(const Evas_Object *entry, int *ret); -const char * parser_colon_pos_get(parser_data *pd EINA_UNUSED, const char *cur); - diff --git a/src/include/edj_mgr.h b/src/include/edj_mgr.h deleted file mode 100644 index c8a41d6..0000000 --- a/src/include/edj_mgr.h +++ /dev/null @@ -1,14 +0,0 @@ -#define VIEW_DATA edj_mgr_view_get(NULL) - -void edj_mgr_init(Evas_Object *parent); -void edj_mgr_term(void); -view_data * edj_mgr_view_new(const char *group); -view_data *edj_mgr_view_get(Eina_Stringshare *group); -Evas_Object * edj_mgr_obj_get(void); -view_data *edj_mgr_view_switch_to(view_data *vd); -void edj_mgr_view_del(view_data *vd); -void edj_mgr_reload_need_set(Eina_Bool reload); -Eina_Bool edj_mgr_reload_need_get(void); -void edj_mgr_clear(void); - - diff --git a/src/include/edj_viewer.h b/src/include/edj_viewer.h deleted file mode 100644 index 8c118e0..0000000 --- a/src/include/edj_viewer.h +++ /dev/null @@ -1,17 +0,0 @@ -view_data * view_init(Evas_Object *parent, const char *group, - void (*del_cb)(void *data), void *data); -void view_term(view_data *vd); -Evas_Object *view_obj_get(view_data *vd); -void view_new(view_data *vd, const char *group); -void view_part_highlight_set(view_data *vd, const char *part_name); -void view_dummy_toggle(view_data *vd, Eina_Bool msg); -void view_program_run(view_data *vd, const char *program); -Eina_Stringshare *view_group_name_get(view_data *vd); -void *view_data_get(view_data *vd); -void view_scale_set(view_data *vd, double scale); -Eina_List *view_parts_list_get(view_data *vd); -Eina_List *view_images_list_get(view_data *vd); -Eina_List *view_programs_list_get(view_data *vd); -Eina_List *view_part_states_list_get(view_data *vd, const char *part); -Eina_List *view_program_targets_get(view_data *vd, const char *prog); -void view_string_list_free(Eina_List *list); diff --git a/src/include/goto.h b/src/include/goto.h index 4d4f3ee..1bc12a1 100644 --- a/src/include/goto.h +++ b/src/include/goto.h @@ -1,5 +1,5 @@ #define DEFAULT_GOTO_WIN_W 330 #define DEFAULT_GOTO_WIN_H 77 -void goto_open(edit_data *ed); +void goto_open(Evas_Object *enventor); void goto_close(void); Eina_Bool goto_is_opened(void); diff --git a/src/include/indent.h b/src/include/indent.h deleted file mode 100644 index 4d0d5ab..0000000 --- a/src/include/indent.h +++ /dev/null @@ -1,9 +0,0 @@ -#define TAB_SPACE 3 - -indent_data *indent_init(Eina_Strbuf *strbuf); -void indent_term(indent_data *id); -indent_data * syntax_indent_data_get(syntax_helper *sh); -int indent_space_get(indent_data *id, Evas_Object *entry); -void indent_insert_apply(indent_data *id, Evas_Object *entry, const char *insert, int cur_line); -Eina_Bool indent_delete_apply(indent_data *id, Evas_Object *entry, const char *del, int cur_line); - diff --git a/src/include/live_edit.h b/src/include/live_edit.h index 4653cf2..911732a 100644 --- a/src/include/live_edit.h +++ b/src/include/live_edit.h @@ -1,4 +1,4 @@ -void live_edit_init(edit_data *ed); +void live_edit_init(Evas_Object *enventor); void live_edit_term(void); void live_edit_toggle(void); void live_edit_cancel(void); diff --git a/src/include/menu.h b/src/include/menu.h index b90ca61..10e607d 100644 --- a/src/include/menu.h +++ b/src/include/menu.h @@ -1,4 +1,4 @@ -void menu_init(edit_data *ed); +void menu_init(Evas_Object *enventor); void menu_term(void); void menu_toggle(void); void menu_ctxpopup_register(Evas_Object *ctxpopup); diff --git a/src/include/newfile.h b/src/include/newfile.h index d6bf2b6..03a3d4e 100644 --- a/src/include/newfile.h +++ b/src/include/newfile.h @@ -1,4 +1,4 @@ void newfile_default_set(void); -void newfile_set(edit_data *ed); +void newfile_set(Evas_Object *enventor); Evas_Object * newfile_create(Evas_Object *parent, Evas_Smart_Cb selected_cb, void *data); diff --git a/src/include/redoundo.h b/src/include/redoundo.h deleted file mode 100644 index ee6f630..0000000 --- a/src/include/redoundo.h +++ /dev/null @@ -1,8 +0,0 @@ -redoundo_data *redoundo_init(Evas_Object *entry); -void redoundo_term(redoundo_data *rd); -void redoundo_clear(redoundo_data *rd); -void redoundo_text_push(redoundo_data *rd, const char *text, int pos, int length, Eina_Bool insert); -void redoundo_text_relative_push(redoundo_data *rd, const char *text); -void redoundo_entry_region_push(redoundo_data *rd, int cursor_pos, int cursor_pos2); -int redoundo_undo(redoundo_data *rd, Eina_Bool *changed); -int redoundo_redo(redoundo_data *rd, Eina_Bool *changed); diff --git a/src/include/search.h b/src/include/search.h index f18a03f..3d01e12 100644 --- a/src/include/search.h +++ b/src/include/search.h @@ -1,5 +1,5 @@ #define DEFAULT_SEARCH_WIN_W 330 #define DEFAULT_SEARCH_WIN_H 90 -void search_open(edit_data *ed); +void search_open(Evas_Object *enventor); void search_close(void); Eina_Bool search_is_opened(void); diff --git a/src/include/statusbar.h b/src/include/statusbar.h index f5b907b..2b7105c 100644 --- a/src/include/statusbar.h +++ b/src/include/statusbar.h @@ -1,6 +1,6 @@ Evas_Object *stats_init(Evas_Object *parent); void stats_term(void); -void stats_view_size_update(void); +void stats_view_size_update(Evas_Coord w, Evas_Coord h); void stats_cursor_pos_update(Evas_Coord x, Evas_Coord y, float rel_x, float rel_y); void stats_info_msg_update(const char *msg); void stats_line_num_update(int cur_line, int max_line); diff --git a/src/include/syntax_color.h b/src/include/syntax_color.h deleted file mode 100644 index 2125cbc..0000000 --- a/src/include/syntax_color.h +++ /dev/null @@ -1,6 +0,0 @@ -color_data *color_init(Eina_Strbuf *strbuf); -void color_term(color_data *cd); -const char *color_cancel(color_data *cd, const char *str, int length, int from_pos, int to_pos, char **from, char **to); -const char *color_apply(color_data *cd, const char *str, int length, char *from, char *to); -Eina_Bool color_ready(color_data *cd); - diff --git a/src/include/syntax_helper.h b/src/include/syntax_helper.h deleted file mode 100644 index 6caf176..0000000 --- a/src/include/syntax_helper.h +++ /dev/null @@ -1,4 +0,0 @@ -syntax_helper *syntax_init(void); -void syntax_term(syntax_helper *sh); -color_data *syntax_color_data_get(syntax_helper *sh); - diff --git a/src/include/template.h b/src/include/template.h deleted file mode 100644 index ea58703..0000000 --- a/src/include/template.h +++ /dev/null @@ -1,13 +0,0 @@ -#define REL1_X 0.25f -#define REL1_Y 0.25f -#define REL2_X 0.75f -#define REL2_Y 0.75f - -typedef enum { - TEMPLATE_INSERT_DEFAULT, - TEMPLATE_INSERT_LIVE_EDIT -} Template_Insert_Type; - -void template_part_insert(edit_data *ed, Edje_Part_Type part_type, Template_Insert_Type insert_type, float rel1_x, float rel1_y, float rel2_x, float rel2_y, const Eina_Stringshare *group_name); -void template_insert(edit_data *ed, Template_Insert_Type insert_type); - diff --git a/src/include/tools.h b/src/include/tools.h index 5dce118..a22e910 100644 --- a/src/include/tools.h +++ b/src/include/tools.h @@ -1,2 +1,2 @@ -Evas_Object *tools_create(Evas_Object *parent, edit_data *ed); +Evas_Object *tools_create(Evas_Object *parent, Evas_Object *enventor); diff --git a/src/lib/Enventor.h b/src/lib/Enventor.h new file mode 100644 index 0000000..3798ae8 --- /dev/null +++ b/src/lib/Enventor.h @@ -0,0 +1,32 @@ +#ifndef ENVENTOR_H +#define ENVENTOR_H + +#ifndef ENVENTOR_BETA_API_SUPPORT +#error "Enventor APIs still unstable. It's under BETA and changeable!! If you really want to use the APIs, Please define ENVENTOR_BETA_API_SUPPORT" +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#ifndef EFL_NOLEGACY_API_SUPPORT +#include "Enventor_Legacy.h" +#endif + +#ifdef EFL_EO_API_SUPPORT +#include "Enventor_Eo.h" +#endif + +EAPI int enventor_init(int argc, char **argv); +EAPI int enventor_shutdown(void); +EAPI Evas_Object *enventor_object_add(Evas_Object *parent); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/lib/Enventor.h.in b/src/lib/Enventor.h.in new file mode 100644 index 0000000..3798ae8 --- /dev/null +++ b/src/lib/Enventor.h.in @@ -0,0 +1,32 @@ +#ifndef ENVENTOR_H +#define ENVENTOR_H + +#ifndef ENVENTOR_BETA_API_SUPPORT +#error "Enventor APIs still unstable. It's under BETA and changeable!! If you really want to use the APIs, Please define ENVENTOR_BETA_API_SUPPORT" +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include + +#ifndef EFL_NOLEGACY_API_SUPPORT +#include "Enventor_Legacy.h" +#endif + +#ifdef EFL_EO_API_SUPPORT +#include "Enventor_Eo.h" +#endif + +EAPI int enventor_init(int argc, char **argv); +EAPI int enventor_shutdown(void); +EAPI Evas_Object *enventor_object_add(Evas_Object *parent); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/lib/Enventor_Eo.h b/src/lib/Enventor_Eo.h new file mode 100644 index 0000000..ced23ed --- /dev/null +++ b/src/lib/Enventor_Eo.h @@ -0,0 +1 @@ +#include "enventor_object.eo.h" diff --git a/src/lib/Enventor_Legacy.h b/src/lib/Enventor_Legacy.h new file mode 100644 index 0000000..c24a867 --- /dev/null +++ b/src/lib/Enventor_Legacy.h @@ -0,0 +1,30 @@ +typedef enum +{ + ENVENTOR_OUT_EDJ = 0, + ENVENTOR_RES_IMAGE, + ENVENTOR_RES_SOUND, + ENVENTOR_RES_FONT, + ENVENTOR_RES_DATA, + ENVENTOR_PATH_TYPE_LAST +} Enventor_Path_Type; + +typedef struct +{ + Evas_Coord x; + Evas_Coord y; + float relx; + float rely; +} Enventor_Live_View_Cursor; + +typedef struct +{ + Evas_Coord w; + Evas_Coord h; +} Enventor_Live_View_Size; + +EAPI int enventor_init(int argc, char **argv); +EAPI int enventor_shutdown(void); +EAPI Evas_Object *enventor_object_add(Evas_Object *parent); +EAPI Eina_Bool enventor_object_file_set(Evas_Object *obj, const char *file); + +#include "enventor_object.eo.legacy.h" diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am new file mode 100644 index 0000000..36498a4 --- /dev/null +++ b/src/lib/Makefile.am @@ -0,0 +1,56 @@ +AUTOMAKE_OPTIONS = 1.4 foreign +MAINTAINERCLEANFILES = Makefile.in + +CLEANFILES = + +EOLIAN_FLAGS = @DEPS_EOLIAN_FLAGS@ \ + -I$(top_srcdir)/src/lib + +include $(top_srcdir)/Makefile_Eolian_Helper.am +include $(top_srcdir)/Makefile_Eolian_Cxx_Helper.am + +AM_CPPFLAGS = -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \ + -DPACKAGE_BIN_DIR=\"$(bindir)\" \ + -DPACKAGE_LIB_DIR=\"$(libdir)\" \ + -I$(top_srcdir)/src/bin \ + -I$(top_srcdir)/src/include \ + @ENVENTOR_CFLAGS@ + +lib_LTLIBRARIES = libenventor.la + +includes_HEADERS = \ + Enventor.h \ + Enventor_Legacy.h \ + Enventor_Eo.h +includesdir = $(includedir)/enventor-@ENVENTOR_VERSION_MAJOR@ + +libenventor_la_SOURCES = \ + enventor_main.c \ + enventor_smart.c \ + edc_parser.c \ + indent.c \ + redoundo.c \ + syntax_helper.c \ + syntax_color.c \ + ctxpopup.c \ + edc_editor.c \ + auto_comp.c \ + build.c \ + template.c \ + edj_mgr.c \ + edj_viewer.c \ + dummy_obj.c + +libenventor_la_CFLAGS = @ENVENTOR_CFLAGS@ +libenventor_la_LIBADD = @ENVENTOR_LIBS@ + +libenventor_la_LDFLAGS = $(LTLIBINTL) -version-info @version_info@ + +BUILT_SOURCES = \ + enventor_object.eo.c \ + enventor_object.eo.h \ + enventor_object.eo.legacy.h + +enventoreolianfilesdir = $(datadir)/eolian/include/enventor-@ENVENTOR_VERSION_MAJOR@ +enventoreolianfiles_DATA = enventor_object.eo +EXTRA_DIST = ${enventoreolianfiles_DATA} diff --git a/src/bin/auto_comp.c b/src/lib/auto_comp.c similarity index 91% rename from src/bin/auto_comp.c rename to src/lib/auto_comp.c index 81a4eb7..6a8838e 100644 --- a/src/bin/auto_comp.c +++ b/src/lib/auto_comp.c @@ -1,6 +1,12 @@ -#include +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#define ENVENTOR_BETA_API_SUPPORT 1 + +#include +#include "enventor_private.h" #include "auto_comp_code.h" -#include "common.h" #define QUEUE_SIZE 20 #define COMPSET_PAIR_MINIMUM 1 @@ -26,6 +32,7 @@ typedef struct autocomp_s Ecore_Thread *init_thread; Eina_Bool anchor_visible : 1; Eina_Bool initialized : 1; + Eina_Bool enabled : 1; } autocomp_data; static autocomp_data *g_ad = NULL; @@ -33,6 +40,10 @@ static autocomp_data *g_ad = NULL; #define COMPDATA_SET(ad, key, txt, cursor_offset, line_back) \ compdata_set(ad, idx++, key, (char **)(&txt), cursor_offset, line_back, txt##_LINE_CNT) +/*****************************************************************************/ +/* Internal method implementation */ +/*****************************************************************************/ + static void compdata_set(autocomp_data *ad, int idx, char *key, char **txt, int cursor_offset, int line_back, int line_cnt) { @@ -151,7 +162,7 @@ queue_reset(autocomp_data *ad) static void compset_list_update(autocomp_data *ad) { - if (!config_auto_complete_get() || !ad->initialized) return; + if (!ad->enabled || !ad->initialized) return; if (ad->queue_pos < COMPSET_PAIR_MINIMUM) return; int i; @@ -351,8 +362,7 @@ candidate_list_show(autocomp_data *ad) { //Decide the Tooltip direction Elm_Tooltip_Orient tooltip_orient = ELM_TOOLTIP_ORIENT_BOTTOM; - Evas_Object *layout = base_layout_get(); - evas_object_geometry_get(layout, NULL, NULL, NULL, &h); + evas_object_geometry_get(edit_obj_get(ad->ed), NULL, NULL, NULL, &h); if ((cy + y) > (h / 2)) tooltip_orient = ELM_TOOLTIP_ORIENT_TOP; //Tooltip set @@ -450,6 +460,10 @@ list_item_move(autocomp_data *ad, Eina_Bool up) evas_object_smart_callback_add(entry, "unfocused", anchor_unfocused_cb, ad); } +/*****************************************************************************/ +/* Externally accessible calls */ +/*****************************************************************************/ + void autocomp_target_set(edit_data *ed) { @@ -471,6 +485,8 @@ autocomp_target_set(edit_data *ed) evas_object_smart_callback_del(entry, "press", entry_press_cb); evas_object_event_callback_del(entry, EVAS_CALLBACK_MOVE, entry_move_cb); + evas_object_del(ad->anchor); + ad->anchor = NULL; ad->ed = NULL; } @@ -486,12 +502,47 @@ autocomp_target_set(edit_data *ed) evas_object_smart_callback_add(entry, "press", entry_press_cb, ad); evas_object_event_callback_add(entry, EVAS_CALLBACK_MOVE, entry_move_cb, ad); + + ad->anchor = elm_button_add(edit_obj_get(ed)); ad->ed = ed; } +Eina_Bool +autocomp_event_dispatch(const char *key) +{ + autocomp_data *ad = g_ad; + if (!ad || !ad->anchor_visible) return EINA_FALSE; + + //Cancel the auto complete. + if (!strcmp(key, "BackSpace")) + { + queue_reset(ad); + entry_anchor_off(ad); + return EINA_TRUE; + } + if (!strcmp(key, "Return")) + { + insert_completed_text(ad); + queue_reset(ad); + edit_syntax_color_partial_apply(ad->ed, -1); + return EINA_TRUE; + } + if (!strcmp(key, "Up")) + { + list_item_move(ad, EINA_TRUE); + return EINA_TRUE; + } + if (!strcmp(key, "Down")) + { + list_item_move(ad, EINA_FALSE); + return EINA_TRUE; + } + + return EINA_FALSE; +} void -autocomp_init(Evas_Object *parent) +autocomp_init(void) { autocomp_data *ad = calloc(1, sizeof(autocomp_data)); if (!ad) @@ -499,9 +550,9 @@ autocomp_init(Evas_Object *parent) EINA_LOG_ERR("Failed to allocate Memory!"); return; } + ad->init_thread = ecore_thread_run(init_thread_cb, init_thread_end_cb, init_thread_cancel_cb, ad); - ad->anchor = elm_button_add(parent); ad->queue_pos = -1; g_ad = ad; } @@ -522,47 +573,16 @@ autocomp_term(void) } void -autocomp_toggle(void) +autocomp_enabled_set(Eina_Bool enabled) { - Eina_Bool toggle = !config_auto_complete_get(); - if (toggle) stats_info_msg_update("Auto Completion Enabled."); - else stats_info_msg_update("Auto Completion Disabled."); - config_auto_complete_set(toggle); + autocomp_data *ad = g_ad; + enabled = !!enabled; + ad->enabled = enabled; } Eina_Bool -autocomp_key_event_hook(const char *key) +autocomp_enabled_get(void) { autocomp_data *ad = g_ad; - if (!ad || !ad->anchor_visible) return EINA_FALSE; - - //Cancel the auto complete. - if (!strcmp(key, "BackSpace")) - { - queue_reset(ad); - entry_anchor_off(ad); - return EINA_TRUE; - } - - if (!strcmp(key, "Return")) - { - insert_completed_text(ad); - queue_reset(ad); - edit_syntax_color_partial_apply(ad->ed, -1); - return EINA_TRUE; - } - - if (!strcmp(key, "Up")) - { - list_item_move(ad, EINA_TRUE); - return EINA_TRUE; - } - - if (!strcmp(key, "Down")) - { - list_item_move(ad, EINA_FALSE); - return EINA_TRUE; - } - - return EINA_FALSE; + return ad->enabled; } diff --git a/src/include/auto_comp_code.h b/src/lib/auto_comp_code.h similarity index 100% rename from src/include/auto_comp_code.h rename to src/lib/auto_comp_code.h diff --git a/src/lib/build.c b/src/lib/build.c new file mode 100644 index 0000000..c7570f9 --- /dev/null +++ b/src/lib/build.c @@ -0,0 +1,251 @@ +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#define ENVENTOR_BETA_API_SUPPORT 1 + +#include +#include "enventor_private.h" + +typedef struct builder_s +{ + Eina_Strbuf *strbuf; + char *build_cmd; + void (*noti_cb)(void *data, const char *msg); + void *noti_data; + Eina_Stringshare *edc_path; + Eina_List *pathes_list[5]; + Ecore_Event_Handler *event_data_handler; + Ecore_Event_Handler *event_err_handler; + + Eina_Bool build_cmd_changed : 1; + +} build_data; + +static build_data *g_bd = NULL; + +/*****************************************************************************/ +/* Internal method implementation */ +/*****************************************************************************/ + +static Eina_Bool +exe_event_error_cb(void *data, int type EINA_UNUSED, void *event_info) +{ + build_data *bd = data; + Ecore_Exe_Event_Data *ev = event_info; + Ecore_Exe_Event_Data_Line *el; + + eina_strbuf_reset(bd->strbuf); + + for (el = ev->lines; el && el->line; el++) + { + eina_strbuf_append(bd->strbuf, el->line); + eina_strbuf_append_char(bd->strbuf, '\n'); + } + + bd->noti_cb(bd->noti_data, eina_strbuf_string_get(bd->strbuf)); + + return ECORE_CALLBACK_RENEW; +} + +static Eina_Strbuf * +strbuf_path_get(build_data *bd, Enventor_Path_Type type, const char *syntax) +{ + Eina_Strbuf *strbuf = eina_strbuf_new(); + if (!strbuf) + { + EINA_LOG_ERR("Failed to new strbuf"); + return NULL; + } + + Eina_List *l; + Eina_Stringshare *path; + EINA_LIST_FOREACH(bd->pathes_list[type], l, path) + { + eina_strbuf_append(strbuf, syntax); + eina_strbuf_append(strbuf, path); + } + return strbuf; +} + +static void +build_cmd_set(build_data *bd) +{ + if (!bd->build_cmd_changed) return; + free(bd->build_cmd); + bd->build_cmd = NULL; + + Eina_Strbuf *strbuf_img = NULL; + Eina_Strbuf *strbuf_snd = NULL; + Eina_Strbuf *strbuf_fnt = NULL; + Eina_Strbuf *strbuf_dat = NULL; + + //Image + strbuf_img = strbuf_path_get(bd, ENVENTOR_RES_IMAGE, " -id "); + if (!strbuf_img) goto err; + + strbuf_snd = strbuf_path_get(bd, ENVENTOR_RES_SOUND, " -sd "); + if (!strbuf_snd) goto err; + + strbuf_fnt = strbuf_path_get(bd, ENVENTOR_RES_FONT, " -fd "); + if (!strbuf_fnt) goto err; + + strbuf_dat = strbuf_path_get(bd, ENVENTOR_RES_DATA, " -dd "); + if (!strbuf_dat) goto err; + + Eina_Strbuf *strbuf = eina_strbuf_new(); + if (!strbuf) + { + EINA_LOG_ERR("Failed to new strbuf"); + goto err; + } + + eina_strbuf_append_printf(strbuf, + "edje_cc -fastcomp %s %s -id %s/images -sd %s/sounds -fd %s/fonts -dd %s/data %s %s %s %s", + bd->edc_path, + (char *) eina_list_data_get(bd->pathes_list[ENVENTOR_OUT_EDJ]), + elm_app_data_dir_get(), + elm_app_data_dir_get(), + elm_app_data_dir_get(), + elm_app_data_dir_get(), + eina_strbuf_string_get(strbuf_img), + eina_strbuf_string_get(strbuf_snd), + eina_strbuf_string_get(strbuf_fnt), + eina_strbuf_string_get(strbuf_dat)); + bd->build_cmd = eina_strbuf_string_steal(strbuf); + bd->build_cmd_changed = EINA_FALSE; + +err: + eina_strbuf_free(strbuf); + eina_strbuf_free(strbuf_img); + eina_strbuf_free(strbuf_snd); + eina_strbuf_free(strbuf_fnt); + eina_strbuf_free(strbuf_dat); +} + +void +build_edc(void) +{ + build_data *bd = g_bd; + + build_cmd_set(bd); + + if (!bd->build_cmd) + { + EINA_LOG_ERR("Build Command is not set!"); + return; + } + Ecore_Exe_Flags flags = + (ECORE_EXE_PIPE_READ_LINE_BUFFERED | ECORE_EXE_PIPE_READ | + ECORE_EXE_PIPE_ERROR_LINE_BUFFERED | ECORE_EXE_PIPE_ERROR); + ecore_exe_pipe_run(bd->build_cmd, flags, NULL); +} + +/*****************************************************************************/ +/* Externally accessible calls */ +/*****************************************************************************/ + +void +build_init(void) +{ + build_data *bd = g_bd; + if (bd) return; + + bd = calloc(1, sizeof(build_data)); + if (!bd) + { + EINA_LOG_ERR("Failed to allocate Memory!"); + return; + } + g_bd = bd; + + bd->event_data_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DATA, + exe_event_error_cb, bd); + bd->event_err_handler = ecore_event_handler_add(ECORE_EXE_EVENT_ERROR, + exe_event_error_cb, bd); + bd->strbuf = eina_strbuf_new(); +} + +void +build_term(void) +{ + build_data *bd = g_bd; + eina_stringshare_del(bd->edc_path); + + int i; + for (i = 0; i < (sizeof(bd->pathes_list) / sizeof(Eina_List *)); i++) + { + Eina_Stringshare *path; + EINA_LIST_FREE(bd->pathes_list[i], path) + eina_stringshare_del(path); + } + + ecore_event_handler_del(bd->event_data_handler); + ecore_event_handler_del(bd->event_err_handler); + eina_strbuf_free(bd->strbuf); + free(bd->build_cmd); + free(bd); + g_bd = NULL; +} + +void +build_err_noti_cb_set(void (*cb)(void *data, const char *msg), void *data) +{ + build_data *bd = g_bd; + bd->noti_cb = cb; + bd->noti_data = data; +} + +Eina_List * +build_path_get(Enventor_Path_Type type) +{ + build_data *bd = g_bd; + return bd->pathes_list[type]; +} + +Eina_Bool +build_path_set(Enventor_Path_Type type, const Eina_List *pathes) +{ + if ((type < ENVENTOR_OUT_EDJ) || (type >= ENVENTOR_PATH_TYPE_LAST)) + return EINA_FALSE; + + build_data *bd = g_bd; + Eina_Stringshare *path; + Eina_List *l; + + //don't allow null edj path + if (!pathes && (type == ENVENTOR_OUT_EDJ)) return EINA_FALSE; + + EINA_LIST_FREE(bd->pathes_list[type], path) + eina_stringshare_del(path); + + EINA_LIST_FOREACH((Eina_List *)pathes, l, path) + bd->pathes_list[type] = eina_list_append(bd->pathes_list[type], + eina_stringshare_add(path)); + bd->build_cmd_changed = EINA_TRUE; + + return EINA_TRUE; +} + +const char * +build_edj_path_get(void) +{ + build_data *bd = g_bd; + return eina_list_data_get(bd->pathes_list[ENVENTOR_OUT_EDJ]); +} + +const char * +build_edc_path_get(void) +{ + build_data *bd = g_bd; + return bd->edc_path; +} + +void +build_edc_path_set(const char *edc_path) +{ + build_data *bd = g_bd; + if (bd->edc_path == edc_path) return; + eina_stringshare_del(bd->edc_path); + bd->edc_path = eina_stringshare_add(edc_path); +} diff --git a/src/bin/ctxpopup.c b/src/lib/ctxpopup.c similarity index 93% rename from src/bin/ctxpopup.c rename to src/lib/ctxpopup.c index d1487f8..c63914d 100644 --- a/src/bin/ctxpopup.c +++ b/src/lib/ctxpopup.c @@ -1,5 +1,11 @@ -#include -#include "common.h" +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#define ENVENTOR_BETA_API_SUPPORT 1 + +#include +#include "enventor_private.h" typedef struct ctxpopup_data_s { Evas_Smart_Cb selected_cb; @@ -8,6 +14,10 @@ typedef struct ctxpopup_data_s { void *data; } ctxpopup_data; +/*****************************************************************************/ +/* Internal method implementation */ +/*****************************************************************************/ + static void btn_plus_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -231,6 +241,94 @@ end: return ret; } +static void +image_relay(ctxpopup_data *ctxdata, Eina_Bool up) +{ + if (up) + ctxdata->relay_cb(ctxdata->data, ctxdata->ctxpopup, (void *) 0); + else + ctxdata->relay_cb(ctxdata->data, ctxdata->ctxpopup, (void *) 1); +} + +static void +ctxpopup_mouse_wheel_cb(void *data, Evas *e EINA_UNUSED, + Evas_Object *obj EINA_UNUSED, void *event_info) +{ + Evas_Event_Mouse_Wheel *ev = event_info; + ctxpopup_data *ctxdata = data; + + if (ev->z > 0) image_relay(ctxdata, EINA_FALSE); + else if (ev->z < 0) image_relay(ctxdata, EINA_TRUE); +} + +static void +ctxpopup_key_down_cb(void *data, Evas *e EINA_UNUSED, + Evas_Object *obj EINA_UNUSED, void *event_info) +{ + Evas_Event_Key_Down *ev = event_info; + ctxpopup_data *ctxdata = data; + + if (!strcmp(ev->key, "Down")) image_relay(ctxdata, EINA_FALSE); + else if (!strcmp(ev->key, "Up")) image_relay(ctxdata, EINA_TRUE); +} + +/*****************************************************************************/ +/* Externally accessible calls */ +/*****************************************************************************/ + +Evas_Object * +ctxpopup_img_preview_create(edit_data *ed, + const char *imgpath, + Evas_Smart_Cb ctxpopup_dismiss_cb, + Evas_Smart_Cb ctxpopup_relay_cb) +{ + //create ctxpopup + Evas_Object *ctxpopup = elm_ctxpopup_add(edit_obj_get(ed)); + if (!ctxpopup) return NULL; + + elm_object_style_set(ctxpopup, "enventor"); + elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_LEFT, + ELM_CTXPOPUP_DIRECTION_UP, + ELM_CTXPOPUP_DIRECTION_DOWN, + ELM_CTXPOPUP_DIRECTION_RIGHT); + //ctxpopup data + ctxpopup_data *ctxdata = malloc(sizeof(ctxpopup_data)); + if (!ctxdata) + { + EINA_LOG_ERR("Failed to allocate Memory!"); + return NULL; + } + ctxdata->relay_cb = ctxpopup_relay_cb; + ctxdata->data = ed; + ctxdata->ctxpopup = ctxpopup; + evas_object_data_set(ctxpopup, "ctxpopup_data", ctxdata); + + //Layout + Evas_Object *layout = elm_layout_add(ctxpopup); + elm_layout_file_set(layout, EDJE_PATH, "preview_layout"); + elm_object_content_set(ctxpopup, layout); + + Evas *e = evas_object_evas_get(ctxpopup); + Evas_Object *img = evas_object_image_filled_add(e); + evas_object_image_file_set(img, imgpath, NULL); + Evas_Coord w, h; + evas_object_image_size_get(img, &w, &h); + evas_object_size_hint_aspect_set(img, EVAS_ASPECT_CONTROL_BOTH, w, h); + elm_object_part_content_set(layout, "elm.swallow.img", img); + + evas_object_smart_callback_add(ctxpopup, "dismissed", ctxpopup_dismiss_cb, + ed); + evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL, ctxpopup_del_cb, + ctxdata); + evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_KEY_DOWN, + ctxpopup_key_down_cb, ctxdata); + evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_MOUSE_WHEEL, + ctxpopup_mouse_wheel_cb, ctxdata); + evas_object_focus_set(ctxpopup, EINA_TRUE); + + return ctxpopup; +} + Evas_Object * ctxpopup_candidate_list_create(edit_data *ed, attr_value *attr, double slider_val, @@ -238,10 +336,10 @@ ctxpopup_candidate_list_create(edit_data *ed, attr_value *attr, Evas_Smart_Cb ctxpopup_selected_cb) { //create ctxpopup - Evas_Object *ctxpopup = elm_ctxpopup_add(base_layout_get()); + Evas_Object *ctxpopup = elm_ctxpopup_add(edit_obj_get(ed)); if (!ctxpopup) return NULL; - elm_object_style_set(ctxpopup, elm_app_name_get()); + elm_object_style_set(ctxpopup, "enventor"); //ctxpopup data ctxpopup_data *ctxdata = malloc(sizeof(ctxpopup_data)); @@ -305,85 +403,3 @@ err: return NULL; } -static void -image_relay(ctxpopup_data *ctxdata, Eina_Bool up) -{ - if (up) - ctxdata->relay_cb(ctxdata->data, ctxdata->ctxpopup, (void *) 0); - else - ctxdata->relay_cb(ctxdata->data, ctxdata->ctxpopup, (void *) 1); -} - -static void -ctxpopup_mouse_wheel_cb(void *data, Evas *e EINA_UNUSED, - Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Wheel *ev = event_info; - ctxpopup_data *ctxdata = data; - - if (ev->z > 0) image_relay(ctxdata, EINA_FALSE); - else if (ev->z < 0) image_relay(ctxdata, EINA_TRUE); -} - -static void -ctxpopup_key_down_cb(void *data, Evas *e EINA_UNUSED, - Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Key_Down *ev = event_info; - ctxpopup_data *ctxdata = data; - - if (!strcmp(ev->key, "Down")) image_relay(ctxdata, EINA_FALSE); - else if (!strcmp(ev->key, "Up")) image_relay(ctxdata, EINA_TRUE); -} - -Evas_Object * -ctxpopup_img_preview_create(edit_data *ed, - const char *imgpath, - Evas_Smart_Cb ctxpopup_dismiss_cb, - Evas_Smart_Cb ctxpopup_relay_cb) -{ - //create ctxpopup - Evas_Object *ctxpopup = elm_ctxpopup_add(base_layout_get()); - if (!ctxpopup) return NULL; - - elm_object_style_set(ctxpopup, elm_app_name_get()); - elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_LEFT, - ELM_CTXPOPUP_DIRECTION_UP, - ELM_CTXPOPUP_DIRECTION_DOWN, - ELM_CTXPOPUP_DIRECTION_RIGHT); - //ctxpopup data - ctxpopup_data *ctxdata = malloc(sizeof(ctxpopup_data)); - if (!ctxdata) - { - EINA_LOG_ERR("Failed to allocate Memory!"); - return NULL; - } - ctxdata->relay_cb = ctxpopup_relay_cb; - ctxdata->data = ed; - ctxdata->ctxpopup = ctxpopup; - evas_object_data_set(ctxpopup, "ctxpopup_data", ctxdata); - - //Layout - Evas_Object *layout = elm_layout_add(ctxpopup); - elm_layout_file_set(layout, EDJE_PATH, "preview_layout"); - elm_object_content_set(ctxpopup, layout); - - Evas *e = evas_object_evas_get(ctxpopup); - Evas_Object *img = evas_object_image_filled_add(e); - evas_object_image_file_set(img, imgpath, NULL); - Evas_Coord w, h; - evas_object_image_size_get(img, &w, &h); - evas_object_size_hint_aspect_set(img, EVAS_ASPECT_CONTROL_BOTH, w, h); - elm_object_part_content_set(layout, "elm.swallow.img", img); - - evas_object_smart_callback_add(ctxpopup, "dismissed", ctxpopup_dismiss_cb, - ed); - evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL, ctxpopup_del_cb, - ctxdata); - evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_KEY_DOWN, - ctxpopup_key_down_cb, ctxdata); - evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_MOUSE_WHEEL, - ctxpopup_mouse_wheel_cb, ctxdata); - evas_object_focus_set(ctxpopup, EINA_TRUE); - return ctxpopup; -} diff --git a/src/bin/dummy_obj.c b/src/lib/dummy_obj.c similarity index 85% rename from src/bin/dummy_obj.c rename to src/lib/dummy_obj.c index 56e4d7c..af36417 100644 --- a/src/bin/dummy_obj.c +++ b/src/lib/dummy_obj.c @@ -1,8 +1,13 @@ +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#define ENVENTOR_BETA_API_SUPPORT 1 #define EDJE_EDIT_IS_UNSTABLE_AND_I_KNOW_ABOUT_IT 1 -#include +#include #include -#include "common.h" +#include "enventor_private.h" typedef struct part_obj_s { @@ -19,7 +24,11 @@ typedef struct dummy_obj_s const char *DUMMYOBJ = "dummy_obj"; -void +/*****************************************************************************/ +/* Internal method implementation */ +/*****************************************************************************/ + +static void dummy_objs_update(dummy_obj *dummy) { Eina_List *parts = edje_edit_parts_list_get(dummy->layout); @@ -104,6 +113,10 @@ layout_del_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, dummy_obj_del(obj); } +/*****************************************************************************/ +/* Externally accessible calls */ +/*****************************************************************************/ + void dummy_obj_update(Evas_Object *layout) { @@ -135,7 +148,8 @@ dummy_obj_new(Evas_Object *layout) dummy->animator = animator; } -void dummy_obj_del(Evas_Object *layout) +void +dummy_obj_del(Evas_Object *layout) { dummy_obj *dummy = evas_object_data_get(layout, DUMMYOBJ); if (!dummy) return; diff --git a/src/bin/edc_editor.c b/src/lib/edc_editor.c similarity index 88% rename from src/bin/edc_editor.c rename to src/lib/edc_editor.c index 5a9cd13..ceb445c 100644 --- a/src/bin/edc_editor.c +++ b/src/lib/edc_editor.c @@ -1,5 +1,12 @@ -#include -#include "common.h" +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#define ENVENTOR_BETA_API_SUPPORT 1 + +#include +#include +#include "enventor_private.h" //FIXME: Make flexible const int MAX_LINE_DIGIT_CNT = 10; @@ -20,7 +27,7 @@ struct editor_s Evas_Object *en_line; Evas_Object *scroller; Evas_Object *layout; - Evas_Object *parent; + Evas_Object *enventor; syntax_helper *sh; parser_data *pd; @@ -38,13 +45,21 @@ struct editor_s Eina_Stringshare *group_name); void *view_sync_cb_data; int select_pos; + double font_scale; Eina_Bool edit_changed : 1; Eina_Bool linenumber : 1; Eina_Bool ctrl_pressed : 1; Eina_Bool on_select_recover : 1; + Eina_Bool auto_indent : 1; + Eina_Bool part_highlight : 1; + Eina_Bool ctxpopup: 1; }; +/*****************************************************************************/ +/* Internal method implementation */ +/*****************************************************************************/ + static Eina_Bool image_preview_show(edit_data *ed, char *cur, Evas_Coord x, Evas_Coord y); @@ -193,37 +208,6 @@ syntax_color_thread_cancel_cb(void *data, Ecore_Thread *thread EINA_UNUSED) free(td); } -void -syntax_color_full_update(edit_data *ed, Eina_Bool thread) -{ - if (ed->syntax_color_lock > 0) return; - - ecore_timer_del(ed->syntax_color_timer); - ed->syntax_color_timer = NULL; - - if (thread) - { - syntax_color_td *td = calloc(1, sizeof(syntax_color_td)); - if (!td) - { - EINA_LOG_ERR("Failed to allocate Memory!"); - return; - } - td->ed = ed; - Evas_Object *tb = elm_entry_textblock_get(ed->en_edit); - td->text = (char *) evas_object_textblock_text_markup_get(tb); - ed->syntax_color_thread = - ecore_thread_run(syntax_color_thread_cb, - syntax_color_thread_end_cb, - syntax_color_thread_cancel_cb, - td); - } - else - { - syntax_color_apply(ed, EINA_FALSE); - } -} - static void edit_changed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) { @@ -250,7 +234,7 @@ edit_changed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) edit_line_increase(ed, increase); } - if (config_auto_indent_get()) + if (ed->auto_indent) indent_insert_apply(syntax_indent_data_get(ed->sh), ed->en_edit, info->change.insert.content, ed->cur_line); } @@ -258,7 +242,7 @@ edit_changed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) { int decrease = parser_line_cnt_get(ed->pd, info->change.del.content); - if (config_auto_indent_get()) + if (ed->auto_indent) { if (indent_delete_apply(syntax_indent_data_get(ed->sh), ed->en_edit, info->change.del.content, @@ -274,50 +258,6 @@ edit_changed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) syntax_color_partial_update(ed, SYNTAX_COLOR_DEFAULT_TIME); } -static void -save_msg_show(edit_data *ed) -{ - if (!config_stats_bar_get()) return; - - char buf[PATH_MAX]; - - if (ed->edit_changed) - snprintf(buf, sizeof(buf), "File saved. \"%s\"", config_edc_path_get()); - else - snprintf(buf, sizeof(buf), "Already saved. \"%s\"", config_edc_path_get()); - - stats_info_msg_update(buf); -} - -Eina_Bool -edit_save(edit_data *ed) -{ - if (!ed->edit_changed) - { - save_msg_show(ed); - return EINA_TRUE; - } - - const char *text = elm_entry_entry_get(ed->en_edit); - char *utf8 = elm_entry_markup_to_utf8(text); - - FILE *fp = fopen(config_edc_path_get(), "w"); - if (!fp) return EINA_FALSE; - - fputs(utf8, fp); - fclose(fp); - - free(utf8); - - save_msg_show(ed); - //FIXME: If compile edc here? we can edit_changed FALSE; - //edit_changed_set(ed, EINA_FALSE); - - edit_view_sync(ed); - - return EINA_TRUE; -} - static void ctxpopup_candidate_dismiss_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) @@ -326,6 +266,7 @@ ctxpopup_candidate_dismiss_cb(void *data, Evas_Object *obj, evas_object_del(obj); elm_object_disabled_set(ed->layout, EINA_FALSE); elm_object_focus_set(ed->en_edit, EINA_TRUE); + evas_object_smart_callback_call(ed->enventor, SIG_CTXPOPUP_DISMISSED, NULL); } static void @@ -337,7 +278,8 @@ ctxpopup_candidate_selected_cb(void *data, Evas_Object *obj, void *event_info) elm_entry_entry_insert(ed->en_edit, text); elm_ctxpopup_dismiss(obj); edit_changed_set(ed, EINA_TRUE); - edit_save(ed); + evas_object_smart_callback_call(ed->enventor, SIG_CTXPOPUP_SELECTED, + (void *)text); } static void @@ -354,57 +296,6 @@ ctxpopup_preview_dismiss_cb(void *data, Evas_Object *obj, elm_object_focus_set(ed->en_edit, EINA_TRUE); } -void -edit_syntax_color_full_apply(edit_data *ed, Eina_Bool force) -{ - int lock; - - if (force) - { - lock = ed->syntax_color_lock; - ed->syntax_color_lock = -1; - } - syntax_color_full_update(ed, EINA_FALSE); - - if (force) ed->syntax_color_lock = lock; - else ed->syntax_color_lock++; -} - -void -edit_syntax_color_partial_apply(edit_data *ed, double interval) -{ - if (ed->syntax_color_lock > 0) ed->syntax_color_lock = 0; - if (interval < 0) syntax_color_partial_update(ed, SYNTAX_COLOR_DEFAULT_TIME); - else syntax_color_partial_update(ed, interval); -} - -static void -cur_line_pos_set(edit_data *ed, Eina_Bool force) -{ - Evas_Coord y, h; - elm_entry_cursor_geometry_get(ed->en_edit, NULL, &y, NULL, &h); - int line = (y / h) + 1; - - if (line < 0) line = 1; - if (!force && (ed->cur_line == line)) return; - ed->cur_line = line; - - if (!config_stats_bar_get()) return; - stats_line_num_update(ed->cur_line, ed->line_max); -} - -static void -program_run(edit_data *ed, char *cur) -{ - char *program = parser_name_get(ed->pd, cur); - if (program) - { - view_data *vd = edj_mgr_view_get(NULL); - view_program_run(vd, program); - free(program); - } -} - //This function is called when user press up/down key or mouse wheel up/down static void preview_img_relay_show(edit_data *ed, Evas_Object *ctxpopup, Eina_Bool next) @@ -457,7 +348,9 @@ preview_img_relay_show(edit_data *ed, Evas_Object *ctxpopup, Eina_Bool next) cursor_pos); } end: +#if 0 menu_ctxpopup_unregister(ctxpopup); +#endif elm_ctxpopup_dismiss(ctxpopup); } @@ -478,7 +371,7 @@ image_preview_show(edit_data *ed, char *cur, Evas_Coord x, Evas_Coord y) char fullpath[PATH_MAX]; //1.Find the image path. - Eina_List *list = config_edc_img_path_list_get(); + Eina_List *list = build_path_get(ENVENTOR_RES_IMAGE); Eina_List *l; char *path; Eina_Bool found = EINA_FALSE; @@ -516,16 +409,14 @@ image_preview_show(edit_data *ed, char *cur, Evas_Coord x, Evas_Coord y) evas_object_move(ctxpopup, x, y); evas_object_show(ctxpopup); +#if 0 menu_ctxpopup_register(ctxpopup); +#endif elm_object_disabled_set(ed->layout, EINA_TRUE); succeed = EINA_TRUE; } else { - char buf[PATH_MAX]; - snprintf(buf, sizeof(buf), "Failed to load the image. \"%s\"", - filename); - stats_info_msg_update(buf); succeed = EINA_FALSE; } @@ -551,10 +442,24 @@ candidate_list_show(edit_data *ed, char *text, char *cur, char *selected) evas_pointer_output_xy_get(evas_object_evas_get(ed->en_edit), &x, &y); evas_object_move(ctxpopup, x, y); evas_object_show(ctxpopup); +#if 0 menu_ctxpopup_register(ctxpopup); +#endif elm_object_disabled_set(ed->layout, EINA_TRUE); } +static void +program_run(edit_data *ed, char *cur) +{ + char *program = parser_name_get(ed->pd, cur); + if (program) + { + view_data *vd = edj_mgr_view_get(NULL); + view_program_run(vd, program); + free(program); + } +} + static void edit_cursor_double_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) @@ -562,9 +467,11 @@ edit_cursor_double_clicked_cb(void *data, Evas_Object *obj, edit_data *ed = data; if (ed->ctrl_pressed) return; + if (!ed->ctxpopup) return; char *selected = (char *) elm_entry_selection_get(obj); if (!selected) return; + selected = elm_entry_markup_to_utf8(selected); if (selected[0] == '\"') { @@ -599,7 +506,7 @@ edit_cursor_double_clicked_cb(void *data, Evas_Object *obj, static void cur_name_get_cb(void *data, Eina_Stringshare *part_name, - Eina_Stringshare *group_name) + Eina_Stringshare *group_name) { edit_data *ed = data; @@ -607,13 +514,19 @@ cur_name_get_cb(void *data, Eina_Stringshare *part_name, ed->view_sync_cb(ed->view_sync_cb_data, part_name, group_name); } -void -edit_view_sync(edit_data *ed) +static void +cur_line_pos_set(edit_data *ed, Eina_Bool force) { - if (!config_part_highlight_get()) - parser_cur_group_name_get(ed->pd, ed->en_edit, cur_name_get_cb, ed); - else - parser_cur_name_get(ed->pd, ed->en_edit, cur_name_get_cb, ed); + Evas_Coord y, h; + elm_entry_cursor_geometry_get(ed->en_edit, NULL, &y, NULL, &h); + int line = (y / h) + 1; + + if (line < 0) line = 1; + if (!force && (ed->cur_line == line)) return; + ed->cur_line = line; + + evas_object_smart_callback_call(ed->enventor, SIG_CURSOR_LINE_CHANGED, + (void *)line); } static void @@ -651,84 +564,35 @@ edit_cursor_changed_cb(void *data, Evas_Object *obj EINA_UNUSED, cur_line_pos_set(ed, EINA_FALSE); } -void -edit_view_sync_cb_set(edit_data *ed, - void (*cb)(void *data, Eina_Stringshare *part_name, - Eina_Stringshare *group_name), void *data) +static void +syntax_color_full_update(edit_data *ed, Eina_Bool thread) { - ed->view_sync_cb = cb; - ed->view_sync_cb_data = data; -} + if (ed->syntax_color_lock > 0) return; -void -edit_line_delete(edit_data *ed) -{ - if (!elm_object_focus_get(ed->en_edit)) return; + ecore_timer_del(ed->syntax_color_timer); + ed->syntax_color_timer = NULL; - Evas_Object *textblock = elm_entry_textblock_get(ed->en_edit); - - int line1 = ed->cur_line - 1; - int line2 = ed->cur_line; - - //min position case - if (line1 < 0) + if (thread) { - line1 = 0; - line2 = 1; + syntax_color_td *td = calloc(1, sizeof(syntax_color_td)); + if (!td) + { + EINA_LOG_ERR("Failed to allocate Memory!"); + return; + } + td->ed = ed; + Evas_Object *tb = elm_entry_textblock_get(ed->en_edit); + td->text = (char *) evas_object_textblock_text_markup_get(tb); + ed->syntax_color_thread = + ecore_thread_run(syntax_color_thread_cb, + syntax_color_thread_end_cb, + syntax_color_thread_cancel_cb, + td); } - - //Max position case - Eina_Bool max = EINA_FALSE; - if (line2 >= ed->line_max) + else { - line1 = (ed->line_max - 2); - line2 = (ed->line_max - 1); - max = EINA_TRUE; + syntax_color_apply(ed, EINA_FALSE); } - - //only one line remain. clear it. - if (ed->line_max == 1) - { - redoundo_text_push(ed->rd, elm_entry_entry_get(ed->en_edit), 0, 0, - EINA_FALSE); - elm_entry_entry_set(ed->en_edit, ""); - line_init(ed); - return; - } - - Evas_Textblock_Cursor *cur1 = evas_object_textblock_cursor_new(textblock); - evas_textblock_cursor_line_set(cur1, line1); - if (max) evas_textblock_cursor_line_char_last(cur1); - - Evas_Textblock_Cursor *cur2 = evas_object_textblock_cursor_new(textblock); - evas_textblock_cursor_line_set(cur2, line2); - if (max) evas_textblock_cursor_line_char_last(cur2); - int cur1_pos, cur2_pos; - - cur1_pos = evas_textblock_cursor_pos_get(cur1); - cur2_pos = evas_textblock_cursor_pos_get(cur2); - const char *content = evas_textblock_cursor_range_text_get(cur1, cur2, - EVAS_TEXTBLOCK_TEXT_MARKUP); - - evas_textblock_cursor_range_delete(cur1, cur2); - evas_textblock_cursor_free(cur1); - evas_textblock_cursor_free(cur2); - redoundo_text_push(ed->rd, content, cur1_pos, abs(cur2_pos - cur1_pos), - EINA_FALSE); - elm_entry_calc_force(ed->en_edit); - - edit_line_decrease(ed, 1); - - cur_line_pos_set(ed, EINA_TRUE); - edit_changed_set(ed, EINA_TRUE); - - syntax_color_partial_update(ed, SYNTAX_COLOR_DEFAULT_TIME); -} - -int -edit_cur_indent_depth_get(edit_data *ed) -{ - return indent_space_get(syntax_indent_data_get(ed->sh), ed->en_edit); } static void @@ -741,13 +605,17 @@ edit_redoundo(edit_data *ed, Eina_Bool undo) else lines = redoundo_redo(ed->rd, &changed); if (!changed) { +#if 0 if (undo) stats_info_msg_update("No text to be undo."); else stats_info_msg_update("No text to be redo."); +#endif return; } +#if 0 if (undo) stats_info_msg_update("Undo text."); else stats_info_msg_update("Redo text."); +#endif if (lines > 0) edit_line_increase(ed, lines); else edit_line_decrease(ed, abs(lines)); @@ -840,8 +708,219 @@ scroller_vbar_unpress_cb(void *data, Evas_Object *obj EINA_UNUSED, syntax_color_partial_update(ed, SYNTAX_COLOR_SHORT_TIME); } +static Eina_Bool +edit_edc_load(edit_data *ed, const char *file_path) +{ + char buf[MAX_LINE_DIGIT_CNT]; + + Eina_File *file = NULL; + Eina_Strbuf *strbuf_line = NULL; + char *utf8_edit = NULL; + char *markup_edit = NULL; + char *markup_line = NULL; + int line_num = 1; + Eina_Bool ret = EINA_FALSE; + + ed->line_max = 0; + + file = eina_file_open(file_path, EINA_FALSE); + if (!file) goto err; + + strbuf_line = eina_strbuf_new(); + if (!strbuf_line) goto err; + + utf8_edit = eina_file_map_all(file, EINA_FILE_POPULATE); + if (!utf8_edit) goto err; + + //Append line numbers + if (!eina_strbuf_append_char(strbuf_line, '1')) goto err; + char *p = utf8_edit; + int len = strlen(p); + while ((p = strchr(p, '\n')) && p < (utf8_edit + len)) + { + line_num++; + ++p; + sprintf(buf, "\n%d", line_num); + if (!eina_strbuf_append(strbuf_line, buf)) goto err; + } + + markup_line = elm_entry_utf8_to_markup(eina_strbuf_string_get(strbuf_line)); + if (!markup_line) goto err; + elm_entry_entry_append(ed->en_line, markup_line); + free(markup_line); + + markup_edit = elm_entry_utf8_to_markup(utf8_edit); + if (!markup_edit) goto err; + elm_entry_entry_set(ed->en_edit, markup_edit); + free(markup_edit); + + ed->line_max = line_num; + + Eina_Stringshare *group_name = + parser_first_group_name_get(ed->pd, ed->en_edit); + + ecore_animator_add(syntax_color_timer_cb, ed); + + ret = EINA_TRUE; + +err: + //Even any text is not inserted, line number should start with 1 + if (ed->line_max == 0) line_init(ed); + if (strbuf_line) eina_strbuf_free(strbuf_line); + if (utf8_edit) eina_file_map_free(file, utf8_edit); + if (file) eina_file_close(file); + + evas_object_smart_callback_call(ed->enventor, SIG_MAX_LINE_CHANGED, + (void *)ed->line_max); + + if (ed->view_sync_cb) + ed->view_sync_cb(ed->view_sync_cb_data, NULL, group_name); + + return ret; +} + +/*****************************************************************************/ +/* Externally accessible calls */ +/*****************************************************************************/ + +void +edit_view_sync_cb_set(edit_data *ed, + void (*cb)(void *data, Eina_Stringshare *part_name, + Eina_Stringshare *group_name), void *data) +{ + ed->view_sync_cb = cb; + ed->view_sync_cb_data = data; +} + +Eina_Bool +edit_save(edit_data *ed, const char *file) +{ + if (!ed->edit_changed) return EINA_FALSE; + + const char *text = elm_entry_entry_get(ed->en_edit); + char *utf8 = elm_entry_markup_to_utf8(text); + FILE *fp = fopen(file, "w"); + if (!fp) + { + EINA_LOG_ERR("Failed to open file \"%s\"", file); + return EINA_FALSE; + } + + fputs(utf8, fp); + fclose(fp); + free(utf8); + + edit_view_sync(ed); + + return EINA_TRUE; +} + +void +edit_syntax_color_full_apply(edit_data *ed, Eina_Bool force) +{ + int lock; + + if (force) + { + lock = ed->syntax_color_lock; + ed->syntax_color_lock = -1; + } + syntax_color_full_update(ed, EINA_FALSE); + + if (force) ed->syntax_color_lock = lock; + else ed->syntax_color_lock++; +} + +void +edit_syntax_color_partial_apply(edit_data *ed, double interval) +{ + if (ed->syntax_color_lock > 0) ed->syntax_color_lock = 0; + if (interval < 0) syntax_color_partial_update(ed, SYNTAX_COLOR_DEFAULT_TIME); + else syntax_color_partial_update(ed, interval); +} + +void +edit_view_sync(edit_data *ed) +{ + if (!ed->part_highlight) + parser_cur_group_name_get(ed->pd, ed->en_edit, cur_name_get_cb, ed); + else + parser_cur_name_get(ed->pd, ed->en_edit, cur_name_get_cb, ed); +} + +void +edit_line_delete(edit_data *ed) +{ + if (!elm_object_focus_get(ed->en_edit)) return; + + Evas_Object *textblock = elm_entry_textblock_get(ed->en_edit); + + int line1 = ed->cur_line - 1; + int line2 = ed->cur_line; + + //min position case + if (line1 < 0) + { + line1 = 0; + line2 = 1; + } + + //Max position case + Eina_Bool max = EINA_FALSE; + if (line2 >= ed->line_max) + { + line1 = (ed->line_max - 2); + line2 = (ed->line_max - 1); + max = EINA_TRUE; + } + + //only one line remain. clear it. + if (ed->line_max == 1) + { + redoundo_text_push(ed->rd, elm_entry_entry_get(ed->en_edit), 0, 0, + EINA_FALSE); + elm_entry_entry_set(ed->en_edit, ""); + line_init(ed); + return; + } + + Evas_Textblock_Cursor *cur1 = evas_object_textblock_cursor_new(textblock); + evas_textblock_cursor_line_set(cur1, line1); + if (max) evas_textblock_cursor_line_char_last(cur1); + + Evas_Textblock_Cursor *cur2 = evas_object_textblock_cursor_new(textblock); + evas_textblock_cursor_line_set(cur2, line2); + if (max) evas_textblock_cursor_line_char_last(cur2); + int cur1_pos, cur2_pos; + + cur1_pos = evas_textblock_cursor_pos_get(cur1); + cur2_pos = evas_textblock_cursor_pos_get(cur2); + const char *content = evas_textblock_cursor_range_text_get(cur1, cur2, + EVAS_TEXTBLOCK_TEXT_MARKUP); + + evas_textblock_cursor_range_delete(cur1, cur2); + evas_textblock_cursor_free(cur1); + evas_textblock_cursor_free(cur2); + redoundo_text_push(ed->rd, content, cur1_pos, abs(cur2_pos - cur1_pos), + EINA_FALSE); + elm_entry_calc_force(ed->en_edit); + + edit_line_decrease(ed, 1); + + cur_line_pos_set(ed, EINA_TRUE); + edit_changed_set(ed, EINA_TRUE); + + syntax_color_partial_update(ed, SYNTAX_COLOR_DEFAULT_TIME); +} + +int +edit_cur_indent_depth_get(edit_data *ed) +{ + return indent_space_get(syntax_indent_data_get(ed->sh), ed->en_edit); +} + edit_data * -edit_init(Evas_Object *parent) +edit_init(Evas_Object *enventor) { srand(time(NULL)); parser_data *pd = parser_init(); @@ -860,7 +939,7 @@ edit_init(Evas_Object *parent) ecore_event_handler_add(ECORE_EVENT_KEY_UP, key_up_cb, ed); //Scroller - Evas_Object *scroller = elm_scroller_add(parent); + Evas_Object *scroller = elm_scroller_add(enventor); elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_AUTO); elm_object_focus_allow_set(scroller, EINA_FALSE); @@ -878,6 +957,9 @@ edit_init(Evas_Object *parent) EVAS_HINT_EXPAND); evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL); + //This is hackish call to not change scroller color by widget. + evas_object_data_set(scroller, "_elm_leaveme", (void *)1); + //Layout Evas_Object *layout = elm_layout_add(scroller); elm_layout_file_set(layout, EDJE_PATH, "edit_layout"); @@ -920,13 +1002,14 @@ edit_init(Evas_Object *parent) ed->en_line = en_line; ed->en_edit = en_edit; ed->layout = layout; - ed->parent = parent; + ed->enventor = enventor; ed->linenumber = EINA_TRUE; + ed->auto_indent = EINA_TRUE; + ed->part_highlight = EINA_TRUE; + ed->ctxpopup = EINA_TRUE; ed->cur_line = -1; ed->select_pos = -1; - - edit_line_number_toggle(ed); - edit_font_size_update(ed, EINA_FALSE, EINA_FALSE); + ed->font_scale = 1; ed->rd = redoundo_init(en_edit); evas_object_data_set(ed->en_edit, "redoundo", ed->rd); @@ -934,12 +1017,6 @@ edit_init(Evas_Object *parent) return ed; } -void -edit_editable_set(edit_data *ed, Eina_Bool editable) -{ - elm_entry_editable_set(ed->en_edit, editable); -} - Evas_Object * edit_obj_get(edit_data *ed) { @@ -963,80 +1040,6 @@ edit_term(edit_data *ed) parser_term(pd); } -void -edit_edc_read(edit_data *ed, const char *file_path) -{ - char buf[MAX_LINE_DIGIT_CNT]; - - Eina_File *file = NULL; - Eina_Strbuf *strbuf_line = NULL; - char *utf8_edit = NULL; - char *markup_edit = NULL; - char *markup_line = NULL; - int line_num = 1; - - ed->line_max = 0; - - autocomp_target_set(NULL); - - file = eina_file_open(file_path, EINA_FALSE); - if (!file) goto err; - - strbuf_line = eina_strbuf_new(); - if (!strbuf_line) goto err; - - base_title_set(file_path); - - utf8_edit = eina_file_map_all(file, EINA_FILE_POPULATE); - if (!utf8_edit) goto err; - - //Append line numbers - if (!eina_strbuf_append_char(strbuf_line, '1')) goto err; - char *p = utf8_edit; - int len = strlen(p); - while ((p = strchr(p, '\n')) && p < (utf8_edit + len)) - { - line_num++; - ++p; - sprintf(buf, "\n%d", line_num); - if (!eina_strbuf_append(strbuf_line, buf)) goto err; - } - - markup_line = elm_entry_utf8_to_markup(eina_strbuf_string_get(strbuf_line)); - if (!markup_line) goto err; - elm_entry_entry_append(ed->en_line, markup_line); - free(markup_line); - - markup_edit = elm_entry_utf8_to_markup(utf8_edit); - if (!markup_edit) goto err; - elm_entry_entry_set(ed->en_edit, markup_edit); - free(markup_edit); - - ed->line_max = line_num; - - Eina_Stringshare *group_name = - parser_first_group_name_get(ed->pd, ed->en_edit); - - stats_edc_group_update(group_name); - - ecore_animator_add(syntax_color_timer_cb, ed); - -err: - //Even any text is not inserted, line number should start with 1 - if (ed->line_max == 0) line_init(ed); - if (strbuf_line) eina_strbuf_free(strbuf_line); - if (utf8_edit) eina_file_map_free(file, utf8_edit); - if (file) eina_file_close(file); - autocomp_target_set(ed); - stats_line_num_update(1, ed->line_max); -} - -void -edit_focus_set(edit_data *ed) -{ - elm_object_focus_set(ed->en_edit, EINA_TRUE); -} - Eina_Bool edit_changed_get(edit_data *ed) { @@ -1049,13 +1052,17 @@ edit_changed_set(edit_data *ed, Eina_Bool changed) ed->edit_changed = changed; } -void -edit_line_number_toggle(edit_data *ed) +Eina_Bool +edit_linenumber_get(edit_data *ed) +{ + return ed->linenumber; +} + +void +edit_linenumber_set(edit_data *ed, Eina_Bool linenumber) { - //FIXME: edit & config toggle should be handled in one place. - Eina_Bool linenumber = config_linenumber_get(); if (ed->linenumber == linenumber) return; - ed->linenumber = linenumber; + ed->linenumber = !!linenumber; if (linenumber) elm_object_signal_emit(ed->layout, "elm,state,linenumber,show", ""); @@ -1064,57 +1071,54 @@ edit_line_number_toggle(edit_data *ed) } void -edit_new(edit_data *ed) +edit_font_scale_set(edit_data *ed, double font_scale) { + if (ed->font_scale == font_scale) return; + elm_object_scale_set(ed->layout, font_scale); + syntax_color_partial_update(ed, 0); + ed->font_scale = font_scale; +} + +double +edit_font_scale_get(edit_data *ed) +{ + return ed->font_scale; +} + +void +edit_part_highlight_set(edit_data *ed, Eina_Bool part_highlight) +{ + part_highlight = !!part_highlight; + + if (ed->part_highlight == part_highlight) return; + + ed->part_highlight = part_highlight; + + if (part_highlight) edit_view_sync(ed); + else view_part_highlight_set(VIEW_DATA, NULL); +} + +Eina_Bool +edit_part_highlight_get(edit_data *ed) +{ + return ed->part_highlight; +} + +Eina_Bool +edit_load(edit_data *ed, const char *edc_path) +{ +#if 0 + live_edit_cancel(); +#endif parser_cancel(ed->pd); elm_entry_entry_set(ed->en_edit, ""); elm_entry_entry_set(ed->en_line, ""); - edit_edc_read(ed, config_edc_path_get()); + Eina_Bool ret = edit_edc_load(ed, edc_path); edit_changed_set(ed, EINA_TRUE); - - char buf[PATH_MAX]; - snprintf(buf, sizeof(buf), "File Path: \"%s\"", config_edc_path_get()); - stats_info_msg_update(buf); -} - -void -edit_font_size_update(edit_data *ed, Eina_Bool msg, Eina_Bool update) -{ - elm_object_scale_set(ed->layout, config_font_size_get()); - - if (!msg) return; - - char buf[128]; - snprintf(buf, sizeof(buf), "Font Size: %1.1fx", config_font_size_get()); - stats_info_msg_update(buf); - - if (update) syntax_color_partial_update(ed, 0); -} - -void -edit_part_highlight_toggle(edit_data *ed, Eina_Bool msg) -{ - Eina_Bool highlight = config_part_highlight_get(); - if (highlight) edit_view_sync(ed); - else view_part_highlight_set(VIEW_DATA, NULL); - - if (!msg) return; - - if (highlight) - stats_info_msg_update("Part Highlighting Enabled."); - else - stats_info_msg_update("Part Highlighting Disabled."); -} - -void -edit_edc_reload(edit_data *ed, const char *edc_path) -{ - live_edit_cancel(); - config_edc_path_set(edc_path); - edit_new(ed); edj_mgr_reload_need_set(EINA_TRUE); - config_apply(); redoundo_clear(ed->rd); + + return ret; } Eina_Stringshare * @@ -1172,7 +1176,8 @@ edit_line_increase(edit_data *ed, int cnt) } elm_entry_calc_force(ed->en_line); - stats_line_num_update(ed->cur_line, ed->line_max); + evas_object_smart_callback_call(ed->enventor, SIG_MAX_LINE_CHANGED, + (void *)ed->line_max); } void @@ -1202,7 +1207,9 @@ edit_line_decrease(edit_data *ed, int cnt) ed->line_max -= cnt; if (ed->line_max < 1) line_init(ed); - stats_line_num_update(ed->cur_line, ed->line_max); + + evas_object_smart_callback_call(ed->enventor, SIG_MAX_LINE_CHANGED, + (void *)ed->line_max); } void @@ -1225,3 +1232,29 @@ edit_disabled_set(edit_data *ed, Eina_Bool disabled) else elm_object_signal_emit(ed->layout, "elm,state,enabled", ""); } + +void +edit_auto_indent_set(edit_data *ed, Eina_Bool auto_indent) +{ + auto_indent = !!auto_indent; + ed->auto_indent = auto_indent; +} + +Eina_Bool +edit_auto_indent_get(edit_data *ed) +{ + return ed->auto_indent; +} + +Eina_Bool +edit_ctxpopup_get(edit_data *ed) +{ + return ed->ctxpopup; +} + +void +edit_ctxpopup_set(edit_data *ed, Eina_Bool ctxpopup) +{ + ctxpopup = !!ctxpopup; + ed->ctxpopup = ctxpopup; +} diff --git a/src/bin/edc_parser.c b/src/lib/edc_parser.c similarity index 97% rename from src/bin/edc_parser.c rename to src/lib/edc_parser.c index 6cd51b1..cc76451 100644 --- a/src/bin/edc_parser.c +++ b/src/lib/edc_parser.c @@ -1,5 +1,11 @@ -#include -#include "common.h" +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#define ENVENTOR_BETA_API_SUPPORT 1 + +#include +#include "enventor_private.h" struct parser_s { @@ -33,75 +39,9 @@ typedef struct type_init_thread_data_s parser_data *pd; } type_init_td; -void -parser_cancel(parser_data *pd) -{ - if (pd->thread) ecore_thread_cancel(pd->thread); -} - -char * -parser_name_get(parser_data *pd EINA_UNUSED, const char *cur) -{ - if (!cur) return NULL; - - char *p = (char *) cur; - char *end; - p = strstr(p, "\""); - if (!p) return NULL; - p++; - end = strstr(p, "\""); - if (!end) return NULL; - return strndup(p, (end - p)); -} - -const char * -parser_colon_pos_get(parser_data *pd EINA_UNUSED, const char *cur) -{ - if (!cur) return NULL; - return strstr(cur, ":"); -} - -attr_value * -parser_attribute_get(parser_data *pd, const char *text, const char *cur) -{ - if (!text || !cur) return NULL; - if ((*cur == ';') || (*cur == ':')) return NULL; - - parser_attr *attr; - Eina_Bool instring = EINA_FALSE; - Eina_Bool necessary = EINA_FALSE; - - char *p = (char *) cur; - - while (p >= text) - { - if (*p == ':') - { - necessary = EINA_TRUE; - break; - } - if (*p == '\"') instring = !instring; - p--; - } - if (!p || !necessary) return NULL; - - while (p > text) - { - if ((*p == ';') || (*p == '.') || (*p == ' ')) break; - p--; - } - - if (!p) return NULL; - if (p != text) p++; - - EINA_INARRAY_FOREACH(pd->attrs, attr) - { - if ((instring == attr->instring) && strstr(p, attr->keyword)) - return &attr->value; - } - - return NULL; -} +/*****************************************************************************/ +/* Internal method implementation */ +/*****************************************************************************/ static void group_name_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) @@ -577,6 +517,162 @@ type_init_thread_cancel(void *data, Ecore_Thread *thread EINA_UNUSED) free(td); } +static const char * +end_of_parts_block_find(const char *pos) +{ + //TODO: Process comments and quotes. + pos = strstr(pos, "parts"); + if (!pos) return NULL; + pos = strstr(pos, "{"); + if (!pos) return NULL; + pos++; + char level = 1; + + while (*pos) + { + if (*pos == '{') level++; + else if (*pos == '}') level--; + + if (!level) return --pos; + pos++; + } + return NULL; +} + +static const char * +group_beginning_pos_get(const char* source, const char *group_name) +{ + const char* GROUP_SYNTAX_NAME = "group"; + const char *quot = QUOT; + + const char *pos = strstr(source, GROUP_SYNTAX_NAME); + + //TODO: Process comments and quotes. + while (pos) + { + const char *name = strstr(pos, quot); + if (!name) return NULL; + pos = strstr(++name, quot); + if (!pos) return NULL; + if (!strncmp(name, group_name, strlen(group_name))) + return pos; + pos = strstr(++pos, GROUP_SYNTAX_NAME); + } + + return NULL; +} + +static Eina_Bool +parser_collections_block_pos_get(const Evas_Object *entry, + const char *block_name, int *ret) +{ + const char* GROUP_SYNTAX_NAME = "group"; + const int BLOCK_NAME_LEN = strlen(block_name); + *ret = -1; + + const char *text = elm_entry_entry_get(entry); + if (!text) return EINA_FALSE; + + char *utf8 = elm_entry_markup_to_utf8(text); + if (!utf8) return EINA_FALSE; + + const char *pos = strstr(utf8, block_name); + if (pos) + { + /* TODO: Remove this check and process lines of the form + "images.image: "logo.png" COMP;" */ + if (*(pos + BLOCK_NAME_LEN + 1) == '.') + return EINA_FALSE; + + pos = strstr(pos, "{\n"); + if (!pos) return EINA_FALSE; + + *ret = pos - utf8 + 2; + return EINA_TRUE; + } + pos = strstr(utf8, GROUP_SYNTAX_NAME); + if (pos) + { + *ret = pos - utf8; + return EINA_FALSE; + } + return EINA_FALSE; +} + +/*****************************************************************************/ +/* Externally accessible calls */ +/*****************************************************************************/ + +void +parser_cancel(parser_data *pd) +{ + if (pd->thread) ecore_thread_cancel(pd->thread); +} + +char * +parser_name_get(parser_data *pd EINA_UNUSED, const char *cur) +{ + if (!cur) return NULL; + + char *p = (char *) cur; + char *end; + p = strstr(p, "\""); + if (!p) return NULL; + p++; + end = strstr(p, "\""); + if (!end) return NULL; + return strndup(p, (end - p)); +} + +const char * +parser_colon_pos_get(parser_data *pd EINA_UNUSED, const char *cur) +{ + if (!cur) return NULL; + return strstr(cur, ":"); +} + +attr_value * +parser_attribute_get(parser_data *pd, const char *text, const char *cur) +{ + if (!text || !cur) return NULL; + if ((*cur == ';') || (*cur == ':')) return NULL; + + parser_attr *attr; + Eina_Bool instring = EINA_FALSE; + Eina_Bool necessary = EINA_FALSE; + + char *p = (char *) cur; + + while (p >= text) + { + if (*p == ':') + { + necessary = EINA_TRUE; + break; + } + if (*p == '\"') instring = !instring; + p--; + } + if (!p || !necessary) return NULL; + + while (p > text) + { + if ((*p == ';') || (*p == '.') || (*p == ' ')) break; + p--; + } + + if (!p) return NULL; + if (p != text) p++; + + EINA_INARRAY_FOREACH(pd->attrs, attr) + { + if ((instring == attr->instring) && strstr(p, attr->keyword)) + return &attr->value; + } + + return NULL; +} + Eina_Stringshare * parser_paragh_name_get(parser_data *pd EINA_UNUSED, Evas_Object *entry) { @@ -931,52 +1027,6 @@ parser_term(parser_data *pd) free(pd); } -static const char * -end_of_parts_block_find(const char *pos) -{ - //TODO: Process comments and quotes. - pos = strstr(pos, "parts"); - if (!pos) return NULL; - pos = strstr(pos, "{"); - if (!pos) return NULL; - pos++; - char level = 1; - - while (*pos) - { - if (*pos == '{') level++; - else if (*pos == '}') level--; - - if (!level) return --pos; - pos++; - } - return NULL; -} - -static const char * -group_beginning_pos_get(const char* source, const char *group_name) -{ - const char* GROUP_SYNTAX_NAME = "group"; - const int quot_len = QUOT_LEN; - const char *quot = QUOT; - - const char *pos = strstr(source, GROUP_SYNTAX_NAME); - - //TODO: Process comments and quotes. - while (pos) - { - const char *name = strstr(pos, quot); - if (!name) return NULL; - pos = strstr(++name, quot); - if (!pos) return NULL; - if (!strncmp(name, group_name, strlen(group_name))) - return pos; - pos = strstr(++pos, GROUP_SYNTAX_NAME); - } - - return NULL; -} - int parser_end_of_parts_block_pos_get(const Evas_Object *entry, const char *group_name) @@ -1010,43 +1060,6 @@ parser_end_of_parts_block_pos_get(const Evas_Object *entry, return ret; } -static Eina_Bool -parser_collections_block_pos_get(const Evas_Object *entry, - const char *block_name, int *ret) -{ - const char* GROUP_SYNTAX_NAME = "group"; - const int BLOCK_NAME_LEN = strlen(block_name); - *ret = -1; - - const char *text = elm_entry_entry_get(entry); - if (!text) return EINA_FALSE; - - char *utf8 = elm_entry_markup_to_utf8(text); - if (!utf8) return EINA_FALSE; - - const char *pos = strstr(utf8, block_name); - if (pos) - { - /* TODO: Remove this check and process lines of the form - "images.image: "logo.png" COMP;" */ - if (*(pos + BLOCK_NAME_LEN + 1) == '.') - return EINA_FALSE; - - pos = strstr(pos, "{\n"); - if (!pos) return EINA_FALSE; - - *ret = pos - utf8 + 2; - return EINA_TRUE; - } - pos = strstr(utf8, GROUP_SYNTAX_NAME); - if (pos) - { - *ret = pos - utf8; - return EINA_FALSE; - } - return EINA_FALSE; -} - Eina_Bool parser_images_pos_get(const Evas_Object *entry, int *ret) { diff --git a/src/bin/edj_mgr.c b/src/lib/edj_mgr.c similarity index 76% rename from src/bin/edj_mgr.c rename to src/lib/edj_mgr.c index 3478353..9af98e1 100644 --- a/src/bin/edj_mgr.c +++ b/src/lib/edj_mgr.c @@ -1,5 +1,11 @@ -#include -#include "common.h" +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#define ENVENTOR_BETA_API_SUPPORT 1 + +#include +#include "enventor_private.h" const double VIEW_CACHING_TIME = 60 * 30; @@ -13,13 +19,19 @@ typedef struct edj_mgr_s { Eina_List *edjs; edj_data *edj; + Evas_Object *enventor; Evas_Object *layout; + double view_scale; Eina_Bool reload_need : 1; } edj_mgr; static edj_mgr *g_em = NULL; +/*****************************************************************************/ +/* Internal method implementation */ +/*****************************************************************************/ + static void view_del_cb(void *data) { @@ -41,6 +53,10 @@ view_del_timer_cb(void *data) return ECORE_CALLBACK_CANCEL; } +/*****************************************************************************/ +/* Externally accessible calls */ +/*****************************************************************************/ + void edj_mgr_clear(void) { @@ -59,7 +75,7 @@ edj_mgr_clear(void) } void -edj_mgr_init(Evas_Object *parent) +edj_mgr_init(Evas_Object *enventor) { edj_mgr *em = calloc(1, sizeof(edj_mgr)); if (!em) @@ -69,9 +85,11 @@ edj_mgr_init(Evas_Object *parent) } g_em = em; - Evas_Object *layout = elm_layout_add(parent); + Evas_Object *layout = elm_layout_add(enventor); elm_layout_file_set(layout, EDJE_PATH, "viewer_layout"); + em->enventor = enventor; em->layout = layout; + em->view_scale = 1; } void @@ -125,7 +143,7 @@ edj_mgr_view_new(const char *group) return NULL; } - view_data *vd = view_init(em->layout, group, view_del_cb, edj); + view_data *vd = view_init(em->enventor, group, view_del_cb, edj); if (!vd) { free(edj); @@ -153,7 +171,7 @@ edj_mgr_view_switch_to(view_data *vd) elm_object_part_content_set(em->layout, "elm.swallow.content", view_obj_get(vd)); - view_scale_set(vd, config_view_scale_get()); + view_scale_set(vd, em->view_scale); //Switching effect if (prev && (prev != view_obj_get(vd))) @@ -206,3 +224,19 @@ edj_mgr_reload_need_get(void) edj_mgr *em = g_em; return em->reload_need; } + +void +edj_mgr_view_scale_set(double view_scale) +{ + edj_mgr *em = g_em; + em->view_scale = view_scale; + view_scale_set(VIEW_DATA, view_scale); +} + +double +edj_mgr_view_scale_get(void) +{ + edj_mgr *em = g_em; + return em->view_scale; +} + diff --git a/src/bin/edj_viewer.c b/src/lib/edj_viewer.c similarity index 81% rename from src/bin/edj_viewer.c rename to src/lib/edj_viewer.c index d17826b..c634acc 100644 --- a/src/bin/edj_viewer.c +++ b/src/lib/edj_viewer.c @@ -1,16 +1,21 @@ +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#define ENVENTOR_BETA_API_SUPPORT 1 #define EDJE_EDIT_IS_UNSTABLE_AND_I_KNOW_ABOUT_IT 1 -#include +#include #include #include -#include "common.h" +#include "enventor_private.h" struct viewer_s { - Evas_Object *parent; Evas_Object *layout; Evas_Object *scroller; Evas_Object *event_rect; + Evas_Object *enventor; Evas_Object *part_obj; Evas_Object *part_highlight; @@ -23,7 +28,6 @@ struct viewer_s Eio_Monitor *edj_monitor; Ecore_Event_Handler *monitor_event; Ecore_Event_Handler *exe_del_event; - void (*del_cb)(void *data); void *data; @@ -31,12 +35,16 @@ struct viewer_s Eina_Bool edj_reload_need : 1; }; +/*****************************************************************************/ +/* Internal method implementation */ +/*****************************************************************************/ + static void view_obj_min_update(Evas_Object *obj) { Evas_Coord w, h; + double scale = edj_mgr_view_scale_get(); edje_object_size_min_calc(obj, &w, &h); - double scale = edje_object_scale_get(obj); evas_object_size_hint_min_set(obj, ((double)w * scale), ((double)h * scale)); } @@ -50,11 +58,10 @@ file_set_timer_cb(void *data) return ECORE_CALLBACK_CANCEL; } - if (edje_object_file_set(vd->layout, config_edj_path_get(), - vd->group_name)) + if (edje_object_file_set(vd->layout, build_edj_path_get(), vd->group_name)) { eio_monitor_del(vd->edj_monitor); - vd->edj_monitor = eio_monitor_add(config_edj_path_get()); + vd->edj_monitor = eio_monitor_add(build_edj_path_get()); if (!vd->edj_monitor) EINA_LOG_ERR("Failed to add Eio_Monitor"); vd->timer = NULL; return ECORE_CALLBACK_CANCEL; @@ -93,6 +100,7 @@ part_obj_geom_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, static void part_obj_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) { view_data *vd = data; @@ -100,30 +108,23 @@ part_obj_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } static void -layout_resize_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, - Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - if (!config_stats_bar_get()) return; - - Evas_Coord w, h; - evas_object_geometry_get(obj, NULL, NULL, &w, &h); - config_view_size_set(w, h); - stats_view_size_update(); -} - -static void -rect_mouse_move_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, +rect_mouse_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) { - if (!config_stats_bar_get()) return; - + static Enventor_Live_View_Cursor cursor; + view_data *vd = data; Evas_Event_Mouse_Move *ev = event_info; Evas_Coord x, y, w, h; evas_object_geometry_get(obj, &x, &y, &w, &h); - stats_cursor_pos_update(ev->cur.canvas.x - x, ev->cur.canvas.y - y, - (float) (ev->cur.canvas.x - x) / (float) w, - (float) (ev->cur.canvas.y - y) / (float) h); + + cursor.x = ev->cur.canvas.x; + cursor.y = ev->cur.canvas.y; + cursor.relx = (float) ((ev->cur.canvas.x - x) / (float) w); + cursor.rely = (float) ((ev->cur.canvas.y - y) / (float) h); + + evas_object_smart_callback_call(vd->enventor, SIG_LIVE_VIEW_CURSOR_MOVED, + &cursor); } static Evas_Object * @@ -139,26 +140,26 @@ view_scroller_create(Evas_Object *parent) } static Eina_Bool -exe_del_event_cb(void *data, int type EINA_UNUSED, void *event) +exe_del_event_cb(void *data, int type EINA_UNUSED, void *event EINA_UNUSED) { view_data *vd = data; - Eio_Monitor_Event *ev = event; if (!vd->edj_reload_need) return ECORE_CALLBACK_PASS_ON; - if (!edje_object_file_set(vd->layout, config_edj_path_get(), - vd->group_name)) + if (!edje_object_file_set(vd->layout, build_edj_path_get(), vd->group_name)) { vd->del_cb(vd->data); view_term(vd); - EINA_LOG_ERR("Failed to load edj file \"%s\"", config_edj_path_get()); + EINA_LOG_ERR("Failed to load edj file \"%s\"", build_edj_path_get()); return ECORE_CALLBACK_DONE; } view_obj_min_update(vd->layout); view_part_highlight_set(vd, vd->part_name); dummy_obj_update(vd->layout); +#if 0 base_console_reset(); +#endif vd->edj_reload_need = EINA_FALSE; @@ -174,7 +175,7 @@ edj_changed_cb(void *data, int type EINA_UNUSED, void *event) if (vd->edj_monitor != ev->monitor) return ECORE_CALLBACK_PASS_ON; //FIXME: why it need to add monitor again?? - vd->edj_monitor = eio_monitor_add(config_edj_path_get()); + vd->edj_monitor = eio_monitor_add(build_edj_path_get()); if (!vd->edj_monitor) EINA_LOG_ERR("Failed to add Eio_Monitor!"); vd->edj_reload_need = EINA_TRUE; @@ -200,25 +201,15 @@ layout_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, Evas_Object *rect = data; evas_object_del(rect); } + static void -event_layer_set(view_data *vd) +layout_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) { - Evas *e = evas_object_evas_get(vd->layout); - Evas_Object *rect = evas_object_rectangle_add(e); - evas_object_repeat_events_set(rect, EINA_TRUE); - evas_object_color_set(rect, 0, 0, 0, 0); - evas_object_show(rect); - - evas_object_event_callback_add(vd->layout, EVAS_CALLBACK_RESIZE, - layout_geom_cb, rect); - evas_object_event_callback_add(vd->layout, EVAS_CALLBACK_MOVE, - layout_geom_cb, rect); - evas_object_event_callback_add(vd->layout, EVAS_CALLBACK_DEL, - layout_del_cb, rect); - evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_MOVE, - rect_mouse_move_cb, vd); - - vd->event_rect = rect; + static Enventor_Live_View_Size size; + view_data *vd = data; + evas_object_geometry_get(obj, NULL, NULL, &size.w, &size.h); + evas_object_smart_callback_call(vd->enventor, SIG_LIVE_VIEW_RESIZED, &size); } static Evas_Object * @@ -247,13 +238,33 @@ view_obj_create(view_data *vd, const char *file_path, const char *group) return layout; } +static void +event_layer_set(view_data *vd) +{ + Evas *e = evas_object_evas_get(vd->layout); + Evas_Object *rect = evas_object_rectangle_add(e); + evas_object_repeat_events_set(rect, EINA_TRUE); + evas_object_color_set(rect, 0, 0, 0, 0); + evas_object_show(rect); + + evas_object_event_callback_add(vd->layout, EVAS_CALLBACK_RESIZE, + layout_geom_cb, rect); + evas_object_event_callback_add(vd->layout, EVAS_CALLBACK_MOVE, + layout_geom_cb, rect); + evas_object_event_callback_add(vd->layout, EVAS_CALLBACK_DEL, + layout_del_cb, rect); + evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_MOVE, + rect_mouse_move_cb, vd); + vd->event_rect = rect; +} + static Eina_Bool view_obj_idler_cb(void *data) { view_data *vd = data; - vd->layout = view_obj_create(vd, config_edj_path_get(), vd->group_name); - view_scale_set(vd, config_view_scale_get()); + vd->layout = view_obj_create(vd, build_edj_path_get(), vd->group_name); + view_scale_set(vd, edj_mgr_view_scale_get()); event_layer_set(vd); elm_object_content_set(vd->scroller, vd->layout); @@ -267,27 +278,30 @@ view_obj_idler_cb(void *data) return ECORE_CALLBACK_CANCEL; } +/*****************************************************************************/ +/* Externally accessible calls */ +/*****************************************************************************/ + void -view_dummy_toggle(view_data *vd, Eina_Bool msg) +view_dummy_set(view_data *vd, Eina_Bool dummy_on) { - Eina_Bool dummy_on = config_dummy_swallow_get(); + dummy_on = !!dummy_on; + if (dummy_on == vd->dummy_on) return; - if (dummy_on) - { - if (msg) stats_info_msg_update("Dummy Swallow Enabled."); - dummy_obj_new(vd->layout); - } - else - { - if (msg) stats_info_msg_update("Dummy Swallow Disabled."); - dummy_obj_del(vd->layout); - } + if (dummy_on) dummy_obj_new(vd->layout); + else dummy_obj_del(vd->layout); vd->dummy_on = dummy_on; } +Eina_Bool +view_dummy_get(view_data *vd) +{ + return vd->dummy_on; +} + view_data * -view_init(Evas_Object *parent, const char *group, +view_init(Evas_Object *enventor, const char *group, void (*del_cb)(void *data), void *data) { view_data *vd = calloc(1, sizeof(view_data)); @@ -296,9 +310,9 @@ view_init(Evas_Object *parent, const char *group, EINA_LOG_ERR("Failed to allocate Memory!"); return NULL; } - vd->parent = parent; - vd->scroller = view_scroller_create(parent); - vd->dummy_on = config_dummy_swallow_get(); + vd->enventor = enventor; + vd->scroller = view_scroller_create(enventor); + vd->dummy_on = EINA_TRUE; vd->group_name = eina_stringshare_add(group); vd->idler = ecore_idler_add(view_obj_idler_cb, vd); @@ -352,9 +366,8 @@ view_program_run(view_data *vd, const char *program) if (!vd) return; if (!program || !vd->layout) return; edje_edit_program_run(vd->layout, program); - char buf[256]; - snprintf(buf, sizeof(buf), "Program Run: \"%s\"", program); - stats_info_msg_update(buf); + evas_object_smart_callback_call(vd->enventor, SIG_PROGRAM_RUN, + (void*)program); } void @@ -425,7 +438,7 @@ view_data_get(view_data *vd) void view_scale_set(view_data *vd, double scale) { - if (!vd->layout) return; + if (!vd || !vd->layout) return; if (scale == edje_object_scale_get(vd->layout)) return; int pminw, pminh; diff --git a/src/lib/enventor_main.c b/src/lib/enventor_main.c new file mode 100644 index 0000000..c4f6b93 --- /dev/null +++ b/src/lib/enventor_main.c @@ -0,0 +1,135 @@ +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#define ENVENTOR_BETA_API_SUPPORT 1 + +#include +#include +#include "enventor_private.h" + +char EDJE_PATH[PATH_MAX]; +const char SIG_CURSOR_LINE_CHANGED[] = "cursor,line,changed"; +const char SIG_CURSOR_GROUP_CHANGED[]= "cursor,group,changed"; +const char SIG_LIVE_VIEW_CURSOR_MOVED[] = "live_view,cursor,moved"; +const char SIG_LIVE_VIEW_RESIZED[] = "live_view,resized"; +const char SIG_MAX_LINE_CHANGED[] = "max_line,changed"; +const char SIG_COMPILE_ERROR[] = "compile,error"; +const char SIG_PROGRAM_RUN[] = "program,run"; +const char SIG_CTXPOPUP_SELECTED[] = "ctxpopup,selected"; +const char SIG_CTXPOPUP_DISMISSED[] = "ctxpopup,dismissed"; + +static int _enventor_init_count = 0; +static int _enventor_log_dom = -1; +static Ecore_Event_Handler *_key_down_handler = NULL; + +static Eina_Bool +key_down_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *ev) +{ + Ecore_Event_Key *event = ev; + if (autocomp_event_dispatch(event->key)) return ECORE_CALLBACK_DONE; + return ECORE_CALLBACK_PASS_ON; +} + +EAPI int +enventor_init(int argc, char **argv) +{ + _enventor_init_count++; + + if (_enventor_init_count > 1) return _enventor_init_count; + + if (!eina_init()) + { + EINA_LOG_ERR("Failed to initialize Eina"); + return _enventor_init_count--; + } + + if (!eet_init()) + { + EINA_LOG_ERR("Failed to initialize Eet"); + return _enventor_init_count--; + } + + if (!evas_init()) + { + EINA_LOG_ERR("Failed to initialize Eet"); + return _enventor_init_count--; + } + + if (!ecore_init()) + { + EINA_LOG_ERR("Failed to initialize Ecore"); + return _enventor_init_count--; + } + + if (!ecore_file_init()) + { + EINA_LOG_ERR("Failed to initialize Ecore_File"); + return _enventor_init_count--; + } + + if (!edje_init()) + { + EINA_LOG_ERR("Failed to initialize Edje"); + return _enventor_init_count--; + } + + if (!eio_init()) + { + EINA_LOG_ERR("Failed to initialize Eio"); + return _enventor_init_count--; + } + + if (!elm_init(argc, argv)) + { + EINA_LOG_ERR("Failed to initialize Elementary"); + return _enventor_init_count--; + } + + _enventor_log_dom = eina_log_domain_register("enventor", EINA_COLOR_CYAN); + if (!_enventor_log_dom) + { + EINA_LOG_ERR("Could not register enventor log domain"); + _enventor_log_dom = EINA_LOG_DOMAIN_GLOBAL; + } + + snprintf(EDJE_PATH, sizeof(EDJE_PATH), "%s/themes/enventor.edj", + PACKAGE_DATA_DIR); + + srand(time(NULL)); + + _key_down_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, + key_down_cb, NULL); + return _enventor_init_count; +} + +EAPI int +enventor_shutdown(void) +{ + if (_enventor_init_count <= 0) + { + EINA_LOG_ERR("Init count not greater than 0 in shutdown."); + return 0; + } + + ecore_event_handler_del(_key_down_handler); + _key_down_handler = NULL; + + if ((_enventor_log_dom != -1) && + (_enventor_log_dom != EINA_LOG_DOMAIN_GLOBAL)) + { + eina_log_domain_unregister(_enventor_log_dom); + _enventor_log_dom = -1; + } + + elm_shutdown(); + eio_shutdown(); + ecore_file_shutdown(); + ecore_shutdown(); + edje_shutdown(); + evas_shutdown(); + eet_shutdown(); + eina_shutdown(); + + return _enventor_init_count; +} diff --git a/src/lib/enventor_object.eo b/src/lib/enventor_object.eo new file mode 100644 index 0000000..0e3ac03 --- /dev/null +++ b/src/lib/enventor_object.eo @@ -0,0 +1,408 @@ +class Enventor.Object (Elm_Widget, Efl.File) { + eo_prefix: enventor_obj; + properties { + part_highlight { + set { + /*@ + @brief + @warning + @see + @ingroup Enventor */ + } + get { + /*@ + @brief + @return + @warning + @see + @ingroup Enventor */ + } + values { + Eina_Bool part_highlight; /*@ ... */ + } + } + live_view_scale { + set { + /*@ + @brief + @warning + @see + @ingroup Enventor */ + } + get { + /*@ + @brief + @return + @warning + @see + @ingroup Enventor */ + } + values { + double scale; /*@ ... */ + } + } + dummy_swallow { + set { + /*@ + @brief + @warning + @see + @ingroup Enventor */ + } + get { + /*@ + @brief + @return + @warning + @see + @ingroup Enventor */ + } + values { + Eina_Bool dummy_swallow; /*@ ... */ + } + } + auto_complete { + set { + /*@ + @brief + @warning + @see + @ingroup Enventor */ + } + get { + /*@ + @brief + @return + @warning + @see + @ingroup Enventor */ + } + values { + Eina_Bool auto_complete; /*@ ... */ + } + } + auto_indent { + set { + /*@ + @brief + @warning + @see + @ingroup Enventor */ + } + get { + /*@ + @brief + @return + @warning + @see + @ingroup Enventor */ + } + values { + Eina_Bool auto_indent; /*@ ... */ + } + } + ctxpopup { + set { + /*@ + @brief + @warning + @see + @ingroup Enventor */ + } + get { + /*@ + @brief + @return + @warning + @see + @ingroup Enventor */ + } + values { + Eina_Bool ctxpopup; /*@ ... */ + } + } + focus { + set { + /*@ + @brief + @warning + @see + @ingroup Enventor */ + } + get { + /*@ + @brief + @return + @warning + @see + @ingroup Enventor */ + } + values { + Eina_Bool focus; /*@ ... */ + } + } + modified { + set { + /*@ + @brief + @warning + @see + @ingroup Enventor */ + } + get { + /*@ + @brief + @return + @warning + @see + @ingroup Enventor */ + } + values { + Eina_Bool modified; /*@ ... */ + } + } + font_scale { + set { + /*@ + @brief + @warning + @see + @ingroup Enventor */ + } + get { + /*@ + @brief + @return + @warning + @see + @ingroup Enventor */ + } + values { + double font_scale; /*@ ... */ + } + } + linenumber { + set { + /*@ + @brief + @warning + @see + @ingroup Enventor */ + } + get { + /*@ + @brief + @return + @warning + @see + @ingroup Enventor */ + } + values { + bool linenumber; /*@ ... */ + } + } + } + methods { + path_set { + /*@ + @brief + @return + @warning + @see + @ingroup Enventor */ + return: Eina_Bool; + params { + @in Enventor_Path_Type type; /*@ ... */ + @in const(Eina_List) *pathes; /*@ ... */ + } + } + path_get { + /*@ + @brief + @return + @warning + @see + @ingroup Enventor */ + return: const(Eina_List) *; + params { + @in Enventor_Path_Type type; /*@ ... */ + } + } + max_line_get { + /*@ + @brief + @return + @warning + @see + @ingroup Enventor */ + return: int; + } + text_get { + /*@ + @brief + @return + @warning + @see + @ingroup Enventor */ + return: const(char) *; + } + text_insert { + /*@ + @brief + @warning + @see + @ingroup Enventor */ + params { + @in const(char) *text; /*@ ... */ + } + } + selection_get { + /*@ + @brief + @return + @warning + @see + @ingroup Enventor */ + return: const(char) *; + } + cursor_pos_get { + /*@ + @brief + @return + @warning + @see + @ingroup Enventor */ + return: int; + } + select_none { + /*@ + @brief + @warning + @see + @ingroup Enventor */ + } + select_region_set { + /*@ + @brief + @warning + @see + @ingroup Enventor */ + params { + @in int start; /*@ ... */ + @in int end; /*@ ... */ + } + } + line_delete { + /*@ + @brief + @warning + @see + @ingroup Enventor */ + } + save { + /*@ + @brief + @return + @warning + @see + @ingroup Enventor */ + return: Eina_Bool; + params { + @in const(char) *file; /*@ ... */ + } + } + live_view_get { + /*@ + @brief + @warning + @see + @ingroup Enventor */ + return: Eo *; + } + line_goto { + /*@ + @brief + @warning + @see + @ingroup Enventor */ + params { + @in int line; /*@ ... */ + } + } + syntax_color_full_apply { + /*@ + @brief + @warning + @see + @ingroup Enventor */ + params { + @in Eina_Bool force; /*@ ... */ + } + } + syntax_color_partial_apply { + /*@ + @brief + @warning + @see + @ingroup Enventor */ + params { + @in double interval; /*@ ... */ + } + } + template_insert { + /*@ + @brief + @return + @warning + @see + @ingroup Enventor */ + return: Eina_Bool; + params { + @in char *syntax; /*@ ... */ + @in size_t n; + } + } + template_part_insert { + /*@ + @brief + @return + @warning + @see + @ingroup Enventor */ + return: Eina_Bool; + params { + @in Edje_Part_Type type; /*@ ... */ + @in float rel1_x; /*@ ... */ + @in float rel1_y; /*@ ... */ + @in float rel2_x; /*@ ... */ + @in float rel2_y; /*@ ... */ + @in char *syntax; /*@ ... */ + @in size_t n; + } + } + } + implements { + Eo.Base.constructor; + Evas.Object_Smart.add; + Evas.Object_Smart.del; + Evas.Object_Smart.move; + Evas.Object_Smart.resize; + Evas.Object_Smart.show; + Evas.Object_Smart.hide; + Evas.Object_Smart.color.set; + Evas.Object_Smart.clip.set; + Evas.Object_Smart.clip_unset; + Efl.File.file.set; + } + events { + cursor,line,changed; + cursor,group,changed; + live_view,cursor,moved; + live_view,resized; + max_line,changed; + compile,error; + program,run; + ctxpopup,selected; + ctxpopup,dismissed; + } +} diff --git a/src/lib/enventor_private.h b/src/lib/enventor_private.h new file mode 100644 index 0000000..50da4dc --- /dev/null +++ b/src/lib/enventor_private.h @@ -0,0 +1,225 @@ +#ifndef __ENVENTOR_PRIVATE_H__ +#define __ENVENTOR_PRIVATE_H__ + +#define QUOT "\"" +#define QUOT_C '\"' +#define QUOT_LEN 1 +#define EOL "
" +#define EOL_LEN 5 +#define TAB "" +#define TAB_LEN 6 +#define TAB_SPACE 3 +#define REL1_X 0.25f +#define REL1_Y 0.25f +#define REL2_X 0.75f +#define REL2_Y 0.75f +#define VIEW_DATA edj_mgr_view_get(NULL) + +extern char EDJE_PATH[PATH_MAX]; +extern const char SIG_CURSOR_LINE_CHANGED[]; +extern const char SIG_CURSOR_GROUP_CHANGED[]; +extern const char SIG_MAX_LINE_CHANGED[]; +extern const char SIG_COMPILE_ERROR[]; +extern const char SIG_LIVE_VIEW_CURSOR_MOVED[]; +extern const char SIG_LIVE_VIEW_RESIZED[]; +extern const char SIG_PROGRAM_RUN[]; +extern const char SIG_CTXPOPUP_SELECTED[]; +extern const char SIG_CTXPOPUP_DISMISSED[]; + +typedef struct viewer_s view_data; +typedef struct syntax_color_s color_data; +typedef struct parser_s parser_data; +typedef struct attr_value_s attr_value; +typedef struct syntax_helper_s syntax_helper; +typedef struct indent_s indent_data; +typedef struct redoundo_s redoundo_data; +typedef struct editor_s edit_data; + +typedef enum attr_value_type +{ + ATTR_VALUE_INTEGER = 1, + ATTR_VALUE_FLOAT = 2, + ATTR_VALUE_CONSTANT = 4, + ATTR_VALUE_PART = 8, + ATTR_VALUE_STATE = 16, + ATTR_VALUE_IMAGE = 32, + ATTR_VALUE_PROGRAM = 64 +} attr_value_type; + +struct attr_value_s +{ + Eina_Array *strs; + float min; + float max; + attr_value_type type; + Eina_Bool program : 1; +}; + +typedef enum { + TEMPLATE_INSERT_DEFAULT, + TEMPLATE_INSERT_LIVE_EDIT +} Template_Insert_Type; + + +/* auto_comp */ +void autocomp_init(void); +void autocomp_term(void); +void autocomp_target_set(edit_data *ed); +void autocomp_enabled_set(Eina_Bool enabled); +Eina_Bool autocomp_enabled_get(void); +Eina_Bool autocomp_event_dispatch(const char *key); + + +/* syntax color */ +color_data *color_init(Eina_Strbuf *strbuf); +void color_term(color_data *cd); +const char *color_cancel(color_data *cd, const char *str, int length, int from_pos, int to_pos, char **from, char **to); +const char *color_apply(color_data *cd, const char *str, int length, char *from, char *to); +Eina_Bool color_ready(color_data *cd); + + +/*parser */ +parser_data *parser_init(void); +void parser_term(parser_data *pd); +Eina_Stringshare *parser_first_group_name_get(parser_data *pd, Evas_Object *entry); +void parser_cur_name_get(parser_data *pd, Evas_Object *entry, void (*cb)(void *data, Eina_Stringshare *part_name, Eina_Stringshare *group_name), void *data); +void parser_cur_group_name_get(parser_data *pd, Evas_Object *entry, void (*cb)(void *data, Eina_Stringshare *part_name, Eina_Stringshare *group_name), void *data); +Eina_Stringshare *parser_cur_name_fast_get(Evas_Object *entry, const char *scope); +Eina_Bool parser_type_name_compare(parser_data *pd, const char *str); +attr_value *parser_attribute_get(parser_data *pd, const char *text, const char *cur); +Eina_Stringshare *parser_paragh_name_get(parser_data *pd, Evas_Object *entry); +char *parser_name_get(parser_data *pd, const char *cur); +void parser_cancel(parser_data *pd); +int parser_line_cnt_get(parser_data *pd EINA_UNUSED, const char *src); +Eina_List *parser_states_filtered_name_get(Eina_List *states); +int parser_end_of_parts_block_pos_get(const Evas_Object *entry, const char *group_name); +Eina_Bool parser_images_pos_get(const Evas_Object *entry, int *ret); +Eina_Bool parser_styles_pos_get(const Evas_Object *entry, int *ret); +const char *parser_colon_pos_get(parser_data *pd EINA_UNUSED, const char *cur); + + +/* syntax helper */ +syntax_helper *syntax_init(void); +void syntax_term(syntax_helper *sh); +color_data *syntax_color_data_get(syntax_helper *sh); +indent_data *syntax_indent_data_get(syntax_helper *sh); + + +/* indent */ +indent_data *indent_init(Eina_Strbuf *strbuf); +void indent_term(indent_data *id); +int indent_space_get(indent_data *id, Evas_Object *entry); +void indent_insert_apply(indent_data *id, Evas_Object *entry, const char *insert, int cur_line); +Eina_Bool indent_delete_apply(indent_data *id, Evas_Object *entry, const char *del, int cur_line); + + +/* build */ +void build_edc(void); +void build_init(void); +void build_term(void); +Eina_Bool build_path_set(Enventor_Path_Type type, const Eina_List *pathes); +Eina_List *build_path_get(Enventor_Path_Type type); +void build_edc_path_set(const char *edc_path); +const char *build_edc_path_get(void); +const char *build_edj_path_get(void); +void build_err_noti_cb_set(void (*cb)(void *data, const char *msg), void *data); + +/* dummy_obj */ +void dummy_obj_new(Evas_Object *layout); +void dummy_obj_del(Evas_Object *layout); +void dummy_obj_update(Evas_Object *layout); + + +/* edj_mgr */ +void edj_mgr_init(Evas_Object *enventor); +void edj_mgr_term(void); +view_data * edj_mgr_view_new(const char *group); +view_data *edj_mgr_view_get(Eina_Stringshare *group); +Evas_Object * edj_mgr_obj_get(void); +view_data *edj_mgr_view_switch_to(view_data *vd); +void edj_mgr_view_del(view_data *vd); +void edj_mgr_reload_need_set(Eina_Bool reload); +Eina_Bool edj_mgr_reload_need_get(void); +void edj_mgr_clear(void); +void edj_mgr_view_scale_set(double scale); +double edj_mgr_view_scale_get(void); + + +/* redoundo */ +redoundo_data *redoundo_init(Evas_Object *entry); +void redoundo_term(redoundo_data *rd); +void redoundo_clear(redoundo_data *rd); +void redoundo_text_push(redoundo_data *rd, const char *text, int pos, int length, Eina_Bool insert); +void redoundo_text_relative_push(redoundo_data *rd, const char *text); +void redoundo_entry_region_push(redoundo_data *rd, int cursor_pos, int cursor_pos2); +int redoundo_undo(redoundo_data *rd, Eina_Bool *changed); +int redoundo_redo(redoundo_data *rd, Eina_Bool *changed); + + +/* edj_viewer */ +view_data * view_init(Evas_Object *enventor, const char *group, void (*del_cb)(void *data), void *data); +void view_term(view_data *vd); +Evas_Object *view_obj_get(view_data *vd); +void view_new(view_data *vd, const char *group); +void view_part_highlight_set(view_data *vd, const char *part_name); +void view_dummy_set(view_data *vd, Eina_Bool dummy_on); +Eina_Bool view_dummy_get(view_data *vd); +void view_program_run(view_data *vd, const char *program); +Eina_Stringshare *view_group_name_get(view_data *vd); +void *view_data_get(view_data *vd); +void view_scale_set(view_data *vd, double scale); +Eina_List *view_parts_list_get(view_data *vd); +Eina_List *view_images_list_get(view_data *vd); +Eina_List *view_programs_list_get(view_data *vd); +Eina_List *view_part_states_list_get(view_data *vd, const char *part); +Eina_List *view_program_targets_get(view_data *vd, const char *prog); +void view_string_list_free(Eina_List *list); + + +/* template */ +Eina_Bool template_part_insert(edit_data *ed, Edje_Part_Type part_type, Template_Insert_Type insert_type, float rel1_x, float rel1_y, float rel2_x, float rel2_y, const Eina_Stringshare *group_name, char *syntax, size_t n); +Eina_Bool template_insert(edit_data *ed, Template_Insert_Type insert_type, char *syntax, size_t n); + + +/* ctxpopup */ +Evas_Object *ctxpopup_candidate_list_create(edit_data *ed, attr_value *attr, double slider_val, Evas_Smart_Cb ctxpopup_dismiss_cb, Evas_Smart_Cb ctxpopup_selected_cb); +Evas_Object *ctxpopup_img_preview_create(edit_data*ed, const char *imgpath, Evas_Smart_Cb ctxpopup_dismiss_cb, Evas_Smart_Cb ctxpopup_relay_cb); + + +/* edc_editor */ +edit_data *edit_init(Evas_Object *enventor); +void edit_term(edit_data *ed); +Evas_Object *edit_obj_get(edit_data *ed); +Eina_Bool edit_changed_get(edit_data *ed); +void edit_changed_set(edit_data *ed, Eina_Bool changed); +void edit_linenumber_set(edit_data *ed, Eina_Bool linenumber); +Eina_Bool edit_linenumber_get(edit_data *ed); +Eina_Bool edit_save(edit_data *ed, const char *file); +void edit_new(edit_data* ed); +void edit_view_sync_cb_set(edit_data *ed, void (*cb)(void *data, Eina_Stringshare *part_name, Eina_Stringshare *group_name), void *data); +void edit_view_sync(edit_data *ed); +void edit_font_scale_set(edit_data *ed, double font_scale); +double edit_font_scale_get(edit_data *ed); +void edit_part_highlight_toggle(edit_data *ed, Eina_Bool msg); +void edit_line_delete(edit_data *ed); +Eina_Stringshare *edit_cur_prog_name_get(edit_data *ed); +Eina_Stringshare *edit_cur_part_name_get(edit_data *ed); +Eina_Stringshare *edit_cur_paragh_get(edit_data *ed); +int edit_max_line_get(edit_data *ed); +void edit_goto(edit_data *ed, int line); +void edit_syntax_color_full_apply(edit_data *ed, Eina_Bool force); +void edit_syntax_color_partial_apply(edit_data *ed, double interval); +Evas_Object *edit_entry_get(edit_data *ed); +void edit_line_increase(edit_data *ed, int cnt); +void edit_line_decrease(edit_data *ed, int cnt); +int edit_cur_indent_depth_get(edit_data *ed); +void edit_redoundo_region_push(edit_data *ed, int cursor_pos1, int cursor_pos2); +void edit_auto_indent_set(edit_data *ed, Eina_Bool auto_indent); +Eina_Bool edit_auto_indent_get(edit_data *ed); +void edit_part_highlight_set(edit_data *ed, Eina_Bool part_highlight); +Eina_Bool edit_part_highlight_get(edit_data *ed); +void edit_ctxpopup_set(edit_data *ed, Eina_Bool ctxpopup); +Eina_Bool edit_ctxpopup_get(edit_data *ed); +Eina_Bool edit_load(edit_data *ed, const char *edc_path); + +#endif diff --git a/src/lib/enventor_smart.c b/src/lib/enventor_smart.c new file mode 100644 index 0000000..e5ea384 --- /dev/null +++ b/src/lib/enventor_smart.c @@ -0,0 +1,502 @@ +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#define ELM_INTERNAL_API_ARGESFSDFEFC 1 +#define ENVENTOR_BETA_API_SUPPORT 1 + +#include +#include +#include +#include "enventor_private.h" + +#define MY_CLASS_NAME_LEGACY "enventor_object" + +#ifdef MY_CLASS +#undef MY_CLASS +#endif + +#define MY_CLASS ENVENTOR_OBJECT_CLASS + +typedef struct _Enventor_Object_Data +{ + EINA_REFCOUNT; + Evas_Object *obj; + + edit_data *ed; + Eio_Monitor *edc_monitor; + Eina_Stringshare *group_name; + +} Enventor_Object_Data; + +static const Evas_Smart_Cb_Description _smart_callbacks[] = { + {SIG_CURSOR_LINE_CHANGED, ""}, + {SIG_CURSOR_GROUP_CHANGED, ""}, + {SIG_LIVE_VIEW_CURSOR_MOVED, ""}, + {SIG_LIVE_VIEW_RESIZED, ""}, + {SIG_MAX_LINE_CHANGED, ""}, + {SIG_COMPILE_ERROR, ""}, + {SIG_PROGRAM_RUN, ""}, + {SIG_CTXPOPUP_SELECTED, ""}, + {SIG_CTXPOPUP_DISMISSED, ""}, + {NULL, NULL} +}; + +/*****************************************************************************/ +/* Internal method implementation */ +/*****************************************************************************/ +static Eina_Bool +file_modified_cb(void *data, int type EINA_UNUSED, void *event) +{ + Eio_Monitor_Event *ev = event; + Enventor_Object_Data *pd = data; + + if (ev->monitor != pd->edc_monitor) return ECORE_CALLBACK_PASS_ON; + if (!edit_changed_get(pd->ed)) return ECORE_CALLBACK_DONE; + if (strcmp(ev->filename, build_edc_path_get())) return ECORE_CALLBACK_DONE; + + build_edc(); + edit_changed_set(pd->ed, EINA_FALSE); + + return ECORE_CALLBACK_DONE; +} + +static void +edit_view_sync_cb(void *data, Eina_Stringshare *part_name, + Eina_Stringshare *group_name) +{ + Enventor_Object_Data *pd = data; + if (pd->group_name != group_name) + { + view_data *vd = edj_mgr_view_get(group_name); + if (vd) edj_mgr_view_switch_to(vd); + else + { + vd = edj_mgr_view_new(group_name); + if (!vd) return; + } + if (group_name) + { + eina_stringshare_del(pd->group_name); + pd->group_name = eina_stringshare_add(group_name); + evas_object_smart_callback_call(pd->obj, SIG_CURSOR_GROUP_CHANGED, + (void *) group_name); + } + } + view_part_highlight_set(VIEW_DATA, part_name); +} + +static void +build_err_noti_cb(void *data, const char *msg) +{ + Evas_Object *enventor = data; + evas_object_smart_callback_call(enventor, SIG_COMPILE_ERROR, (char *)msg); +} + +/*****************************************************************************/ +/* Internal Eo object required routines */ +/*****************************************************************************/ +static void +_enventor_object_class_constructor(Eo_Class *klass) +{ + evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass); +} + +EOLIAN static void +_enventor_object_evas_object_smart_add(Eo *obj, Enventor_Object_Data *pd) +{ + EINA_REFCOUNT_INIT(pd); + pd->obj = obj; + + elm_widget_sub_object_parent_add(obj); + eo_do_super(obj, MY_CLASS, evas_obj_smart_add()); + + build_init(); + autocomp_init(); + edj_mgr_init(obj); + pd->ed = edit_init(obj); + edit_view_sync_cb_set(pd->ed, edit_view_sync_cb, pd); + build_err_noti_cb_set(build_err_noti_cb, obj); + + evas_object_smart_member_add(edit_obj_get(pd->ed), obj); + elm_widget_can_focus_set(obj, EINA_FALSE); + + ecore_event_handler_add(EIO_MONITOR_FILE_MODIFIED, file_modified_cb, pd); +} + +EOLIAN static void +_enventor_object_evas_object_smart_del(Evas_Object *obj EINA_UNUSED, + Enventor_Object_Data *pd) +{ + EINA_REFCOUNT_UNREF(pd) + { + eio_monitor_del(pd->edc_monitor); + eina_stringshare_del(pd->group_name); + edit_term(pd->ed); + edj_mgr_term(); + autocomp_term(); + build_term(); + } +} + +EOLIAN static void +_enventor_object_evas_object_smart_move(Evas_Object *obj EINA_UNUSED, Enventor_Object_Data *pd, Evas_Coord x, Evas_Coord y) +{ + Evas_Object *o = edit_obj_get(pd->ed); + evas_object_move(o, x, y); +} + +EOLIAN static void +_enventor_object_evas_object_smart_resize(Evas_Object *obj EINA_UNUSED, Enventor_Object_Data *pd, Evas_Coord w, Evas_Coord h) +{ + Evas_Object *o = edit_obj_get(pd->ed); + evas_object_resize(o, w, h); +} + +EOLIAN static void +_enventor_object_evas_object_smart_show(Evas_Object *obj EINA_UNUSED, Enventor_Object_Data *pd) +{ + Evas_Object *o = edit_obj_get(pd->ed); + evas_object_show(o); +} + +EOLIAN static void +_enventor_object_evas_object_smart_hide(Evas_Object *obj EINA_UNUSED, Enventor_Object_Data *pd) +{ + Evas_Object *o = edit_obj_get(pd->ed); + evas_object_hide(o); +} + +EOLIAN static void +_enventor_object_evas_object_smart_color_set(Evas_Object *obj EINA_UNUSED, Enventor_Object_Data *pd, int r, int g, int b, int a) +{ + Evas_Object *o = edit_obj_get(pd->ed); + evas_object_color_set(o, r, g, b, a); +} + +EOLIAN static void +_enventor_object_evas_object_smart_clip_set(Evas_Object *obj EINA_UNUSED, Enventor_Object_Data *pd, Evas_Object *clip) +{ + Evas_Object *o = edit_obj_get(pd->ed); + evas_object_clip_set(o, clip); +} + +EOLIAN static void +_enventor_object_evas_object_smart_clip_unset(Evas_Object *obj EINA_UNUSED, Enventor_Object_Data *pd) +{ + Evas_Object *o = edit_obj_get(pd->ed); + evas_object_clip_unset(o); +} + +EOLIAN static void +_enventor_object_eo_base_constructor(Eo *obj, + Enventor_Object_Data *pd EINA_UNUSED) +{ + eo_do_super(obj, MY_CLASS, eo_constructor()); + eo_do(obj, + evas_obj_type_set(MY_CLASS_NAME_LEGACY), + evas_obj_smart_callbacks_descriptions_set(_smart_callbacks)); +} + +EOLIAN static Eina_Bool +_enventor_object_efl_file_file_set(Eo *obj EINA_UNUSED, + Enventor_Object_Data *pd, + const char *file, + const char *group EINA_UNUSED) +{ + eio_monitor_del(pd->edc_monitor); + build_edc_path_set(file); + if (!edit_load(pd->ed, file)) goto err; + autocomp_target_set(pd->ed); + pd->edc_monitor = eio_monitor_add(file); + build_edc(); + edit_changed_set(pd->ed, EINA_FALSE); + + return EINA_TRUE; + +err: + build_edc_path_set(NULL); + pd->edc_monitor = NULL; + return EINA_FALSE; +} + +EOLIAN static void +_enventor_object_linenumber_set(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd, + Eina_Bool linenumber) +{ + edit_linenumber_set(pd->ed, linenumber); +} + +EOLIAN static Eina_Bool +_enventor_object_linenumber_get(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd) +{ + return edit_linenumber_get(pd->ed); +} + +EOLIAN static void +_enventor_object_auto_indent_set(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd, + Eina_Bool auto_indent) +{ + edit_auto_indent_set(pd->ed, auto_indent); +} + +EOLIAN static Eina_Bool +_enventor_object_auto_indent_get(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd) +{ + return edit_auto_indent_get(pd->ed); +} + +EOLIAN static void +_enventor_object_auto_complete_set(Eo *obj EINA_UNUSED, + Enventor_Object_Data *pd EINA_UNUSED, + Eina_Bool auto_complete) +{ + autocomp_enabled_set(auto_complete); +} + +EOLIAN static Eina_Bool +_enventor_object_auto_complete_get(Eo *obj EINA_UNUSED, + Enventor_Object_Data *pd EINA_UNUSED) +{ + return autocomp_enabled_get(); +} + +EOLIAN static void +_enventor_object_modified_set(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd, + Eina_Bool modified) +{ + edit_changed_set(pd->ed, modified); +} + +EOLIAN static Eina_Bool +_enventor_object_modified_get(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd) +{ + return edit_changed_get(pd->ed); +} + +EOLIAN static Eina_Bool +_enventor_object_path_set(Eo *obj EINA_UNUSED, + Enventor_Object_Data *pd EINA_UNUSED, + Enventor_Path_Type type, const Eina_List *pathes) +{ + return build_path_set(type, pathes); +} + +EOLIAN static const Eina_List * +_enventor_object_path_get(Eo *obj EINA_UNUSED, + Enventor_Object_Data *pd EINA_UNUSED, + Enventor_Path_Type type) +{ + return build_path_get(type); +} + +EOLIAN static void +_enventor_object_live_view_scale_set(Eo *obj EINA_UNUSED, + Enventor_Object_Data *pd EINA_UNUSED, + double scale) +{ + edj_mgr_view_scale_set(scale); +} + +EOLIAN static double +_enventor_object_live_view_scale_get(Eo *obj EINA_UNUSED, + Enventor_Object_Data *pd EINA_UNUSED) +{ + return edj_mgr_view_scale_get(); +} + +EOLIAN static void +_enventor_object_dummy_swallow_set(Eo *obj EINA_UNUSED, + Enventor_Object_Data *pd EINA_UNUSED, + Eina_Bool dummy_swallow) +{ + view_dummy_set(VIEW_DATA, dummy_swallow); +} + +EOLIAN static Eina_Bool +_enventor_object_ctxpopup_get(Eo *obj EINA_UNUSED, + Enventor_Object_Data *pd) +{ + return edit_ctxpopup_get(pd->ed); +} + +EOLIAN static void +_enventor_object_ctxpopup_set(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd, + Eina_Bool ctxpopup) +{ + edit_ctxpopup_set(pd->ed, ctxpopup); +} + +EOLIAN static Eina_Bool +_enventor_object_dummy_swallow_get(Eo *obj EINA_UNUSED, + Enventor_Object_Data *pd EINA_UNUSED) +{ + return view_dummy_get(VIEW_DATA); +} + +EOLIAN static void +_enventor_object_part_highlight_set(Eo *obj EINA_UNUSED, + Enventor_Object_Data *pd, + Eina_Bool part_highlight) +{ + edit_part_highlight_set(pd->ed, part_highlight); +} + +EOLIAN static Eina_Bool +_enventor_object_part_highlight_get(Eo *obj EINA_UNUSED, + Enventor_Object_Data *pd) +{ + return edit_part_highlight_get(pd->ed); +} + +EOLIAN static void +_enventor_object_focus_set(Eo *obj EINA_UNUSED, + Enventor_Object_Data *pd EINA_UNUSED, + Eina_Bool focus) +{ + elm_object_focus_set(edit_entry_get(pd->ed), focus); +} + +EOLIAN static Eina_Bool +_enventor_object_focus_get(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd) +{ + return elm_object_focus_get(edit_entry_get(pd->ed)); +} + +EOLIAN static const char * +_enventor_object_text_get(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd) +{ + return elm_entry_entry_get(edit_entry_get(pd->ed)); +} + +EOLIAN static int +_enventor_object_cursor_pos_get(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd) +{ + return elm_entry_cursor_pos_get(edit_entry_get(pd->ed)); +} + +EOLIAN static const char * +_enventor_object_selection_get(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd) +{ + return elm_entry_selection_get(edit_entry_get(pd->ed)); +} + +EOLIAN static void +_enventor_object_select_none(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd) +{ + elm_entry_select_none(edit_entry_get(pd->ed)); +} + +EOLIAN static void +_enventor_object_text_insert(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd, + const char *text) +{ + elm_entry_entry_insert(edit_entry_get(pd->ed), text); +} + +EOLIAN static void +_enventor_object_select_region_set(Eo *obj EINA_UNUSED, + Enventor_Object_Data *pd, int start, int end) +{ + elm_entry_select_region_set(edit_entry_get(pd->ed), start, end); +} + +EOLIAN static void +_enventor_object_font_scale_set(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd, + double font_scale) +{ + edit_font_scale_set(pd->ed, font_scale); +} + +EOLIAN static double +_enventor_object_font_scale_get(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd) +{ + return edit_font_scale_get(pd->ed); +} + +EOLIAN static int +_enventor_object_max_line_get(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd) +{ + return edit_max_line_get(pd->ed); +} + +EOLIAN static void +_enventor_object_line_goto(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd, + int line) +{ + edit_goto(pd->ed, line); +} + +EOLIAN static void +_enventor_object_syntax_color_full_apply(Eo *obj EINA_UNUSED, + Enventor_Object_Data *pd, + Eina_Bool force) +{ + edit_syntax_color_full_apply(pd->ed, force); +} + +EOLIAN static void +_enventor_object_syntax_color_partial_apply(Eo *obj EINA_UNUSED, + Enventor_Object_Data *pd, + double interval) +{ + edit_syntax_color_partial_apply(pd->ed, interval); +} + +EOLIAN static Eina_Bool +_enventor_object_save(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd, + const char *file) +{ + return edit_save(pd->ed, file); +} + +EOLIAN static void +_enventor_object_line_delete(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd) +{ + edit_line_delete(pd->ed); +} + +EOLIAN static Eo * +_enventor_object_live_view_get(Eo *obj EINA_UNUSED, + Enventor_Object_Data *pd EINA_UNUSED) +{ + return edj_mgr_obj_get(); +} + +EOLIAN static Eina_Bool +_enventor_object_template_insert(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd, + char *syntax, size_t n) +{ + return template_insert(pd->ed, TEMPLATE_INSERT_DEFAULT, syntax, n); +} + +EOLIAN static Eina_Bool +_enventor_object_template_part_insert(Eo *obj EINA_UNUSED, + Enventor_Object_Data *pd, + Edje_Part_Type part, float rel1_x, + float rel1_y, float rel2_x, float rel2_y, + char *syntax, size_t n) +{ + return template_part_insert(pd->ed, part, TEMPLATE_INSERT_DEFAULT, rel1_x, + rel1_y, rel2_x, rel2_y, NULL, syntax, n); +} + + +/*****************************************************************************/ +/* Externally accessible calls */ +/*****************************************************************************/ +EAPI Evas_Object * +enventor_object_add(Evas_Object *parent) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL); + Evas_Object *obj = eo_add(MY_CLASS, parent); + return obj; +} + +EAPI Eina_Bool +enventor_object_file_set(Evas_Object *obj, const char *file) +{ + return eo_do(obj, efl_file_set(file, NULL)); +} + +#include "enventor_object.eo.c" diff --git a/src/bin/indent.c b/src/lib/indent.c similarity index 90% rename from src/bin/indent.c rename to src/lib/indent.c index 36da606..8f5c94a 100644 --- a/src/bin/indent.c +++ b/src/lib/indent.c @@ -1,30 +1,20 @@ -#include -#include "common.h" +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif +#define ENVENTOR_BETA_API_SUPPORT 1 + +#include +#include "enventor_private.h" struct indent_s { Eina_Strbuf *strbuf; }; -indent_data * -indent_init(Eina_Strbuf *strbuf) -{ - indent_data *id = malloc(sizeof(indent_data)); - if (!id) - { - EINA_LOG_ERR("Failed to allocate Memory!"); - return NULL; - } - id->strbuf = strbuf; - return id; -} - -void -indent_term(indent_data *id) -{ - free(id); -} +/*****************************************************************************/ +/* Internal method implementation */ +/*****************************************************************************/ static int indent_depth_get(indent_data *id EINA_UNUSED, char *src, int pos) @@ -56,19 +46,6 @@ indent_depth_get(indent_data *id EINA_UNUSED, char *src, int pos) return depth; } -int -indent_space_get(indent_data *id, Evas_Object *entry) -{ - //Get the indentation depth - int pos = elm_entry_cursor_pos_get(entry); - char *src = elm_entry_markup_to_utf8(elm_entry_entry_get(entry)); - int space = indent_depth_get(id, src, pos); - space *= TAB_SPACE; - free(src); - - return space; -} - static void indent_insert_br_case(indent_data *id, Evas_Object *entry) { @@ -169,6 +146,42 @@ indent_insert_bracket_case(indent_data *id, Evas_Object *entry, int cur_line) free(utf8); } +/*****************************************************************************/ +/* Externally accessible calls */ +/*****************************************************************************/ + +indent_data * +indent_init(Eina_Strbuf *strbuf) +{ + indent_data *id = malloc(sizeof(indent_data)); + if (!id) + { + EINA_LOG_ERR("Failed to allocate Memory!"); + return NULL; + } + id->strbuf = strbuf; + return id; +} + +void +indent_term(indent_data *id) +{ + free(id); +} + +int +indent_space_get(indent_data *id, Evas_Object *entry) +{ + //Get the indentation depth + int pos = elm_entry_cursor_pos_get(entry); + char *src = elm_entry_markup_to_utf8(elm_entry_entry_get(entry)); + int space = indent_depth_get(id, src, pos); + space *= TAB_SPACE; + free(src); + + return space; +} + Eina_Bool indent_delete_apply(indent_data *id EINA_UNUSED, Evas_Object *entry, const char *del, int cur_line) diff --git a/src/bin/redoundo.c b/src/lib/redoundo.c similarity index 94% rename from src/bin/redoundo.c rename to src/lib/redoundo.c index 71d821b..c420588 100644 --- a/src/bin/redoundo.c +++ b/src/lib/redoundo.c @@ -1,5 +1,11 @@ -#include -#include "common.h" +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#define ENVENTOR_BETA_API_SUPPORT 1 + +#include +#include "enventor_private.h" #define DEFAULT_QUEUE_SIZE 200 @@ -24,6 +30,10 @@ struct redoundo_s Eina_Bool internal_change : 1; //Entry change by redoundo }; +/*****************************************************************************/ +/* Internal method implementation */ +/*****************************************************************************/ + static void untracked_diff_free(redoundo_data *rd) { @@ -109,6 +119,10 @@ nochange: free(diff); } +/*****************************************************************************/ +/* Externally accessible calls */ +/*****************************************************************************/ + int redoundo_undo(redoundo_data *rd, Eina_Bool *changed) { diff --git a/src/bin/syntax_color.c b/src/lib/syntax_color.c similarity index 96% rename from src/bin/syntax_color.c rename to src/lib/syntax_color.c index 2164a89..0282bd0 100644 --- a/src/bin/syntax_color.c +++ b/src/lib/syntax_color.c @@ -1,5 +1,11 @@ -#include -#include "common.h" +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#define ENVENTOR_BETA_API_SUPPORT 1 + +#include +#include "enventor_private.h" #define COL_NUM 6 @@ -42,6 +48,10 @@ static Eet_Data_Descriptor *edd_scg = NULL; static Eet_Data_Descriptor *edd_color = NULL; static syntax_color_group *scg = NULL; +/*****************************************************************************/ +/* Internal method implementation */ +/*****************************************************************************/ + static void hash_free_cb(void *data) { @@ -208,45 +218,6 @@ init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) cd->ready = EINA_TRUE; } -color_data * -color_init(Eina_Strbuf *strbuf) -{ - color_data *cd = malloc(sizeof(color_data)); - if (!cd) - { - EINA_LOG_ERR("Failed to allocate Memory!"); - return NULL; - } - cd->strbuf = strbuf; - cd->cachebuf = eina_strbuf_new(); - cd->thread = ecore_thread_run(init_thread_blocking, NULL, NULL, cd); - cd->macros = NULL; - - return cd; -} - -void -color_term(color_data *cd) -{ - ecore_thread_cancel(cd->thread); - - eina_hash_free(cd->color_hash); - eina_strbuf_free(cd->cachebuf); - - eina_stringshare_del(cd->col_string); - eina_stringshare_del(cd->col_comment); - eina_stringshare_del(cd->col_macro); - - Eina_Stringshare *macro; - EINA_LIST_FREE(cd->macros, macro) eina_stringshare_del(macro); - - int i; - for(i = 0; i < COL_NUM; i++) - eina_stringshare_del(cd->cols[i]); - - free(cd); -} - static Eina_Bool color_markup_insert_internal(Eina_Strbuf *strbuf, const char **src, int length, char **cur, char **prev, const char *cmp, @@ -679,6 +650,49 @@ color_markup_insert(Eina_Strbuf *strbuf, const char **src, int length, char **cu return 0; } +/*****************************************************************************/ +/* Externally accessible calls */ +/*****************************************************************************/ + +color_data * +color_init(Eina_Strbuf *strbuf) +{ + color_data *cd = malloc(sizeof(color_data)); + if (!cd) + { + EINA_LOG_ERR("Failed to allocate Memory!"); + return NULL; + } + cd->strbuf = strbuf; + cd->cachebuf = eina_strbuf_new(); + cd->thread = ecore_thread_run(init_thread_blocking, NULL, NULL, cd); + cd->macros = NULL; + + return cd; +} + +void +color_term(color_data *cd) +{ + ecore_thread_cancel(cd->thread); + + eina_hash_free(cd->color_hash); + eina_strbuf_free(cd->cachebuf); + + eina_stringshare_del(cd->col_string); + eina_stringshare_del(cd->col_comment); + eina_stringshare_del(cd->col_macro); + + Eina_Stringshare *macro; + EINA_LIST_FREE(cd->macros, macro) eina_stringshare_del(macro); + + int i; + for(i = 0; i < COL_NUM; i++) + eina_stringshare_del(cd->cols[i]); + + free(cd); +} + const char * color_apply(color_data *cd, const char *src, int length, char *from, char *to) { diff --git a/src/bin/syntax_helper.c b/src/lib/syntax_helper.c similarity index 66% rename from src/bin/syntax_helper.c rename to src/lib/syntax_helper.c index e8824b8..0a8382d 100644 --- a/src/bin/syntax_helper.c +++ b/src/lib/syntax_helper.c @@ -1,6 +1,11 @@ -#include -#include "common.h" +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif +#define ENVENTOR_BETA_API_SUPPORT 1 + +#include +#include "enventor_private.h" struct syntax_helper_s { @@ -10,6 +15,10 @@ struct syntax_helper_s Ecore_Timer *buf_flush_timer; }; +/*****************************************************************************/ +/* Internal method implementation */ +/*****************************************************************************/ + static Eina_Bool buf_flush_timer_cb(void *data) { @@ -23,6 +32,10 @@ buf_flush_timer_cb(void *data) return ECORE_CALLBACK_RENEW; } +/*****************************************************************************/ +/* Externally accessible calls */ +/*****************************************************************************/ + syntax_helper * syntax_init(void) { diff --git a/src/bin/template.c b/src/lib/template.c similarity index 84% rename from src/bin/template.c rename to src/lib/template.c index 411d30d..d9977c9 100644 --- a/src/bin/template.c +++ b/src/lib/template.c @@ -1,10 +1,20 @@ -#include -#include "common.h" +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#define ENVENTOR_BETA_API_SUPPORT 1 + +#include +#include "enventor_private.h" #include "template_code.h" const char *NAME_SEED = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; const int NAME_SEED_LEN = 52; +/*****************************************************************************/ +/* Internal method implementation */ +/*****************************************************************************/ + static void template_random_string_create(char *buf, int size) { @@ -27,7 +37,7 @@ image_description_add(edit_data *ed) if (images_block) { elm_entry_cursor_pos_set(edit_entry, cursor_pos); - template_insert(ed, TEMPLATE_INSERT_LIVE_EDIT); + template_insert(ed, TEMPLATE_INSERT_LIVE_EDIT, NULL, 0); } else { @@ -98,16 +108,21 @@ template_part_insert_cursor_pos_set(edit_data *ed, return cursor_pos; } -void +/*****************************************************************************/ +/* Externally accessible calls */ +/*****************************************************************************/ + +Eina_Bool template_part_insert(edit_data *ed, Edje_Part_Type part_type, Template_Insert_Type insert_type, float rel1_x, float rel1_y, float rel2_x, float rel2_y, - const Eina_Stringshare *group_name) + const Eina_Stringshare *group_name, char *syntax, size_t n) { Evas_Object *edit_entry = edit_entry_get(ed); int cursor_pos = template_part_insert_cursor_pos_set(ed, insert_type, group_name); - if (cursor_pos == -1) return; + if (cursor_pos == -1) return EINA_FALSE; + int cursor_pos1 = elm_entry_cursor_pos_get(edit_entry); int space = edit_cur_indent_depth_get(ed); @@ -119,34 +134,33 @@ template_part_insert(edit_data *ed, Edje_Part_Type part_type, int line_cnt; char **t; char buf[64]; - char part[20]; switch(part_type) { case EDJE_PART_TYPE_RECTANGLE: line_cnt = TEMPLATE_PART_RECT_LINE_CNT; t = (char **) &TEMPLATE_PART_RECT; - strcpy(part, "Rect"); + strncpy(syntax, "Rect", n); break; case EDJE_PART_TYPE_TEXT: line_cnt = TEMPLATE_PART_TEXT_LINE_CNT; t = (char **) &TEMPLATE_PART_TEXT; - strcpy(part, "Text"); + strncpy(syntax, "Text", n); break; case EDJE_PART_TYPE_SWALLOW: line_cnt = TEMPLATE_PART_SWALLOW_LINE_CNT; t = (char **) &TEMPLATE_PART_SWALLOW; - strcpy(part, "Swallow"); + strncpy(syntax, "Swallow", n); break; case EDJE_PART_TYPE_TEXTBLOCK: line_cnt = TEMPLATE_PART_TEXTBLOCK_LINE_CNT; t = (char **) &TEMPLATE_PART_TEXTBLOCK; - strcpy(part, "Textblock"); + strncpy(syntax, "Textblock", n); break; case EDJE_PART_TYPE_SPACER: line_cnt = TEMPLATE_PART_SPACER_LINE_CNT; t = (char **) &TEMPLATE_PART_SPACER; - strcpy(part, "Spacer"); + strncpy(syntax, "Spacer", n); break; case EDJE_PART_TYPE_IMAGE: case EDJE_PART_TYPE_NONE: @@ -159,7 +173,7 @@ template_part_insert(edit_data *ed, Edje_Part_Type part_type, case EDJE_PART_TYPE_LAST: line_cnt = TEMPLATE_PART_IMAGE_LINE_CNT; t = (char **) &TEMPLATE_PART_IMAGE; - strcpy(part, "Image"); + strncpy(syntax, "Image", n); break; } @@ -229,71 +243,59 @@ template_part_insert(edit_data *ed, Edje_Part_Type part_type, else if (part_type == EDJE_PART_TYPE_TEXTBLOCK) textblock_style_add(ed, random_name); } - - snprintf(buf, sizeof(buf), "Template code inserted. (%s Part)", part); - stats_info_msg_update(buf); edit_syntax_color_partial_apply(ed, 0); edit_changed_set(ed, EINA_TRUE); - edit_save(ed); + + return EINA_TRUE; } -void -template_insert(edit_data *ed, Template_Insert_Type insert_type) +Eina_Bool +template_insert(edit_data *ed, Template_Insert_Type insert_type, char *syntax, size_t n) { - const char *EXCEPT_MSG = "Can't insert template code here. Move the cursor" - "inside the \"Collections,Images,Parts,Part," - "Programs\" scope."; - Evas_Object *entry = edit_entry_get(ed); Eina_Stringshare *paragh = edit_cur_paragh_get(ed); - if (!paragh) - { - stats_info_msg_update(EXCEPT_MSG); - return; - } + Eina_Bool ret = EINA_FALSE; + if (!paragh) return EINA_FALSE; if (!strcmp(paragh, "parts")) { - template_part_insert(ed, EDJE_PART_TYPE_IMAGE, TEMPLATE_INSERT_DEFAULT, - REL1_X, REL1_Y, REL2_X, REL2_Y, NULL); + ret = template_part_insert(ed, EDJE_PART_TYPE_IMAGE, + TEMPLATE_INSERT_DEFAULT, + REL1_X, REL1_Y, REL2_X, REL2_Y, NULL, syntax, + n); goto end; } int line_cnt; char **t = NULL; - char buf[64]; - char buf2[12]; if (!strcmp(paragh, "part")) { line_cnt = TEMPLATE_DESC_LINE_CNT; t = (char **) &TEMPLATE_DESC; - strcpy(buf2, "Description"); + strncpy(syntax, "Description", n); } else if (!strcmp(paragh, "programs")) { line_cnt = TEMPLATE_PROG_LINE_CNT; t = (char **) &TEMPLATE_PROG; - strcpy(buf2, "Program"); + strncpy(syntax, "Program", n); } else if (!strcmp(paragh, "images")) { line_cnt = TEMPLATE_IMG_LINE_CNT; t = (char **) &TEMPLATE_IMG; - strcpy(buf2, "Image File"); + strncpy(syntax, "Image File", n); } else if (!strcmp(paragh, "collections")) { line_cnt = TEMPLATE_GROUP_LINE_CNT; t = (char **) &TEMPLATE_GROUP; - strcpy(buf2, "Group"); + strncpy(syntax, "Group", n); } - if (!t) - { - stats_info_msg_update(EXCEPT_MSG); - goto end; - } + if (!t) goto end; + int cursor_pos = elm_entry_cursor_pos_get(entry); elm_entry_cursor_line_begin_set(entry); int cursor_pos1 = elm_entry_cursor_pos_get(entry); @@ -324,9 +326,11 @@ template_insert(edit_data *ed, Template_Insert_Type insert_type) elm_entry_cursor_pos_set(entry, cursor_pos); edit_syntax_color_partial_apply(ed, 0); - snprintf(buf, sizeof(buf), "Template code inserted. (%s)", buf2); - stats_info_msg_update(buf); + + ret = EINA_TRUE; end: eina_stringshare_del(paragh); + + return ret; } diff --git a/src/include/template_code.h b/src/lib/template_code.h similarity index 100% rename from src/include/template_code.h rename to src/lib/template_code.h