From ea3c0dcbb1716f9c01d27dc2d5915125680b2c53 Mon Sep 17 00:00:00 2001 From: Hylke Bons Date: Sun, 23 May 2010 16:02:46 +0100 Subject: [PATCH] animate statusicon when syncing --- SparkleShare/SparkleRepo.cs | 1 + SparkleShare/SparkleStatusIcon.cs | 46 +- SparkleShare/SparkleUI.cs | 8 +- .../process-syncing-sparkleshare.png | Bin 0 -> 2562 bytes data/sparkleshare.svg | 972 +++++++++++++++++- 5 files changed, 1002 insertions(+), 25 deletions(-) create mode 100644 data/icons/hicolor/24x24/animations/process-syncing-sparkleshare.png diff --git a/SparkleShare/SparkleRepo.cs b/SparkleShare/SparkleRepo.cs index 81f843b8..12454028 100644 --- a/SparkleShare/SparkleRepo.cs +++ b/SparkleShare/SparkleRepo.cs @@ -193,6 +193,7 @@ namespace SparkleShare { // Push again in case of a conflict Push (); } +// SparkleUI.NotificationIcon.SetIdleState (); } // Commits the made changes diff --git a/SparkleShare/SparkleStatusIcon.cs b/SparkleShare/SparkleStatusIcon.cs index e8de185c..1b08ebb8 100644 --- a/SparkleShare/SparkleStatusIcon.cs +++ b/SparkleShare/SparkleStatusIcon.cs @@ -18,13 +18,16 @@ using Gtk; using Mono.Unix; using SparkleShare; using System; -using System.IO; using System.Diagnostics; +using System.IO; +using System.Timers; namespace SparkleShare { public class SparkleStatusIcon : StatusIcon { + private Timer Timer; + // Short alias for the translations public static string _ (string s) { return Catalog.GetString (s); @@ -39,6 +42,8 @@ namespace SparkleShare { public SparkleStatusIcon () : base () { + Timer = new Timer (); + Activate += delegate { Menu Menu = new Menu(); @@ -135,11 +140,46 @@ namespace SparkleShare { } public void SetIdleState () { - IconName = "folder-sparkleshare"; + Timer.Stop (); + Pixbuf = SparkleHelpers.GetIcon ("folder-sparkleshare", 24); } public void SetSyncingState () { -// IconName = "folder-syncing"; + + // TODO: Animate statusicon when syncing +/* int CycleDuration = 250; + int CurrentStep = 0; + int Size = 24; + + Gdk.Pixbuf SpinnerGallery = SparkleHelpers.GetIcon ("process-syncing-sparkleshare", + Size); + + int FramesInWidth = SpinnerGallery.Width / Size; + int FramesInHeight = SpinnerGallery.Height / Size; + int NumSteps = FramesInWidth * FramesInHeight; + Gdk.Pixbuf [] Images = new Gdk.Pixbuf [NumSteps - 1]; + + int i = 0; + for (int y = 0; y < FramesInHeight; y++) { + for (int x = 0; x < FramesInWidth; x++) { + if (!(y == 0 && x == 0)) { + Images [i] = new Gdk.Pixbuf (SpinnerGallery, + x * Size, y * Size, Size, Size); + i++; + } + } + } + + Timer.Interval = CycleDuration / NumSteps; + Timer.Elapsed += delegate { + if (CurrentStep < NumSteps) + CurrentStep++; + else + CurrentStep = 0; + Pixbuf = Images [CurrentStep]; + }; + Timer.Start (); +*/ } public void SetErrorState () { diff --git a/SparkleShare/SparkleUI.cs b/SparkleShare/SparkleUI.cs index c8cfb93c..b69a4cdd 100644 --- a/SparkleShare/SparkleUI.cs +++ b/SparkleShare/SparkleUI.cs @@ -72,6 +72,11 @@ namespace SparkleShare { } + if (!HideUI) { + // Create the status icon + NotificationIcon = new SparkleStatusIcon (); + } + // Get all the repos in ~/SparkleShare SparkleRepo [] TmpRepos = new SparkleRepo [Directory.GetDirectories (SparklePath).Length]; @@ -106,9 +111,6 @@ namespace SparkleShare { // Don't create the window and status // icon when --disable-gui was given if (!HideUI) { - - // Create the status icon - NotificationIcon = new SparkleStatusIcon (); // Show a notification if there are no folders yet if (SparkleShare.Repositories.Length == 0) { diff --git a/data/icons/hicolor/24x24/animations/process-syncing-sparkleshare.png b/data/icons/hicolor/24x24/animations/process-syncing-sparkleshare.png new file mode 100644 index 0000000000000000000000000000000000000000..c1be718832bdf7b7053cba1de3abcb163767cbde GIT binary patch literal 2562 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 + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +