diff --git a/BeWo/BeWo.csproj b/BeWo/BeWo.csproj
index 6d2948564..f3c6a4f1a 100644
--- a/BeWo/BeWo.csproj
+++ b/BeWo/BeWo.csproj
@@ -1055,7 +1055,7 @@
DebugMessageLogView.xaml
-
+
diff --git a/BeWo/View/Detail/MassnahmenActionParameters.cs b/BeWo/View/Detail/MassnahmenActionParameters.cs
deleted file mode 100644
index 502bd09d1..000000000
--- a/BeWo/View/Detail/MassnahmenActionParameters.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-using BeWo.Core;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace BeWo.View.Detail
-{
- public abstract class MassnahmenHistoryRecord
- {
- }
-
- public class MassnahmenHistoryRecordOrigin : MassnahmenHistoryRecord
- {
-
- }
-
- public class MassnahmenHistoryRecordAdd : MassnahmenHistoryRecord
- {
- public SupportConceptGoalTreeItem NewTreeItem { get; set; }
- public SupportConceptGoalTreeItem Parent { get; set; }
-
- public MassnahmenHistoryRecordAdd(SupportConceptGoalTreeItem newitem, SupportConceptGoalTreeItem parent)
- {
- NewTreeItem = newitem;
- Parent = parent;
- }
- }
-
- public class MassnahmenHistoryRecordImport : MassnahmenHistoryRecord
- {
- public List Parameters { get; set; }
-
- public MassnahmenHistoryRecordImport(List list)
- {
- Parameters = list;
- }
- }
-
- public class MassnahmenHistoryRecordDelete : MassnahmenHistoryRecord
- {
- public List Parameters { get; set; }
-
- public MassnahmenHistoryRecordDelete(List list)
- {
- Parameters = list;
- }
- }
-
- public class MassnahmenHistoryRecordMove : MassnahmenHistoryRecord
- {
-
- }
-
- public class MassnahmenHistoryRecordCopy : MassnahmenHistoryRecord
- {
- public List Parameters { get; set; }
-
- public MassnahmenHistoryRecordCopy(List list)
- {
- Parameters = list;
- }
- }
-
- public abstract class MassnahmenHistoryParameter
- {
-
- }
-
- public class MassnahmenHistoryParameter1 : MassnahmenHistoryParameter
- {
- public SupportConceptGoalTreeItem NewTreeItem { get; set; }
- public SupportConceptGoalTreeItem Parent { get; set; }
-
- public MassnahmenHistoryParameter1(SupportConceptGoalTreeItem newitem, SupportConceptGoalTreeItem parent)
- {
- NewTreeItem = newitem;
- Parent = parent;
- }
- }
-
- public class MassnahmenHistoryParameter2 : MassnahmenHistoryParameter
- {
- public SupportConceptGoalTreeItem Current { get; set; }
- public SupportConceptGoalTreeItem Parent { get; set; }
-
- public MassnahmenHistoryParameter2(SupportConceptGoalTreeItem current, SupportConceptGoalTreeItem parent)
- {
- Current = current;
- Parent = parent;
- }
- }
-}
diff --git a/BeWo/View/Detail/MassnahmenHistory.cs b/BeWo/View/Detail/MassnahmenHistory.cs
index 7d26f31ac..c3e5a64de 100644
--- a/BeWo/View/Detail/MassnahmenHistory.cs
+++ b/BeWo/View/Detail/MassnahmenHistory.cs
@@ -59,9 +59,7 @@ namespace BeWo.View.Detail
public LinkedListNode LastChange { get; set; }
public MassnahmenTreeTrimmer TreeTrimmer { get; set; }
-
-
public MassnahmenHistory(MassnahmenTreeTrimmer trimmer, Action refresh, Action button)
{
Origin = new MassnahmenHistoryRecordOrigin();
@@ -77,14 +75,21 @@ namespace BeWo.View.Detail
public bool GotPrevAction => LastChange is object && LastChange.Value != Origin;
public bool GotNextAction => LastChange is object && LastChange.Next is object;
+ public bool GotChanges => LastChange is object && (GotNextAction || GotPrevAction);
- public void RecordAction(MassnahmenHistoryRecord val)
+ public void RecordAdd(MassnahmenHistoryNodeParameter param) => RecordAction(new MassnahmenHistoryRecordAdd(param));
+ public void RecordMove(MassnahmenHistoryRecordMove move) => RecordAction(move);
+ public void RecordImport(List param) => RecordAction(new MassnahmenHistoryRecordImport(param));
+ public void RecordDelete(MassnahmenHistoryRecordDelete del) => RecordAction(del);
+ public void RecordCopy(MassnahmenHistoryNodeParameter root, List param) => RecordAction(new MassnahmenHistoryRecordCopy(root, param));
+
+ private void RecordAction(MassnahmenHistoryRecord val)
{
- while(LastChange != History.Last)
+ while (LastChange != History.Last)
{
History.RemoveLast();
}
-
+
History.AddLast(val);
LastChange = History.Last;
@@ -115,7 +120,6 @@ namespace BeWo.View.Detail
RefreshButton();
RefreshTree();
}
-
public void RedoNextAction()
{
var action = LastChange.Next.Value;
diff --git a/BeWo/View/Detail/MassnahmenHistoryRecord.cs b/BeWo/View/Detail/MassnahmenHistoryRecord.cs
new file mode 100644
index 000000000..fde3d2b05
--- /dev/null
+++ b/BeWo/View/Detail/MassnahmenHistoryRecord.cs
@@ -0,0 +1,104 @@
+using BeWo.Core;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BeWo.View.Detail
+{
+ public abstract class MassnahmenHistoryRecord
+ {
+ }
+
+ public class MassnahmenHistoryRecordOrigin : MassnahmenHistoryRecord
+ {
+
+ }
+
+ public class MassnahmenHistoryRecordAdd : MassnahmenHistoryRecord
+ {
+ public MassnahmenHistoryNodeParameter Parameter { get; set; }
+
+ public MassnahmenHistoryRecordAdd(SupportConceptGoalTreeItem newitem, SupportConceptGoalTreeItem parent)
+ {
+ Parameter = new MassnahmenHistoryNodeParameter(newitem, parent);
+ }
+ public MassnahmenHistoryRecordAdd(MassnahmenHistoryNodeParameter param)
+ {
+ Parameter = param;
+ }
+ }
+
+ public class MassnahmenHistoryRecordImport : MassnahmenHistoryRecord
+ {
+ public List Parameters { get; set; }
+ public List ParametersReversed { get; set; }
+
+ public MassnahmenHistoryRecordImport(List list)
+ {
+ Parameters = list;
+ ParametersReversed = new Stack(list).ToList();
+ }
+ }
+
+ public class MassnahmenHistoryRecordDelete : MassnahmenHistoryRecord
+ {
+ public MassnahmenHistoryNodeParameter ExNode { get; set; }
+ public List Parameters { get; set; }
+
+ public MassnahmenHistoryRecordDelete(MassnahmenHistoryNodeParameter exnode, List list)
+ {
+ Parameters = list;
+ ExNode = exnode;
+ }
+ }
+
+ public class MassnahmenHistoryRecordMove : MassnahmenHistoryRecord
+ {
+ public SupportConceptGoalTreeItem Child { get; set; }
+ public SupportConceptGoalTreeItem ExParent { get; set; }
+ public SupportConceptGoalTreeItem Parent { get; set; }
+
+ public MassnahmenHistoryRecordMove(SupportConceptGoalTreeItem child, SupportConceptGoalTreeItem exparent, SupportConceptGoalTreeItem parent)
+ {
+ Child = child;
+ ExParent = exparent;
+ Parent = parent;
+ }
+ }
+
+ public class MassnahmenHistoryRecordCopy : MassnahmenHistoryRecord
+ {
+ public MassnahmenHistoryNodeParameter CurrentNode { get; set; }
+ public List Parameters { get; set; }
+
+ public MassnahmenHistoryRecordCopy(MassnahmenHistoryNodeParameter root, List list)
+ {
+ Parameters = list;
+ CurrentNode = root;
+ }
+ }
+
+ public abstract class MassnahmenHistoryParameter
+ {
+
+ }
+
+ public class MassnahmenHistoryNodeParameter : MassnahmenHistoryParameter
+ {
+ public SupportConceptGoalTreeItem Current { get; set; }
+ public SupportConceptGoalTreeItem Parent { get; set; }
+
+ public MassnahmenHistoryNodeParameter(SupportConceptGoalTreeItem newitem, SupportConceptGoalTreeItem parent)
+ {
+ Current = newitem;
+ Parent = parent;
+ }
+ public MassnahmenHistoryNodeParameter(SupportConceptGoalTreeItem newitem)
+ {
+ Current = newitem;
+ Parent = newitem.ParentGoal as SupportConceptGoalTreeItem;
+ }
+ }
+}
diff --git a/BeWo/View/Detail/MassnahmenTreeTrimmer.cs b/BeWo/View/Detail/MassnahmenTreeTrimmer.cs
index 119b9a3fb..dcddcd5fa 100644
--- a/BeWo/View/Detail/MassnahmenTreeTrimmer.cs
+++ b/BeWo/View/Detail/MassnahmenTreeTrimmer.cs
@@ -1,11 +1,11 @@
using BeWo.Core;
using BeWo.ViewModel.ListViewModel;
+using BS.Shared;
using BS.Shared.Core;
+using BS.Shared.DataContracts.ClientPartials;
using System;
using System.Collections.Generic;
using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
namespace BeWo.View.Detail
{
@@ -13,7 +13,7 @@ namespace BeWo.View.Detail
{
public Dictionary, Action>> Type2Actions { get; set; }
- public MassnahmenTreeViewView View{ get; set; }
+ public MassnahmenTreeViewView View { get; set; }
public GenericValueListEntryListVM ViewModel => View.ViewModel;
public ObservableSortCollection GoalTree => View.GoalTree;
@@ -24,11 +24,11 @@ namespace BeWo.View.Detail
Type2Actions = new Dictionary, Action>>
{
- { typeof(MassnahmenHistoryRecordAdd), GetTuple(UndoAddAction, RedoAddAction) },
- { typeof(MassnahmenHistoryRecordCopy), GetTuple(UndoCopyAction, RedoCopyAction) },
- { typeof(MassnahmenHistoryRecordDelete), GetTuple(UndoDeleteAction, RedoDeleteAction) },
- { typeof(MassnahmenHistoryRecordImport), GetTuple(UndoImportAction, RedoImportAction) },
- { typeof(MassnahmenHistoryRecordMove), GetTuple(UndoMoveAction, RedoMoveAction) },
+ { typeof(MassnahmenHistoryRecordAdd), GetTuple(UndoAddAction, RedoAddAction) },
+ { typeof(MassnahmenHistoryRecordCopy), GetTuple(UndoCopyAction, RedoCopyAction) },
+ { typeof(MassnahmenHistoryRecordDelete), GetTuple(UndoDeleteAction, RedoDeleteAction) },
+ { typeof(MassnahmenHistoryRecordImport), GetTuple(UndoImportAction, RedoImportAction) },
+ { typeof(MassnahmenHistoryRecordMove), GetTuple(UndoMoveAction, RedoMoveAction) },
};
}
@@ -41,26 +41,251 @@ namespace BeWo.View.Detail
{
Type2Actions[action.GetType()].Item2(action);
}
-
- public void UndoAddAction(MassnahmenHistoryRecord param)
+
+ public MassnahmenHistoryNodeParameter DoAddAction(SupportConceptGoalTreeItem parent, ValueListEntryType valueListEntryType,
+ string description, string abbreviation, string notice)
{
- var addParam = param as MassnahmenHistoryRecordAdd;
- var newItem = addParam.NewTreeItem;
- var parent = addParam.Parent;
+ if (!valueListEntryType.HasFlag(ValueListEntryType.SupportConceptGoalCategoryType) &&
+ !valueListEntryType.HasFlag(ValueListEntryType.SupportConceptGoalType))
+ throw new ArgumentOutOfRangeException();
- ViewModel.VMList.Remove(newItem.GoalEntryVM);
+ var vm = ViewModel.NewVM;
+ vm.Type = valueListEntryType;
- if (parent != null)
- parent.Items.Remove(newItem);
- else
- GoalTree.Remove(newItem);
+ if (description is object) vm.Description = description;
+ if (abbreviation is object) vm.Abbreviation = abbreviation;
+ if (notice is object) vm.Notice = notice;
+
+ var newItem = new SupportConceptGoalTreeItem
+ {
+ GoalEntryVM = vm,
+ GoalEntryDC = vm.CommitToDataContract(),
+ ParentGoal = parent
+ };
+
+ var rtn = new MassnahmenHistoryNodeParameter(newItem, parent);
+
+ ViewModel.AddNewVMToList();
+
+ if (parent == null)
+ {
+ GoalTree.Add(newItem);
+ return rtn;
+ }
+
+
+ vm.ParentEntry = parent.GoalEntryDC ?? parent.GoalEntryVM.CommitToDataContract();
+
+ parent.Items.Add(newItem);
+ parent.IsExpanded = true;
+
+ return rtn;
+ }
+ private void UndoAddAction(MassnahmenHistoryRecordAdd record)
+ {
+ DeactivateNode(record.Parameter);
+ }
+ private void RedoAddAction(MassnahmenHistoryRecordAdd param) => RedoAddAction(param.Parameter);
+ private void RedoAddAction(MassnahmenHistoryNodeParameter addParam)
+ {
+ ActivateNode(addParam);
}
- public void RedoAddAction(MassnahmenHistoryRecord param)
+ public List DoCopyAction(SupportConceptGoalTreeItem parent, SupportConceptGoalTreeItem source,
+ MassnahmenTreeCopyType copyType, bool force_deep_copy,
+ out MassnahmenHistoryNodeParameter current, Stack records = null)
{
- var addParam = param as MassnahmenHistoryRecordAdd;
- var newItem = addParam.NewTreeItem;
- var parent = addParam.Parent;
+ if (records is null)
+ records = new Stack();
+
+ if (source == null || parent == null)
+ throw new NotImplementedException("#43298467891364987");
+
+ var wm = source.GoalEntryVM;
+ var childs = source.Items.ToList();
+ var param = DoAddAction(parent, wm.Type, wm.Description, wm.Abbreviation, wm.Notice);
+ var node = param.Current;
+ var parameter = new MassnahmenHistoryNodeParameter(node, parent);
+
+ current = parameter;
+
+ records.Push(parameter);
+
+ if (copyType == MassnahmenTreeCopyType.Subtree || force_deep_copy)
+ {
+ foreach (var child in childs)
+ {
+ DoCopyAction(node, child, copyType, force_deep_copy, out var item, records);
+ }
+ }
+
+ return records.ToList();
+ }
+ private void UndoCopyAction(MassnahmenHistoryRecordCopy record)
+ {
+ DeactivateSubtree(record.CurrentNode, record.Parameters);
+ }
+ private void RedoCopyAction(MassnahmenHistoryRecordCopy record)
+ {
+ ActivateSubtree(record.CurrentNode, record.Parameters);
+ }
+
+ public MassnahmenHistoryRecordDelete DoDeleteAction(MassnahmenHistoryNodeParameter param)
+ {
+ // Delete Full Subtree
+ var stack = new Stack();
+ var queue = new Queue();
+
+ DoDeleteActionRec(param.Current, ref stack, ref queue);
+
+ // Queue löschen
+ DeactivateSubtree(param, queue);
+
+ //var list = stack.Select(x => new MassnahmenHistoryNodeParameter(x, View.GetParent(x))).ToList();
+ var node = new MassnahmenHistoryNodeParameter(param.Current, param.Parent);
+
+ return new MassnahmenHistoryRecordDelete(node, stack.ToList());
+ }
+ public void DoDeleteActionRec(SupportConceptGoalTreeItem item, ref Stack stack, ref Queue queue)
+ {
+ foreach (var child in item.Items)
+ {
+ DoDeleteActionRec(child, ref stack, ref queue);
+ }
+
+ var param = new MassnahmenHistoryNodeParameter(item);
+ stack.Push(param);
+ queue.Enqueue(param);
+ }
+ private void UndoDeleteAction(MassnahmenHistoryRecordDelete param)
+ {
+ ActivateSubtree(param.ExNode, param.Parameters);
+ }
+ private void RedoDeleteAction(MassnahmenHistoryRecordDelete param)
+ {
+ DeactivateSubtree(param.ExNode, param.Parameters);
+ }
+
+ public List DoImportAction(SupportConceptGoalDC goal, List records = null)
+ {
+ if (goal == null)
+ return null;
+
+ if (records == null)
+ records = new List();
+
+ goal.Children?.ForEach(x => DoImportAction(x, records));
+
+ if (goal.IsChecked)
+ AddIcf(goal, records);
+
+ return records;
+ }
+ private void UndoImportAction(MassnahmenHistoryRecordImport param)
+ {
+ foreach (var item in param.ParametersReversed)
+ {
+ DeactivateNode(item);
+ }
+ }
+ private void RedoImportAction(MassnahmenHistoryRecordImport param)
+ {
+ foreach (var item in param.Parameters)
+ {
+ ActivateNode(item);
+ }
+ }
+
+ public MassnahmenHistoryRecordMove DoMoveAction(SupportConceptGoalTreeItem child, SupportConceptGoalTreeItem ex_parent, SupportConceptGoalTreeItem parent)
+ {
+ // Entferne child aus Ex-Parent
+ if (ex_parent is object)
+ ex_parent.Items.Remove(child);
+ else
+ GoalTree.Remove(child);
+
+ // Füge child parent hinzu
+ if (parent is object)
+ parent.Items.Add(child);
+ else
+ GoalTree.Add(child);
+
+ // Setze child Parent Entry
+ child.GoalEntryVM.ParentEntry = parent?.GoalEntryDC;
+ child.ParentGoal = parent;
+
+ return new MassnahmenHistoryRecordMove(child, ex_parent, parent);
+ }
+ private void UndoMoveAction(MassnahmenHistoryRecordMove move)
+ {
+ DoMoveAction(move.Child, move.Parent, move.ExParent);
+ }
+ private void RedoMoveAction(MassnahmenHistoryRecordMove move)
+ {
+ DoMoveAction(move.Child, move.ExParent, move.Parent);
+ }
+
+ private Tuple, Action> GetTuple(Action a, Action b) where T1 : MassnahmenHistoryRecord
+ => new Tuple, Action>(x => a(x as T1), x => b(x as T1));
+ private SupportConceptGoalTreeItem AddIcf(SupportConceptGoalDC goal, List records)
+ {
+ if (goal == null) return null;
+
+ // Schaut, ob das Child bereits existiert
+ var similarGoal = GoalTree.FirstOrDefault(x => MassnahmenTreeViewView.SearchGoalTreeItem(x, goal.GoalEntryDC.TypeDescription, goal.GoalEntryDC.Abbreviation, goal.GoalEntryDC.Notice) != null);
+ if (similarGoal != null)
+ return similarGoal;
+
+ // Schaut, ob das Goal ein Parent hat
+ if (goal.ParentGoal == null)
+ {
+ // Ist Root Element
+ var record = DoAddAction(null, ValueListEntryType.SupportConceptGoalCategoryType,
+ goal.GoalEntryDC.TypeDescription, goal.GoalEntryDC.Abbreviation, goal.GoalEntryDC.Notice);
+
+ records.Add(record);
+
+ //GoalTree.Sort((x, y) => x.GoalEntryVM?.DisplayName?.CompareTo(y.GoalEntryVM?.DisplayName) ?? string.Compare(string.Empty, y.GoalEntryVM?.DisplayName, StringComparison.Ordinal));
+
+ return record.Current;
+ }
+
+ // Schaut, ob das ParentGoal bereits existiert
+ foreach (var goalTreeItem in GoalTree)
+ {
+ var similarParentGoal = MassnahmenTreeViewView.SearchGoalTreeItem(goalTreeItem, goal.ParentGoal.GoalEntryDC.TypeDescription, goal.ParentGoal.GoalEntryDC.Abbreviation, goal.ParentGoal.GoalEntryDC.Notice);
+ if (similarParentGoal == null)
+ continue;
+
+ var record = DoAddAction(similarParentGoal, ValueListEntryType.SupportConceptGoalCategoryType, goal.GoalEntryDC.TypeDescription, goal.GoalEntryDC.Abbreviation, goal.GoalEntryDC.Notice);
+ records.Add(record);
+ return record.Current;
+ }
+
+ // Fügt den Parent hinzu
+ var parent = AddIcf(goal.ParentGoal, records);
+ var record2 = DoAddAction(parent, ValueListEntryType.SupportConceptGoalCategoryType,
+ goal.GoalEntryDC.TypeDescription, goal.GoalEntryDC.Abbreviation, goal.GoalEntryDC.Notice);
+ records.Add(record2);
+ return record2.Current;
+ }
+
+ private void ActivateSubtree(MassnahmenHistoryNodeParameter currentNode, List param)
+ {
+ foreach (var item in param)
+ {
+ ViewModel.VMList.Add(item.Current.GoalEntryVM);
+ }
+
+ if (currentNode.Parent is object)
+ currentNode.Parent.Items.Add(currentNode.Current);
+ else
+ GoalTree.Add(currentNode.Current);
+ }
+ private void ActivateNode(MassnahmenHistoryNodeParameter currentNode)
+ {
+ var newItem = currentNode.Current;
+ var parent = currentNode.Parent;
ViewModel.VMList.Add(newItem.GoalEntryVM);
@@ -70,47 +295,29 @@ namespace BeWo.View.Detail
GoalTree.Add(newItem);
}
- private void UndoCopyAction(MassnahmenHistoryRecord obj)
+ private void DeactivateSubtree(MassnahmenHistoryNodeParameter currentNode, IEnumerable param)
{
- throw new NotImplementedException();
- }
+ foreach (var item in param)
+ {
+ ViewModel.VMList.Remove(item.Current.GoalEntryVM);
+ }
- private void RedoCopyAction(MassnahmenHistoryRecord obj)
- {
- throw new NotImplementedException();
+ if (currentNode.Parent is object)
+ currentNode.Parent.Items.Remove(currentNode.Current);
+ else
+ GoalTree.Remove(currentNode.Current);
}
+ private void DeactivateNode(MassnahmenHistoryNodeParameter currentNode)
+ {
+ var newItem = currentNode.Current;
+ var parent = currentNode.Parent;
- private void UndoDeleteAction(MassnahmenHistoryRecord obj)
- {
- throw new NotImplementedException();
- }
+ ViewModel.VMList.Remove(newItem.GoalEntryVM);
- private void RedoDeleteAction(MassnahmenHistoryRecord obj)
- {
- throw new NotImplementedException();
+ if (parent != null)
+ parent.Items.Remove(newItem);
+ else
+ GoalTree.Remove(newItem);
}
-
- private void UndoImportAction(MassnahmenHistoryRecord obj)
- {
- throw new NotImplementedException();
- }
-
- private void RedoImportAction(MassnahmenHistoryRecord obj)
- {
- throw new NotImplementedException();
- }
-
- private void UndoMoveAction(MassnahmenHistoryRecord obj)
- {
- throw new NotImplementedException();
- }
-
- private void RedoMoveAction(MassnahmenHistoryRecord obj)
- {
- throw new NotImplementedException();
- }
-
- private Tuple, Action> GetTuple(Action a, Action b)
- => new Tuple, Action>(x => a(x), x => b(x));
}
}
diff --git a/BeWo/View/Detail/MassnahmenTreeViewView.xaml.cs b/BeWo/View/Detail/MassnahmenTreeViewView.xaml.cs
index 47f484973..df9eb16ca 100644
--- a/BeWo/View/Detail/MassnahmenTreeViewView.xaml.cs
+++ b/BeWo/View/Detail/MassnahmenTreeViewView.xaml.cs
@@ -73,7 +73,7 @@ namespace BeWo.View.Detail
}
public ObservableSortCollection GoalTree { get; private set; }
- public override bool IsDirty => ViewModel != null && ViewModel.IsDirty;
+ public override bool IsDirty => ViewModel != null && ViewModel.IsDirty || (_History?.GotChanges ?? false);
public static bool IsAllowedToEditGoals => BeWoApp.LoggedOnUser.HasRight(UserRightType.SupportConcept_AllowEditGoals);
public GenericValueListEntryListVM ViewModel
@@ -272,18 +272,7 @@ namespace BeWo.View.Detail
}
private void ZielHinzufuegenButton_Click(object sender, RoutedEventArgs e)
{
- var newItem = new SupportConceptGoalTreeItem();
- var vm = ViewModel.NewVM;
- vm.Type = ValueListEntryType.SupportConceptGoalCategoryType;
-
- newItem.GoalEntryVM = vm;
- ViewModel.AddNewVMToList();
-
- GoalTree.Add(newItem);
-
- _History.RecordAction(new MassnahmenHistoryRecordAdd(newItem, null));
-
- SortGoalTree();
+ AddTreeItem(null, ValueListEntryType.SupportConceptGoalCategoryType);
}
private void IcfImport_Click(object sender, RoutedEventArgs e)
{
@@ -309,11 +298,7 @@ namespace BeWo.View.Detail
control2.ButtonImportClicked += () =>
{
- var records = new List();
-
- ImportIcf(control2.TreeViewGoalItem, records);
-
- _History.RecordAction(new MassnahmenHistoryRecordImport(records));
+ ImportTreeItem(control2.TreeViewGoalItem);
beWoWindow2.Close();
};
@@ -368,9 +353,7 @@ namespace BeWo.View.Detail
MessageBox.Show("Kopieren in tiefere Ziele/Maßnamhen nicht möglich!");
else
{
- var records = new Stack();
- CopyTreeItem(_item, _copy, false, ref records);
- _History.RecordAction(new MassnahmenHistoryRecordCopy(records.ToList()));
+ CopyTreeItem(_item, _copy, false);
}
}
private void StartMoveItem(SupportConceptGoalTreeItem _draggedItem, SupportConceptGoalTreeItem _parent)
@@ -661,7 +644,7 @@ namespace BeWo.View.Detail
textBox.Padding = new Thickness(1, 3, 1, 3);
}
}
- private static SupportConceptGoalTreeItem SearchGoalTreeItem(SupportConceptGoalTreeItem supportConceptGoalTreeItem,
+ public static SupportConceptGoalTreeItem SearchGoalTreeItem(SupportConceptGoalTreeItem supportConceptGoalTreeItem,
string description, string abbreviation, string notice)
{
if (supportConceptGoalTreeItem?.GoalEntryVM == null) return null;
@@ -779,60 +762,7 @@ namespace BeWo.View.Detail
TraverseTreeViewItem(child);
}
}
- private void ImportIcf(SupportConceptGoalDC goal, List records)
- {
- if (goal == null) return;
-
- goal.Children?.ForEach(x => ImportIcf(x, records));
-
- if (goal.IsChecked)
- AddIcf(goal, records);
- }
- private SupportConceptGoalTreeItem AddIcf(SupportConceptGoalDC goal, List records)
- {
- if (goal == null) return null;
-
- // Schaut, ob das Child bereits existiert
- var similarGoal = GoalTree.FirstOrDefault(x => SearchGoalTreeItem(x, goal.GoalEntryDC.TypeDescription, goal.GoalEntryDC.Abbreviation, goal.GoalEntryDC.Notice) != null);
- if (similarGoal != null)
- return similarGoal;
-
- // Schaut, ob das Goal ein Parent hat
- if (goal.ParentGoal == null)
- {
- var treeItem = AddTreeItem(null, ValueListEntryType.SupportConceptGoalCategoryType,
- goal.GoalEntryDC.TypeDescription, goal.GoalEntryDC.Abbreviation, goal.GoalEntryDC.Notice);
-
- records.Add(new MassnahmenHistoryParameter1(treeItem, null));
-
- GoalTree.Add(treeItem);
-
- SortGoalTree();
- //GoalTree.Sort((x, y) => x.GoalEntryVM?.DisplayName?.CompareTo(y.GoalEntryVM?.DisplayName) ?? string.Compare(string.Empty, y.GoalEntryVM?.DisplayName, StringComparison.Ordinal));
-
- return treeItem;
- }
-
- // Schaut, ob das ParentGoal bereits existiert
- foreach (var goalTreeItem in GoalTree)
- {
- var similarParentGoal = SearchGoalTreeItem(goalTreeItem, goal.ParentGoal.GoalEntryDC.TypeDescription, goal.ParentGoal.GoalEntryDC.Abbreviation, goal.ParentGoal.GoalEntryDC.Notice);
- if (similarParentGoal == null)
- continue;
-
- var treeItem2 = AddTreeItem(similarParentGoal, ValueListEntryType.SupportConceptGoalCategoryType, goal.GoalEntryDC.TypeDescription, goal.GoalEntryDC.Abbreviation, goal.GoalEntryDC.Notice);
- records.Add(new MassnahmenHistoryParameter1(treeItem2, similarParentGoal));
- return treeItem2;
- }
-
- // Fügt den Parent hinzu
- var parent = AddIcf(goal.ParentGoal, records);
- var treeItem3 = AddTreeItem(parent, ValueListEntryType.SupportConceptGoalCategoryType,
- goal.GoalEntryDC.TypeDescription, goal.GoalEntryDC.Abbreviation, goal.GoalEntryDC.Notice);
- records.Add(new MassnahmenHistoryParameter1(treeItem3, parent));
- return treeItem3;
- }
-
+
public void AddTreeItemWithControl(SupportConceptGoalTreeItem parent, ValueListEntryType valueListEntryType, string viewHeader)
{
var control = new ValueListEntryEditControl(new ValueListEntryVM(new ValueListEntryDC()), null);
@@ -853,9 +783,8 @@ namespace BeWo.View.Detail
control.SaveButtonClicked += () =>
{
var vm = control.ValueListEntry;
- var treeitem = AddTreeItem(parent, valueListEntryType, vm.Description, vm.Abbreviation, vm.Notice);
- _History.RecordAction(new MassnahmenHistoryRecordAdd(treeitem, parent));
+ AddTreeItem(parent, valueListEntryType, vm.Description, vm.Abbreviation, vm.Notice);
beWoWindow.Close();
};
@@ -868,90 +797,30 @@ namespace BeWo.View.Detail
beWoWindow.rootGroupBox.Header = viewHeader;
beWoWindow.ShowDialog();
}
-
- private SupportConceptGoalTreeItem AddTreeItem(SupportConceptGoalTreeItem parent, ValueListEntryType valueListEntryType, string description, string abbreviation, string notice)
- {
- if (!valueListEntryType.HasFlag(ValueListEntryType.SupportConceptGoalCategoryType) &&
- !valueListEntryType.HasFlag(ValueListEntryType.SupportConceptGoalType))
- throw new ArgumentOutOfRangeException();
-
- var vm = ViewModel.NewVM;
- vm.Type = valueListEntryType;
- vm.Description = description;
- vm.Abbreviation = abbreviation;
- vm.Notice = notice;
-
- var newItem = new SupportConceptGoalTreeItem
- {
- GoalEntryVM = vm,
- GoalEntryDC = vm.CommitToDataContract(),
- ParentGoal = parent
- };
-
- ViewModel.AddNewVMToList();
-
- if (parent == null) return newItem;
-
- vm.ParentEntry = parent.GoalEntryDC ?? parent.GoalEntryVM.CommitToDataContract();
-
- parent.Items.Add(newItem);
- parent.IsExpanded = true;
-
- return newItem;
- }
+ private void AddTreeItem(SupportConceptGoalTreeItem parent, ValueListEntryType valueListEntryType, string description = null, string abbreviation = null, string notice = null)
+ {
+ var param = _TreeTrimmer.DoAddAction(parent, valueListEntryType, description, abbreviation, notice);
+
+ _History.RecordAdd(param);
+ }
+ private void ImportTreeItem(SupportConceptGoalDC goal)
+ {
+ var param = _TreeTrimmer.DoImportAction(goal);
+
+ _History.RecordImport(param);
+ }
private void DeleteTreeItem(SupportConceptGoalTreeItem selectedItem)
{
- var stack = new Stack();
- var queue = new Queue();
+ var del = _TreeTrimmer.DoDeleteAction(new MassnahmenHistoryNodeParameter(selectedItem));
- DeleteTreeRec(selectedItem, ref stack, ref queue);
-
- // Queue löschen
- foreach (var item in queue)
- {
- ViewModel.VMList.Remove(item.GoalEntryVM);
- }
-
- var parent = selectedItem.ParentGoal as SupportConceptGoalTreeItem;
- if (parent != null)
- parent.Items.Remove(selectedItem);
- else
- GoalTree.Remove(selectedItem);
-
- var list = stack.Select(x => new MassnahmenHistoryParameter2(x, GetParent(x))).ToList();
- var action = new MassnahmenHistoryRecordDelete(list);
-
- _History.RecordAction(action);
+ _History.RecordDelete(del);
}
- private void DeleteTreeRec(SupportConceptGoalTreeItem item, ref Stack stack, ref Queue queue)
+ private void CopyTreeItem(SupportConceptGoalTreeItem parent, SupportConceptGoalTreeItem source, bool force_deep_copy)
{
- foreach (var child in item.Items)
- {
- DeleteTreeRec(child, ref stack, ref queue);
- }
+ var param = _TreeTrimmer.DoCopyAction(parent, source, _CopyType, force_deep_copy, out var current);
- stack.Push(item);
- queue.Enqueue(item);
- }
- private void CopyTreeItem(SupportConceptGoalTreeItem parent, SupportConceptGoalTreeItem source, bool force_deep_copy, ref Stack records)
- {
- if (source == null || parent == null)
- throw new NotImplementedException("#43298467891364987");
-
- var wm = source.GoalEntryVM;
- var childs = source.Items.ToList();
- var node = AddTreeItem(parent, wm.Type, wm.Description, wm.Abbreviation, wm.Notice);
-
- records.Push(new MassnahmenHistoryParameter1(node, parent));
-
- if (_CopyType == MassnahmenTreeCopyType.Subtree || force_deep_copy)
- {
- foreach (var child in childs)
- {
- CopyTreeItem(node, child, force_deep_copy, ref records);
- }
- }
+ _History.RecordCopy(current, param);
}
private void MoveTreeItem(SupportConceptGoalTreeItem child, SupportConceptGoalTreeItem parent)
{
@@ -960,17 +829,9 @@ namespace BeWo.View.Detail
if (ex_parent == parent)
return;
- // Entferne child aus Ex-Parent
- ex_parent.Items.Remove(child);
+ var record = _TreeTrimmer.DoMoveAction(child, ex_parent, parent);
- // Füge child parent hinzu
- parent.Items.Add(child);
-
- // Setze child Parent Entry
- child.GoalEntryVM.ParentEntry = parent.GoalEntryDC;
- child.ParentGoal = parent;
-
- _History.RecordAction(new MassnahmenHistoryRecordMove());
+ _History.RecordMove(record);
}
private SupportConceptGoalTreeItem GetNearestContainer(UIElement element)
@@ -1023,8 +884,7 @@ namespace BeWo.View.Detail
return false;
}
-
- private SupportConceptGoalTreeItem GetParent(SupportConceptGoalTreeItem lostchild)
+ public SupportConceptGoalTreeItem GetParent(SupportConceptGoalTreeItem lostchild)
{
if (lostchild.ParentGoal is SupportConceptGoalTreeItem item)
return item;
@@ -1059,18 +919,13 @@ namespace BeWo.View.Detail
return;
_History.UndoPrevAction();
-
- UpdateHistoryButton();
}
-
private void NextButton_Click(object sender, RoutedEventArgs e)
{
if (!_History.GotNextAction)
return;
_History.RedoNextAction();
-
- UpdateHistoryButton();
}
private void Groupbox_root_KeyDown(object sender, KeyEventArgs e)