ajwillia-ms pushed a commit to branch master.

http://git.enlightenment.org/tools/edi.git/commit/?id=e62ddd5bc16dacbd03a9f4f1c3b8db26eee8c399

commit e62ddd5bc16dacbd03a9f4f1c3b8db26eee8c399
Author: Andy Williams <a...@andywilliams.me>
Date:   Sun Mar 8 22:07:02 2015 +0100

    config: add settings screen
    
    Add a new autosave flag, upgrade config so it's set.
    Listen to a config_changed event to update UI where required.
---
 ChangeLog                      |  12 +++
 src/bin/Makefile.am            |   1 +
 src/bin/edi_config.c           |  16 ++--
 src/bin/edi_config.h           |   4 +
 src/bin/edi_consolepanel.c     |  22 +++++
 src/bin/edi_logpanel.c         |  10 +++
 src/bin/edi_main.c             |   7 ++
 src/bin/edi_private.h          |   1 -
 src/bin/editor/edi_editor.c    |  19 ++---
 src/bin/screens/edi_screens.h  |  15 +++-
 src/bin/screens/edi_settings.c | 182 +++++++++++++++++++++++++++++++++++++++++
 11 files changed, 268 insertions(+), 21 deletions(-)

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 = 
"<backing_color=#ff9900>";
 
 #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,11 +36,21 @@ 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 <Elementary.h>
+#include <Ecore.h>
+
+#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;
+}

-- 


Reply via email to