Implement copying of elements.
This commit is contained in:
@ -81,5 +81,18 @@ namespace zaaReloaded2.ViewModels
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public override object Clone()
|
||||
{
|
||||
ControlElementViewModel clone = new ControlElementViewModel();
|
||||
clone.Element = Element;
|
||||
clone.Elements = new ObservableCollection<ElementViewModel>(
|
||||
Elements.Select(evm => evm.Clone() as ElementViewModel));
|
||||
foreach (FormatElementViewModel evm in clone.Elements)
|
||||
{
|
||||
evm.Parent = clone;
|
||||
}
|
||||
return clone;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ using System.Collections.ObjectModel;
|
||||
|
||||
namespace zaaReloaded2.ViewModels
|
||||
{
|
||||
public abstract class ElementViewModel : ViewModelBase
|
||||
public abstract class ElementViewModel : ViewModelBase, ICloneable
|
||||
{
|
||||
#region Properties
|
||||
|
||||
@ -69,5 +69,11 @@ namespace zaaReloaded2.ViewModels
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Implementation of ICloneable
|
||||
|
||||
public abstract object Clone();
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -58,5 +58,13 @@ namespace zaaReloaded2.ViewModels
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public override object Clone()
|
||||
{
|
||||
FormatElementViewModel clone = new FormatElementViewModel();
|
||||
clone.Parent = Parent;
|
||||
clone.Element = Element;
|
||||
return clone;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -314,8 +314,7 @@ namespace zaaReloaded2.ViewModels
|
||||
{
|
||||
if (CanDeleteElement())
|
||||
{
|
||||
if (LastSelectedElement is ControlElementViewModel ||
|
||||
((FormatElementViewModel)LastSelectedElement).Parent == null)
|
||||
if (IsTopLevelElement())
|
||||
{
|
||||
// First level of the hierarchy
|
||||
Elements.Remove(LastSelectedElement);
|
||||
@ -335,7 +334,21 @@ namespace zaaReloaded2.ViewModels
|
||||
|
||||
bool CanDeleteElement() { return LastSelectedElement != null && LastSelectedElement.IsSelected; }
|
||||
|
||||
void DoCopyElement() { }
|
||||
void DoCopyElement()
|
||||
{
|
||||
if (CanCopyElement())
|
||||
{
|
||||
if (IsTopLevelElement())
|
||||
{
|
||||
AddElementViewModel(LastSelectedElement.Clone() as ElementViewModel);
|
||||
}
|
||||
else
|
||||
{
|
||||
FormatElementViewModel formatVM = LastSelectedElement as FormatElementViewModel;
|
||||
formatVM.Parent.AddChildElement(formatVM.Clone() as FormatElementViewModel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool CanCopyElement() { return LastSelectedElement != null && LastSelectedElement.IsSelected; }
|
||||
|
||||
@ -355,6 +368,16 @@ namespace zaaReloaded2.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the selected ElementViewModel is at the top
|
||||
/// level of the hierarchy.
|
||||
/// </summary>
|
||||
bool IsTopLevelElement()
|
||||
{
|
||||
return (LastSelectedElement is ControlElementViewModel ||
|
||||
((FormatElementViewModel)LastSelectedElement).Parent == null);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Implementation of ViewModelBase
|
||||
|
Reference in New Issue
Block a user