Ejemplo n.º 1
0
        public virtual IElementSelector CreateOwnSelector(string state)
        {
            if (this.UserSelector != null)
            {
                return(this.UserSelector);
            }

            if (this.stateManager == null)
            {
                return(CreateDefaultSelector(this));
            }

            IElementSelector result;

            if (string.IsNullOrEmpty(state))
            {
                StateDescriptionNode descr = this.stateManager.GetAvailableStates(this.itemThemeRole);
                result = new VisualStateSelector(descr.StateName);
            }
            else
            {
                bool verified = this.stateManager.VerifyState(this.itemThemeRole, state);
                Debug.Assert(verified, string.Format("State '{1}' on item with theme role '{0}' not valid for the specified StateManager: {2}", this.itemThemeRole, state, this.stateManager));
                result = new VisualStateSelector(state);
            }

            return(result);
        }
Ejemplo n.º 2
0
 protected override int GetKey()
 {
     if (!string.IsNullOrEmpty(this.visualState))
     {
         return(VisualStateSelector.GetSelectorKey(this.visualState));
     }
     return(0);
 }
Ejemplo n.º 3
0
        public override bool Equals(IElementSelector elementSelector)
        {
            VisualStateSelector visualStateSelector = elementSelector as VisualStateSelector;

            if (visualStateSelector != null)
            {
                return(visualStateSelector.visualState == this.visualState);
            }
            return(false);
        }
Ejemplo n.º 4
0
        private static IStyleSelector GetClassStyleSelector(String currentToken)
        {
            var colonIndex = currentToken.IndexOf(':');

            if (colonIndex == -1)
            {
                return(new ClassStyleSelector(currentToken));
            }

            var className     = currentToken.Substring(0, colonIndex);
            var classSelector = new ClassStyleSelector(className);


            var stateType = GetStateType(currentToken, colonIndex);

            var visualStateSelector = new VisualStateSelector(classSelector, stateType);

            return(visualStateSelector);
        }
Ejemplo n.º 5
0
        private void RegisterItemStateFromVisualStateSelector(VisualStateSelector selector)
        {
            string[] splittedState = selector.VisualState.Split('.');
            Debug.Assert(splittedState != null && splittedState.Length > 0, "Invalid visual state name!");
            string themeRole = splittedState[0];

            string stateName = this.GetStateFromVisualStateSelector(selector.VisualState);

            //This should happen only for the default state.
            if (string.IsNullOrEmpty(stateName))
            {
                return;
            }

            try
            {
                this.TryAddItemMetadataState(this, themeRole, stateName);
            }
            catch (Exception)
            {
            }
        }
Ejemplo n.º 6
0
        private void GetSelectorParts(IMarkupNode cssNode,
                                      out List <IStyleSelector> currentAndSelectors,
                                      out List <Combinator> combinators)
        {
            currentAndSelectors = new List <IStyleSelector>();
            combinators         = new List <Combinator>();

            var name = cssNode.Name;

            if (name == "*")
            {
                currentAndSelectors.Add(AllStyleSelector.Instance);
                return;
            }

            var tokens = name.Split();

            for (var c = 0; c < tokens.Length; c++)
            {
                var currentToken = tokens[c];
                if (currentToken.Length == 0)
                {
                    continue;
                }

                switch (currentToken[0])
                {
                case '.':
                {
                    var classSelector = GetClassStyleSelector(currentToken);

                    currentAndSelectors.Add(classSelector);
                    break;
                }

                case '>':
                    currentAndSelectors.Add(new CombinatorSelector(Combinator.Child));
                    break;

                case '+':
                    currentAndSelectors.Add(new CombinatorSelector(Combinator.AdjacentSibling));
                    break;

                case '~':
                    currentAndSelectors.Add(new CombinatorSelector(Combinator.AdjacentSibling));
                    break;

                case '|':
                    if (currentToken[1] == '|')
                    {
                        currentAndSelectors.Add(new CombinatorSelector(Combinator.Column));
                    }

                    break;

                case ' ':
                    currentAndSelectors.Add(new CombinatorSelector(Combinator.Descendant));
                    break;

                default:

                    var colonIndex = currentToken.IndexOf(':');

                    if (colonIndex > 0)
                    {
                        var visualName   = currentToken.Substring(0, colonIndex);
                        var typeSelector = GetVisualTypeSelector(visualName);

                        if (currentToken.Length > colonIndex + 1 &&
                            currentToken[colonIndex + 1] == ':')
                        {
                            // span::before

                            var appenderName   = currentToken.Substring(colonIndex + 2);
                            var appendSelector = GetContentAppender(typeSelector, appenderName);
                            currentAndSelectors.Add(appendSelector);

                            break;
                        }

                        // PSEUDO
                        // input:checked
                        var stateType = GetStateType(currentToken, colonIndex);

                        var visualStateSelector = new VisualStateSelector(typeSelector, stateType);


                        currentAndSelectors.Add(visualStateSelector);
                    }
                    else
                    {
                        var visualTypeSelector = GetVisualTypeSelector(currentToken);
                        currentAndSelectors.Add(visualTypeSelector);
                    }

                    break;
                }
            }
        }