hipo r179 - in trunk: . data src



Author: bgarret
Date: Fri Mar 28 17:50:41 2008
New Revision: 179
URL: http://svn.gnome.org/viewvc/hipo?rev=179&view=rev

Log:
2008-03-28  Benoit Garret  <benoit garret_gnome gadz org>

        * data/hipo.schemas.in:
        * src/HipoMainWindow.cs:
        * src/Settings.cs:
        * src/TracksContainer.cs:
        * src/hipo.glade:

        Add tracks view column editing.
        Fixes #484512 and #392427



Modified:
   trunk/ChangeLog
   trunk/data/hipo.schemas.in
   trunk/src/HipoMainWindow.cs
   trunk/src/Settings.cs
   trunk/src/TracksContainer.cs
   trunk/src/hipo.glade

Modified: trunk/data/hipo.schemas.in
==============================================================================
--- trunk/data/hipo.schemas.in	(original)
+++ trunk/data/hipo.schemas.in	Fri Mar 28 17:50:41 2008
@@ -14,7 +14,22 @@
           </long>
         </locale>
       </schema>
-      
+
+      <schema>
+        <key>/schemas/apps/hipo/tracksview_columns</key>
+        <applyto>/apps/hipo/tracksview_columns</applyto>
+        <owner>hipo</owner>
+        <type>list</type>
+        <list_type>string</list_type>
+        <default>[Artist,Album,Title,Genre]</default>
+        <locale name="C">
+          <short>Tracks view columns</short>
+          <long>
+            List of columns displayed in the tracks view. Possible values are Title, Artist, Album, Genre.
+          </long>
+        </locale>
+      </schema>
+
     </schemalist>
 </gconfschemafile>
 

Modified: trunk/src/HipoMainWindow.cs
==============================================================================
--- trunk/src/HipoMainWindow.cs	(original)
+++ trunk/src/HipoMainWindow.cs	Fri Mar 28 17:50:41 2008
@@ -39,6 +39,7 @@
 		[Widget] private VBox sourceListBox;
 		
 		private SourceList sourceList;
+		private PreferencesDialog preferencesDialog;
 		private DeviceCombo combo;
 		private Glade.XML gxml;
 		private Gnome.Program program;
@@ -160,6 +161,9 @@
 			// create the progress dialog
 			progressDialog = new ImportDialog (hipoWindow);
 			
+			// create the preferences dialog
+			preferencesDialog = new PreferencesDialog ();			
+			
 			// create the capacity bar
 			capacityBar = new CapacityBar ();
 			sourceListBox.PackStart (capacityBar, false, false, 0);
@@ -409,7 +413,7 @@
 		
 		private void OnPreferences (object o, EventArgs args)
 		{
-			// FIXME
+			preferencesDialog.Show ();
 		}
 		
 		private void OnHelp (object o, EventArgs args)

Modified: trunk/src/Settings.cs
==============================================================================
--- trunk/src/Settings.cs	(original)
+++ trunk/src/Settings.cs	Fri Mar 28 17:50:41 2008
@@ -18,12 +18,18 @@
 //
 //
 
+using System;
+using System.Collections.Generic;
+using Gtk;
+using Glade;
+
+
 namespace Hipo
 {
 	public class Settings
 	{
 		static GConf.Client client = new GConf.Client ();
-
+		
 		public static event GConf.NotifyEventHandler Changed
 		{
 			add {
@@ -33,24 +39,58 @@
 				client.RemoveNotify ("/apps/hipo", value);
 			}
 		}
-
+		
+		public static Array TracksviewColumns
+		{
+			get {
+				return (Array) client.Get (SettingKeys.TracksviewColumns);
+			}
+			set {
+				// UGLY HACK: gconf-sharp does not seem to accept empty arrays
+				Array v = value;
+				
+				if (v.Length > 0)
+					client.Set (SettingKeys.TracksviewColumns, value);
+				else
+				{
+					Array empty = Array.CreateInstance (typeof (string), 1);
+					empty.SetValue ("", 0);
+					client.Set (SettingKeys.TracksviewColumns, empty);
+				}
+			}
+		}
+		
+		public static event GConf.NotifyEventHandler TracksviewColumnsChanged
+		{
+			add {
+				client.AddNotify (SettingKeys.TracksviewColumns, value);
+			}
+			remove{
+				client.RemoveNotify (SettingKeys.TracksviewColumns, value);
+			}
+		}
+		
 		public static string LastPath
 		{
 			get {
-				return (string) client.Get ("/apps/hipo/last_path");
+				return (string) client.Get (SettingKeys.LastPath);
 			}
 			set {
-				client.Set ("/apps/hipo/last_path", value);
+				// always have a valid directory set
+				if (value != null)
+					client.Set (SettingKeys.LastPath, value);
+				else
+					client.Set (SettingKeys.LastPath, Environment.GetFolderPath (Environment.SpecialFolder.Desktop));
 			}
 		}
 
 		public static event GConf.NotifyEventHandler LastPathChanged
 		{
 			add {
-				client.AddNotify ("/apps/hipo/last_path", value);
+				client.AddNotify (SettingKeys.LastPath, value);
 			}
 			remove{
-				client.RemoveNotify ("/apps/hipo/last_path", value);
+				client.RemoveNotify (SettingKeys.LastPath, value);
 			}
 		}
 	}
@@ -63,5 +103,79 @@
 				 return "/apps/hipo/last_path";
 			}
 		}
+		
+		public static string TracksviewColumns
+		{
+			get {
+				return "/apps/hipo/tracksview_columns";
+			}
+		}
+		
+	}
+	
+	public class PreferencesDialog
+	{
+		[Widget] private Window properties;
+		[Widget] private CheckButton checkbutton_artist;
+		[Widget] private CheckButton checkbutton_album;
+		[Widget] private CheckButton checkbutton_title;
+		[Widget] private CheckButton checkbutton_genre;
+		[Widget] private Button button_close;
+		
+		private Glade.XML gxml;
+		
+		public PreferencesDialog ()
+		{
+			Tools.Log (this, 3, "Creating the PreferencesDialog");
+			
+			gxml = new Glade.XML (null, "hipo.glade", "properties", null);
+			gxml.Autoconnect (this);
+			
+			Array columns = Settings.TracksviewColumns;
+			
+			foreach (string column in columns)
+			{
+				if (column == "Album")
+					checkbutton_album.Active = true;
+				if (column == "Artist")
+					checkbutton_artist.Active = true;
+				if (column == "Title")
+					checkbutton_title.Active = true;
+				if (column == "Genre")
+					checkbutton_genre.Active = true;
+			}
+			
+			checkbutton_album.Toggled += OnButtonToggled;
+			checkbutton_artist.Toggled += OnButtonToggled;
+			checkbutton_title.Toggled += OnButtonToggled;
+			checkbutton_genre.Toggled += OnButtonToggled;
+			button_close.Clicked += OnCloseClicked;
+		}
+		
+		public void Show ()
+		{
+			properties.ShowAll ();
+		}
+		
+		private void OnButtonToggled (object o, EventArgs args)
+		{
+			List<string> columns = new List<string> ();
+			
+			if (checkbutton_artist.Active)
+				columns.Add ("Artist");
+			if (checkbutton_album.Active)
+				columns.Add ("Album");
+			if (checkbutton_title.Active)
+				columns.Add ("Title");
+			if (checkbutton_genre.Active)
+				columns.Add ("Genre");
+			
+			Settings.TracksviewColumns = columns.ToArray ();
+		}
+		
+		private void OnCloseClicked (object o, EventArgs args)
+		{
+			properties.HideAll ();
+		}
 	}
 }

Modified: trunk/src/TracksContainer.cs
==============================================================================
--- trunk/src/TracksContainer.cs	(original)
+++ trunk/src/TracksContainer.cs	Fri Mar 28 17:50:41 2008
@@ -27,6 +27,7 @@
 using Gtk;
 using Gdk;
 using Glade;
+using GConf;
 using IPod;
 using Mono.Unix;
 
@@ -58,17 +59,7 @@
 			// create the columns, treeview, etc
 			view = new TreeView ();
 			
-			TreeViewColumn column = BuildColumn (Column.Artist);
-			view.AppendColumn (column);
-			
-			column = BuildColumn (Column.Album);
-			view.AppendColumn (column);
-			
-			column = BuildColumn (Column.Title);
-			view.AppendColumn (column);
-			
-			column = BuildColumn (Column.Genre);
-			view.AppendColumn (column);
+			BuildColumns (Settings.TracksviewColumns);
 			
 			view.HeadersVisible = true;
 			view.HeadersClickable = true;
@@ -94,6 +85,9 @@
 			view.KeyPressEvent += OnKeyPress;
 			view.ButtonPressEvent += OnButtonPress;
 			
+			// hook up the change column settings event
+			Hipo.Settings.TracksviewColumnsChanged += OnColumnsChanged;
+			
 			// create the search entry and bind the changed event
 			search = new Entry ();
 			search.Changed += SearchFor;
@@ -124,7 +118,24 @@
 			menu.Add (item);
 		}
 		
-		TreeViewColumn BuildColumn (Column column)
+		private void BuildColumns (Array wanted_columns)
+		{
+			Array all_columns = Enum.GetNames (typeof (Column));
+			
+			foreach (string wanted_column in wanted_columns)
+			{
+				foreach (string column in all_columns)
+				{
+					if (column == wanted_column)
+					{
+						Gtk.TreeViewColumn col = BuildColumn ((Column) Enum.Parse (typeof (Column), column));
+						view.AppendColumn (col);
+					}
+				}
+			}
+		}
+		
+		private TreeViewColumn BuildColumn (Column column)
 		{
 			EditableCellRenderer cell = new EditableCellRenderer ();
 			cell.Edited += OnTrackEdit;
@@ -263,6 +274,18 @@
 			
 		}
 		
+		private void OnColumnsChanged (object o, NotifyEventArgs args)
+		{
+			foreach (TreeViewColumn column in view.Columns)
+			{
+				view.RemoveColumn (column);
+			}
+			
+			Array wanted_columns = (Array)args.Value;
+			
+			BuildColumns (wanted_columns);
+		}
+		
 		[GLib.ConnectBefore]
 		private void OnButtonPress (object o, ButtonPressEventArgs args)
 		{

Modified: trunk/src/hipo.glade
==============================================================================
--- trunk/src/hipo.glade	(original)
+++ trunk/src/hipo.glade	Fri Mar 28 17:50:41 2008
@@ -595,4 +595,161 @@
       </widget>
     </child>
   </widget>
+  <widget class="GtkWindow" id="properties">
+    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+    <property name="title" translatable="yes" context="yes">Preferences</property>
+    <property name="window_position">GTK_WIN_POS_CENTER</property>
+    <property name="default_width">200</property>
+    <property name="default_height">200</property>
+    <child>
+      <widget class="GtkVBox" id="vbox1">
+        <property name="visible">True</property>
+        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+        <child>
+          <widget class="GtkHBox" id="hbox2">
+            <property name="visible">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+            <child>
+              <widget class="GtkLabel" id="label">
+                <property name="visible">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="label" translatable="yes" context="yes">&lt;b&gt;&lt;u&gt;Show columns:&lt;/u&gt;&lt;/b&gt;</property>
+                <property name="use_markup">True</property>
+              </widget>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="padding">10</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="padding">10</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="GtkTable" id="table3">
+            <property name="visible">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="n_rows">4</property>
+            <property name="n_columns">1</property>
+            <child>
+              <widget class="GtkCheckButton" id="checkbutton_artist">
+                <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="label" translatable="yes" context="yes">Artist</property>
+                <property name="response_id">0</property>
+                <property name="draw_indicator">True</property>
+              </widget>
+              <packing>
+                <property name="y_options">GTK_FILL</property>
+                <property name="x_padding">10</property>
+                <property name="y_padding">5</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkCheckButton" id="checkbutton_album">
+                <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="label" translatable="yes" context="yes">Album</property>
+                <property name="response_id">0</property>
+                <property name="draw_indicator">True</property>
+              </widget>
+              <packing>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="y_options">GTK_FILL</property>
+                <property name="x_padding">10</property>
+                <property name="y_padding">5</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkCheckButton" id="checkbutton_title">
+                <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="label" translatable="yes" context="yes">Title</property>
+                <property name="response_id">0</property>
+                <property name="draw_indicator">True</property>
+              </widget>
+              <packing>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+                <property name="y_options">GTK_FILL</property>
+                <property name="x_padding">10</property>
+                <property name="y_padding">5</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkCheckButton" id="checkbutton_genre">
+                <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="label" translatable="yes" context="yes">Genre</property>
+                <property name="response_id">0</property>
+                <property name="draw_indicator">True</property>
+              </widget>
+              <packing>
+                <property name="top_attach">3</property>
+                <property name="bottom_attach">4</property>
+                <property name="y_options">GTK_FILL</property>
+                <property name="x_padding">10</property>
+                <property name="y_padding">5</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="GtkHBox" id="hbox3">
+            <property name="visible">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <widget class="GtkVBox" id="vbox2">
+                <property name="visible">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <child>
+                  <widget class="GtkButton" id="button_close">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">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="label" translatable="yes" context="yes">gtk-close</property>
+                    <property name="use_stock">True</property>
+                    <property name="response_id">0</property>
+                  </widget>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="padding">10</property>
+                    <property name="pack_type">GTK_PACK_END</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="padding">10</property>
+                <property name="pack_type">GTK_PACK_END</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
 </glade-interface>



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