[gnome-builder] file-settings: add spaces-style for basic space styling



commit dd5f076cfe78b02df4d04ef3dbb147d7c381c63a
Author: Christian Hergert <chergert redhat com>
Date:   Mon Jan 29 16:34:31 2018 -0800

    file-settings: add spaces-style for basic space styling
    
    Nothing too fancy, but enough so that we can tweak some things from various
    indenters/completion providers.
    
    Related #152

 .../org.gnome.builder.editor.language.gschema.xml  | 16 +++++++++++
 src/libide/files/ide-file-settings.defs            | 12 +++++++++
 src/libide/files/ide-file-settings.h               |  3 ++-
 src/libide/gsettings/ide-gsettings-file-settings.c | 31 ++++++++++++++++++++++
 4 files changed, 61 insertions(+), 1 deletion(-)
---
diff --git a/data/gsettings/org.gnome.builder.editor.language.gschema.xml 
b/data/gsettings/org.gnome.builder.editor.language.gschema.xml
index df03680ea..4008b576c 100644
--- a/data/gsettings/org.gnome.builder.editor.language.gschema.xml
+++ b/data/gsettings/org.gnome.builder.editor.language.gschema.xml
@@ -1,4 +1,15 @@
 <schemalist>
+
+  <flags id="org.gnome.builder.SpacesStyle">
+    <value nick="before-left-paren" value="1"/>
+    <value nick="before-left-bracket" value="2"/>
+    <value nick="before-left-brace" value="4"/>
+    <value nick="before-left-angle" value="8"/>
+    <value nick="before-colon" value="16"/>
+    <value nick="before-comma" value="32"/>
+    <value nick="before-semicolon" value="64"/>
+  </flags>
+
   <schema id="org.gnome.builder.editor.language" gettext-domain="gnome-builder">
     <key name="auto-indent" type="b">
       <default>true</default>
@@ -26,6 +37,11 @@
       <range min="32" max="500"/>
       <default>80</default>
     </key>
+    <key name="spaces-style" flags="org.gnome.builder.SpacesStyle">
+      <default>[]</default>
+      <summary>Spaces Style</summary>
+      <description>How to apply spaces when reformating text.</description>
+    </key>
     <key name="tab-width" type="i">
       <range min="1" max="120"/>
       <default>8</default>
diff --git a/src/libide/files/ide-file-settings.defs b/src/libide/files/ide-file-settings.defs
index d5ca21fcf..548cc39d0 100644
--- a/src/libide/files/ide-file-settings.defs
+++ b/src/libide/files/ide-file-settings.defs
@@ -103,6 +103,18 @@ IDE_FILE_SETTINGS_PROPERTY (SHOW_RIGHT_MARGIN, show_right_margin,
                             priv->show_right_margin = !!show_right_margin;,
                             boolean)
 
+IDE_FILE_SETTINGS_PROPERTY (SPACES_STYLE, spaces_style,
+                            IdeSpacesStyle, IdeSpacesStyle,
+                            "spaces-style",
+                            g_param_spec_flags ("spaces-style",
+                                                "Spaces Style",
+                                                "How to add spaces when reformatting certain text. Mostly 
used by completions.",
+                                                IDE_TYPE_SPACES_STYLE,
+                                                IDE_SPACES_STYLE_IGNORE,
+                                                (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)),
+                            priv->spaces_style = spaces_style;,
+                            flags)
+
 IDE_FILE_SETTINGS_PROPERTY (TAB_WIDTH, tab_width,
                             guint, guint,
                             "tab-width",
diff --git a/src/libide/files/ide-file-settings.h b/src/libide/files/ide-file-settings.h
index 0bfc4096b..bd9268ee4 100644
--- a/src/libide/files/ide-file-settings.h
+++ b/src/libide/files/ide-file-settings.h
@@ -20,11 +20,12 @@
 
 #include <gtksourceview/gtksource.h>
 
+#include "ide-object.h"
 #include "ide-version-macros.h"
 
 #include "files/ide-file.h"
 #include "files/ide-indent-style.h"
-#include "ide-object.h"
+#include "files/ide-spaces-style.h"
 
 G_BEGIN_DECLS
 
diff --git a/src/libide/gsettings/ide-gsettings-file-settings.c 
b/src/libide/gsettings/ide-gsettings-file-settings.c
index c21a115b9..17387d9ee 100644
--- a/src/libide/gsettings/ide-gsettings-file-settings.c
+++ b/src/libide/gsettings/ide-gsettings-file-settings.c
@@ -23,6 +23,7 @@
 
 #include "ide-context.h"
 #include "ide-debug.h"
+#include "ide-enums.h"
 
 #include "files/ide-file.h"
 #include "gsettings/ide-gsettings-file-settings.h"
@@ -58,6 +59,35 @@ indent_style_get (GValue   *value,
   return TRUE;
 }
 
+static gboolean
+spaces_style_get (GValue   *value,
+                  GVariant *variant,
+                  gpointer  user_data)
+{
+  g_autofree const gchar **strv = g_variant_get_strv (variant, NULL);
+  GFlagsClass *klass = g_type_class_ref (IDE_TYPE_SPACES_STYLE);
+  guint flags = 0;
+
+  for (guint i = 0; strv[i] != NULL; i++)
+    {
+      GFlagsValue *val = g_flags_get_value_by_nick (klass, strv[i]);
+
+      if (val == NULL)
+        {
+          g_warning ("No such nick %s", strv[i]);
+          continue;
+        }
+
+      flags |= val->value;
+    }
+
+  g_type_class_unref (klass);
+
+  g_value_set_flags (value, flags);
+
+  return TRUE;
+}
+
 static SettingsMapping language_mappings [] = {
   { "indent-width",                  "indent-width",             NULL             },
   { "insert-spaces-instead-of-tabs", "indent-style",             indent_style_get },
@@ -68,6 +98,7 @@ static SettingsMapping language_mappings [] = {
   { "insert-matching-brace",         "insert-matching-brace",    NULL             },
   { "insert-trailing-newline",       "insert-trailing-newline",  NULL             },
   { "overwrite-braces",              "overwrite-braces",         NULL             },
+  { "spaces-style",                  "spaces-style",             spaces_style_get },
 };
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]