public override void GenerateChildren(XmlNode node, XmlNode caller, ICmObject obj, int indent, ref int insPos, ArrayList path, ObjSeqHashMap reuseMap, bool fUsePersistentExpansion) { CheckDisposed(); // If node has children, figure what to do with them... // It's important to initialize m_refs here rather than in FinishInit, because we need it // to be updated when the slice is reused in a regenerate. // Refactor JohnT: better still, make it a virtual attribute, and Refresh will automatically // clear it from the cache. SetRefs(); if (m_refs.Count == 0) { // It could have children but currently can't: we always show this as collapsedEmpty. Expansion = DataTree.TreeItemState.ktisCollapsedEmpty; return; } for (int i = 0; i < m_refs.Count; i++) { GenerateChildNode(i, node, caller, indent, ref insPos, path, reuseMap); } Expansion = DataTree.TreeItemState.ktisExpanded; }
public override void GenerateChildren(XmlNode node, XmlNode caller, ICmObject obj, int indent, ref int insPos, ArrayList path, ObjSeqHashMap reuseMap, bool fUsePersistentExpansion) { CheckDisposed(); foreach (IRnRoledPartic roledPartic in Record.ParticipantsOC) { if (roledPartic.RoleRA != null) { GenerateChildNode(roledPartic, node, caller, indent, ref insPos, path, reuseMap); } } Expansion = Record.ParticipantsOC.Count == 0 ? DataTree.TreeItemState.ktisCollapsedEmpty : DataTree.TreeItemState.ktisExpanded; }
private void GenerateChildNode(IRnRoledPartic roledPartic, XmlNode node, XmlNode caller, int indent, ref int insPos, ArrayList path, ObjSeqHashMap reuseMap) { var sliceElem = new XElement("slice", new XAttribute("label", roledPartic.RoleRA.Name.BestAnalysisAlternative.Text), new XAttribute("field", "Participants"), new XAttribute("editor", "possVectorReference"), new XAttribute("menu", "mnuDataTree-Participants")); foreach (XmlNode childNode in node.ChildNodes) { if (childNode.NodeType != XmlNodeType.Comment) { sliceElem.Add(XElement.Parse(childNode.OuterXml)); } } node.InnerXml = sliceElem.ToString(); CreateIndentedNodes(caller, roledPartic, indent, ref insPos, path, reuseMap, node); node.InnerXml = ""; }
public override void GenerateChildren(XmlNode node, XmlNode caller, ICmObject obj, int indent, ref int insPos, ArrayList path, ObjSeqHashMap reuseMap) { CheckDisposed(); // If node has children, figure what to do with them... XmlNodeList children = node.ChildNodes; // It's important to initialize m_refs here rather than in FinishInit, because we need it // to be updated when the slice is reused in a regenerate. // Refactor JohnT: better still, make it a virtual attribute, and Refresh will automatically // clear it from the cache. if (m_vh != null) { m_refs = m_vh.LexReferences(m_obj.Hvo); } else { // DEPRECATED. string className = m_cache.MetaDataCacheAccessor.GetClassName((uint)m_obj.ClassID); // m_flid = AutoDataTreeMenuHandler.ContextMenuHelper.GetFlid(m_cache.MetaDataCacheAccessor, // className, m_fieldName); string qry = string.Format("SELECT DISTINCT [Src] FROM LexReference_Targets WHERE [Dst]={0}", m_obj.Hvo); m_refs = DbOps.ReadIntsFromCommand(m_cache, qry, null); } if (m_refs.Count == 0) { // It could have children but currently can't: we always show this as collapsedEmpty. Expansion = DataTree.TreeItemState.ktisCollapsedEmpty; return; } for (int i = 0; i < m_refs.Count; i++) { GenerateChildNode(i, node, caller, indent, ref insPos, path, reuseMap); } Expansion = DataTree.TreeItemState.ktisExpanded; }
private void GenerateChildNode(int iChild, XmlNode node, XmlNode caller, int indent, ref int insPos, ArrayList path, ObjSeqHashMap reuseMap) { var lr = m_refs[iChild]; var lrt = lr.Owner as ILexRefType; string sLabel = lrt.ShortName; if (sLabel == null || sLabel == string.Empty) { sLabel = lrt.Abbreviation.BestAnalysisAlternative.Text; } bool fTreeRoot = true; ISilDataAccess sda = m_cache.DomainDataByFlid; int chvoTargets = sda.get_VecSize(lr.Hvo, LexReferenceTags.kflidTargets); // change the label for a Tree relationship. switch ((LexRefTypeTags.MappingTypes)lrt.MappingType) { case LexRefTypeTags.MappingTypes.kmtSenseUnidirectional: case LexRefTypeTags.MappingTypes.kmtEntryUnidirectional: case LexRefTypeTags.MappingTypes.kmtEntryOrSenseUnidirectional: if (chvoTargets > 0) { int hvoFirst = sda.get_VecItem(lr.Hvo, LexReferenceTags.kflidTargets, 0); if (hvoFirst != m_obj.Hvo) { return; } } break; case LexRefTypeTags.MappingTypes.kmtSenseTree: case LexRefTypeTags.MappingTypes.kmtEntryTree: case LexRefTypeTags.MappingTypes.kmtEntryOrSenseTree: case LexRefTypeTags.MappingTypes.kmtSenseAsymmetricPair: // Sense Pair with different Forward/Reverse names case LexRefTypeTags.MappingTypes.kmtEntryAsymmetricPair: // Entry Pair with different Forward/Reverse names case LexRefTypeTags.MappingTypes.kmtEntryOrSenseAsymmetricPair: // Entry or sense Pair with different Forward/Reverse names //int chvo = sda.get_VecSize(lr.Hvo, LexReferenceTags.kflidTargets); if (chvoTargets > 0) { int hvoFirst = sda.get_VecItem(lr.Hvo, LexReferenceTags.kflidTargets, 0); if (hvoFirst != m_obj.Hvo) { sLabel = lrt.ReverseName.BestAnalysisAlternative.Text; if (sLabel == null || sLabel == string.Empty) { sLabel = lrt.ReverseAbbreviation.BestAnalysisAlternative.Text; } fTreeRoot = false; } } break; } if (sLabel == null || sLabel == string.Empty) { sLabel = LexEdStrings.ksStars; } string sXml = "<slice label=\"" + sLabel + "\" field=\"Targets\"" + " editor=\"Custom\" assemblyPath=\"LexEdDll.dll\""; //string sMenu = "mnuDataTree-DeleteFromLexSenseReference"; we used to have distinct strings in the menu string sMenu = "mnuDataTree-DeleteAddLexReference"; // generate Xml for a specific slice matching this reference switch ((LexRefTypeTags.MappingTypes)lrt.MappingType) { case LexRefTypeTags.MappingTypes.kmtSenseCollection: sXml += " class=\"SIL.FieldWorks.XWorks.LexEd.LexReferenceCollectionSlice\""; break; case LexRefTypeTags.MappingTypes.kmtSenseUnidirectional: sXml += " class=\"SIL.FieldWorks.XWorks.LexEd.LexReferenceUnidirectionalSlice\""; break; case LexRefTypeTags.MappingTypes.kmtSensePair: case LexRefTypeTags.MappingTypes.kmtSenseAsymmetricPair: // Sense Pair with different Forward/Reverse names case LexRefTypeTags.MappingTypes.kmtEntryPair: case LexRefTypeTags.MappingTypes.kmtEntryAsymmetricPair: // Entry Pair with different Forward/Reverse names case LexRefTypeTags.MappingTypes.kmtEntryOrSensePair: case LexRefTypeTags.MappingTypes.kmtEntryOrSenseAsymmetricPair: // Entry or sense Pair with different forward/Reverse names sXml += " class=\"SIL.FieldWorks.XWorks.LexEd.LexReferencePairSlice\""; sMenu = "mnuDataTree-DeleteReplaceLexReference"; break; case LexRefTypeTags.MappingTypes.kmtSenseTree: if (fTreeRoot) { sXml += " class=\"SIL.FieldWorks.XWorks.LexEd.LexReferenceTreeBranchesSlice\""; sMenu = "mnuDataTree-DeleteAddLexReference"; } else { sXml += " class=\"SIL.FieldWorks.XWorks.LexEd.LexReferenceTreeRootSlice\""; sMenu = "mnuDataTree-DeleteReplaceLexReference"; } break; case LexRefTypeTags.MappingTypes.kmtSenseSequence: case LexRefTypeTags.MappingTypes.kmtEntrySequence: case LexRefTypeTags.MappingTypes.kmtEntryOrSenseSequence: sXml += " class=\"SIL.FieldWorks.XWorks.LexEd.LexReferenceSequenceSlice\""; break; case LexRefTypeTags.MappingTypes.kmtEntryCollection: sXml += " class=\"SIL.FieldWorks.XWorks.LexEd.LexReferenceCollectionSlice\""; //sMenu = "mnuDataTree-DeleteFromLexEntryReference"; we used to have distinct strings in the menu sMenu = "mnuDataTree-DeleteAddLexReference"; break; case LexRefTypeTags.MappingTypes.kmtEntryUnidirectional: sXml += " class=\"SIL.FieldWorks.XWorks.LexEd.LexReferenceUnidirectionalSlice\""; //sMenu = "mnuDataTree-DeleteFromLexEntryReference"; we used to have distinct strings in the menu sMenu = "mnuDataTree-DeleteAddLexReference"; break; case LexRefTypeTags.MappingTypes.kmtEntryTree: //sMenu = "mnuDataTree-DeleteFromLexEntryReference"; we used to have distinct strings in the menu sMenu = "mnuDataTree-DeleteAddLexReference"; if (fTreeRoot) { sXml += " class=\"SIL.FieldWorks.XWorks.LexEd.LexReferenceTreeBranchesSlice\""; sMenu = "mnuDataTree-DeleteAddLexReference"; } else { sXml += " class=\"SIL.FieldWorks.XWorks.LexEd.LexReferenceTreeRootSlice\""; sMenu = "mnuDataTree-DeleteReplaceLexReference"; } break; case LexRefTypeTags.MappingTypes.kmtEntryOrSenseCollection: sXml += " class=\"SIL.FieldWorks.XWorks.LexEd.LexReferenceCollectionSlice\""; if (m_obj is ILexEntry) { //sMenu = "mnuDataTree-DeleteFromLexEntryReference"; we used to have distinct strings in the menu sMenu = "mnuDataTree-DeleteAddLexReference"; } break; case LexRefTypeTags.MappingTypes.kmtEntryOrSenseUnidirectional: sXml += " class=\"SIL.FieldWorks.XWorks.LexEd.LexReferenceUnidirectionalSlice\""; if (m_obj is ILexEntry) { //sMenu = "mnuDataTree-DeleteFromLexEntryReference"; we used to have distinct strings in the menu sMenu = "mnuDataTree-DeleteAddLexReference"; } break; case LexRefTypeTags.MappingTypes.kmtEntryOrSenseTree: if (m_obj is ILexEntry) { //sMenu = "mnuDataTree-DeleteFromLexEntryReference"; we used to have distinct strings in the menu sMenu = "mnuDataTree-DeleteAddLexReference"; } if (fTreeRoot) { sXml += " class=\"SIL.FieldWorks.XWorks.LexEd.LexReferenceTreeBranchesSlice\""; sMenu = "mnuDataTree-DeleteAddLexReference"; } else { sXml += " class=\"SIL.FieldWorks.XWorks.LexEd.LexReferenceTreeRootSlice\""; } break; } sXml += " mappingType=\"" + lrt.MappingType + "\" hvoDisplayParent=\"" + m_obj.Hvo + "\"" + " menu=\"" + sMenu + "\"><deParams displayProperty=\"HeadWord\"/></slice>"; node.InnerXml = sXml; int firstNewSliceIndex = insPos; CreateIndentedNodes(caller, lr, indent, ref insPos, path, reuseMap, node); for (int islice = firstNewSliceIndex; islice < insPos; islice++) { Slice child = ContainingDataTree.Slices[islice] as Slice; if (child is ILexReferenceSlice) { (child as ILexReferenceSlice).ParentSlice = this; } } node.InnerXml = ""; }