public Task AddTask(DraftTask task, IList <Color> colorOptions)
        {
            Util.RequireNotNull(task, "task");
            var color = getNextColor(colorOptions);

            var folder = m_folderList.FirstOrDefault(f => f.Name.EasyEquals(task.FolderName));

            if (folder == null)
            {
                if (Folder.IsValidFolderName(task.FolderName))
                {
                    AddFolder(folder = new Folder(task.FolderName, color));
                }
            }

            var newTask = task.CloneWithFolder(folder);

            AddTask(newTask);
            return(newTask);
        }
Example #2
0
        public static DraftTask TryParse(string value, out string error)
        {
            Contract.Requires(null != value, "value");
            var task = new DraftTask();

            var tokens = tokenize(value);

            if (tokens.Count > 0 && tokens[0] is string)
            {
                var description = (string)tokens[0];
                if (description != null)
                {
                    Debug.Assert(description == description.Trim());
                    if (description.StartsWith(c_importantChar))
                    {
                        task.IsImportant = true;
                        description      = description.Substring(c_importantChar.Length);
                    }
                    else if (description.EndsWith(c_importantChar))
                    {
                        task.IsImportant = true;
                    }
                }

                task.Description = description;
            }
            else
            {
                task.Description = null;
            }

            var markers = new Dictionary <TaskMarker, string>();

            for (int i = 0; i < tokens.Count; i++)
            {
                if (tokens[i] is TaskMarker)
                {
                    var marker = (TaskMarker)tokens[i];
                    var val    = stringAtIndex(tokens, i + 1);
                    if (markers.ContainsKey(marker))
                    {
                        error = string.Format("Got many instances of {0}", marker);
                        return(null);
                    }
                    else
                    {
                        markers.Add(marker, val);
                    }
                }
            }

            if (markers.ContainsKey(TaskMarker.IN))
            {
                task.FolderName = markers[TaskMarker.IN];
            }
            if (markers.ContainsKey(TaskMarker.ON))
            {
                var onString = markers[TaskMarker.ON];

                Nullable <DateTime> onValue = DateParser.ParseDate(onString);
                task.Due = onValue;
                if (!onValue.HasValue)
                {
                    error = string.Format("Could not parse '{0}'.", onString);
                    return(null);
                }
            }

            error = null;
            return(task);
        }
Example #3
0
        public Task AddTask(DraftTask task, IList<Color> colorOptions)
        {
            Contract.Requires(null != task, "task");
            var color = getNextColor(colorOptions);

            var folder = m_folderList.FirstOrDefault(f => f.Name.EasyEquals(task.FolderName));
            if (folder == null)
            {
                if (Folder.IsValidFolderName(task.FolderName))
                {
                    AddFolder(folder = new Folder(task.FolderName, color));
                }
            }

            var newTask = task.CloneWithFolder(folder);
            AddTask(newTask);
            return newTask;
        }
Example #4
0
 public EditTask()
 {
     m_task = new DraftTask();
     m_task.PropertyChanged += task_propertyChanged;
     validateDescription();
 }
Example #5
0
 public static object[] GetArray(DraftTask a)
 {
     return GetArray((BaseTask)a).Concat(new string[] { a.FolderName }).ToArray();
 }
Example #6
0
 public static bool EditTaskEquals(DraftTask a, DraftTask b)
 {
     return ArraysEqual(GetArray(a), GetArray(b));
 }
Example #7
0
        public static DraftTask TryParse(string value, out string error)
        {
            Contract.Requires(null != value, "value");
            var task = new DraftTask();

            var tokens = tokenize(value);

            if (tokens.Count > 0 && tokens[0] is string)
            {
                var description = (string)tokens[0];
                if (description != null)
                {
                    Debug.Assert(description == description.Trim());
                    if (description.StartsWith(c_importantChar))
                    {
                        task.IsImportant = true;
                        description = description.Substring(c_importantChar.Length);
                    }
                    else if (description.EndsWith(c_importantChar))
                    {
                        task.IsImportant = true;
                    }
                }

                task.Description = description;
            }
            else
            {
                task.Description = null;
            }

            var markers = new Dictionary<TaskMarker, string>();

            for (int i = 0; i < tokens.Count; i++)
            {
                if (tokens[i] is TaskMarker)
                {
                    var marker = (TaskMarker)tokens[i];
                    var val = stringAtIndex(tokens, i + 1);
                    if (markers.ContainsKey(marker))
                    {
                        error = string.Format("Got many instances of {0}", marker);
                        return null;
                    }
                    else
                    {
                        markers.Add(marker, val);
                    }
                }
            }

            if (markers.ContainsKey(TaskMarker.IN))
            {
                task.FolderName = markers[TaskMarker.IN];
            }
            if (markers.ContainsKey(TaskMarker.ON))
            {
                var onString = markers[TaskMarker.ON];

                Nullable<DateTime> onValue = DateParser.ParseDate(onString);
                task.Due = onValue;
                if (!onValue.HasValue)
                {
                    error = string.Format("Could not parse '{0}'.", onString);
                    return null;
                }
            }

            error = null;
            return task;
        }