f-spot r3543 - trunk/src/Widgets



Author: sdelcroix
Date: Wed Jan 16 10:26:18 2008
New Revision: 3543
URL: http://svn.gnome.org/viewvc/f-spot?rev=3543&view=rev

Log:
fixing indent

Modified:
   trunk/src/Widgets/IconView.cs

Modified: trunk/src/Widgets/IconView.cs
==============================================================================
--- trunk/src/Widgets/IconView.cs	(original)
+++ trunk/src/Widgets/IconView.cs	Wed Jan 16 10:26:18 2008
@@ -1,12 +1,14 @@
-//
-// IconView.cs:
-//
-// Authors:
-//    Ettore Perazzoli
-//    Larry Ewing <lewing novell com>
-//
-// (C) 2003 Novell, Inc.
-//
+/*
+* Widgets/IconView.cs
+*
+* Author(s):
+	* 	Etore Perazzoli
+*	Larry Ewing <lewing novell com>
+*	Stephane Delcroix <stephane delcroix org>
+*
+* This is free software. See COPYING for details.
+*/
+
 using Gtk;
 using Gdk;
 using Gnome;
@@ -19,20 +21,20 @@
 namespace FSpot.Widgets
 {
 	public class IconView : Gtk.Layout {
-	
+
 		// Public properties.
 		FSpot.PixbufCache cache;
-	
+
 		/* preserve the scroll postion when possible */
 		private bool scroll;
 		private double scroll_value;
-	
+
 		/* suppress it sometimes */
 		bool suppress_scroll = false;
-		
+
 		// Zooming factor.
 		protected const double ZOOM_FACTOR = 1.2;
-	
+
 		/* Width of the thumbnails. */
 		protected int thumbnail_width = 128;
 		protected const int MAX_THUMBNAIL_WIDTH = 256;
@@ -44,17 +46,17 @@
 			set {
 				value = Math.Min(value, MAX_THUMBNAIL_WIDTH);
 				value = Math.Max(value, MIN_THUMBNAIL_WIDTH);
-	
+
 				if (thumbnail_width != value) {
 					thumbnail_width = value;
 					QueueResize ();
-	
+
 					if (ZoomChanged != null)
 						ZoomChanged (this, System.EventArgs.Empty);
 				}
 			}
 		}
-	
+
 		public double Zoom {
 			get {
 				return ((double)(ThumbnailWidth - MIN_THUMBNAIL_WIDTH) / (double)(MAX_THUMBNAIL_WIDTH - MIN_THUMBNAIL_WIDTH));
@@ -63,7 +65,7 @@
 				ThumbnailWidth = (int) ((value) * (MAX_THUMBNAIL_WIDTH - MIN_THUMBNAIL_WIDTH)) + MIN_THUMBNAIL_WIDTH;
 			}
 		}
-	
+
 		protected double thumbnail_ratio = 4.0 / 3.0;
 		public double ThumbnailRatio {
 			get {
@@ -74,46 +76,46 @@
 				QueueResize ();
 			}
 		}
-	
+
 		public int ThumbnailHeight {
 			get {
 				return (int) Math.Round ((double) thumbnail_width / ThumbnailRatio);
 			}
 		}
-	
+
 		public FSpot.PixbufCache Cache {
 			get {
 				return cache;
 			}
 		}
-	
+
 		private bool display_tags = true;
 		public bool DisplayTags {
 			get {
 				return display_tags;
 			}
-	
+
 			set {
 				display_tags = value;
 				QueueResize ();
 			}
 		}
-	
+
 		private bool display_dates = true;
 		public bool DisplayDates {
 			get {
 				if (cell_width > 100)
 					return display_dates;
-				else 
+				else
 					return false;
 			}
-	
+
 			set {
 				display_dates = value;
 				QueueResize ();
 			}
 		}
-	
+
 		private bool display_filenames = false;
 		public bool DisplayFilenames {
 			get { return display_filenames; }
@@ -133,42 +135,42 @@
 				else
 					return false;
 			}
-			
+
 			set {
 				display_ratings  = value;
 				QueueResize ();
 			}
 		}
-	
+
 		// Size of the frame around the thumbnail.
 		protected int cell_border_width = 10;
-	
+
 		// Border around the scrolled area.
 		protected const int BORDER_SIZE = 6;
-	
-		// Thickness of the outline used to indicate selected items. 
+
+		// Thickness of the outline used to indicate selected items.
 		private const int SELECTION_THICKNESS = 5;
-	
+
 		// Size of the tag icon in the view.
 		protected int tag_icon_size = 16;
-	
+
 		// Horizontal spacing between the tag icons
 		protected int tag_icon_hspacing = 2;
-	
+
 		// Vertical spacing between the thumbnail and additional infos (tags, dates, ...).
 		protected int tag_icon_vspacing = 3;
-	
+
 		// Various other layout values.
 		protected int cells_per_row;
 		protected int cell_width;
 		protected int cell_height;
-	
+
 		// The first pixel line that is currently on the screen (i.e. in the current
 		// scroll region).  Used to compute the area that went offscreen in the "changed"
 		// signal handler for the vertical GtkAdjustment.
 		private int y_offset;
 		private int x_offset;
-	
+
 		// Focus Handling
 		private int real_focus_cell;
 		public int FocusCell {
@@ -189,61 +191,61 @@
 		// distinguish the GDK_2BUTTON_PRESS events that we actually care
 		// about.
 		private int click_count;
-	
+
 		// Public events.
 		public delegate void DoubleClickedHandler (IconView view, int clicked_item);
 		public event DoubleClickedHandler DoubleClicked;
-		
+
 		public delegate void ZoomChangedHandler (object sender, System.EventArgs args);
 		public event ZoomChangedHandler ZoomChanged;
-	
+
 		// Public API.
 		public IconView (IntPtr raw) : base (raw) {}
-	
+
 		protected IconView () : base (null, null)
 		{
 			cache = new FSpot.PixbufCache ();
 			cache.OnPixbufLoaded += HandlePixbufLoaded;
-	
+
 			ScrollAdjustmentsSet += new ScrollAdjustmentsSetHandler (HandleScrollAdjustmentsSet);
-			
+
 			ButtonPressEvent += new ButtonPressEventHandler (HandleButtonPressEvent);
 			ButtonReleaseEvent += new ButtonReleaseEventHandler (HandleButtonReleaseEvent);
 			KeyPressEvent += new KeyPressEventHandler (HandleKeyPressEvent);
 			ScrollEvent += new ScrollEventHandler(HandleScrollEvent);
-	
+
 			Destroyed += HandleDestroyed;
-	
+
 			AddEvents ((int) EventMask.KeyPressMask
-				   | (int) EventMask.KeyReleaseMask 
-				   | (int) EventMask.PointerMotionMask);
-			
+			| (int) EventMask.KeyReleaseMask
+			| (int) EventMask.PointerMotionMask);
+
 			CanFocus = true;
-	
+
 			//FSpot.Global.ModifyColors (this);
 		}
-		
-		public IconView (FSpot.IBrowsableCollection collection) : this () 
+
+		public IconView (FSpot.IBrowsableCollection collection) : this ()
 		{
 			this.collection = collection;
 			this.selection = new SelectionCollection (collection);
-			
+
 			Name = "ImageContainer";
 			collection.Changed += HandleChanged;
 			collection.ItemsChanged += HandleItemsChanged;
-	
+
 			selection.DetailedChanged += HandleSelectionChanged;
 		}
-	
+
 		private void HandleSelectionChanged (FSpot.IBrowsableCollection collection, int [] ids)
 		{
 			if (ids == null)
 				QueueDraw ();
-			else 
+			else
 				foreach (int id in ids)
 					InvalidateCell (id);
 		}
-	
+
 		private void HandleChanged (FSpot.IBrowsableCollection sender)
 		{
 			// FIXME we should probably try to merge the selection forward
@@ -251,7 +253,7 @@
 			suppress_scroll = true;
 			QueueResize ();
 		}
-		
+
 		private void HandleItemsChanged (FSpot.IBrowsableCollection sender, BrowsableArgs args)
 		{
 			foreach (int item in args.Items) {
@@ -259,35 +261,35 @@
 				InvalidateCell (item);
 			}
 		}
-	
+
 		//
 		// IPhotoSelection
 		//
-	
+
 		protected FSpot.IBrowsableCollection collection;
 		public FSpot.IBrowsableCollection Collection {
 			get {
 				return collection;
 			}
 		}
-	
+
 		protected SelectionCollection selection;
 		public SelectionCollection Selection {
 			get {
 				return selection;
 			}
 		}
-	
+
 		// FIXME right now a selection change triggers a complete view redraw
 		// This should be optimized away by directly notifyiing the view of changed
-		// indexes rather than having the view connect to the collection.Changed event.      
+		// indexes rather than having the view connect to the collection.Changed event.
 		public class SelectionCollection : IBrowsableCollection {
 			IBrowsableCollection parent;
 			Hashtable selected_cells;
 			int [] selection;
 			IBrowsableItem [] items;
 			IBrowsableItem [] old;
-	
+
 			public SelectionCollection (IBrowsableCollection collection)
 			{
 				this.selected_cells = new Hashtable ();
@@ -295,90 +297,90 @@
 				this.parent.Changed += HandleParentChanged;
 				this.parent.ItemsChanged += HandleParentItemsChanged;
 			}
-	
+
 			private void HandleParentChanged (IBrowsableCollection collection)
 			{
 				IBrowsableItem [] local = old;
 				selected_cells.Clear ();
 				ClearCached ();
-	
+
 				if (old != null) {
 					int i = 0;
-	
+
 					for (i = 0; i < local.Length; i++) {
 						int parent_index = parent.IndexOf (local [i]);
 						if (parent_index >= 0)
 							this.Add (parent_index, false);
 					}
 				}
-	
+
 				// Call the directly so that we don't reset old immediately this way the old selection
 				// set isn't actually lost until we change it.
 				if (this.Changed != null)
 					Changed (this);
-	
+
 				if (this.DetailedChanged != null)
 					DetailedChanged (this, null);
-	
+
 			}
-			
+
 			public void MarkChanged (int item)
 			{
 				// Forward the change event up to our parent
 				// we'll fire the event when the parent calls us back
 				parent.MarkChanged ((int) selected_cells [item]);
 			}
-	
+
 			private void HandleParentItemsChanged (IBrowsableCollection collection, BrowsableArgs args)
-			{			
+			{
 				if (this.ItemsChanged == null)
 					return;
-	
+
 				ArrayList local_ids = new ArrayList ();
 				foreach (int parent_index in args.Items) {
 					// If the item isn't part of the selection ignore it
 					if (!this.Contains (collection [parent_index]))
 						return;
-	
+
 					int local_index = this.IndexOf (parent_index);
 					if (local_index >= 0)
 						local_ids.Add (local_index);
 				}
-	
+
 				if (local_ids.Count == 0)
 					return;
-	
+
 				ItemsChanged (this, new BrowsableArgs ((int [])local_ids.ToArray (typeof (int))));
 			}
-	
+
 			public int [] Ids {
 				get {
 					if (selection != null)
 						return selection;
-					
+
 					selection = new int [selected_cells.Count];
-					
+
 					int i = 0;
 					foreach (int cell in selected_cells.Values)
 						selection [i ++] = cell;
-					
+
 					Array.Sort (selection);
 					return selection;
 				}
 			}
-			
+
 			public IBrowsableItem this [int index] {
 				get {
 					int [] ids = this.Ids;
 					return parent [ids[index]];
 				}
 			}
-	
+
 			public IBrowsableItem [] Items {
 				get {
 					if (items != null)
 						return items;
-					
+
 					int [] ids = this.Ids;
 					items = new IBrowsableItem [ids.Length];
 					for (int i = 0; i < items.Length; i++) {
@@ -387,176 +389,176 @@
 					return items;
 				}
 			}
-	
+
 			public void Clear ()
 			{
 				Clear (true);
 			}
-	
+
 			public void Clear (bool update)
 			{
 				int [] ids = Ids;
 				selected_cells.Clear ();
 				SignalChange (ids);
 			}
-	
+
 			public void Add (IBrowsableItem item)
 			{
 				if (this.Contains (item))
 					return;
-	
+
 				int index = parent.IndexOf (item);
 				this.Add (index);
 			}
-	
+
 			public int Count {
 				get {
 					return selected_cells.Count;
 				}
 			}
-	
+
 			public bool Contains (IBrowsableItem item)
 			{
 				return selected_cells.ContainsKey (item);
 			}
-	
+
 			public bool Contains (int num)
 			{
 				if (num < 0 || num > parent.Count)
 					return false;
-	
+
 				return this.Contains (parent [num]);
 			}
-			
+
 			public void Add (int num)
 			{
 				this.Add (num, true);
 			}
-	
+
 			private void Add (int num, bool notify)
 			{
 				if (num == -1)
 					return;
-			       
+
 				if (this.Contains (num))
-				    return;
-				
+					return;
+
 				IBrowsableItem item = parent [num];
 				selected_cells [item] = num;
-	
+
 				if (notify)
 					SignalChange (new int [] {num});
 			}
-	
+
 			public void Add (int start, int end)
 			{
 				if (start == -1 || end == -1)
 					return;
-				
+
 				int current = Math.Min (start, end);
-				int final = Math.Max (start, end);				
+				int final = Math.Max (start, end);
 				int count = final - current + 1;
 				int [] ids = new int [count];
-	
+
 				for (int i = 0; i < count; i++) {
 					this.Add (current, false);
 					ids [i] = current;
 					current++;
 				}
-				
+
 				SignalChange (ids);
 			}
-			
+
 			// Remove a range, except the start entry
 			public void Remove (int start, int end)
 			{
 				if (start == -1 || end == -1)
 					return;
-				
+
 				int current = Math.Min (start + 1, end);
-				int final = Math.Max (start - 1, end);				
+				int final = Math.Max (start - 1, end);
 				int count = final - current + 1;
 				int [] ids = new int [count];
-	
+
 				for (int i = 0; i < count; i++) {
 					this.Remove (current, false);
 					ids [i] = current;
 					current++;
 				}
-	
+
 				SignalChange (ids);
 			}
-	
+
 			public int IndexOf (int parent_index)
 			{
 				return System.Array.IndexOf (this.Ids, parent_index);
 			}
-			
+
 			public int IndexOf (IBrowsableItem item)
 			{
 				if (!this.Contains (item))
 					return -1;
-	
+
 				int parent_index = (int) selected_cells [item];
 				return System.Array.IndexOf (Ids, parent_index);
 			}
-	
+
 			public void Remove (int cell)
 			{
 				Remove (cell, true);
 			}
-	
+
 			private void Remove (int cell, bool notify)
 			{
 				IBrowsableItem item = parent [cell];
 				if (item != null)
 					this.Remove (item, notify);
-	
+
 			}
-	
+
 			public void Remove (IBrowsableItem item)
 			{
 				Remove (item, true);
 			}
-	
+
 			private void Remove (IBrowsableItem item, bool notify)
 			{
 				if (item == null)
 					return;
-	
+
 				int parent_index = (int) selected_cells [item];
 				selected_cells.Remove (item);
-	
+
 				if (notify)
 					SignalChange (new int [] {parent_index});
 			}
-	
+
 			public event IBrowsableCollectionChangedHandler Changed;
 			public event IBrowsableCollectionItemsChangedHandler ItemsChanged;
-	
+
 			public delegate void DetailedCollectionChanged (IBrowsableCollection collection, int [] ids);
 			public event DetailedCollectionChanged DetailedChanged;
-			
+
 			private void ClearCached ()
 			{
 				selection = null;
 				items = null;
 			}
-			
-			private void SignalChange (int [] ids) 
+
+			private void SignalChange (int [] ids)
 			{
 				ClearCached ();
 				old = this.Items;
-				
-				
+
+
 				if (Changed != null)
 					Changed (this);
-				
+
 				if (DetailedChanged!= null)
 					DetailedChanged (this, ids);
 			}
 		}
-	
+
 		// Updating.
 		public void UpdateThumbnail (int thumbnail_num)
 		{
@@ -565,80 +567,80 @@
 			cache.Remove (thumbnail_path);
 			InvalidateCell (thumbnail_num);
 		}
-	
+
 		// Cell Geometry
 		public int CellAtPosition (int x, int y)
 		{
 			return CellAtPosition (x, y, true);
 		}
-	
+
 		public int CellAtPosition (int x, int y, bool crop_visible)
 		{
 			if (collection == null)
 				return -1;
-			
-			if (crop_visible 
-			    && ((y < (int)Vadjustment.Value || y > (int)Vadjustment.Value + Allocation.Height)
-				|| (x < (int)Hadjustment.Value || x > (int)Hadjustment.Value + Allocation.Width)))
-				return -1;
-	
+
+			if (crop_visible
+				&& ((y < (int)Vadjustment.Value || y > (int)Vadjustment.Value + Allocation.Height)
+			|| (x < (int)Hadjustment.Value || x > (int)Hadjustment.Value + Allocation.Width)))
+			return -1;
+
 			if (x < BORDER_SIZE || x >= BORDER_SIZE + cells_per_row * cell_width)
 				return -1;
 			if (y < BORDER_SIZE || y >= BORDER_SIZE + (collection.Count / cells_per_row + 1) * cell_height)
 				return -1;
-	
+
 			int column = (int) ((x - BORDER_SIZE) / cell_width);
 			int row = (int) ((y - BORDER_SIZE) / cell_height);
 			int cell_num = column + row * cells_per_row;
-	
+
 			if (cell_num < collection.Count)
 				return (int) cell_num;
 			else
 				return -1;
 		}
-		
+
 		public int TopLeftVisibleCell ()
 		{
 			//return CellAtPosition(BORDER_SIZE, (int)Vadjustment.Value + BORDER_SIZE + 8);
 			return CellAtPosition(BORDER_SIZE, (int) (Vadjustment.Value + Allocation.Height * (Vadjustment.Value / Vadjustment.Upper)) + BORDER_SIZE + 8);
 		}
-	
+
 		public void GetCellCenter (int cell_num, out int x, out int y)
 		{
 			if (cell_num == -1) {
 				x = -1;
 				y = -1;
 			}
-	
+
 			x = BORDER_SIZE + (cell_num % cells_per_row) * cell_width + cell_width / 2;
 			y = BORDER_SIZE + (cell_num / cells_per_row) * cell_height + cell_height / 2;
 		}
-	
+
 		public void GetCellSize (int cell_num, out int w, out int h)
 		{
 			// Trivial for now.
 			w = cell_width;
 			h = cell_height;
 		}
-	
-	
+
+
 		// Private utility methods.
 		public void SelectAllCells ()
 		{
 			selection.Add (0, collection.Count - 1);
 		}
-	
+
 		private void ToggleCell (int cell_num)
 		{
 			if (selection.Contains (cell_num))
-			        selection.Remove (cell_num);
+				selection.Remove (cell_num);
 			else
 				selection.Add (cell_num);
 		}
-	
-	
+
+
 		// Layout and drawing.
-		
+
 		// FIXME I can't find a c# wrapper for the C PANGO_PIXELS () macro
 		// So this Function is for that.
 		protected static int PangoPixels (int val)
@@ -646,98 +648,98 @@
 			return val >= 0 ? (val + 1024 / 2) / 1024 :
 				(val - 1024 / 2) / 1024;
 		}
-		
+
 		protected virtual void UpdateLayout ()
 		{
 			UpdateLayout (Allocation);
 		}
-	
+
 		protected virtual void UpdateLayout (Gdk.Rectangle Allocation)
 		{
 			int available_width = Allocation.Width - 2 * BORDER_SIZE;
-	
+
 			cell_width = ThumbnailWidth + 2 * cell_border_width;
 			cell_height = ThumbnailHeight + 2 * cell_border_width;
 			cells_per_row = Math.Max ((int) (available_width / cell_width), 1);
 			cell_width += (available_width - cells_per_row * cell_width) / cells_per_row;
-			
+
 			if (DisplayTags || DisplayDates || DisplayFilenames)
 				cell_height += tag_icon_vspacing;
-	
+
 			if (DisplayTags)
 				cell_height += tag_icon_size;
-			
+
 			if (DisplayDates && this.Style != null) {
-				Pango.FontMetrics metrics = this.PangoContext.GetMetrics (this.Style.FontDescription, 
-											  Pango.Language.FromString ("en_US"));
+				Pango.FontMetrics metrics = this.PangoContext.GetMetrics (this.Style.FontDescription,
+						Pango.Language.FromString ("en_US"));
 				cell_height += PangoPixels (metrics.Ascent + metrics.Descent);
 			}
-	
+
 			if (DisplayFilenames && this.Style != null) {
 				Pango.FontMetrics metrics = this.PangoContext.GetMetrics (this.Style.FontDescription,
-											Pango.Language.FromString ("en_US"));
+						Pango.Language.FromString ("en_US"));
 				cell_height += PangoPixels (metrics.Ascent + metrics.Descent);
 			}
-	
+
 			int num_thumbnails;
 			if (collection != null)
 				num_thumbnails = collection.Count;
 			else
 				num_thumbnails = 0;
-	
+
 			int num_rows = num_thumbnails / cells_per_row;
 			if (num_thumbnails % cells_per_row != 0)
 				num_rows ++;
-	
+
 			int height = num_rows * cell_height + 2 * BORDER_SIZE;
-	
+
 			Vadjustment.StepIncrement = cell_height;
 			int x = (int)(Hadjustment.Value);
 			int y = (int)(height * scroll_value);
 			SetSize (x, y, (int) Allocation.Width, (int) height);
 		}
-	
+
 		void SetSize (int x, int y, int width, int height)
 		{
-			bool xchange = false; 
-			bool ychange = false; 
-	
+			bool xchange = false;
+			bool ychange = false;
+
 			Hadjustment.Upper = System.Math.Max (Allocation.Width, width);
 			Vadjustment.Upper = System.Math.Max (Allocation.Height, height);
-	
+
 			if (scroll) {
 				xchange = (int)(Hadjustment.Value) != x;
 				ychange = (int)(Vadjustment.Value) != y;
 				scroll = false;
 			}
-	
-			if (IsRealized) 
+
+			if (IsRealized)
 				BinWindow.FreezeUpdates ();
-	
+
 			if (xchange || ychange) {
-				if (IsRealized) 
+				if (IsRealized)
 					BinWindow.MoveResize (-x, -y, (int)(Hadjustment.Upper), (int)(Vadjustment.Upper));
 				Vadjustment.Value = y;
 				Hadjustment.Value = x;
 			}
-	
+
 			if (scroll)
 				scroll = false;
-	
+
 			if (this.Width != Allocation.Width || this.Height != Allocation.Height)
 				SetSize ((uint)Allocation.Width, (uint)height);
-			
+
 			if (xchange || ychange) {
 				Vadjustment.ChangeValue ();
 				Hadjustment.ChangeValue ();
 			}
-			
+
 			if (IsRealized) {
 				BinWindow.ThawUpdates ();
 				BinWindow.ProcessUpdates (true);
 			}
 		}
-	
+
 		int ThrobExpansion (int cell, bool selected)
 		{
 			int expansion = 0;
@@ -748,88 +750,88 @@
 					s = Math.Cos (-2 * Math.PI * t);
 				else
 					s = 1 - Math.Cos (-2 * Math.PI * t);
-				
+
 				expansion = (int) (SELECTION_THICKNESS * s);
 			} else if (selected) {
 				expansion = SELECTION_THICKNESS;
 			}
-	
+
 			return expansion;
 		}
-	
+
 		System.Collections.Hashtable date_layouts = new Hashtable ();
 		// FIXME Cache the GCs?
 		private void DrawCell (int thumbnail_num, Gdk.Rectangle area)
 		{
 			Gdk.Rectangle bounds = CellBounds (thumbnail_num);
-			
+
 			if (!bounds.Intersect (area, out area))
 				return;
-			
+
 			FSpot.IBrowsableItem photo = collection [thumbnail_num];
 			string thumbnail_path = FSpot.ThumbnailGenerator.ThumbnailPath (photo.DefaultVersionUri);
-			
+
 			FSpot.PixbufCache.CacheEntry entry = cache.Lookup (thumbnail_path);
 			if (entry == null)
 				cache.Request (thumbnail_path, thumbnail_num, ThumbnailWidth, ThumbnailHeight);
 			else
 				entry.Data = thumbnail_num;
-	
+
 			bool selected = selection.Contains (thumbnail_num);
 			StateType cell_state = selected ? (HasFocus ? StateType.Selected : StateType.Active) : State;
-			
+
 			if (cell_state != State)
-				Style.PaintBox (Style, BinWindow, cell_state, 
-						ShadowType.Out, area, this, "IconView", 
-						bounds.X, bounds.Y,
-						bounds.Width - 1, bounds.Height - 1);
-			
+				Style.PaintBox (Style, BinWindow, cell_state,
+					ShadowType.Out, area, this, "IconView",
+					bounds.X, bounds.Y,
+					bounds.Width - 1, bounds.Height - 1);
+
 			Gdk.Rectangle focus = Gdk.Rectangle.Inflate (bounds, -3, -3);
-	
+
 			if (HasFocus && thumbnail_num == FocusCell) {
-				Style.PaintFocus(Style, BinWindow, 
-						 cell_state, area, 
-						 this, null, 
-						 focus.X, focus.Y, 
-						 focus.Width, focus.Height);
+				Style.PaintFocus(Style, BinWindow,
+						cell_state, area,
+						this, null,
+						focus.X, focus.Y,
+						focus.Width, focus.Height);
 			}
-	
+
 			Gdk.Rectangle region = Gdk.Rectangle.Zero;
 			Gdk.Rectangle image_bounds = Gdk.Rectangle.Inflate (bounds, -cell_border_width, -cell_border_width);
 			int expansion = ThrobExpansion (thumbnail_num, selected);
-	
+
 			Gdk.Pixbuf thumbnail = null;
 			if (entry != null)
 				thumbnail = entry.ShallowCopyPixbuf ();
-	
+
 			if (Gdk.Rectangle.Inflate (image_bounds, expansion + 1, expansion + 1).Intersect (area, out image_bounds) && thumbnail != null) {
-				
-				PixbufUtils.Fit (thumbnail, ThumbnailWidth, ThumbnailHeight, 
-						 true, out region.Width, out region.Height);
-				
+
+				PixbufUtils.Fit (thumbnail, ThumbnailWidth, ThumbnailHeight,
+						true, out region.Width, out region.Height);
+
 				region.X = (int) (bounds.X + (bounds.Width - region.Width) / 2);
 				region.Y = (int) bounds.Y + ThumbnailHeight - region.Height + cell_border_width;
-				
-				if (Math.Abs (region.Width - thumbnail.Width) > 1 
+
+				if (Math.Abs (region.Width - thumbnail.Width) > 1
 					&& Math.Abs (region.Height - thumbnail.Height) > 1)
-					cache.Reload (entry, thumbnail_num, thumbnail.Width, thumbnail.Height);
-	
+				cache.Reload (entry, thumbnail_num, thumbnail.Width, thumbnail.Height);
+
 				region = Gdk.Rectangle.Inflate (region, expansion, expansion);
-				Pixbuf temp_thumbnail;			
+				Pixbuf temp_thumbnail;
 				region.Width = System.Math.Max (1, region.Width);
-				region.Height = System.Math.Max (1, region.Height); 
-	
-				if (Math.Abs (region.Width - thumbnail.Width) > 1 
+				region.Height = System.Math.Max (1, region.Height);
+
+				if (Math.Abs (region.Width - thumbnail.Width) > 1
 					&& Math.Abs (region.Height - thumbnail.Height) > 1) {
 					if (region.Width < thumbnail.Width && region.Height < thumbnail.Height) {
 						/*
-						temp_thumbnail = PixbufUtils.ScaleDown (thumbnail, 
-											region.Width, region.Height);
+						temp_thumbnail = PixbufUtils.ScaleDown (thumbnail,
+								region.Width, region.Height);
 						*/
 						temp_thumbnail = thumbnail.ScaleSimple (region.Width, region.Height,
-											InterpType.Bilinear);
-										      
-						
+								InterpType.Bilinear);
+
+
 						lock (entry) {
 							if (entry.Reload && expansion == 0 && !entry.IsDisposed) {
 								entry.SetPixbufExtended (PixbufUtils.ShallowCopy (temp_thumbnail), false);
@@ -837,45 +839,45 @@
 							}
 						}
 					} else {
-						temp_thumbnail = thumbnail.ScaleSimple (region.Width, region.Height, 
-											InterpType.Bilinear);
+						temp_thumbnail = thumbnail.ScaleSimple (region.Width, region.Height,
+								InterpType.Bilinear);
 					}
-	
+
 					PixbufUtils.CopyThumbnailOptions (thumbnail, temp_thumbnail);
 				} else
 					temp_thumbnail = thumbnail;
-	
+
 				// FIXME There seems to be a rounding issue between the
 				// scaled thumbnail sizes, we avoid this for now by using
 				// the actual thumnail sizes here.
 				region.Width = temp_thumbnail.Width;
 				region.Height = temp_thumbnail.Height;
-				
+
 				Gdk.Rectangle draw = Gdk.Rectangle.Inflate (region, 1, 1);
-				
-				if (!temp_thumbnail.HasAlpha) 
+
+				if (!temp_thumbnail.HasAlpha)
 					Style.PaintShadow (Style, BinWindow, cell_state,
-							   ShadowType.Out, area, this, 
-							   "IconView", 
-							   draw.X, draw.Y, 
-							   draw.Width, draw.Height);			
-				
+						ShadowType.Out, area, this,
+						"IconView",
+						draw.X, draw.Y,
+						draw.Width, draw.Height);
+
 				if (region.Intersect (area, out draw)) {
 					temp_thumbnail.RenderToDrawable (BinWindow, Style.WhiteGC,
-									 draw.X - region.X, 
-									 draw.Y - region.Y, 
-									 draw.X, draw.Y, 
-									 draw.Width, draw.Height, 
-									 RgbDither.None, 
-									 draw.X, draw.Y);
+							draw.X - region.X,
+							draw.Y - region.Y,
+							draw.X, draw.Y,
+							draw.Width, draw.Height,
+							RgbDither.None,
+							draw.X, draw.Y);
 				}
-				
+
 				if (temp_thumbnail != thumbnail) {
 					temp_thumbnail.Dispose ();
 				}
-				
+
 			}
-			
+
 			if (thumbnail != null) {
 				thumbnail.Dispose ();
 			}
@@ -897,99 +899,99 @@
 				} else {
 					date = photo.Time.ToLocalTime ().ToShortDateString ();
 				}
-	
+
 				Pango.Layout layout = (Pango.Layout)date_layouts [date];
 				if (layout == null) {
 					layout = new Pango.Layout (this.PangoContext);
 					layout.SetText (date);
 					date_layouts [date] = layout;
 				}
-				
+
 				layout.GetPixelSize (out layout_bounds.Width, out layout_bounds.Height);
-	
+
 				layout_bounds.Y = bounds.Y + bounds.Height - cell_border_width - layout_bounds.Height + tag_icon_vspacing;
 				layout_bounds.X = bounds.X + (bounds.Width - layout_bounds.Width) / 2;
-				
+
 				if (DisplayTags)
 					layout_bounds.Y -= tag_icon_size;
-	
+
 				if (DisplayFilenames) {
 					Pango.FontMetrics metrics = this.PangoContext.GetMetrics (this.Style.FontDescription,
 							Pango.Language.FromString ("en_US"));
-					layout_bounds.Y -= PangoPixels (metrics.Ascent + metrics.Descent); 
+					layout_bounds.Y -= PangoPixels (metrics.Ascent + metrics.Descent);
 				}
-	
+
 				if (layout_bounds.Intersect (area, out region)) {
 					Style.PaintLayout (Style, BinWindow, cell_state,
-							   true, area, this, "IconView", 
-							   layout_bounds.X, layout_bounds.Y, 
-							   layout);
+							true, area, this, "IconView",
+							layout_bounds.X, layout_bounds.Y,
+							layout);
 				}
 			}
-	
+
 			if (DisplayFilenames) {
-	
+
 				string filename = System.IO.Path.GetFileName (photo.DefaultVersionUri.LocalPath);
 				Pango.Layout layout = new Pango.Layout (this.PangoContext);
 				layout.SetText (filename);
-				
+
 				layout.GetPixelSize (out layout_bounds.Width, out layout_bounds.Height);
-	
+
 				layout_bounds.Y = bounds.Y + bounds.Height - cell_border_width - layout_bounds.Height + tag_icon_vspacing;
 				layout_bounds.X = bounds.X + (bounds.Width - layout_bounds.Width) / 2;
-				
+
 				if (DisplayTags)
 					layout_bounds.Y -= tag_icon_size;
-	
+
 				if (layout_bounds.Intersect (area, out region)) {
 					Style.PaintLayout (Style, BinWindow, cell_state,
-							   true, area, this, "IconView", 
-							   layout_bounds.X, layout_bounds.Y, 
-							   layout);
+							true, area, this, "IconView",
+							layout_bounds.X, layout_bounds.Y,
+							layout);
 				}
-				
+
 			}
-	
+
 			if (DisplayTags) {
 				Tag [] tags = photo.Tags;
 				Gdk.Rectangle tag_bounds;
-	
+
 				tag_bounds.X = bounds.X + (bounds.Width  + tag_icon_hspacing - tags.Length * (tag_icon_size + tag_icon_hspacing)) / 2;
 				tag_bounds.Y = bounds.Y + bounds.Height - cell_border_width - tag_icon_size + tag_icon_vspacing;
 				tag_bounds.Width = tag_icon_size;
 				tag_bounds.Height = tag_icon_size;
-				
+
 				foreach (Tag t in tags) {
 					if (t == null)
 						continue;
-	
+
 					Pixbuf icon = t.Icon;
-	
-			                Tag tag_iter = t.Category;
-			                while (icon == null && tag_iter != Core.Database.Tags.RootCategory && tag_iter != null) {
-			                    icon = tag_iter.Icon;
-			                    tag_iter = tag_iter.Category;
-			                }
-			
-			                if (icon == null)
-			                    continue;
-			
+
+					Tag tag_iter = t.Category;
+					while (icon == null && tag_iter != Core.Database.Tags.RootCategory && tag_iter != null) {
+						icon = tag_iter.Icon;
+						tag_iter = tag_iter.Category;
+					}
+
+					if (icon == null)
+						continue;
+
 					if (tag_bounds.Intersect (area, out region)) {
 						Pixbuf scaled_icon;
 						if (icon.Width == tag_bounds.Width) {
 							scaled_icon = icon;
 						} else {
-							scaled_icon = icon.ScaleSimple (tag_bounds.Width, 
-											tag_bounds.Height, 
-											InterpType.Bilinear);
+							scaled_icon = icon.ScaleSimple (tag_bounds.Width,
+									tag_bounds.Height,
+									InterpType.Bilinear);
 						}
-						
+
 						scaled_icon.RenderToDrawable (BinWindow, Style.WhiteGC,
-									      region.X - tag_bounds.X, 
-									      region.Y - tag_bounds.Y, 
-									      region.X, region.Y, 
-									      region.Width, region.Height,
-									      RgbDither.None, region.X, region.Y);
+								region.X - tag_bounds.X,
+								region.Y - tag_bounds.Y,
+								region.X, region.Y,
+								region.Width, region.Height,
+								RgbDither.None, region.X, region.Y);
 						if (scaled_icon != icon) {
 							scaled_icon.Dispose ();
 						}
@@ -997,48 +999,48 @@
 					tag_bounds.X += tag_bounds.Width + tag_icon_hspacing;
 				}
 			}
-	
+
 		}
-	
+
 		private void DrawAllCells (Gdk.Rectangle area)
 		{
 			if (cell_width == 0 || cell_height == 0)
 				return;
-				
+
 			int start_cell_column = Math.Max ((area.X - BORDER_SIZE) / cell_width, 0);
 			int start_cell_row = Math.Max ((area.Y - BORDER_SIZE) / cell_height, 0);
 			int start_cell_num = start_cell_column + start_cell_row * cells_per_row;
-	
+
 			int start_cell_x, cell_y;
 			GetCellPosition (start_cell_num, out start_cell_x, out cell_y);
-	
+
 			int end_cell_column = Math.Max ((area.X + area.Width - BORDER_SIZE) / cell_width, 0);
 			int end_cell_row = Math.Max ((area.Y + area.Height - BORDER_SIZE) / cell_height, 0);
-	
+
 			int num_rows = end_cell_row - start_cell_row + 1;
 			int num_cols = Math.Min (end_cell_column - start_cell_column + 1,
-						 cells_per_row - start_cell_column);
-	
+					cells_per_row - start_cell_column);
+
 			int i, cell_num;
 			//Preload (area, false);
-	
+
 			for (i = 0, cell_num = start_cell_num;
-			     i < num_rows && cell_num < collection.Count;
-			     i ++) {
+				i < num_rows && cell_num < collection.Count;
+			i ++) {
 				int cell_x = start_cell_x;
-	
+
 				//Console.WriteLine ("Drawing row {0}", start_cell_row + i);
 				for (int j = 0; j < num_cols && cell_num + j < collection.Count; j ++) {
 					DrawCell (cell_num + j, area);
 					cell_x += cell_width;
 				}
-	
+
 				cell_y += cell_height;
 				cell_num += cells_per_row;
 			}
-	
+
 		}
-	
+
 		private void GetCellPosition (int cell_num, out int x, out int y)
 		{
 			if (cells_per_row == 0) {
@@ -1046,145 +1048,145 @@
 				y = 0;
 				return;
 			}
-				
+
 			int row = cell_num / cells_per_row;
 			int col = cell_num % cells_per_row;
-	
+
 			x = col * cell_width + BORDER_SIZE;
 			y = row * cell_height + BORDER_SIZE;
 		}
-	
-	
+
+
 		// Scrolling.  We do this in an idle loop so we can catch up if the user scrolls quickly.
-	
+
 		private void Scroll ()
 		{
 			int ystep = (int)(Vadjustment.Value - y_offset);
 			int xstep = (int)(Hadjustment.Value - x_offset);
-			
+
 			if (xstep > 0)
 				xstep = Math.Max (xstep, Allocation.Width);
-			else 
+			else
 				xstep = Math.Min (xstep, -Allocation.Width);
-	
+
 			if (ystep > 0)
 				ystep = Math.Max (ystep, Allocation.Height);
-			else 
+			else
 				ystep = Math.Min (ystep, -Allocation.Height);
-	
+
 			Gdk.Rectangle area;
-	
+
 			Gdk.Region offscreen = new Gdk.Region ();
 			/*
-			System.Console.WriteLine ("step ({0}, {1}) allocation ({2},{3},{4},{5})", 
-						  xstep, ystep, Hadjustment.Value, Vadjustment.Value, 
-						  Allocation.Width, Allocation.Height);
+			System.Console.WriteLine ("step ({0}, {1}) allocation ({2},{3},{4},{5})",
+					xstep, ystep, Hadjustment.Value, Vadjustment.Value,
+					Allocation.Width, Allocation.Height);
 			*/
-			/*		
-			area = new Gdk.Rectangle (Math.Max ((int) (Hadjustment.Value + 4 * xstep), 0),  
-						  Math.Max ((int) (Vadjustment.Value + 4 * ystep), 0),
-						  Allocation.Width,
-						  Allocation.Height);
+			/*
+			area = new Gdk.Rectangle (Math.Max ((int) (Hadjustment.Value + 4 * xstep), 0),
+					Math.Max ((int) (Vadjustment.Value + 4 * ystep), 0),
+					Allocation.Width,
+					Allocation.Height);
 			offscreen.UnionWithRect (area);
-			area = new Gdk.Rectangle (Math.Max ((int) (Hadjustment.Value + 3 * xstep), 0),  
-						  Math.Max ((int) (Vadjustment.Value + 3 * ystep), 0),
-						  Allocation.Width,
-						  Allocation.Height);
+			area = new Gdk.Rectangle (Math.Max ((int) (Hadjustment.Value + 3 * xstep), 0),
+					Math.Max ((int) (Vadjustment.Value + 3 * ystep), 0),
+					Allocation.Width,
+					Allocation.Height);
 			offscreen.UnionWithRect (area);
 			*/
-			area = new Gdk.Rectangle (Math.Max ((int) (Hadjustment.Value + 2 * xstep), 0),  
-						  Math.Max ((int) (Vadjustment.Value + 2 * ystep), 0),
-						  Allocation.Width,
-						  Allocation.Height);
+			area = new Gdk.Rectangle (Math.Max ((int) (Hadjustment.Value + 2 * xstep), 0),
+					Math.Max ((int) (Vadjustment.Value + 2 * ystep), 0),
+					Allocation.Width,
+					Allocation.Height);
 			offscreen.UnionWithRect (area);
-			area = new Gdk.Rectangle (Math.Max ((int) (Hadjustment.Value + xstep), 0),  
-						  Math.Max ((int) (Vadjustment.Value + ystep), 0),
-						  Allocation.Width,
-						  Allocation.Height);		
+			area = new Gdk.Rectangle (Math.Max ((int) (Hadjustment.Value + xstep), 0),
+					Math.Max ((int) (Vadjustment.Value + ystep), 0),
+					Allocation.Width,
+					Allocation.Height);
 			offscreen.UnionWithRect (area);
-			area = new Gdk.Rectangle ((int) Hadjustment.Value, 
-						  (int) Vadjustment.Value,
-						  Allocation.Width,
-						  Allocation.Height);
-	
+			area = new Gdk.Rectangle ((int) Hadjustment.Value,
+					(int) Vadjustment.Value,
+					Allocation.Width,
+					Allocation.Height);
+
 			// always load the onscreen area last to make sure it
 			// is first in the loading
 			Gdk.Region onscreen = Gdk.Region.Rectangle (area);
 			offscreen.Subtract (onscreen);
-	
+
 			PreloadRegion (offscreen, ystep);
 			Preload (area, false);
-	
+
 			y_offset = (int) Vadjustment.Value;
 			x_offset = (int) Hadjustment.Value;
 		}
-		
-	        private void PreloadRegion (Gdk.Region region, int step)
+
+		private void PreloadRegion (Gdk.Region region, int step)
 		{
 			Gdk.Rectangle [] rects = region.GetRectangles ();
-			
+
 			if (step < 0)
 				System.Array.Reverse (rects);
-	
+
 			foreach (Gdk.Rectangle preload in rects) {
 				Preload (preload, false);
 			}
 		}
-	
+
 		private void Preload (Gdk.Rectangle area, bool back)
 		{
 			if (cells_per_row ==0)
 				return;
-	
+
 			int start_cell_column = Math.Max ((area.X - BORDER_SIZE) / cell_width, 0);
 			int start_cell_row = Math.Max ((area.Y - BORDER_SIZE) / cell_height, 0);
 			int start_cell_num = start_cell_column + start_cell_row * cells_per_row;
-	
+
 			int end_cell_column = Math.Max ((area.X + area.Width - BORDER_SIZE) / cell_width, 0);
 			int end_cell_row = Math.Max ((area.Y + area.Height - BORDER_SIZE) / cell_height, 0);
-	
+
 			int i;
-	
+
 			FSpot.IBrowsableItem photo;
 			FSpot.PixbufCache.CacheEntry entry;
 			string thumbnail_path;
-	
+
 			// Preload the cache with images aroud the expose area
 			// FIXME the preload need to be tuned to the Cache size but this is a resonable start
-			
+
 			int cols = end_cell_column - start_cell_column + 1;
 			int rows = end_cell_row - start_cell_row + 1;
 			int len = rows * cols;
 			int scell = start_cell_num;
 			int ecell = scell + len;
 			if (scell > collection.Count - len) {
-			        ecell = collection.Count;
+				ecell = collection.Count;
 				scell = System.Math.Max (0, scell - len);
 			} else
 				ecell = scell + len;
-			
+
 			int mid = (ecell - scell) / 2;
 			for (i = 0; i < mid; i++)
-			{
+				{
 				int cell = back ? ecell - i - 1 : scell + mid + i;
-	
+
 				photo = collection [cell];
 				thumbnail_path = FSpot.ThumbnailGenerator.ThumbnailPath (photo.DefaultVersionUri);
-				
+
 				entry = cache.Lookup (thumbnail_path);
 				if (entry == null)
 					cache.Request (thumbnail_path, cell, ThumbnailWidth, ThumbnailHeight);
-	
+
 				cell = back ? scell + i : scell + mid - i - 1;
 				photo = collection [cell];
 				thumbnail_path = FSpot.ThumbnailGenerator.ThumbnailPath (photo.DefaultVersionUri);
-				
+
 				entry = cache.Lookup (thumbnail_path);
 				if (entry == null)
 					cache.Request (thumbnail_path, cell, ThumbnailWidth, ThumbnailHeight);
-			} 
+			}
 		}
-	
+
 		//
 		// The throb interface
 		//
@@ -1198,18 +1200,18 @@
 			throb_cell = cell_num;
 			if (throb_timer_id == 0)
 				throb_timer_id = GLib.Timeout.Add ((39000/throb_state_max)/100,
-								   new GLib.TimeoutHandler (HandleThrobTimer));
-	
+					new GLib.TimeoutHandler (HandleThrobTimer));
+
 			InvalidateCell (cell_num);
 		}
-		
+
 		private void CancelThrob ()
 		{
 			if (throb_timer_id != 0)
 				GLib.Source.Remove (throb_timer_id);
 		}
-	
-		private bool HandleThrobTimer () 
+
+		private bool HandleThrobTimer ()
 		{
 			InvalidateCell (throb_cell);
 			if (throb_state++ < throb_state_max) {
@@ -1220,75 +1222,75 @@
 				return false;
 			}
 		}
-	
-	 	public void ScrollTo (int cell_num)
-	 	{
+
+		public void ScrollTo (int cell_num)
+		{
 			ScrollTo (cell_num, true);
 		}
-	
+
 		public void ScrollTo (int cell_num, bool center)
 		{
 			if (!IsRealized)
 				return;
-	
+
 			Adjustment adjustment = Vadjustment;
 			int x;
 			int y;
-	
+
 			GetCellPosition (cell_num, out x, out y);
-	
+
 			if (y + cell_height > adjustment.Upper)
 				UpdateLayout ();
-	
+
 			if (center)
 				adjustment.Value = y + cell_height / 2 - adjustment.PageSize / 2;
 			else
 				adjustment.Value = y;
-			
+
 			adjustment.ChangeValue ();
-	
+
 		}
-		
+
 		public void ZoomIn ()
 		{
 			ThumbnailWidth = (int) (ThumbnailWidth * ZOOM_FACTOR);
 		}
-		
+
 		public void ZoomOut ()
 		{
 			ThumbnailWidth = (int) (ThumbnailWidth / ZOOM_FACTOR);
 		}
-	
+
 		// Event handlers.
-	
+
 		[GLib.ConnectBefore]
 		private void HandleAdjustmentValueChanged (object sender, EventArgs args)
 		{
 			Scroll ();
 		}
-	
+
 		private void HandlePixbufLoaded (FSpot.PixbufCache cache, FSpot.PixbufCache.CacheEntry entry)
 		{
 			Gdk.Pixbuf result = entry.ShallowCopyPixbuf ();
 			int order = (int) entry.Data;
-	
+
 			if (order >= 0 && order < collection.Count) {
 				System.Uri uri = collection [order].DefaultVersionUri;
-	
+
 				if (result == null && !System.IO.File.Exists (FSpot.ThumbnailGenerator.ThumbnailPath (uri)))
 					FSpot.ThumbnailGenerator.Default.Request (uri, 0, 256, 256);
-				
+
 				if (result == null)
 					return;
-				
+
 				if (!FSpot.PhotoLoader.ThumbnailIsValid (uri, result))
 					FSpot.ThumbnailGenerator.Default.Request (uri, 0, 256, 256);
 			}
-				
+
 			if (result == null)
 				return;
-	
-			// We have to do the scaling here rather than on load because we need to preserve the 
+
+			// We have to do the scaling here rather than on load because we need to preserve the
 			// Pixbuf option iformation to verify the thumbnail validity later
 			int width, height;
 			PixbufUtils.Fit (result, ThumbnailWidth, ThumbnailHeight, false, out width, out height);
@@ -1298,25 +1300,25 @@
 				result.Dispose ();
 				result = temp;
 			} else if (result.Width < ThumbnailWidth && result.Height < ThumbnailHeight) {
-				// FIXME this is a workaround to handle images whose actual size is smaller than 
+				// FIXME this is a workaround to handle images whose actual size is smaller than
 				// the thumbnail size, it needs to be fixed at a different level.
 				Gdk.Pixbuf temp = new Gdk.Pixbuf (Gdk.Colorspace.Rgb, true, 8, ThumbnailWidth, ThumbnailHeight);
 				temp.Fill (0x00000000);
-				result.CopyArea (0, 0, 
-						 result.Width, result.Height, 
-						 temp, 
-						 (temp.Width - result.Width)/ 2,
-						 temp.Height - result.Height);
-	
+				result.CopyArea (0, 0,
+						result.Width, result.Height,
+						temp,
+						(temp.Width - result.Width)/ 2,
+						temp.Height - result.Height);
+
 				result.Dispose ();
 				result = temp;
 			}
-	
+
 			cache.Update (entry, result);
 			InvalidateCell (order);
 		}
-		
-		public Gdk.Rectangle CellBounds (int cell) 
+
+		public Gdk.Rectangle CellBounds (int cell)
 		{
 			Rectangle bounds;
 			GetCellPosition (cell, out bounds.X, out bounds.Y);
@@ -1324,70 +1326,70 @@
 			bounds.Height = cell_height;
 			return bounds;
 		}
-	
-		public void InvalidateCell (int order) 
-		{		
+
+		public void InvalidateCell (int order)
+		{
 			Rectangle cell_area = CellBounds (order);
 			// FIXME where are we computing the bounds incorrectly
 			cell_area.Width -= 1;
 			cell_area.Height -= 1;
-			Gdk.Rectangle visible = new Gdk.Rectangle ((int)Hadjustment.Value, 
-								   (int)Vadjustment.Value, 
-								   Allocation.Width, 
-								   Allocation.Height);
-	
+			Gdk.Rectangle visible = new Gdk.Rectangle ((int)Hadjustment.Value,
+					(int)Vadjustment.Value,
+					Allocation.Width,
+					Allocation.Height);
+
 			if (BinWindow != null && cell_area.Intersect (visible, out cell_area))
 				BinWindow.InvalidateRect (cell_area, false);
 		}
-				
+
 		private void HandleScrollAdjustmentsSet (object sender, ScrollAdjustmentsSetArgs args)
 		{
 			if (args.Vadjustment != null)
 				args.Vadjustment.ValueChanged += new EventHandler (HandleAdjustmentValueChanged);
 		}
-	
-		private void HandleScrollEvent(object sender, ScrollEventArgs args) 
+
+		private void HandleScrollEvent(object sender, ScrollEventArgs args)
 		{
 			// Activated only by Control + ScrollWheelUp/ScrollWheelDown
 			if (ModifierType.ControlMask != (args.Event.State & ModifierType.ControlMask))
 				return;
-			
+
 			if (args.Event.Direction == ScrollDirection.Up) {
 				ZoomIn ();
 				// stop event from propagating.
-				args.RetVal = true;			
+				args.RetVal = true;
 			} else if (args.Event.Direction == ScrollDirection.Down ) {
 				ZoomOut ();
 				args.RetVal = true;
 			}
 		}
-	
-		private void SetColors () 
+
+		private void SetColors ()
 		{
 			if (IsRealized) {
 				BinWindow.Background = Style.BaseColors [(int)State];
 				GdkWindow.Background = Style.BaseColors [(int)State];
 			}
 		}
-	
+
 		protected override void OnRealized ()
 		{
 			base.OnRealized ();
 			SetColors ();
 		}
-	
+
 		protected override void OnStateChanged (StateType previous)
 		{
 			base.OnStateChanged (previous);
 			SetColors ();
 		}
-		
+
 		protected override void OnStyleSet (Style previous)
 		{
 			base.OnStyleSet (previous);
 			SetColors ();
 		}
-	
+
 		protected override void OnSizeAllocated (Gdk.Rectangle allocation)
 		{
 			scroll_value = (Vadjustment.Value)/ (Vadjustment.Upper);
@@ -1396,7 +1398,7 @@
 			UpdateLayout (allocation);
 			base.OnSizeAllocated (allocation);
 		}
-	
+
 		protected override bool OnExposeEvent (Gdk.EventExpose args)
 		{
 			foreach (Rectangle area in args.Region.GetRectangles ()) {
@@ -1404,29 +1406,29 @@
 			}
 			return base.OnExposeEvent (args);
 		}
-	
-	 	private void HandleButtonPressEvent (object obj, ButtonPressEventArgs args)
-	 	{
+
+		private void HandleButtonPressEvent (object obj, ButtonPressEventArgs args)
+		{
 			int cell_num = CellAtPosition ((int) args.Event.X, (int) args.Event.Y, false);
-	
+
 			args.RetVal = true;
-	
+
 			if (cell_num < 0) {
 				args.RetVal = false;
 				selection.Clear ();
 				return;
 			}
-	
+
 			switch (args.Event.Type) {
 			case EventType.TwoButtonPress:
 				if (args.Event.Button != 1
-				    || (args.Event.State &  (ModifierType.ControlMask
-							     | ModifierType.ShiftMask)) != 0)
-					return;
+					|| (args.Event.State &  (ModifierType.ControlMask
+				| ModifierType.ShiftMask)) != 0)
+				return;
 				if (DoubleClicked != null)
 					DoubleClicked (this, cell_num);
 				return;
-	
+
 			case EventType.ButtonPress:
 				GrabFocus ();
 				if ((args.Event.State & ModifierType.ControlMask) != 0) {
@@ -1437,64 +1439,64 @@
 					selection.Clear ();
 					selection.Add (cell_num);
 				}
-	
+
 				if (args.Event.Button == 3){
 					ContextMenu (args, cell_num);
 					return;
 				}
-				
+
 				if (args.Event.Button != 1)
 					return;
-	
+
 				FocusCell = cell_num;
 				return;
-	
+
 			default:
 				args.RetVal = false;
 				return;
 			}
 		}
-	
+
 		protected virtual void ContextMenu (ButtonPressEventArgs args, int cell_num)
 		{
 		}
-		
+
 		private void HandleButtonReleaseEvent (object sender, ButtonReleaseEventArgs args)
 		{
 			int cell_num = CellAtPosition ((int) args.Event.X, (int) args.Event.Y);
-	
+
 			args.RetVal = true;
-	
+
 			if (cell_num < 0) {
 				args.RetVal = false;
 				return;
 			}
-			
+
 			switch (args.Event.Type) {
-				case EventType.ButtonRelease:
-					if ((args.Event.State & ModifierType.ControlMask) == 0 &&
-					    (args.Event.State & ModifierType.ShiftMask  ) == 0 &&
+			case EventType.ButtonRelease:
+				if ((args.Event.State & ModifierType.ControlMask) == 0 &&
+						(args.Event.State & ModifierType.ShiftMask  ) == 0 &&
 						(selection.Count > 1)) {
-						selection.Clear ();
-						selection.Add (FocusCell);
-					}
-		
-					break;
-	
-				default:
-					args.RetVal = false;
-					break;
+					selection.Clear ();
+					selection.Add (FocusCell);
+				}
+
+				break;
+
+			default:
+				args.RetVal = false;
+				break;
 			}
-						
+
 		}
-	
+
 		private void HandleKeyPressEvent (object sender, KeyPressEventArgs args)
 		{
 			int focus_old;
 			args.RetVal = true;
 			bool shift = ModifierType.ShiftMask == (args.Event.State & ModifierType.ShiftMask);
 			bool control = ModifierType.ControlMask == (args.Event.State & ModifierType.ControlMask);
-	
+
 			focus_old = FocusCell;
 			switch (args.Event.Key) {
 			case Gdk.Key.Down:
@@ -1527,7 +1529,7 @@
 				FocusCell = 0;
 				break;
 			case Gdk.Key.End:
-				FocusCell = collection.Count - 1; 
+				FocusCell = collection.Count - 1;
 				break;
 			case Gdk.Key.space:
 				ToggleCell (FocusCell);
@@ -1537,16 +1539,16 @@
 					break;
 				DoubleClicked (this, FocusCell);
 				break;
-			default:	
+			default:
 				args.RetVal = false;
-				return;		
+				return;
 			}
-			
+
 			if (FocusCell == focus_old) {
 				args.RetVal = false;
 				return;
 			}
-	
+
 			if (shift) {
 				if (focus_old != FocusCell && selection.Contains (focus_old) && selection.Contains (FocusCell))
 					selection.Remove (FocusCell, focus_old);
@@ -1555,11 +1557,11 @@
 			} else if (!control) {
 				selection.Clear ();
 				selection.Add (FocusCell);
-			} 
-		
+			}
+
 			ScrollTo (FocusCell);
 		}
-	
+
 		private void HandleDestroyed (object sender, System.EventArgs args)
 		{
 			cache.OnPixbufLoaded -= HandlePixbufLoaded;



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