public TaskTreeView(CollectionView<Task> model) : base() { #if GTK_2_12 // set up the timing for the tooltips this.Settings.SetLongProperty("gtk-tooltip-browse-mode-timeout", 0, "Tasque:TaskTreeView"); this.Settings.SetLongProperty("gtk-tooltip-browse-timeout", 750, "Tasque:TaskTreeView"); this.Settings.SetLongProperty("gtk-tooltip-timeout", 750, "Tasque:TaskTreeView"); ConnectEvents(); #endif // TODO: Modify the behavior of the TreeView so that it doesn't show // the highlighted row. Then, also tie in with the mouse hovering // so that as you hover the mouse around, it will automatically // select the row that the mouse is hovered over. By doing this, // we should be able to not require the user to click on a task // to select it and THEN have to click on the column item they want // to modify. filterCategory = null; modelFilter = new ListCollectionView<Task> (model); modelFilter.Filter = FilterFunc; modelFilter.CollectionChanged += HandleModelFilterChanged; Model = new TreeModelListAdapter<Task> (modelFilter); modelFilter.IsObserving = true; Selection.Mode = Gtk.SelectionMode.Single; RulesHint = false; HeadersVisible = false; HoverSelection = true; // TODO: Figure out how to turn off selection highlight Gtk.CellRenderer renderer; // // Checkbox Column // Gtk.TreeViewColumn column = new Gtk.TreeViewColumn (); // Title for Completed/Checkbox Column column.Title = Catalog.GetString ("Completed"); column.Sizing = Gtk.TreeViewColumnSizing.Autosize; column.Resizable = false; column.Clickable = true; renderer = new Gtk.CellRendererToggle (); (renderer as Gtk.CellRendererToggle).Toggled += OnTaskToggled; column.PackStart (renderer, false); column.SetCellDataFunc (renderer, new Gtk.TreeCellDataFunc (TaskToggleCellDataFunc)); AppendColumn (column); // // Priority Column // column = new Gtk.TreeViewColumn (); // Title for Priority Column column.Title = Catalog.GetString ("Priority"); //column.Sizing = Gtk.TreeViewColumnSizing.Autosize; column.Sizing = Gtk.TreeViewColumnSizing.Fixed; column.Alignment = 0.5f; column.FixedWidth = 30; column.Resizable = false; column.Clickable = true; renderer = new Gtk.CellRendererCombo (); (renderer as Gtk.CellRendererCombo).Editable = true; (renderer as Gtk.CellRendererCombo).HasEntry = false; SetCellRendererCallbacks ((CellRendererCombo) renderer, OnTaskPriorityEdited); Gtk.ListStore priorityStore = new Gtk.ListStore (typeof (string)); priorityStore.AppendValues (Catalog.GetString ("1")); // High priorityStore.AppendValues (Catalog.GetString ("2")); // Medium priorityStore.AppendValues (Catalog.GetString ("3")); // Low priorityStore.AppendValues (Catalog.GetString ("-")); // None (renderer as Gtk.CellRendererCombo).Model = priorityStore; (renderer as Gtk.CellRendererCombo).TextColumn = 0; renderer.Xalign = 0.5f; column.PackStart (renderer, true); column.SetCellDataFunc (renderer, new Gtk.TreeCellDataFunc (TaskPriorityCellDataFunc)); AppendColumn (column); // // Task Name Column // column = new Gtk.TreeViewColumn (); // Title for Task Name Column column.Title = Catalog.GetString ("Task Name"); // column.Sizing = Gtk.TreeViewColumnSizing.Fixed; column.Sizing = Gtk.TreeViewColumnSizing.Autosize; column.Expand = true; column.Resizable = true; // TODO: Add in code to determine how wide we should make the name // column. // TODO: Add in code to readjust the size of the name column if the // user resizes the Task Window. //column.FixedWidth = 250; renderer = new Gtk.CellRendererText (); column.PackStart (renderer, true); column.SetCellDataFunc (renderer, new Gtk.TreeCellDataFunc (TaskNameTextCellDataFunc)); ((Gtk.CellRendererText)renderer).Editable = true; SetCellRendererCallbacks ((CellRendererText) renderer, OnTaskNameEdited); AppendColumn (column); // // Due Date Column // // 2/11 - Today // 2/12 - Tomorrow // 2/13 - Wed // 2/14 - Thu // 2/15 - Fri // 2/16 - Sat // 2/17 - Sun // -------------- // 2/18 - In 1 Week // -------------- // No Date // --------------- // Choose Date... column = new Gtk.TreeViewColumn (); // Title for Due Date Column column.Title = Catalog.GetString ("Due Date"); column.Sizing = Gtk.TreeViewColumnSizing.Fixed; column.Alignment = 0f; column.FixedWidth = 90; column.Resizable = false; column.Clickable = true; renderer = new Gtk.CellRendererCombo (); (renderer as Gtk.CellRendererCombo).Editable = true; (renderer as Gtk.CellRendererCombo).HasEntry = false; SetCellRendererCallbacks ((CellRendererCombo) renderer, OnDateEdited); Gtk.ListStore dueDateStore = new Gtk.ListStore (typeof (string)); DateTime today = DateTime.Now; dueDateStore.AppendValues ( today.ToString(Catalog.GetString("M/d - ")) + Catalog.GetString("Today")); dueDateStore.AppendValues ( today.AddDays(1).ToString(Catalog.GetString("M/d - ")) + Catalog.GetString("Tomorrow")); dueDateStore.AppendValues ( today.AddDays(2).ToString(Catalog.GetString("M/d - ddd"))); dueDateStore.AppendValues ( today.AddDays(3).ToString(Catalog.GetString("M/d - ddd"))); dueDateStore.AppendValues ( today.AddDays(4).ToString(Catalog.GetString("M/d - ddd"))); dueDateStore.AppendValues ( today.AddDays(5).ToString(Catalog.GetString("M/d - ddd"))); dueDateStore.AppendValues ( today.AddDays(6).ToString(Catalog.GetString("M/d - ddd"))); dueDateStore.AppendValues ( today.AddDays(7).ToString(Catalog.GetString("M/d - ")) + Catalog.GetString("In 1 Week")); dueDateStore.AppendValues (Catalog.GetString ("No Date")); dueDateStore.AppendValues (Catalog.GetString ("Choose Date...")); (renderer as Gtk.CellRendererCombo).Model = dueDateStore; (renderer as Gtk.CellRendererCombo).TextColumn = 0; renderer.Xalign = 0.0f; column.PackStart (renderer, true); column.SetCellDataFunc (renderer, new Gtk.TreeCellDataFunc (DueDateCellDataFunc)); AppendColumn (column); // // Notes Column // column = new Gtk.TreeViewColumn (); // Title for Notes Column column.Title = Catalog.GetString ("Notes"); column.Sizing = Gtk.TreeViewColumnSizing.Fixed; column.FixedWidth = 20; column.Resizable = false; renderer = new Gtk.CellRendererPixbuf (); column.PackStart (renderer, false); column.SetCellDataFunc (renderer, new Gtk.TreeCellDataFunc (TaskNotesCellDataFunc)); AppendColumn (column); // // Timer Column // column = new Gtk.TreeViewColumn (); // Title for Timer Column column.Title = Catalog.GetString ("Timer"); column.Sizing = Gtk.TreeViewColumnSizing.Fixed; column.FixedWidth = 20; column.Resizable = false; renderer = new Gtk.CellRendererPixbuf (); renderer.Xalign = 0.5f; column.PackStart (renderer, false); column.SetCellDataFunc (renderer, new Gtk.TreeCellDataFunc (TaskTimerCellDataFunc)); AppendColumn (column); }
/* /// <summary> /// Build a new category list setting from all the categories /// </summary> /// <param name="?"> /// A <see cref="System.String"/> /// </param> List<string> BuildNewCategoryList () { List<string> list = new List<string> (); TreeModel model; IBackend backend = GtkApplication.Instance.Backend; if (backend == null) return list; model = backend.Categories; Gtk.TreeIter iter; if (model.GetIterFirst (out iter) == false) return list; do { ICategory cat = model.GetValue (iter, 0) as ICategory; if (cat == null || cat is AllCategory) continue; list.Add (cat.Name); } while (model.IterNext (ref iter) == true); return list; } */ void RebuildCategoryTree() { if (!backendComboMap.ContainsKey (selectedBackend)) { categoriesTree.Model = null; return; } Backend backend = backendComboMap [selectedBackend]; filteredCategories = new ListCollectionView<Category> (backend.Categories); filteredCategories.IsObserving = true; // Filter out the AllCategory filteredCategories.Filter = c => c != null; var adapter = new TreeModelListAdapter<Category> (filteredCategories); categoriesTree.Model = adapter; }