Example #1
0
        /// <summary>
        /// Reads a option's information from the script file.
        /// </summary>
        /// <param name="p_xelOption">The script file node corresponding to the option to read.</param>
        /// <returns>The option information.</returns>
        protected override Option ParseOption(XElement p_xelOption)
        {
            string strName = p_xelOption.Attribute("name").Value;
            string strDesc = p_xelOption.Element("description").Value.Trim();
            IOptionTypeResolver iptType           = null;
            XElement            xelTypeDescriptor = p_xelOption.Element("typeDescriptor").Elements().First();

            switch (xelTypeDescriptor.Name.LocalName)
            {
            case "type":
                iptType = new StaticOptionTypeResolver((OptionType)Enum.Parse(typeof(OptionType), xelTypeDescriptor.Attribute("name").Value));
                break;

            case "dependencyType":
                OptionType ptpDefaultType = (OptionType)Enum.Parse(typeof(OptionType), xelTypeDescriptor.Element("defaultType").Attribute("name").Value);
                iptType = new ConditionalOptionTypeResolver(ptpDefaultType);
                ConditionalOptionTypeResolver cotConditionalType = (ConditionalOptionTypeResolver)iptType;

                IEnumerable <XElement> xeePatterns = xelTypeDescriptor.XPathSelectElements("patterns/*");
                foreach (XElement xelPattern in xeePatterns)
                {
                    OptionType ptpType      = (OptionType)Enum.Parse(typeof(OptionType), xelPattern.Element("type").Attribute("name").Value);
                    ICondition cpcCondition = LoadCondition(xelPattern.Element("dependencies"));
                    cotConditionalType.AddPattern(ptpType, cpcCondition);
                }
                break;

            default:
                throw new ParserException("Invalid option type descriptor node: " + xelTypeDescriptor.Name + ". At this point the config file has been validated against the schema, so there's something wrong with the parser.");
            }
            XElement xelImage         = p_xelOption.Element("image");
            string   strImageFilePath = null;

            if (xelImage != null)
            {
                strImageFilePath = xelImage.Attribute("path").Value;
            }
            Option optOption = new Option(strName, strDesc, strImageFilePath, iptType);

            IEnumerable <XElement> xeeOptionFiles = p_xelOption.XPathSelectElements("files/*");

            optOption.Files.AddRange(ReadFileInfo(xeeOptionFiles));

            IEnumerable <XElement> xeePluginFlags = p_xelOption.XPathSelectElements("conditionFlags/*");

            optOption.Flags.AddRange(ReadFlagInfo(xeePluginFlags));

            return(optOption);
        }
		public OptionTypeResolverEditorVM(ConditionalTypeEditorVM p_tvmConditionResolverVM, Option p_optOption)
		{
			ConditionalTypeEditorVM = p_tvmConditionResolverVM;
			Option = p_optOption;

			OptionTypes = Enum.GetValues(typeof(OptionType));
			if (Option.OptionTypeResolver is StaticOptionTypeResolver)
			{
				StaticOptionTypeResolver = (StaticOptionTypeResolver)Option.OptionTypeResolver;
				ConditionalOptionTypeResolver = new ConditionalOptionTypeResolver(OptionType.NotUsable);
			}
			if (Option.OptionTypeResolver is ConditionalOptionTypeResolver)
			{
				StaticOptionTypeResolver = new StaticOptionTypeResolver(OptionType.NotUsable);
				ConditionalOptionTypeResolver = (ConditionalOptionTypeResolver)Option.OptionTypeResolver;
			}
			p_tvmConditionResolverVM.TypeResolver = ConditionalOptionTypeResolver;
		}
        public OptionTypeResolverEditorVM(ConditionalTypeEditorVM p_tvmConditionResolverVM, Option p_optOption)
        {
            ConditionalTypeEditorVM = p_tvmConditionResolverVM;
            Option = p_optOption;

            OptionTypes = Enum.GetValues(typeof(OptionType));
            if (Option.OptionTypeResolver is StaticOptionTypeResolver)
            {
                StaticOptionTypeResolver      = (StaticOptionTypeResolver)Option.OptionTypeResolver;
                ConditionalOptionTypeResolver = new ConditionalOptionTypeResolver(OptionType.NotUsable);
            }
            if (Option.OptionTypeResolver is ConditionalOptionTypeResolver)
            {
                StaticOptionTypeResolver      = new StaticOptionTypeResolver(OptionType.NotUsable);
                ConditionalOptionTypeResolver = (ConditionalOptionTypeResolver)Option.OptionTypeResolver;
            }
            p_tvmConditionResolverVM.TypeResolver = ConditionalOptionTypeResolver;
        }
		/// <summary>
		/// Reads a option's information from the script file.
		/// </summary>
		/// <param name="p_xelOption">The script file node corresponding to the option to read.</param>
		/// <returns>The option information.</returns>
		protected override Option ParseOption(XElement p_xelOption)
		{
			string strName = p_xelOption.Attribute("name").Value;
			string strDesc = p_xelOption.Element("description").Value.Trim();
			IOptionTypeResolver iptType = null;
			XElement xelTypeDescriptor = p_xelOption.Element("typeDescriptor").Elements().First();
			switch (xelTypeDescriptor.Name.LocalName)
			{
				case "type":
					iptType = new StaticOptionTypeResolver((OptionType)Enum.Parse(typeof(OptionType), xelTypeDescriptor.Attribute("name").Value));
					break;
				case "dependencyType":
					OptionType ptpDefaultType = (OptionType)Enum.Parse(typeof(OptionType), xelTypeDescriptor.Element("defaultType").Attribute("name").Value);
					iptType = new ConditionalOptionTypeResolver(ptpDefaultType);
					ConditionalOptionTypeResolver cotConditionalType = (ConditionalOptionTypeResolver)iptType;

					IEnumerable<XElement> xeePatterns = xelTypeDescriptor.XPathSelectElements("patterns/*");
					foreach (XElement xelPattern in xeePatterns)
					{
						OptionType ptpType = (OptionType)Enum.Parse(typeof(OptionType), xelPattern.Element("type").Attribute("name").Value);
						ICondition cpcCondition = LoadCondition(xelPattern.Element("dependencies"));
						cotConditionalType.AddPattern(ptpType, cpcCondition);
					}
					break;
				default:
					throw new ParserException("Invalid option type descriptor node: " + xelTypeDescriptor.Name + ". At this point the config file has been validated against the schema, so there's something wrong with the parser.");
			}
			XElement xelImage = p_xelOption.Element("image");
			string strImageFilePath = null;
			if (xelImage != null)
				strImageFilePath = xelImage.Attribute("path").Value;
			Option optOption = new Option(strName, strDesc, strImageFilePath, iptType);

			IEnumerable<XElement> xeeOptionFiles = p_xelOption.XPathSelectElements("files/*");
			optOption.Files.AddRange(ReadFileInfo(xeeOptionFiles));

			IEnumerable<XElement> xeePluginFlags = p_xelOption.XPathSelectElements("conditionFlags/*");
			optOption.Flags.AddRange(ReadFlagInfo(xeePluginFlags));
			
			return optOption;
		}