diff --git a/ChangeLog b/ChangeLog index 4226188..794d24d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2015-03-08 ajwillia.ms (Andy Williams) + + * Add a settings screen + +2015-02-28 Vincent Torri + + * Fix username lookup for Windows + +2015-02-21 ajwillia.ms (Andy Williams) + + * Release 0.0.1 + 2015-02-11 ajwillia.ms (Andy Williams) * Make sure clang syntax loading follows auto saves diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index de4afa3..3d68962 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -35,6 +35,7 @@ editor/edi_editor.c \ edi_content_provider.c \ screens/edi_welcome.c \ screens/edi_about.c \ +screens/edi_settings.c \ edi_filepanel.c \ edi_logpanel.c \ edi_consolepanel.c \ diff --git a/src/bin/edi_config.c b/src/bin/edi_config.c index 0408c01..125c458 100644 --- a/src/bin/edi_config.c +++ b/src/bin/edi_config.c @@ -33,8 +33,8 @@ # define EDI_CONFIG_HASH(edd, type, member, eddtype) \ EET_DATA_DESCRIPTOR_ADD_HASH(edd, type, #member, member, eddtype) -# define EDI_CONFIG_FILE_EPOCH 0x0001 -# define EDI_CONFIG_FILE_GENERATION 0x000a +# define EDI_CONFIG_FILE_EPOCH 0x0002 +# define EDI_CONFIG_FILE_GENERATION 0x000b # define EDI_CONFIG_FILE_VERSION \ ((EDI_CONFIG_FILE_EPOCH << 16) | EDI_CONFIG_FILE_GENERATION) @@ -47,6 +47,7 @@ static Edi_Config_DD *_edi_cfg_mime_edd = NULL; /* external variables */ Edi_Config *_edi_cfg = NULL; +int EDI_EVENT_CONFIG_CHANGED; const char * _edi_config_dir_get(void) @@ -154,6 +155,7 @@ _edi_config_init(void) { elm_need_efreet(); if (!efreet_init()) return EINA_FALSE; + EDI_EVENT_CONFIG_CHANGED = ecore_event_type_new(); _edi_cfg_proj_edd = EDI_CONFIG_DD_NEW("Config_Project", Edi_Config_Project); #undef T @@ -186,6 +188,7 @@ _edi_config_init(void) EDI_CONFIG_VAL(D, T, gui.bottomsize, EET_T_DOUBLE); EDI_CONFIG_VAL(D, T, gui.bottomopen, EET_T_UCHAR); EDI_CONFIG_VAL(D, T, gui.bottomtab, EET_T_INT); + EDI_CONFIG_VAL(D, T, autosave, EET_T_UCHAR); EDI_CONFIG_LIST(D, T, projects, _edi_cfg_proj_edd); EDI_CONFIG_LIST(D, T, mime_assocs, _edi_cfg_mime_edd); @@ -249,13 +252,14 @@ _edi_config_load(void) _edi_cfg->font.size = 12; _edi_cfg->gui.translucent = EINA_TRUE; - _edi_cfg->gui.width = 560; - _edi_cfg->gui.height = 420; + _edi_cfg->gui.width = 640; + _edi_cfg->gui.height = 480; _edi_cfg->gui.leftsize = 0.25; _edi_cfg->gui.leftopen = EINA_TRUE; _edi_cfg->gui.bottomsize = 0.2; _edi_cfg->gui.bottomopen = EINA_FALSE; _edi_cfg->gui.bottomtab = 0; + _edi_cfg->autosave = EINA_TRUE; _edi_cfg->projects = NULL; _edi_cfg->mime_assocs = NULL; IFCFGEND; @@ -276,9 +280,7 @@ void _edi_config_save(void) { if (_edi_config_domain_save(PACKAGE_NAME, _edi_cfg_edd, _edi_cfg)) - { - /* perform any UI updates required */ - } + ecore_event_add(EDI_EVENT_CONFIG_CHANGED, NULL, NULL, NULL); } void diff --git a/src/bin/edi_config.h b/src/bin/edi_config.h index 133f8e4..4f60fac 100644 --- a/src/bin/edi_config.h +++ b/src/bin/edi_config.h @@ -7,6 +7,8 @@ extern "C" { #endif +extern int EDI_EVENT_CONFIG_CHANGED; + typedef struct _Edi_Config_Project Edi_Config_Project; typedef struct _Edi_Config_Mime_Association Edi_Config_Mime_Association; typedef struct _Edi_Config Edi_Config; @@ -40,6 +42,8 @@ struct _Edi_Config Eina_Bool leftopen, bottomopen; } gui; + Eina_Bool autosave; + Eina_List *projects; Eina_List *mime_assocs; }; diff --git a/src/bin/edi_consolepanel.c b/src/bin/edi_consolepanel.c index 8dee6bf..564853e 100644 --- a/src/bin/edi_consolepanel.c +++ b/src/bin/edi_consolepanel.c @@ -308,6 +308,27 @@ static void _edi_test_line_callback(const char *content) } } +static Eina_Bool +_edi_consolepanel_config_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED) +{ + Eina_List *item; + Eo *widget; + + EINA_LIST_FOREACH(_edi_console_code->widgets, item, widget) + { + eo_do(widget, + elm_code_widget_font_size_set(_edi_cfg->font.size)); + } + + EINA_LIST_FOREACH(_edi_test_code->widgets, item, widget) + { + eo_do(widget, + elm_code_widget_font_size_set(_edi_cfg->font.size)); + } + + return ECORE_CALLBACK_RENEW; +} + void edi_consolepanel_add(Evas_Object *parent) { Elm_Code *code; @@ -332,6 +353,7 @@ void edi_consolepanel_add(Evas_Object *parent) ecore_event_handler_add(ECORE_EXE_EVENT_DATA, _exe_data, NULL); ecore_event_handler_add(ECORE_EXE_EVENT_ERROR, _exe_error, NULL); + ecore_event_handler_add(EDI_EVENT_CONFIG_CHANGED, _edi_consolepanel_config_changed, NULL); } void edi_testpanel_add(Evas_Object *parent) diff --git a/src/bin/edi_logpanel.c b/src/bin/edi_logpanel.c index 3b187bd..353e9e3 100644 --- a/src/bin/edi_logpanel.c +++ b/src/bin/edi_logpanel.c @@ -46,6 +46,15 @@ _edi_logpanel_line_cb(void *data EINA_UNUSED, Eo *obj EINA_UNUSED, return EO_CALLBACK_CONTINUE; } +static Eina_Bool +_edi_logpanel_config_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED) +{ + eo_do(_info_widget, + elm_code_widget_font_size_set(_edi_cfg->font.size)); + + return ECORE_CALLBACK_RENEW; +} + void edi_logpanel_add(Evas_Object *parent) { Elm_Code_Widget *widget; @@ -69,4 +78,5 @@ void edi_logpanel_add(Evas_Object *parent) eina_log_color_disable_set(EINA_TRUE); elm_box_pack_end(parent, widget); + ecore_event_handler_add(EDI_EVENT_CONFIG_CHANGED, _edi_logpanel_config_changed, NULL); } diff --git a/src/bin/edi_main.c b/src/bin/edi_main.c index d80f1e3..8b43d4d 100644 --- a/src/bin/edi_main.c +++ b/src/bin/edi_main.c @@ -650,6 +650,12 @@ _tb_about_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_i edi_about_show(_edi_main_win); } +static void +_tb_settings_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + edi_settings_show(_edi_main_win); +} + static Evas_Object * edi_toolbar_setup(Evas_Object *win) { @@ -712,6 +718,7 @@ edi_toolbar_setup(Evas_Object *win) evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, 0.0); evas_object_size_hint_weight_set(tb, 0.14, 0.0); + tb_it = elm_toolbar_item_append(tb, "preferences-desktop", "Settings", _tb_settings_cb, NULL); tb_it = elm_toolbar_item_append(tb, "help-about", "About", _tb_about_cb, NULL); elm_box_pack_end(box, tb); diff --git a/src/bin/edi_private.h b/src/bin/edi_private.h index 8ab1bb1..b6590df 100644 --- a/src/bin/edi_private.h +++ b/src/bin/edi_private.h @@ -26,7 +26,6 @@ extern int _edi_log_dom; #endif #define DBG(...) EINA_LOG_DOM_DBG(_edi_log_dom, __VA_ARGS__) -#define EDI_CONTENT_AUTOSAVE EINA_TRUE #define EDI_CONTENT_SAVE_TIMEOUT 5 Evas_Object *edi_open(const char *path); diff --git a/src/bin/editor/edi_editor.c b/src/bin/editor/edi_editor.c index 947ef46..470b515 100644 --- a/src/bin/editor/edi_editor.c +++ b/src/bin/editor/edi_editor.c @@ -42,8 +42,6 @@ static Edi_Color EDI_COLOR_SEVIRITY_WARNING = ""; #endif -static char *_default_font; - typedef struct { unsigned int line; @@ -96,16 +94,14 @@ _edi_editor_autosave_cb(void *data) static const char * _edi_editor_font_get() { - char *format; - - if (_default_font) - return _default_font; + const char *format; + char *font; format = "DEFAULT='font=Monospace font_size=%d'"; - _default_font = malloc(sizeof(char) * (strlen(format) + 4)); - snprintf(_default_font, strlen(format) + 4, format, _edi_cfg->font.size); - return _default_font; + font = malloc(sizeof(char) * (strlen(format) + 4)); + snprintf(font, strlen(format) + 4, format, _edi_cfg->font.size); + return font; } static void @@ -190,7 +186,7 @@ _changed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) if (editor->save_timer) ecore_timer_reset(editor->save_timer); - else + else if (_edi_cfg->autosave) editor->save_timer = ecore_timer_add(EDI_CONTENT_SAVE_TIMEOUT, _edi_editor_autosave_cb, editor); _update_lines(editor); @@ -758,7 +754,8 @@ _unfocused_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UN editor = (Edi_Editor *)data; - edi_editor_save(editor); + if (_edi_cfg->autosave) + edi_editor_save(editor); } Evas_Object * diff --git a/src/bin/screens/edi_screens.h b/src/bin/screens/edi_screens.h index 7304487..a4d1a6b 100644 --- a/src/bin/screens/edi_screens.h +++ b/src/bin/screens/edi_screens.h @@ -26,7 +26,8 @@ extern "C" { * Initialize a new Edi welcome window and display it. * * @return The welcome window that is created - * * @ingroup UI + * + * @ingroup UI */ Evas_Object *edi_welcome_show(); @@ -35,10 +36,20 @@ Evas_Object *edi_welcome_show(); * Initialize a new Edi about window and display it. * * @return The about window that is created - * * @ingroup UI + * + * @ingroup UI */ Evas_Object *edi_about_show(Evas_Object *mainwin); +/** + * Initialize a new Edi settings window and display it. + * + * @return The settings window that is created + * + * @ingroup UI + */ +Evas_Object *edi_settings_show(Evas_Object *mainwin); + /** * @} */ diff --git a/src/bin/screens/edi_settings.c b/src/bin/screens/edi_settings.c new file mode 100644 index 0000000..0a586aa --- /dev/null +++ b/src/bin/screens/edi_settings.c @@ -0,0 +1,182 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#include "edi_config.h" + +#include "edi_private.h" + +static Elm_Naviframe_Item *_edi_settings_display, *_edi_settings_behaviour; + +static void +_edi_settings_exit(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + evas_object_del(data); +} + +static void +_edi_settings_category_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Elm_Naviframe_Item *item; + + item = (Elm_Naviframe_Item *)data; + elm_naviframe_item_promote(item); +} + +static Evas_Object * +_edi_settings_panel_create(Evas_Object *parent, const char *title) +{ + Evas_Object *box, *frame; + + box = elm_box_add(parent); + elm_box_horizontal_set(box, EINA_FALSE); + 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); + + frame = elm_frame_add(parent); + elm_object_part_text_set(frame, "default", title); + elm_object_part_content_set(frame, "default", box); + 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); + + return frame; +} + +static void +_edi_settings_display_fontsize_cb(void *data EINA_UNUSED, Evas_Object *obj, + void *event EINA_UNUSED) +{ + Evas_Object *spinner; + + spinner = (Evas_Object *)obj; + _edi_cfg->font.size = (int) elm_spinner_value_get(spinner); + _edi_config_save(); +} + +static Evas_Object * +_edi_settings_display_create(Evas_Object *parent) +{ + Evas_Object *box, *hbox, *frame, *label, *spinner; + + frame = _edi_settings_panel_create(parent, "Display"); + box = elm_object_part_content_get(frame, "default"); + + hbox = elm_box_add(parent); + elm_box_horizontal_set(hbox, EINA_TRUE); + evas_object_size_hint_weight_set(hbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(box, hbox); + evas_object_show(hbox); + + label = elm_label_add(hbox); + elm_object_text_set(label, "Font size"); + evas_object_size_hint_align_set(label, 0.0, 0.5); + elm_box_pack_end(hbox, label); + evas_object_show(label); + + spinner = elm_spinner_add(hbox); + elm_spinner_value_set(spinner, _edi_cfg->font.size); + elm_spinner_editable_set(spinner, EINA_TRUE); + elm_spinner_label_format_set(spinner, "%1.0fpt"); + elm_spinner_step_set(spinner, 1); + elm_spinner_wrap_set(spinner, EINA_FALSE); + elm_spinner_min_max_set(spinner, 8, 48); + evas_object_size_hint_align_set(spinner, 0.0, 0.5); + evas_object_size_hint_weight_set(spinner, EVAS_HINT_EXPAND, 0.0); + evas_object_smart_callback_add(spinner, "changed", + _edi_settings_display_fontsize_cb, NULL); + elm_box_pack_end(hbox, spinner); + evas_object_show(spinner); + + return frame; +} + +static void +_edi_settings_behaviour_autosave_cb(void *data EINA_UNUSED, Evas_Object *obj, + void *event EINA_UNUSED) +{ + Evas_Object *check; + + check = (Evas_Object *)obj; + _edi_cfg->autosave = elm_check_state_get(check); + _edi_config_save(); +} + +static Evas_Object * +_edi_settings_behaviour_create(Evas_Object *parent) +{ + Evas_Object *box, *frame, *check; + + frame = _edi_settings_panel_create(parent, "Behaviour"); + box = elm_object_part_content_get(frame, "default"); + + check = elm_check_add(box); + elm_object_text_set(check, "Auto save files"); + elm_check_state_set(check, _edi_cfg->autosave); + elm_box_pack_end(box, check); + evas_object_size_hint_align_set(check, EVAS_HINT_FILL, 0.5); + evas_object_smart_callback_add(check, "changed", + _edi_settings_behaviour_autosave_cb, NULL); + evas_object_show(check); + + return frame; +} + +Evas_Object * +edi_settings_show(Evas_Object *mainwin) +{ + Evas_Object *win, *table, *naviframe, *tb; + Elm_Object_Item *tb_it; + + win = elm_win_add(mainwin, "settings", ELM_WIN_DIALOG_BASIC); + if (!win) return NULL; + + elm_win_title_set(win, "Edi Settings"); + elm_win_focus_highlight_enabled_set(win, EINA_TRUE); + evas_object_smart_callback_add(win, "delete,request", _edi_settings_exit, win); + + table = elm_table_add(win); + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_win_resize_object_add(win, table); + evas_object_show(table); + + tb = elm_toolbar_add(table); + elm_toolbar_homogeneous_set(tb, EINA_TRUE); + elm_toolbar_shrink_mode_set(tb, ELM_TOOLBAR_SHRINK_SCROLL); + elm_toolbar_select_mode_set(tb, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_toolbar_align_set(tb, 0.0); + elm_toolbar_horizontal_set(tb, EINA_FALSE); + elm_toolbar_icon_order_lookup_set(tb, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_weight_set(tb, 0.0, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(tb, 0.0, EVAS_HINT_FILL); + elm_table_pack(table, tb, 0, 0, 1, 5); + evas_object_show(tb); + + naviframe = elm_naviframe_add(table); + evas_object_size_hint_weight_set(naviframe, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(naviframe, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(table, naviframe, 1, 0, 4, 5); + + _edi_settings_display = elm_naviframe_item_push(naviframe, "", NULL, NULL, + _edi_settings_display_create(naviframe), NULL); + elm_naviframe_item_title_enabled_set(_edi_settings_display, EINA_FALSE, EINA_FALSE); + _edi_settings_behaviour = elm_naviframe_item_push(naviframe, "", NULL, NULL, + _edi_settings_behaviour_create(naviframe), NULL); + elm_naviframe_item_title_enabled_set(_edi_settings_behaviour, EINA_FALSE, EINA_FALSE); + + tb_it = elm_toolbar_item_append(tb, "preferences-desktop", "Display", + _edi_settings_category_cb, _edi_settings_display); + tb_it = elm_toolbar_item_append(tb, "preferences-other", "Behaviour", + _edi_settings_category_cb, _edi_settings_behaviour); + + evas_object_show(naviframe); + evas_object_resize(win, 480 * elm_config_scale_get(), 320 * elm_config_scale_get()); + evas_object_show(win); + + return win; +}