Пример #1
0
        /// <param name="glyph">Глиф.</param>
        public GlyphSnapshot(AbstractGlyph glyph)
        {
            // Получаем идентификатор глифа.
            GlyphId = glyph.Id;

            // Получаем тип глифа.
            GlyphType = glyph.GetType().FullName;

            // Проходим по активным свойствам глифа и сохраняем их значения...
            foreach (KeyValuePair <string, string> kvp in glyph.SerializeProperties())
            {
                AddProperty(kvp.Key, kvp.Value);
            }
        }
Пример #2
0
        /// <summary>
        /// Задаёт свойства глифу.
        /// </summary>
        /// <param name="glyph">Свойства, которые есть в словаре, но которых не оказалось в глифе
        /// (например, по причине того, что в этой версии программы они были удалены).</param>
        /// <param name="oldValues">Использовать ли старые значения.</param>
        public IEnumerable <KeyValuePair <string, KeyValuePair <string, string> > > Apply(AbstractGlyph glyph, bool oldValues)
        {
            Type   type     = glyph.GetType();
            string typeName = type.FullName;

            if (typeName != GlyphType)
            {
                throw new IncompatibleGlyphType(GlyphType, typeName);
            }

            // Не смотря на то, что у свойства Id сеттер приватный,
            // задать новое значение ему нам нужно.
            type.GetProperty("Id").SetValue(glyph, GlyphId, null);

            // Задаём свойства.
            foreach (KeyValuePair <string, KeyValuePair <string, string> > prop in _props)
            {
                PropertyInfo property = type.GetProperty(prop.Key);

                if (property == null)
                {
                    yield return(prop);
                }
                else
                {
                    object[] attribs = property.GetCustomAttributes(typeof(ActivePropertyAttribute), true);

                    if (attribs.Length == 0)
                    {
                        yield return(prop);
                    }
                    else
                    {
                        property.SetValue(glyph, prop.Value.Value, null);
                    }
                }
            }
        }
Пример #3
0
 /// <summary>
 /// Задаёт старые свойства глифу.
 /// </summary>
 /// <param name="glyph">Свойства, которые есть в словаре, но которых не оказалось в глифе
 /// (например, по причине того, что в этой версии программы они были удалены).</param>
 public IEnumerable <KeyValuePair <string, KeyValuePair <string, string> > > ApplyOld(AbstractGlyph glyph)
 {
     return(Apply(glyph, true));
 }