diff --git a/SparkleDiff/RevisionView.cs b/SparkleDiff/RevisionView.cs
index d84af6c9..9b4be802 100644
--- a/SparkleDiff/RevisionView.cs
+++ b/SparkleDiff/RevisionView.cs
@@ -14,9 +14,6 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-// TODO: Hand cursor when hovering icon view items
-// TODO: Use theme colours
-
using Gtk;
using Mono.Unix;
using System;
@@ -39,11 +36,13 @@ namespace SparkleShare {
public IconView IconView;
public int Selected;
- private ToggleButton ToggleButton;
+ public ToggleButton ToggleButton;
private Viewport Viewport;
private ListStore Store;
private Image Image;
private int Count;
+ private string SecondaryTextColor;
+ private string SelectedTextColor;
public RevisionView () : base (false, 0)
@@ -52,6 +51,12 @@ namespace SparkleShare {
Count = 0;
Selected = 0;
+ TreeView treeview = new TreeView ();
+ SelectedTextColor = GdkColorToHex (treeview.Style.Foreground (StateType.Selected));
+
+ Window window = new Window ("");
+ SecondaryTextColor = GdkColorToHex (window.Style.Foreground (StateType.Insensitive));
+
ToggleButton = new ToggleButton ();
ToggleButton.Clicked += ToggleView;
ToggleButton.Relief = ReliefStyle.None;
@@ -85,18 +90,37 @@ namespace SparkleShare {
public void ChangeSelection (object o, EventArgs args)
{
+ TreeIter iter;
+ Store.GetIter (out iter, new TreePath (GetSelected ().ToString ()));
+ string text = (string) Store.GetValue (iter, 1);
+ Store.SetValue (iter, 1, text.Replace (SelectedTextColor, SecondaryTextColor));
+
if (IconView.SelectedItems.Length > 0) {
- TreeIter iter;
Store.GetIter (out iter, IconView.SelectedItems [0]);
SetSelected ((int) Store.GetValue (iter, 2));
+ text = (string) Store.GetValue (iter, 1);
+ text = text.Replace (SecondaryTextColor, SelectedTextColor);
+ Store.SetValue (iter, 1, text);
+
} else {
IconView.SelectPath (new TreePath (GetSelected ().ToString()));
}
-
+
+ }
+
+
+ // Converts a Gdk RGB color to a hex value.
+ // Example: from "rgb:0,0,0" to "#000000"
+ public string GdkColorToHex (Gdk.Color color)
+ {
+ return String.Format("#{0:X2}{1:X2}{2:X2}",
+ (int) Math.Truncate(color.Red / 256.00),
+ (int) Math.Truncate(color.Green / 256.00),
+ (int) Math.Truncate(color.Blue / 256.00));
}
@@ -126,8 +150,8 @@ namespace SparkleShare {
string text = (string) Store.GetValue (iter, 1);
Gdk.Pixbuf pixbuf = (Gdk.Pixbuf) Store.GetValue (iter, 0);
-
- Label label = new Label (text);
+
+ Label label = new Label (text.Replace (SelectedTextColor, SecondaryTextColor));
label.UseMarkup = true;
Arrow arrow_down = new Arrow (ArrowType.Down, ShadowType.None);
@@ -152,14 +176,17 @@ namespace SparkleShare {
public void AddRow (Gdk.Pixbuf pixbuf, string header, string subtext)
{
- Store.AppendValues (pixbuf, "" + header + "\n" + subtext + "", Count);
+ Store.AppendValues (pixbuf, "" + header + "\n" +
+ "" + subtext + "",
+ Count);
+
IconView.Model = Store;
Count++;
}
- // Toggles between a displayed image and a list of revisions
+ // Toggles between a displayed image and a list of revisions
public void ToggleView (object o, EventArgs args)
{
diff --git a/SparkleDiff/SparkleDiffWindow.cs b/SparkleDiff/SparkleDiffWindow.cs
index 0d7b0b81..d4a831fa 100644
--- a/SparkleDiff/SparkleDiffWindow.cs
+++ b/SparkleDiff/SparkleDiffWindow.cs
@@ -54,8 +54,7 @@ namespace SparkleShare {
DeleteEvent += Quit;
- // TRANSLATORS: The parameter is a filename
- Title = String.Format(_("Comparing Revisions of ‘{0}’"), file_name);
+ Title = file_name;
VBox layout_vertical = new VBox (false, 12);
@@ -127,19 +126,30 @@ namespace SparkleShare {
HookUpViews ();
};
+
+ ViewLeft.ToggleButton.Clicked += delegate {
+ if (ViewLeft.ToggleButton.Active)
+ DetachViews ();
+ else
+ HookUpViews ();
+ };
+
+ ViewRight.ToggleButton.Clicked += delegate {
+ if (ViewLeft.ToggleButton.Active)
+ DetachViews ();
+ else
+ HookUpViews ();
+ };
layout_horizontal.PackStart (ViewLeft);
layout_horizontal.PackStart (ViewRight);
-
-
ResizeToViews ();
// Order time view according to the user's reading direction
if (Direction == Gtk.TextDirection.Rtl)
layout_horizontal.ReorderChild (ViewLeft, 1);
-
HookUpViews ();
HButtonBox dialog_buttons = new HButtonBox ();
@@ -159,24 +169,9 @@ namespace SparkleShare {
Add (layout_vertical);
}
-
- // Converts a UNIX timestamp to a more usable time object
- public DateTime UnixTimestampToDateTime (int timestamp)
- {
- DateTime unix_epoch = new DateTime (1970, 1, 1, 0, 0, 0, 0);
- return unix_epoch.AddSeconds (timestamp);
- }
-
-
- // Looks up an icon from the system's theme
- public Gdk.Pixbuf GetIcon (string name, int size)
- {
- IconTheme icon_theme = new IconTheme ();
- icon_theme.AppendSearchPath (System.IO.Path.Combine ("/usr/share/sparkleshare", "icons"));
- return icon_theme.LoadIcon (name, size, IconLookupFlags.GenericFallback);
- }
+ // Resizes the window so it will fit the content in the best possible way
private void ResizeToViews ()
{
@@ -195,6 +190,7 @@ namespace SparkleShare {
}
+
// Hooks up two views so their scrollbars will be kept in sync
private void HookUpViews ()
{
@@ -205,6 +201,18 @@ namespace SparkleShare {
ViewRight.ScrolledWindow.Vadjustment.ValueChanged += SyncViewsVertically;
}
+
+
+ // Detach the two views from each other so they don't try to sync anymore
+ private void DetachViews ()
+ {
+
+ ViewLeft.ScrolledWindow.Hadjustment.ValueChanged -= SyncViewsHorizontally;
+ ViewLeft.ScrolledWindow.Vadjustment.ValueChanged -= SyncViewsVertically;
+ ViewRight.ScrolledWindow.Hadjustment.ValueChanged -= SyncViewsHorizontally;
+ ViewRight.ScrolledWindow.Vadjustment.ValueChanged -= SyncViewsVertically;
+
+ }
// Keeps the two image views in sync horizontally
@@ -244,6 +252,23 @@ namespace SparkleShare {
}
+ // Converts a UNIX timestamp to a more usable time object
+ public DateTime UnixTimestampToDateTime (int timestamp)
+ {
+ DateTime unix_epoch = new DateTime (1970, 1, 1, 0, 0, 0, 0);
+ return unix_epoch.AddSeconds (timestamp);
+ }
+
+
+ // Looks up an icon from the system's theme
+ public Gdk.Pixbuf GetIcon (string name, int size)
+ {
+ IconTheme icon_theme = new IconTheme ();
+ icon_theme.AppendSearchPath (System.IO.Path.Combine ("/usr/share/sparkleshare", "icons"));
+ return icon_theme.LoadIcon (name, size, IconLookupFlags.GenericFallback);
+ }
+
+
// Creates an MD5 hash of input
public static string GetMD5 (string s)
{
@@ -255,12 +280,10 @@ namespace SparkleShare {
// TODO: Turn this into an avatar fetching library
- // TODO: This should be included from SparkleHelpers, but I don't know how to do that
// Gets the avatar for a specific email address and size
public Gdk.Pixbuf GetAvatar (string Email, int Size)
{
-
UnixUserInfo UnixUserInfo = new UnixUserInfo (UnixEnvironment.UserName);
string HomePath = UnixUserInfo.HomeDirectory;
@@ -271,7 +294,6 @@ namespace SparkleShare {
if (!Directory.Exists (AvatarPath)) {
Directory.CreateDirectory (AvatarPath);
-// SparkleHelpers.DebugInfo ("Config", "Created '" + AvatarPath + "'");
}
string AvatarFilePath = CombineMore (AvatarPath, Email);
@@ -295,7 +317,6 @@ namespace SparkleShare {
FileInfo TmpFileInfo = new FileInfo (TmpFile);
if (TmpFileInfo.Length > 255)
File.Move (TmpFile, AvatarFilePath);
- Console.WriteLine ("AAAAAAA");
};
}
@@ -310,6 +331,7 @@ namespace SparkleShare {
}
+
// Quits the program
private void Quit (object o, EventArgs args)
{
diff --git a/SparkleShare/SparkleDialog.cs b/SparkleShare/SparkleDialog.cs
index b3af6c27..e3017d3d 100644
--- a/SparkleShare/SparkleDialog.cs
+++ b/SparkleShare/SparkleDialog.cs
@@ -20,6 +20,7 @@ using SparkleShare;
using System;
using System.Diagnostics;
using System.IO;
+using System.Text.RegularExpressions;
namespace SparkleShare {
@@ -109,7 +110,7 @@ namespace SparkleShare {
HideAll ();
string RepoRemoteUrl = RemoteUrlCombo.Entry.Text;
- RepoRemoteUrl = SparkleHelpers.SparkleToGitUrl (RepoRemoteUrl);
+ RepoRemoteUrl = SparkleToGitUrl (RepoRemoteUrl);
int SlashPos = RepoRemoteUrl.LastIndexOf ("/");
int ColumnPos = RepoRemoteUrl.LastIndexOf (":");
@@ -212,12 +213,35 @@ namespace SparkleShare {
// Enables the Add button when the fields are
// filled in correctly
public void CheckFields (object o, EventArgs args) {
- if (SparkleHelpers.IsGitUrl (RemoteUrlCombo.Entry.Text))
+ if (IsGitUrl (RemoteUrlCombo.Entry.Text))
AddButton.Sensitive = true;
else
AddButton.Sensitive = false;
}
+
+ // Convert the more human readable sparkle:// url to something Git can use.
+ // Example: sparkle://gitorious.org/sparkleshare ssh://git@gitorious.org/sparkleshare
+ public static string SparkleToGitUrl (string Url)
+ {
+ if (Url.StartsWith ("sparkle://"))
+ Url = Url.Replace ("sparkle://", "ssh://git@");
+
+ // Usually don't need the ".git" at the end.
+ // It looks ugly as a folder too.
+ if (Url.EndsWith (".git"))
+ Url = Url.Substring (0, Url.Length - 4);
+
+ return Url;
+ }
+
+
+ // Checks if a url is a valid git url
+ public static bool IsGitUrl (string Url)
+ {
+ return Regex.Match (Url, @"(.)+(/|:)(.)+").Success;
+ }
+
}
}
diff --git a/SparkleShare/SparkleHelpers.cs b/SparkleShare/SparkleHelpers.cs
index d26bef19..88f53e49 100644
--- a/SparkleShare/SparkleHelpers.cs
+++ b/SparkleShare/SparkleHelpers.cs
@@ -21,19 +21,13 @@ using System.IO;
using System.Net;
using System.Security.Cryptography;
using System.Text;
-using System.Text.RegularExpressions;
+
namespace SparkleShare {
public static class SparkleHelpers
{
- public static string _ (string s)
- {
- return Catalog.GetString (s);
- }
-
-
// Gets the avatar for a specific email address and size
public static Gdk.Pixbuf GetAvatar (string Email, int Size)
{
@@ -89,28 +83,9 @@ namespace SparkleShare {
Byte[] encodedBytes = md5.ComputeHash (bytes);
return BitConverter.ToString (encodedBytes).ToLower ().Replace ("-", "");
}
-
-
- // Convert the more human readable sparkle:// url to
- // something Git can use
- // Example: sparkle://gitorious.org/sparkleshare
- // to ssh://git@gitorious.org/sparkleshare
- public static string SparkleToGitUrl (string Url)
- {
- if (Url.StartsWith ("sparkle://"))
- Url = Url.Replace ("sparkle://", "ssh://git@");
-
- // Usually don't need the ".git" at the end.
- // It looks ugly as a folder too.
- if (Url.EndsWith (".git"))
- Url = Url.Substring (0, Url.Length - 4);
-
- return Url;
- }
-
// Makes it possible to combine more than
- // two paths at once.
+ // two paths at once
public static string CombineMore (params string [] Parts)
{
string NewPath = " ";
@@ -130,13 +105,6 @@ namespace SparkleShare {
}
- // Checks if a url is a valid git url
- public static bool IsGitUrl (string Url)
- {
- return Regex.Match (Url, @"(.)+(/|:)(.)+").Success;
- }
-
-
public static bool ShowDebugInfo = true;
@@ -198,21 +166,6 @@ namespace SparkleShare {
}
- // Checks for unicorns
- public static void CheckForUnicorns (string s) {
-
- s = s.ToLower ();
- if (s.Contains ("unicorn") && (s.Contains (".png") || s.Contains (".jpg"))) {
- string title = _("Hold your ponies!");
- string subtext = _("SparkleShare is known to be insanely fast with \n" +
- "pictures of unicorns. Please make sure your internets\n" +
- "are upgraded to the latest version to avoid problems.");
- SparkleBubble unicorn_bubble = new SparkleBubble (title, subtext);
- unicorn_bubble.Show ();
- }
-
- }
-
}
}
diff --git a/SparkleShare/SparkleRepo.cs b/SparkleShare/SparkleRepo.cs
index 8d856d6a..291142ba 100644
--- a/SparkleShare/SparkleRepo.cs
+++ b/SparkleShare/SparkleRepo.cs
@@ -179,7 +179,7 @@ namespace SparkleShare {
FetchTimer.Start ();
BufferTimer.Start ();
- SparkleHelpers.CheckForUnicorns (Message);
+ CheckForUnicorns (Message);
}
@@ -457,6 +457,22 @@ namespace SparkleShare {
}
+
+ // Checks for unicorns
+ public static void CheckForUnicorns (string s) {
+
+ s = s.ToLower ();
+ if (s.Contains ("unicorn") && (s.Contains (".png") || s.Contains (".jpg"))) {
+ string title = _("Hold your ponies!");
+ string subtext = _("SparkleShare is known to be insanely fast with \n" +
+ "pictures of unicorns. Please make sure your internets\n" +
+ "are upgraded to the latest version to avoid problems.");
+ SparkleBubble unicorn_bubble = new SparkleBubble (title, subtext);
+ unicorn_bubble.Show ();
+ }
+
+ }
+
}
}