rethink UI

This commit is contained in:
Hylke Bons 2010-05-16 17:10:50 +01:00
parent 347a127c2e
commit 41150946a8
4 changed files with 85 additions and 190 deletions

View file

@ -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 ();

View file

@ -15,12 +15,42 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
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 ();
}
}

View file

@ -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 ();
}
}

View file

@ -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 ("<span font_size='large'><b>Active users" +
"</b></span>");
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 ();
}
}
}
}
}