[dconf-editor] Move SettingObject in a new file.
- From: Arnaud Bonatti <arnaudb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dconf-editor] Move SettingObject in a new file.
- Date: Wed, 17 Jan 2018 04:41:46 +0000 (UTC)
commit 3d8b5ce377bba7f67d973394f22e9b9e68de2f35
Author: Arnaud Bonatti <arnaud bonatti gmail com>
Date: Wed Jan 17 05:41:23 2018 +0100
Move SettingObject in a new file.
editor/dconf-model.vala | 370 -------------------------------------------
editor/dconf-window.vala | 9 +
editor/meson.build | 3 +-
editor/setting-object.vala | 372 ++++++++++++++++++++++++++++++++++++++++++++
po/POTFILES.in | 1 +
po/POTFILES.skip | 1 +
6 files changed, 385 insertions(+), 371 deletions(-)
---
diff --git a/editor/dconf-model.vala b/editor/dconf-model.vala
index aa7f48d..eb08b59 100644
--- a/editor/dconf-model.vala
+++ b/editor/dconf-model.vala
@@ -15,376 +15,6 @@
along with Dconf Editor. If not, see <http://www.gnu.org/licenses/>.
*/
-public abstract class SettingObject : Object
-{
- public string name { get; construct; }
- public string full_name { get; construct; }
-
- public string casefolded_name { get; private construct; }
- public string parent_path { get; private construct; }
- construct
- {
- casefolded_name = name.casefold ();
-
- if (full_name.length < 2)
- parent_path = "/";
- else
- {
- string tmp_string = full_name.slice (0, full_name.last_index_of_char ('/'));
-
- if (full_name.has_suffix ("/"))
- parent_path = full_name.slice (0, tmp_string.last_index_of_char ('/') + 1);
- else
- parent_path = tmp_string + "/";
- }
- }
-}
-
-public class Directory : SettingObject
-{
- public bool warning_multiple_schemas = false;
-
- public Directory (string full_name, string name)
- {
- Object (full_name: full_name, name: name);
- }
-}
-
-public abstract class Key : SettingObject
-{
- public abstract string descriptor { owned get; }
-
- public string type_string { get; protected set; default = "*"; }
- public Variant properties { owned get; protected set; }
-
- public signal void value_changed ();
-
- protected static string key_to_description (string type)
- {
- switch (type)
- {
- case "b":
- return _("Boolean");
- case "s":
- return _("String");
- case "as":
- return _("String array");
- case "<enum>":
- return _("Enumeration");
- case "<flags>":
- return _("Flags");
- case "d":
- return _("Double");
- case "h":
- /* Translators: this handle type is an index; you may maintain the word "handle" */
- return _("D-Bus handle type");
- case "o":
- return _("D-Bus object path");
- case "ao":
- return _("D-Bus object path array");
- case "g":
- return _("D-Bus signature");
- case "y": // TODO byte, bytestring, bytestring array
- case "n":
- case "q":
- case "i":
- case "u":
- case "x":
- case "t":
- return _("Integer");
- default:
- return type;
- }
- }
-
- protected static void get_min_and_max_string (out string min, out string max, string type_string)
- {
- switch (type_string)
- {
- // TODO %I'xx everywhere! but would need support from the spinbutton…
- case "y":
- min = "%hhu".printf (uint8.MIN); // TODO format as in
- max = "%hhu".printf (uint8.MAX); // cool_text_value_from_variant()
- return;
- case "n":
- string? nullable_min = "%'hi".printf (int16.MIN).locale_to_utf8 (-1, null, null, null);
- string? nullable_max = "%'hi".printf (int16.MAX).locale_to_utf8 (-1, null, null, null);
- min = (!) (nullable_min ?? "%hi".printf (int16.MIN));
- max = (!) (nullable_max ?? "%hi".printf (int16.MAX));
- return;
- case "q":
- string? nullable_min = "%'hu".printf (uint16.MIN).locale_to_utf8 (-1, null, null, null);
- string? nullable_max = "%'hu".printf (uint16.MAX).locale_to_utf8 (-1, null, null, null);
- min = (!) (nullable_min ?? "%hu".printf (uint16.MIN));
- max = (!) (nullable_max ?? "%hu".printf (uint16.MAX));
- return;
- case "i":
- string? nullable_min = "%'i".printf (int32.MIN).locale_to_utf8 (-1, null, null, null);
- string? nullable_max = "%'i".printf (int32.MAX).locale_to_utf8 (-1, null, null, null);
- min = (!) (nullable_min ?? "%i".printf (int32.MIN));
- max = (!) (nullable_max ?? "%i".printf (int32.MAX));
- return; // TODO why is 'li' failing to display '-'?
- case "u":
- string? nullable_min = "%'u".printf (uint32.MIN).locale_to_utf8 (-1, null, null, null);
- string? nullable_max = "%'u".printf (uint32.MAX).locale_to_utf8 (-1, null, null, null);
- min = (!) (nullable_min ?? "%u".printf (uint32.MIN));
- max = (!) (nullable_max ?? "%u".printf (uint32.MAX));
- return; // TODO is 'lu' failing also?
- case "x":
- string? nullable_min = "%'lli".printf (int64.MIN).locale_to_utf8 (-1, null, null, null);
- string? nullable_max = "%'lli".printf (int64.MAX).locale_to_utf8 (-1, null, null, null);
- min = (!) (nullable_min ?? "%lli".printf (int64.MIN));
- max = (!) (nullable_max ?? "%lli".printf (int64.MAX));
- return;
- case "t":
- string? nullable_min = "%'llu".printf (uint64.MIN).locale_to_utf8 (-1, null, null, null);
- string? nullable_max = "%'llu".printf (uint64.MAX).locale_to_utf8 (-1, null, null, null);
- min = (!) (nullable_min ?? "%llu".printf (uint64.MIN));
- max = (!) (nullable_max ?? "%llu".printf (uint64.MAX));
- return;
- case "d":
- string? nullable_min = "%'g".printf (double.MIN).locale_to_utf8 (-1, null, null, null);
- string? nullable_max = "%'g".printf (double.MAX).locale_to_utf8 (-1, null, null, null);
- min = (!) (nullable_min ?? "%g".printf (double.MIN));
- max = (!) (nullable_max ?? "%g".printf (double.MAX));
- return;
- case "h":
- string? nullable_min = "%'i".printf (int32.MIN).locale_to_utf8 (-1, null, null, null);
- string? nullable_max = "%'i".printf (int32.MAX).locale_to_utf8 (-1, null, null, null);
- min = (!) (nullable_min ?? "%i".printf (int32.MIN));
- max = (!) (nullable_max ?? "%i".printf (int32.MAX));
- return;
- default: assert_not_reached ();
- }
- }
-
- public static string cool_text_value_from_variant (Variant variant, string type) // called from
subclasses and from KeyListBoxRow
- {
- switch (type)
- {
- case "b":
- return cool_boolean_text_value (variant.get_boolean (), false);
- // TODO %I'xx everywhere! but would need support from the spinbutton…
- case "y":
- return "%hhu (%s)".printf (variant.get_byte (), variant.print (false)); // TODO i18n
problem here
- case "n":
- string? nullable_text = "%'hi".printf (variant.get_int16 ()).locale_to_utf8 (-1, null, null,
null);
- return (!) (nullable_text ?? "%hi".printf (variant.get_int16 ()));
- case "q":
- string? nullable_text = "%'hu".printf (variant.get_uint16 ()).locale_to_utf8 (-1, null,
null, null);
- return (!) (nullable_text ?? "%hu".printf (variant.get_uint16 ()));
- case "i":
- string? nullable_text = "%'i".printf (variant.get_int32 ()).locale_to_utf8 (-1, null, null,
null);
- return (!) (nullable_text ?? "%i".printf (variant.get_int32 ())); // TODO why is
'li' failing to display '-'?
- case "u":
- string? nullable_text = "%'u".printf (variant.get_uint32 ()).locale_to_utf8 (-1, null, null,
null);
- return (!) (nullable_text ?? "%u".printf (variant.get_uint32 ()));
- case "x":
- string? nullable_text = "%'lli".printf (variant.get_int64 ()).locale_to_utf8 (-1, null,
null, null);
- return (!) (nullable_text ?? "%lli".printf (variant.get_int64 ()));
- case "t":
- string? nullable_text = "%'llu".printf (variant.get_uint64 ()).locale_to_utf8 (-1, null,
null, null);
- return (!) (nullable_text ?? "%llu".printf (variant.get_uint64 ()));
- case "d":
- string? nullable_text = "%'.12g".printf (variant.get_double ()).locale_to_utf8 (-1, null,
null, null);
- return (!) (nullable_text ?? "%g".printf (variant.get_double ()));
- case "h":
- string? nullable_text = "%'i".printf (variant.get_handle ()).locale_to_utf8 (-1, null, null,
null);
- return (!) (nullable_text ?? "%i".printf (variant.get_int32 ()));
- default: break;
- }
- if (type.has_prefix ("m"))
- {
- Variant? maybe_variant = variant.get_maybe ();
- if (maybe_variant == null)
- return cool_boolean_text_value (null, false);
- if (type == "mb")
- return cool_boolean_text_value (((!) maybe_variant).get_boolean (), false);
- }
- return variant.print (false);
- }
-
- public static string cool_boolean_text_value (bool? nullable_boolean, bool capitalized = true)
- {
- if (capitalized)
- {
- if (nullable_boolean == true)
- return _("True");
- if (nullable_boolean == false)
- return _("False");
- return _("Nothing");
- }
- else
- {
- if (nullable_boolean == true)
- return _("true");
- if (nullable_boolean == false)
- return _("false");
- /* Translators: "nothing" here is a keyword that should appear for consistence; please translate
as "yourtranslation (nothing)" */
- return _("nothing");
- }
- }
-
- protected static bool show_min_and_max (string type)
- {
- return (type == "d" || type == "y" || type == "n" || type == "q" || type == "i" || type == "u" ||
type == "x" || type == "t");
- }
-
- public static uint64 get_variant_as_uint64 (Variant variant)
- {
- switch (variant.classify ())
- {
- case Variant.Class.BYTE: return (int64) variant.get_byte ();
- case Variant.Class.UINT16: return (int64) variant.get_uint16 ();
- case Variant.Class.UINT32: return (int64) variant.get_uint32 ();
- case Variant.Class.UINT64: return variant.get_uint64 ();
- default: assert_not_reached ();
- }
- }
-
- public static int64 get_variant_as_int64 (Variant variant)
- {
- switch (variant.classify ())
- {
- case Variant.Class.INT16: return (int64) variant.get_int16 ();
- case Variant.Class.INT32: return (int64) variant.get_int32 ();
- case Variant.Class.INT64: return variant.get_int64 ();
- case Variant.Class.HANDLE: return (int64) variant.get_handle ();
- default: assert_not_reached ();
- }
- }
-}
-
-public class DConfKey : Key
-{
- public override string descriptor { owned get { return full_name; } }
-
- public DConfKey (DConf.Client client, string parent_full_name, string name, string type_string)
- {
- Object (full_name: parent_full_name + name, name: name, type_string: type_string);
-
- VariantBuilder builder = new VariantBuilder (new VariantType ("(ba{ss})")); // TODO add
VariantBuilder add_parsed () function in vala/glib-2.0.vapi line ~5490
- builder.add ("b", false);
- builder.open (new VariantType ("a{ss}"));
- builder.add ("{ss}", "key-name", name);
- builder.add ("{ss}", "defined-by", _("DConf backend"));
- builder.add ("{ss}", "parent-path", parent_full_name);
- builder.add ("{ss}", "type-code", type_string);
- builder.add ("{ss}", "type-name", key_to_description (type_string));
- if (show_min_and_max (type_string))
- {
- string min, max;
- get_min_and_max_string (out min, out max, type_string);
-
- builder.add ("{ss}", "minimum", min);
- builder.add ("{ss}", "maximum", max);
- }
- builder.close ();
- properties = builder.end ();
-
- client.changed.connect ((client, prefix, changes, tag) => {
- foreach (string item in changes)
- if (prefix + item == full_name)
- {
- value_changed ();
- return;
- }
- });
- }
-}
-
-public class GSettingsKey : Key
-{
- public string schema_id { private get; construct; }
- public string? schema_path { private get; construct; }
- public string summary { get; construct; }
- public string description { private get; construct; }
- public Variant default_value { get; construct; }
- public string range_type { get; construct; }
- public Variant range_content { get; construct; }
-
- public override string descriptor {
- owned get {
- if (schema_path == null)
- return @"$schema_id:$parent_path $name";
- return @"$schema_id $name";
- }
- }
-
- public GLib.Settings settings { get; construct; }
-
- public GSettingsKey (string parent_full_name, string name, GLib.Settings settings, string schema_id,
string? schema_path, string summary, string description, string type_string, Variant default_value, string
range_type, Variant range_content)
- {
- string? summary_nullable = summary.locale_to_utf8 (-1, null, null, null);
- summary = summary_nullable ?? summary;
-
- string? description_nullable = description.locale_to_utf8 (-1, null, null, null);
- description = description_nullable ?? description;
-
- Object (full_name: parent_full_name + name,
- name: name,
- settings : settings,
- // schema infos
- schema_id: schema_id,
- schema_path: schema_path,
- summary: summary,
- description: description,
- default_value: default_value, // TODO devel default/admin default
- range_type: range_type,
- range_content: range_content);
-
- settings.changed [name].connect (() => value_changed ());
-
- this.type_string = type_string;
-
- string defined_by = schema_path == null ? _("Relocatable schema") : _("Schema with path");
-
- VariantBuilder builder = new VariantBuilder (new VariantType ("(ba{ss})"));
- builder.add ("b", true);
- builder.open (new VariantType ("a{ss}"));
- builder.add ("{ss}", "key-name", name);
- builder.add ("{ss}", "defined-by", defined_by);
- builder.add ("{ss}", "parent-path", parent_full_name);
- builder.add ("{ss}", "type-code", type_string);
- builder.add ("{ss}", "type-name", key_to_description (type_string));
- builder.add ("{ss}", "schema-id", schema_id);
- builder.add ("{ss}", "summary", summary);
- builder.add ("{ss}", "description", description);
- builder.add ("{ss}", "default-value", cool_text_value_from_variant (default_value, type_string));
- if (show_min_and_max (type_string))
- {
- string min, max;
- if (range_type == "range") // TODO test more; and what happen if only min/max is in range?
- {
- min = cool_text_value_from_variant (range_content.get_child_value (0), type_string);
- max = cool_text_value_from_variant (range_content.get_child_value (1), type_string);
- }
- else
- get_min_and_max_string (out min, out max, type_string);
-
- builder.add ("{ss}", "minimum", min);
- builder.add ("{ss}", "maximum", max);
- }
- builder.close ();
- properties = builder.end ();
- }
-
-/* public bool search_for (string text)
- {
- return summary.index_of (text) >= 0
- || description.index_of (text) >= 0; // TODO use the "in" keyword
- } */
-}
-
-[Flags]
-enum RelocatableSchemasEnabledMappings
-{
- USER,
- BUILT_IN,
- INTERNAL,
- STARTUP
-}
-
public class SettingsModel : Object
{
private SettingsSchemaSource? settings_schema_source = null;
diff --git a/editor/dconf-window.vala b/editor/dconf-window.vala
index 72b0553..7d1a35c 100644
--- a/editor/dconf-window.vala
+++ b/editor/dconf-window.vala
@@ -17,6 +17,15 @@
using Gtk;
+[Flags]
+enum RelocatableSchemasEnabledMappings
+{
+ USER,
+ BUILT_IN,
+ INTERNAL,
+ STARTUP
+}
+
[GtkTemplate (ui = "/ca/desrt/dconf-editor/ui/dconf-editor.ui")]
class DConfWindow : ApplicationWindow
{
diff --git a/editor/meson.build b/editor/meson.build
index 7f08b96..0437556 100644
--- a/editor/meson.build
+++ b/editor/meson.build
@@ -80,7 +80,8 @@ sources = files(
'registry-info.vala',
'registry-placeholder.vala',
'registry-search.vala',
- 'registry-view.vala'
+ 'registry-view.vala',
+ 'setting-object.vala'
)
resource_data = files(
diff --git a/editor/setting-object.vala b/editor/setting-object.vala
new file mode 100644
index 0000000..621d61a
--- /dev/null
+++ b/editor/setting-object.vala
@@ -0,0 +1,372 @@
+/*
+ This file is part of Dconf Editor
+
+ Dconf Editor is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Dconf Editor is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Dconf Editor. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+public abstract class SettingObject : Object
+{
+ public string name { get; construct; }
+ public string full_name { get; construct; }
+
+ public string casefolded_name { get; private construct; }
+ public string parent_path { get; private construct; }
+ construct
+ {
+ casefolded_name = name.casefold ();
+
+ if (full_name.length < 2)
+ parent_path = "/";
+ else
+ {
+ string tmp_string = full_name.slice (0, full_name.last_index_of_char ('/'));
+
+ if (full_name.has_suffix ("/"))
+ parent_path = full_name.slice (0, tmp_string.last_index_of_char ('/') + 1);
+ else
+ parent_path = tmp_string + "/";
+ }
+ }
+}
+
+public class Directory : SettingObject
+{
+ public bool warning_multiple_schemas = false;
+
+ public Directory (string full_name, string name)
+ {
+ Object (full_name: full_name, name: name);
+ }
+}
+
+public abstract class Key : SettingObject
+{
+ public abstract string descriptor { owned get; }
+
+ public string type_string { get; protected set; default = "*"; }
+ public Variant properties { owned get; protected set; }
+
+ public signal void value_changed ();
+
+ protected static string key_to_description (string type)
+ {
+ switch (type)
+ {
+ case "b":
+ return _("Boolean");
+ case "s":
+ return _("String");
+ case "as":
+ return _("String array");
+ case "<enum>":
+ return _("Enumeration");
+ case "<flags>":
+ return _("Flags");
+ case "d":
+ return _("Double");
+ case "h":
+ /* Translators: this handle type is an index; you may maintain the word "handle" */
+ return _("D-Bus handle type");
+ case "o":
+ return _("D-Bus object path");
+ case "ao":
+ return _("D-Bus object path array");
+ case "g":
+ return _("D-Bus signature");
+ case "y": // TODO byte, bytestring, bytestring array
+ case "n":
+ case "q":
+ case "i":
+ case "u":
+ case "x":
+ case "t":
+ return _("Integer");
+ default:
+ return type;
+ }
+ }
+
+ protected static void get_min_and_max_string (out string min, out string max, string type_string)
+ {
+ switch (type_string)
+ {
+ // TODO %I'xx everywhere! but would need support from the spinbutton…
+ case "y":
+ min = "%hhu".printf (uint8.MIN); // TODO format as in
+ max = "%hhu".printf (uint8.MAX); // cool_text_value_from_variant()
+ return;
+ case "n":
+ string? nullable_min = "%'hi".printf (int16.MIN).locale_to_utf8 (-1, null, null, null);
+ string? nullable_max = "%'hi".printf (int16.MAX).locale_to_utf8 (-1, null, null, null);
+ min = (!) (nullable_min ?? "%hi".printf (int16.MIN));
+ max = (!) (nullable_max ?? "%hi".printf (int16.MAX));
+ return;
+ case "q":
+ string? nullable_min = "%'hu".printf (uint16.MIN).locale_to_utf8 (-1, null, null, null);
+ string? nullable_max = "%'hu".printf (uint16.MAX).locale_to_utf8 (-1, null, null, null);
+ min = (!) (nullable_min ?? "%hu".printf (uint16.MIN));
+ max = (!) (nullable_max ?? "%hu".printf (uint16.MAX));
+ return;
+ case "i":
+ string? nullable_min = "%'i".printf (int32.MIN).locale_to_utf8 (-1, null, null, null);
+ string? nullable_max = "%'i".printf (int32.MAX).locale_to_utf8 (-1, null, null, null);
+ min = (!) (nullable_min ?? "%i".printf (int32.MIN));
+ max = (!) (nullable_max ?? "%i".printf (int32.MAX));
+ return; // TODO why is 'li' failing to display '-'?
+ case "u":
+ string? nullable_min = "%'u".printf (uint32.MIN).locale_to_utf8 (-1, null, null, null);
+ string? nullable_max = "%'u".printf (uint32.MAX).locale_to_utf8 (-1, null, null, null);
+ min = (!) (nullable_min ?? "%u".printf (uint32.MIN));
+ max = (!) (nullable_max ?? "%u".printf (uint32.MAX));
+ return; // TODO is 'lu' failing also?
+ case "x":
+ string? nullable_min = "%'lli".printf (int64.MIN).locale_to_utf8 (-1, null, null, null);
+ string? nullable_max = "%'lli".printf (int64.MAX).locale_to_utf8 (-1, null, null, null);
+ min = (!) (nullable_min ?? "%lli".printf (int64.MIN));
+ max = (!) (nullable_max ?? "%lli".printf (int64.MAX));
+ return;
+ case "t":
+ string? nullable_min = "%'llu".printf (uint64.MIN).locale_to_utf8 (-1, null, null, null);
+ string? nullable_max = "%'llu".printf (uint64.MAX).locale_to_utf8 (-1, null, null, null);
+ min = (!) (nullable_min ?? "%llu".printf (uint64.MIN));
+ max = (!) (nullable_max ?? "%llu".printf (uint64.MAX));
+ return;
+ case "d":
+ string? nullable_min = "%'g".printf (double.MIN).locale_to_utf8 (-1, null, null, null);
+ string? nullable_max = "%'g".printf (double.MAX).locale_to_utf8 (-1, null, null, null);
+ min = (!) (nullable_min ?? "%g".printf (double.MIN));
+ max = (!) (nullable_max ?? "%g".printf (double.MAX));
+ return;
+ case "h":
+ string? nullable_min = "%'i".printf (int32.MIN).locale_to_utf8 (-1, null, null, null);
+ string? nullable_max = "%'i".printf (int32.MAX).locale_to_utf8 (-1, null, null, null);
+ min = (!) (nullable_min ?? "%i".printf (int32.MIN));
+ max = (!) (nullable_max ?? "%i".printf (int32.MAX));
+ return;
+ default: assert_not_reached ();
+ }
+ }
+
+ public static string cool_text_value_from_variant (Variant variant, string type) // called from
subclasses and from KeyListBoxRow
+ {
+ switch (type)
+ {
+ case "b":
+ return cool_boolean_text_value (variant.get_boolean (), false);
+ // TODO %I'xx everywhere! but would need support from the spinbutton…
+ case "y":
+ return "%hhu (%s)".printf (variant.get_byte (), variant.print (false)); // TODO i18n
problem here
+ case "n":
+ string? nullable_text = "%'hi".printf (variant.get_int16 ()).locale_to_utf8 (-1, null, null,
null);
+ return (!) (nullable_text ?? "%hi".printf (variant.get_int16 ()));
+ case "q":
+ string? nullable_text = "%'hu".printf (variant.get_uint16 ()).locale_to_utf8 (-1, null,
null, null);
+ return (!) (nullable_text ?? "%hu".printf (variant.get_uint16 ()));
+ case "i":
+ string? nullable_text = "%'i".printf (variant.get_int32 ()).locale_to_utf8 (-1, null, null,
null);
+ return (!) (nullable_text ?? "%i".printf (variant.get_int32 ())); // TODO why is
'li' failing to display '-'?
+ case "u":
+ string? nullable_text = "%'u".printf (variant.get_uint32 ()).locale_to_utf8 (-1, null, null,
null);
+ return (!) (nullable_text ?? "%u".printf (variant.get_uint32 ()));
+ case "x":
+ string? nullable_text = "%'lli".printf (variant.get_int64 ()).locale_to_utf8 (-1, null,
null, null);
+ return (!) (nullable_text ?? "%lli".printf (variant.get_int64 ()));
+ case "t":
+ string? nullable_text = "%'llu".printf (variant.get_uint64 ()).locale_to_utf8 (-1, null,
null, null);
+ return (!) (nullable_text ?? "%llu".printf (variant.get_uint64 ()));
+ case "d":
+ string? nullable_text = "%'.12g".printf (variant.get_double ()).locale_to_utf8 (-1, null,
null, null);
+ return (!) (nullable_text ?? "%g".printf (variant.get_double ()));
+ case "h":
+ string? nullable_text = "%'i".printf (variant.get_handle ()).locale_to_utf8 (-1, null, null,
null);
+ return (!) (nullable_text ?? "%i".printf (variant.get_int32 ()));
+ default: break;
+ }
+ if (type.has_prefix ("m"))
+ {
+ Variant? maybe_variant = variant.get_maybe ();
+ if (maybe_variant == null)
+ return cool_boolean_text_value (null, false);
+ if (type == "mb")
+ return cool_boolean_text_value (((!) maybe_variant).get_boolean (), false);
+ }
+ return variant.print (false);
+ }
+
+ public static string cool_boolean_text_value (bool? nullable_boolean, bool capitalized = true)
+ {
+ if (capitalized)
+ {
+ if (nullable_boolean == true)
+ return _("True");
+ if (nullable_boolean == false)
+ return _("False");
+ return _("Nothing");
+ }
+ else
+ {
+ if (nullable_boolean == true)
+ return _("true");
+ if (nullable_boolean == false)
+ return _("false");
+ /* Translators: "nothing" here is a keyword that should appear for consistence; please translate
as "yourtranslation (nothing)" */
+ return _("nothing");
+ }
+ }
+
+ protected static bool show_min_and_max (string type)
+ {
+ return (type == "d" || type == "y" || type == "n" || type == "q" || type == "i" || type == "u" ||
type == "x" || type == "t");
+ }
+
+ public static uint64 get_variant_as_uint64 (Variant variant)
+ {
+ switch (variant.classify ())
+ {
+ case Variant.Class.BYTE: return (int64) variant.get_byte ();
+ case Variant.Class.UINT16: return (int64) variant.get_uint16 ();
+ case Variant.Class.UINT32: return (int64) variant.get_uint32 ();
+ case Variant.Class.UINT64: return variant.get_uint64 ();
+ default: assert_not_reached ();
+ }
+ }
+
+ public static int64 get_variant_as_int64 (Variant variant)
+ {
+ switch (variant.classify ())
+ {
+ case Variant.Class.INT16: return (int64) variant.get_int16 ();
+ case Variant.Class.INT32: return (int64) variant.get_int32 ();
+ case Variant.Class.INT64: return variant.get_int64 ();
+ case Variant.Class.HANDLE: return (int64) variant.get_handle ();
+ default: assert_not_reached ();
+ }
+ }
+}
+
+public class DConfKey : Key
+{
+ public override string descriptor { owned get { return full_name; } }
+
+ public DConfKey (DConf.Client client, string parent_full_name, string name, string type_string)
+ {
+ Object (full_name: parent_full_name + name, name: name, type_string: type_string);
+
+ VariantBuilder builder = new VariantBuilder (new VariantType ("(ba{ss})")); // TODO add
VariantBuilder add_parsed () function in vala/glib-2.0.vapi line ~5490
+ builder.add ("b", false);
+ builder.open (new VariantType ("a{ss}"));
+ builder.add ("{ss}", "key-name", name);
+ builder.add ("{ss}", "defined-by", _("DConf backend"));
+ builder.add ("{ss}", "parent-path", parent_full_name);
+ builder.add ("{ss}", "type-code", type_string);
+ builder.add ("{ss}", "type-name", key_to_description (type_string));
+ if (show_min_and_max (type_string))
+ {
+ string min, max;
+ get_min_and_max_string (out min, out max, type_string);
+
+ builder.add ("{ss}", "minimum", min);
+ builder.add ("{ss}", "maximum", max);
+ }
+ builder.close ();
+ properties = builder.end ();
+
+ client.changed.connect ((client, prefix, changes, tag) => {
+ foreach (string item in changes)
+ if (prefix + item == full_name)
+ {
+ value_changed ();
+ return;
+ }
+ });
+ }
+}
+
+public class GSettingsKey : Key
+{
+ public string schema_id { private get; construct; }
+ public string? schema_path { private get; construct; }
+ public string summary { get; construct; }
+ public string description { private get; construct; }
+ public Variant default_value { get; construct; }
+ public string range_type { get; construct; }
+ public Variant range_content { get; construct; }
+
+ public override string descriptor {
+ owned get {
+ if (schema_path == null)
+ return @"$schema_id:$parent_path $name";
+ return @"$schema_id $name";
+ }
+ }
+
+ public GLib.Settings settings { get; construct; }
+
+ public GSettingsKey (string parent_full_name, string name, GLib.Settings settings, string schema_id,
string? schema_path, string summary, string description, string type_string, Variant default_value, string
range_type, Variant range_content)
+ {
+ string? summary_nullable = summary.locale_to_utf8 (-1, null, null, null);
+ summary = summary_nullable ?? summary;
+
+ string? description_nullable = description.locale_to_utf8 (-1, null, null, null);
+ description = description_nullable ?? description;
+
+ Object (full_name: parent_full_name + name,
+ name: name,
+ settings : settings,
+ // schema infos
+ schema_id: schema_id,
+ schema_path: schema_path,
+ summary: summary,
+ description: description,
+ default_value: default_value, // TODO devel default/admin default
+ range_type: range_type,
+ range_content: range_content);
+
+ settings.changed [name].connect (() => value_changed ());
+
+ this.type_string = type_string;
+
+ string defined_by = schema_path == null ? _("Relocatable schema") : _("Schema with path");
+
+ VariantBuilder builder = new VariantBuilder (new VariantType ("(ba{ss})"));
+ builder.add ("b", true);
+ builder.open (new VariantType ("a{ss}"));
+ builder.add ("{ss}", "key-name", name);
+ builder.add ("{ss}", "defined-by", defined_by);
+ builder.add ("{ss}", "parent-path", parent_full_name);
+ builder.add ("{ss}", "type-code", type_string);
+ builder.add ("{ss}", "type-name", key_to_description (type_string));
+ builder.add ("{ss}", "schema-id", schema_id);
+ builder.add ("{ss}", "summary", summary);
+ builder.add ("{ss}", "description", description);
+ builder.add ("{ss}", "default-value", cool_text_value_from_variant (default_value, type_string));
+ if (show_min_and_max (type_string))
+ {
+ string min, max;
+ if (range_type == "range") // TODO test more; and what happen if only min/max is in range?
+ {
+ min = cool_text_value_from_variant (range_content.get_child_value (0), type_string);
+ max = cool_text_value_from_variant (range_content.get_child_value (1), type_string);
+ }
+ else
+ get_min_and_max_string (out min, out max, type_string);
+
+ builder.add ("{ss}", "minimum", min);
+ builder.add ("{ss}", "maximum", max);
+ }
+ builder.close ();
+ properties = builder.end ();
+ }
+}
+
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 79404d9..b43eb60 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -24,3 +24,4 @@ editor/registry-search.ui
editor/registry-search.vala
editor/registry-view.ui
editor/registry-view.vala
+editor/setting-object.vala
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
index c37fb42..0f8f3ea 100644
--- a/po/POTFILES.skip
+++ b/po/POTFILES.skip
@@ -11,3 +11,4 @@ editor/pathbar.c
editor/registry-info.c
editor/registry-search.c
editor/registry-view.c
+editor/setting-object.c
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]