[gnome-games/gsoc-seed-games] [same-gnome-clutter] All settings persist through GConf now



commit 778b85ce722174e41c4c3f334ad058bb1c95de30
Author: Tim Horton <hortont424 gmail com>
Date:   Sun Jul 12 20:36:55 2009 -0400

    [same-gnome-clutter] All settings persist through GConf now

 same-gnome-clutter/data/settings.ui |   53 +++++++++++++++-
 same-gnome-clutter/src/Settings.js  |  116 +++++++++++++++++++++++++++++++++--
 2 files changed, 160 insertions(+), 9 deletions(-)
---
diff --git a/same-gnome-clutter/data/settings.ui b/same-gnome-clutter/data/settings.ui
index 4309e1c..d531377 100644
--- a/same-gnome-clutter/data/settings.ui
+++ b/same-gnome-clutter/data/settings.ui
@@ -52,6 +52,16 @@
                                 <property name="position">1</property>
                               </packing>
                             </child>
+                            <child>
+                              <object class="GtkLabel" id="label9">
+                                <property name="visible">True</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">Number of colors:</property>
+                              </object>
+                              <packing>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
                           </object>
                           <packing>
                             <property name="position">0</property>
@@ -62,25 +72,41 @@
                             <property name="visible">True</property>
                             <property name="orientation">vertical</property>
                             <child>
-                              <object class="GtkSpinButton" id="spinbutton1">
+                              <object class="GtkSpinButton" id="rows-spinner">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="invisible_char">&#x2022;</property>
+                                <property name="adjustment">rows-adjustment</property>
+                                <signal name="value_changed" handler="update_rows"/>
                               </object>
                               <packing>
                                 <property name="position">0</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkSpinButton" id="spinbutton2">
+                              <object class="GtkSpinButton" id="columns-spinner">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="invisible_char">&#x2022;</property>
+                                <property name="adjustment">columns-adjustment</property>
+                                <signal name="value_changed" handler="update_columns"/>
                               </object>
                               <packing>
                                 <property name="position">1</property>
                               </packing>
                             </child>
+                            <child>
+                              <object class="GtkSpinButton" id="colors-spinner">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="invisible_char">&#x2022;</property>
+                                <property name="adjustment">color-adjustment</property>
+                                <signal name="value_changed" handler="update_colors"/>
+                              </object>
+                              <packing>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
                           </object>
                           <packing>
                             <property name="position">1</property>
@@ -134,6 +160,7 @@
                               <object class="GtkComboBox" id="theme-selector">
                                 <property name="visible">True</property>
                                 <property name="model">liststore1</property>
+                                <signal name="changed" handler="select_theme"/>
                               </object>
                               <packing>
                                 <property name="padding">8</property>
@@ -184,24 +211,26 @@
                     <property name="visible">True</property>
                     <property name="orientation">vertical</property>
                     <child>
-                      <object class="GtkCheckButton" id="checkbutton1">
+                      <object class="GtkCheckButton" id="zealous-checkbox">
                         <property name="label" translatable="yes">Zealous Animation</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">False</property>
                         <property name="draw_indicator">True</property>
+                        <signal name="toggled" handler="set_zealous_animation"/>
                       </object>
                       <packing>
                         <property name="position">0</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkCheckButton" id="checkbutton2">
+                      <object class="GtkCheckButton" id="fly-score-checkbox">
                         <property name="label" translatable="yes">Fly score increment (words!)</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">False</property>
                         <property name="draw_indicator">True</property>
+                        <signal name="toggled" handler="set_fly_score"/>
                       </object>
                       <packing>
                         <property name="position">1</property>
@@ -236,6 +265,7 @@
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
                 <property name="use_stock">True</property>
+                <signal name="activate" handler="reset_defaults"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -277,4 +307,19 @@
       <column type="gchararray"/>
     </columns>
   </object>
+  <object class="GtkAdjustment" id="rows-adjustment">
+    <property name="lower">3</property>
+    <property name="upper">21</property>
+    <property name="step_increment">1</property>
+  </object>
+  <object class="GtkAdjustment" id="columns-adjustment">
+    <property name="lower">3</property>
+    <property name="upper">21</property>
+    <property name="step_increment">1</property>
+  </object>
+  <object class="GtkAdjustment" id="color-adjustment">
+    <property name="lower">2</property>
+    <property name="upper">4</property>
+    <property name="step_increment">1</property>
+  </object>
 </interface>
diff --git a/same-gnome-clutter/src/Settings.js b/same-gnome-clutter/src/Settings.js
index 1d0134e..ed5d4df 100644
--- a/same-gnome-clutter/src/Settings.js
+++ b/same-gnome-clutter/src/Settings.js
@@ -8,8 +8,13 @@ ThemeLoader = imports.ThemeLoader;
 GConf.init(Seed.argv);
 
 // Defaults
-var theme;
+var theme, columns, rows, colors, zealous, fly_score;
 var default_theme = "Tango";
+var default_columns = 15;
+var default_rows = 10;
+var default_colors = 3;
+var default_zealous = true;
+var default_fly_score = true;
 
 // Map theme names to themes
 var themes = ThemeLoader.load_themes();
@@ -18,6 +23,20 @@ try
 {
 	gconf_client = GConf.Client.get_default();
 	theme = themes[gconf_client.get_string("/apps/same-gnome-clutter/theme")];
+	columns = gconf_client.get_int("/apps/same-gnome-clutter/columns");
+	rows = gconf_client.get_int("/apps/same-gnome-clutter/rows");
+	colors = gconf_client.get_int("/apps/same-gnome-clutter/colors");
+	zealous = gconf_client.get_bool("/apps/same-gnome-clutter/zealous");
+	fly_score = gconf_client.get_bool("/apps/same-gnome-clutter/fly_score");
+	
+	if(columns < 4 || columns > 20) // TODO: arbitrary. determine reasonable limits
+		columns = default_columns;
+	
+	if(rows < 4 || rows > 20)
+		rows = default_rows;
+	
+	if(colors < 2 || colors > 4)
+		colors = default_colors;
 	
 	if(theme == null)
 		theme = themes[default_theme];
@@ -26,6 +45,11 @@ catch(e)
 {
 	print("Couldn't load settings from GConf.");
 	theme = themes[default_theme];
+	columns = default_columns;
+	rows = default_rows;
+	colors = default_colors;
+	zealous = default_zealous;
+	fly_score = default_fly_score;
 }
 
 // Settings Event Handler
@@ -33,7 +57,7 @@ catch(e)
 SettingsWatcher = new GType({
 	parent: Gtk.Button.type, // TODO: Can I make something inherit directly from GObject?!
 	name: "SettingsWatcher",
-	signals: [{name: "theme_changed"}],
+	signals: [{name: "theme_changed"}, {name: "size_changed"}, {name: "colors_changed"}],
 	init: function()
 	{
 		
@@ -57,14 +81,89 @@ handlers = {
 		
 		try
 		{
-			gconf_client.set_string("/apps/lightsoff/theme", selector.get_active_text());
+			gconf_client.set_string("/apps/same-gnome-clutter/theme", selector.get_active_text());
 		}
 		catch(e)
 		{
-			Seed.print("Couldn't save settings to GConf.");
+			print("Couldn't save settings to GConf.");
 		}
 	
 		Watcher.signal.theme_changed.emit();
+	},
+	set_zealous_animation: function(widget, ud)
+	{
+		zealous = widget.active;
+		
+		try
+		{
+			gconf_client.set_bool("/apps/same-gnome-clutter/zealous", zealous);
+		}
+		catch(e)
+		{
+			print("Couldn't save settings to GConf.");
+		}
+	},
+	set_fly_score: function(widget, ud)
+	{
+		fly_score = widget.active;
+		
+		try
+		{
+			gconf_client.set_bool("/apps/same-gnome-clutter/fly_score", fly_score);
+		}
+		catch(e)
+		{
+			print("Couldn't save settings to GConf.");
+		}
+	},
+	update_rows: function(widget, ud)
+	{
+		rows = widget.get_value();
+		
+		try
+		{
+			gconf_client.set_int("/apps/same-gnome-clutter/rows", rows);
+		}
+		catch(e)
+		{
+			print("Couldn't save settings to GConf.");
+		}
+	
+		Watcher.signal.size_changed.emit();
+	},
+	update_columns: function(widget, ud)
+	{
+		columns = widget.get_value();
+
+		try
+		{
+			gconf_client.set_int("/apps/same-gnome-clutter/columns", columns);
+		}
+		catch(e)
+		{
+			print("Couldn't save settings to GConf.");
+		}
+	
+		Watcher.signal.size_changed.emit();
+	},
+	update_colors: function(widget, ud)
+	{
+		colors = widget.get_value();
+
+		try
+		{
+			gconf_client.set_int("/apps/same-gnome-clutter/colors", colors);
+		}
+		catch(e)
+		{
+			print("Couldn't save settings to GConf.");
+		}
+	
+		Watcher.signal.colors_changed.emit();
+	},
+	reset_defaults: function(widget, ud)
+	{
+		print("Not yet implemented.");
 	}
 };
 
@@ -77,7 +176,14 @@ function show_settings()
 	b.connect_signals(handlers);
 
 	populate_theme_selector(b.get_object("theme-selector"));
-
+	
+	// Set current values
+	b.get_object("rows-spinner").value = rows;
+	b.get_object("columns-spinner").value = columns;
+	b.get_object("colors-spinner").value = colors;
+	b.get_object("zealous-checkbox").active = zealous;
+	b.get_object("fly-score-checkbox").active = fly_score;
+	
 	settings_dialog = b.get_object("dialog1");
 	settings_dialog.set_transient_for(main.window);
 	



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