Example #1
0
        public static void Add(Task task)
        {
            Mouse.SetCursor(Cursors.Wait);
            //DB
            Context.taskWork.Create_Task(task);
            //Context.taskWork.Create_TaskToFave(task.ID, GlobalInfo.CurrentUser.ID);
            //task.IndexNumber = task.ID; //todo indexNumber уже должен быть заполнен
            if (task.PropValues != null && task.PropValues.Count > 0)
            {
                Context.taskWork.Update_Task(task);
            }

            //Добавим в избранное

            //VM
            TreeNodeFactory factory = new TreeNodeFactory(); // todo на текущий момент TreeNodeFactory имеет интерфейс ITreeNodeFactory, но при этом создаётся здесь и используется без учёта этого факта
            TreeNode        newNode = factory.CreateTreeNode(task);

            TasksVM.DictionaryFull.Add(task.ID, newNode); // todo интересный момент использования классом самого себя

            if (task.ParentTaskID != null)
            {
                int parentID = (int)task.ParentTaskID;
                newNode.ParentNode = DictionaryFull[parentID];
                DictionaryFull[parentID].AddChild(newNode);
            }

            newNode.FullPath = generate_PathForTask(task.ID);
            Mouse.SetCursor(Cursors.Arrow);
        }
Example #2
0
        private static void FillTreeDictionaryByTasks(Dictionary <int, TreeNode> curDictionary, List <Task> tasksBD, bool isFullTree)
        {
            //tasksBD = tasksBD.OrderBy(t => t.IndexNumber).ToList();
            TreeNodeFactory treeNodeFactory = new TreeNodeFactory();
            int             indexNumber     = 1;

            foreach (Task taskTmp in tasksBD)
            {
                Task task;
                if (isFullTree)
                {
                    task = taskTmp;
                }
                else
                {
                    task = DictionaryFull[taskTmp.ID].Task; //todo Настя попробуем хранить ссылку, чтобы избранное обновлялось сразу
                }
                int      id = task.ID;
                TreeNode treeNode;
                if (!curDictionary.ContainsKey(id))
                {
                    treeNode             = treeNodeFactory.CreateTreeNode(task);
                    treeNode.IndexNumber = indexNumber;
                    curDictionary.Add(id, treeNode);
                    indexNumber++;
                }
                else
                {
                    curDictionary[id].Task = task;
                    treeNode = curDictionary[id];                          // todo мне кажется, или эти 2 строчки несогласованы между собой
                    //treeNode = treeNodeFactory.CreateTreeNode(task);    //
                }

                if (task.ParentTaskID != null)
                {
                    int parentId = (int)task.ParentTaskID;

                    if (!curDictionary.ContainsKey(parentId))
                    {
                        var typeID = tasksBD.First(t => t.ID == parentId).TaskTypeID;
                        curDictionary.Add(parentId, treeNodeFactory.CreateTreeNode((TaskTypeEnum)typeID));
                    }

                    TreeNode parentTreeNode = curDictionary[parentId];
                    parentTreeNode.AddChild(treeNode);
                    treeNode.ParentNode = parentTreeNode;
                }
            }
        }
Example #3
0
        public static void AddFave(Task task)
        {
            //DB
            Context.taskWork.Create_TaskToFave(task.ID, GlobalInfo.CurrentUser.ID);
            task.IndexNumber = task.ID;

            //VM
            TreeNodeFactory factory = new TreeNodeFactory(); // todo на текущий момент TreeNodeFactory имеет интерфейс ITreeNodeFactory, но при этом создаётся здесь и используется без учёта этого факта
            TreeNode        newNode = factory.CreateTreeNode(task);

            TasksVM.Dictionary.Add(task.ID, newNode); // todo интересный момент использования классом самого себя

            if (task.ParentTaskID != null)
            {
                int parentID = (int)task.ParentTaskID;
                newNode.ParentNode = Dictionary[parentID];
                Dictionary[parentID].AddChild(newNode);
            }

            newNode.FullPath = generate_PathForTask(task.ID);
        }
Example #4
0
        public static void Edit(Task task, bool IsFullTree) //TreeNode
        {
            var curDictionary = IsFullTree ? DictionaryFull : Dictionary;

            //DB
            if (IsFullTree)
            {
                try
                {
                    Mouse.SetCursor(Cursors.Wait);
                    Context.taskWork.Update_Task(task);
                    Mouse.SetCursor(Cursors.Arrow);
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message, "Ошибка");
                    Mouse.SetCursor(Cursors.Arrow);
                }
            }
            //VM
            TreeNode oldNode = curDictionary[task.ID];

            TreeNodeFactory factory = new TreeNodeFactory();
            TreeNode        newNode = factory.CreateTreeNode(task);

            newNode.IndexNumber = oldNode.IndexNumber;

            //Parent
            if (newNode.Task.ParentTaskID != null)
            {
                newNode.ParentNode = curDictionary[(int)newNode.Task.ParentTaskID];
                if (oldNode.ParentNode != newNode.ParentNode) // todo а если родитель не поменялся, значит не надо в нём регистрироваться? Хм увидел позже. Функциональность размазана, из-за этого сложно, код можно написать по-другому, см. пример
                {
                    newNode.ParentNode.AddChild(newNode);     // условие newNode.Task.ParentTaskID != null   подразумевает, что внутри блока будет работа полностью с newNode
                }
            }
            if (oldNode.ParentNode != null)
            {
                if (oldNode.ParentNode == newNode.ParentNode)
                {
                    oldNode.ParentNode.TreeNodes[oldNode.ParentNode.TreeNodes.IndexOf(oldNode)] = newNode;
                }
                else
                {
                    oldNode.ParentNode.TreeNodes.Remove(oldNode);
                }
            }


            //// пример реализации
            //TreeNode oldParent = null;
            //TreeNode newParent = null;

            //if (oldNode.Task.ParentTaskID.HasValue)
            //    Dictionary.TryGetValue(oldNode.Task.ParentTaskID.Value, out oldParent);

            //if (newNode.Task.ParentTaskID.HasValue)
            //    Dictionary.TryGetValue(newNode.Task.ParentTaskID.Value, out newParent);

            //if (oldParent == newParent)
            //    newParent?.UpdateChild(oldNode, newNode);   // придётся дописать
            //else
            //{
            //    oldParent?.RemoveChild(oldNode);            // и это тоже
            //    newParent?.AddChild(newNode);
            //}



            //Children
            foreach (var n in oldNode.TreeNodes)
            {
                n.ParentNode = newNode;
                n.FullPath   = generate_PathForTask(n.Task.ID);
                newNode.AddChild(n);
            }

            curDictionary[task.ID] = newNode;
            //DictionaryFull.Remove(task.ID);
            //DictionaryFull.Add(task.ID, newNode);
            newNode.FullPath = generate_PathForTask(task.ID);
        }