2
// FlagsSelectorDialog.cs
7
// Copyright (C) 2007 Novell, Inc (http://www.novell.com)
9
// Permission is hereby granted, free of charge, to any person obtaining
10
// a copy of this software and associated documentation files (the
11
// "Software"), to deal in the Software without restriction, including
12
// without limitation the rights to use, copy, modify, merge, publish,
13
// distribute, sublicense, and/or sell copies of the Software, and to
14
// permit persons to whom the Software is furnished to do so, subject to
15
// the following conditions:
17
// The above copyright notice and this permission notice shall be
18
// included in all copies or substantial portions of the Software.
20
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31
namespace MonoDevelop.Components.PropertyGrid.PropertyEditors
33
public class FlagsSelectorDialog: IDisposable
35
Gtk.TreeView treeView;
41
public FlagsSelectorDialog (Gtk.Window parent, Type enumDesc, ulong flags, string title)
46
Gtk.ScrolledWindow sc = new Gtk.ScrolledWindow ();
47
sc.HscrollbarPolicy = Gtk.PolicyType.Automatic;
48
sc.VscrollbarPolicy = Gtk.PolicyType.Automatic;
49
sc.ShadowType = Gtk.ShadowType.In;
52
treeView = new Gtk.TreeView ();
55
dialog = new Gtk.Dialog ();
57
dialog.AddButton (Gtk.Stock.Cancel, Gtk.ResponseType.Cancel);
58
dialog.AddButton (Gtk.Stock.Ok, Gtk.ResponseType.Ok);
60
store = new Gtk.ListStore (typeof(bool), typeof(string), typeof(ulong));
61
treeView.Model = store;
62
treeView.HeadersVisible = false;
64
Gtk.TreeViewColumn col = new Gtk.TreeViewColumn ();
66
Gtk.CellRendererToggle tog = new Gtk.CellRendererToggle ();
67
tog.Toggled += new Gtk.ToggledHandler (OnToggled);
68
col.PackStart (tog, false);
69
col.AddAttribute (tog, "active", 0);
71
Gtk.CellRendererText crt = new Gtk.CellRendererText ();
72
col.PackStart (crt, true);
73
col.AddAttribute (crt, "text", 1);
75
treeView.AppendColumn (col);
77
foreach (object value in System.Enum.GetValues (enumDesc)) {
78
ulong val = Convert.ToUInt64 (value);
79
store.AppendValues (((flags & val) != 0), value.ToString (), val);
85
dialog.DefaultWidth = 500;
86
dialog.DefaultHeight = 400;
88
return MonoDevelop.Ide.MessageService.RunCustomDialog (dialog, parent);
91
public void Dispose ()
96
void OnToggled (object s, Gtk.ToggledArgs args)
99
if (!store.GetIterFromString (out iter, args.Path))
102
bool oldValue = (bool) store.GetValue (iter, 0);
103
ulong flag = (ulong) store.GetValue (iter, 2);
104
store.SetValue (iter, 0, !oldValue);
113
get { return flags; }