Generate parts for each value of an object
Currently this has only been implemented for the phonological features in a phoneme bulk edit. That is, it generates a part based on a single layout for each item in LangProject.PhFeatureSystemOA.FeaturesOC.
Inheritance: PartGenerator
コード例 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="root"></param>
        /// <param name="cache"></param>
        /// <param name="keyAttrNames"></param>
        /// <param name="vc">for parts/layouts</param>
        /// <param name="rootClassId">class of the root object used to compute parts/layouts</param>
        /// <returns></returns>
        static private List <XmlNode> GetGeneratedChildren(XmlNode root, FdoCache cache, string[] keyAttrNames,
                                                           XmlVc vc, int rootClassId)
        {
            List <XmlNode> result = new List <XmlNode>();
            string         generateModeForColumns = XmlUtils.GetOptionalAttributeValue(root, "generate");
            bool           m_fGenerateChildPartsForParentLayouts = (generateModeForColumns == "childPartsForParentLayouts");

            // childPartsForParentLayouts
            foreach (XmlNode child in root.ChildNodes)
            {
                if (child is XmlComment)
                {
                    continue;
                }
                if (m_fGenerateChildPartsForParentLayouts)
                {
                    ChildPartGenerator cpg = new ChildPartGenerator(cache, child, vc, rootClassId);
                    cpg.GenerateChildPartsIfNeeded();
                }
                if (child.Name != "generate")
                {
                    result.Add(child);
                    continue;
                }

                PartGenerator generator;
                if (generateModeForColumns == "objectValuePartsForParentLayouts")
                {
                    generator = new ObjectValuePartGenerator(cache, child, vc, rootClassId);
                }
                else
                {
                    generator = new PartGenerator(cache, child, vc, rootClassId);
                }
                foreach (XmlNode genNode in generator.Generate())
                {
                    bool match = false;
                    if (keyAttrNames != null)
                    {
                        foreach (XmlNode matchNode in root.ChildNodes)
                        {
                            if (MatchNodes(matchNode, genNode, keyAttrNames))
                            {
                                match = true;
                                break;
                            }
                        }
                    }
                    if (!match)                     // not already present, or not checking; add it.
                    {
                        result.Add(genNode);
                    }
                }
            }
            return(result);
        }
コード例 #2
0
ファイル: PartGenerator.cs プロジェクト: sillsdev/FieldWorks
		/// <summary>
		///
		/// </summary>
		/// <param name="root"></param>
		/// <param name="cache"></param>
		/// <param name="keyAttrNames"></param>
		/// <param name="vc">for parts/layouts</param>
		/// <param name="rootClassId">class of the root object used to compute parts/layouts</param>
		/// <returns></returns>
		static private List<XmlNode> GetGeneratedChildren(XmlNode root, FdoCache cache, string[] keyAttrNames,
			XmlVc vc, int rootClassId)
		{
			List<XmlNode> result = new List<XmlNode>();
			string generateModeForColumns = XmlUtils.GetOptionalAttributeValue(root, "generate");
			bool m_fGenerateChildPartsForParentLayouts = (generateModeForColumns == "childPartsForParentLayouts");

			// childPartsForParentLayouts
			foreach(XmlNode child in root.ChildNodes)
			{
				if (child is XmlComment)
					continue;
				if (m_fGenerateChildPartsForParentLayouts)
				{
					ChildPartGenerator cpg = new ChildPartGenerator(cache, child, vc, rootClassId);
					cpg.GenerateChildPartsIfNeeded();
				}
				if (child.Name != "generate")
				{
					result.Add(child);
					continue;
				}

				PartGenerator generator;
				if (generateModeForColumns == "objectValuePartsForParentLayouts")
					generator = new ObjectValuePartGenerator(cache, child, vc, rootClassId);
				else
					generator = new PartGenerator(cache, child, vc, rootClassId);
				foreach (XmlNode genNode in generator.Generate())
				{
					bool match = false;
					if (keyAttrNames != null)
					{
						foreach (XmlNode matchNode in root.ChildNodes)
						{
							if (MatchNodes(matchNode, genNode, keyAttrNames))
							{
								match = true;
								break;
							}
						}
					}
					if (!match) // not already present, or not checking; add it.
						result.Add(genNode);
				}
			}
			return result;
		}