library support.

current enventor apis are under beta apis.
im notice you these apis could be changed soon.
This commit is contained in:
ChunEon Park 2014-09-30 23:56:16 +09:00
parent 1b76667733
commit e5927b37eb
71 changed files with 3591 additions and 1761 deletions

3
.gitignore vendored
View File

@ -5,6 +5,9 @@
*.swp
*.eet
*~
.*
*.eo.*
enventor
enventorql
Makefile.in

View File

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

View File

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

24
Makefile_Eolian_Helper.am Normal file
View File

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

View File

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

View File

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

5
m4/efl_beta.m4 Normal file
View File

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

6
m4/efl_eo.m4 Normal file
View File

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

11
pc/enventor.pc.in Normal file
View File

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

View File

@ -1,3 +1,3 @@
MAINTAINERCLEANFILES = Makefile.in
SUBDIRS = bin include
SUBDIRS = lib bin include

View File

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

View File

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

View File

@ -1,130 +0,0 @@
#include <Elementary.h>
#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;
}

View File

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

View File

@ -1,4 +1,10 @@
#include <Elementary.h>
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#define ENVENTOR_BETA_API_SUPPORT 1
#include <Enventor.h>
#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

View File

@ -1,5 +1,11 @@
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#define ENVENTOR_BETA_API_SUPPORT 1
#include <Elementary_Cursor.h>
#include <Elementary.h>
#include <Enventor.h>
#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;

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

@ -1,4 +1,10 @@
#include <Elementary.h>
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#define ENVENTOR_BETA_API_SUPPORT 1
#include <Enventor.h>
#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--;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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 "<br/>"
#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"

View File

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

View File

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

View File

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

View File

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

View File

@ -1,26 +0,0 @@
#define QUOT "\""
#define QUOT_C '\"'
#define QUOT_LEN 1
#define EOL "<br/>"
#define EOL_LEN 5
#define TAB "<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);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,4 +0,0 @@
syntax_helper *syntax_init(void);
void syntax_term(syntax_helper *sh);
color_data *syntax_color_data_get(syntax_helper *sh);

View File

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

View File

@ -1,2 +1,2 @@
Evas_Object *tools_create(Evas_Object *parent, edit_data *ed);
Evas_Object *tools_create(Evas_Object *parent, Evas_Object *enventor);

32
src/lib/Enventor.h Normal file
View File

@ -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 <Efl_Config.h>
#include <Elementary.h>
#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

32
src/lib/Enventor.h.in Normal file
View File

@ -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 <Efl_Config.h>
#include <Elementary.h>
#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

1
src/lib/Enventor_Eo.h Normal file
View File

@ -0,0 +1 @@
#include "enventor_object.eo.h"

30
src/lib/Enventor_Legacy.h Normal file
View File

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

56
src/lib/Makefile.am Normal file
View File

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

View File

@ -1,6 +1,12 @@
#include <Elementary.h>
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#define ENVENTOR_BETA_API_SUPPORT 1
#include <Enventor.h>
#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;
}

251
src/lib/build.c Normal file
View File

@ -0,0 +1,251 @@
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#define ENVENTOR_BETA_API_SUPPORT 1
#include <Enventor.h>
#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);
}

View File

@ -1,5 +1,11 @@
#include <Elementary.h>
#include "common.h"
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#define ENVENTOR_BETA_API_SUPPORT 1
#include <Enventor.h>
#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;
}

View File

@ -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 <Elementary.h>
#include <Enventor.h>
#include <Edje_Edit.h>
#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;

View File

@ -1,5 +1,12 @@
#include <Elementary.h>
#include "common.h"
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#define ENVENTOR_BETA_API_SUPPORT 1
#include <Enventor.h>
#include <Eio.h>
#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;
}

View File

@ -1,5 +1,11 @@
#include <Elementary.h>
#include "common.h"
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#define ENVENTOR_BETA_API_SUPPORT 1
#include <Enventor.h>
#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)
{

View File

@ -1,5 +1,11 @@
#include <Elementary.h>
#include "common.h"
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#define ENVENTOR_BETA_API_SUPPORT 1
#include <Enventor.h>
#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;
}

View File

@ -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 <Elementary.h>
#include <Enventor.h>
#include <Edje_Edit.h>
#include <Eio.h>
#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;

135
src/lib/enventor_main.c Normal file
View File

@ -0,0 +1,135 @@
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#define ENVENTOR_BETA_API_SUPPORT 1
#include <Enventor.h>
#include <Eio.h>
#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;
}

408
src/lib/enventor_object.eo Normal file
View File

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

225
src/lib/enventor_private.h Normal file
View File

@ -0,0 +1,225 @@
#ifndef __ENVENTOR_PRIVATE_H__
#define __ENVENTOR_PRIVATE_H__
#define QUOT "\""
#define QUOT_C '\"'
#define QUOT_LEN 1
#define EOL "<br/>"
#define EOL_LEN 5
#define TAB "<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

502
src/lib/enventor_smart.c Normal file
View File

@ -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 <Enventor.h>
#include <Eio.h>
#include <elm_widget.h>
#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"

View File

@ -1,30 +1,20 @@
#include <Elementary.h>
#include "common.h"
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#define ENVENTOR_BETA_API_SUPPORT 1
#include <Enventor.h>
#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)

View File

@ -1,5 +1,11 @@
#include <Elementary.h>
#include "common.h"
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#define ENVENTOR_BETA_API_SUPPORT 1
#include <Enventor.h>
#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)
{

View File

@ -1,5 +1,11 @@
#include <Elementary.h>
#include "common.h"
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#define ENVENTOR_BETA_API_SUPPORT 1
#include <Enventor.h>
#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)
{

View File

@ -1,6 +1,11 @@
#include <Elementary.h>
#include "common.h"
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#define ENVENTOR_BETA_API_SUPPORT 1
#include <Enventor.h>
#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)
{

View File

@ -1,10 +1,20 @@
#include <Elementary.h>
#include "common.h"
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#define ENVENTOR_BETA_API_SUPPORT 1
#include <Enventor.h>
#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;
}