Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
VirtualObservableNode.cs
Go to the documentation of this file.
1 // Copyright (c) 2014 Silicon Studio Corp. (http://siliconstudio.co.jp)
2 // This file is distributed under GPL v3. See LICENSE.md for details.
3 using System;
4 using System.Collections.Generic;
5 
6 namespace SiliconStudio.Presentation.Quantum
7 {
9  {
10  private readonly Dictionary<string, object> associatedData = new Dictionary<string,object>();
11  private readonly int? order;
12 
13  protected VirtualObservableNode(ObservableViewModel ownerViewModel, string name, SingleObservableNode parentNode, int? order, NodeCommandWrapperBase valueChangedCommand)
14  : base(ownerViewModel, name, parentNode, null)
15  {
16  this.order = order;
17  Name = name;
18  ValueChangedCommand = valueChangedCommand;
19  }
20 
21  internal static VirtualObservableNode Create(ObservableViewModel ownerViewModel, string name, IObservableNode parentNode, int? order, Type contentType, object initialValue, NodeCommandWrapperBase valueChangedCommand)
22  {
23  var node = (VirtualObservableNode)Activator.CreateInstance(typeof(VirtualObservableNode<>).MakeGenericType(contentType), ownerViewModel, name, parentNode, order, initialValue, valueChangedCommand);
24  return node;
25  }
26 
27  public override IDictionary<string, object> AssociatedData { get { return associatedData; } }
28 
29  public override int? Order { get { return order; } }
30 
31  public override bool HasList { get { return false; } }
32 
33  public override bool HasDictionary { get { return false; } }
34 
35  public override bool IsPrimitive { get { return true; } }
36 
37  /// <summary>
38  /// Gets the command to execute when the value of this node is changed.
39  /// </summary>
40  public NodeCommandWrapperBase ValueChangedCommand { get; private set; }
41 
42  internal void AddAssociatedData(string key, object data)
43  {
44  associatedData.Add(key, data);
45  }
46  }
47 
49  {
50  private T value;
51 
52  public VirtualObservableNode(ObservableViewModel ownerViewModel, string name, SingleObservableNode parentNode, int? order, object initialValue, NodeCommandWrapperBase valueChangedCommand)
53  : base(ownerViewModel, name, parentNode, order, valueChangedCommand)
54  {
55  value = (T)initialValue;
56  }
57 
58  /// <summary>
59  /// Gets or sets the value of this node through a correctly typed property, which is more adapted to binding.
60  /// </summary>
61  public T TypedValue
62  {
63  get { return value; }
64  set
65  {
66  bool hasChanged = SetValue(ref this.value, value);
67  if (hasChanged && ValueChangedCommand != null)
68  {
69  ValueChangedCommand.Execute(value);
70  }
71  }
72  }
73 
74  /// <inheritdoc/>
75  public override Type Type { get { return typeof(T); } }
76 
77  /// <inheritdoc/>
78  public override sealed object Value { get { return TypedValue; } set { TypedValue = (T)value; } }
79  }
80 }
VirtualObservableNode(ObservableViewModel ownerViewModel, string name, SingleObservableNode parentNode, int?order, NodeCommandWrapperBase valueChangedCommand)
A base class to wrap one or multiple INodeCommand instances into a CancellableCommand.
VirtualObservableNode(ObservableViewModel ownerViewModel, string name, SingleObservableNode parentNode, int?order, object initialValue, NodeCommandWrapperBase valueChangedCommand)