SF.net SVN: geany:[2835] branches/custom-tab-width
ntrel at users.sourceforge.net
ntrel at xxxxx
Tue Jul 29 17:49:30 UTC 2008
Revision: 2835
http://geany.svn.sourceforge.net/geany/?rev=2835&view=rev
Author: ntrel
Date: 2008-07-29 17:49:29 +0000 (Tue, 29 Jul 2008)
Log Message:
-----------
Update to use foreach-style functions for SettingEntry arrays, like
the PrefEntry code in prefs.c.
Update for new indentation setting names.
Modified Paths:
--------------
branches/custom-tab-width/ChangeLog
branches/custom-tab-width/src/keyfile.c
Modified: branches/custom-tab-width/ChangeLog
===================================================================
--- branches/custom-tab-width/ChangeLog 2008-07-29 17:46:21 UTC (rev 2834)
+++ branches/custom-tab-width/ChangeLog 2008-07-29 17:49:29 UTC (rev 2835)
@@ -5,6 +5,10 @@
* src/prefs.c:
Replace init_prefs(), update_prefs() with common prefs_action()
function.
+ * src/keyfile.c:
+ Update to use foreach-style functions for SettingEntry arrays, like
+ the PrefEntry code in prefs.c.
+ Update for new indentation setting names.
2008-07-28 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
Modified: branches/custom-tab-width/src/keyfile.c
===================================================================
--- branches/custom-tab-width/src/keyfile.c 2008-07-29 17:46:21 UTC (rev 2834)
+++ branches/custom-tab-width/src/keyfile.c 2008-07-29 17:49:29 UTC (rev 2835)
@@ -89,27 +89,107 @@
static gint vpan_position;
-/* Used in e.g. save_bool_prefs(). */
+typedef enum SettingCallbackAction
+{
+ SETTING_READ,
+ SETTING_WRITE
+}
+SettingCallbackAction;
+
+
typedef struct SettingEntry
{
+ gpointer setting;
const gchar *group;
const gchar *key_name;
- gpointer setting;
gpointer default_value;
}
SettingEntry;
-static SettingEntry bool_prefs[] =
+
+static void bool_settings_foreach(GKeyFile *config, SettingCallbackAction action)
{
- {PACKAGE, "cmdline_new_files", &file_prefs.cmdline_new_files, GINT_TO_POINTER(TRUE)},
+ guint i;
+ SettingEntry items[] =
+ {
+ {&file_prefs.cmdline_new_files, PACKAGE, "cmdline_new_files", (gpointer)TRUE},
- {PACKAGE, "pref_main_suppress_search_dialogs", &search_prefs.suppress_dialogs, GINT_TO_POINTER(FALSE)},
- {PACKAGE, "pref_main_search_use_current_word", &search_prefs.use_current_word, GINT_TO_POINTER(TRUE)},
- {"search", "pref_search_current_file_dir", &search_prefs.use_current_file_dir, GINT_TO_POINTER(TRUE)},
- {NULL, NULL, NULL, NULL} /* must be terminated */
+ {&search_prefs.suppress_dialogs, PACKAGE, "pref_main_suppress_search_dialogs", (gpointer)FALSE},
+ {&search_prefs.use_current_word, PACKAGE, "pref_main_search_use_current_word", (gpointer)TRUE},
+ {&search_prefs.use_current_file_dir, "search", "pref_search_current_file_dir", (gpointer)TRUE},
+
+ {&editor_prefs.indentation->detect_type, PACKAGE, "check_detect_indent", (gpointer)FALSE},
+ };
+
+ for (i = 0; i < G_N_ELEMENTS(items); i++)
+ {
+ SettingEntry *se = &items[i];
+ gboolean *setting = se->setting;
+
+ switch (action)
+ {
+ case SETTING_READ:
+ *setting = utils_get_setting_boolean(config, se->group, se->key_name,
+ GPOINTER_TO_INT(se->default_value));
+ break;
+ case SETTING_WRITE:
+ g_key_file_set_boolean(config, se->group, se->key_name, *setting);
+ break;
+ }
+ }
+}
+
+
+static void int_settings_foreach(GKeyFile *config, SettingCallbackAction action)
+{
+ guint i;
+ SettingEntry items[] =
+ {
+ {&editor_prefs.indentation->width, PACKAGE, "pref_editor_tab_width", (gpointer)4},
+ {&editor_prefs.indentation->tab_width, PACKAGE, "indent_tab_width", (gpointer)8},
+ {&editor_prefs.indentation->auto_indent_mode, PACKAGE, "indent_mode",
+ (gpointer)GEANY_AUTOINDENT_CURRENTCHARS},
+ {&editor_prefs.indentation->type, PACKAGE, "indent_type", (gpointer)GEANY_INDENT_TYPE_TABS},
+ };
+
+ for (i = 0; i < G_N_ELEMENTS(items); i++)
+ {
+ SettingEntry *se = &items[i];
+ gboolean *setting = se->setting;
+
+ switch (action)
+ {
+ case SETTING_READ:
+ *setting = utils_get_setting_integer(config, se->group, se->key_name,
+ GPOINTER_TO_INT(se->default_value));
+ break;
+ case SETTING_WRITE:
+ g_key_file_set_integer(config, se->group, se->key_name, *setting);
+ break;
+ }
+ }
+}
+
+
+typedef void (*SettingItemsCallback)(GKeyFile *config, SettingCallbackAction action);
+
+/* List of functions which hold the SettingEntry arrays. These allow access to
+ * runtime setting fields like EditorPrefs::indentation->width. */
+SettingItemsCallback setting_item_callbacks[] = {
+ bool_settings_foreach,
+ int_settings_foreach
};
+static void settings_action(GKeyFile *config, SettingCallbackAction action)
+{
+ guint i;
+
+ for (i = 0; i < G_N_ELEMENTS(setting_item_callbacks); i++)
+ setting_item_callbacks[i](config, action);
+}
+
+
static void save_recent_files(GKeyFile *config)
{
gchar **recent_files = g_new0(gchar*, file_prefs.mru_length + 1);
@@ -205,20 +285,9 @@
}
-static void save_bool_prefs(GKeyFile *config)
-{
- SettingEntry *pe;
-
- for (pe = bool_prefs; pe->group != NULL; pe++)
- {
- g_key_file_set_boolean(config, pe->group, pe->key_name, *(gboolean*)pe->setting);
- }
-}
-
-
static void save_dialog_prefs(GKeyFile *config)
{
- save_bool_prefs(config);
+ settings_action(config, SETTING_WRITE);
/* Some of the key names are not consistent, but this is for backwards compatibility */
@@ -262,15 +331,11 @@
g_key_file_set_integer(config, PACKAGE, "symbolcompletion_min_chars", editor_prefs.symbolcompletion_min_chars);
g_key_file_set_boolean(config, PACKAGE, "use_folding", editor_prefs.folding);
g_key_file_set_boolean(config, PACKAGE, "unfold_all_children", editor_prefs.unfold_all_children);
- g_key_file_set_integer(config, PACKAGE, "indent_mode", editor_prefs.indent_mode);
- g_key_file_set_integer(config, PACKAGE, "check_detect_indent", editor_prefs.detect_tab_mode);
g_key_file_set_boolean(config, PACKAGE, "use_indicators", editor_prefs.use_indicators);
g_key_file_set_boolean(config, PACKAGE, "line_wrapping", editor_prefs.line_wrapping);
g_key_file_set_boolean(config, PACKAGE, "auto_close_xml_tags", editor_prefs.auto_close_xml_tags);
g_key_file_set_boolean(config, PACKAGE, "complete_snippets", editor_prefs.complete_snippets);
g_key_file_set_boolean(config, PACKAGE, "auto_complete_symbols", editor_prefs.auto_complete_symbols);
- g_key_file_set_integer(config, PACKAGE, "pref_editor_tab_width", editor_prefs.tab_width);
- g_key_file_set_boolean(config, PACKAGE, "pref_editor_use_tabs", editor_prefs.use_tabs);
g_key_file_set_boolean(config, PACKAGE, "pref_editor_disable_dnd", editor_prefs.disable_dnd);
g_key_file_set_boolean(config, PACKAGE, "pref_editor_smart_home_key", editor_prefs.smart_home_key);
g_key_file_set_boolean(config, PACKAGE, "pref_editor_newline_strip", editor_prefs.newline_strip);
@@ -422,7 +487,7 @@
static void save_hidden_prefs(GKeyFile *config)
{
write_hidden_pref_boolean(config, PACKAGE, "show_editor_scrollbars", editor_prefs.show_scrollbars);
- write_hidden_pref_boolean(config, PACKAGE, "use_tab_to_indent", editor_prefs.use_tab_to_indent);
+ write_hidden_pref_boolean(config, PACKAGE, "use_tab_to_indent", editor_prefs.indentation->use_tab_to_indent);
write_hidden_pref_boolean(config, PACKAGE, "brace_match_ltgt", editor_prefs.brace_match_ltgt);
write_hidden_pref_boolean(config, PACKAGE, "use_gtk_word_boundaries", editor_prefs.use_gtk_word_boundaries);
write_hidden_pref_boolean(config, PACKAGE, "complete_snippets_whilst_editing", editor_prefs.complete_snippets_whilst_editing);
@@ -511,18 +576,6 @@
}
-static void load_bool_prefs(GKeyFile *config)
-{
- SettingEntry *pe;
-
- for (pe = bool_prefs; pe->group != NULL; pe++)
- {
- *(gboolean*)pe->setting = utils_get_setting_boolean(config, pe->group, pe->key_name,
- GPOINTER_TO_INT(pe->default_value));
- }
-}
-
-
#define GEANY_GET_SETTING(propertyname, value, default_value) \
if (g_object_class_find_property( \
G_OBJECT_GET_CLASS(G_OBJECT(gtk_settings_get_default())), propertyname)) \
@@ -536,7 +589,7 @@
gchar *tmp_string, *tmp_string2;
const gchar *default_charset = NULL;
- load_bool_prefs(config);
+ settings_action(config, SETTING_READ);
/* general */
prefs.confirm_exit = utils_get_setting_boolean(config, PACKAGE, "pref_main_confirm_exit", FALSE);
@@ -574,9 +627,7 @@
editor_prefs.symbolcompletion_min_chars = utils_get_setting_integer(config, PACKAGE, "symbolcompletion_min_chars", GEANY_MIN_SYMBOLLIST_CHARS);
editor_prefs.symbolcompletion_max_height = utils_get_setting_integer(config, PACKAGE, "symbolcompletion_max_height", GEANY_MAX_SYMBOLLIST_HEIGHT);
editor_prefs.line_wrapping = utils_get_setting_boolean(config, PACKAGE, "line_wrapping", FALSE); /* default is off for better performance */
- editor_prefs.indent_mode = utils_get_setting_integer(config, PACKAGE, "indent_mode", INDENT_CURRENTCHARS);
- editor_prefs.detect_tab_mode = utils_get_setting_integer(config, PACKAGE, "check_detect_indent", FALSE);
- editor_prefs.use_tab_to_indent = utils_get_setting_boolean(config, PACKAGE, "use_tab_to_indent", FALSE);
+ editor_prefs.indentation->use_tab_to_indent = utils_get_setting_boolean(config, PACKAGE, "use_tab_to_indent", FALSE);
editor_prefs.use_indicators = utils_get_setting_boolean(config, PACKAGE, "use_indicators", TRUE);
editor_prefs.show_indent_guide = utils_get_setting_boolean(config, PACKAGE, "show_indent_guide", FALSE);
editor_prefs.show_white_space = utils_get_setting_boolean(config, PACKAGE, "show_white_space", FALSE);
@@ -590,8 +641,6 @@
editor_prefs.show_markers_margin = utils_get_setting_boolean(config, PACKAGE, "show_markers_margin", TRUE);
editor_prefs.show_linenumber_margin = utils_get_setting_boolean(config, PACKAGE, "show_linenumber_margin", TRUE);
editor_prefs.brace_match_ltgt = utils_get_setting_boolean(config, PACKAGE, "brace_match_ltgt", FALSE);
- editor_prefs.tab_width = utils_get_setting_integer(config, PACKAGE, "pref_editor_tab_width", 4);
- editor_prefs.use_tabs = utils_get_setting_boolean(config, PACKAGE, "pref_editor_use_tabs", TRUE);
editor_prefs.disable_dnd = utils_get_setting_boolean(config, PACKAGE, "pref_editor_disable_dnd", FALSE);
editor_prefs.smart_home_key = utils_get_setting_boolean(config, PACKAGE, "pref_editor_smart_home_key", TRUE);
editor_prefs.newline_strip = utils_get_setting_boolean(config, PACKAGE, "pref_editor_newline_strip", FALSE);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list