示例#1
0
        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);
        }
示例#2
0
        /*
        /// <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;
        }