All pastes #279535 Raw Edit

Miscellany

public text v1 · immutable
·published 2006-12-15 03:10 UTC
rendered paste body
//
// Author:
//   Mikael Hallendal <micke@imendio.com>
//
// (C) 2004 Imendio HB
//

using GConf;
using Glade;
using Gtk;
using System;
using System.Collections;

namespace Imendio.Blam {
    public class Preference {
        public static string REVERSE_ENTRIES   = "behaviour/reverse_entries";
        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.GetFullKey("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 class PreferencesDialog {
        [Widget] Gtk.Dialog      preferencesDialog         = null;
        [Widget] Gtk.Label       boldBehaviourLabel        = null;
        [Widget] Gtk.CheckButton reverseEntriesCheckButton = null;
        [Widget] Gtk.CheckButton autoRefreshCheckButton    = null;
        [Widget]Gtk.CheckButton ignoreSSLErr              = null;
        [Widget] Gtk.SpinButton  refreshRateSpinButton     = null;
        [Widget] Gtk.Label       boldThemeLabel            = null;
        [Widget] Gtk.ComboBox	 themeComboBox             = null;

		public PreferencesDialog (Gtk.Window parentWindow)
		{
			Glade.XML gladeXML = Glade.XML.FromAssembly ("blam.glade",
								"preferencesDialog",
								null);
			gladeXML.Autoconnect (this);
			preferencesDialog.TransientFor = parentWindow;
			preferencesDialog.Icon = Gdk.Pixbuf.LoadFromResource ("blam.png");

			boldBehaviourLabel.Markup = "<b>" + boldBehaviourLabel.Text + "</b>";
			bool reverseEntries = Conf.Get (Preference.REVERSE_ENTRIES, false);
			reverseEntriesCheckButton.Active = reverseEntries;

			bool autoRefresh = Conf.Get (Preference.AUTO_REFRESH, false);
			autoRefreshCheckButton.Active = autoRefresh;

			int refreshRate = Conf.Get (Preference.AUTO_REFRESH_RATE, 15);
			refreshRateSpinButton.Value = refreshRate;

			boldThemeLabel.Markup = "<b>" + boldThemeLabel.Text + "</b>";

			themeComboBox.Changed += new EventHandler(ThemeSelectionChanged);

			Conf.AddNotify (Preference.BEHAVIOUR_PATH, new NotifyEventHandler (ConfNotifyHandler));
		}

		public void Show ()
		{
			/* This needs to be this late, otherwise mono will die. */
			fill_themes_combo(themeComboBox);
			preferencesDialog.ShowAll ();
		}

		public void CloseButtonClicked (object obj, EventArgs args)
		{
			preferencesDialog.Hide();
		}

		public void ReverseItemsCheckButtonToggled (object obj, EventArgs args)
		{
			Conf.Set (Preference.REVERSE_ENTRIES,
					  reverseEntriesCheckButton.Active);
		}

		public void AutoRefreshCheckButtonToggled (object obj, EventArgs args)
		{
			Conf.Set (Preference.AUTO_REFRESH, autoRefreshCheckButton.Active);
		}

		public void RefreshRateSpinButtonChanged (object obj, EventArgs args)
		{
			Conf.Set (Preference.AUTO_REFRESH_RATE,
					  (int) refreshRateSpinButton.Value);
		}
		
		public void IgnoreSSLErrToggled (object obj, EventArgs args)
		{
		    Conf.Set (Preference.IGNORE_SSL_ERR,
		               (bool) ignoreSSLErr.Active);
		}

		public void ThemeSelectionChanged (object obj, EventArgs args)
		{
			Gtk.ComboBox box = obj as Gtk.ComboBox;
			Conf.Set(Preference.THEME, Application.TheApp.ThemeManager.PathByName(box.ActiveText));
		}

		private void ConfNotifyHandler (object sender, NotifyEventArgs args)
		{
			if (args.Key == Conf.GetFullKey (Preference.REVERSE_ENTRIES)) {
				reverseEntriesCheckButton.Active = (bool) args.Value;
			} else if (args.Key == Conf.GetFullKey (Preference.AUTO_REFRESH)) {
				autoRefreshCheckButton.Active = (bool) args.Value;
			} else if (args.Key == Conf.GetFullKey (Preference.AUTO_REFRESH_RATE)) {
				refreshRateSpinButton.Value = (int) args.Value;
			} else if (args.Key == Conf.GetFullKey (Preference.IGNORE_SSL_ERR)) {
			    ignoreSSLErr.Active = (bool) args.Value;
			}
		}
		
		private void fill_themes_combo(Gtk.ComboBox box)
		{
			box.Clear();
			CellRendererText cell = new CellRendererText();
			box.PackStart(cell, false);
			box.AddAttribute(cell, "text", 0);
			ListStore store = new ListStore(typeof(string));
			box.Model = store;

			TreeIter iter;
			string cur_theme = Conf.Get(Preference.THEME, Defines.DEFAULT_THEME);
			cur_theme = cur_theme.Substring(cur_theme.LastIndexOf("/") + 1);
			IList themes = Application.TheApp.ThemeManager.GetThemeList();
			
			foreach(Theme t in themes){
				iter = store.AppendValues(t.Name);

				if(t.Name == cur_theme){
					box.SetActiveIter(iter);
				}
			}
		}
		
	}
}