ajwillia-ms pushed a commit to branch master.

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

commit bf17d7c8af73dece708d501c900499428709cd74
Author: Andy Williams <a...@andywilliams.me>
Date:   Sat May 16 09:56:39 2015 +0100

    config: save project config in the project dir
    
    globally storing info about projects loaded, file associations
    and the general user preference.
    
    GUI and usage settings stored in <project>/.edi folder
---
 .gitignore                     |   1 +
 src/bin/edi_config.c           | 212 +++++++++++++++++++++++++++++------------
 src/bin/edi_config.h           |  26 +++--
 src/bin/edi_consolepanel.c     |   8 +-
 src/bin/edi_logpanel.c         |   4 +-
 src/bin/edi_main.c             |  51 +++++-----
 src/bin/editor/edi_editor.c    |  12 +--
 src/bin/screens/edi_settings.c |  28 +++---
 src/bin/screens/edi_welcome.c  |   2 +-
 9 files changed, 222 insertions(+), 122 deletions(-)

diff --git a/.gitignore b/.gitignore
index 8a3af95..39c72e7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,7 @@
 *.gcno
 *.gcda
 .dirstamp
+.edi
 
 /src/bin/edi
 /src/bin/edi_build
diff --git a/src/bin/edi_config.c b/src/bin/edi_config.c
index 3049e8a..4b02c60 100644
--- a/src/bin/edi_config.c
+++ b/src/bin/edi_config.c
@@ -33,20 +33,29 @@
 # define EDI_CONFIG_HASH(edd, type, member, eddtype) \
    EET_DATA_DESCRIPTOR_ADD_HASH(edd, type, #member, member, eddtype)
 
-#  define EDI_CONFIG_FILE_EPOCH 0x0002
-#  define EDI_CONFIG_FILE_GENERATION 0x000b
+#  define EDI_CONFIG_FILE_EPOCH 0x0003
+#  define EDI_CONFIG_FILE_GENERATION 0x000c
 #  define EDI_CONFIG_FILE_VERSION \
    ((EDI_CONFIG_FILE_EPOCH << 16) | EDI_CONFIG_FILE_GENERATION)
 
+#  define EDI_PROJECT_CONFIG_FILE_EPOCH 0x0001
+#  define EDI_PROJECT_CONFIG_FILE_GENERATION 0x0001
+#  define EDI_PROJECT_CONFIG_FILE_VERSION \
+   ((EDI_PROJECT_CONFIG_FILE_EPOCH << 16) | EDI_PROJECT_CONFIG_FILE_GENERATION)
+
 typedef Eet_Data_Descriptor Edi_Config_DD;
+typedef Eet_Data_Descriptor Edi_Project_Config_DD;
 
 /* local variables */
 static Edi_Config_DD *_edi_cfg_edd = NULL;
 static Edi_Config_DD *_edi_cfg_proj_edd = NULL;
 static Edi_Config_DD *_edi_cfg_mime_edd = NULL;
 
+static Edi_Project_Config_DD *_edi_proj_cfg_edd = NULL;
+
 /* external variables */
-Edi_Config *_edi_cfg = NULL;
+Edi_Config *_edi_config = NULL;
+Edi_Project_Config *_edi_project_config = NULL;
 int EDI_EVENT_CONFIG_CHANGED;
 
 const char *
@@ -60,6 +69,17 @@ _edi_config_dir_get(void)
    return dir;
 }
 
+const char *
+_edi_project_config_dir_get(void)
+{
+   static char dir[PATH_MAX];
+
+   if (!dir[0] && edi_project_get())
+     snprintf(dir, sizeof(dir), "%s/.edi", edi_project_get());
+
+   return dir;
+}
+
 /* local functions */
 static Edi_Config_DD *
 _edi_config_descriptor_new(const char *name, int size)
@@ -79,33 +99,40 @@ _edi_config_cb_free(void)
    Edi_Config_Project *proj;
    Edi_Config_Mime_Association *mime;
 
-   EINA_LIST_FREE(_edi_cfg->projects, proj)
+   EINA_LIST_FREE(_edi_config->projects, proj)
      {
         if (proj->name) eina_stringshare_del(proj->name);
         if (proj->path) eina_stringshare_del(proj->path);
         free(proj);
      }
 
-   EINA_LIST_FREE(_edi_cfg->mime_assocs, mime)
+   EINA_LIST_FREE(_edi_config->mime_assocs, mime)
      {
         if (mime->id) eina_stringshare_del(mime->id);
         if (mime->mime) eina_stringshare_del(mime->mime);
         free(mime);
      }
 
-   free(_edi_cfg);
-   _edi_cfg = NULL;
+   free(_edi_config);
+   _edi_config = NULL;
+}
+
+static void
+_edi_project_config_cb_free(void)
+{
+   free(_edi_project_config);
+   _edi_project_config = NULL;
 }
 
 static void *
-_edi_config_domain_load(const char *domain, Edi_Config_DD *edd)
+_edi_config_domain_load(const char *dir, const char *domain, 
Eet_Data_Descriptor *edd)
 {
    Eet_File *ef;
    char buff[PATH_MAX];
 
    if (!domain) return NULL;
    snprintf(buff, sizeof(buff),
-            "%s/%s.cfg", _edi_config_dir_get(), domain);
+            "%s/%s.cfg", dir, domain);
    ef = eet_open(buff, EET_FILE_MODE_READ);
    if (ef)
      {
@@ -119,23 +146,21 @@ _edi_config_domain_load(const char *domain, Edi_Config_DD 
*edd)
 }
 
 static Eina_Bool 
-_edi_config_domain_save(const char *domain, Edi_Config_DD *edd, const void 
*data)
+_edi_config_domain_save(const char *dir, const char *domain, 
Eet_Data_Descriptor *edd, const void *data)
 {
    Eet_File *ef;
    char buff[PATH_MAX];
-   const char *configdir;
 
    if (!domain) return 0;
-   configdir = _edi_config_dir_get();
-   snprintf(buff, sizeof(buff), "%s/", configdir);
+   snprintf(buff, sizeof(buff), "%s/", dir);
    if (!ecore_file_exists(buff)) ecore_file_mkpath(buff);
-   snprintf(buff, sizeof(buff), "%s/%s.tmp", configdir, domain);
+   snprintf(buff, sizeof(buff), "%s/%s.tmp", dir, domain);
    ef = eet_open(buff, EET_FILE_MODE_WRITE);
    if (ef)
      {
         char buff2[PATH_MAX];
 
-        snprintf(buff2, sizeof(buff2), "%s/%s.cfg", configdir, domain);
+        snprintf(buff2, sizeof(buff2), "%s/%s.cfg", dir, domain);
         if (!eet_data_write(ef, edd, "config", data, 1))
           {
              eet_close(ef);
@@ -179,6 +204,17 @@ _edi_config_init(void)
    #define T Edi_Config
    #define D _edi_cfg_edd
    EDI_CONFIG_VAL(D, T, version, 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);
+
+   _edi_proj_cfg_edd = EDI_CONFIG_DD_NEW("Project_Config", Edi_Project_Config);
+   #undef T
+   #undef D
+   #define T Edi_Project_Config
+   #define D _edi_proj_cfg_edd
+   EDI_CONFIG_VAL(D, T, version, EET_T_INT);
    EDI_CONFIG_VAL(D, T, font.size, EET_T_INT);
    EDI_CONFIG_VAL(D, T, gui.translucent, EET_T_UCHAR);
    EDI_CONFIG_VAL(D, T, gui.width, EET_T_INT);
@@ -191,9 +227,6 @@ _edi_config_init(void)
    EDI_CONFIG_VAL(D, T, gui.show_whitespace, EET_T_UCHAR);
    EDI_CONFIG_VAL(D, T, gui.width_marker, EET_T_UINT);
    EDI_CONFIG_VAL(D, T, gui.tabstop, EET_T_UINT);
-   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);
 
    _edi_config_load();
 
@@ -204,11 +237,14 @@ Eina_Bool
 _edi_config_shutdown(void)
 {
    _edi_config_cb_free();
+   _edi_project_config_cb_free();
 
    EDI_CONFIG_DD_FREE(_edi_cfg_proj_edd);
    EDI_CONFIG_DD_FREE(_edi_cfg_mime_edd);
    EDI_CONFIG_DD_FREE(_edi_cfg_edd);
 
+   EDI_CONFIG_DD_FREE(_edi_proj_cfg_edd);
+
    efreet_shutdown();
 
    return EINA_TRUE;
@@ -219,17 +255,17 @@ _edi_config_load(void)
 {
    Eina_Bool save = EINA_FALSE;
 
-   _edi_cfg = _edi_config_domain_load(PACKAGE_NAME, _edi_cfg_edd);
-   if (_edi_cfg)
+   _edi_config = _edi_config_domain_load(_edi_config_dir_get(), PACKAGE_NAME, 
_edi_cfg_edd);
+   if (_edi_config)
      {
         Eina_Bool reload = EINA_FALSE;
 
-        if ((_edi_cfg->version >> 16) < EDI_CONFIG_FILE_EPOCH)
+        if ((_edi_config->version >> 16) < EDI_CONFIG_FILE_EPOCH)
           {
              /* config too old */
              reload = EINA_TRUE;
           }
-        else if (_edi_cfg->version > EDI_CONFIG_FILE_VERSION)
+        else if (_edi_config->version > EDI_CONFIG_FILE_VERSION)
           {
              /* config too new, WTF ? */
              reload = EINA_TRUE;
@@ -239,48 +275,26 @@ _edi_config_load(void)
         if (reload) _edi_config_cb_free();
      }
 
-   if (!_edi_cfg) 
+   if (!_edi_config) 
      {
-        _edi_cfg = calloc(1, sizeof(Edi_Config));
+        _edi_config = calloc(1, sizeof(Edi_Config));
         save = EINA_TRUE;
      }
 
    /* define some convenient macros */
-#define IFCFG(v) if ((_edi_cfg->version & 0xffff) < (v)) {
+#define IFCFG(v) if ((_edi_config->version & 0xffff) < (v)) {
 #define IFCFGELSE } else {
 #define IFCFGEND }
 
    /* setup defaults */
-   IFCFG(0x000a);
-
-   _edi_cfg->font.size = 12;
-   _edi_cfg->gui.translucent = EINA_TRUE;
-   _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;
+   IFCFG(0x000c);
 
-   IFCFG(0x000b);
-   _edi_cfg->gui.width_marker = 80;
-   _edi_cfg->gui.tabstop = 8;
+   _edi_config->autosave = EINA_TRUE;
+   _edi_config->projects = NULL;
+   _edi_config->mime_assocs = NULL;
    IFCFGEND;
 
-   /* limit config values so they are sane */
-   EDI_CONFIG_LIMIT(_edi_cfg->font.size, 8, 96);
-   EDI_CONFIG_LIMIT(_edi_cfg->gui.width, 150, 10000);
-   EDI_CONFIG_LIMIT(_edi_cfg->gui.height, 100, 8000);
-   EDI_CONFIG_LIMIT(_edi_cfg->gui.leftsize, 0.0, 1.0);
-   EDI_CONFIG_LIMIT(_edi_cfg->gui.bottomsize, 0.0, 1.0);
-   EDI_CONFIG_LIMIT(_edi_cfg->gui.tabstop, 1, 32);
-
-   _edi_cfg->version = EDI_CONFIG_FILE_VERSION;
+   _edi_config->version = EDI_CONFIG_FILE_VERSION;
 
    if (save) _edi_config_save();
 }
@@ -288,7 +302,7 @@ _edi_config_load(void)
 void 
 _edi_config_save(void)
 {
-   if (_edi_config_domain_save(PACKAGE_NAME, _edi_cfg_edd, _edi_cfg))
+   if (_edi_config_domain_save(_edi_config_dir_get(), PACKAGE_NAME, 
_edi_cfg_edd, _edi_config))
      ecore_event_add(EDI_EVENT_CONFIG_CHANGED, NULL, NULL, NULL);
 }
 
@@ -298,16 +312,16 @@ _edi_config_project_add(const char *path)
    Edi_Config_Project *project;
    Eina_List *list, *next;
 
-   EINA_LIST_FOREACH_SAFE(_edi_cfg->projects, list, next, project)
+   EINA_LIST_FOREACH_SAFE(_edi_config->projects, list, next, project)
      {
         if (!strncmp(project->path, path, strlen(project->path)))
-          _edi_cfg->projects = eina_list_remove_list(_edi_cfg->projects, list);
+          _edi_config->projects = eina_list_remove_list(_edi_config->projects, 
list);
      }
 
    project = malloc(sizeof(*project));
    project->path = eina_stringshare_add(path);
    project->name = eina_stringshare_add(basename((char*) path));
-   _edi_cfg->projects = eina_list_prepend(_edi_cfg->projects, project);
+   _edi_config->projects = eina_list_prepend(_edi_config->projects, project);
    _edi_config_save();
 }
 
@@ -317,15 +331,13 @@ _edi_config_project_remove(const char *path)
    Edi_Config_Project *project;
    Eina_List *list, *next;
 
-   EINA_LIST_FOREACH_SAFE(_edi_cfg->projects, list, next, project)
+   EINA_LIST_FOREACH_SAFE(_edi_config->projects, list, next, project)
      {
         if (!strncmp(project->path, path, strlen(project->path)))
-         {
-            break;
-         }
+          break;
      }
 
-   _edi_cfg->projects = eina_list_remove(_edi_cfg->projects, project);
+   _edi_config->projects = eina_list_remove(_edi_config->projects, project);
    _edi_config_save();
 }
 
@@ -337,7 +349,7 @@ _edi_config_mime_add(const char *mime, const char *id)
    mime_assoc = malloc(sizeof(*mime_assoc));
    mime_assoc->id = eina_stringshare_add(id);
    mime_assoc->mime = eina_stringshare_add(mime);
-   _edi_cfg->mime_assocs = eina_list_prepend(_edi_cfg->mime_assocs, 
mime_assoc);
+   _edi_config->mime_assocs = eina_list_prepend(_edi_config->mime_assocs, 
mime_assoc);
    _edi_config_save();
 }
 
@@ -347,7 +359,7 @@ _edi_config_mime_search(const char *mime)
    Edi_Config_Mime_Association *mime_assoc;
    Eina_List *list, *next;
 
-   EINA_LIST_FOREACH_SAFE(_edi_cfg->mime_assocs, list, next, mime_assoc)
+   EINA_LIST_FOREACH_SAFE(_edi_config->mime_assocs, list, next, mime_assoc)
      {
         if (!strncmp(mime_assoc->mime, mime, strlen(mime_assoc->mime)))
           {
@@ -356,3 +368,77 @@ _edi_config_mime_search(const char *mime)
      }
    return NULL;
 }
+
+void
+_edi_project_config_load()
+{
+   Eina_Bool save = EINA_FALSE;
+
+   _edi_project_config = 
_edi_config_domain_load(_edi_project_config_dir_get(), PACKAGE_NAME, 
_edi_proj_cfg_edd);
+   if (_edi_project_config)
+     {
+        Eina_Bool reload = EINA_FALSE;
+
+        if ((_edi_project_config->version >> 16) < 
EDI_PROJECT_CONFIG_FILE_EPOCH)
+          {
+             /* config too old */
+             reload = EINA_TRUE;
+          }
+        else if (_edi_project_config->version > 
EDI_PROJECT_CONFIG_FILE_VERSION)
+          {
+             /* config too new, WTF ? */
+             reload = EINA_TRUE;
+          }
+
+        /* if too old or too new, clear it so we can create new */
+        if (reload) _edi_project_config_cb_free();
+     }
+
+   if (!_edi_project_config)
+     {
+        _edi_project_config = calloc(1, sizeof(Edi_Project_Config));
+        save = EINA_TRUE;
+     }
+
+   /* define some convenient macros */
+#define IFPCFG(v) if ((_edi_project_config->version & 0xffff) < (v)) {
+#define IFPCFGELSE } else {
+#define IFPCFGEND }
+
+   /* setup defaults */
+   IFPCFG(0x0001);
+
+   _edi_project_config->font.size = 12;
+   _edi_project_config->gui.translucent = EINA_TRUE;
+   _edi_project_config->gui.width = 640;
+   _edi_project_config->gui.height = 480;
+   _edi_project_config->gui.leftsize = 0.25;
+   _edi_project_config->gui.leftopen = EINA_TRUE;
+   _edi_project_config->gui.bottomsize = 0.2;
+   _edi_project_config->gui.bottomopen = EINA_FALSE;
+   _edi_project_config->gui.bottomtab = 0;
+
+   _edi_project_config->gui.width_marker = 80;
+   _edi_project_config->gui.tabstop = 8;
+   IFPCFGEND;
+
+   /* limit config values so they are sane */
+   EDI_CONFIG_LIMIT(_edi_project_config->font.size, 8, 96);
+   EDI_CONFIG_LIMIT(_edi_project_config->gui.width, 150, 10000);
+   EDI_CONFIG_LIMIT(_edi_project_config->gui.height, 100, 8000);
+   EDI_CONFIG_LIMIT(_edi_project_config->gui.leftsize, 0.0, 1.0);
+   EDI_CONFIG_LIMIT(_edi_project_config->gui.bottomsize, 0.0, 1.0);
+   EDI_CONFIG_LIMIT(_edi_project_config->gui.tabstop, 1, 32);
+
+   _edi_project_config->version = EDI_PROJECT_CONFIG_FILE_VERSION;
+
+   if (save) _edi_project_config_save();
+}
+
+void 
+_edi_project_config_save()
+{
+   if (_edi_config_domain_save(_edi_project_config_dir_get(), PACKAGE_NAME, 
_edi_proj_cfg_edd, _edi_project_config))
+     ecore_event_add(EDI_EVENT_CONFIG_CHANGED, NULL, NULL, NULL);
+}
+
diff --git a/src/bin/edi_config.h b/src/bin/edi_config.h
index 041f296..fc7b022 100644
--- a/src/bin/edi_config.h
+++ b/src/bin/edi_config.h
@@ -3,6 +3,8 @@
 
 #include <Eina.h>
 
+#include "Edi.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -13,6 +15,8 @@ typedef struct _Edi_Config_Project Edi_Config_Project;
 typedef struct _Edi_Config_Mime_Association Edi_Config_Mime_Association;
 typedef struct _Edi_Config Edi_Config;
 
+typedef struct _Edi_Project_Config Edi_Project_Config;
+
 struct _Edi_Config_Project
 {
    const char *name;
@@ -25,7 +29,17 @@ struct _Edi_Config_Mime_Association
    const char *mime;
 };
 
-struct _Edi_Config 
+struct _Edi_Config
+{
+   int version;
+
+   Eina_Bool autosave;
+
+   Eina_List *projects;
+   Eina_List *mime_assocs;
+};
+
+struct _Edi_Project_Config 
 {
    int version;
 
@@ -43,19 +57,17 @@ struct _Edi_Config
         Eina_Bool show_whitespace;
         unsigned int width_marker, tabstop;
      } gui;
-
-   Eina_Bool autosave;
-
-   Eina_List *projects;
-   Eina_List *mime_assocs;
 };
 
-extern Edi_Config *_edi_cfg;
+extern Edi_Config *_edi_config;
+extern Edi_Project_Config *_edi_project_config;
 
 Eina_Bool _edi_config_init(void);
 Eina_Bool _edi_config_shutdown(void);
 void _edi_config_load(void);
 void _edi_config_save(void);
+void _edi_project_config_load();
+void _edi_project_config_save();
 
 void _edi_config_project_add(const char *path);
 void _edi_config_project_remove(const char *path);
diff --git a/src/bin/edi_consolepanel.c b/src/bin/edi_consolepanel.c
index 579c091..d80fdf4 100644
--- a/src/bin/edi_consolepanel.c
+++ b/src/bin/edi_consolepanel.c
@@ -319,13 +319,13 @@ _edi_consolepanel_config_changed(void *data EINA_UNUSED, 
int type EINA_UNUSED, v
    EINA_LIST_FOREACH(_edi_console_code->widgets, item, widget)
      {
         eo_do(widget,
-              elm_code_widget_font_size_set(_edi_cfg->font.size));
+              elm_code_widget_font_size_set(_edi_project_config->font.size));
      }
 
    EINA_LIST_FOREACH(_edi_test_code->widgets, item, widget)
      {
         eo_do(widget,
-              elm_code_widget_font_size_set(_edi_cfg->font.size));
+              elm_code_widget_font_size_set(_edi_project_config->font.size));
      }
 
    return ECORE_CALLBACK_RENEW;
@@ -342,7 +342,7 @@ void edi_consolepanel_add(Evas_Object *parent)
    widget = eo_add(ELM_CODE_WIDGET_CLASS, parent,
                    elm_code_widget_code_set(code));
    eo_do(widget,
-         elm_code_widget_font_size_set(_edi_cfg->font.size),
+         elm_code_widget_font_size_set(_edi_project_config->font.size),
          elm_code_widget_gravity_set(0.0, 1.0),
          eo_event_callback_add(&ELM_CODE_EVENT_LINE_LOAD_DONE, 
_edi_consolepanel_line_cb, NULL),
          eo_event_callback_add(ELM_CODE_WIDGET_EVENT_LINE_CLICKED, 
_edi_consolepanel_clicked_cb, code));
@@ -369,7 +369,7 @@ void edi_testpanel_add(Evas_Object *parent)
    widget = eo_add(ELM_CODE_WIDGET_CLASS, parent,
                    elm_code_widget_code_set(code));
    eo_do(widget,
-         elm_code_widget_font_size_set(_edi_cfg->font.size),
+         elm_code_widget_font_size_set(_edi_project_config->font.size),
          elm_code_widget_gravity_set(0.0, 1.0),
          eo_event_callback_add(&ELM_CODE_EVENT_LINE_LOAD_DONE, 
_edi_testpanel_line_cb, NULL),
          eo_event_callback_add(ELM_CODE_WIDGET_EVENT_LINE_CLICKED, 
_edi_consolepanel_clicked_cb, code));
diff --git a/src/bin/edi_logpanel.c b/src/bin/edi_logpanel.c
index 353e9e3..c12d7c5 100644
--- a/src/bin/edi_logpanel.c
+++ b/src/bin/edi_logpanel.c
@@ -50,7 +50,7 @@ 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));
+         elm_code_widget_font_size_set(_edi_project_config->font.size));
 
    return ECORE_CALLBACK_RENEW;
 }
@@ -64,7 +64,7 @@ void edi_logpanel_add(Evas_Object *parent)
    widget = eo_add(ELM_CODE_WIDGET_CLASS, parent,
                    elm_code_widget_code_set(code));
    eo_do(widget,
-         elm_code_widget_font_size_set(_edi_cfg->font.size),
+         elm_code_widget_font_size_set(_edi_project_config->font.size),
          elm_code_widget_gravity_set(0.0, 1.0),
          eo_event_callback_add(&ELM_CODE_EVENT_LINE_LOAD_DONE, 
_edi_logpanel_line_cb, NULL));
    evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, 
EVAS_HINT_EXPAND);
diff --git a/src/bin/edi_main.c b/src/bin/edi_main.c
index a9016eb..390ee77 100644
--- a/src/bin/edi_main.c
+++ b/src/bin/edi_main.c
@@ -123,25 +123,25 @@ _edi_panel_size_save(Eina_Bool left)
 
    if (left)
      {
-        _edi_cfg->gui.leftopen = open;
+        _edi_project_config->gui.leftopen = open;
         if (open)
-          _edi_cfg->gui.leftsize = size;
+          _edi_project_config->gui.leftsize = size;
      }
    else
      {
-        _edi_cfg->gui.bottomopen = open;
+        _edi_project_config->gui.bottomopen = open;
         if (open)
-          _edi_cfg->gui.bottomsize = size;
+          _edi_project_config->gui.bottomsize = size;
      }
 
-   _edi_config_save();
+   _edi_project_config_save();
 }
 
 static void
 _edi_panel_save_tab(int index)
 {
-   _edi_cfg->gui.bottomtab = index;
-   _edi_config_save();
+   _edi_project_config->gui.bottomtab = index;
+   _edi_project_config_save();
 }
 
 static void
@@ -225,12 +225,12 @@ _edi_toggle_file_panel(void *data, Evas_Object *obj 
EINA_UNUSED, void *event_inf
    if (size == 0.0)
      {
         elm_icon_standard_set(_edi_filepanel_icon, "stock_left");
-        _edi_slide_panel_new(_edi_leftpanes, panel, _edi_cfg->gui.leftsize, 
EINA_TRUE, EINA_TRUE);
+        _edi_slide_panel_new(_edi_leftpanes, panel, 
_edi_project_config->gui.leftsize, EINA_TRUE, EINA_TRUE);
      }
    else
      {
         elm_icon_standard_set(_edi_filepanel_icon, "stock_right");
-        _edi_slide_panel_new(_edi_leftpanes, panel, _edi_cfg->gui.leftsize, 
EINA_FALSE, EINA_TRUE);
+        _edi_slide_panel_new(_edi_leftpanes, panel, 
_edi_project_config->gui.leftsize, EINA_FALSE, EINA_TRUE);
      }
 }
 
@@ -257,7 +257,7 @@ _edi_toggle_panel(void *data, Evas_Object *obj, void 
*event_info)
      {
         elm_toolbar_item_icon_set(item, "stock_up");
 
-        _edi_slide_panel_new(_edi_bottompanes, panel, 
_edi_cfg->gui.bottomsize, EINA_FALSE, EINA_FALSE);
+        _edi_slide_panel_new(_edi_bottompanes, panel, 
_edi_project_config->gui.bottomsize, EINA_FALSE, EINA_FALSE);
         _edi_selected_bottompanel = NULL;
      }
    else
@@ -268,7 +268,7 @@ _edi_toggle_panel(void *data, Evas_Object *obj, void 
*event_info)
 
         size = elm_panes_content_right_size_get(_edi_bottompanes);
         if (size == 0.0)
-          _edi_slide_panel_new(_edi_bottompanes, panel, 
_edi_cfg->gui.bottomsize, EINA_TRUE, EINA_FALSE);
+          _edi_slide_panel_new(_edi_bottompanes, panel, 
_edi_project_config->gui.bottomsize, EINA_TRUE, EINA_FALSE);
         else
           evas_object_show(panel);
 
@@ -330,7 +330,7 @@ edi_content_setup(Evas_Object *win, const char *path)
    evas_object_size_hint_align_set(content_in, EVAS_HINT_FILL, EVAS_HINT_FILL);
 
    icon = elm_icon_add(content_in);
-   if (_edi_cfg->gui.leftopen)
+   if (_edi_project_config->gui.leftopen)
      elm_icon_standard_set(icon, "stock_left");
    else
      elm_icon_standard_set(icon, "stock_right");
@@ -357,8 +357,8 @@ edi_content_setup(Evas_Object *win, const char *path)
    // add file list
    evas_object_size_hint_weight_set(_edi_filepanel, EVAS_HINT_EXPAND, 
EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(_edi_filepanel, EVAS_HINT_FILL, 
EVAS_HINT_FILL);
-   if (_edi_cfg->gui.leftopen)
-     elm_panes_content_left_size_set(filepane, _edi_cfg->gui.leftsize);
+   if (_edi_project_config->gui.leftopen)
+     elm_panes_content_left_size_set(filepane, 
_edi_project_config->gui.leftsize);
    else
      elm_panes_content_left_size_set(filepane, 0.0);
    evas_object_smart_callback_add(filepane, "unpress", _edi_panel_dragged_cb, 
_edi_filepanel);
@@ -408,15 +408,15 @@ edi_content_setup(Evas_Object *win, const char *path)
    edi_testpanel_add(_edi_testpanel);
    elm_table_pack(logpanels, _edi_testpanel, 0, 0, 1, 1);
    elm_object_part_content_set(logpane, "bottom", logpanels);
-   if (_edi_cfg->gui.bottomopen)
+   if (_edi_project_config->gui.bottomopen)
      {
-        elm_panes_content_right_size_set(logpane, _edi_cfg->gui.bottomsize);
-        if (_edi_cfg->gui.bottomtab == 1)
+        elm_panes_content_right_size_set(logpane, 
_edi_project_config->gui.bottomsize);
+        if (_edi_project_config->gui.bottomtab == 1)
           {
              elm_toolbar_item_icon_set(_edi_consolepanel_item, "stock_down");
              _edi_selected_bottompanel = _edi_consolepanel_item;
           }
-        else if (_edi_cfg->gui.bottomtab == 2)
+        else if (_edi_project_config->gui.bottomtab == 2)
           {
              elm_toolbar_item_icon_set(_edi_testpanel_item, "stock_down");
              _edi_selected_bottompanel = _edi_testpanel_item;
@@ -429,8 +429,8 @@ edi_content_setup(Evas_Object *win, const char *path)
      }
    else
      elm_panes_content_right_size_set(logpane, 0.0);
-   if (_edi_cfg->gui.bottomopen)
-     evas_object_show(_edi_panel_tab_for_index(_edi_cfg->gui.bottomtab));
+   if (_edi_project_config->gui.bottomopen)
+     
evas_object_show(_edi_panel_tab_for_index(_edi_project_config->gui.bottomtab));
    evas_object_smart_callback_add(logpane, "unpress", _edi_panel_dragged_cb, 
NULL);
 
    evas_object_show(logpane);
@@ -755,9 +755,9 @@ _edi_resize_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, 
Evas_Object *obj,
    w /= elm_config_scale_get();
    h /= elm_config_scale_get();
 
-   _edi_cfg->gui.width = w + 1;
-   _edi_cfg->gui.height = h + 1;
-   _edi_config_save();
+   _edi_project_config->gui.width = w + 1;
+   _edi_project_config->gui.height = h + 1;
+   _edi_project_config_save();
 }
 
 Evas_Object *
@@ -773,6 +773,7 @@ edi_open(const char *inputpath)
         return NULL;
      }
    path = realpath(inputpath, NULL);
+   _edi_project_config_load(edi_project_get());
 
    elm_need_ethumb();
    elm_need_efreet();
@@ -801,8 +802,8 @@ edi_open(const char *inputpath)
    elm_box_pack_end(vbx, content);
 
    ERR("Loaded project at %s", path);
-   evas_object_resize(win, _edi_cfg->gui.width * elm_config_scale_get(),
-                      _edi_cfg->gui.height * elm_config_scale_get());
+   evas_object_resize(win, _edi_project_config->gui.width * 
elm_config_scale_get(),
+                      _edi_project_config->gui.height * 
elm_config_scale_get());
    evas_object_show(win);
 
    _edi_config_project_add(path);
diff --git a/src/bin/editor/edi_editor.c b/src/bin/editor/edi_editor.c
index 8d36407..0e17ea9 100644
--- a/src/bin/editor/edi_editor.c
+++ b/src/bin/editor/edi_editor.c
@@ -136,7 +136,7 @@ TODO move this code into elm_code for undo/redo
 
    if (editor->save_timer)
      ecore_timer_reset(editor->save_timer);
-   else if (_edi_cfg->autosave)
+   else if (_edi_config->autosave)
      editor->save_timer = ecore_timer_add(EDI_CONTENT_SAVE_TIMEOUT, 
_edi_editor_autosave_cb, editor);
 }
 
@@ -537,7 +537,7 @@ _unfocused_cb(void *data, Evas_Object *obj EINA_UNUSED, 
void *event_info EINA_UN
 
    editor = (Edi_Editor *)data;
 
-   if (_edi_cfg->autosave)
+   if (_edi_config->autosave)
      edi_editor_save(editor);
 }
 
@@ -578,10 +578,10 @@ _edi_editor_config_changed(void *data, int type 
EINA_UNUSED, void *event EINA_UN
 
    widget = (Elm_Code_Widget *) data;
    eo_do(widget,
-         elm_code_widget_font_size_set(_edi_cfg->font.size),
-         elm_code_widget_show_whitespace_set(_edi_cfg->gui.show_whitespace),
-         elm_code_widget_line_width_marker_set(_edi_cfg->gui.width_marker),
-         elm_code_widget_tabstop_set(_edi_cfg->gui.tabstop));
+         elm_code_widget_font_size_set(_edi_project_config->font.size),
+         
elm_code_widget_show_whitespace_set(_edi_project_config->gui.show_whitespace),
+         
elm_code_widget_line_width_marker_set(_edi_project_config->gui.width_marker),
+         elm_code_widget_tabstop_set(_edi_project_config->gui.tabstop));
 
    return ECORE_CALLBACK_RENEW;
 }
diff --git a/src/bin/screens/edi_settings.c b/src/bin/screens/edi_settings.c
index 5cf3c36..e54bf39 100644
--- a/src/bin/screens/edi_settings.c
+++ b/src/bin/screens/edi_settings.c
@@ -53,8 +53,8 @@ _edi_settings_display_fontsize_cb(void *data EINA_UNUSED, 
Evas_Object *obj,
    Evas_Object *spinner;
 
    spinner = (Evas_Object *)obj;
-   _edi_cfg->font.size = (int) elm_spinner_value_get(spinner);
-   _edi_config_save();
+   _edi_project_config->font.size = (int) elm_spinner_value_get(spinner);
+   _edi_project_config_save();
 }
 
 static void
@@ -64,8 +64,8 @@ _edi_settings_display_whitespace_cb(void *data EINA_UNUSED, 
Evas_Object *obj,
    Evas_Object *check;
 
    check = (Evas_Object *)obj;
-   _edi_cfg->gui.show_whitespace = elm_check_state_get(check);
-   _edi_config_save();
+   _edi_project_config->gui.show_whitespace = elm_check_state_get(check);
+   _edi_project_config_save();
 }
 
 static void
@@ -75,8 +75,8 @@ _edi_settings_display_widthmarker_cb(void *data EINA_UNUSED, 
Evas_Object *obj,
    Evas_Object *spinner;
 
    spinner = (Evas_Object *)obj;
-   _edi_cfg->gui.width_marker = (int) elm_spinner_value_get(spinner);
-   _edi_config_save();
+   _edi_project_config->gui.width_marker = (int) 
elm_spinner_value_get(spinner);
+   _edi_project_config_save();
 }
 
 static void
@@ -86,8 +86,8 @@ _edi_settings_display_tabstop_cb(void *data EINA_UNUSED, 
Evas_Object *obj,
    Evas_Object *spinner;
 
    spinner = (Evas_Object *)obj;
-   _edi_cfg->gui.tabstop = (int) elm_spinner_value_get(spinner);
-   _edi_config_save();
+   _edi_project_config->gui.tabstop = (int) elm_spinner_value_get(spinner);
+   _edi_project_config_save();
 }
 
 static Evas_Object *
@@ -112,7 +112,7 @@ _edi_settings_display_create(Evas_Object *parent)
    evas_object_show(label);
 
    spinner = elm_spinner_add(hbox);
-   elm_spinner_value_set(spinner, _edi_cfg->font.size);
+   elm_spinner_value_set(spinner, _edi_project_config->font.size);
    elm_spinner_editable_set(spinner, EINA_TRUE);
    elm_spinner_label_format_set(spinner, "%1.0fpt");
    elm_spinner_step_set(spinner, 1);
@@ -127,7 +127,7 @@ _edi_settings_display_create(Evas_Object *parent)
 
    check = elm_check_add(box);
    elm_object_text_set(check, "Display whitespace");
-   elm_check_state_set(check, _edi_cfg->gui.show_whitespace);
+   elm_check_state_set(check, _edi_project_config->gui.show_whitespace);
    elm_box_pack_end(box, check);
    evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, 0.0);
    evas_object_size_hint_align_set(check, 0.0, 0.5);
@@ -149,7 +149,7 @@ _edi_settings_display_create(Evas_Object *parent)
    evas_object_show(label);
 
    spinner = elm_spinner_add(hbox);
-   elm_spinner_value_set(spinner, _edi_cfg->gui.width_marker);
+   elm_spinner_value_set(spinner, _edi_project_config->gui.width_marker);
    elm_spinner_editable_set(spinner, EINA_TRUE);
    elm_spinner_step_set(spinner, 1);
    elm_spinner_wrap_set(spinner, EINA_FALSE);
@@ -175,7 +175,7 @@ _edi_settings_display_create(Evas_Object *parent)
    evas_object_show(label);
 
    spinner = elm_spinner_add(hbox);
-   elm_spinner_value_set(spinner, _edi_cfg->gui.tabstop);
+   elm_spinner_value_set(spinner, _edi_project_config->gui.tabstop);
    elm_spinner_editable_set(spinner, EINA_TRUE);
    elm_spinner_step_set(spinner, 1);
    elm_spinner_wrap_set(spinner, EINA_FALSE);
@@ -197,7 +197,7 @@ _edi_settings_behaviour_autosave_cb(void *data EINA_UNUSED, 
Evas_Object *obj,
    Evas_Object *check;
 
    check = (Evas_Object *)obj;
-   _edi_cfg->autosave = elm_check_state_get(check);
+   _edi_config->autosave = elm_check_state_get(check);
    _edi_config_save();
 }
 
@@ -211,7 +211,7 @@ _edi_settings_behaviour_create(Evas_Object *parent)
 
    check = elm_check_add(box);
    elm_object_text_set(check, "Auto save files");
-   elm_check_state_set(check, _edi_cfg->autosave);
+   elm_check_state_set(check, _edi_config->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",
diff --git a/src/bin/screens/edi_welcome.c b/src/bin/screens/edi_welcome.c
index 0027380..fd3b945 100644
--- a/src/bin/screens/edi_welcome.c
+++ b/src/bin/screens/edi_welcome.c
@@ -353,7 +353,7 @@ _edi_welcome_add_recent_projects(Evas_Object *box)
    evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
    elm_list_mode_set(list, ELM_LIST_LIMIT);
 
-   EINA_LIST_FOREACH(_edi_cfg->projects, listitem, project)
+   EINA_LIST_FOREACH(_edi_config->projects, listitem, project)
      {
         format = "<align=right><color=#ffffff><b>%s:   </b></color></align>";
         displen = strlen(project->path) + strlen(format) - 1;

-- 


Reply via email to