Exemple #1
0
        /// <summary>
        /// Add a new todo item to the container
        /// </summary>
        /// <param name="container"></param>
        /// <param name="input"></param>
        static void AddToContainer(ITodoContainer container, string input)
        {
            string         strippedInput = input.Substring(2);
            ITodoContainer newContainer  = NewTodo(strippedInput);

            container.AddChild(newContainer);
        }
Exemple #2
0
 /// <summary>
 /// Save the given root todo container with the given serializer.
 /// </summary>
 /// <param name="serializer"></param>
 /// <param name="rootContainer"></param>
 static void SaveRoot(string filename, DataContractJsonSerializer serializer, ITodoContainer rootContainer)
 {
     Console.WriteLine(string.Format("Saving to {0}", filename));
     using (Stream stream = File.Open(filename, FileMode.Create))
     {
         serializer.WriteObject(stream, rootContainer);
     }
 }
        /// <summary>
        /// Display the todo container.
        /// </summary>
        /// <param name="container"></param>
        /// <returns></returns>
        public string Display(ITodoContainer container)
        {
            StringBuilder sb = new StringBuilder();

            if (_parentDisplay != null)
            {
                if (container.Parent != null)
                {
                    ITodoContainer parent = container.Parent;
                    while (parent != null)
                    {
                        if (parent.Todo != null)
                        {
                            sb.Insert(0, string.Format("{0} > ", _parentDisplay.Display(parent.Todo)));
                        }
                        else
                        {
                            sb.Insert(0, "root > ");
                        }

                        parent = parent.Parent;
                    }
                    sb.AppendLine("\n");
                }
                else
                {
                    sb.AppendLine("<root>");
                }
            }

            if (_todoDisplay != null && container.Todo != null)
            {
                sb.AppendLine(_todoDisplay.Display(container.Todo));
            }

            if (container.Children.Any())
            {
                sb.AppendFormat("{0} Children:\n", container.Children.Count());

                if (_childDisplay != null)
                {
                    int i = 0;
                    foreach (ITodo child in container.Children.Select(c => c.Todo))
                    {
                        sb.AppendFormat("  {0} {1}\n", i, _childDisplay.Display(child));
                        i++;
                    }
                }
            }
            else
            {
                sb.AppendLine("No TODOs.");
            }

            return(sb.ToString());
        }
Exemple #4
0
        static void Main(string[] args)
        {
            _serializer    = new DataContractJsonSerializer(typeof(TodoContainer));
            _rootContainer = LoadRoot(SAVE_PATH, _serializer);
            ITodoContainer currentContainer = _rootContainer;

            ITodoDisplay          detailedDisplay          = new DetailedTodoDisplay();
            ITodoDisplay          summaryDisplay           = new SummaryTodoDisplay();
            ITodoContainerDisplay detailedContainerDisplay = new DetailedTodoContainerDisplay(detailedDisplay, summaryDisplay, summaryDisplay);

            while (HandleInput(detailedContainerDisplay, ref currentContainer))
            {
            }

            SaveRoot(SAVE_PATH, _serializer, _rootContainer);
        }
Exemple #5
0
 /// <summary>
 /// Remove a child container.
 /// </summary>
 /// <param name="container"></param>
 /// <returns></returns>
 public bool RemoveChild(ITodoContainer container)
 {
     container.Parent = null;
     return(_children.Remove(container));
 }
Exemple #6
0
 /// <summary>
 /// Add a new child todo container to this container.
 /// </summary>
 /// <param name="container"></param>
 public void AddChild(ITodoContainer container)
 {
     container.Parent = this;
     _children.Add(container);
 }
Exemple #7
0
        /// <summary>
        /// Remove a child container by index.
        /// </summary>
        /// <param name="index"></param>
        /// <returns></returns>
        public bool RemoveChild(int index)
        {
            ITodoContainer container = _children.ElementAt(index);

            return(RemoveChild(container));
        }
Exemple #8
0
        /// <summary>
        /// Display the todo container, and handle user input.
        /// </summary>
        /// <param name="containerDisplay"></param>
        /// <param name="currentContainer"></param>
        /// <returns></returns>
        static bool HandleInput(ITodoContainerDisplay containerDisplay, ref ITodoContainer currentContainer)
        {
            Console.WriteLine(containerDisplay.Display(currentContainer));

            string input = Console.ReadLine().Trim();

            Console.Clear();

            if (string.IsNullOrEmpty(input))
            {
                return(true);
            }

            if (input.Equals("q", StringComparison.OrdinalIgnoreCase) ||
                input.Equals("quit", StringComparison.OrdinalIgnoreCase) ||
                input.Equals("exit", StringComparison.OrdinalIgnoreCase))
            {
                return(false);
            }

            if (input.Equals("s", StringComparison.OrdinalIgnoreCase))
            {
                SaveRoot(SAVE_PATH, _serializer, _rootContainer);
                return(true);
            }

            if (input.Equals("p", StringComparison.OrdinalIgnoreCase))
            {
                if (currentContainer.Parent != null)
                {
                    currentContainer = currentContainer.Parent;
                }
                else
                {
                    Console.WriteLine("No parent.");
                }
                return(true);
            }

            if (input.StartsWith("a ", StringComparison.OrdinalIgnoreCase))
            {
                AddToContainer(currentContainer, input);
                return(true);
            }

            if (input.StartsWith("r ", StringComparison.OrdinalIgnoreCase))
            {
                string numStr = input.Substring(2);
                int    index;
                if (int.TryParse(numStr, out index))
                {
                    currentContainer.RemoveChild(index);
                }
                else
                {
                    Console.WriteLine(string.Format("No child found matching index '{0}'", numStr));
                }
                return(true);
            }

            if (input.Equals("r", StringComparison.OrdinalIgnoreCase))
            {
                if (currentContainer.Parent != null)
                {
                    ITodoContainer containerToRemove = currentContainer;
                    currentContainer = currentContainer.Parent;
                    currentContainer.RemoveChild(containerToRemove);
                }
                else
                {
                    Console.WriteLine("Can't remove root node.");
                }
                return(true);
            }

            int num;

            if (int.TryParse(input, out num))
            {
                ITodoContainer newContainer = currentContainer.Children.ElementAtOrDefault(num);
                if (newContainer != null)
                {
                    currentContainer = newContainer;
                }
                else
                {
                    Console.WriteLine(string.Format("Can't find child index {0}", num));
                }
                return(true);
            }

            Console.WriteLine(string.Format("Couldn't understand command '{0}'", input));

            return(true);
        }