diff --git a/SparkleShare/SparkleShare.cs b/SparkleShare/SparkleShare.cs
index 2174115c..4f323ca6 100644
--- a/SparkleShare/SparkleShare.cs
+++ b/SparkleShare/SparkleShare.cs
@@ -23,6 +23,7 @@ namespace SparkleShare {
// This is SparkleShare!
public class SparkleShare {
+ public static SparkleRepo [] Repositories;
public static SparkleUI SparkleUI;
public static void Main (string [] args) {
@@ -64,7 +65,6 @@ namespace SparkleShare {
Gtk.Application.Init ();
SparkleUI = new SparkleUI (HideUI);
- SparkleUI.StartMonitoring ();
// The main loop
Gtk.Application.Run ();
diff --git a/SparkleShare/SparkleStatusIcon.cs b/SparkleShare/SparkleStatusIcon.cs
index 8d2b3d50..6c0be61e 100644
--- a/SparkleShare/SparkleStatusIcon.cs
+++ b/SparkleShare/SparkleStatusIcon.cs
@@ -15,12 +15,42 @@
// along with this program. If not, see .
using Gtk;
+using SparkleShare;
+using System;
namespace SparkleShare {
public class SparkleStatusIcon : StatusIcon {
public SparkleStatusIcon () : base () {
+Activate += delegate {
+
+
+ Menu popupMenu = new Menu();
+
+ foreach (SparkleRepo SparkleRepo in SparkleShare.Repositories) {
+ ImageMenuItem Item = new ImageMenuItem (SparkleRepo.Name);
+ Item.Image = new Image (SparkleHelpers.GetIcon ("folder", 16));
+
+ Item.Activated += delegate { SparkleWindow SparkleWindow = new SparkleWindow (SparkleRepo);
+ SparkleWindow.ShowAll ();Console.WriteLine (SparkleRepo.Name); };
+ popupMenu.Add(Item);
+
+
+ }
+ ImageMenuItem menuItemQuit = new ImageMenuItem ("Quit SparkleShare");
+ popupMenu.Add(menuItemQuit);
+
+
+
+
+
+ // Quit the application when quit has been clicked.
+ menuItemQuit.Activated += delegate { Environment.Exit(0); };
+ popupMenu.ShowAll();
+ popupMenu.Popup();
+
+};
SetIdleState ();
}
@@ -38,6 +68,14 @@ namespace SparkleShare {
// IconName = "folder-sync-error";
// Tooltip = "SparkleShare, something went wrong";
}
+
+
+ // Quits the program
+ public void Quit (object o, EventArgs args) {
+ System.IO.File.Delete (SparkleHelpers.CombineMore (SparklePaths.SparkleTmpPath +
+ "sparkleshare.pid"));
+ Application.Quit ();
+ }
}
diff --git a/SparkleShare/SparkleUI.cs b/SparkleShare/SparkleUI.cs
index 5d88ce6f..0389a416 100644
--- a/SparkleShare/SparkleUI.cs
+++ b/SparkleShare/SparkleUI.cs
@@ -22,12 +22,8 @@ using System.IO;
namespace SparkleShare {
- // Holds the status icon, window and repository list
public class SparkleUI {
- public SparkleRepo [] Repositories;
-
- public SparkleWindow SparkleWindow;
public static SparkleStatusIcon NotificationIcon;
public SparkleUI (bool HideUI) {
@@ -81,7 +77,6 @@ namespace SparkleShare {
".git"))) {
TmpRepos [i] = new SparkleRepo (Folder);
i++;
- Console.WriteLine (Folder);
// Attach emblems
if (SparklePlatform.Name.Equals ("GNOME")) {
@@ -96,22 +91,34 @@ namespace SparkleShare {
}
- Repositories = new SparkleRepo [i];
- Array.Copy (TmpRepos, Repositories, i);
+ SparkleShare.Repositories = new SparkleRepo [i];
+ Array.Copy (TmpRepos, SparkleShare.Repositories, i);
// Don't create the window and status
// icon when --disable-gui was given
if (!HideUI) {
- // Create the window
- SparkleWindow = new SparkleWindow (Repositories);
- SparkleWindow.DeleteEvent += CloseSparkleWindow;
-
// Create the status icon
NotificationIcon = new SparkleStatusIcon ();
- NotificationIcon.Activate += delegate {
- SparkleWindow.ToggleVisibility ();
- };
+
+ // Show a notification if there are no folders yet
+ if (SparkleShare.Repositories.Length == 0) {
+
+ SparkleBubble NoFoldersBubble;
+ NoFoldersBubble = new SparkleBubble ("Welcome to SparkleShare!",
+ "You don't have any " +
+ "folders set up yet.\n" +
+ "Please create some in " +
+ "the SparkleShare folder.");
+
+ NoFoldersBubble.IconName = "folder-sparkleshare";
+ NoFoldersBubble.AddAction ("", "Open SparkleShare Folder", delegate {
+ Process.StartInfo.FileName = "xdg-open";
+ Process.StartInfo.Arguments = SparklePaths.SparklePath;
+ Process.Start();
+ } );
+
+ }
}
@@ -146,21 +153,6 @@ namespace SparkleShare {
}
- // Closes the window
- public void CloseSparkleWindow (object o, DeleteEventArgs args) {
- SparkleWindow = new SparkleWindow (Repositories);
- SparkleWindow.DeleteEvent += CloseSparkleWindow;
- }
-
- public void StartMonitoring () { }
- public void StopMonitoring () { }
-
- // Quits the program
- public void Quit (object o, EventArgs args) {
- File.Delete (SparkleHelpers.CombineMore (SparklePaths.SparkleTmpPath +
- "sparkleshare.pid"));
- Application.Quit ();
- }
}
diff --git a/SparkleShare/SparkleWindow.cs b/SparkleShare/SparkleWindow.cs
index 2064f631..33f568a3 100644
--- a/SparkleShare/SparkleWindow.cs
+++ b/SparkleShare/SparkleWindow.cs
@@ -26,80 +26,36 @@ namespace SparkleShare {
public class SparkleWindow : Window {
- private bool Visibility;
- private VBox LayoutVerticalLeft;
- private VBox LayoutVerticalRight;
- private HBox LayoutHorizontal;
- public Notebook Notebook;
- private TreeView ReposView;
- private ListStore ReposStore;
- private SparkleRepo [] Repositories;
- public SparkleWindow (SparkleRepo [] R) : base ("SparkleShare") {
+ private SparkleRepo SparkleRepo;
- Repositories = R;
-
- // Show a notification if there are no folders yet
- if (Repositories.Length == 0) {
- SparkleBubble NoFoldersBubble;
- NoFoldersBubble = new SparkleBubble ("Welcome to SparkleShare!",
- "You don't have any " +
- "folders set up yet.\n" +
- "Please create some in " +
- "the SparkleShare folder.");
- NoFoldersBubble.IconName = "folder-sparkleshare";
- NoFoldersBubble.AddAction ("", "Open Folder",
- delegate {
- Process Process = new Process ();
- Process.StartInfo.FileName =
- "xdg-open";
- Process.StartInfo.Arguments =
- SparklePaths.SparklePath;
- Process.Start();
- } );
+ public SparkleWindow (SparkleRepo Repo) : base ("") {
+ SparkleRepo = Repo;
- } else CreateWindow ();
+ CreateWindow ();
}
public void CreateWindow () {
- Visibility = false;
- SetSizeRequest (720, 540);
+ SetSizeRequest (900, 540);
SetPosition (WindowPosition.Center);
BorderWidth = 6;
+ Title = "Happenings in ‘" + SparkleRepo.Name + "’";
IconName = "folder-sparkleshare";
VBox LayoutVertical = new VBox (false, 0);
- Notebook = new Notebook ();
- Notebook.BorderWidth = 6;
- LayoutHorizontal = new HBox (false, 0);
+ HBox HBox= new HBox (true, 6);
+ HBox.PackStart (CreatePeopleList());
+ HBox.PackStart (CreateEventLog());
- ReposStore = new ListStore (typeof (Gdk.Pixbuf),
- typeof (string),
- typeof (SparkleRepo));
-
- LayoutVerticalLeft = CreateReposList ();
- LayoutVerticalLeft.BorderWidth = 12;
-
- LayoutVerticalRight =
- CreateDetailedView (Repositories [0]);
-
- LayoutHorizontal.PackStart (LayoutVerticalLeft,
- false, false, 0);
-
- LayoutHorizontal.PackStart (LayoutVerticalRight,
- true, true, 12);
-
- Notebook.AppendPage (CreateEventLog (), new Label ("Events"));
- Notebook.AppendPage (LayoutHorizontal, new Label ("Folders"));
-
- LayoutVertical.PackStart (Notebook, true, true, 0);
+ LayoutVertical.PackStart (HBox, true, true, 0);
+ LayoutVertical.PackStart (CreateDetailedView(), false, false, 0);
HButtonBox DialogButtons = new HButtonBox ();
DialogButtons.Layout = ButtonBoxStyle.End;
@@ -107,8 +63,7 @@ namespace SparkleShare {
Button CloseButton = new Button (Stock.Close);
CloseButton.Clicked += delegate (object o, EventArgs args) {
- Visibility = false;
- HideAll ();
+ Destroy ();
};
DialogButtons.Add (CloseButton);
@@ -143,72 +98,8 @@ namespace SparkleShare {
}
- // Creates a visual list of repositories
- public VBox CreateReposList() {
-
- Gdk.Pixbuf FolderIcon = SparkleHelpers.GetIcon ("folder", 32);
-
- TreeIter ReposIter;
- foreach (SparkleRepo SparkleRepo in Repositories) {
-
- ReposIter = ReposStore.Prepend ();
-
- ReposStore.SetValue (ReposIter, 0, FolderIcon);
-
- ReposStore.SetValue (ReposIter, 1, SparkleRepo.Name + " \n" +
- SparkleRepo.Domain + " ");
-
- ReposStore.SetValue (ReposIter, 2, SparkleRepo);
-
- }
-
- ScrolledWindow ScrolledWindow = new ScrolledWindow ();
-
- ReposView = new TreeView (ReposStore);
- ReposView.HeadersVisible = false;
-
- ReposView.AppendColumn ("", new CellRendererPixbuf () , "pixbuf", 0);
- ReposView.AppendColumn ("", new Gtk.CellRendererText (), "text", 1);
-
- TreeViewColumn [] ReposViewColumns = ReposView.Columns;
-
- ReposViewColumns [0].MinWidth = 48;
-
- ReposStore.IterNthChild (out ReposIter, 0);
- ReposView.ActivateRow (ReposStore.GetPath (ReposIter),
- ReposViewColumns [1]);
-
- // Update the detailed view when something
- // gets selected in the folders list.
- ReposView.CursorChanged += delegate {
-
- TreeSelection Selection = ReposView.Selection;;
- TreeIter Iter = new TreeIter ();;
-
- Selection.GetSelected (out Iter);
-
- SparkleRepo SparkleRepo =
- (SparkleRepo) ReposStore.GetValue (Iter, 2);
-
- LayoutHorizontal.Remove (LayoutVerticalRight);
- LayoutVerticalRight = CreateDetailedView (SparkleRepo);
- LayoutHorizontal.PackStart (LayoutVerticalRight, true, true, 12);
- ShowAll ();
-
- };
-
-
- ScrolledWindow.AddWithViewport (ReposView);
- ScrolledWindow.WidthRequest = 200;
- VBox VBox = new VBox (false, 6);
- VBox.PackStart (ScrolledWindow, true, true, 0);
-
- return VBox;
-
- }
-
// Creates the detailed view
- public VBox CreateDetailedView (SparkleRepo SparkleRepo) {
+ public Table CreateDetailedView () {
// Create box layout for Remote Address
HBox RemoteUrlBox = new HBox (false, 0);
@@ -280,29 +171,17 @@ namespace SparkleShare {
}
};
- VBox VBox = new VBox (false, 0);
- Table Table = new Table(7, 2, false);
- Table.RowSpacing = 6;
+ Table Table = new Table(2, 2, true);
+ Table.RowSpacing = 3;
+ Table.ColumnSpacing = 12;
+ Table.BorderWidth = 9;
+ Table.Attach (RemoteUrlBox, 0, 1, 0, 1);
+ Table.Attach (LocalPathBox, 0, 1, 1, 2);
+ Table.Attach (NotifyChangesCheckButton, 1, 2, 0, 1);
+ Table.Attach (SyncChangesCheckButton, 1, 2, 1, 2);
- Table.Attach (RemoteUrlBox, 0, 2, 0, 1);
- Table.Attach (LocalPathBox, 0, 2, 1, 2);
- Table.Attach (NotifyChangesCheckButton, 0, 2, 4, 5);
- Table.Attach (SyncChangesCheckButton, 0, 2, 5, 6);
-
- Label PeopleLabel =
- new Label ("Active users" +
- "");
-
- PeopleLabel.UseMarkup = true;
- PeopleLabel.SetAlignment (0, 0);
-
- VBox.PackStart (Table, false, false, 12);
-
- VBox.PackStart (PeopleLabel, false, false, 0);
- VBox.PackStart (CreatePeopleList (SparkleRepo ), true, true, 12);
-
- return VBox;
+ return Table;
}
@@ -319,11 +198,11 @@ namespace SparkleShare {
Process.StartInfo.FileName = "git";
string Output = "";
- foreach (SparkleRepo SparkleRepo in Repositories) {
+ foreach (SparkleRepo SparkleRepo in SparkleShare.Repositories) {
// We're using the snowman here to separate messages :)
Process.StartInfo.Arguments =
- "log --format=\"%at☃In ‘" + SparkleRepo.Name + "’, %an %s☃%cr\" -25";
+ "log --format=\"%at☃%an %s☃%cr\" -25";
Process.StartInfo.WorkingDirectory = SparkleRepo.LocalPath;
Process.Start();
@@ -388,14 +267,13 @@ namespace SparkleShare {
ScrolledWindow ScrolledWindow = new ScrolledWindow ();
ScrolledWindow.AddWithViewport (LogView);
- ScrolledWindow.BorderWidth = 12;
return ScrolledWindow;
}
// Creates a visual list of people working in the repo
- public ScrolledWindow CreatePeopleList (SparkleRepo SparkleRepo) {
+ public ScrolledWindow CreatePeopleList () {
Process Process = new Process ();
Process.EnableRaisingEvents = false;
@@ -460,19 +338,6 @@ namespace SparkleShare {
}
- // Shows or hides the window
- public void ToggleVisibility() {
- if (Repositories.Length > 0) {
- Present ();
- if (Visibility) {
- if (HasFocus)
- HideAll ();
- } else {
- ShowAll ();
- }
- }
- }
-
}
}