working
[tfs.git] / tools / tf / ChangesetView.cs
blobf44276547c09b00eb891a6089596f471d7d319ba
1 using System;
2 using System.IO;
3 using System.Collections;
4 using System.Collections.Generic;
5 using System.Net;
6 using System.Text;
7 using Gtk;
8 using Microsoft.TeamFoundation.Client;
9 using Microsoft.TeamFoundation.VersionControl.Common;
10 using Microsoft.TeamFoundation.VersionControl.Client;
12 public interface IChangesetViewChild
14 void UpdateCid(int cid);
17 public class ChangesetView : Gtk.VPaned, IExploreViewChild
19 private Driver driver;
20 private Gtk.ListStore changesetListStore;
21 private Gtk.TreeView changesetList;
22 private ChangesetDetailView changesetDetailView;
23 private ChangesetDiffView changesetDiffView;
24 private Notebook viewChildren;
25 private int stopAfter;
26 private int currentCid = 0;
28 public void InitializeChangesetList()
30 changesetList = new Gtk.TreeView();
32 changesetList.AppendColumn ("Id", new Gtk.CellRendererText (), "text", 0);
33 changesetList.AppendColumn ("Owner", new Gtk.CellRendererText (), "text", 1);
34 changesetList.AppendColumn ("Date", new Gtk.CellRendererText (), "text", 2);
35 changesetList.AppendColumn ("Comment", new Gtk.CellRendererText (), "text", 3);
37 changesetListStore = new Gtk.ListStore (typeof(string), typeof(string), typeof(string), typeof(string));
38 changesetList.Model = changesetListStore;
39 changesetList.Selection.Changed += OnSelectionChanged;
41 #if HAVE_ATLEAST_GTK_210
42 changesetList.EnableGridLines = TreeViewGridLines.Vertical;
43 #endif
46 public ChangesetView(Driver driver, int stopAfter)
48 this.driver = driver;
49 this.stopAfter = stopAfter;
51 InitializeChangesetList();
53 ScrolledWindow scrolledWindow1 = new ScrolledWindow();
54 scrolledWindow1.Add(changesetList);
56 Add1(scrolledWindow1);
58 viewChildren = new Notebook ();
59 viewChildren.TabPos = PositionType.Bottom;
60 Add2(viewChildren);
62 changesetDetailView = new ChangesetDetailView(driver);
63 viewChildren.AppendPage (changesetDetailView, new Label ("Details"));
65 changesetDiffView = new ChangesetDiffView(driver);
66 viewChildren.AppendPage (changesetDiffView, new Label ("Unified Diff"));
68 int x, y, width, height, depth;
69 RootWindow.GetGeometry (out x, out y, out width, out height, out depth);
70 Position = Convert.ToInt32((height - 40) * 0.4);
72 viewChildren.SwitchPage += OnSwitchPage;
75 public void OnSwitchPage (object o, SwitchPageArgs args)
77 if (currentCid == 0) return;
78 Console.WriteLine((int)args.PageNum);
79 IChangesetViewChild child = viewChildren.GetNthPage((int)args.PageNum) as IChangesetViewChild;
80 if (child == null) return;
81 Console.WriteLine("here");
82 UpdateChildCid(child);
85 protected void UpdateChildCid(IChangesetViewChild child)
87 if (child == null) return;
88 GdkWindow.Cursor = new Gdk.Cursor(Gdk.CursorType.Watch);
89 child.UpdateCid(currentCid);
90 GdkWindow.Cursor = null;
93 void OnSelectionChanged (object o, EventArgs args)
95 TreeIter iter;
96 TreeModel model;
98 TreeSelection treeSelection = o as TreeSelection;
99 if (!(treeSelection.GetSelected (out model, out iter))) return;
101 currentCid = Convert.ToInt32(model.GetValue (iter, 0));
103 IChangesetViewChild child = viewChildren.CurrentPageWidget as IChangesetViewChild;
104 UpdateChildCid(child);
107 public void UpdatePath(string path)
109 if (String.IsNullOrEmpty(path)) return;
111 changesetListStore.Clear();
112 changesetDetailView.Clear();
113 changesetDiffView.Clear();
115 bool detailed = false;
116 IEnumerable changeSets = driver.VersionControlServer.QueryHistory(path, VersionSpec.Latest, 0, RecursionType.Full, null,
117 null, null, stopAfter, detailed, false, false);
119 foreach (Changeset changeSet in changeSets)
121 changesetListStore.AppendValues(changeSet.ChangesetId.ToString(),
122 changeSet.Owner,
123 changeSet.CreationDate.ToString("d"),
124 changeSet.Comment);
127 // this would be nice be seems to cause a segfault
128 //changesetList.ColumnsAutosize();