netstar pushed a commit to branch master.

http://git.enlightenment.org/apps/ecrire.git/commit/?id=b2a6f80ed70f49dcd56ae08f5104bda7fca61cbc

commit b2a6f80ed70f49dcd56ae08f5104bda7fca61cbc
Author: Alastair Poole <nets...@gmail.com>
Date:   Sat Feb 27 14:56:42 2021 +0000

    settings: small change.
---
 src/bin/cfg.c            |   1 -
 src/bin/main.c           |  47 ++++------
 src/bin/meson.build      |   2 +-
 src/bin/mess_header.h    |   6 ++
 src/bin/ui/alerts.c      |   1 +
 src/bin/ui/font_dialog.c | 179 --------------------------------------
 src/bin/ui/settings.c    | 221 +++++++++++++++++++++++++++++++++++++++++++++++
 src/bin/ui/ui.h          |   3 +-
 8 files changed, 247 insertions(+), 213 deletions(-)

diff --git a/src/bin/cfg.c b/src/bin/cfg.c
index 1480626..35cf501 100644
--- a/src/bin/cfg.c
+++ b/src/bin/cfg.c
@@ -123,7 +123,6 @@ ecrire_cfg_save(void)
    if (!config_file)
       return EINA_FALSE;
 
-
    ef = eet_open(config_file, EET_FILE_MODE_WRITE);
    if (!ef)
      {
diff --git a/src/bin/main.c b/src/bin/main.c
index bc76c30..34b86a3 100644
--- a/src/bin/main.c
+++ b/src/bin/main.c
@@ -19,7 +19,7 @@ static void
 _init_entry(Ecrire_Entry *inst)
 {
    Elm_Entry_Change_Info *inf;
-   editor_font_set(inst, _ent_cfg->font.name, _ent_cfg->font.size);
+   editor_font_set(inst, inst->font.name, inst->font.size);
 
    /* Init the undo stack */
    EINA_LIST_FREE(inst->undo_stack, inf)
@@ -484,7 +484,7 @@ _cb_new(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED)
 }
 
 static void
-_app_exit(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
+_cb_exit(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
 {
    Ecrire_Entry *inst = data;
    _alert_if_need_saving(_win_del_do, inst);
@@ -522,28 +522,22 @@ static void
 _cb_font_settings(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
 {
    Ecrire_Entry *inst = data;
-   ui_font_dialog_open(elm_object_top_widget_get(inst->win), inst, 
_ent_cfg->font.name, _ent_cfg->font.size);
+   ui_settings_open(elm_object_top_widget_get(inst->win), inst);
 }
 
-
 static void
 _cb_win_del(void *data, Evas_Object *obj, void *event_info)
 {
    Ecrire_Entry *inst = data;
    (void) data;
-   (void) obj;
-   (void) event_info;
    _alert_if_need_saving(_win_del_do, inst);
 }
 
 static void
-_cb_win_focused(void *data, Evas_Object *obj, void *event_info)
+_cb_win_focused(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
 {
    Ecrire_Entry *inst = data;
-   (void) data;
-   (void) obj;
-   (void) event_info;
-   elm_object_focus_set(inst->entry, EINA_TRUE);
+   elm_object_focus_set(inst->entry, 1);
 }
 
 static void
@@ -572,23 +566,17 @@ editor_font_set(Ecrire_Entry *inst, const char *font, int 
font_size)
    const Evas_Object *tb = elm_entry_textblock_get(inst->entry);
    Eina_Strbuf *sbuf;
 
-   eina_stringshare_replace(&_ent_cfg->font.name, font);
-   _ent_cfg->font.size = font_size;
-
    sbuf = eina_strbuf_new();
 
-   if (_ent_cfg->font.name)
-     {
-        eina_strbuf_append_printf(sbuf, "font=\\'%s\\'", _ent_cfg->font.name);
-     }
+   if (font)
+     eina_strbuf_append_printf(sbuf, "font=\\'%s\\'", font);
 
-   if (_ent_cfg->font.size > 0)
-     {
-        eina_strbuf_append_printf(sbuf, " font_size=\\'%d\\'",
-              _ent_cfg->font.size);
-     }
+   if (font_size > 0)
+     eina_strbuf_append_printf(sbuf, " font_size=\\'%d\\'", font_size);
 
-   if (eina_strbuf_length_get(sbuf) > 0)
+   if (!eina_strbuf_length_get(sbuf))
+     evas_object_textblock_style_user_pop((Evas_Object *) tb);
+   else
      {
         Evas_Textblock_Style *ts = evas_textblock_style_new();
 
@@ -598,13 +586,8 @@ editor_font_set(Ecrire_Entry *inst, const char *font, int 
font_size)
 
         evas_object_textblock_style_user_push((Evas_Object *) tb, ts);
      }
-   else
-     {
-        evas_object_textblock_style_user_pop((Evas_Object *) tb);
-     }
 
    elm_entry_calc_force(inst->entry);
-
    eina_strbuf_free(sbuf);
 }
 
@@ -613,6 +596,8 @@ editor_font_choose(Ecrire_Entry *inst, const char *font, 
int size)
 {
    editor_font_set(inst, font, size);
 
+   eina_stringshare_replace(&_ent_cfg->font.name, font);
+   _ent_cfg->font.size = size;
    /* Save the font for future runs */
    ecrire_cfg_save();
 }
@@ -631,7 +616,7 @@ _ecrire_menu_add(Ecrire_Entry *inst)
    elm_menu_item_add(menu, it, "document-save", _("Save"), _cb_save, inst);
    elm_menu_item_add(menu, it, "document-save-as", _("Save As"), _cb_save_as, 
inst);
    elm_menu_item_separator_add(menu, it);
-   elm_menu_item_add(menu, it, "application-exit", _("Exit"), _app_exit, inst);
+   elm_menu_item_add(menu, it, "application-exit", _("Exit"), _cb_exit, inst);
 
    it = elm_menu_item_add(menu, NULL, NULL, _("Edit"), NULL, NULL);
    inst->cut_item =
@@ -715,6 +700,8 @@ elm_main(int argc, char **argv)
    inst->filename = NULL;
    inst->last_saved_stack_ptr = NULL;
    inst->undo_stack_can_merge = EINA_FALSE;
+   inst->font.name = _ent_cfg->font.name;
+   inst->font.size = _ent_cfg->font.size;
 
    if (optind < argc)
      {
diff --git a/src/bin/meson.build b/src/bin/meson.build
index 3f3570f..5e761e6 100644
--- a/src/bin/meson.build
+++ b/src/bin/meson.build
@@ -7,7 +7,7 @@ executable('ecrire', [
     'mess_header.h',
     'ui/alerts.c',
     'ui/file_related.c',
-    'ui/font_dialog.c',
+    'ui/settings.c',
     'ui/goto_dialog.c',
     'ui/search_dialog.c',
     'ui/ui.h'
diff --git a/src/bin/mess_header.h b/src/bin/mess_header.h
index 98790ac..4f417a3 100644
--- a/src/bin/mess_header.h
+++ b/src/bin/mess_header.h
@@ -20,6 +20,12 @@ struct _Ecrire_Entry {
      int unsaved;
      Elm_Object_Item *copy_item, *cut_item, *save_item, *paste_item, 
*undo_item, *redo_item;
 
+     struct
+     {
+        const char *name;
+        int size;
+     } font;
+
      /* Undo stack */
      Eina_List *undo_stack;
      Eina_List *undo_stack_ptr;
diff --git a/src/bin/ui/alerts.c b/src/bin/ui/alerts.c
index 2247ec0..9104459 100644
--- a/src/bin/ui/alerts.c
+++ b/src/bin/ui/alerts.c
@@ -53,6 +53,7 @@ ui_alert_need_saving(Evas_Object *entry, void (*done)(void 
*data), void *data)
    done_data = data;
 
    elm_object_part_text_set(popup, "title,text", "Unsaved Changes");
+   elm_object_style_set(popup, "transparent");
    elm_object_text_set(popup,
          _("<align=center>Would you like to save changes to document?<br>"
          "Any unsaved changes will be lost."));
diff --git a/src/bin/ui/font_dialog.c b/src/bin/ui/font_dialog.c
deleted file mode 100644
index c18d080..0000000
--- a/src/bin/ui/font_dialog.c
+++ /dev/null
@@ -1,179 +0,0 @@
-#include "config.h"
-#include <Elementary.h>
-
-#include "../mess_header.h"
-Evas_Object *font_win, *list, *fsize, *dfont_check;
-
-void
-my_win_del(void *data, Evas_Object *obj, void *event_info)
-{
-   (void) data;
-   (void) obj;
-   (void) event_info;
-   font_win = NULL;
-}
-
-static Eina_List *
-_font_list_get(const Evas *e)
-{
-   Eina_List *flist = evas_font_available_list(e);
-   Eina_List *itr, *nitr;
-   const char *font, *prev_font = NULL;
-   flist = eina_list_sort(flist, eina_list_count(flist),
-         (Eina_Compare_Cb) strcasecmp);
-   EINA_LIST_FOREACH_SAFE(flist, itr, nitr, font)
-     {
-        Elm_Font_Properties *efp;
-
-        efp = elm_font_properties_get(font);
-        if (!efp) continue;
-        /* Remove dups */
-        if (prev_font && !strcmp(efp->name, prev_font))
-          {
-             flist = eina_list_remove_list(flist, itr);
-          }
-        else
-          {
-             eina_stringshare_replace(&font, efp->name);
-             prev_font = font;
-             eina_list_data_set(itr, font);
-          }
-
-        elm_font_properties_free(efp);
-     }
-
-   return flist;
-}
-
-static void
-_set_clicked(void *data,
-      Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
-   Ecrire_Entry *ent = data;
-   const char *selected = NULL;
-   Elm_Object_Item *list_it = elm_list_selected_item_get(list);
-   if (list_it)
-     selected = elm_object_item_text_get(list_it);
-   if (elm_check_state_get(dfont_check))
-      editor_font_choose(ent, NULL, 0);
-   else
-      editor_font_choose(ent, selected, elm_spinner_value_get(fsize));
-}
-
-static void
-_check_changed_cb(void *data EINA_UNUSED, Evas_Object *obj,
-      void *event_info EINA_UNUSED)
-{
-   elm_object_disabled_set(list, elm_check_state_get(obj));
-   elm_object_disabled_set(fsize, elm_check_state_get(obj));
-}
-
-
-Evas_Object *
-ui_font_dialog_open(Evas_Object *parent, Ecrire_Entry *ent, const char *pfont,
-      int size)
-{
-   Evas_Object *entry = ent->entry;
-   Evas_Object *win, *bg, *bx, *btn, *hbx, *lbl;
-
-   if (font_win)
-     {
-        evas_object_show(font_win);
-        return font_win;
-     }
-
-   font_win = win = elm_win_add(parent, "font-select", ELM_WIN_TOOLBAR);
-   elm_win_autodel_set(win, EINA_TRUE);
-   elm_win_title_set(win, _("Select Font"));
-   evas_object_smart_callback_add(win, "delete,request", my_win_del, entry);
-
-   bg = elm_bg_add(win);
-   elm_win_resize_object_add(win, bg);
-   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-   evas_object_show(bg);
-
-   bx = elm_box_add(win);
-   elm_win_resize_object_add(win, bx);
-   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-   evas_object_show(bx);
-
-   list = elm_list_add(win);
-   evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-   evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_box_pack_end(bx, list);
-   evas_object_show(list);
-
-   hbx = elm_box_add(bx);
-   elm_box_horizontal_set(hbx, EINA_TRUE);
-   elm_box_pack_end(bx, hbx);
-   evas_object_show(hbx);
-
-   lbl = elm_label_add(hbx);
-   elm_object_text_set(lbl, _("Font size:"));
-   elm_box_pack_end(hbx, lbl);
-   evas_object_show(lbl);
-
-   fsize = elm_spinner_add(hbx);
-   elm_spinner_label_format_set(fsize, _("%.0f pts"));
-   elm_spinner_step_set(fsize, 1);
-   elm_spinner_wrap_set(fsize, EINA_FALSE);
-   elm_object_style_set (fsize, "vertical");
-   elm_spinner_min_max_set(fsize, 0, 72);
-   elm_spinner_value_set(fsize, size);
-   evas_object_size_hint_align_set(fsize, 0.0, 0.5);
-   elm_box_pack_end(hbx, fsize);
-   evas_object_show(fsize);
-
-   /* Populate list */
-     {
-        Elm_Object_Item *cur_font = NULL;
-        const char *font;
-        Eina_List *flist, *itr;
-
-        flist = _font_list_get(evas_object_evas_get(list));
-        EINA_LIST_FOREACH(flist, itr, font)
-          {
-             Elm_Object_Item *tmp;
-             tmp = elm_list_item_append(list, font, NULL, NULL, NULL, NULL);
-             if (pfont && !strcmp(pfont, font))
-               {
-                  cur_font = tmp;
-               }
-          }
-        elm_list_go(list);
-
-        EINA_LIST_FREE(flist, font)
-           eina_stringshare_del(font);
-
-        if (cur_font)
-          {
-             elm_list_item_bring_in(cur_font);
-             elm_list_item_selected_set(cur_font, EINA_TRUE);
-          }
-     }
-
-   dfont_check = elm_check_add(win);
-   elm_object_text_set(dfont_check, _("Use Default Font:"));
-   evas_object_smart_callback_add(dfont_check, "changed", _check_changed_cb,
-         NULL);
-
-   elm_check_state_set(dfont_check, !pfont);
-   evas_object_show(dfont_check);
-   elm_box_pack_end(hbx, dfont_check);
-
-   _check_changed_cb(NULL, dfont_check, NULL);
-
-   btn = elm_button_add(win);
-   elm_object_text_set(btn, _("Set"));
-   evas_object_size_hint_align_set(btn, 1.0, 0.0);
-   evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-   evas_object_show(btn);
-   elm_box_pack_end(hbx, btn);
-   evas_object_smart_callback_add(btn, "clicked", _set_clicked, ent);
-
-   /* Forcing it to be the min height. */
-   evas_object_resize(win, 300, 500);
-   evas_object_show(win);
-
-   return win;
-}
diff --git a/src/bin/ui/settings.c b/src/bin/ui/settings.c
new file mode 100644
index 0000000..f162504
--- /dev/null
+++ b/src/bin/ui/settings.c
@@ -0,0 +1,221 @@
+#include "config.h"
+#include <Elementary.h>
+
+#include "../mess_header.h"
+
+Evas_Object *_settings_popup;
+
+typedef struct
+{
+   Evas_Object *list;
+   Evas_Object *fsize;
+   Evas_Object *dfont_check;
+   Elm_Object_Item *cur_font;
+} Settings;
+
+static Settings _settings;
+
+static void
+_cb_popup_del(void *data, Evas_Object *obj EINA_UNUSED,
+              void *event_info EINA_UNUSED)
+{
+   Ecrire_Entry *inst = data;
+
+   elm_object_focus_set(inst->win, 1);
+   if (_settings_popup)
+   evas_object_del(_settings_popup);
+   _settings_popup = NULL;
+}
+
+static Eina_List *
+_font_list_get(const Evas *e)
+{
+   Eina_List *fonts = evas_font_available_list(e);
+   Eina_List *itr, *nitr;
+   const char *font, *prev_font = NULL;
+
+   fonts = eina_list_sort(fonts, eina_list_count(fonts), (Eina_Compare_Cb) 
strcasecmp);
+   EINA_LIST_FOREACH_SAFE(fonts, itr, nitr, font)
+     {
+        Elm_Font_Properties *efp;
+
+        efp = elm_font_properties_get(font);
+        if (!efp) continue;
+        /* Remove dups */
+        if (prev_font && !strcmp(efp->name, prev_font))
+          fonts = eina_list_remove_list(fonts, itr);
+        else
+          {
+             eina_stringshare_replace(&font, efp->name);
+             prev_font = font;
+             eina_list_data_set(itr, font);
+          }
+        elm_font_properties_free(efp);
+     }
+
+   return fonts;
+}
+
+static void
+_cb_font_selected(void *data, Evas_Object *obj EINA_UNUSED,
+                  void *event_info)
+{
+   const char *selected;
+   Ecrire_Entry *inst;
+   Elm_Object_Item *it = event_info;
+   if (!it) return;
+
+   inst = data;
+   selected = elm_object_item_text_get(it);
+
+   if (elm_check_state_get(_settings.dfont_check))
+     return;
+
+   eina_stringshare_replace(&inst->font.name, selected);
+   editor_font_choose(inst, inst->font.name, inst->font.size);
+}
+
+static void
+_cb_spinner_delay_changed(void *data, Evas_Object *obj EINA_UNUSED,
+                          void *event_info)
+{
+   Ecrire_Entry *inst = data;
+
+   inst->font.size = elm_spinner_value_get(obj);
+
+   if (inst->font.name)
+     editor_font_choose(inst, inst->font.name, inst->font.size);
+}
+
+static void
+_cb_check_changed(void *data, Evas_Object *obj,
+                  void *event_info EINA_UNUSED)
+{
+   Ecrire_Entry *inst;
+   Eina_Bool enabled = elm_check_state_get(obj);
+
+   inst = data;
+
+   elm_object_disabled_set(_settings.list, enabled);
+   elm_object_disabled_set(_settings.fsize, enabled);
+
+   if (enabled)
+     {
+        inst->font.name = NULL;
+        editor_font_choose(inst, NULL, 0);
+     }
+   else if (inst->font.name)
+     {
+        editor_font_choose(inst, inst->font.name, inst->font.size);
+     }
+}
+
+static void
+_cb_btn_clicked(void *data, Evas_Object *obj,
+                void *event_info EINA_UNUSED)
+{
+   Ecrire_Entry *inst = data;
+   _cb_popup_del(inst, NULL, NULL);
+}
+
+Evas_Object *
+ui_settings_open(Evas_Object *parent, Ecrire_Entry *inst)
+{
+   Evas_Object *entry = inst->entry;
+   Evas_Object *pop, *tb, *rec, *bx, *hbx, *btn, *list, *lb, *sp, *ck;
+
+   if (_settings_popup)
+     return _settings_popup;
+
+   _settings_popup = pop = elm_popup_add(parent);
+   elm_object_style_set(pop, "transparent");
+   evas_object_size_hint_weight_set(pop, 1, 1);
+   evas_object_smart_callback_add(pop, "dismissed", _cb_popup_del, inst);
+   elm_object_part_text_set(pop, "title,text", _("Settings"));
+
+   bx = elm_box_add(pop);
+   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bx);
+   elm_object_content_set(pop, bx);
+
+   tb = elm_table_add(pop);
+   evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(tb);
+   elm_box_pack_end(bx, tb);
+
+   rec = evas_object_rectangle_add(evas_object_evas_get(pop));
+   evas_object_size_hint_min_set(rec, ELM_SCALE_SIZE(300), 
ELM_SCALE_SIZE(300));
+   elm_table_pack(tb, rec, 0, 0, 1, 1);
+
+   _settings.list = list = elm_list_add(pop);
+   evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_list_select_mode_set(list, ELM_OBJECT_SELECT_MODE_ALWAYS);
+   elm_list_multi_select_set(list, 0);
+   evas_object_show(list);
+   elm_table_pack(tb, list, 0, 0, 1, 1);
+
+   hbx = elm_box_add(bx);
+   elm_box_horizontal_set(hbx, 1);
+   elm_box_pack_end(bx, hbx);
+   evas_object_show(hbx);
+
+   lb = elm_label_add(hbx);
+   elm_object_text_set(lb, _("Font size:"));
+   elm_box_pack_end(hbx, lb);
+   evas_object_show(lb);
+
+   _settings.fsize = sp = elm_spinner_add(hbx);
+   elm_spinner_label_format_set(sp, _("%.0f px"));
+   elm_spinner_step_set(sp, 1);
+   elm_spinner_wrap_set(sp, 0);
+   elm_spinner_min_max_set(sp, 10, 72);
+   elm_spinner_value_set(sp, inst->font.size);
+   evas_object_size_hint_align_set(sp, 0.0, 0.5);
+   elm_box_pack_end(hbx, sp);
+   evas_object_show(sp);
+   evas_object_smart_callback_add(sp, "delay,changed", 
_cb_spinner_delay_changed, inst);
+
+   Eina_List *fonts, *l;
+   const char *font;
+
+   fonts = _font_list_get(evas_object_evas_get(list));
+   EINA_LIST_FOREACH(fonts, l, font)
+     {
+        Elm_Object_Item *it;
+        it = elm_list_item_append(list, font, NULL, NULL, NULL, NULL);
+        if (inst->font.name && !strcmp(inst->font.name, font))
+          _settings.cur_font = it;
+     }
+   elm_list_go(list);
+
+   if (_settings.cur_font)
+     {
+        elm_list_item_bring_in(_settings.cur_font);
+        elm_list_item_selected_set(_settings.cur_font, 1);
+     }
+
+   EINA_LIST_FREE(fonts, font)
+     eina_stringshare_del(font);
+
+   evas_object_smart_callback_add(list, "selected", _cb_font_selected, inst);
+
+   _settings.dfont_check = ck = elm_check_add(pop);
+   elm_object_text_set(ck, _("Default Font?"));
+   elm_check_state_set(ck, !inst->font.name);
+   evas_object_show(ck);
+   elm_box_pack_end(hbx, ck);
+   evas_object_smart_callback_add(ck, "changed", _cb_check_changed, inst);
+   _cb_check_changed(inst, ck, NULL);
+
+   btn = elm_button_add(pop);
+   evas_object_size_hint_weight_set(btn, 1.0, 0);
+   elm_object_text_set(btn, _("Close"));
+   evas_object_show(btn);
+   elm_box_pack_end(bx, btn);
+   evas_object_smart_callback_add(btn, "clicked", _cb_btn_clicked, inst);
+
+   evas_object_show(pop);
+
+   return pop;
+}
diff --git a/src/bin/ui/ui.h b/src/bin/ui/ui.h
index db041b4..d35801b 100644
--- a/src/bin/ui/ui.h
+++ b/src/bin/ui/ui.h
@@ -7,8 +7,7 @@ void ui_file_open_save_dialog_open(Evas_Object *parent, 
Eina_Bool save, Evas_Sma
 
 Evas_Object *ui_find_dialog_open(Evas_Object *parent, Ecrire_Entry *ent);
 Evas_Object *ui_goto_dialog_open(Evas_Object *parent, Ecrire_Entry *ent);
-
-Evas_Object *ui_font_dialog_open(Evas_Object *parent, Ecrire_Entry *ent, const 
char *pfont, int size);
+Evas_Object *ui_settings_open(Evas_Object *parent, Ecrire_Entry *ent);
 
 void ui_alert_need_saving(Evas_Object *entry, void (*done)(void *data), void 
*data);
 

-- 


Reply via email to