From 799fd32e13b5cf3e313badb73572821d22974064 Mon Sep 17 00:00:00 2001 From: Jaehyun Cho Date: Tue, 3 Feb 2015 13:42:12 +0900 Subject: [PATCH] setting: Add the Text Editor mode in setting. Add the Text Editor mode in setting by adding text_setting.c. text_setting.c covers the syntax coloring and the syntax font scaling. --- data/color/Makefile.am | 3 +- data/color/syntax_template.dat | 1 + data/themes/default/layout_setting.edc | 680 +++++++++++--------- src/bin/Makefile.am | 1 + src/bin/config_data.c | 36 -- src/bin/main.c | 56 -- src/bin/setting.c | 293 ++++----- src/bin/text_setting.c | 853 +++++++++++++++++++++++++ src/include/Makefile.am | 1 + src/include/config_data.h | 2 - src/include/text_setting.h | 35 + 11 files changed, 1431 insertions(+), 530 deletions(-) create mode 100644 data/color/syntax_template.dat create mode 100644 src/bin/text_setting.c create mode 100644 src/include/text_setting.h diff --git a/data/color/Makefile.am b/data/color/Makefile.am index aa8f3d3..d1d438a 100644 --- a/data/color/Makefile.am +++ b/data/color/Makefile.am @@ -7,7 +7,8 @@ color.src filesdir = $(datadir)/$(PACKAGE)/color files_DATA = \ -color.eet +color.eet \ +syntax_template.dat %.eet: %.src $(EET_EET) -e \ diff --git a/data/color/syntax_template.dat b/data/color/syntax_template.dat new file mode 100644 index 0000000..d5ec66a --- /dev/null +++ b/data/color/syntax_template.dat @@ -0,0 +1 @@ + //comment
#define RECT_COLOR 0 136 170 255
part { name: "rect";
type: RECT;
description { state: "default" 0.0;
rel1.relative: 0.0 0.0;
rel2.relative: 1.0 1.0;
color: RECT_COLOR;
}
}
program { name: "mouse_down";
signal: "mouse,down,1";
source: "rect";
action: STATE_SET "default" 0.0;
target: "rect";
}
script {
public flag = 0;
public func() {
if (!get_int(flag)) set_int(flag, 1);
}
} diff --git a/data/themes/default/layout_setting.edc b/data/themes/default/layout_setting.edc index 4081bb9..44e1ba9 100644 --- a/data/themes/default/layout_setting.edc +++ b/data/themes/default/layout_setting.edc @@ -28,8 +28,8 @@ group { name: "setting_layout"; scale: 1; clip_to: "clipper"; description { - min: 600 350; - max: 600 350; + min: 600 380; + max: 600 380; fixed: 1 1; image.normal: "frame_bg.png"; image.border: 10 10 10 10; @@ -104,307 +104,39 @@ group { name: "setting_layout"; color: COL_HI; } } - part { name: "img_path_frame"; - type: SPACER; - description { - rel1 {to: "title_frame"; relative: 0 1;} - rel2 {to: "title_frame"; relative: 1 1;} - align: 0.5 0; - min: 0 30; - fixed: 0 1; - } - } - part { name: "snd_path_frame"; - type: SPACER; - scale: 1; - description { - rel1 {to: "img_path_frame"; relative: 0 1;} - rel2 {to: "img_path_frame"; relative: 1 1;} - align: 0.5 0; - min: 0 30; - fixed: 0 1; - } - } - part { name: "fnt_path_frame"; - type: SPACER; - scale: 1; - description { - rel1 {to: "snd_path_frame"; relative: 0 1;} - rel2 {to: "snd_path_frame"; relative: 1 1;} - align: 0.5 0; - min: 0 30; - fixed: 0 1; - } - } - part { name: "dat_path_frame"; - type: SPACER; - scale: 1; - description { - rel1 {to: "fnt_path_frame"; relative: 0 1;} - rel2 {to: "fnt_path_frame"; relative: 1 1;} - align: 0.5 0; - min: 0 30; - fixed: 0 1; - } - } - part { name: "preference_frame"; - type: SPACER; - scale: 1; - description { - 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; - } - } - part { name: "img_path_icon"; - type: IMAGE; - scale: 1; - clip_to: "clipper"; - description { - align: 0 0.5; - min: 20 20; - max: 20 20; - fixed: 1 1; - rel1.to: "img_path_frame"; - rel2.to: "img_path_frame"; - image.normal: "folder.png"; - } - } - part { name: "img_path_guide"; - type: TEXT; - scale: 1; - clip_to: "clipper"; - effect: SHADOW BOTTOM; - description { - rel1 {to: "img_path_icon"; relative: 1 0; offset: 5 1;} - rel2 {to: "img_path_icon"; relative: 1 1;} - color: COL_NM; - align: 0 0.5; - fixed: 1 1; - text { - font: FN; - text: "Image Paths:"; - size: 11; - align: 0 0.5; - min: 1 0; - ellipsis: -1; - } - } - } - part { name: "elm.swallow.img_path_entry"; + part { name: "elm.swallow.tabbar"; type: SWALLOW; scale: 1; clip_to: "clipper"; - description { - align: 0 0; - fixed: 1 1; - rel1.to_x: "img_path_guide"; - rel1.to_y: "img_path_guide"; - rel1.offset: 5 0; - rel1.relative: 1 0; - rel2.to: "img_path_frame"; + description { state: "default" 0.0; + min: 0 25; + max: -1 25; + align: 0.5 0.0; + fixed: 0 1; + rel1 {to: "title_frame"; relative: 0.0 1.0; offset: 0 5;} + rel2.to: "title_frame"; } } - part { name: "snd_path_icon"; - type: IMAGE; - scale: 1; - clip_to: "clipper"; - description { - align: 0 0.5; - min: 20 20; - max: 20 20; - fixed: 1 1; - rel1.to: "snd_path_frame"; - rel2.to: "snd_path_frame"; - image.normal: "folder.png"; - } - } - part { name: "snd_path_guide"; - type: TEXT; - effect: SHADOW BOTTOM; - scale: 1; - clip_to: "clipper"; - description { - rel1 {to: "snd_path_icon"; relative: 1 0; offset: 5 1;} - rel2 {to: "snd_path_icon"; relative: 1 1;} - color: COL_NM; - align: 0 0.5; - fixed: 1 1; - text { - font: FN; - text: "Sound Paths:"; - size: 11; - align: 0 0.5; - min: 1 0; - ellipsis: -1; - } - } - } - part { name: "elm.swallow.snd_path_entry"; + part { name: "elm.swallow.content"; type: SWALLOW; scale: 1; clip_to: "clipper"; - description { - align: 0 0; - fixed: 1 1; - rel1.to_x: "snd_path_guide"; - rel1.to_y: "snd_path_guide"; - rel1.offset: 5 0; - rel1.relative: 1 0; - rel2.to: "snd_path_frame"; - } - } - part { name: "fnt_path_icon"; - type: IMAGE; - scale: 1; - clip_to: "clipper"; - description { - align: 0 0.5; - min: 20 20; - max: 20 20; - fixed: 1 1; - rel1.to: "fnt_path_frame"; - rel2.to: "fnt_path_frame"; - image.normal: "folder.png"; - } - } - part { name: "fnt_path_guide"; - type: TEXT; - effect: SHADOW BOTTOM; - scale: 1; - clip_to: "clipper"; - description { - rel1 {to: "fnt_path_icon"; relative: 1 0; offset: 5 1;} - rel2 {to: "fnt_path_icon"; relative: 1 1;} - color: COL_NM; - align: 0 0.5; - fixed: 1 1; - text { - font: FN; - text: "Font Paths:"; - size: 11; - align: 0 0.5; - min: 1 0; - ellipsis: -1; + description { state: "default" 0.0; + rel1 { + to: "elm.swallow.tabbar"; + relative: 0.0 1.0; } - } - } - part { name: "elm.swallow.fnt_path_entry"; - type: SWALLOW; - scale: 1; - clip_to: "clipper"; - description { - align: 0 0; - fixed: 1 1; - rel1.to_x: "fnt_path_guide"; - rel1.to_y: "fnt_path_guide"; - rel1.offset: 17 0; - rel1.relative: 1 0; - rel2.to: "fnt_path_frame"; - } - } - part { name: "dat_path_icon"; - type: IMAGE; - scale: 1; - clip_to: "clipper"; - description { - align: 0 0.5; - min: 20 20; - max: 20 20; - fixed: 1 1; - rel1.to: "dat_path_frame"; - rel2.to: "dat_path_frame"; - image.normal: "folder.png"; - } - } - part { name: "dat_path_guide"; - type: TEXT; - effect: SHADOW BOTTOM; - scale: 1; - clip_to: "clipper"; - description { - 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; - text { - font: FN; - text: "Data Paths:"; - size: 11; - align: 0 0.5; - min: 1 0; - ellipsis: -1; + rel2 { + to_x: "base_frame"; + to_y: "elm.swallow.reset_btn"; + relative: 1.0 0.0; + offset: -1 -11; } } } - part { name: "elm.swallow.dat_path_entry"; - type: SWALLOW; - scale: 1; - clip_to: "clipper"; - description { - align: 0 0; - fixed: 1 1; - rel1.to_x: "dat_path_guide"; - rel1.to_y: "dat_path_guide"; - rel1.offset: 14 0; - rel1.relative: 1 0; - rel2.to: "dat_path_frame"; - } - } - part { name: "preference_icon"; - type: IMAGE; - scale: 1; - clip_to: "clipper"; - description { - align: 0 0; - min: 20 20; - max: 20 20; - fixed: 1 1; - rel1.to: "preference_frame"; - rel2.to: "preference_frame"; - image.normal: "preference.png"; - } - } - part { name: "preference_guide"; - type: TEXT; - effect: SHADOW BOTTOM; - scale: 1; - clip_to: "clipper"; - description { - rel1 {to: "preference_icon"; relative: 1 0; offset: 5 1;} - rel2 {to: "preference_icon"; relative: 1 1;} - color: COL_NM; - align: 0 0; - fixed: 1 1; - text { - font: FN; - text: "Preferences:"; - size: 11; - align: 0 0; - min: 1 0; - ellipsis: -1; - } - } - } - part { name: "elm.swallow.preference"; - type: SWALLOW; - scale: 1; - clip_to: "clipper"; - description { - rel1.to_x: "preference_guide"; - rel1.to_y: "preference_guide"; - rel1.offset: 0 5; - rel1.relative: 0 1; - rel2.to: "preference_frame"; - } - } part { name: "elm.swallow.apply_btn"; type: SWALLOW; scale: 1; - clip_to: "clipper"; description { align: 1 0.5; min: 50 25; @@ -418,7 +150,6 @@ group { name: "setting_layout"; part { name: "elm.swallow.reset_btn"; type: SWALLOW; scale: 1; - clip_to: "clipper"; description { align: 0.5 1; min: 50 25; @@ -432,7 +163,6 @@ group { name: "setting_layout"; part { name: "elm.swallow.cancel_btn"; type: SWALLOW; scale: 1; - clip_to: "clipper"; description { align: 0 0.5; min: 50 25; @@ -494,3 +224,373 @@ group { name: "setting_layout"; } } } + +group { name: "general_layout"; + parts { + part { name: "base_frame"; + type: SPACER; + scale: 1; + description { + min: 580 265; + max: 580 265; + fixed: 1 1; + } + } + part { name: "img_path_frame"; + type: SPACER; + description { + rel1 {to: "base_frame"; relative: 0 0;} + rel2 {to: "base_frame"; relative: 1 0;} + align: 0.5 0; + min: 0 30; + fixed: 0 1; + } + } + part { name: "snd_path_frame"; + type: SPACER; + scale: 1; + description { + rel1 {to: "img_path_frame"; relative: 0 1;} + rel2 {to: "img_path_frame"; relative: 1 1;} + align: 0.5 0; + min: 0 30; + fixed: 0 1; + } + } + part { name: "fnt_path_frame"; + type: SPACER; + scale: 1; + description { + rel1 {to: "snd_path_frame"; relative: 0 1;} + rel2 {to: "snd_path_frame"; relative: 1 1;} + align: 0.5 0; + min: 0 30; + fixed: 0 1; + } + } + part { name: "dat_path_frame"; + type: SPACER; + scale: 1; + description { + rel1 {to: "fnt_path_frame"; relative: 0 1;} + rel2 {to: "fnt_path_frame"; relative: 1 1;} + align: 0.5 0; + min: 0 30; + fixed: 0 1; + } + } + part { name: "preference_frame"; + type: SPACER; + scale: 1; + description { + 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; + } + } + part { name: "img_path_icon"; + type: IMAGE; + scale: 1; + description { + align: 0 0.5; + min: 20 20; + max: 20 20; + fixed: 1 1; + rel1.to: "img_path_frame"; + rel2.to: "img_path_frame"; + image.normal: "folder.png"; + } + } + part { name: "img_path_guide"; + type: TEXT; + scale: 1; + effect: SHADOW BOTTOM; + description { + rel1 {to: "img_path_icon"; relative: 1 0; offset: 5 1;} + rel2 {to: "img_path_icon"; relative: 1 1;} + color: COL_NM; + align: 0 0.5; + fixed: 1 1; + text { + font: FN; + text: "Image Paths:"; + size: 11; + align: 0 0.5; + min: 1 0; + ellipsis: -1; + } + } + } + part { name: "elm.swallow.img_path_entry"; + type: SWALLOW; + scale: 1; + description { + align: 0 0; + fixed: 1 1; + rel1.to_x: "img_path_guide"; + rel1.to_y: "img_path_guide"; + rel1.offset: 5 0; + rel1.relative: 1 0; + rel2.to: "img_path_frame"; + } + } + part { name: "snd_path_icon"; + type: IMAGE; + scale: 1; + description { + align: 0 0.5; + min: 20 20; + max: 20 20; + fixed: 1 1; + rel1.to: "snd_path_frame"; + rel2.to: "snd_path_frame"; + image.normal: "folder.png"; + } + } + part { name: "snd_path_guide"; + type: TEXT; + effect: SHADOW BOTTOM; + scale: 1; + description { + rel1 {to: "snd_path_icon"; relative: 1 0; offset: 5 1;} + rel2 {to: "snd_path_icon"; relative: 1 1;} + color: COL_NM; + align: 0 0.5; + fixed: 1 1; + text { + font: FN; + text: "Sound Paths:"; + size: 11; + align: 0 0.5; + min: 1 0; + ellipsis: -1; + } + } + } + part { name: "elm.swallow.snd_path_entry"; + type: SWALLOW; + scale: 1; + description { + align: 0 0; + fixed: 1 1; + rel1.to_x: "snd_path_guide"; + rel1.to_y: "snd_path_guide"; + rel1.offset: 5 0; + rel1.relative: 1 0; + rel2.to: "snd_path_frame"; + } + } + part { name: "fnt_path_icon"; + type: IMAGE; + scale: 1; + description { + align: 0 0.5; + min: 20 20; + max: 20 20; + fixed: 1 1; + rel1.to: "fnt_path_frame"; + rel2.to: "fnt_path_frame"; + image.normal: "folder.png"; + } + } + part { name: "fnt_path_guide"; + type: TEXT; + effect: SHADOW BOTTOM; + scale: 1; + description { + rel1 {to: "fnt_path_icon"; relative: 1 0; offset: 5 1;} + rel2 {to: "fnt_path_icon"; relative: 1 1;} + color: COL_NM; + align: 0 0.5; + fixed: 1 1; + text { + font: FN; + text: "Font Paths:"; + size: 11; + align: 0 0.5; + min: 1 0; + ellipsis: -1; + } + } + } + part { name: "elm.swallow.fnt_path_entry"; + type: SWALLOW; + scale: 1; + description { + align: 0 0; + fixed: 1 1; + rel1.to_x: "fnt_path_guide"; + rel1.to_y: "fnt_path_guide"; + rel1.offset: 17 0; + rel1.relative: 1 0; + rel2.to: "fnt_path_frame"; + } + } + part { name: "dat_path_icon"; + type: IMAGE; + scale: 1; + description { + align: 0 0.5; + min: 20 20; + max: 20 20; + fixed: 1 1; + rel1.to: "dat_path_frame"; + rel2.to: "dat_path_frame"; + image.normal: "folder.png"; + } + } + part { name: "dat_path_guide"; + type: TEXT; + effect: SHADOW BOTTOM; + scale: 1; + description { + 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; + text { + font: FN; + text: "Data Paths:"; + size: 11; + align: 0 0.5; + min: 1 0; + ellipsis: -1; + } + } + } + part { name: "elm.swallow.dat_path_entry"; + type: SWALLOW; + scale: 1; + description { + align: 0 0; + fixed: 1 1; + rel1.to_x: "dat_path_guide"; + rel1.to_y: "dat_path_guide"; + rel1.offset: 14 0; + rel1.relative: 1 0; + rel2.to: "dat_path_frame"; + } + } + part { name: "preference_icon"; + type: IMAGE; + scale: 1; + description { + align: 0 0; + min: 20 20; + max: 20 20; + fixed: 1 1; + rel1.to: "preference_frame"; + rel2.to: "preference_frame"; + image.normal: "preference.png"; + } + } + part { name: "preference_guide"; + type: TEXT; + effect: SHADOW BOTTOM; + scale: 1; + description { + rel1 {to: "preference_icon"; relative: 1 0; offset: 5 1;} + rel2 {to: "preference_icon"; relative: 1 1;} + color: COL_NM; + align: 0 0; + fixed: 1 1; + text { + font: FN; + text: "Preferences:"; + size: 11; + align: 0 0; + min: 1 0; + ellipsis: -1; + } + } + } + part { name: "elm.swallow.preference"; + type: SWALLOW; + scale: 1; + description { + rel1.to_x: "preference_guide"; + rel1.to_y: "preference_guide"; + rel1.offset: 0 5; + rel1.relative: 0 1; + rel2.to: "preference_frame"; + } + } + } +} + +group { name: "text_setting_layout"; + parts { + part { name: "base_frame"; + type: SPACER; + scale: 1; + description { + min: 580 265; + max: 580 265; + fixed: 1 1; + } + } + part { name: "text_setting_guide"; + type: TEXT; + scale: 1; + effect: SHADOW BOTTOM; + description { + rel1 {to: "base_frame"; relative: 0 0; offset: 5 0;} + rel2 {to: "base_frame"; relative: 0.5 0;} + color: COL_NM; + min: 0 20; + align: 0 0; + fixed: 0 1; + text { + font: FN; + text: "Double click a keyword to change its color :"; + size: 11; + align: 0 0.5; + min: 1 0; + ellipsis: -1; + } + } + } + part { name: "text_setting_frame"; + type: SPACER; + scale: 1; + description { + rel1 {to_x: "base_frame"; to_y: "text_setting_guide"; relative: 0 1;} + rel2 {to: "base_frame"; relative: 0.5 0;} + align: 0.5 0; + min: 0 245; + fixed: 0 1; + } + } + part { name: "elm.swallow.text_setting"; + type: SWALLOW; + scale: 1; + description { state: "default" 0.0; + fixed: 0 1; + rel1.to: "text_setting_frame"; + rel2.to: "text_setting_frame"; + } + } + part { name: "preference_frame"; + type: SPACER; + scale: 1; + description { + rel1 {to: "base_frame"; relative: 0.5 0; offset: 5 0;} + rel2 {to: "base_frame"; relative: 1 0;} + align: 0.5 0; + min: 0 90; + fixed: 0 1; + } + } + part { name: "elm.swallow.preference"; + type: SWALLOW; + scale: 1; + description { + rel1.to: "preference_frame"; + rel2.to: "preference_frame"; + } + } + } +} diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index 711d685..2a27e4f 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -22,6 +22,7 @@ enventor_SOURCES = \ goto.c \ newfile.c \ setting.c \ + text_setting.c \ globals.c \ live_edit.c \ console.c \ diff --git a/src/bin/config_data.c b/src/bin/config_data.c index 27dd93d..75f2edb 100644 --- a/src/bin/config_data.c +++ b/src/bin/config_data.c @@ -14,8 +14,6 @@ typedef struct config_s Eina_Strbuf *edc_fnt_path_buf; //pre-stored font paths for edc compile. Eina_Strbuf *edc_dat_path_buf; //pre-stored data paths for edc compile. - Eina_List *syntax_color_list; - float font_scale; double view_scale; double console_size; @@ -38,7 +36,6 @@ typedef struct config_s static config_data *g_cd = NULL; static Eet_Data_Descriptor *edd_base = NULL; -static Eet_Data_Descriptor *edd_color = NULL; static void config_edj_path_update(config_data *cd) @@ -189,13 +186,6 @@ config_load(void) else cd->edc_dat_path_buf = config_paths_buf_set(cd->edc_dat_path_list, " -dd "); - if (!cd->syntax_color_list) - { - Enventor_Syntax_Color_Type color_type = ENVENTOR_SYNTAX_COLOR_STRING; - for (; color_type < ENVENTOR_SYNTAX_COLOR_LAST; color_type++) - cd->syntax_color_list = eina_list_append(cd->syntax_color_list, NULL); - } - return cd; } @@ -215,8 +205,6 @@ eddc_init(void) "edc_fnt_path_list", edc_fnt_path_list); EET_DATA_DESCRIPTOR_ADD_LIST_STRING(edd_base, config_data, "edc_dat_path_list", edc_dat_path_list); - EET_DATA_DESCRIPTOR_ADD_LIST_STRING(edd_base, config_data, - "syntax_color_list", syntax_color_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", @@ -291,8 +279,6 @@ config_term(void) EINA_LIST_FREE(cd->edc_fnt_path_list, str) eina_stringshare_del(str); EINA_LIST_FREE(cd->edc_dat_path_list, str) eina_stringshare_del(str); - EINA_LIST_FREE(cd->syntax_color_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); @@ -551,28 +537,6 @@ config_edj_path_get(void) return cd->edj_path; } -void -config_syntax_color_set(Enventor_Syntax_Color_Type color_type, - const char *val) -{ - config_data *cd = g_cd; - Eina_List *target_list; - - target_list = eina_list_nth_list(cd->syntax_color_list, color_type); - if (!target_list) return; - - eina_stringshare_del(eina_list_data_get(target_list)); - if (val) - eina_list_data_set(target_list, eina_stringshare_add(val)); -} - -const char * -config_syntax_color_get(Enventor_Syntax_Color_Type color_type) -{ - config_data *cd = g_cd; - return (const char *) eina_list_nth(cd->syntax_color_list, color_type); -} - Eina_Bool config_linenumber_get(void) { diff --git a/src/bin/main.c b/src/bin/main.c index 82b8a37..1b68e55 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -109,56 +109,6 @@ template_insert_patch(app_data *ad, const char *key) return ECORE_CALLBACK_DONE; } -static void -syntax_color_update(Evas_Object *enventor) -{ - const char *config_color; - const char *enventor_color; - Eina_Bool color_changed = EINA_FALSE; - Enventor_Syntax_Color_Type color_type; - - color_type = ENVENTOR_SYNTAX_COLOR_STRING; - for (; color_type < ENVENTOR_SYNTAX_COLOR_LAST; color_type++) - { - config_color = config_syntax_color_get(color_type); - if (config_color) - { - enventor_color = enventor_object_syntax_color_get(enventor, - color_type); - if (strcmp(config_color, enventor_color)) - { - enventor_object_syntax_color_set(enventor, color_type, - config_color); - color_changed = EINA_TRUE; - } - } - } - - if (color_changed) - enventor_object_syntax_color_full_apply(enventor, EINA_TRUE); -} - -static void -syntax_color_init(Evas_Object *enventor) -{ - const char *config_color; - const char *enventor_color; - Eina_Bool color_changed = EINA_FALSE; - Enventor_Syntax_Color_Type color_type; - - color_type = ENVENTOR_SYNTAX_COLOR_STRING; - for (; color_type < ENVENTOR_SYNTAX_COLOR_LAST; color_type++) - { - config_color = config_syntax_color_get(color_type); - if (!config_color) - { - enventor_color = enventor_object_syntax_color_get(enventor, - color_type); - config_syntax_color_set(color_type, enventor_color); - } - } -} - static void config_update_cb(void *data) { @@ -183,8 +133,6 @@ config_update_cb(void *data) enventor_object_part_highlight_set(enventor, config_part_highlight_get()); enventor_object_live_view_scale_set(enventor, config_view_scale_get()); - syntax_color_update(enventor); - Evas_Coord w, h; if (config_view_size_configurable_get()) config_view_size_get(&w, &h); @@ -892,10 +840,6 @@ init(app_data *ad, int argc, char **argv) template_show(ad); - //Initialize syntax color. - syntax_color_init(ad->enventor); - syntax_color_update(ad->enventor); - return EINA_TRUE; } diff --git a/src/bin/setting.c b/src/bin/setting.c index 3ef0339..804c000 100644 --- a/src/bin/setting.c +++ b/src/bin/setting.c @@ -1,26 +1,25 @@ #include "common.h" +#include "text_setting.h" struct setting_s { Evas_Object *setting_layout; + + Evas_Object *general_layout; + Evas_Object *img_path_entry; Evas_Object *snd_path_entry; Evas_Object *fnt_path_entry; Evas_Object *dat_path_entry; - Evas_Object *slider_font; Evas_Object *slider_view; - Evas_Object *toggle_tools; - Evas_Object *toggle_stats; - Evas_Object *toggle_linenum; - Evas_Object *toggle_highlight; - Evas_Object *toggle_swallow; - Evas_Object *toggle_indent; - Evas_Object *toggle_autocomp; - Evas_Object *view_size_w_entry; Evas_Object *view_size_h_entry; Evas_Object *toggle_view_size; + Evas_Object *toggle_highlight; + Evas_Object *toggle_swallow; + Evas_Object *toggle_stats; + Evas_Object *toggle_tools; }; typedef struct setting_s setting_data; @@ -89,6 +88,9 @@ setting_dismiss_done_cb(void *data, Evas_Object *obj EINA_UNUSED, const char *source EINA_UNUSED) { setting_data *sd = data; + + text_setting_term(); + evas_object_del(sd->setting_layout); sd->setting_layout = NULL; menu_deactivate_request(); @@ -107,21 +109,20 @@ setting_apply_btn_cb(void *data, Evas_Object *obj EINA_UNUSED, 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_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)); - config_linenumber_set(elm_check_state_get(sd->toggle_linenum)); config_part_highlight_set(elm_check_state_get(sd->toggle_highlight)); config_dummy_swallow_set(elm_check_state_get(sd->toggle_swallow)); - config_auto_indent_set(elm_check_state_get(sd->toggle_indent)); - config_auto_complete_set(elm_check_state_get(sd->toggle_autocomp)); config_view_size_configurable_set(elm_check_state_get(sd->toggle_view_size)); + text_setting_config_set(); Evas_Coord w = (Evas_Coord)atoi(elm_entry_entry_get(sd->view_size_w_entry)); Evas_Coord h = (Evas_Coord)atoi(elm_entry_entry_get(sd->view_size_h_entry)); config_view_size_set(w, h); + text_setting_syntax_color_save(); + config_apply(); setting_close(); @@ -149,16 +150,19 @@ setting_reset_btn_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, 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_scale_get()); elm_slider_value_set(sd->slider_view, (double) config_view_scale_get()); elm_check_state_set(sd->toggle_tools, config_tools_get()); elm_check_state_set(sd->toggle_stats, config_stats_bar_get()); - elm_check_state_set(sd->toggle_linenum, config_linenumber_get()); elm_check_state_set(sd->toggle_highlight, config_part_highlight_get()); elm_check_state_set(sd->toggle_swallow, config_dummy_swallow_get()); - elm_check_state_set(sd->toggle_indent, config_auto_indent_get()); - elm_check_state_set(sd->toggle_autocomp, config_auto_complete_get()); + + text_setting_font_scale_set((double) config_font_scale_get()); + text_setting_linenumber_set(config_linenumber_get()); + text_setting_auto_indent_set(config_auto_indent_get()); + text_setting_auto_complete_set(config_auto_complete_get()); + + text_setting_syntax_color_reset(); } static Evas_Object * @@ -197,33 +201,17 @@ toggle_view_size_changed_cb(void *data, Evas_Object *obj, elm_object_disabled_set(sd->view_size_h_entry, !toggle_on); } -void -setting_open(void) +static Evas_Object * +general_layout_create(setting_data *sd, Evas_Object *parent) { static Elm_Entry_Filter_Accept_Set digits_filter_data; static Elm_Entry_Filter_Limit_Size limit_filter_data; - setting_data *sd = g_sd; - if (sd) return; - - sd = calloc(1, sizeof(setting_data)); - if (!sd) - { - EINA_LOG_ERR("Failed to allocate Memory!"); - return; - } - g_sd = sd; - - search_close(); - goto_close(); //Layout - Evas_Object *layout = elm_layout_add(base_win_get()); - elm_layout_file_set(layout, EDJE_PATH, "setting_layout"); - elm_object_signal_callback_add(layout, "elm,state,dismiss,done", "", - setting_dismiss_done_cb, sd); + Evas_Object *layout = elm_layout_add(parent); + elm_layout_file_set(layout, EDJE_PATH, "general_layout"); evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_show(layout); - base_win_resize_object_add(layout); //Image Path Entry Evas_Object *img_path_entry = entry_create(layout); @@ -259,91 +247,14 @@ setting_open(void) //Box Evas_Object *box = elm_box_add(scroller); - elm_box_horizontal_set(box, EINA_TRUE); evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_show(box); elm_object_content_set(scroller, box); - //Left Box - Evas_Object *box2 = elm_box_add(box); - elm_box_padding_set(box2, 1, 1); - evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, 0); - evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, 0); - evas_object_show(box2); - elm_box_pack_end(box, box2); - - Evas_Object *box3; - - //Font Size - box3 = elm_box_add(box2); - elm_box_horizontal_set(box3, EINA_TRUE); - evas_object_size_hint_weight_set(box3, EVAS_HINT_EXPAND, 0); - evas_object_size_hint_align_set(box3, EVAS_HINT_FILL, 0); - evas_object_show(box3); - - elm_box_pack_end(box2, box3); - - //Font Size (Slider) - Evas_Object *slider_font = elm_slider_add(box3); - 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_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); - - elm_box_pack_end(box3, slider_font); - - //Toggle (Line Number) - Evas_Object *toggle_linenum = toggle_create(box2, "Line Number", - config_linenumber_get()); - elm_box_pack_end(box2, toggle_linenum); - - //Toggle (Auto Indentation) - Evas_Object *toggle_indent = toggle_create(box2, "Auto Indentation", - config_auto_indent_get()); - elm_box_pack_end(box2, toggle_indent); - - //Toggle (Auto Complete) - Evas_Object *toggle_autocomp = toggle_create(box2, "Auto Completion", - config_auto_complete_get()); - elm_box_pack_end(box2, toggle_autocomp); - - //Toggle (Tools) - Evas_Object *toggle_tools = toggle_create(box2, "Tools", - config_tools_get()); - elm_box_pack_end(box2, toggle_tools); - - Evas_Object *separator = elm_separator_add(box); - evas_object_show(separator); - elm_box_pack_end(box, separator); - - //Right Box - box2 = elm_box_add(box); - elm_box_padding_set(box2, 1, 1); - evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, 0); - evas_object_show(box2); - - elm_box_pack_end(box, box2); - - //View Scale - box3 = elm_box_add(box2); - elm_box_padding_set(box2, 1, 1); - elm_box_horizontal_set(box3, EINA_TRUE); - evas_object_size_hint_weight_set(box3, EVAS_HINT_EXPAND, 0); - evas_object_size_hint_align_set(box3, EVAS_HINT_FILL, 0); - evas_object_show(box3); - - elm_box_pack_end(box2, box3); - //View Scale (Slider) - Evas_Object *slider_view = elm_slider_add(box2); + Evas_Object *slider_view = elm_slider_add(box); 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); @@ -354,10 +265,19 @@ setting_open(void) elm_object_text_set(slider_view, "View Scale"); evas_object_show(slider_view); - elm_box_pack_end(box3, slider_view); + elm_box_pack_end(box, slider_view); //View Size - box3 = elm_box_add(box2); + Evas_Object *box2 = elm_box_add(box); + elm_box_horizontal_set(box2, EINA_TRUE); + evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, 0); + evas_object_show(box2); + + elm_box_pack_end(box, box2); + + //Box for View Size Entries + Evas_Object *box3 = elm_box_add(box2); elm_box_horizontal_set(box3, EINA_TRUE); evas_object_size_hint_weight_set(box3, EVAS_HINT_EXPAND, 0); evas_object_size_hint_align_set(box3, EVAS_HINT_FILL, 0); @@ -366,7 +286,7 @@ setting_open(void) elm_box_pack_end(box2, box3); //Entry (View Size) - Evas_Object *entry_view_size = entry_create(box3); + Evas_Object *entry_view_size = entry_create(box2); elm_object_text_set(entry_view_size, "View Size"); elm_entry_scrollable_set(entry_view_size, EINA_FALSE); elm_entry_editable_set(entry_view_size, EINA_FALSE); @@ -425,26 +345,126 @@ setting_open(void) //Toggle (View Size) Evas_Object *toggle_view_size; - toggle_view_size = toggle_create(box3, NULL, + toggle_view_size = toggle_create(box2, NULL, config_view_size_configurable_get()); evas_object_smart_callback_add(toggle_view_size, "changed", toggle_view_size_changed_cb, sd); - elm_box_pack_end(box3, toggle_view_size); + elm_box_pack_end(box2, toggle_view_size); //Toggle (Part Highlighting) - Evas_Object *toggle_highlight = toggle_create(box2, "Part Highlighting", - config_part_highlight_get()); - elm_box_pack_end(box2, toggle_highlight); + Evas_Object *toggle_highlight = toggle_create(box, "Part Highlighting", + config_part_highlight_get()); + elm_box_pack_end(box, toggle_highlight); //Toggle (Dummy Swallow) - Evas_Object *toggle_swallow = toggle_create(box2, "Dummy Swallow", - config_dummy_swallow_get()); - elm_box_pack_end(box2, toggle_swallow); + Evas_Object *toggle_swallow = toggle_create(box, "Dummy Swallow", + config_dummy_swallow_get()); + elm_box_pack_end(box, toggle_swallow); //Toggle (Status) - Evas_Object *toggle_stats = toggle_create(box2, "Status", + Evas_Object *toggle_stats = toggle_create(box, "Status", config_stats_bar_get()); - elm_box_pack_end(box2, toggle_stats); + elm_box_pack_end(box, toggle_stats); + + //Toggle (Tools) + Evas_Object *toggle_tools = toggle_create(box, "Tools", + config_tools_get()); + elm_box_pack_end(box, toggle_tools); + + sd->general_layout = layout; + sd->img_path_entry = img_path_entry; + sd->snd_path_entry = snd_path_entry; + sd->fnt_path_entry = fnt_path_entry; + sd->dat_path_entry = dat_path_entry; + sd->slider_view = slider_view; + sd->view_size_w_entry = entry_view_size_w; + sd->view_size_h_entry = entry_view_size_h; + sd->toggle_view_size = toggle_view_size; + sd->toggle_highlight = toggle_highlight; + sd->toggle_swallow = toggle_swallow; + sd->toggle_stats = toggle_stats; + sd->toggle_tools = toggle_tools; + + return layout; +} + +static void +general_tab_cb(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + setting_data *sd = data; + Evas_Object *content; + + if (!sd->setting_layout) return; + + content = elm_object_part_content_get(sd->setting_layout, + "elm.swallow.content"); + + if (content == sd->general_layout) return; + + elm_object_part_content_unset(sd->setting_layout, "elm.swallow.content"); + evas_object_hide(content); + + elm_object_part_content_set(sd->setting_layout, "elm.swallow.content", + sd->general_layout); + elm_object_focus_set(sd->img_path_entry, EINA_TRUE); +} + +static void +text_setting_tab_cb(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + setting_data *sd = data; + text_setting_layout_show(sd->setting_layout); +} + +void +setting_open(void) +{ + setting_data *sd = g_sd; + if (sd) return; + + sd = calloc(1, sizeof(setting_data)); + if (!sd) + { + EINA_LOG_ERR("Failed to allocate Memory!"); + return; + } + g_sd = sd; + + text_setting_init(); + + search_close(); + goto_close(); + + //Layout + Evas_Object *layout = elm_layout_add(base_win_get()); + elm_layout_file_set(layout, EDJE_PATH, "setting_layout"); + elm_object_signal_callback_add(layout, "elm,state,dismiss,done", "", + setting_dismiss_done_cb, sd); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(layout); + base_win_resize_object_add(layout); + + //Tabbar + Evas_Object *tabbar = elm_toolbar_add(layout); + elm_toolbar_shrink_mode_set(tabbar, ELM_TOOLBAR_SHRINK_EXPAND); + elm_toolbar_select_mode_set(tabbar, ELM_OBJECT_SELECT_MODE_ALWAYS); + evas_object_size_hint_weight_set(tabbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + elm_toolbar_item_append(tabbar, NULL, "General", general_tab_cb, sd); + elm_toolbar_item_append(tabbar, NULL, "Text Editor", text_setting_tab_cb, sd); + + elm_object_part_content_set(layout, "elm.swallow.tabbar", tabbar); + + //General layout + Evas_Object *general_layout = general_layout_create(sd, layout); + elm_object_part_content_set(layout, "elm.swallow.content", general_layout); + + //Text setting layout + Evas_Object *text_setting_layout; + text_setting_layout = text_setting_layout_create(layout); + evas_object_hide(text_setting_layout); Evas_Object *btn; @@ -467,23 +487,6 @@ setting_open(void) elm_object_part_content_set(layout, "elm.swallow.cancel_btn", btn); sd->setting_layout = layout; - sd->setting_layout = layout; - sd->img_path_entry = img_path_entry; - sd->snd_path_entry = snd_path_entry; - sd->fnt_path_entry = fnt_path_entry; - sd->dat_path_entry = dat_path_entry; - sd->slider_font = slider_font; - sd->slider_view = slider_view; - sd->toggle_tools = toggle_tools; - sd->toggle_stats = toggle_stats; - sd->toggle_linenum = toggle_linenum; - sd->toggle_highlight = toggle_highlight; - sd->toggle_swallow = toggle_swallow; - sd->toggle_indent = toggle_indent; - sd->toggle_autocomp = toggle_autocomp; - sd->view_size_w_entry = entry_view_size_w; - sd->view_size_h_entry = entry_view_size_h; - sd->toggle_view_size = toggle_view_size; menu_activate_request(); } diff --git a/src/bin/text_setting.c b/src/bin/text_setting.c new file mode 100644 index 0000000..84369e0 --- /dev/null +++ b/src/bin/text_setting.c @@ -0,0 +1,853 @@ +#include "common.h" +#include "text_setting.h" + +#define COLOR_KEYWORD_MAX_CNT 76 +#define SYNTAX_TEMPLATE_MAX_LEN 3072 +#define SYNTAX_TEMPLATE_FONT_SIZE 10 +#define SYNTAX_COLOR_LEN 7 + +static char color_val[ENVENTOR_SYNTAX_COLOR_LAST][SYNTAX_COLOR_LEN] = {0}; + +static int color_type_list[COLOR_KEYWORD_MAX_CNT] = +{ + ENVENTOR_SYNTAX_COLOR_COMMENT, ENVENTOR_SYNTAX_COLOR_MACRO, + ENVENTOR_SYNTAX_COLOR_MAIN_KEYWORD, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_SUB_KEYWORD, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_STRING, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_SUB_KEYWORD, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_CONSTANT, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_MAIN_KEYWORD, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_SUB_KEYWORD, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_STRING, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_MAIN_KEYWORD, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_SUB_KEYWORD, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_SYMBOL, ENVENTOR_SYNTAX_COLOR_MAIN_KEYWORD, + ENVENTOR_SYNTAX_COLOR_SYMBOL, ENVENTOR_SYNTAX_COLOR_SUB_KEYWORD, + ENVENTOR_SYNTAX_COLOR_SYMBOL, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_SUB_KEYWORD, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_MACRO, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_SYMBOL, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_MAIN_KEYWORD, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_SUB_KEYWORD, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_STRING, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_SUB_KEYWORD, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_STRING, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_SUB_KEYWORD, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_STRING, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_SUB_KEYWORD, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_CONSTANT, ENVENTOR_SYNTAX_COLOR_STRING, + ENVENTOR_SYNTAX_COLOR_SYMBOL, ENVENTOR_SYNTAX_COLOR_SUB_KEYWORD, + ENVENTOR_SYNTAX_COLOR_SYMBOL, ENVENTOR_SYNTAX_COLOR_STRING, + ENVENTOR_SYNTAX_COLOR_SYMBOL, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_SUB_KEYWORD, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_SCRIPT_KEYWORD, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_SYMBOL, ENVENTOR_SYNTAX_COLOR_SCRIPT_KEYWORD, + ENVENTOR_SYNTAX_COLOR_SYMBOL, ENVENTOR_SYNTAX_COLOR_SCRIPT_KEYWORD, + ENVENTOR_SYNTAX_COLOR_SYMBOL, ENVENTOR_SYNTAX_COLOR_SCRIPT_FUNC, + ENVENTOR_SYNTAX_COLOR_SYMBOL, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_SCRIPT_FUNC, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_SYMBOL, ENVENTOR_SYNTAX_COLOR_SYMBOL, + ENVENTOR_SYNTAX_COLOR_SYMBOL, ENVENTOR_SYNTAX_COLOR_SYMBOL +}; + +static text_setting_data *g_tsd = NULL; + +static void +syntax_template_set(char *syntax_template_str, char *syntax_template_format, + double font_scale) +{ + if (!syntax_template_str || !syntax_template_format) return; + + snprintf(syntax_template_str, SYNTAX_TEMPLATE_MAX_LEN, syntax_template_format, + (int) ((SYNTAX_TEMPLATE_FONT_SIZE * font_scale) + 0.5), + color_val[color_type_list[0]], color_val[color_type_list[1]], + color_val[color_type_list[2]], color_val[color_type_list[3]], + color_val[color_type_list[4]], color_val[color_type_list[5]], + color_val[color_type_list[6]], color_val[color_type_list[7]], + color_val[color_type_list[8]], color_val[color_type_list[9]], + color_val[color_type_list[10]], color_val[color_type_list[11]], + color_val[color_type_list[12]], color_val[color_type_list[13]], + color_val[color_type_list[14]], color_val[color_type_list[15]], + color_val[color_type_list[16]], color_val[color_type_list[17]], + color_val[color_type_list[18]], color_val[color_type_list[19]], + color_val[color_type_list[20]], color_val[color_type_list[21]], + color_val[color_type_list[22]], color_val[color_type_list[23]], + color_val[color_type_list[24]], color_val[color_type_list[25]], + color_val[color_type_list[26]], color_val[color_type_list[27]], + color_val[color_type_list[28]], color_val[color_type_list[29]], + color_val[color_type_list[30]], color_val[color_type_list[31]], + color_val[color_type_list[32]], color_val[color_type_list[33]], + color_val[color_type_list[34]], color_val[color_type_list[35]], + color_val[color_type_list[36]], color_val[color_type_list[37]], + color_val[color_type_list[38]], color_val[color_type_list[39]], + color_val[color_type_list[40]], color_val[color_type_list[41]], + color_val[color_type_list[42]], color_val[color_type_list[43]], + color_val[color_type_list[44]], color_val[color_type_list[45]], + color_val[color_type_list[46]], color_val[color_type_list[47]], + color_val[color_type_list[48]], color_val[color_type_list[49]], + color_val[color_type_list[50]], color_val[color_type_list[51]], + color_val[color_type_list[52]], color_val[color_type_list[53]], + color_val[color_type_list[54]], color_val[color_type_list[55]], + color_val[color_type_list[56]], color_val[color_type_list[57]], + color_val[color_type_list[58]], color_val[color_type_list[59]], + color_val[color_type_list[60]], color_val[color_type_list[61]], + color_val[color_type_list[62]], color_val[color_type_list[63]], + color_val[color_type_list[64]], color_val[color_type_list[65]], + color_val[color_type_list[66]], color_val[color_type_list[67]], + color_val[color_type_list[68]], color_val[color_type_list[69]], + color_val[color_type_list[70]], color_val[color_type_list[71]], + color_val[color_type_list[72]], color_val[color_type_list[73]], + color_val[color_type_list[74]], color_val[color_type_list[75]]); +} + +static void +syntax_template_apply(void) +{ + text_setting_data *tsd = g_tsd; + Evas_Object *layout = tsd->text_setting_layout; + if (!layout) return; + + Evas_Object *entry = elm_object_part_content_get(layout, + "elm.swallow.text_setting"); + syntax_template_set(tsd->syntax_template_str, tsd->syntax_template_format, + tsd->font_scale); + elm_entry_entry_set(entry, tsd->syntax_template_str); +} + +static void +text_setting_syntax_color_load(void) +{ + const char *color; + Enventor_Syntax_Color_Type color_type = ENVENTOR_SYNTAX_COLOR_STRING; + for (; color_type < ENVENTOR_SYNTAX_COLOR_LAST; color_type++) + { + color = config_syntax_color_get(color_type); + if (color) strncpy(color_val[color_type], color, 6); + else strncpy(color_val[color_type], "FFFFFF", 6); + } +} + +void +text_setting_syntax_color_reset(void) +{ + text_setting_syntax_color_load(); + + syntax_template_apply(); +} + +void +text_setting_syntax_color_save(void) +{ + Enventor_Syntax_Color_Type color_type = ENVENTOR_SYNTAX_COLOR_STRING; + for (; color_type < ENVENTOR_SYNTAX_COLOR_LAST; color_type++) + { + config_syntax_color_set(color_type, color_val[color_type]); + } +} + +static void +text_setting_syntax_color_update(Evas_Object *ctxpopup, + color_keyword *selected_color_keyword) +{ + Evas_Object *box = elm_object_content_get(ctxpopup); + Evas_Object *layout; + Evas_Object *slider; + Eina_List *box_children = elm_box_children_get(box); + Eina_List *l; + char color[SYNTAX_COLOR_LEN] = {0}; + char buf[3]; + + if (eina_list_count(box_children) == 0) return; + + //Extract color value from sliders + EINA_LIST_FOREACH(box_children, l, layout) + { + slider = elm_object_part_content_get(layout, + "elm.swallow.slider"); + snprintf(buf, sizeof(buf), "%02X", + (int) roundf(elm_slider_value_get(slider))); + strcat(color, buf); + } + color[SYNTAX_COLOR_LEN - 1] = '\0'; + + //Set the extracted color value to the selected color keyword + strncpy(color_val[selected_color_keyword->color_type], color, 7); +} + +static void +color_btn_up_cb(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Evas_Object *layout = data; + Evas_Object *slider = elm_object_part_content_get(layout, + "elm.swallow.slider"); + Evas_Object *entry = elm_object_part_content_get(layout, + "elm.swallow.entry"); + double value = elm_slider_value_get(slider); + char buf[128]; + + value += 1; + + snprintf(buf, sizeof(buf), "%1.0f", value); + elm_object_text_set(entry, buf); +} + +static void +color_btn_down_cb(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Evas_Object *layout = data; + Evas_Object *slider = elm_object_part_content_get(layout, + "elm.swallow.slider"); + Evas_Object *entry = elm_object_part_content_get(layout, + "elm.swallow.entry"); + double value = elm_slider_value_get(slider); + char buf[128]; + + value -= 1; + + snprintf(buf, sizeof(buf), "%1.0f", value); + elm_object_text_set(entry, buf); +} + +static void +color_ctxpopup_dismiss_cb(void *data, Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + evas_object_del(obj); +} + +static void +color_ctxpopup_del_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, + Evas_Object *obj, void *event_info EINA_UNUSED) +{ + text_setting_data *tsd = g_tsd; + color_keyword *selected_color_keyword; + selected_color_keyword = evas_object_data_get(obj, "color_keyword"); + + elm_object_disabled_set(tsd->text_setting_layout, EINA_FALSE); + elm_object_focus_set(tsd->slider_font, EINA_TRUE); + + text_setting_syntax_color_update(obj, selected_color_keyword); + syntax_template_apply(); + + elm_config_focus_autoscroll_mode_set(ELM_FOCUS_AUTOSCROLL_MODE_SHOW); + + tsd->color_ctxpopup = NULL; +} + +static void +color_slider_changed_cb(void *data, Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + Evas_Object *entry = data; + double val = elm_slider_value_get(obj); + char buf[128]; + + snprintf(buf, sizeof(buf), "%1.0f", val); + elm_object_text_set(entry, buf); + + Evas_Object *ctxpopup = evas_object_data_get(obj, "ctxpopup"); + color_keyword *selected_color_keyword; + selected_color_keyword = evas_object_data_get(ctxpopup, "color_keyword"); + + text_setting_syntax_color_update(ctxpopup, selected_color_keyword); + syntax_template_apply(); +} + +static void +color_entry_changed_cb(void *data, Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + Evas_Object *slider = data; + double text_val, val, min_val, max_val; + char buf[128]; + + text_val = atof(elm_object_text_get(obj)); + elm_slider_min_max_get(slider, &min_val, &max_val); + + if (text_val < min_val) val = min_val; + else if (text_val > max_val) val = max_val; + else val = text_val; + + if (val != text_val) + { + snprintf(buf, sizeof(buf), "%1.0f", val); + elm_object_text_set(obj, buf); + } + else + elm_slider_value_set(slider, val); +} + +static Evas_Object * +color_slider_layout_create(Evas_Object *parent, Evas_Object *ctxpopup, + const char *type, double slider_val) +{ + //Layout + Evas_Object *layout = elm_layout_add(parent); + elm_layout_file_set(layout, EDJE_PATH, "slider_layout"); + evas_object_show(layout); + + //Type + if (type) + elm_object_part_text_set(layout, "elm.text.type", type); + + //Slider + Evas_Object *slider = elm_slider_add(layout); + evas_object_data_set(slider, "ctxpopup", ctxpopup); + elm_slider_span_size_set(slider, 120); + elm_slider_indicator_show_set(slider, EINA_FALSE); + elm_slider_min_max_set(slider, 0, 255); + elm_slider_value_set(slider, slider_val); + + char slider_min[16]; + char slider_max[16]; + snprintf(slider_min, sizeof(slider_min), "%1.0f", 0.0); + snprintf(slider_max, sizeof(slider_max), "%1.0f", 255.0); + elm_object_part_text_set(layout, "elm.text.slider_min", slider_min); + elm_object_part_text_set(layout, "elm.text.slider_max", slider_max); + elm_object_part_content_set(layout, "elm.swallow.slider", slider); + + //Entry + char buf[128]; + Evas_Object *entry = elm_entry_add(layout); + elm_entry_context_menu_disabled_set(entry, EINA_TRUE); + elm_entry_single_line_set(entry, EINA_TRUE); + evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + snprintf(buf, sizeof(buf), "%1.0f", slider_val); + elm_object_text_set(entry, buf); + elm_object_part_content_set(layout, "elm.swallow.entry", entry); + + Elm_Entry_Filter_Accept_Set digits_filter_data; + Elm_Entry_Filter_Limit_Size limit_filter_data; + digits_filter_data.accepted = "0123456789"; + digits_filter_data.rejected = NULL; + limit_filter_data.max_char_count = 4; + elm_entry_markup_filter_append(entry, elm_entry_filter_accept_set, + &digits_filter_data); + elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, + &limit_filter_data); + + evas_object_smart_callback_add(slider, "changed", color_slider_changed_cb, + entry); + evas_object_smart_callback_add(entry, "changed", color_entry_changed_cb, + slider); + + Evas_Object *btn; + Evas_Object *img; + + //Up Button + btn = elm_button_add(layout); + evas_object_smart_callback_add(btn, "clicked", color_btn_up_cb, layout); + elm_object_part_content_set(layout, "elm.swallow.up", btn); + + //Up Image + img = elm_image_add(btn); + elm_image_file_set(img, EDJE_PATH, "up"); + elm_object_content_set(btn, img); + + //Down Button + btn = elm_button_add(layout); + evas_object_smart_callback_add(btn, "clicked", color_btn_down_cb, layout); + elm_object_part_content_set(layout, "elm.swallow.down", btn); + + //Down Image + img = elm_image_add(btn); + elm_image_file_set(img, EDJE_PATH, "down"); + elm_object_content_set(btn, img); + + return layout; +} + +static int +convert_hexadecimal_to_decimal(char *hexadecimal) +{ + int i; + int len; + int decimal = 0; + char digit; + + if (!hexadecimal) return 0; + + len = strlen(hexadecimal); + if (len == 0) return 0; + + for (i = 0; i < len; i++) + { + digit = hexadecimal[i]; + + if ((digit >= 'a') && (digit <= 'f')) + decimal += ((digit - 'a') + 10) * pow(16, (len - i - 1)); + else if ((digit >= 'A') && (digit <= 'F')) + decimal += ((digit - 'A') + 10) * pow(16, (len - i - 1)); + else if ((digit >= '0') && (digit <= '9')) + decimal += atoi(&digit) * pow(16, (len - i - 1)); + } + return decimal; +} + +static void +color_slider_layout_set(Evas_Object *ctxpopup) +{ + text_setting_data *tsd = g_tsd; + Eina_Array *type_array; + Eina_Stringshare *type; + Eina_Array_Iterator itr; + unsigned int i; + const char *color; + char color_rgb_str[3][3] = {0}; + int color_rgb_val[3]; + color_keyword *selected_color_keyword; + selected_color_keyword = evas_object_data_get(ctxpopup, "color_keyword"); + + //Box + Evas_Object *box = elm_box_add(ctxpopup); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(box); + + //Layout + Evas_Object *layout; + + type_array = eina_array_new(3); + eina_array_push(type_array, eina_stringshare_add("R")); + eina_array_push(type_array, eina_stringshare_add("G")); + eina_array_push(type_array, eina_stringshare_add("B")); + + color = config_syntax_color_get(selected_color_keyword->color_type); + + for (i = 0; i < 3; i++) + { + strncpy(color_rgb_str[i], &color[i * 2], 2); + color_rgb_val[i] = convert_hexadecimal_to_decimal(color_rgb_str[i]); + } + + EINA_ARRAY_ITER_NEXT(type_array, i, type, itr) + { + layout = color_slider_layout_create(box, ctxpopup, type, + color_rgb_val[i]); + if (i % 2) elm_object_signal_emit(layout, "odd,item,set", ""); + elm_box_pack_end(box, layout); + } + + while (eina_array_count(type_array)) + eina_stringshare_del(eina_array_pop(type_array)); + eina_array_free(type_array); + + elm_object_content_set(ctxpopup, box); +} + +static Evas_Object * +color_ctxpopup_create(Evas_Object *parent, + color_keyword *selected_color_keyword) +{ + Evas_Object *ctxpopup = elm_ctxpopup_add(parent); + if (!ctxpopup) return NULL; + + elm_config_focus_autoscroll_mode_set(ELM_FOCUS_AUTOSCROLL_MODE_NONE); + + elm_object_style_set(ctxpopup, "enventor"); + evas_object_data_set(ctxpopup, "color_keyword", selected_color_keyword); + elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_RIGHT, + ELM_CTXPOPUP_DIRECTION_LEFT, + ELM_CTXPOPUP_DIRECTION_UP, + ELM_CTXPOPUP_DIRECTION_DOWN); + color_slider_layout_set(ctxpopup); + + evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL, + color_ctxpopup_del_cb, NULL); + evas_object_smart_callback_add(ctxpopup, "dismissed", + color_ctxpopup_dismiss_cb, NULL); + return ctxpopup; +} + +static color_keyword * +color_keyword_list_create(char *syntax_template_str) +{ + char *cur = syntax_template_str; + char *next = NULL; + int i; + + color_keyword *color_keyword_list = calloc(COLOR_KEYWORD_MAX_CNT, + sizeof(color_keyword)); + if (!color_keyword_list) + { + EINA_LOG_ERR("Failed to allocate Memory!"); + return NULL; + } + + for (i = 0; i < COLOR_KEYWORD_MAX_CNT; i++) + { + next = strstr(cur, "pos_begin = cur - syntax_template_str; + + next = strstr(cur, ""); + cur = next - 1; //Move position to last character of keyword + (color_keyword_list + i)->pos_end = cur - syntax_template_str; + + (color_keyword_list + i)->color_type = color_type_list[i]; + } + + return color_keyword_list; +} + +static char * +syntax_template_format_create(void) +{ + text_setting_data *tsd = g_tsd; + + text_setting_syntax_color_load(); + + char file_path[PATH_MAX]; + snprintf(file_path, sizeof(file_path), "%s/color/syntax_template.dat", + elm_app_data_dir_get()); + + Eina_File *file = NULL; + file = eina_file_open(file_path, EINA_FALSE); + if (!file) + { + EINA_LOG_ERR("Failed to open file \"%s\"", file_path); + return NULL; + } + + char *utf8 = eina_file_map_all(file, EINA_FILE_POPULATE); + if (!utf8) goto syntax_template_format_create_err; + + char *syntax_template_format = calloc(1, sizeof(char) * (strlen(utf8) + 1)); + if (!syntax_template_format) goto syntax_template_format_create_err; + strcpy(syntax_template_format, utf8); + + tsd->syntax_template_format = syntax_template_format; + + eina_file_close(file); + + return tsd->syntax_template_format; + +syntax_template_format_create_err: + EINA_LOG_ERR("Failed to allocate Memory!"); + if (utf8) free(utf8); + + eina_file_close(file); + + return NULL; +} + +static char * +syntax_template_create(double font_scale) +{ + text_setting_data *tsd = g_tsd; + char *syntax_template_format = syntax_template_format_create(); + if (!syntax_template_format) goto syntax_template_create_err; + + char *syntax_template_str = NULL; + syntax_template_str = calloc(1, sizeof(char) * SYNTAX_TEMPLATE_MAX_LEN); + if (!syntax_template_str) goto syntax_template_create_err; + + syntax_template_set(syntax_template_str, syntax_template_format, font_scale); + + color_keyword *color_keyword_list; + color_keyword_list = color_keyword_list_create(syntax_template_str); + if (!color_keyword_list) goto syntax_template_create_err; + + tsd->syntax_template_str = syntax_template_str; + tsd->color_keyword_list = color_keyword_list; + + return tsd->syntax_template_str; + +syntax_template_create_err: + EINA_LOG_ERR("Failed to allocate Memory!"); + if (syntax_template_format) + { + free(syntax_template_format); + tsd->syntax_template_format = NULL; + } + if (syntax_template_str) free(syntax_template_str); + + return NULL; +} + +static int +color_keyword_pos_get(const char *syntax_template_str, const char *selected_str) +{ + Eina_Bool left_arrow_found = EINA_FALSE; + char *cur; + int i; + int len = 0; + int pos = 0; + + cur = strstr(syntax_template_str, selected_str); + len = strlen(cur); + for (i = 0; i < len; i++) + { + if (left_arrow_found) + { + if (*(cur + i) == '>') + left_arrow_found = EINA_FALSE; + continue; + } + + if (*(cur + i) == '<') + { + left_arrow_found = EINA_TRUE; + } + else + { + pos = (cur + i) - syntax_template_str; + break; + } + } + + return pos; +} + +static void +text_setting_double_clicked_cb(void *data, Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + text_setting_data *tsd = data; + color_keyword *selected_color_keyword; + Evas_Object *ctxpopup; + const char *syntax_template_str; + const char *selected_str; + int i; + int pos; + int x, y; + + syntax_template_str = elm_entry_entry_get(obj); + if (!syntax_template_str) return; + + selected_str = elm_entry_selection_get(obj); + if (!selected_str) return; + + pos = color_keyword_pos_get(syntax_template_str, selected_str); + + for (i = 0; i < COLOR_KEYWORD_MAX_CNT; i++) + { + selected_color_keyword = tsd->color_keyword_list + i; + if ((pos >= selected_color_keyword->pos_begin) && + (pos <= selected_color_keyword->pos_end)) + { + ctxpopup = color_ctxpopup_create(tsd->text_setting_layout, + selected_color_keyword); + if (!ctxpopup) return; + + evas_pointer_output_xy_get(evas_object_evas_get(obj), &x, &y); + evas_object_move(ctxpopup, x, y); + evas_object_show(ctxpopup); + tsd->color_ctxpopup = ctxpopup; + break; + } + } +} + +static Evas_Object * +toggle_create(Evas_Object *parent, const char *text, Eina_Bool state) +{ + Evas_Object *toggle = elm_check_add(parent); + elm_object_style_set(toggle, "toggle"); + elm_check_state_set(toggle, state); + evas_object_size_hint_weight_set(toggle, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(toggle, EVAS_HINT_FILL, 0); + elm_object_text_set(toggle, text); + evas_object_show(toggle); + + return toggle; +} + +static void +font_scale_slider_changed_cb(void *data, Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + text_setting_data *tsd = data; + double val = elm_slider_value_get(obj); + tsd->font_scale = val; + + syntax_template_apply(); +} + +Evas_Object * +text_setting_layout_create(Evas_Object *parent) +{ + text_setting_data *tsd = g_tsd; + + //Layout + Evas_Object *layout = elm_layout_add(parent); + elm_layout_file_set(layout, EDJE_PATH, "text_setting_layout"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(layout); + + //Text Editor + Evas_Object *entry = elm_entry_add(layout); + elm_entry_context_menu_disabled_set(entry, EINA_TRUE); + elm_entry_line_wrap_set(entry, ELM_WRAP_NONE); + elm_entry_scrollable_set(entry, EINA_TRUE); + elm_entry_editable_set(entry, EINA_FALSE); + evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL); + + tsd->font_scale = (double) config_font_scale_get(); + char *syntax_template_str = syntax_template_create(tsd->font_scale); + elm_entry_entry_set(entry, syntax_template_str); + evas_object_smart_callback_add(entry, "clicked,double", + text_setting_double_clicked_cb, tsd); + elm_object_focus_set(entry, EINA_TRUE); + elm_object_part_content_set(layout, "elm.swallow.text_setting", entry); + + //Preference + Evas_Object *scroller = elm_scroller_add(layout); + elm_object_part_content_set(layout, "elm.swallow.preference", scroller); + + //Box + Evas_Object *box = elm_box_add(scroller); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, 0); + evas_object_show(box); + + elm_object_content_set(scroller, box); + + //Font Size (Box) + Evas_Object *box2 = elm_box_add(box); + elm_box_horizontal_set(box2, EINA_TRUE); + evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, 0); + evas_object_show(box2); + + elm_box_pack_end(box, box2); + + //Font Size (Slider) + Evas_Object *slider_font = elm_slider_add(box2); + 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_SCALE, MAX_FONT_SCALE); + elm_slider_value_set(slider_font, tsd->font_scale); + elm_object_text_set(slider_font, "Font Size"); + evas_object_smart_callback_add(slider_font, "changed", + font_scale_slider_changed_cb, tsd); + evas_object_show(slider_font); + elm_object_focus_set(slider_font, EINA_TRUE); + + elm_box_pack_end(box2, slider_font); + + //Toggle (Line Number) + Evas_Object *toggle_linenum = toggle_create(box, "Line Number", + config_linenumber_get()); + elm_box_pack_end(box, toggle_linenum); + + //Toggle (Auto Indentation) + Evas_Object *toggle_indent = toggle_create(box, "Auto Indentation", + config_auto_indent_get()); + elm_box_pack_end(box, toggle_indent); + + //Toggle (Auto Completion) + Evas_Object *toggle_autocomp = toggle_create(box, "Auto Completion", + config_auto_complete_get()); + elm_box_pack_end(box, toggle_autocomp); + + tsd->text_setting_layout = layout; + tsd->slider_font = slider_font; + tsd->toggle_linenum = toggle_linenum; + tsd->toggle_indent = toggle_indent; + tsd->toggle_autocomp = toggle_autocomp; + + return layout; +} + +void +text_setting_layout_show(Evas_Object *setting_layout) +{ + text_setting_data *tsd = g_tsd; + Evas_Object *content; + + if (!setting_layout) return; + + content = elm_object_part_content_get(setting_layout, + "elm.swallow.content"); + + if (content == tsd->text_setting_layout) return; + + elm_object_part_content_unset(setting_layout, "elm.swallow.content"); + evas_object_hide(content); + + elm_object_part_content_set(setting_layout, "elm.swallow.content", + tsd->text_setting_layout); + elm_object_focus_set(tsd->slider_font, EINA_TRUE); +} + +void +text_setting_config_set(void) +{ + text_setting_data *tsd = g_tsd; + + config_font_scale_set((float) elm_slider_value_get(tsd->slider_font)); + config_linenumber_set(elm_check_state_get(tsd->toggle_linenum)); + config_auto_indent_set(elm_check_state_get(tsd->toggle_indent)); + config_auto_complete_set(elm_check_state_get(tsd->toggle_autocomp)); +} + +void +text_setting_font_scale_set(double font_scale) +{ + text_setting_data *tsd = g_tsd; + tsd->font_scale = font_scale; + elm_slider_value_set(tsd->slider_font, tsd->font_scale); +} + +void +text_setting_linenumber_set(Eina_Bool enabled) +{ + text_setting_data *tsd = g_tsd; + elm_check_state_set(tsd->toggle_linenum, enabled); +} + +void +text_setting_auto_indent_set(Eina_Bool enabled) +{ + text_setting_data *tsd = g_tsd; + elm_check_state_set(tsd->toggle_indent, enabled); +} + +void +text_setting_auto_complete_set(Eina_Bool enabled) +{ + text_setting_data *tsd = g_tsd; + elm_check_state_set(tsd->toggle_autocomp, enabled); +} + +void +text_setting_init(void) +{ + text_setting_data *tsd = g_tsd; + if (tsd) return; + + tsd = calloc(1, sizeof(text_setting_data)); + if (!tsd) + { + EINA_LOG_ERR("Failed to allocate Memory!"); + return; + } + g_tsd = tsd; +} + +void +text_setting_term(void) +{ + text_setting_data *tsd = g_tsd; + if (!tsd) return; + + if (tsd->color_ctxpopup) + evas_object_del(tsd->color_ctxpopup); + + if (tsd->color_keyword_list) + free(tsd->color_keyword_list); + if (tsd->syntax_template_format) + free(tsd->syntax_template_format); + if (tsd->syntax_template_str) + free(tsd->syntax_template_str); + free(tsd); + g_tsd = NULL; +} diff --git a/src/include/Makefile.am b/src/include/Makefile.am index c38884c..2875f75 100644 --- a/src/include/Makefile.am +++ b/src/include/Makefile.am @@ -11,6 +11,7 @@ EXTRA_DIST = common.h \ newfile.h \ goto.h \ setting.h \ + text_setting.h \ search.h \ live_edit.h \ console.h \ diff --git a/src/include/config_data.h b/src/include/config_data.h index f40ac65..3d6e521 100644 --- a/src/include/config_data.h +++ b/src/include/config_data.h @@ -19,8 +19,6 @@ 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_dat_path_list_get(void); -void config_syntax_color_set(Enventor_Syntax_Color_Type color_type, const char *val); -const char *config_syntax_color_get(Enventor_Syntax_Color_Type color_type); void config_update_cb_set(void (*cb)(void *data), void *data); void config_stats_bar_set(Eina_Bool enabled); void config_linenumber_set(Eina_Bool enabled); diff --git a/src/include/text_setting.h b/src/include/text_setting.h new file mode 100644 index 0000000..1910f1b --- /dev/null +++ b/src/include/text_setting.h @@ -0,0 +1,35 @@ +typedef struct color_keyword_s +{ + int pos_begin; + int pos_end; + int color_type; +} color_keyword; + +struct text_setting_s +{ + Evas_Object *text_setting_layout; + Evas_Object *color_ctxpopup; + + Evas_Object *slider_font; + Evas_Object *toggle_linenum; + Evas_Object *toggle_indent; + Evas_Object *toggle_autocomp; + + color_keyword *color_keyword_list; + char *syntax_template_format; + char *syntax_template_str; + + double font_scale; +}; + +typedef struct text_setting_s text_setting_data; + +Evas_Object *text_setting_layout_create(Evas_Object *parent); +void text_setting_layout_show(Evas_Object *setting_layout); +void text_setting_syntax_color_reset(void); +void text_setting_syntax_color_save(void); +void text_setting_config_set(void); +void text_setting_font_scale_set(double font_scale); +void text_setting_linenumber_set(Eina_Bool enabled); +void text_setting_auto_indent_set(Eina_Bool enabled); +void text_setting_auto_complete_set(Eina_Bool enabled);