예제 #1
0
        private void AddUniqueRelations(StyleBuilderRegistration registration, RadStyleSheetRelationList relations, string themeName)
        {
            bool added = false;

            foreach (RadStylesheetRelation relationToCheck in relations)
            {
                bool contains = false;

                foreach (RadStylesheetRelation currentRelation in registration.StylesheetRelations)
                {
                    if (currentRelation.Equals(relationToCheck))
                    {
                        contains = true;
                        break;
                    }
                }

                if (!contains)
                {
                    registration.StylesheetRelations.Add(relationToCheck);
                    added = true;
                }
            }

            if (added)
            {
                //update ThemeResolutionService registrations
                ThemeResolutionService.RegisterStyleBuilder(registration, themeName);
            }
        }
예제 #2
0
 /// <summary>
 /// Adds a new <see cref="StyleBuilderRegistration"/>to the collection of registrations
 /// of the control metadata.
 /// </summary>
 /// <param name="registration">The <see cref="StyleBuilderRegistration"/>to add.</param>
 public virtual void AddStyleBuilderRegistration(StyleBuilderRegistration registration)
 {
     if (!this.CheckContainsRegistration(registration))
     {
         this.StyleBuilderRegistrations.Add(registration);
     }
 }
예제 #3
0
 /// <summary>
 /// Removes the <see cref="StyleBuilderRegistration"/>from the collection of registrations
 /// of the control metadata.
 /// </summary>
 /// <param name="registration">The <see cref="StyleBuilderRegistration"/>to remove.</param>
 public virtual void RemoveStyleBuilderRegistration(StyleBuilderRegistration registration)
 {
     if (this.CheckContainsRegistration(registration))
     {
         this.StyleBuilderRegistrations.Remove(registration);
     }
 }
예제 #4
0
        /// <summary>
        /// This method creates and returns an instance of the StyleBuilderRegistration
        /// class. This method should be called before a control is edited in the Visual Style Builder
        /// and later accessed when styles for the control are modified. This can happen when a repository item
        /// is associated with element for particular state or when an element is edited directly from an
        /// editor.
        /// </summary>
        protected virtual void CreateDefaultRegistrations()
        {
            Debug.Assert(this.PreviewTreeHandler != null, "No preview control for metadata " + this.DisplayText);
            StyleBuilderRegistration defaultRegistration = new StyleBuilderRegistration(
                BuilderRegistrationType.ElementTypeControlType,
                typeof(RootRadElement).FullName,
                this.PreviewTreeHandler.ThemeClassName,
                string.Empty,
                string.Empty,
                new DefaultStyleBuilder());

            this.AddStyleBuilderRegistration(defaultRegistration);
        }
예제 #5
0
        private bool CheckContainsRegistration(StyleBuilderRegistration registration)
        {
            foreach (StyleBuilderRegistration currentRegistration in this.StyleBuilderRegistrations)
            {
                foreach (RadStylesheetRelation relationToCheck in currentRegistration.StylesheetRelations)
                {
                    foreach (RadStylesheetRelation sourceRelation in registration.StylesheetRelations)
                    {
                        if (relationToCheck.Equals(sourceRelation))
                        {
                            return(true);
                        }
                    }
                }
            }

            return(false);
        }
예제 #6
0
        public void RemoveRelationForItem(VsbItemMetadata metadata, BuilderRegistrationType registrationType)
        {
            StyleBuilderRegistration registration = this.GetStyleBuilderRegistration(metadata);

            if (registration == null)
            {
                throw new InvalidOperationException("Could not add relation for Item " + metadata.ItemThemeRole + " because no style registration is available.");
            }

            foreach (RadStylesheetRelation relation in registration.StylesheetRelations)
            {
                if (relation.RegistrationType == registrationType &&
                    metadata.ElementThemeType.FullName == relation.ElementType)
                {
                    registration.StylesheetRelations.Remove(relation);
                    break;
                }
            }
        }
예제 #7
0
        public void AddRelationForItem(VsbItemMetadata metadata, BuilderRegistrationType registrationType)
        {
            StyleBuilderRegistration registration = this.GetStyleBuilderRegistration(metadata);

            if (registration == null)
            {
                throw new InvalidOperationException("Could not add relation for Item " + metadata.ItemThemeRole + " because no style registration is available.");
            }

            string controlType = string.Empty;

            if (registrationType == BuilderRegistrationType.ElementTypeControlType ||
                registrationType == BuilderRegistrationType.ElementNameControlType)
            {
                controlType = this.PreviewTreeHandler.ThemeClassName;
            }

            registration.AddStylesheetRelation(registrationType, metadata.ElementThemeType.FullName, controlType, string.Empty, string.Empty);
        }
예제 #8
0
        public RadStylesheetRelation FindRelation(VsbItemMetadata metadata, BuilderRegistrationType registrationType)
        {
            StyleBuilderRegistration registration = this.GetStyleBuilderRegistration(metadata);

            if (registration == null)
            {
                return(null);
            }

            foreach (RadStylesheetRelation relation in registration.StylesheetRelations)
            {
                if (relation.RegistrationType == registrationType &&
                    metadata.ElementThemeType.FullName == relation.ElementType)
                {
                    return(relation);
                }
            }

            return(null);
        }
예제 #9
0
        /// <summary>
        /// Gets the current <see cref="StyleBuilderRegistration"/> and tries
        /// to re-merge the states which have defined styles within their
        /// corresponding state managers.
        /// </summary>
        public void ReMergeItemStatesForCurrentRegistration()
        {
            StyleBuilderRegistration currentRegistration = this.GetStyleBuilderRegistration(this);

            this.MergeItemStates((currentRegistration.Builder as DefaultStyleBuilder).Style);
        }
예제 #10
0
 public virtual string GetUniqueThemeNameIdentifier(StyleBuilderRegistration registration)
 {
     return(registration.StylesheetRelations[0].ControlType);
 }