Пример #1
0
        /// <summary>
        /// Creates value converter context from element settings.
        /// </summary>
        private static ValueConverterContext GetValueConverterContext(ValueConverterContext parentContext, XElement element, string viewName)
        {
            var elementContext = new ValueConverterContext(parentContext);

            var baseDirectoryAttr = element.Attribute("BaseDirectory");
            var unitSizeAttr      = element.Attribute("UnitSize");

            if (baseDirectoryAttr != null)
            {
                elementContext.BaseDirectory = baseDirectoryAttr.Value;
            }
            if (unitSizeAttr != null)
            {
                var unitSizeString = unitSizeAttr.Value;
                var converter      = new Vector3ValueConverter();
                var result         = converter.Convert(unitSizeString);
                if (result.Success)
                {
                    elementContext.UnitSize = (Vector3)result.ConvertedValue;
                }
                else
                {
                    Utils.LogError("[MarkLight] {0}: Error parsing XUML. Unable to parse UnitSize attribute value \"{1}\".", viewName, unitSizeString);
                    elementContext.UnitSize = ViewPresenter.Instance.UnitSize;
                }
            }

            return(elementContext);
        }
Пример #2
0
        /// <summary>
        /// Loads XUML to theme database.
        /// </summary>
        private static void LoadThemeXuml(XElement xumlElement, string xuml, string xumlAssetName)
        {
            var viewPresenter = ViewPresenter.Instance;

            var themeNameAttr = xumlElement.Attribute("Name");

            if (themeNameAttr == null)
            {
                Utils.LogError("[MarkLight] {0}: Error parsing theme XUML. Name attribute missing.", xumlAssetName);
            }

            viewPresenter.ThemeData.RemoveAll(x => String.Equals(x.ThemeName, themeNameAttr.Value, StringComparison.OrdinalIgnoreCase));

            var themeData = new ThemeData();

            viewPresenter.ThemeData.Add(themeData);

            themeData.Xuml        = xuml;
            themeData.XumlElement = xumlElement;
            themeData.ThemeName   = themeNameAttr.Value;

            var baseDirectoryAttr = xumlElement.Attribute("BaseDirectory");

            themeData.BaseDirectorySet = baseDirectoryAttr != null;
            if (themeData.BaseDirectorySet)
            {
                themeData.BaseDirectory = baseDirectoryAttr.Value;
            }

            var unitSizeAttr = xumlElement.Attribute("UnitSize");

            themeData.UnitSizeSet = unitSizeAttr != null;
            if (themeData.UnitSizeSet)
            {
                if (String.IsNullOrEmpty(unitSizeAttr.Value))
                {
                    // use default unit size
                    themeData.UnitSize = ViewPresenter.Instance.UnitSize;
                }
                else
                {
                    var converter = new Vector3ValueConverter();
                    var result    = converter.Convert(unitSizeAttr.Value);
                    if (result.Success)
                    {
                        themeData.UnitSize = (Vector3)result.ConvertedValue;
                    }
                    else
                    {
                        Utils.LogError("[MarkLight] {0}: Error parsing theme XUML. Unable to parse UnitSize attribute value \"{1}\".", xumlAssetName, unitSizeAttr.Value);
                        themeData.UnitSize = ViewPresenter.Instance.UnitSize;
                    }
                }
            }

            // load theme elements
            foreach (var childElement in xumlElement.Elements())
            {
                var themeElement = new ThemeElementData();
                themeElement.ViewName = childElement.Name.LocalName;

                var idAttr = childElement.Attribute("Id");
                if (idAttr != null)
                {
                    themeElement.Id = idAttr.Value;
                }

                var styleAttr = childElement.Attribute("Style");
                if (styleAttr != null)
                {
                    themeElement.Style = styleAttr.Value;
                }

                var basedOnAttr = childElement.Attribute("BasedOn");
                if (basedOnAttr != null)
                {
                    themeElement.BasedOn = basedOnAttr.Value;
                }

                themeElement.XumlElement = childElement;
                themeElement.Xuml        = childElement.ToString();

                themeData.ThemeElementData.Add(themeElement);
            }
        }