diff --git a/SparkleShare/Mac/SparkleShare/AppDelegate.cs b/SparkleShare/Mac/SparkleShare/AppDelegate.cs
index f60f5a63..65a23787 100644
--- a/SparkleShare/Mac/SparkleShare/AppDelegate.cs
+++ b/SparkleShare/Mac/SparkleShare/AppDelegate.cs
@@ -10,7 +10,13 @@ namespace SparkleShare
public partial class AppDelegate : NSApplicationDelegate
{
MainWindowController mainWindowController;
-
+ NSStatusItem statusItem;
+
+ NSMenu menu;
+ NSMenuItem item;
+
+
+
public AppDelegate ()
{
}
@@ -23,7 +29,7 @@ namespace SparkleShare
// SparkleStatusIcon = new SparkleStatusIcon ();
SparkleRepo repo = new SparkleRepo ("/Users/hbons/SparkleShare/SparkleShare-Test");
- var statusItem = NSStatusBar.SystemStatusBar.CreateStatusItem (32);
+ statusItem = NSStatusBar.SystemStatusBar.CreateStatusItem (32);
statusItem.Enabled = true;
@@ -32,11 +38,11 @@ namespace SparkleShare
statusItem.Image.Size = new SizeF (16, 16);
statusItem.AlternateImage.Size = new SizeF (16, 16);
- NSMenu menu = new NSMenu() {};
- menu.AddItem (new NSMenuItem () { Title="Up to date (102 MB)", Enabled = true });
- menu.AddItem (NSMenuItem.SeparatorItem);
+ menu = new NSMenu() {};
+// menu.AddItem (new NSMenuItem () { Title="Up to date (102 MB)", Enabled = true });
+// menu.AddItem (NSMenuItem.SeparatorItem);
- var item = new NSMenuItem () {
+ item = new NSMenuItem () {
Title="SparkleShare", Enabled = true,
Action = new Selector ("ddd")
};
@@ -50,7 +56,7 @@ namespace SparkleShare
menu.AddItem (item);
- var tmp = new NSMenuItem () {
+/* var tmp = new NSMenuItem () {
Title="gnome-design", Enabled = true,
Action = new Selector ("ddd")
};
@@ -116,7 +122,7 @@ namespace SparkleShare
menu.AddItem (quit_menu_item);
-
+ */
statusItem.Menu = menu;
statusItem.HighlightMode = true;
diff --git a/SparkleShare/Mac/SparkleShare/SparkleShare.csproj b/SparkleShare/Mac/SparkleShare/SparkleShare.csproj
index e92b5cdc..8387f87f 100644
--- a/SparkleShare/Mac/SparkleShare/SparkleShare.csproj
+++ b/SparkleShare/Mac/SparkleShare/SparkleShare.csproj
@@ -23,7 +23,7 @@
false
-
+
diff --git a/SparkleShare/Mac/SparkleShare/SparkleUI.cs b/SparkleShare/Mac/SparkleShare/SparkleUI.cs
index 30ab976b..8ce3cf2f 100644
--- a/SparkleShare/Mac/SparkleShare/SparkleUI.cs
+++ b/SparkleShare/Mac/SparkleShare/SparkleUI.cs
@@ -1,128 +1,171 @@
-using System;
-using System.Drawing;
-using MonoMac.Foundation;
-using MonoMac.AppKit;
-using MonoMac.ObjCRuntime;
+// SparkleShare, an instant update workflow to Git.
+// Copyright (C) 2010 Hylke Bons
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+using Gtk;
+using Mono.Unix;
+using Mono.Unix.Native;
using SparkleLib;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading;
-namespace SparkleShare
-{
-
- [MonoMac.Foundation.Register("AppDelegate")]
- public class SparkleUI : NSApplicationDelegate
- {
- public void Run () {
- NSApplication.Main (new string [1] {""});
+namespace SparkleShare {
+
+ public class SparkleUI {
+
+ public static SparkleStatusIcon StatusIcon;
+ public static List OpenLogs;
+
+
+ // Short alias for the translations
+ public static string _(string s)
+ {
+ return Catalog.GetString (s);
}
-public SparkleUI () {NSApplication.Init ();
- Console.WriteLine("HI!2");
- // SparkleFetcher fetch = new SparkleFetcher ("", "");
- //SparkleRepo repo = new SparkleRepo ("/Users/hbons/Code/SparkleShare");
- // SparkleStatusIcon = new SparkleStatusIcon ();
+ public SparkleUI ()
+ {
+ // Initialize the application
+ Application.Init ();
+
+ // Create the statusicon
+ StatusIcon = new SparkleStatusIcon ();
- var statusItem = NSStatusBar.SystemStatusBar.CreateStatusItem (32);
+ // Keep track of which event logs are open
+ SparkleUI.OpenLogs = new List ();
- statusItem.Enabled = true;
+ SparkleShare.Controller.OnFirstRun += delegate {
+ Application.Invoke (delegate {
- statusItem.Image = NSImage.ImageNamed ("sparkleshare-idle.png");
- statusItem.AlternateImage = NSImage.ImageNamed ("sparkleshare-idle-focus.png");
- statusItem.Image.Size = new SizeF (16, 16);
- statusItem.AlternateImage.Size = new SizeF (16, 16);
+ SparkleIntro intro = new SparkleIntro ();
+ intro.ShowAll ();
- NSMenu menu = new NSMenu() {};
- menu.AddItem (new NSMenuItem () { Title="Up to date (102 MB)", Enabled = true });
- menu.AddItem (NSMenuItem.SeparatorItem);
-
- var item = new NSMenuItem () {
- Title="SparkleShare", Enabled = true,
- Action = new Selector ("ddd")
- };
-
- item.Activated += delegate {
- Console.WriteLine ("DDDD");
- };
-
- item.Image = NSImage.ImageNamed ("NSFolder");
- item.Image.Size = new SizeF (16, 16);
-
- menu.AddItem (item);
-
- var tmp = new NSMenuItem () {
- Title="gnome-design", Enabled = true,
- Action = new Selector ("ddd")
- };
-
- tmp.Activated += delegate {
- Console.WriteLine ("DDDD");
- };
-
- tmp.Image = NSImage.ImageNamed ("NSFolder");
- tmp.Image.Size = new SizeF (16, 16);
-
- menu.AddItem (tmp);
- menu.AddItem (NSMenuItem.SeparatorItem);
-
- Console.WriteLine (item.Action.Name);
-
- NSMenuItem sync_menu_item = new NSMenuItem () {
- Title = "Sync Remote Folder..."
+ });
};
- sync_menu_item.Activated += delegate {
- Console.WriteLine ("DDDD");
- };
+ SparkleShare.Controller.OnInvitation += delegate (string invitation_file_path) {
+ Application.Invoke (delegate {
- menu.AddItem (sync_menu_item);
- menu.AddItem (NSMenuItem.SeparatorItem);
+ SparkleInvitation invitation = new SparkleInvitation (invitation_file_path);
+ invitation.Present ();
- NSMenuItem notifications_menu_item = new NSMenuItem () {
- Title = "Show Notifications",
- State = NSCellStateValue.On
+ });
};
- notifications_menu_item.Activated += delegate {
- statusItem.Image = NSImage.ImageNamed ("NSComputer");
- if (notifications_menu_item.State == NSCellStateValue.On)
- notifications_menu_item.State = NSCellStateValue.Off;
- else
- notifications_menu_item.State = NSCellStateValue.On;
- };
+ // Show a bubble when there are new changes
+ SparkleShare.Controller.NotificationRaised += delegate (SparkleCommit commit, string repository_path) {
- menu.AddItem (notifications_menu_item);
- menu.AddItem (NSMenuItem.SeparatorItem);
+ string file_name = "";
+ string message = null;
+
+ if (commit.Added.Count > 0) {
+
+ foreach (string added in commit.Added) {
+ file_name = added;
+ break;
+ }
+
+ message = String.Format (_("added ‘{0}’"), file_name);
+
+ }
+
+ if (commit.Edited.Count > 0) {
+
+ foreach (string modified in commit.Edited) {
+ file_name = modified;
+ break;
+ }
+
+ message = String.Format (_("edited ‘{0}’"), file_name);
+
+ }
+
+ if (commit.Deleted.Count > 0) {
+
+ foreach (string removed in commit.Deleted) {
+ file_name = removed;
+ break;
+ }
+
+ message = String.Format (_("deleted ‘{0}’"), file_name);
+
+ }
+
+ int changes_count = (commit.Added.Count +
+ commit.Edited.Count +
+ commit.Deleted.Count);
+
+ if (changes_count > 1)
+ message += " + " + (changes_count - 1);
+
+
+ Application.Invoke (delegate {
+
+ SparkleBubble bubble = new SparkleBubble (commit.UserName, message);
+
+ string avatar_file_path = SparkleUIHelpers.GetAvatar (commit.UserEmail, 32);
+
+ if (avatar_file_path != null)
+ bubble.Icon = new Gdk.Pixbuf (avatar_file_path);
+ else
+ bubble.Icon = SparkleUIHelpers.GetIcon ("avatar-default", 32);
+
+// bubble.AddAction ("", "Show Events", delegate {
+
+// SparkleLog log = new SparkleLog (repository_path);
+// log.ShowAll ();
+
+// });
+
+// bubble.Show ();
+
+ });
- NSMenuItem about_menu_item = new NSMenuItem () {
- Title = "About"
};
- about_menu_item.Activated += delegate {
- Console.WriteLine ("DDDD");
- statusItem.Title = "bla";
- };
+ // Show a bubble when there was a conflict
+ SparkleShare.Controller.ConflictNotificationRaised += delegate {
+ Application.Invoke (delegate {
- menu.AddItem (about_menu_item);
- menu.AddItem (NSMenuItem.SeparatorItem);
+ string title = _("Ouch! Mid-air collision!");
+ string subtext = _("Don't worry, SparkleShare made a copy of each conflicting file.");
- NSMenuItem quit_menu_item = new NSMenuItem () {
- Title = "Quit"
+ SparkleBubble bubble = new SparkleBubble(title, subtext);
+// bubble.Show ();
+
+ });
};
- quit_menu_item.Activated += delegate {
- Console.WriteLine ("DDDD");
- Environment.Exit (0);
- };
-
- menu.AddItem (quit_menu_item);
-
-
- statusItem.Menu = menu;
- statusItem.HighlightMode = true;
}
+
+
+ // Runs the application
+ public void Run ()
+ {
+
+ Application.Run ();
+
+ }
+
}
-}
-
-
+}
\ No newline at end of file