[f-spot/hyena-models: 4/6] Add ActiveSource Property to App
- From: Mike Gemünde <mgemuende src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [f-spot/hyena-models: 4/6] Add ActiveSource Property to App
- Date: Mon, 4 Oct 2010 11:45:22 +0000 (UTC)
commit 85e65a3d49aa18f257bd7e3599ca2d3dfaf67965
Author: Mike Gemünde <mike gemuende de>
Date: Mon Oct 4 10:53:41 2010 +0200
Add ActiveSource Property to App
src/Clients/MainApp/FSpot/App.cs | 676 +++++++++++++++++++-------------------
1 files changed, 342 insertions(+), 334 deletions(-)
---
diff --git a/src/Clients/MainApp/FSpot/App.cs b/src/Clients/MainApp/FSpot/App.cs
index 53bdcb4..79fb9dc 100644
--- a/src/Clients/MainApp/FSpot/App.cs
+++ b/src/Clients/MainApp/FSpot/App.cs
@@ -2,7 +2,7 @@
* FSpot.Application.cs
*
* Author(s):
- * Stephane Delcroix <stephane delcroix org>
+ * Stephane Delcroix <stephane delcroix org>
*
* Copyright (c) 2009 Stephane Delcroix.
*
@@ -26,198 +26,209 @@ using FSpot.Database;
namespace FSpot
{
- public class App : Unique.App
- {
- static object sync_handle = new object ();
-
-#region public API
- static App app;
- public static App Instance {
- get {
- lock (sync_handle) {
- if (app == null)
- app = new App ();
- }
- return app;
- }
- }
-
- Thread constructing_organizer = null;
-
- public MainWindow Organizer {
- get {
- lock (sync_handle) {
- if (organizer == null) {
- if (constructing_organizer == Thread.CurrentThread) {
- throw new Exception ("Recursively tried to acquire App.Organizer!");
- }
-
- constructing_organizer = Thread.CurrentThread;
- organizer = new MainWindow (Database);
- Register (organizer.Window);
- }
- }
- return organizer;
- }
- }
-
- public Db Database {
- get {
- lock (sync_handle) {
- if (db == null) {
- if (!File.Exists (Global.BaseDirectory))
- Directory.CreateDirectory (Global.BaseDirectory);
-
- db = new Db ();
-
- try {
- db.Init (Path.Combine (Global.BaseDirectory, "photos.db"), true);
- } catch (Exception e) {
- new FSpot.UI.Dialog.RepairDbDialog (e, db.Repair (), null);
- db.Init (Path.Combine (Global.BaseDirectory, "photos.db"), true);
- }
- }
- }
- return db;
- }
- }
-
- public void Import (string path)
- {
- if (IsRunning) {
- var md = new MessageData ();
- md.Text = path;
- SendMessage (Command.Import, md);
- return;
- }
- HandleImport (path);
- }
-
- public void Organize ()
- {
- if (IsRunning) {
- SendMessage (Command.Organize, null);
- return;
- }
- HandleOrganize ();
- }
-
- public void Shutdown ()
- {
- if (IsRunning) {
- SendMessage (Command.Shutdown, null);
- return;
- }
- HandleShutdown ();
- }
-
- public void Slideshow (string tagname)
- {
- if (IsRunning) {
- var md = new MessageData ();
- md.Text = tagname ?? String.Empty;
- SendMessage (Command.Slideshow, md);
-
- return;
- }
- HandleSlideshow (tagname);
- }
-
- public void View (SafeUri uri)
- {
- View (new SafeUri[] {uri});
- }
-
- public void View (IEnumerable<SafeUri> uris)
- {
- var uri_s = from uri in uris select uri.ToString ();
- View (uri_s);
- }
-
- public void View (string uri)
- {
- View (new string[] {uri});
- }
-
- public void View (IEnumerable<string> uris)
- {
- if (IsRunning) {
- var md = new MessageData ();
- md.Uris = uris.ToArray ();
- SendMessage (Command.View, md);
- return;
- }
- HandleView (uris.ToArray());
- }
-#endregion
-
-#region private ctor and stuffs
- enum Command {
- Invalid = 0,
- Import,
- View,
- Organize,
- Shutdown,
- Version,
- Slideshow,
- }
-
- List<Gtk.Window> toplevels;
- MainWindow organizer;
- Db db;
-
- App (): base ("org.gnome.FSpot.Core", null,
- "Import", Command.Import,
- "View", Command.View,
- "Organize", Command.Organize,
- "Shutdown", Command.Shutdown,
- "Slideshow", Command.Slideshow)
- {
- toplevels = new List<Gtk.Window> ();
- if (IsRunning) {
- Log.Information ("Found active FSpot process");
- } else {
- MessageReceived += HandleMessageReceived;
- }
- }
-
- void SendMessage (Command command, MessageData md)
- {
- SendMessage ((Unique.Command)command, md);
- }
-#endregion
-
-#region Command Handlers
-
- void HandleMessageReceived (object sender, MessageReceivedArgs e)
- {
- switch ((Command)e.Command) {
- case Command.Import:
- HandleImport (e.MessageData.Text);
- e.RetVal = Response.Ok;
- break;
- case Command.Organize:
- HandleOrganize ();
- e.RetVal = Response.Ok;
- break;
- case Command.Shutdown:
- HandleShutdown ();
- e.RetVal = Response.Ok;
- break;
- case Command.Slideshow:
- HandleSlideshow (e.MessageData.Text);
- e.RetVal = Response.Ok;
- break;
- case Command.View:
- HandleView (e.MessageData.Uris);
- e.RetVal = Response.Ok;
- break;
- case Command.Invalid:
- default:
- Log.Debug ("Wrong command received");
- break;
- }
- }
+ public class App : Unique.App
+ {
+ static object sync_handle = new object ();
+
+ #region public API
+ static App app;
+ public static App Instance {
+ get {
+ lock (sync_handle) {
+ if (app == null)
+ app = new App ();
+ }
+ return app;
+ }
+ }
+
+ Thread constructing_organizer = null;
+
+ public MainWindow Organizer {
+ get {
+ lock (sync_handle) {
+ if (organizer == null) {
+ if (constructing_organizer == Thread.CurrentThread) {
+ throw new Exception ("Recursively tried to acquire App.Organizer!");
+ }
+
+ constructing_organizer = Thread.CurrentThread;
+ organizer = new MainWindow (Database);
+ Register (organizer.Window);
+ }
+ }
+ return organizer;
+ }
+ }
+
+ public Db Database {
+ get {
+ lock (sync_handle) {
+ if (db == null) {
+ if (!File.Exists (Global.BaseDirectory))
+ Directory.CreateDirectory (Global.BaseDirectory);
+
+ db = new Db ();
+
+ try {
+ db.Init (Path.Combine (Global.BaseDirectory, "photos.db"), true);
+ } catch (Exception e) {
+ new FSpot.UI.Dialog.RepairDbDialog (e, db.Repair (), null);
+ db.Init (Path.Combine (Global.BaseDirectory, "photos.db"), true);
+ }
+ }
+ }
+ return db;
+ }
+ }
+
+ private IPhotoSource active_source;
+ public IPhotoSource ActiveSource {
+ get {
+ lock (sync_handle) {
+ if (active_source == null) {
+ active_source = new DatabaseSource (Database);
+ }
+ }
+
+ return active_source;
+ }
+ }
+
+ public void Import (string path)
+ {
+ if (IsRunning) {
+ var md = new MessageData ();
+ md.Text = path;
+ SendMessage (Command.Import, md);
+ return;
+ }
+ HandleImport (path);
+ }
+
+ public void Organize ()
+ {
+ if (IsRunning) {
+ SendMessage (Command.Organize, null);
+ return;
+ }
+ HandleOrganize ();
+ }
+
+ public void Shutdown ()
+ {
+ if (IsRunning) {
+ SendMessage (Command.Shutdown, null);
+ return;
+ }
+ HandleShutdown ();
+ }
+
+ public void Slideshow (string tagname)
+ {
+ if (IsRunning) {
+ var md = new MessageData ();
+ md.Text = tagname ?? String.Empty;
+ SendMessage (Command.Slideshow, md);
+
+ return;
+ }
+ HandleSlideshow (tagname);
+ }
+
+ public void View (SafeUri uri)
+ {
+ View (new SafeUri[] { uri });
+ }
+
+ public void View (IEnumerable<SafeUri> uris)
+ {
+ var uri_s = from uri in uris
+ select uri.ToString ();
+ View (uri_s);
+ }
+
+ public void View (string uri)
+ {
+ View (new string[] { uri });
+ }
+
+ public void View (IEnumerable<string> uris)
+ {
+ if (IsRunning) {
+ var md = new MessageData ();
+ md.Uris = uris.ToArray ();
+ SendMessage (Command.View, md);
+ return;
+ }
+ HandleView (uris.ToArray ());
+ }
+ #endregion
+
+ #region private ctor and stuffs
+ enum Command
+ {
+ Invalid = 0,
+ Import,
+ View,
+ Organize,
+ Shutdown,
+ Version,
+ Slideshow
+ }
+
+ List<Gtk.Window> toplevels;
+ MainWindow organizer;
+ Db db;
+
+ App () : base("org.gnome.FSpot.Core", null, "Import", Command.Import, "View", Command.View, "Organize", Command.Organize, "Shutdown", Command.Shutdown,
+ "Slideshow", Command.Slideshow)
+ {
+ toplevels = new List<Gtk.Window> ();
+ if (IsRunning) {
+ Log.Information ("Found active FSpot process");
+ } else {
+ MessageReceived += HandleMessageReceived;
+ }
+ }
+
+ void SendMessage (Command command, MessageData md)
+ {
+ SendMessage ((Unique.Command)command, md);
+ }
+ #endregion
+
+ #region Command Handlers
+
+ void HandleMessageReceived (object sender, MessageReceivedArgs e)
+ {
+ switch ((Command)e.Command) {
+ case Command.Import:
+ HandleImport (e.MessageData.Text);
+ e.RetVal = Response.Ok;
+ break;
+ case Command.Organize:
+ HandleOrganize ();
+ e.RetVal = Response.Ok;
+ break;
+ case Command.Shutdown:
+ HandleShutdown ();
+ e.RetVal = Response.Ok;
+ break;
+ case Command.Slideshow:
+ HandleSlideshow (e.MessageData.Text);
+ e.RetVal = Response.Ok;
+ break;
+ case Command.View:
+ HandleView (e.MessageData.Uris);
+ e.RetVal = Response.Ok;
+ break;
+ case Command.Invalid:
+ default:
+ Log.Debug ("Wrong command received");
+ break;
+ }
+ }
void HandleImport (string path)
{
@@ -226,149 +237,146 @@ namespace FSpot
if (path != null && path.StartsWith ("gphoto2:usb:")) {
path = String.Format ("gphoto2://[{0}]", path.Substring (8));
}
-
+
Hyena.Log.DebugFormat ("Importing from {0}", path);
Organizer.Window.Present ();
- Organizer.ImportFile (path == null ? null : new SafeUri(path));
+ Organizer.ImportFile (path == null ? null : new SafeUri (path));
}
- void HandleOrganize ()
- {
- if (Database.Empty)
- HandleImport (null);
- else
- Organizer.Window.Present ();
- }
-
- void HandleShutdown ()
- {
- try {
- App.Instance.Organizer.Close ();
- } catch {
- System.Environment.Exit (0);
- }
- }
-
- //FIXME move all this in a standalone class
- void HandleSlideshow (string tagname)
- {
- Tag tag;
- FSpot.Widgets.SlideShow slideshow = null;
-
- if (!String.IsNullOrEmpty (tagname))
- tag = Database.Tags.GetTagByName (tagname);
- else
- tag = Database.Tags.GetTagById (Preferences.Get<int> (Preferences.SCREENSAVER_TAG));
-
- IPhoto[] photos;
- if (tag != null)
- photos = Database.Photos.Query (new Tag[] {tag});
- else if (Preferences.Get<int> (Preferences.SCREENSAVER_TAG) == 0)
- photos = Database.Photos.Query (new Tag [] {});
- else
- photos = new IPhoto [0];
-
- // Minimum delay 1 second; default is 4s
- var delay = Math.Max (1.0, Preferences.Get<double> (Preferences.SCREENSAVER_DELAY));
-
- var window = new XScreenSaverSlide ();
- window.ModifyFg (Gtk.StateType.Normal, new Gdk.Color (127, 127, 127));
- window.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
-
- if (photos.Length > 0) {
- Array.Sort (photos, new IPhotoComparer.RandomSort ());
- slideshow = new FSpot.Widgets.SlideShow (new BrowsablePointer (new PhotoList (photos), 0), (uint)(delay * 1000), true);
- slideshow.Transition = new FSpot.Transitions.DissolveTransition ();
- window.Add (slideshow);
- } else {
- Gtk.HBox outer = new Gtk.HBox ();
- Gtk.HBox hbox = new Gtk.HBox ();
- Gtk.VBox vbox = new Gtk.VBox ();
-
- outer.PackStart (new Gtk.Label (String.Empty));
- outer.PackStart (vbox, false, false, 0);
- vbox.PackStart (new Gtk.Label (String.Empty));
- vbox.PackStart (hbox, false, false, 0);
- hbox.PackStart (new Gtk.Image (Gtk.Stock.DialogWarning, Gtk.IconSize.Dialog),
- false, false, 0);
- outer.PackStart (new Gtk.Label (String.Empty));
-
- string msg;
- string long_msg;
-
- if (tag != null) {
- msg = String.Format (Catalog.GetString ("No photos matching {0} found"), tag.Name);
- long_msg = String.Format (Catalog.GetString ("The tag \"{0}\" is not applied to any photos. Try adding\n" +
- "the tag to some photos or selecting a different tag in the\n" +
- "F-Spot preference dialog."), tag.Name);
- } else {
- msg = Catalog.GetString ("Search returned no results");
- long_msg = Catalog.GetString ("The tag F-Spot is looking for does not exist. Try\n" +
- "selecting a different tag in the F-Spot preference\n" +
- "dialog.");
- }
-
- Gtk.Label label = new Gtk.Label (msg);
- hbox.PackStart (label, false, false, 0);
-
- Gtk.Label long_label = new Gtk.Label (long_msg);
- long_label.Markup = String.Format ("<small>{0}</small>", long_msg);
-
- vbox.PackStart (long_label, false, false, 0);
- vbox.PackStart (new Gtk.Label (String.Empty));
-
- window.Add (outer);
- label.ModifyFg (Gtk.StateType.Normal, new Gdk.Color (127, 127, 127));
- label.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
- long_label.ModifyFg (Gtk.StateType.Normal, new Gdk.Color (127, 127, 127));
- long_label.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
- }
- window.ShowAll ();
-
- Register (window);
- GLib.Idle.Add (delegate {
- if (slideshow != null)
- slideshow.Start ();
- return false;
- });
- }
-
- void HandleView (string[] uris)
- {
- List<SafeUri> ul = new List<SafeUri> ();
- foreach (var u in uris)
- ul.Add (new SafeUri (u, true));
- try {
- Register (new FSpot.SingleView (ul.ToArray ()).Window);
- } catch (System.Exception e) {
- Log.Exception (e);
- Log.Debug ("no real valid path to view from");
- }
- }
-
-#endregion
-
-#region Track toplevel windows
- void Register (Gtk.Window window)
- {
- toplevels.Add (window);
- window.Destroyed += HandleDestroyed;
- }
-
- void HandleDestroyed (object sender, EventArgs e)
- {
- toplevels.Remove (sender as Gtk.Window);
- if (toplevels.Count == 0) {
- Log.Information ("Exiting...");
- Banshee.Kernel.Scheduler.Dispose ();
- Database.Dispose ();
- ImageLoaderThread.CleanAll ();
- Gtk.Application.Quit ();
- System.Environment.Exit (0);
- }
- if (organizer != null && organizer.Window == sender)
- organizer = null;
- }
-#endregion
- }
+ void HandleOrganize ()
+ {
+ if (Database.Empty)
+ HandleImport (null);
+ else
+ Organizer.Window.Present ();
+ }
+
+ void HandleShutdown ()
+ {
+ try {
+ App.Instance.Organizer.Close ();
+ } catch {
+ System.Environment.Exit (0);
+ }
+ }
+
+ //FIXME move all this in a standalone class
+ void HandleSlideshow (string tagname)
+ {
+ Tag tag;
+ FSpot.Widgets.SlideShow slideshow = null;
+
+ if (!String.IsNullOrEmpty (tagname))
+ tag = Database.Tags.GetTagByName (tagname);
+ else
+ tag = Database.Tags.GetTagById (Preferences.Get<int> (Preferences.SCREENSAVER_TAG));
+
+ IPhoto[] photos;
+ if (tag != null)
+ photos = Database.Photos.Query (new Tag[] { tag }); else if (Preferences.Get<int> (Preferences.SCREENSAVER_TAG) == 0) {
+ photos = Database.Photos.Query (new Tag[] { });
+ }
+
+ else
+ photos = new IPhoto[0];
+
+ // Minimum delay 1 second; default is 4s
+ var delay = Math.Max (1.0, Preferences.Get<double> (Preferences.SCREENSAVER_DELAY));
+
+ var window = new XScreenSaverSlide ();
+ window.ModifyFg (Gtk.StateType.Normal, new Gdk.Color (127, 127, 127));
+ window.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
+
+ if (photos.Length > 0) {
+ Array.Sort (photos, new IPhotoComparer.RandomSort ());
+ slideshow = new FSpot.Widgets.SlideShow (new BrowsablePointer (new PhotoList (photos), 0), (uint)(delay * 1000), true);
+ slideshow.Transition = new FSpot.Transitions.DissolveTransition ();
+ window.Add (slideshow);
+ } else {
+ Gtk.HBox outer = new Gtk.HBox ();
+ Gtk.HBox hbox = new Gtk.HBox ();
+ Gtk.VBox vbox = new Gtk.VBox ();
+
+ outer.PackStart (new Gtk.Label (String.Empty));
+ outer.PackStart (vbox, false, false, 0);
+ vbox.PackStart (new Gtk.Label (String.Empty));
+ vbox.PackStart (hbox, false, false, 0);
+ hbox.PackStart (new Gtk.Image (Gtk.Stock.DialogWarning, Gtk.IconSize.Dialog), false, false, 0);
+ outer.PackStart (new Gtk.Label (String.Empty));
+
+ string msg;
+ string long_msg;
+
+ if (tag != null) {
+ msg = String.Format (Catalog.GetString ("No photos matching {0} found"), tag.Name);
+ long_msg = String.Format (Catalog.GetString ("The tag \"{0}\" is not applied to any photos. Try adding\n" + "the tag to some photos or selecting a different tag in the\n" + "F-Spot preference dialog."), tag.Name);
+ } else {
+ msg = Catalog.GetString ("Search returned no results");
+ long_msg = Catalog.GetString ("The tag F-Spot is looking for does not exist. Try\n" + "selecting a different tag in the F-Spot preference\n" + "dialog.");
+ }
+
+ Gtk.Label label = new Gtk.Label (msg);
+ hbox.PackStart (label, false, false, 0);
+
+ Gtk.Label long_label = new Gtk.Label (long_msg);
+ long_label.Markup = String.Format ("<small>{0}</small>", long_msg);
+
+ vbox.PackStart (long_label, false, false, 0);
+ vbox.PackStart (new Gtk.Label (String.Empty));
+
+ window.Add (outer);
+ label.ModifyFg (Gtk.StateType.Normal, new Gdk.Color (127, 127, 127));
+ label.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
+ long_label.ModifyFg (Gtk.StateType.Normal, new Gdk.Color (127, 127, 127));
+ long_label.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
+ }
+ window.ShowAll ();
+
+ Register (window);
+ GLib.Idle.Add (delegate {
+ if (slideshow != null)
+ slideshow.Start ();
+ return false;
+ });
+ }
+
+ void HandleView (string[] uris)
+ {
+ List<SafeUri> ul = new List<SafeUri> ();
+ foreach (var u in uris) {
+ ul.Add (new SafeUri (u, true));
+ }
+ try {
+ Register (new FSpot.SingleView (ul.ToArray ()).Window);
+ } catch (System.Exception e) {
+ Log.Exception (e);
+ Log.Debug ("no real valid path to view from");
+ }
+ }
+
+ #endregion
+
+ #region Track toplevel windows
+ void Register (Gtk.Window window)
+ {
+ toplevels.Add (window);
+ window.Destroyed += HandleDestroyed;
+ }
+
+ void HandleDestroyed (object sender, EventArgs e)
+ {
+ toplevels.Remove (sender as Gtk.Window);
+ if (toplevels.Count == 0) {
+ Log.Information ("Exiting...");
+ Banshee.Kernel.Scheduler.Dispose ();
+ Database.Dispose ();
+ ImageLoaderThread.CleanAll ();
+ Gtk.Application.Quit ();
+ System.Environment.Exit (0);
+ }
+ if (organizer != null && organizer.Window == sender)
+ organizer = null;
+ }
+ #endregion
+ }
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]