public ClassDefinition(SchemeNode parent, string name, bool copyExtensions, ClassDefinition[] extensions, params SlotDefinition[] slots) : base(parent) { if (parent == null) InnerIsSchemeEditable = false; CopyExtensions = copyExtensions; InnerName = name; InnerFullName = Version.ToString("D"); if (extensions != null && extensions.Length > 0) foreach (ClassDefinition ext in extensions) if (!InnerInheritanceList.Contains(ext.Name)) InnerExtend(ext, false, true); InnerInheritanceList[KeyName] = this; // Если в InheritanceList-е будут FullName, то потом сложно производить // диспач для бихейверов. // всущности, фул-нейм нужен, что бы сигнализировать о наличии "динамических" классов всписке // но не понятно, зачем это нужно! // XXX был Add, поменял на [] (Pilya) //KeyName, // this); if (slots != null && slots.Length > 0) foreach (SlotDefinition slot in slots) if (slot != null) InnerAddSlot(slot, true, true); if (CopyExtensions) InnerBehavior = new BehaviorDispatcher(this); else ;// ?? надо думать! }
public ClassDefinition(SchemeNode parent, string name, ClassDefinition[] extensions, params SlotDefinition[] slots) : this(parent, name, true, extensions, slots) { }
/// <summary>”станавливает обработчики событий на родительскую ноду</summary> protected virtual void AttachParent(SchemeNode pnode) { if (pnode == null) return; pnode.AfterParentChanged += ParentChangedEventHandler; pnode.AfterRootChanged += RootChangedEventHandler; }
public SchemeNode(SchemeNode parentNode) { InnerParentNode = parentNode; InnerRootNode = (InnerParentNode != null) ? InnerParentNode.RootNode : null; }
protected virtual void RootChangedEventHandler(object sender, EventArgs args) { // XXX код дублируетс¤ с InnerSetParentNode с отличием в вызове OnParentChanged... SchemeNode sn = InnerRootNode; InnerRootNode = (InnerParentNode != null && InnerRootNode != InnerParentNode.RootNode) ? InnerParentNode.RootNode : null; if (sn != InnerRootNode) // не ма¤чим зазр¤ сменой рута, если небыло фактической смены! OnAfterRootChanged(); }
//............................................................................... protected virtual SchemeNode InnerSetParentNode(SchemeNode node) { lock (this) { if (!CheckReadOnlyScheme()) { DetachParent(); InnerParentNode = node; SchemeNode sn = InnerRootNode; InnerRootNode = (InnerParentNode != null && InnerRootNode != InnerParentNode.RootNode) ? InnerParentNode.RootNode : null; AttachParent(node); OnAfterParentChanged(); if (sn != InnerRootNode) // не ма¤чим зазр¤ сменой рута, если небыло фактической смены! OnAfterRootChanged(); } } return InnerParentNode; }
public MetaInfo() { InnerRootNode = new SchemeNode(); }