f-spot r4079 - in trunk: . src src/Widgets



Author: rubenv
Date: Sun Jun 22 17:17:09 2008
New Revision: 4079
URL: http://svn.gnome.org/viewvc/f-spot?rev=4079&view=rev

Log:
2008-06-22  Ruben Vermeersch  <ruben savanne be>

	* src/MainWindow.cs: Append the new EditorPage (commented for now, as it
	doesn't do much yet), send out an event when the view mode changes (will
	be used for switching intelligently).

	* src/Makefile.am: Add EditorPage.cs.

	* src/SingleView.cs: Attach the new MetadataDisplayPage.

	* src/Widgets/EditorPage.cs: Added. Currently still empty. Has code for
	making it unselectable, but it turned out we do not want that.

	* src/Widgets/MetadataDisplay.cs: Wrap in a SidebarPage, get events from
	the page.

	* src/Widgets/Sidebar.cs: Introduce a new SidebarPage class, which
	currently wraps the parameters for adding a sidebar page. This class will
	encapsulate common functionality between sidebar pages (like making
	certain pages unavailable if needed). Reduces coupling between
	MainWindow / Singleview and the sidebar pages, by putting all event
	handlers in one place. This means that aside adding the page itself, no
	changes are needed (setting up handlers, references, etc) when adding a
	new page.


Added:
   trunk/src/Widgets/EditorPage.cs
Modified:
   trunk/ChangeLog
   trunk/src/MainWindow.cs
   trunk/src/Makefile.am
   trunk/src/SingleView.cs
   trunk/src/Widgets/MetadataDisplay.cs
   trunk/src/Widgets/Sidebar.cs

Modified: trunk/src/MainWindow.cs
==============================================================================
--- trunk/src/MainWindow.cs	(original)
+++ trunk/src/MainWindow.cs	Sun Jun 22 17:17:09 2008
@@ -139,7 +139,6 @@
 	Gtk.ToggleToolButton edit_button;
 
 	InfoBox info_box;
-	MetadataDisplay info_display;
 	QueryView icon_view;
 	PhotoView photo_view;
 	FSpot.FullScreenView fsview;
@@ -308,9 +307,8 @@
 
 		sidebar.AppendPage (tag_selection_scrolled, Catalog.GetString ("Tags"), "gtk-new");
 
-		info_display = new MetadataDisplay ();
-		info_display.ParentSidebar = sidebar;
-		sidebar.AppendPage (info_display, Catalog.GetString ("Exif"), "gtk-index");
+		sidebar.AppendPage (new MetadataDisplayPage ());
+//		sidebar.AppendPage (new EditorPage ());
  		
 		sidebar.CloseRequested += HideSidebar;
 		sidebar.Show ();
@@ -455,8 +453,8 @@
 		this.selection = new MainSelection (this);
 		this.selection.Changed += HandleSelectionChanged;
 		this.selection.ItemsChanged += HandleSelectionItemsChanged;
-		this.selection.Changed += info_display.HandleSelectionChanged;
-		this.selection.ItemsChanged += info_display.HandleSelectionItemsChanged;
+		this.selection.Changed += sidebar.HandleSelectionChanged;
+		this.selection.ItemsChanged += sidebar.HandleSelectionItemsChanged;
 
 		Mono.Addins.AddinManager.ExtensionChanged += PopulateExtendableMenus;
 		PopulateExtendableMenus (null, null);
@@ -519,6 +517,8 @@
 		PhotoView
 	};
 
+	public event EventHandler ViewModeChanged;
+
 	public void SetViewMode (ModeType value)
 	{
 		if (view_mode == value)
@@ -554,6 +554,8 @@
 		}
 		Selection.MarkChanged ();
 		UpdateToolbar ();
+		if (ViewModeChanged != null) 
+			ViewModeChanged (this, null);
 	}
 	
 	void UpdateToolbar ()
@@ -1636,7 +1638,6 @@
 	public void HandleInfoDisplayDestroy (object sender, EventArgs args)
 	{
 		info_display_window = null;
-		info_display = null;
 	}
 
 	public void HandlePreferences (object sender, EventArgs args)

Modified: trunk/src/Makefile.am
==============================================================================
--- trunk/src/Makefile.am	(original)
+++ trunk/src/Makefile.am	Sun Jun 22 17:17:09 2008
@@ -228,6 +228,7 @@
 	$(srcdir)/TagSelectionDialog.cs		\
 	$(srcdir)/Widgets/CompositeUtils.cs	\
 	$(srcdir)/Widgets/Dissolve.cs		\
+	$(srcdir)/Widgets/EditorPage.cs		\
 	$(srcdir)/Widgets/Filmstrip.cs		\
 	$(srcdir)/Widgets/FindBar.cs		\
 	$(srcdir)/Widgets/IEffect.cs		\

Modified: trunk/src/SingleView.cs
==============================================================================
--- trunk/src/SingleView.cs	(original)
+++ trunk/src/SingleView.cs	Sun Jun 22 17:17:09 2008
@@ -37,8 +37,6 @@
 		FSpot.Widgets.IconView directory_view;
 		private Uri uri;
 		
-		MetadataDisplay info_display;
-		
 		UriCollection collection;
 		
 		FullScreenView fsview;
@@ -121,9 +119,7 @@
 			info_vbox.Add (sidebar);
 			sidebar.AppendPage (directory_scrolled, Catalog.GetString ("Folder"), "gtk-directory");
 
-			info_display = new MetadataDisplay ();
-			info_display.ParentSidebar = sidebar;
-			sidebar.AppendPage (info_display, Catalog.GetString ("Exif"), "gtk-index");
+			sidebar.AppendPage (new MetadataDisplayPage ());
  		
 			sidebar.CloseRequested += HandleHideSidePane;
 			sidebar.Show ();
@@ -163,10 +159,10 @@
 			image_view.Item.Changed += delegate (BrowsablePointer pointer, BrowsablePointerChangedArgs old) {
 															IBrowsableItem [] item = {pointer.Current};
 															PhotoArray item_array = new PhotoArray (item);
-															//info_display.HandleSelectionChanged (item_array);
+															sidebar.HandleSelectionChanged (item_array);
 													};
 			
-			image_view.Item.Collection.ItemsChanged += info_display.HandleSelectionItemsChanged;
+			image_view.Item.Collection.ItemsChanged += sidebar.HandleSelectionItemsChanged;
 
 			UpdateStatusLabel ();
 			

Added: trunk/src/Widgets/EditorPage.cs
==============================================================================
--- (empty file)
+++ trunk/src/Widgets/EditorPage.cs	Sun Jun 22 17:17:09 2008
@@ -0,0 +1,38 @@
+/*
+ * Widgets.EditorPage.cs
+ *
+ * Author(s)
+ * 	Ruben Vermeersch <ruben savanne be>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using FSpot;
+using Gtk;
+using Mono.Unix;
+using System;
+
+namespace FSpot.Widgets {
+	public class EditorPage : SidebarPage {
+		public EditorPage () : base (new EditorPageWidget (),
+									   Catalog.GetString ("Edit"),
+									   "mode-image-edit") {
+			// TODO: Somebody might need to change the icon to something more suitable.
+			// FIXME: The icon isn't shown in the menu, are we missing a size?
+			MainWindow.Toplevel.ViewModeChanged += HandleViewModeChanged;
+		}
+
+		private void HandleViewModeChanged (object sender, EventArgs args)
+		{
+			if (MainWindow.Toplevel.ViewMode == MainWindow.ModeType.PhotoView) {
+				CanSelect = true;
+			} else {
+				CanSelect = false;
+			}
+		}
+	}
+
+	public class EditorPageWidget : ScrolledWindow {
+		
+	}
+}

Modified: trunk/src/Widgets/MetadataDisplay.cs
==============================================================================
--- trunk/src/Widgets/MetadataDisplay.cs	(original)
+++ trunk/src/Widgets/MetadataDisplay.cs	Sun Jun 22 17:17:09 2008
@@ -1,8 +1,9 @@
 /*
- * Widgets.Sidebar.cs
+ * Widgets.MetadataDisplay.cs
  *
  * Author(s)
  * 	Mike Gemuende <mike gemuende de>
+ * 	Ruben Vermeersch <ruben savanne be>
  *
  * This is free software. See COPYING for details.
  */
@@ -17,7 +18,22 @@
 using Mono.Unix;
 
 namespace FSpot.Widgets {
-	public class MetadataDisplay : ScrolledWindow {
+	public class MetadataDisplayPage : SidebarPage {
+		public MetadataDisplayPage() : base(new MetadataDisplayWidget(), 
+											Catalog.GetString ("Exif"), 
+											"gtk-index") {
+			(SidebarWidget as MetadataDisplayWidget).Page = this;
+		}
+
+		protected override void AddedToSidebar ()
+		{
+			MetadataDisplayWidget widget = SidebarWidget as MetadataDisplayWidget;
+			Sidebar.SelectionChanged += widget.HandleSelectionChanged;
+			Sidebar.SelectionItemsChanged += widget.HandleSelectionItemsChanged;
+		}
+	}
+
+	public class MetadataDisplayWidget : ScrolledWindow {
 		Delay update_delay;
 		
 		/* 	This VBox only contains exif-data,
@@ -28,7 +44,11 @@
 		Label exif_message;
 		State display;
 		
-		Sidebar sidebar;
+		private MetadataDisplayPage page;
+		public MetadataDisplayPage Page {
+			set { page = value; }
+			get { return page; }
+		}
 		
 		// stores list of the expanded expanders
 		List<string> open_list;
@@ -42,7 +62,7 @@
 			message
 		};
 		
-		public MetadataDisplay ()
+		public MetadataDisplayWidget ()
 		{
 			main_vbox = new VBox ();
 			main_vbox.Spacing = 6;
@@ -92,12 +112,6 @@
 			update_delay.Start ();
 		}
 		
-		public Sidebar ParentSidebar {
-			set {
-				this.sidebar = value;
-			}
-		}
-		
 		private Exif.ExifData exif_info;
 
 		private IBrowsableItem photo;
@@ -118,7 +132,7 @@
 					exif_info = null;
 				}
 				
-				if (sidebar != null && !sidebar.isActive (this)) {
+				if (!Page.IsActive) {
 					up_to_date = false;
 				} else {
 					update_delay.Start ();
@@ -134,15 +148,15 @@
 			}
 		}
 		
-		public void HandleSelectionChanged (IBrowsableCollection collection) {
+		internal void HandleSelectionChanged (IBrowsableCollection collection) {
 			if (collection != null && collection.Count == 1)
 				Photo = collection [0];
 			else
 				Photo = null;
 		}
 		
-		public void HandleSelectionItemsChanged (IBrowsableCollection collection, BrowsableEventArgs args) {
-			if (sidebar != null && !sidebar.isActive (this))
+		internal void HandleSelectionItemsChanged (IBrowsableCollection collection, BrowsableEventArgs args) {
+			if (!Page.IsActive)
 				up_to_date = false;
 			else
 				update_delay.Start ();
@@ -455,6 +469,5 @@
 				}
 			}
 		}
-		
 	}
 }

Modified: trunk/src/Widgets/Sidebar.cs
==============================================================================
--- trunk/src/Widgets/Sidebar.cs	(original)
+++ trunk/src/Widgets/Sidebar.cs	Sun Jun 22 17:17:09 2008
@@ -4,6 +4,7 @@
  * Author(s)
  * 	Mike Gemuende <mike gemuende de>
  *	Stephane Delcroix <stephane delcroix org>
+ *	Ruben Vermeersch <ruben savanne be>
  *
  * This is free software. See COPYING for details.
  */
@@ -13,6 +14,63 @@
 using System.Collections.Generic;
 
 namespace FSpot.Widgets {
+	public class SidebarPage {
+		// The widget shown on the sidebar page.
+		private readonly Widget widget;
+		public Widget SidebarWidget {
+			get { return widget; }
+		}
+
+		// Whether this page can be selected
+		private bool can_select;
+		public bool CanSelect {
+			protected set { 
+				can_select = value;
+				if (CanSelectChanged != null)
+					CanSelectChanged (this, null);
+			}
+			get { return can_select; }
+		}
+
+		public event EventHandler CanSelectChanged;
+
+		// The label of the sidebar page.
+		private readonly string label;
+		public string Label {
+			get { return label; }
+		}
+
+		// The icon name, used for the selector
+		private readonly string icon_name;
+		public string IconName {
+			get { return icon_name; }
+		}
+
+		// The sidebar onto which this page is attached
+		private Sidebar sidebar;
+		public Sidebar Sidebar {
+			get { return sidebar; }
+			set { 
+				sidebar = value; 
+				AddedToSidebar ();
+			}
+		}
+
+		// Can be overriden to get notified as soon as we're added to a sidebar.
+		protected virtual void AddedToSidebar () { }
+
+		// Whether this page is currently visible
+		public bool IsActive {
+			get { return Sidebar.IsActive (this); }
+		}
+
+		public SidebarPage (Widget widget, string label, string icon_name) {
+			this.widget = widget;
+			this.label = label;
+			this.icon_name = icon_name;
+		}
+	}
+
 	public class Sidebar : VBox  {
 		
 		private HBox button_box;
@@ -23,8 +81,14 @@
 		private List<string> menu_list;
 		private List<string> image_list;
 
+		private List<SidebarPage> pages;
+
 		public event EventHandler CloseRequested;
 
+        // Selection change events, sidebar pages can subscribed to this.
+		public event IBrowsableCollectionChangedHandler SelectionChanged;
+		public event IBrowsableCollectionItemsChangedHandler SelectionItemsChanged;
+
 		public Sidebar () : base ()
 		{
 			button_box = new HBox ();
@@ -43,10 +107,10 @@
 			
 			choose_button = new MenuButton ();
 			choose_button.Relief = ReliefStyle.None;
-					
+			
 			eventBox = new EventBox ();
 			eventBox.Add (choose_button);
-						
+			
 			button_box.PackStart (eventBox, true, true, 0);
 			
 			choose_menu = new Menu ();
@@ -54,16 +118,29 @@
 
 			menu_list = new List<string> ();
 			image_list = new List<string> ();
+			pages = new List<SidebarPage> ();
 		}
-		
-		public void AppendPage (Widget widget, string label)
+
+		private void HandleCanSelectChanged (object sender, EventArgs args)
 		{
-			AppendPage (widget, label, null);
+			Console.WriteLine ("Can select changed for {0} to {1}", sender, (sender as SidebarPage).CanSelect);
 		}
 
 		public void AppendPage (Widget widget, string label, string icon_name)
+		{
+			AppendPage (new SidebarPage (widget, label, icon_name));
+		}
+		
+        public void AppendPage (SidebarPage page)
 		{	
-			notebook.AppendPage (widget, new Label (label));
+			page.Sidebar = this;
+			page.CanSelectChanged += HandleCanSelectChanged;
+			pages.Add (page);
+
+			string label = page.Label;
+			string icon_name = page.IconName;
+
+			notebook.AppendPage (page.SidebarWidget, new Label (label));
 			
 			MenuItem item; 
 			if (icon_name == null)
@@ -88,7 +165,6 @@
 		
 		public void HandleItemClicked (object o, EventArgs args)
 		{
-			Console.WriteLine (o);
 			SwitchTo (menu_list.IndexOf (((o as MenuItem).Child as Label).Text));
 		}
 		
@@ -100,9 +176,9 @@
 		
 		public void SwitchTo (int n)
 		{
-            if (n >= notebook.Children.Length) {
-                n = 0;
-            }
+			if (n >= notebook.Children.Length) {
+				n = 0;
+			}
 
 			if (n != notebook.CurrentPage)
 			{				
@@ -124,9 +200,21 @@
 			}
 		}
 		
-		public bool isActive (Widget widget)
+		public bool IsActive (SidebarPage page)
 		{
-			return (notebook.GetNthPage (notebook.CurrentPage) == widget);
+			return (notebook.GetNthPage (notebook.CurrentPage) == page.SidebarWidget);
 		}
-	}
+
+        // Proxy selection change to the subscribed sidebar pages.
+		public void HandleSelectionChanged (IBrowsableCollection collection) {
+			if (SelectionChanged != null) 
+				SelectionChanged (collection);
+		}
+
+		// Proxy selection item changes to the subscribed sidebar pages.
+		public void HandleSelectionItemsChanged (IBrowsableCollection collection, BrowsableEventArgs args) {
+			if (SelectionItemsChanged != null)
+				SelectionItemsChanged (collection, args);
+		}
+	} 
 }



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