[blam/gtk-builder] Bring in the preferences dialog
- From: Carlos Martín Nieto <cmartin src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [blam/gtk-builder] Bring in the preferences dialog
- Date: Fri, 11 Oct 2013 13:06:05 +0000 (UTC)
commit d73e76dd6cbfdd73d63fc0abf5d71a480ed7f0be
Author: Carlos Martín Nieto <cmn dwim me>
Date: Fri Oct 11 12:42:24 2013 +0200
Bring in the preferences dialog
Currently only the toggables work
blam.csproj | 1 +
src/Blam.cs | 7 +
src/Conf.cs | 9 +-
src/Dialogs.cs | 59 ++++++++-
src/blam.ui | 4 +-
src/dialogs.ui | 394 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6 files changed, 467 insertions(+), 7 deletions(-)
---
diff --git a/blam.csproj b/blam.csproj
index 66d06bf..707d3e5 100644
--- a/blam.csproj
+++ b/blam.csproj
@@ -125,6 +125,7 @@
<Compile Include="src\EntryExtensions.cs" />
<Compile Include="src\ClipboardExtensions.cs" />
<Compile Include="src\MenuItemExtensions.cs" />
+ <Compile Include="src\Toggable.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
diff --git a/src/Blam.cs b/src/Blam.cs
index e5ad61e..b1eda68 100644
--- a/src/Blam.cs
+++ b/src/Blam.cs
@@ -104,6 +104,13 @@ namespace Blam
}
});
+ item = bld.GetObject<MenuItem>("menu-preferences");
+ item.ObserveActivated().Subscribe(obj => {
+ using (var dialog = new PreferencesDialog(MainWindow)) {
+ dialog.Run();
+ }
+ });
+
item = bld.GetObject<MenuItem>("menu-about");
Observable.Merge(
item.ObserveActivated().Select(_ => Unit.Default),
diff --git a/src/Conf.cs b/src/Conf.cs
index aa6d20a..ef2d6be 100644
--- a/src/Conf.cs
+++ b/src/Conf.cs
@@ -20,7 +20,7 @@ namespace Blam
client = new GConf.Client();
}
- static string fullKey(string key)
+ public static string FullKey(string key)
{
if (key.StartsWith("/")) {
return key;
@@ -33,13 +33,18 @@ namespace Blam
{
T res;
try {
- res = (T) client.Get(fullKey(key));
+ res = (T) client.Get(FullKey(key));
} catch {
res = def;
}
return res;
}
+
+ public static void Set(string key, object value)
+ {
+ client.Set(FullKey(key), value);
+ }
}
}
diff --git a/src/Dialogs.cs b/src/Dialogs.cs
index 625688f..59ce904 100644
--- a/src/Dialogs.cs
+++ b/src/Dialogs.cs
@@ -232,13 +232,66 @@ namespace Blam
var clickSub = clickable.Subscribe(v => button.Sensitive = v);
var actSub = activation.Subscribe(_ => button.Click());
- int res = dialog.Run();
- dialog.Hide();
+ var res = base.Run() == ResponseType.Ok;
clickSub.Dispose();
actSub.Dispose();
- return res == (int)ResponseType.Ok;
+ return res;
+ }
+ }
+
+ class PreferencesDialog : Modal
+ {
+ public class Preference {
+ public static string REVERSE_ENTRIES = "behaviour/reverse_entries";
+ public static string REFRESH_AT_START = "behaviour/refresh_at_start";
+ public static string AUTO_REFRESH = "behaviour/auto_refresh";
+ public static string AUTO_REFRESH_RATE = "behaviour/auto_refresh_rate";
+ public static string IGNORE_SSL_ERR = "behaviour/ignore_ssl_err";
+ public static string BEHAVIOUR_PATH = Conf.FullKey("behaviour");
+ public static string FONT_PATH = "/desktop/gnome/interface";
+ public static string VARIABLE_FONT = "/desktop/gnome/interface/font_name";
+ public static string FIXED_FONT =
"/desktop/gnome/interface/monospace_font_name";
+ public static string THEME = "ui/theme";
+ public static string SHOW_ITEM_LIST = "ui/show_item_list";
+ public static string MARK_ITEMS_READ_TIMEOUT = "behaviour/set_item_read_timeout";
+ public static string MARK_ITEMS_READ = "behaviour/set_item_read";
+ }
+
+ Togglable reverseEntries;
+ Togglable autoRefresh;
+ SpinButton autoRefreshInterval;
+ Togglable ignoreCertErrors;
+ Togglable refreshOnStartup;
+ ComboBox theme;
+ Togglable markReadDelay;
+ SpinButton markReadDelayTime;
+
+ public PreferencesDialog(Gtk.Window parent)
+ : base(parent, "preferences")
+ {
+ reverseEntries = new Togglable(bld, "reverse-entries", Preference.REVERSE_ENTRIES);
+ autoRefresh = new Togglable(bld, "auto-refresh", Preference.AUTO_REFRESH);
+ ignoreCertErrors = new Togglable(bld, "ignore-cert-errors",
Preference.IGNORE_SSL_ERR);
+ refreshOnStartup = new Togglable(bld, "refresh-on-startup",
Preference.REFRESH_AT_START);
+ markReadDelay = new Togglable(bld, "mark-read-delay", Preference.MARK_ITEMS_READ);
+ }
+
+ public new void Run()
+ {
+ var toggles = Observable.Merge(
+ reverseEntries.Toggle,
+ autoRefresh.Toggle,
+ ignoreCertErrors.Toggle,
+ refreshOnStartup.Toggle,
+ markReadDelay.Toggle);
+
+ var sub = toggles.Subscribe(kv => Conf.Set(kv.Key, kv.Value));
+
+ base.Run();
+
+ sub.Dispose();
}
}
diff --git a/src/blam.ui b/src/blam.ui
index eadf4c6..c3dc5d3 100644
--- a/src/blam.ui
+++ b/src/blam.ui
@@ -54,8 +54,8 @@
</object>
</child>
<child>
- <object class="GtkImageMenuItem" id="imagemenuitem4">
- <property name="label">gtk-save-as</property>
+ <object class="GtkImageMenuItem" id="menu-preferences">
+ <property name="label">gtk-preferences</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_action_appearance">False</property>
diff --git a/src/dialogs.ui b/src/dialogs.ui
index 5e583ea..334b6e1 100644
--- a/src/dialogs.ui
+++ b/src/dialogs.ui
@@ -562,6 +562,400 @@
<action-widget response="-10">edit-channel-apply</action-widget>
</action-widgets>
</object>
+ <object class="GtkDialog" id="preferences">
+ <property name="can_focus">False</property>
+ <property name="border_width">6</property>
+ <property name="title" translatable="yes">Preferences</property>
+ <property name="resizable">False</property>
+ <property name="type_hint">dialog</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">12</property>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="closeButton">
+ <property name="label">gtk-close</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox11">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">6</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkVBox" id="vbox13">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="boldBehaviourLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Behavior</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="label22">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes"> </property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="reverse-entries">
+ <property name="label" translatable="yes">_Newest entries at the top</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox15">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="label28">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes"> </property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox16">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkCheckButton" id="auto-refresh">
+ <property name="label" translatable="yes">_Automatically refresh all channels
every</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="auto-refresh-interval">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="invisible_char_set">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
+ <property name="adjustment"/>
+ <property name="climb_rate">1</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label29">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">minutes</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox18">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="label36">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes"> </property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="ignore-cert-errors">
+ <property name="label" translatable="yes">_Ignore SSL certificate check
errors</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="label8">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes"> </property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="refresh-on-startup">
+ <property name="label" translatable="yes">Refresh feeds on startup</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="boldThemeLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="xpad">6</property>
+ <property name="label" translatable="yes">Theme</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox17">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="label31">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes"> </property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="theme">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="border_width">1</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">6</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK |
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <child>
+ <object class="GtkCheckButton" id="mark-read-delay">
+ <property name="label" translatable="yes">_Mark items read after</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK |
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="use_action_appearance">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="mark-read-delay-time">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK |
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="invisible_char">●</property>
+ <property name="invisible_char_set">True</property>
+ <property name="primary_icon_activatable">False</property>
+ <property name="secondary_icon_activatable">False</property>
+ <property name="primary_icon_sensitive">True</property>
+ <property name="secondary_icon_sensitive">True</property>
+ <property name="adjustment"/>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label9">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK |
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">seconds</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">7</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-7">closeButton</action-widget>
+ </action-widgets>
+ </object>
<object class="GtkDialog" id="remove-channel">
<property name="can_focus">False</property>
<property name="border_width">5</property>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]