예제 #1
0
        void EndCellEditing()
        {
            if (taskBeingEdited == null)
                return;

            if (CellEditingFinished != null)
                CellEditingFinished (this, new TaskRowEditingEventArgs (taskBeingEdited.Task,
                                                                        taskBeingEdited.Iter,
                                                                        taskBeingEdited.Path));
            taskBeingEdited = null;
        }
예제 #2
0
        public DueDateColumn()
        {
            TreeViewColumn = new TreeViewColumn {
                Title = Catalog.GetString ("Due Date"),
                Sizing = TreeViewColumnSizing.Fixed,
                Alignment = 0f,
                FixedWidth = 90,
                Resizable = false,
                Clickable = true
            };

            var dueDateStore = new ListStore (typeof (string));
            var 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..."));

            var renderer = new CellRendererCombo {
                Editable = true,
                HasEntry = false,
                Model = dueDateStore,
                TextColumn = 0,
                Xalign = 0.0f
            };

            renderer.EditingStarted += (o, args) => {
                TreeIter iter;
                var path = new TreePath (args.Path);
                if (!model.GetIter (out iter, path))
                    return;

                var task = model.GetValue (iter, 0) as ITask;
                if (task == null)
                    return;

                taskBeingEdited = new TaskBeingEdited (task, iter, path);
                if (CellEditingStarted != null)
                    CellEditingStarted (this, new TaskRowEditingEventArgs (task, iter, path));
            };

            renderer.EditingCanceled += delegate { EndCellEditing (); };

            renderer.Edited += (o, args) => {
                TreeIter iter;
                var path = new TreePath (args.Path);
                var newText = args.NewText;
                if (newText != null && model.GetIter (out iter, path)) {

                    //  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...

                    var newDate = DateTime.MinValue;
                    var tday = DateTime.Now;
                    var task = model.GetValue (iter, 0) as ITask;

                    if (newText == tday.ToString (Catalog.GetString ("M/d - ")) + Catalog.GetString ("Today"))
                        newDate = tday;
                    else if (newText == tday.AddDays (1).ToString (Catalog.GetString ("M/d - "))
                             + Catalog.GetString ("Tomorrow"))
                        newDate = tday.AddDays (1);
                    else if (newText == Catalog.GetString ("No Date"))
                        newDate = DateTime.MinValue;
                    else if (newText == tday.AddDays (7).ToString (Catalog.GetString ("M/d - "))
                             + Catalog.GetString ("In 1 Week"))
                        newDate = tday.AddDays (7);
                    else if (newText == Catalog.GetString ("Choose Date...")) {
                        var tc = new TaskCalendar (task, view.TreeView.Parent);
                        tc.ShowCalendar ();
                        return;
                    } else {
                        for (int i = 2; i <= 6; i++) {
                            DateTime testDate = tday.AddDays (i);
                            if (testDate.ToString (Catalog.GetString ("M/d - ddd")) == newText) {
                                newDate = testDate;
                                break;
                            }
                        }
                    }

                    Logger.Debug ("task.State {0}", task.State);

                    if (task.State != TaskState.Completed) {
                        // Modify the due date
                        task.DueDate = newDate;
                    }
                }
                EndCellEditing ();
            };

            TreeViewColumn.PackStart (renderer, true);
            TreeViewColumn.SetCellDataFunc (renderer, DueDateCellDataFunc);
        }
예제 #3
0
        public DueDateColumn()
        {
            TreeViewColumn = new TreeViewColumn {
                Title      = Catalog.GetString("Due Date"),
                Sizing     = TreeViewColumnSizing.Fixed,
                Alignment  = 0f,
                FixedWidth = 90,
                Resizable  = false,
                Clickable  = true
            };

            var dueDateStore = new ListStore(typeof(string));
            var 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..."));

            var renderer = new CellRendererCombo {
                Editable   = true,
                HasEntry   = false,
                Model      = dueDateStore,
                TextColumn = 0,
                Xalign     = 0.0f
            };

            renderer.EditingStarted += (o, args) => {
                TreeIter iter;
                var      path = new TreePath(args.Path);
                if (!model.GetIter(out iter, path))
                {
                    return;
                }

                var task = model.GetValue(iter, 0) as ITask;
                if (task == null)
                {
                    return;
                }

                taskBeingEdited = new TaskBeingEdited(task, iter, path);
                if (CellEditingStarted != null)
                {
                    CellEditingStarted(this, new TaskRowEditingEventArgs(task, iter, path));
                }
            };

            renderer.EditingCanceled += delegate { EndCellEditing(); };

            renderer.Edited += (o, args) => {
                TreeIter iter;
                var      path    = new TreePath(args.Path);
                var      newText = args.NewText;
                if (newText != null && model.GetIter(out iter, path))
                {
                    //  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...

                    var newDate = DateTime.MinValue;
                    var tday    = DateTime.Now;
                    var task    = model.GetValue(iter, 0) as ITask;

                    if (newText == tday.ToString(Catalog.GetString("M/d - ")) + Catalog.GetString("Today"))
                    {
                        newDate = tday;
                    }
                    else if (newText == tday.AddDays(1).ToString(Catalog.GetString("M/d - "))
                             + Catalog.GetString("Tomorrow"))
                    {
                        newDate = tday.AddDays(1);
                    }
                    else if (newText == Catalog.GetString("No Date"))
                    {
                        newDate = DateTime.MinValue;
                    }
                    else if (newText == tday.AddDays(7).ToString(Catalog.GetString("M/d - "))
                             + Catalog.GetString("In 1 Week"))
                    {
                        newDate = tday.AddDays(7);
                    }
                    else if (newText == Catalog.GetString("Choose Date..."))
                    {
                        var tc = new TaskCalendar(task, view.TreeView.Parent);
                        tc.ShowCalendar();
                        return;
                    }
                    else
                    {
                        for (int i = 2; i <= 6; i++)
                        {
                            DateTime testDate = tday.AddDays(i);
                            if (testDate.ToString(Catalog.GetString("M/d - ddd")) == newText)
                            {
                                newDate = testDate;
                                break;
                            }
                        }
                    }

                    Logger.Debug("task.State {0}", task.State);

                    if (task.State != TaskState.Completed)
                    {
                        // Modify the due date
                        task.DueDate = newDate;
                    }
                }
                EndCellEditing();
            };

            TreeViewColumn.PackStart(renderer, true);
            TreeViewColumn.SetCellDataFunc(renderer, DueDateCellDataFunc);
        }
예제 #4
0
        public TaskNameColumn()
        {
            TreeViewColumn = new TreeViewColumn {
                Title = Catalog.GetString ("Task Name"),
                Sizing = TreeViewColumnSizing.Autosize,
                Expand = true,
                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;

            var renderer = new CellRendererText { Editable = true };

            renderer.EditingStarted += (o, args) => {
                TreeIter iter;
                var path = new TreePath (args.Path);
                if (!model.GetIter (out iter, path))
                    return;

                var task = model.GetValue (iter, 0) as ITask;
                if (task == null)
                    return;

                taskBeingEdited = new TaskBeingEdited (task, iter, path);
                if (CellEditingStarted != null)
                    CellEditingStarted (this, new TaskRowEditingEventArgs (task, iter, path));
            };

            renderer.EditingCanceled += delegate { EndCellEditing (); };

            renderer.Edited += (o, args) => {
                TreeIter iter;
                var path = new TreePath (args.Path);
                if (model.GetIter (out iter, path)) {
                    var task = model.GetValue (iter, 0) as ITask;
                    if (task == null)
                        return;

                    var newText = args.NewText;
                    // Attempt to derive due date information from text.
                    if (preferences.GetBool (PreferencesKeys.ParseDateEnabledKey) &&
                        task.State == TaskState.Active &&
                        task.DueDate == DateTime.MinValue) {

                        string parsedTaskText;
                        DateTime parsedDueDate;
                        TaskParser.Instance.TryParse (newText, out parsedTaskText, out parsedDueDate);

                        if (parsedDueDate != DateTime.MinValue)
                            task.DueDate = parsedDueDate;
                        newText = parsedTaskText;
                    }

                    task.Text = newText;
                }
                EndCellEditing ();
            };

            TreeViewColumn.PackStart (renderer, true);
            TreeViewColumn.SetCellDataFunc (renderer, TaskNameTextCellDataFunc);
        }
예제 #5
0
        public TaskNameColumn()
        {
            TreeViewColumn = new TreeViewColumn {
                Title     = Catalog.GetString("Task Name"),
                Sizing    = TreeViewColumnSizing.Autosize,
                Expand    = true,
                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;

            var renderer = new CellRendererText {
                Editable = true
            };

            renderer.EditingStarted += (o, args) => {
                TreeIter iter;
                var      path = new TreePath(args.Path);
                if (!model.GetIter(out iter, path))
                {
                    return;
                }

                var task = model.GetValue(iter, 0) as ITask;
                if (task == null)
                {
                    return;
                }

                taskBeingEdited = new TaskBeingEdited(task, iter, path);
                if (CellEditingStarted != null)
                {
                    CellEditingStarted(this, new TaskRowEditingEventArgs(task, iter, path));
                }
            };

            renderer.EditingCanceled += delegate { EndCellEditing(); };

            renderer.Edited += (o, args) => {
                TreeIter iter;
                var      path = new TreePath(args.Path);
                if (model.GetIter(out iter, path))
                {
                    var task = model.GetValue(iter, 0) as ITask;
                    if (task == null)
                    {
                        return;
                    }

                    var newText = args.NewText;
                    // Attempt to derive due date information from text.
                    if (preferences.GetBool(PreferencesKeys.ParseDateEnabledKey) &&
                        task.State == TaskState.Active &&
                        task.DueDate == DateTime.MinValue)
                    {
                        string   parsedTaskText;
                        DateTime parsedDueDate;
                        TaskParser.Instance.TryParse(newText, out parsedTaskText, out parsedDueDate);

                        if (parsedDueDate != DateTime.MinValue)
                        {
                            task.DueDate = parsedDueDate;
                        }
                        newText = parsedTaskText;
                    }

                    task.Text = newText;
                }
                EndCellEditing();
            };

            TreeViewColumn.PackStart(renderer, true);
            TreeViewColumn.SetCellDataFunc(renderer, TaskNameTextCellDataFunc);
        }
예제 #6
0
        public PriorityColumn()
        {
            TreeViewColumn = new TreeViewColumn {
                Title = Catalog.GetString ("Priority"),
                Sizing = TreeViewColumnSizing.Fixed,
                Alignment = 0.5f,
                FixedWidth = 30,
                Resizable = false,
                Clickable = true
            };

            var priorityStore = new 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

            var renderer = new CellRendererCombo {
                Editable = true,
                HasEntry = false,
                Model = priorityStore,
                TextColumn = 0,
                Xalign = 0.5f
            };

            renderer.EditingStarted += (o, args) => {
                TreeIter iter;
                var path = new TreePath (args.Path);
                if (!model.GetIter (out iter, path))
                    return;

                var task = model.GetValue (iter, 0) as ITask;
                if (task == null)
                    return;

                taskBeingEdited = new TaskBeingEdited (task, iter, path);
                if (CellEditingStarted != null)
                    CellEditingStarted (this, new TaskRowEditingEventArgs (task, iter, path));
            };

            renderer.EditingCanceled += delegate { EndCellEditing (); };

            renderer.Edited += (o, args) => {
                TreeIter iter;
                var path = new TreePath (args.Path);
                if (model.GetIter (out iter, path)) {
                    TaskPriority newPriority;
                    var newText = args.NewText;
                    if (newText == Catalog.GetString ("3"))
                        newPriority = TaskPriority.Low;
                    else if (newText == Catalog.GetString ("2"))
                        newPriority = TaskPriority.Medium;
                    else if (newText == Catalog.GetString ("1"))
                        newPriority = TaskPriority.High;
                    else
                        newPriority = TaskPriority.None;

                    // Update the priority if it's different
                    var task = model.GetValue (iter, 0) as ITask;
                    if (task.Priority != newPriority)
                        task.Priority = newPriority;
                }
                EndCellEditing ();
            };

            TreeViewColumn.PackStart (renderer, true);
            TreeViewColumn.SetCellDataFunc (renderer, TaskPriorityCellDataFunc);
        }
예제 #7
0
        public PriorityColumn()
        {
            TreeViewColumn = new TreeViewColumn {
                Title      = Catalog.GetString("Priority"),
                Sizing     = TreeViewColumnSizing.Fixed,
                Alignment  = 0.5f,
                FixedWidth = 30,
                Resizable  = false,
                Clickable  = true
            };

            var priorityStore = new 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

            var renderer = new CellRendererCombo {
                Editable   = true,
                HasEntry   = false,
                Model      = priorityStore,
                TextColumn = 0,
                Xalign     = 0.5f
            };

            renderer.EditingStarted += (o, args) => {
                TreeIter iter;
                var      path = new TreePath(args.Path);
                if (!model.GetIter(out iter, path))
                {
                    return;
                }

                var task = model.GetValue(iter, 0) as ITask;
                if (task == null)
                {
                    return;
                }

                taskBeingEdited = new TaskBeingEdited(task, iter, path);
                if (CellEditingStarted != null)
                {
                    CellEditingStarted(this, new TaskRowEditingEventArgs(task, iter, path));
                }
            };

            renderer.EditingCanceled += delegate { EndCellEditing(); };

            renderer.Edited += (o, args) => {
                TreeIter iter;
                var      path = new TreePath(args.Path);
                if (model.GetIter(out iter, path))
                {
                    TaskPriority newPriority;
                    var          newText = args.NewText;
                    if (newText == Catalog.GetString("3"))
                    {
                        newPriority = TaskPriority.Low;
                    }
                    else if (newText == Catalog.GetString("2"))
                    {
                        newPriority = TaskPriority.Medium;
                    }
                    else if (newText == Catalog.GetString("1"))
                    {
                        newPriority = TaskPriority.High;
                    }
                    else
                    {
                        newPriority = TaskPriority.None;
                    }

                    // Update the priority if it's different
                    var task = model.GetValue(iter, 0) as ITask;
                    if (task.Priority != newPriority)
                    {
                        task.Priority = newPriority;
                    }
                }
                EndCellEditing();
            };

            TreeViewColumn.PackStart(renderer, true);
            TreeViewColumn.SetCellDataFunc(renderer, TaskPriorityCellDataFunc);
        }