32
32
using System.Collections;
34
34
using MonoDevelop.Core;
35
using MonoDevelop.Core.Gui.Components;
36
35
using MonoDevelop.Components;
37
using MonoDevelop.Core.Gui.Dialogs;
36
using MonoDevelop.Ide.Gui.Dialogs;
40
39
namespace MonoDevelop.NUnit
42
41
public class NUnitOptionsPanel : OptionsPanel
45
sealed class NUnitOptionsWidget : GladeWidgetExtract
48
[Glade.Widget] Gtk.TreeView categoryTree;
49
[Glade.Widget] CheckButton useParentCheck;
50
[Glade.Widget] RadioButton noFilterRadio;
51
[Glade.Widget] RadioButton includeRadio;
52
[Glade.Widget] RadioButton excludeRadio;
53
[Glade.Widget] Button addButton;
54
[Glade.Widget] Button removeButton;
56
TreeViewColumn textColumn;
60
NUnitCategoryOptions options;
61
NUnitCategoryOptions localOptions;
63
public NUnitOptionsWidget (Properties customizationObject) : base ("nunit.glade", "NUnitOptions")
65
test = ((Properties)customizationObject).Get<UnitTest> ("UnitTest");
66
config = ((Properties)customizationObject).Get<string> ("Config");
67
options = localOptions = (NUnitCategoryOptions) test.GetOptions (typeof(NUnitCategoryOptions), config);
69
store = new TreeStore (typeof(string));
70
categoryTree.Model = store;
71
categoryTree.HeadersVisible = false;
73
CellRendererText tr = new CellRendererText ();
75
tr.Edited += new EditedHandler (OnCategoryEdited);
76
textColumn = new TreeViewColumn ();
77
textColumn.Title = GettextCatalog.GetString ("Category");
78
textColumn.PackStart (tr, false);
79
textColumn.AddAttribute (tr, "text", 0);
80
textColumn.Expand = true;
81
categoryTree.AppendColumn (textColumn);
83
if (test.Parent != null)
84
useParentCheck.Active = !test.HasOptions (typeof(NUnitCategoryOptions), config);
86
useParentCheck.Active = false;
87
useParentCheck.Sensitive = false;
90
if (!options.EnableFilter)
91
noFilterRadio.Active = true;
92
else if (options.Exclude)
93
excludeRadio.Active = true;
95
includeRadio.Active = true;
99
noFilterRadio.Toggled += new EventHandler (OnFilterToggled);
100
includeRadio.Toggled += new EventHandler (OnFilterToggled);
101
excludeRadio.Toggled += new EventHandler (OnFilterToggled);
102
useParentCheck.Toggled += new EventHandler (OnToggledUseParent);
103
addButton.Clicked += new EventHandler (OnAddCategory);
104
removeButton.Clicked += new EventHandler (OnRemoveCategory);
109
noFilterRadio.Sensitive = !useParentCheck.Active;
110
includeRadio.Sensitive = !useParentCheck.Active;
111
excludeRadio.Sensitive = !useParentCheck.Active;
112
categoryTree.Sensitive = !useParentCheck.Active && !noFilterRadio.Active;
113
removeButton.Sensitive = !useParentCheck.Active && !noFilterRadio.Active;
114
addButton.Sensitive = !useParentCheck.Active && !noFilterRadio.Active;
117
foreach (string cat in options.Categories)
118
store.AppendValues (cat);
121
void OnToggledUseParent (object sender, EventArgs args)
123
if (useParentCheck.Active)
124
options = (NUnitCategoryOptions) test.Parent.GetOptions (typeof(NUnitCategoryOptions), config);
126
options = localOptions;
128
if (!options.EnableFilter)
129
noFilterRadio.Active = true;
130
else if (options.Exclude)
131
excludeRadio.Active = true;
133
includeRadio.Active = true;
138
void OnFilterToggled (object sender, EventArgs args)
140
options.EnableFilter = !noFilterRadio.Active;
141
options.Exclude = excludeRadio.Active;
145
void OnAddCategory (object sender, EventArgs args)
147
TreeIter it = store.AppendValues ("");
148
categoryTree.SetCursor (store.GetPath (it), textColumn, true);
151
void OnRemoveCategory (object sender, EventArgs args)
155
if (!categoryTree.Selection.GetSelected (out foo, out iter))
157
string old = (string) store.GetValue (iter, 0);
158
options.Categories.Remove (old);
159
store.Remove (ref iter);
162
void OnCategoryEdited (object sender, EditedArgs args)
165
if (!store.GetIter (out iter, new TreePath (args.Path)))
168
string old = (string) store.GetValue (iter, 0);
169
if (args.NewText.Length == 0) {
170
options.Categories.Remove (old);
171
store.Remove (ref iter);
173
int i = options.Categories.IndexOf (old);
175
options.Categories.Add (args.NewText);
177
options.Categories [i] = args.NewText;
178
store.SetValue (iter, 0, args.NewText);
182
public void Store (Properties customizationObject)
184
if (useParentCheck.Active)
185
test.ResetOptions (typeof(NUnitCategoryOptions), config);
187
test.SetOptions (options, config);
191
43
NUnitOptionsWidget widget;
193
45
public override Widget CreatePanelWidget ()
201
53
widget.Store ((Properties) DataObject);
57
partial class NUnitOptionsWidget: Gtk.Bin
60
TreeViewColumn textColumn;
64
NUnitCategoryOptions options;
65
NUnitCategoryOptions localOptions;
67
public NUnitOptionsWidget (Properties customizationObject)
70
test = ((Properties)customizationObject).Get<UnitTest> ("UnitTest");
71
config = ((Properties)customizationObject).Get<string> ("Config");
72
options = localOptions = (NUnitCategoryOptions) test.GetOptions (typeof(NUnitCategoryOptions), config);
74
store = new TreeStore (typeof(string));
75
categoryTree.Model = store;
76
categoryTree.HeadersVisible = false;
78
CellRendererText tr = new CellRendererText ();
80
tr.Edited += new EditedHandler (OnCategoryEdited);
81
textColumn = new TreeViewColumn ();
82
textColumn.Title = GettextCatalog.GetString ("Category");
83
textColumn.PackStart (tr, false);
84
textColumn.AddAttribute (tr, "text", 0);
85
textColumn.Expand = true;
86
categoryTree.AppendColumn (textColumn);
88
if (test.Parent != null)
89
useParentCheck.Active = !test.HasOptions (typeof(NUnitCategoryOptions), config);
91
useParentCheck.Active = false;
92
useParentCheck.Sensitive = false;
95
if (!options.EnableFilter)
96
noFilterRadio.Active = true;
97
else if (options.Exclude)
98
excludeRadio.Active = true;
100
includeRadio.Active = true;
104
noFilterRadio.Toggled += new EventHandler (OnFilterToggled);
105
includeRadio.Toggled += new EventHandler (OnFilterToggled);
106
excludeRadio.Toggled += new EventHandler (OnFilterToggled);
107
useParentCheck.Toggled += new EventHandler (OnToggledUseParent);
108
addButton.Clicked += new EventHandler (OnAddCategory);
109
removeButton.Clicked += new EventHandler (OnRemoveCategory);
114
noFilterRadio.Sensitive = !useParentCheck.Active;
115
includeRadio.Sensitive = !useParentCheck.Active;
116
excludeRadio.Sensitive = !useParentCheck.Active;
117
categoryTree.Sensitive = !useParentCheck.Active && !noFilterRadio.Active;
118
removeButton.Sensitive = !useParentCheck.Active && !noFilterRadio.Active;
119
addButton.Sensitive = !useParentCheck.Active && !noFilterRadio.Active;
122
foreach (string cat in options.Categories)
123
store.AppendValues (cat);
126
void OnToggledUseParent (object sender, EventArgs args)
128
if (useParentCheck.Active)
129
options = (NUnitCategoryOptions) test.Parent.GetOptions (typeof(NUnitCategoryOptions), config);
131
options = localOptions;
133
if (!options.EnableFilter)
134
noFilterRadio.Active = true;
135
else if (options.Exclude)
136
excludeRadio.Active = true;
138
includeRadio.Active = true;
143
void OnFilterToggled (object sender, EventArgs args)
145
options.EnableFilter = !noFilterRadio.Active;
146
options.Exclude = excludeRadio.Active;
150
void OnAddCategory (object sender, EventArgs args)
152
TreeIter it = store.AppendValues ("");
153
categoryTree.SetCursor (store.GetPath (it), textColumn, true);
156
void OnRemoveCategory (object sender, EventArgs args)
160
if (!categoryTree.Selection.GetSelected (out foo, out iter))
162
string old = (string) store.GetValue (iter, 0);
163
options.Categories.Remove (old);
164
store.Remove (ref iter);
167
void OnCategoryEdited (object sender, EditedArgs args)
170
if (!store.GetIter (out iter, new TreePath (args.Path)))
173
string old = (string) store.GetValue (iter, 0);
174
if (args.NewText.Length == 0) {
175
options.Categories.Remove (old);
176
store.Remove (ref iter);
178
int i = options.Categories.IndexOf (old);
180
options.Categories.Add (args.NewText);
182
options.Categories [i] = args.NewText;
183
store.SetValue (iter, 0, args.NewText);
187
public void Store (Properties customizationObject)
189
if (useParentCheck.Active)
190
test.ResetOptions (typeof(NUnitCategoryOptions), config);
192
test.SetOptions (options, config);