public TalesNetwork() { _baseActionNode = new TaleItemNode(this, Properties.Resources.BaseActionNodeName); Nodes.Add(_baseActionNode); _baseLocativeNode = new TaleItemNode(this, Properties.Resources.BaseLocativeNodeName); Nodes.Add(_baseLocativeNode); _basePersonNode = new TaleItemNode(this, Properties.Resources.BasePersonNodeName); Nodes.Add(_basePersonNode); _baseFunctionNode = new TaleItemNode(this, Properties.Resources.BaseFunctionNodeName); Nodes.Add(_baseFunctionNode); _baseTaleNode = new TaleItemNode(this, Properties.Resources.BaseTaleNodeName); Nodes.Add(_baseTaleNode); _baseTemplateNode = new TaleItemNode(this, Properties.Resources.BaseTemplateNodeName); Nodes.Add(_baseTemplateNode); _actionNodes = new TaleItemNodeCollection(this, _baseActionNode); _locativeNodes = new TaleItemNodeCollection(this, _baseLocativeNode); _personNodes = new TaleItemNodeCollection(this, _basePersonNode); _taleNodes = new TaleNodeCollection(this); }
private void UpdateContextNode(NetworkEdgeType edgeType, string value) { NetworkEdge networkEdge = OutgoingEdges.GetEdge(edgeType); if (networkEdge == null) { if (value != null) { TaleItemNode node = new TaleItemNode((TalesNetwork)Network, value); Network.Nodes.Add(node); Network.Edges.Add(this, node, edgeType); NetworkNode baseNode = null; switch (edgeType) { case NetworkEdgeType.Action: baseNode = ((TalesNetwork)Network).BaseAction; break; case NetworkEdgeType.Template: baseNode = ((TalesNetwork)Network).BaseTemplate; break; } Network.Edges.Add(node, baseNode, NetworkEdgeType.IsA); } } else { if (value == null) { Network.Nodes.Remove(networkEdge.EndNode); Network.Edges.Remove(networkEdge); } else { networkEdge.EndNode.Name = value; } } }
internal TaleItemNode(TalesNetwork talesNetwork, string name, TaleItemNode baseNode) : base(talesNetwork, name, baseNode) { }
protected override void LoadFromXElement(XElement xNetwork) { Contract.Requires<ArgumentNullException>(xNetwork != null); XNamespace xNamespace = SerializableObject.XNamespace; XElement xNodesBase = xNetwork.Element(xNamespace + "Nodes"); var xNodes = xNodesBase.Elements(xNamespace + "Node"); foreach (XElement xNode in xNodes) { XAttribute xNodeKindAttribute = xNode.Attribute("nodeKind"); NetworkNode networkNode = null; if (xNodeKindAttribute == null) { //networkNode = Nodes.Add(); throw new SerializationException(); } else { TaleNodeKind nodeKind = (TaleNodeKind)Enum.Parse(typeof(TaleNodeKind), xNodeKindAttribute.Value); switch (nodeKind) { case TaleNodeKind.Tale: networkNode = new TaleNode(this); break; case TaleNodeKind.TaleItem: networkNode = new TaleItemNode(this); break; case TaleNodeKind.Function: networkNode = new FunctionNode(this); break; } } networkNode.LoadFromXml(xNode); // TODO: Необходимо избавиться от этого костыля. if (!Nodes.Where(node => node.Id == networkNode.Id).Any()) { Nodes.Add(networkNode); } } XElement xEdgesBase = xNetwork.Element(xNamespace + "Edges"); var xEdges = xEdgesBase.Elements(xNamespace + "Edge"); foreach (XElement xEdge in xEdges) { NetworkEdge networkEdge = new TaleItemEdge(this); networkEdge.LoadFromXml(xEdge); // TODO: Необходимо избавиться от этого костыля. if (!Edges.Where(edge => edge.Id == networkEdge.Id).Any()) { Edges.Add(networkEdge); } } SetId(); _isDirty = false; _baseActionNode = (TaleItemNode)Nodes[0]; _baseLocativeNode = (TaleItemNode)Nodes[1]; _basePersonNode = (TaleItemNode)Nodes[2]; _baseFunctionNode = Nodes[3]; _baseTaleNode = Nodes[4]; _baseTemplateNode = Nodes[5]; }