From 0ca4bd07e37ec425776d47e614702658347b230e Mon Sep 17 00:00:00 2001 From: Hylke Bons Date: Tue, 18 May 2010 21:44:20 +0100 Subject: [PATCH] allow selecting of log entries to highlight users kinda --- SparkleShare/SparkleWindow.cs | 67 +++++++++++++++++++++++++---------- 1 file changed, 49 insertions(+), 18 deletions(-) diff --git a/SparkleShare/SparkleWindow.cs b/SparkleShare/SparkleWindow.cs index 1efbd4d1..50c5d991 100644 --- a/SparkleShare/SparkleWindow.cs +++ b/SparkleShare/SparkleWindow.cs @@ -35,6 +35,7 @@ namespace SparkleShare { private SparkleRepo SparkleRepo; private HBox LayoutHorizontal; private ScrolledWindow LogScrolledWindow; + private ScrolledWindow PeopleScrolledWindow; public SparkleWindow (SparkleRepo Repo) : base ("") { @@ -54,7 +55,7 @@ namespace SparkleShare { VBox LayoutVertical = new VBox (false, 0); LayoutHorizontal = new HBox (true, 6); - LayoutHorizontal.PackStart (CreatePeopleList ()); + LayoutHorizontal.PackStart (CreatePeopleList ("")); LayoutHorizontal.PackStart (CreateEventLog ("")); LayoutVertical.PackStart (LayoutHorizontal, true, true, 6); @@ -106,16 +107,25 @@ namespace SparkleShare { } - public void UpdateEventLog (string UserEmail) { + public void UpdateEventLog (string SelectedEmail) { LayoutHorizontal.Remove (LogScrolledWindow); - LogScrolledWindow = CreateEventLog (UserEmail); + LogScrolledWindow = CreateEventLog (SelectedEmail); LayoutHorizontal.Add (LogScrolledWindow); ShowAll (); } - public ScrolledWindow CreateEventLog(string UserEmail) { + public void UpdatePeopleList (string SelectedEmail) { + LayoutHorizontal.Remove (PeopleScrolledWindow); + PeopleScrolledWindow = CreatePeopleList (SelectedEmail); + LayoutHorizontal.Add (PeopleScrolledWindow); + LayoutHorizontal.ReorderChild (PeopleScrolledWindow, 0); + ShowAll (); + } + + public ScrolledWindow CreateEventLog(string SelectedEmail) { ListStore LogStore = new ListStore (typeof (Gdk.Pixbuf), + typeof (string), typeof (string), typeof (string)); @@ -147,12 +157,13 @@ namespace SparkleShare { TreeIter Iter; foreach (string Line in LastTwentyFive) { - if (Line.Contains (UserEmail)) { - Console.WriteLine ("!!!"); + if (Line.Contains (SelectedEmail)) { + // Look for the snowman! string [] Parts = Regex.Split (Line, "☃"); string Message = Parts [1]; string TimeAgo = Parts [2]; + string UserEmail = Parts [3]; string IconFile = "document-edited"; @@ -171,6 +182,10 @@ namespace SparkleShare { LogStore.SetValue (Iter, 0, ChangeIcon); LogStore.SetValue (Iter, 1, Message); LogStore.SetValue (Iter, 2, " " + TimeAgo); + // We're not showing e-mail, it's only + // there for lookup purposes + LogStore.SetValue (Iter, 3, UserEmail); + Console.WriteLine (UserEmail); } @@ -179,7 +194,6 @@ namespace SparkleShare { TreeView LogView = new TreeView (LogStore); LogView.HeadersVisible = false; - CellRendererText TextCellRight = new Gtk.CellRendererText (); TextCellRight.Alignment = Pango.Alignment.Right; @@ -195,6 +209,14 @@ namespace SparkleShare { Columns [1].Expand = true; Columns [1].MaxWidth = 150; + LogView.CursorChanged += delegate(object o, EventArgs args) { + TreeModel model; + if (LogView.Selection.GetSelected (out model, out Iter)) { + UpdatePeopleList ((string) LogStore.GetValue (Iter, 3)); + } + }; + + LogScrolledWindow = new ScrolledWindow (); LogScrolledWindow.AddWithViewport (LogView); @@ -203,7 +225,7 @@ namespace SparkleShare { } // Creates a visual list of people working in the repo - public ScrolledWindow CreatePeopleList () { + public ScrolledWindow CreatePeopleList (string SelectedEmail) { Process Process = new Process (); Process.EnableRaisingEvents = false; @@ -225,7 +247,8 @@ namespace SparkleShare { typeof (string)); int i = 0; - TreeIter PeopleIter; + TreeIter Iter; + TreePath TreePath = new TreePath (); foreach (string Line in Lines) { // Only add name if it isn't there already @@ -238,18 +261,23 @@ namespace SparkleShare { string UserEmail = Parts [1]; // Do something special if the person is you - if (UserName.Equals (SparkleRepo.UserName)) + if (UserEmail.Equals (SparkleRepo.UserEmail)) UserName += _(" (that’s you!)"); // Actually add to the list - PeopleIter = PeopleStore.Prepend (); - PeopleStore.SetValue (PeopleIter, 0, + Iter = PeopleStore.Prepend (); + PeopleStore.SetValue (Iter, 0, SparkleHelpers.GetAvatar (UserEmail , 32)); - PeopleStore.SetValue (PeopleIter, 1, + PeopleStore.SetValue (Iter, 1, "" + UserName + "\n" + "" + UserEmail + ""); - PeopleStore.SetValue (PeopleIter, 2, UserEmail); + PeopleStore.SetValue (Iter, 2, UserEmail); + + if (UserEmail.Equals (SelectedEmail)) { + TreePath = PeopleStore.GetPath (Iter); + Console.WriteLine (TreePath.Indices [0]); + } } @@ -265,19 +293,22 @@ namespace SparkleShare { PeopleView.ItemWidth = 200; PeopleView.Orientation = Orientation.Horizontal; PeopleView.SelectionMode = SelectionMode.Single; + + // TODO: doesn't work. Always seems to select the + // first row :( + PeopleView.SelectPath (TreePath); PeopleView.SelectionChanged += delegate (object o, EventArgs args) { if (PeopleView.SelectedItems.Length > 0) { - TreeIter Iter; PeopleStore.GetIter (out Iter, PeopleView.SelectedItems [0]); UpdateEventLog ((string) PeopleStore.GetValue (Iter, 2)); } else UpdateEventLog (""); }; - ScrolledWindow ScrolledWindow = new ScrolledWindow (); - ScrolledWindow.AddWithViewport (PeopleView); + PeopleScrolledWindow = new ScrolledWindow (); + PeopleScrolledWindow.AddWithViewport (PeopleView); - return ScrolledWindow; + return PeopleScrolledWindow; }