1 /* Tree View/Tree Store 2 * 3 * The Gtk.TreeStore is used to store data in tree form, to be 4 * used later on by a Gtk.TreeView to display it. This demo builds 5 * a simple Gtk.TreeStore and displays it. If you're new to the 6 * Gtk.TreeView widgets and associates, look into the Gtk.ListStore 7 * example first. 8 */ 9 10 using System; 11 using System.Collections; 12 13 using Gtk; 14 using GLib; 15 16 namespace GtkDemo 17 { 18 [Demo ("TreeStore", "DemoTreeStore.cs", "Tree View")] 19 public class DemoTreeStore : Gtk.Window 20 { 21 private TreeStore store; 22 DemoTreeStore()23 public DemoTreeStore () : base ("Card planning sheet") 24 { 25 VBox vbox = new VBox (false, 8); 26 vbox.BorderWidth = 8; 27 Add (vbox); 28 29 vbox.PackStart (new Label ("Jonathan's Holiday Card Planning Sheet"), 30 false, false, 0); 31 32 ScrolledWindow sw = new ScrolledWindow (); 33 sw.ShadowType = ShadowType.EtchedIn; 34 sw.SetPolicy (PolicyType.Automatic, PolicyType.Automatic); 35 vbox.PackStart (sw, true, true, 0); 36 37 // create model 38 CreateModel (); 39 40 // create tree view 41 TreeView treeView = new TreeView (store); 42 treeView.RulesHint = true; 43 treeView.Selection.Mode = SelectionMode.Multiple; 44 AddColumns (treeView); 45 46 sw.Add (treeView); 47 48 // expand all rows after the treeview widget has been realized 49 treeView.Realized += new EventHandler (ExpandRows); 50 51 SetDefaultSize (650, 400); 52 ShowAll (); 53 } 54 ExpandRows(object obj, EventArgs args)55 private void ExpandRows (object obj, EventArgs args) 56 { 57 TreeView treeView = obj as TreeView; 58 59 treeView.ExpandAll (); 60 } 61 62 ArrayList columns = new ArrayList (); 63 ItemToggled(object sender, ToggledArgs args)64 private void ItemToggled (object sender, ToggledArgs args) 65 { 66 int column = columns.IndexOf (sender); 67 68 Gtk.TreeIter iter; 69 if (store.GetIterFromString (out iter, args.Path)) { 70 bool val = (bool) store.GetValue (iter, column); 71 store.SetValue (iter, column, !val); 72 } 73 } 74 AddColumns(TreeView treeView)75 private void AddColumns (TreeView treeView) 76 { 77 CellRendererText text; 78 CellRendererToggle toggle; 79 80 // column for holiday names 81 text = new CellRendererText (); 82 text.Xalign = 0.0f; 83 columns.Add (text); 84 TreeViewColumn column = new TreeViewColumn ("Holiday", text, 85 "text", Column.HolidayName); 86 treeView.InsertColumn (column, (int) Column.HolidayName); 87 88 // alex column 89 toggle = new CellRendererToggle (); 90 toggle.Xalign = 0.0f; 91 columns.Add (toggle); 92 toggle.Toggled += new ToggledHandler (ItemToggled); 93 column = new TreeViewColumn ("Alex", toggle, 94 "active", (int) Column.Alex, 95 "visible", (int) Column.Visible, 96 "activatable", (int) Column.World); 97 column.Sizing = TreeViewColumnSizing.Fixed; 98 column.FixedWidth = 50; 99 column.Clickable = true; 100 treeView.InsertColumn (column, (int) Column.Alex); 101 102 // havoc column 103 toggle = new CellRendererToggle (); 104 toggle.Xalign = 0.0f; 105 columns.Add (toggle); 106 toggle.Toggled += new ToggledHandler (ItemToggled); 107 column = new TreeViewColumn ("Havoc", toggle, 108 "active", (int) Column.Havoc, 109 "visible", (int) Column.Visible); 110 treeView.InsertColumn (column, (int) Column.Havoc); 111 column.Sizing = TreeViewColumnSizing.Fixed; 112 column.FixedWidth = 50; 113 column.Clickable = true; 114 115 // tim column 116 toggle = new CellRendererToggle (); 117 toggle.Xalign = 0.0f; 118 columns.Add (toggle); 119 toggle.Toggled += new ToggledHandler (ItemToggled); 120 column = new TreeViewColumn ("Tim", toggle, 121 "active", (int) Column.Tim, 122 "visible", (int) Column.Visible, 123 "activatable", (int) Column.World); 124 treeView.InsertColumn (column, (int) Column.Tim); 125 column.Sizing = TreeViewColumnSizing.Fixed; 126 column.FixedWidth = 50; 127 column.Clickable = true; 128 129 // owen column 130 toggle = new CellRendererToggle (); 131 toggle.Xalign = 0.0f; 132 columns.Add (toggle); 133 toggle.Toggled += new ToggledHandler (ItemToggled); 134 column = new TreeViewColumn ("Owen", toggle, 135 "active", (int) Column.Owen, 136 "visible", (int) Column.Visible); 137 treeView.InsertColumn (column, (int) Column.Owen); 138 column.Sizing = TreeViewColumnSizing.Fixed; 139 column.FixedWidth = 50; 140 column.Clickable = true; 141 142 // dave column 143 toggle = new CellRendererToggle (); 144 toggle.Xalign = 0.0f; 145 columns.Add (toggle); 146 toggle.Toggled += new ToggledHandler (ItemToggled); 147 column = new TreeViewColumn ("Dave", toggle, 148 "active", (int) Column.Dave, 149 "visible", (int) Column.Visible); 150 treeView.InsertColumn (column, (int) Column.Dave); 151 column.Sizing = TreeViewColumnSizing.Fixed; 152 column.FixedWidth = 50; 153 column.Clickable = true; 154 } 155 OnDeleteEvent(Gdk.Event evt)156 protected override bool OnDeleteEvent (Gdk.Event evt) 157 { 158 Destroy (); 159 return true; 160 } 161 CreateModel()162 private void CreateModel () 163 { 164 // create tree store 165 store = new TreeStore (typeof (string), 166 typeof (bool), 167 typeof (bool), 168 typeof (bool), 169 typeof (bool), 170 typeof (bool), 171 typeof (bool), 172 typeof (bool)); 173 174 // add data to the tree store 175 foreach (MyTreeItem month in toplevel) { 176 TreeIter iter = store.AppendValues (month.Label, 177 false, 178 false, 179 false, 180 false, 181 false, 182 false, 183 false); 184 185 foreach (MyTreeItem holiday in month.Children) { 186 store.AppendValues (iter, 187 holiday.Label, 188 holiday.Alex, 189 holiday.Havoc, 190 holiday.Tim, 191 holiday.Owen, 192 holiday.Dave, 193 true, 194 holiday.WorldHoliday); 195 } 196 } 197 } 198 199 // tree data 200 private static MyTreeItem[] january = 201 { 202 new MyTreeItem ("New Years Day", true, true, true, true, false, true, null ), 203 new MyTreeItem ("Presidential Inauguration", false, true, false, true, false, false, null ), 204 new MyTreeItem ("Martin Luther King Jr. day", false, true, false, true, false, false, null ) 205 }; 206 207 private static MyTreeItem[] february = 208 { 209 new MyTreeItem ( "Presidents' Day", false, true, false, true, false, false, null ), 210 new MyTreeItem ( "Groundhog Day", false, false, false, false, false, false, null ), 211 new MyTreeItem ( "Valentine's Day", false, false, false, false, true, true, null ) 212 }; 213 214 private static MyTreeItem[] march = 215 { 216 new MyTreeItem ( "National Tree Planting Day", false, false, false, false, false, false, null ), 217 new MyTreeItem ( "St Patrick's Day", false, false, false, false, false, true, null ) 218 }; 219 220 private static MyTreeItem[] april = 221 { 222 new MyTreeItem ( "April Fools' Day", false, false, false, false, false, true, null ), 223 new MyTreeItem ( "Army Day", false, false, false, false, false, false, null ), 224 new MyTreeItem ( "Earth Day", false, false, false, false, false, true, null ), 225 new MyTreeItem ( "Administrative Professionals' Day", false, false, false, false, false, false, null ) 226 }; 227 228 private static MyTreeItem[] may = 229 { 230 new MyTreeItem ( "Nurses' Day", false, false, false, false, false, false, null ), 231 new MyTreeItem ( "National Day of Prayer", false, false, false, false, false, false, null ), 232 new MyTreeItem ( "Mothers' Day", false, false, false, false, false, true, null ), 233 new MyTreeItem ( "Armed Forces Day", false, false, false, false, false, false, null ), 234 new MyTreeItem ( "Memorial Day", true, true, true, true, false, true, null ) 235 }; 236 237 private static MyTreeItem[] june = 238 { 239 new MyTreeItem ( "June Fathers' Day", false, false, false, false, false, true, null ), 240 new MyTreeItem ( "Juneteenth (Liberation of Slaves)", false, false, false, false, false, false, null ), 241 new MyTreeItem ( "Flag Day", false, true, false, true, false, false, null ) 242 }; 243 244 private static MyTreeItem[] july = 245 { 246 new MyTreeItem ( "Parents' Day", false, false, false, false, false, true, null ), 247 new MyTreeItem ( "Independence Day", false, true, false, true, false, false, null ) 248 }; 249 250 private static MyTreeItem[] august = 251 { 252 new MyTreeItem ( "Air Force Day", false, false, false, false, false, false, null ), 253 new MyTreeItem ( "Coast Guard Day", false, false, false, false, false, false, null ), 254 new MyTreeItem ( "Friendship Day", false, false, false, false, false, false, null ) 255 }; 256 257 private static MyTreeItem[] september = 258 { 259 new MyTreeItem ( "Grandparents' Day", false, false, false, false, false, true, null ), 260 new MyTreeItem ( "Citizenship Day or Constitution Day", false, false, false, false, false, false, null ), 261 new MyTreeItem ( "Labor Day", true, true, true, true, false, true, null ) 262 }; 263 264 private static MyTreeItem[] october = 265 { 266 new MyTreeItem ( "National Children's Day", false, false, false, false, false, false, null ), 267 new MyTreeItem ( "Bosses' Day", false, false, false, false, false, false, null ), 268 new MyTreeItem ( "Sweetest Day", false, false, false, false, false, false, null ), 269 new MyTreeItem ( "Mother-in-Law's Day", false, false, false, false, false, false, null ), 270 new MyTreeItem ( "Navy Day", false, false, false, false, false, false, null ), 271 new MyTreeItem ( "Columbus Day", false, true, false, true, false, false, null ), 272 new MyTreeItem ( "Halloween", false, false, false, false, false, true, null ) 273 }; 274 275 private static MyTreeItem[] november = 276 { 277 new MyTreeItem ( "Marine Corps Day", false, false, false, false, false, false, null ), 278 new MyTreeItem ( "Veterans' Day", true, true, true, true, false, true, null ), 279 new MyTreeItem ( "Thanksgiving", false, true, false, true, false, false, null ) 280 }; 281 282 private static MyTreeItem[] december = 283 { 284 new MyTreeItem ( "Pearl Harbor Remembrance Day", false, false, false, false, false, false, null ), 285 new MyTreeItem ( "Christmas", true, true, true, true, false, true, null ), 286 new MyTreeItem ( "Kwanzaa", false, false, false, false, false, false, null ) 287 }; 288 289 290 private static MyTreeItem[] toplevel = 291 { 292 new MyTreeItem ("January", false, false, false, false, false, false, january), 293 new MyTreeItem ("February", false, false, false, false, false, false, february), 294 new MyTreeItem ("March", false, false, false, false, false, false, march), 295 new MyTreeItem ("April", false, false, false, false, false, false, april), 296 new MyTreeItem ("May", false, false, false, false, false, false, may), 297 new MyTreeItem ("June", false, false, false, false, false, false, june), 298 new MyTreeItem ("July", false, false, false, false, false, false, july), 299 new MyTreeItem ("August", false, false, false, false, false, false, august), 300 new MyTreeItem ("September", false, false, false, false, false, false, september), 301 new MyTreeItem ("October", false, false, false, false, false, false, october), 302 new MyTreeItem ("November", false, false, false, false, false, false, november), 303 new MyTreeItem ("December", false, false, false, false, false, false, december) 304 }; 305 306 // TreeItem structure 307 public class MyTreeItem 308 { 309 public string Label; 310 public bool Alex, Havoc, Tim, Owen, Dave; 311 public bool WorldHoliday; // shared by the European hackers 312 public MyTreeItem[] Children; 313 MyTreeItem(string label, bool alex, bool havoc, bool tim, bool owen, bool dave, bool worldHoliday, MyTreeItem[] children)314 public MyTreeItem (string label, bool alex, bool havoc, bool tim, 315 bool owen, bool dave, bool worldHoliday, 316 MyTreeItem[] children) 317 { 318 Label = label; 319 Alex = alex; 320 Havoc = havoc; 321 Tim = tim; 322 Owen = owen; 323 Dave = dave; 324 WorldHoliday = worldHoliday; 325 Children = children; 326 } 327 } 328 329 // columns 330 public enum Column 331 { 332 HolidayName, 333 Alex, 334 Havoc, 335 Tim, 336 Owen, 337 Dave, 338 339 Visible, 340 World, 341 } 342 } 343 } 344