banshee r4225 - in trunk/banshee: . src/Core/Banshee.Core/Banshee.Collection src/Core/Banshee.Core/Resources src/Core/Banshee.Services/Banshee.Library src/Core/Banshee.Services/Banshee.MediaEngine src/Core/Banshee.Services/Banshee.PlayerMigration src/Core/Banshee.ThickClient/Banshee.Collection.Gui src/Core/Banshee.ThickClient/Banshee.Library.Gui src/Dap/Banshee.Dap/Banshee.Dap src/Extensions/Banshee.Daap/Banshee.Daap src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView



Author: gburt
Date: Sun Jul 20 19:37:21 2008
New Revision: 4225
URL: http://svn.gnome.org/viewvc/banshee?rev=4225&view=rev

Log:
2008-07-20  Gabriel Burt  <gabriel burt gmail com>

	* src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs:
	* src/Dap/Banshee.Dap/Banshee.Dap/RemovableSource.cs:
	* src/Core/Banshee.ThickClient/Banshee.Library.Gui/FileImportSource.cs:
	* src/Core/Banshee.ThickClient/Banshee.Library.Gui/FolderImportSource.cs:
	* src/Core/Banshee.Services/Banshee.PlayerMigration/AmarokPlayerImportSource.cs:
	* src/Core/Banshee.Services/Banshee.Library/ThreadPoolImportSource.cs:
	* src/Core/Banshee.Services/Banshee.Library/HomeDirectoryImportSource.cs:
	* src/Core/Banshee.Services/Banshee.Library/IImportSource.cs: Add a
	SortOrder int property so we can hint at the order import sources should
	be displayed in the import dialog.  In particular, puts the folder import
	first.

	* src/Core/Banshee.ThickClient/Banshee.Library.Gui/ImportDialog.cs: Sort
	the import sources before adding them to the combo box.

	* src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs: Add a static
	IsPlayingMethod delegate used by the new IsPlaying property to determine
	if the current instance is playing.

	* src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs:
	Set the TrackInfo.IsPlayingMethod to our IsPlaying (track) method.

	* src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Model.cs: Fix
	issue with the ListView position getting scrolled to the top of the list
	when it probably shouldn't be.  Add RowBoldPropertyName (like
	RowSensitivePropertyName) and IsRowBold method.

	* src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs:
	Set the RowBoldPropertyName to use TrackInfo's IsPlaying property.

	* src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs:
	If IsRowBold set the FontWeight property to bold for all ColumnCellText
	cells.

	* src/Core/Banshee.Core/Resources/translators.xml: Automatically updated.



Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs
   trunk/banshee/src/Core/Banshee.Core/Resources/translators.xml
   trunk/banshee/src/Core/Banshee.Services/Banshee.Library/HomeDirectoryImportSource.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Library/IImportSource.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.Library/ThreadPoolImportSource.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
   trunk/banshee/src/Core/Banshee.Services/Banshee.PlayerMigration/AmarokPlayerImportSource.cs
   trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs
   trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FileImportSource.cs
   trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FolderImportSource.cs
   trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Library.Gui/ImportDialog.cs
   trunk/banshee/src/Dap/Banshee.Dap/Banshee.Dap/RemovableSource.cs
   trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs
   trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Model.cs
   trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs

Modified: trunk/banshee/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Core/Banshee.Collection/TrackInfo.cs	Sun Jul 20 19:37:21 2008
@@ -40,6 +40,9 @@
 {
     public class TrackInfo : CacheableItem, ITrackInfo
     {
+        public delegate bool IsPlayingHandler (TrackInfo track);
+        public static IsPlayingHandler IsPlayingMethod;
+            
         private SafeUri uri;
         private SafeUri more_info_uri;
         private string mimetype;
@@ -116,6 +119,10 @@
         public virtual void Save ()
         {
         }
+        
+        public bool IsPlaying {
+            get { return (IsPlayingMethod != null) ? IsPlayingMethod (this) : false; }
+        }
 
         public virtual SafeUri Uri {
             get { return uri; }

Modified: trunk/banshee/src/Core/Banshee.Core/Resources/translators.xml
==============================================================================
--- trunk/banshee/src/Core/Banshee.Core/Resources/translators.xml	(original)
+++ trunk/banshee/src/Core/Banshee.Core/Resources/translators.xml	Sun Jul 20 19:37:21 2008
@@ -26,6 +26,7 @@
     <person>Philipp Kerling</person>
     <person>Jochen Skulj</person>
     <person>Daniel Schindler</person>
+    <person>Andre Klapper</person>
   </language>
   <language code="dz" name="Dzongkha">
     <person>yumkee lhamo</person>
@@ -134,7 +135,7 @@
     <person>Clytie Siddall</person>
   </language>
   <language code="zh_CN" name="Simplified Chinese">
-    <person>çé (Lu Gan)</person>
+    <person>çé(Lu Gan)</person>
   </language>
   <language code="zh_HK" name="Chinese">
     <person>Hsin-lin Cheng</person>

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Library/HomeDirectoryImportSource.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Library/HomeDirectoryImportSource.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Library/HomeDirectoryImportSource.cs	Sun Jul 20 19:37:21 2008
@@ -55,5 +55,9 @@
         public bool CanImport {
             get { return true; }
         }
+        
+        public int SortOrder {
+            get { return 10; }
+        }
     }
 }

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Library/IImportSource.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Library/IImportSource.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Library/IImportSource.cs	Sun Jul 20 19:37:21 2008
@@ -36,5 +36,6 @@
         string Name { get; }
         string [] IconNames { get; }
         bool CanImport { get; }
+        int SortOrder { get; }
     }
 }

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Library/ThreadPoolImportSource.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Library/ThreadPoolImportSource.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Library/ThreadPoolImportSource.cs	Sun Jul 20 19:37:21 2008
@@ -124,6 +124,8 @@
         public abstract string Name { get; }
 
         public abstract string[] IconNames { get; }
+        
+        public abstract int SortOrder { get; }
 
         public virtual bool CanImport {
             get { return true; }

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs	Sun Jul 20 19:37:21 2008
@@ -105,6 +105,8 @@
             }
             
             MetadataService.Instance.HaveResult += OnMetadataServiceHaveResult;
+            
+            TrackInfo.IsPlayingMethod = IsPlaying;
         }
         
         private void LoadEngine (TypeExtensionNode node)

Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.PlayerMigration/AmarokPlayerImportSource.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.PlayerMigration/AmarokPlayerImportSource.cs	(original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.PlayerMigration/AmarokPlayerImportSource.cs	Sun Jul 20 19:37:21 2008
@@ -199,5 +199,9 @@
         public override string [] IconNames {
             get { return new string [] { "system-search" }; }
         }
+        
+        public override int SortOrder {
+            get { return 40; }
+        }
     }
 }

Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs	(original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/TrackListView.cs	Sun Jul 20 19:37:21 2008
@@ -52,6 +52,7 @@
 
             RulesHint = true;
             RowSensitivePropertyName = "CanPlay";
+            RowBoldPropertyName = "IsPlaying";
             
             ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent, PlayerEvent.StateChange);
             

Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FileImportSource.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FileImportSource.cs	(original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FileImportSource.cs	Sun Jul 20 19:37:21 2008
@@ -74,6 +74,10 @@
             get { return true; }
         }
         
+        public int SortOrder {
+            get { return 5; }
+        }
+        
         public static void SetChooserShortcuts (Gtk.FileChooserDialog chooser)
         {
             Hyena.Gui.GtkUtilities.SetChooserShortcuts (chooser,

Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FolderImportSource.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FolderImportSource.cs	(original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FolderImportSource.cs	Sun Jul 20 19:37:21 2008
@@ -68,5 +68,9 @@
         public bool CanImport {
             get { return true; }
         }
+        
+        public int SortOrder {
+            get { return 0; }
+        }
     }
 }

Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Library.Gui/ImportDialog.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Library.Gui/ImportDialog.cs	(original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Library.Gui/ImportDialog.cs	Sun Jul 20 19:37:21 2008
@@ -27,6 +27,7 @@
 //
 
 using System;
+using System.Collections.Generic;
 using Gtk;
 using Glade;
 
@@ -94,18 +95,28 @@
             
             TreeIter active_iter = TreeIter.Zero;
             
+            List<IImportSource> sources = new List<IImportSource> ();
+            
             // Add the standalone import sources
             foreach (IImportSource source in ServiceManager.Get<ImportSourceManager> ()) {
-                AddSource (source);
+                sources.Add (source);
             }
             
             // Find active sources that implement IImportSource
             foreach (Source source in ServiceManager.SourceManager.Sources) {
                 if (source is IImportSource) {
-                    AddSource ((IImportSource)source);
+                    sources.Add ((IImportSource)source);
                 }
             }
             
+            // Sort the sources by their SortOrder properties
+            sources.Sort (import_source_comparer);
+            
+            // And actually add them to the dialog
+            foreach (IImportSource source in sources) {
+                AddSource (source);
+            }
+            
             if (!active_iter.Equals(TreeIter.Zero) || (active_iter.Equals (TreeIter.Zero) && 
                 source_model.GetIterFirst (out active_iter))) {
                 source_combo_box.SetActiveIter (active_iter);
@@ -208,5 +219,17 @@
                 return null;
             }
         }
+         
+        private static IComparer<IImportSource> import_source_comparer = new ImportSourceComparer ();
+        private class ImportSourceComparer : IComparer<IImportSource>
+        {
+            public int Compare (IImportSource a, IImportSource b)
+            {
+                int ret = a.SortOrder.CompareTo (b.SortOrder);
+                return ret != 0
+                    ? ret
+                    : a.Name.CompareTo (b.Name);
+            }
+        }
     }
 }

Modified: trunk/banshee/src/Dap/Banshee.Dap/Banshee.Dap/RemovableSource.cs
==============================================================================
--- trunk/banshee/src/Dap/Banshee.Dap/Banshee.Dap/RemovableSource.cs	(original)
+++ trunk/banshee/src/Dap/Banshee.Dap/Banshee.Dap/RemovableSource.cs	Sun Jul 20 19:37:21 2008
@@ -87,6 +87,10 @@
         public virtual bool CanImport {
             get { return true; }
         }
+        
+        int IImportSource.SortOrder {
+            get { return 20; }
+        }
 
 #region IUnmapableSource Implementation
 

Modified: trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs	(original)
+++ trunk/banshee/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs	Sun Jul 20 19:37:21 2008
@@ -334,6 +334,10 @@
             get { return connected; }
         }
         
+        int IImportSource.SortOrder {
+            get { return 30; }
+        }
+        
         public string [] IconNames {
             get { return Properties.GetStringList ("Icon.Name"); }
         }

Modified: trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Model.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Model.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Model.cs	Sun Jul 20 19:37:21 2008
@@ -75,20 +75,8 @@
                 ScrollTo ((double) vpos);
             } else {
                 if (Model.Count <= RowsInView) {
+                    // If our view fits all rows at once, make sure we're scrolled to the top
                     ScrollTo (0.0);
-                } else if (Selection.Count > 0) {
-                    bool selection_in_view = false;
-                    int first_row = GetRowAtY (0);
-                    for (int i = 0; i < RowsInView; i++) {
-                        if (Selection.Contains (first_row + i)) {
-                            selection_in_view = true;
-                            break;
-                        }
-                    }
-
-                    if (!selection_in_view) {
-                        CenterOn (Selection.Ranges[0].Start);
-                    }
                 } else {
                     if (vadjustment != null) {
                         ScrollTo (vadjustment.Value);
@@ -172,6 +160,43 @@
             return (bool)row_sensitive_property_info.GetValue (item, null);
         }
         
+        private string row_bold_property_name = "IsBold";
+        private PropertyInfo row_bold_property_info;
+        bool row_bold_property_invalid = false;
+        
+        public string RowBoldPropertyName {
+            get { return row_bold_property_name; }
+            set { 
+                if (value == row_bold_property_name) {
+                    return;
+                }
+                
+                row_bold_property_name = value;
+                row_bold_property_info = null;
+                row_bold_property_invalid = false;
+                
+                InvalidateList ();
+            }
+        }
+        
+        private bool IsRowBold (object item)
+        {
+            if (item == null || row_bold_property_invalid) {
+                return false;
+            }
+         
+            if (row_bold_property_info == null || row_bold_property_info.ReflectedType != item.GetType ()) {
+                row_bold_property_info = item.GetType ().GetProperty (row_bold_property_name);
+                if (row_bold_property_info == null || row_bold_property_info.PropertyType != typeof (bool)) {
+                    row_bold_property_info = null;
+                    row_bold_property_invalid = true;
+                    return false;
+                }
+            }
+            
+            return (bool)row_bold_property_info.GetValue (item, null);
+        }
+        
         #pragma warning disable 0169
         
         private bool IsRowSensitive (int index)

Modified: trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs	Sun Jul 20 19:37:21 2008
@@ -299,6 +299,7 @@
             
             object item = model[row_index];
             bool sensitive = IsRowSensitive (item);
+            bool bold = IsRowBold (item);
             
             Rectangle cell_area = new Rectangle ();
             cell_area.Height = RowHeight;
@@ -311,23 +312,28 @@
                 
                 cell_area.Width = column_cache[ci].Width;
                 cell_area.X = column_cache[ci].X1 + area.X;
-                PaintCell (item, ci, row_index, cell_area, sensitive, state, false);
+                PaintCell (item, ci, row_index, cell_area, sensitive, bold, state, false);
             }
             
             if (pressed_column_is_dragging && pressed_column_index >= 0) {
                 cell_area.Width = column_cache[pressed_column_index].Width;
                 cell_area.X = pressed_column_x_drag + list_rendering_alloc.X - list_interaction_alloc.X;
-                PaintCell (item, pressed_column_index, row_index, cell_area, sensitive, state, true);
+                PaintCell (item, pressed_column_index, row_index, cell_area, sensitive, bold, state, true);
             }
         }
         
-        private void PaintCell (object item, int column_index, int row_index, Rectangle area, bool sensitive,
+        private void PaintCell (object item, int column_index, int row_index, Rectangle area, bool sensitive, bool bold,
             StateType state, bool dragging)
         {
             ColumnCell cell = column_cache[column_index].Column.GetCell (0);
             cell.BindListItem (item);
             ColumnCellDataProvider (cell, item);
             
+            ColumnCellText text_cell = cell as ColumnCellText;
+            if (text_cell != null) {
+                text_cell.FontWeight = bold ? Pango.Weight.Bold : Pango.Weight.Normal;
+            }
+            
             if (dragging) {
                 Cairo.Color fill_color = Theme.Colors.GetWidgetColor (GtkColorClass.Base, StateType.Normal);
                 fill_color.A = 0.5;



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