// // DemoListItem.cs, port of tree_store.c from gtk-demo // // Author: Daniel Kornhauser // // Copyright (C) 2003, Ximian Inc. /* List View/List Store * * The Gtk.ListStore is used to store data in tree form, to be * used later on by a Gtk.ListView to display it. This demo builds * a simple Gtk.ListStore and displays it. If you're new to the * Gtk.ListView widgets and associates, look into the Gtk.ListStore * example first. */ using System; using System.Collections; using Gtk; using GtkSharp; namespace GtkDemo { public class DemoListStore { private Window window; ListStore store; public DemoListStore (){ window = new Window ("ListStore Demo"); window.DeleteEvent += new DeleteEventHandler (WindowDelete); VBox vbox = new VBox (false, 8); vbox.BorderWidth = 8; window.Add (vbox); vbox.PackStart(new Label ("This is the bug list (note: not based on real data, it would be nice to have a nice ODBC interface to bugzilla or so, though)."), false, false, 0); ScrolledWindow scrolledWindow = new ScrolledWindow (); scrolledWindow.ShadowType = ShadowType.EtchedIn; scrolledWindow.SetPolicy (PolicyType.Automatic, PolicyType.Automatic); vbox.PackStart (scrolledWindow, true, true, 0); // create model CreateModel(); // create tree view TreeView treeView = new TreeView (store); treeView.RulesHint = true; treeView.SearchColumn = (int) ColumnNumber.Description; AddColumns (treeView); scrolledWindow.Add (treeView); // finish & show window.SetDefaultSize (650, 400); window.ShowAll (); } //FIXME: Finish implementing this function, I don't know // why it doesn't work. private void ItemToggled (object o, ToggledArgs args) { Gtk.TreeIter iter; if (store.GetIterFromString(out iter, args.Path)) { bool val = (bool) store.GetValue(iter, 0); Console.WriteLine("toggled {0} with value {1}", args.Path, val); store.SetValue(iter, 0, !val); } } private void AddColumns (TreeView treeView) { // column for fixed toggles CellRendererToggle rendererToggle = new CellRendererToggle (); rendererToggle.Toggled += new ToggledHandler (ItemToggled); TreeViewColumn column = new TreeViewColumn("Fixed", rendererToggle, "active", 0); rendererToggle.Active = true; rendererToggle.Activatable = true; rendererToggle.Visible = true; // set this column to a fixed sizing (of 50 pixels) column.Sizing = TreeViewColumnSizing.Fixed; column.FixedWidth = 50; treeView.AppendColumn(column); // column for bug numbers CellRendererText rendererText = new CellRendererText (); column = new TreeViewColumn("Bug number", rendererText, "text", ColumnNumber.Number); column.SortColumnId = (int) ColumnNumber.Number; treeView.AppendColumn(column); // column for severities rendererText = new CellRendererText (); column = new TreeViewColumn("Severity", rendererText, "text", ColumnNumber.Severity); column.SortColumnId = (int) ColumnNumber.Severity; treeView.AppendColumn(column); // column for description rendererText = new CellRendererText (); column = new TreeViewColumn("Description", rendererText, "text", ColumnNumber.Description); column.SortColumnId = (int) ColumnNumber.Description; treeView.AppendColumn(column); } private void WindowDelete (object o, DeleteEventArgs args) { window.Hide (); window.Destroy (); } private void CreateModel () { store = new ListStore ( typeof(bool), typeof(int), typeof(string), typeof(string)); foreach (Bug bug in bugs) { store.AppendValues(bug.Fixed, bug.Number, bug.Severity, bug.Description);} } //FIXME: Insted of using numbert conver enum to array using // GetValues and then ge the Length Property public enum ColumnNumber { Fixed, Number, Severity, Description, } private static Bug[] bugs = { new Bug ( false, 60482, "Normal", "scrollable notebooks and hidden tabs"), new Bug ( false, 60620, "Critical", "gdk_window_clear_area (gdkwindow-win32.c) is not thread-safe" ), new Bug ( false, 50214, "Major", "Xft support does not clean up correctly" ), new Bug ( true, 52877, "Major", "GtkFileSelection needs a refresh method. " ), new Bug ( false, 56070, "Normal", "Can't click button after setting in sensitive" ), new Bug ( true, 56355, "Normal", "GtkLabel - Not all changes propagate correctly" ), new Bug ( false, 50055, "Normal", "Rework width/height computations for TreeView" ), new Bug ( false, 58278, "Normal", "gtk_dialog_set_response_sensitive () doesn't work" ), new Bug ( false, 55767, "Normal", "Getters for all setters" ), new Bug ( false, 56925, "Normal", "Gtkcalender size" ), new Bug ( false, 56221, "Normal", "Selectable label needs right-click copy menu" ), new Bug ( true, 50939, "Normal", "Add shift clicking to GtkTextView" ), new Bug ( false, 6112, "Enhancement","netscape-like collapsable toolbars" ), new Bug ( false, 1, "Normal", "First bug :=)" ) }; } public class Bug { public bool Fixed; public int Number; public string Severity; public string Description; public Bug ( bool status, int number, string severity, string description) { Fixed = status; Number = number; Severity = severity; Description = description; } } }