Пример #1
0
        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;
        }
Пример #2
0
        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;
        }
Пример #3
0
        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 = "";
        }
Пример #4
0
        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;
        }
Пример #5
0
        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 = "";
        }