116 lines
3.7 KiB
C#
Executable File
116 lines
3.7 KiB
C#
Executable File
using System;
|
|
/* ControlElementBase.cs
|
|
* part of zaaReloaded2
|
|
*
|
|
* Copyright 2015-2017 Daniel Kraus
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Runtime.Serialization;
|
|
|
|
namespace zaaReloaded2.Controller.Elements
|
|
{
|
|
/// <summary>
|
|
/// Base class for control elements that control e.g. the working
|
|
/// set of time points in a Formatter object.
|
|
/// </summary>
|
|
[Serializable]
|
|
public abstract class ControlElementBase : ElementBase, ISerializable
|
|
{
|
|
#region Properties
|
|
|
|
/// <summary>
|
|
/// Gets a list of child elements, all of which must be derived
|
|
/// from FormatElementBase.
|
|
/// </summary>
|
|
public IList<FormatElementBase> Children { get; internal set; }
|
|
|
|
/// <summary>
|
|
/// Informs whether this control element can have child elements.
|
|
/// </summary>
|
|
public virtual bool CanHaveChildren { get { return true; } }
|
|
|
|
#endregion
|
|
|
|
#region Constructors
|
|
|
|
public ControlElementBase()
|
|
: this(new List<FormatElementBase>())
|
|
{ }
|
|
|
|
public ControlElementBase(IList<FormatElementBase> children)
|
|
{
|
|
Children = children;
|
|
}
|
|
|
|
public ControlElementBase(FormatElementBase children)
|
|
: this(new List<FormatElementBase>() { children })
|
|
{ }
|
|
|
|
#endregion
|
|
|
|
#region Serialization
|
|
|
|
/// <summary>
|
|
/// Deserialization constructor.
|
|
/// </summary>
|
|
protected ControlElementBase(SerializationInfo info, StreamingContext context)
|
|
{
|
|
int version = info.GetInt32("Version");
|
|
int childrenCount = info.GetInt32("ChildrenCount");
|
|
Children = new List<FormatElementBase>();
|
|
for (int i = 0; i < childrenCount; i++)
|
|
{
|
|
Type typeOfChild = info.GetValue(SerializedChildName(i, "Type"), typeof(Type)) as Type;
|
|
Children.Add(info.GetValue(SerializedChildName(i, "Object"), typeOfChild) as FormatElementBase);
|
|
}
|
|
}
|
|
|
|
public void GetObjectData(SerializationInfo info, StreamingContext context)
|
|
{
|
|
info.AddValue("Version", Properties.Settings.Default.SerializationVersion);
|
|
info.AddValue("ChildrenCount", Children.Count);
|
|
int i = 0;
|
|
foreach (FormatElementBase child in Children)
|
|
{
|
|
info.AddValue(SerializedChildName(i, "Type"), child.GetType());
|
|
info.AddValue(SerializedChildName(i, "Object"), child);
|
|
i++;
|
|
}
|
|
}
|
|
|
|
private string SerializedChildName(int index, string info)
|
|
{
|
|
return String.Format("Child{0}{1}", index, info);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Protected methods
|
|
|
|
/// <summary>
|
|
/// Creates a clone of the Children list (for use in cloning
|
|
/// derived classes).
|
|
/// </summary>
|
|
/// <returns>Clone of the Children list.</returns>
|
|
protected IList<FormatElementBase> CloneChildren()
|
|
{
|
|
return Children.Select(child => child.Clone() as FormatElementBase).ToList();
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|