Esempio n. 1
0
        /// <summary>Renders the rule.</summary>
        /// <param name="output">The output.</param>
        /// <param name="rule">The rule.</param>
        /// <param name="index">The index.</param>
        private void RenderRule([NotNull] TextBlockWriter output, [NotNull] XElement rule, int index)
        {
            Debug.ArgumentNotNull(output, "output");
            Debug.ArgumentNotNull(rule, "rule");

            Guid id;
            var  uid = rule.GetAttributeValue("uid");

            if (!Guid.TryParse(uid, out id))
            {
                id = Guid.Empty;
            }

            var isClosed = this.IsEditable && this.AllowMultiple && this.CurrentRuleId != Guid.Empty && this.CurrentRuleId != id;
            var ruleId   = "rule_" + id.ToString("B").ToUpperInvariant();
            var title    = this.GetRuleTitle(rule, index);
            var style    = isClosed ? Visibility.Collapsed : Visibility.Visible;

            this.RenderRuleTitle(output, uid, title, ruleId, isClosed);

            output.WriteStartBlock(padding: new Thickness(16, 0, 0, 0), visibility: style);

            var inner = new TextBlockWriter(new TextBlock());

            this.RenderConditions(inner, rule);
            if (!this.SkipActions)
            {
                this.RenderActions(inner, rule);
            }

            if (!inner.IsEmpty)
            {
                output.Write(inner);
            }
            else
            {
                output.WriteStartBlock(padding: new Thickness(0, 4, 0, 2));
                output.Write("This rule has no conditions.", Brushes.DarkGray);
                output.WriteEndBlock();
            }

            output.WriteEndBlock();

            if (this.AllowMultiple)
            {
                output.WriteLine("--------------------------------------------------------");
            }
        }
Esempio n. 2
0
        /// <summary>Renders the no rules.</summary>
        /// <param name="output">The output.</param>
        private void RenderNoRules([NotNull] TextBlockWriter output)
        {
            Debug.ArgumentNotNull(output, "output");

            output.WriteStartBlock(padding: new Thickness(16, 0, 0, 0));
            output.Write("There are no rules defined.", Brushes.DarkGray);
            output.WriteEndBlock();
        }
Esempio n. 3
0
        /// <summary>Renders the add new rule.</summary>
        /// <param name="output">The output.</param>
        private void RenderAddNewRule([NotNull] TextBlockWriter output)
        {
            Debug.ArgumentNotNull(output, "output");

            if (!this.IsEditable || !this.AllowMultiple)
            {
                return;
            }

            output.WriteStartBlock(padding: new Thickness(16, 0, 0, 0));
            output.WriteHyperlink("Add a new rule", AddNewRule);
            output.WriteEndBlock();
        }
Esempio n. 4
0
        /// <summary>Renders the rule title.</summary>
        /// <param name="output">The output.</param>
        /// <param name="uid">The uid.</param>
        /// <param name="title">The title.</param>
        /// <param name="ruleId">The rule id.</param>
        /// <param name="isClosed">if set to <c>true</c> [is closed].</param>
        private void RenderRuleTitle([NotNull] TextBlockWriter output, [NotNull] string uid, [NotNull] string title, [NotNull] string ruleId, bool isClosed)
        {
            Debug.ArgumentNotNull(output, "output");
            Debug.ArgumentNotNull(uid, "uid");
            Debug.ArgumentNotNull(title, "title");
            Debug.ArgumentNotNull(ruleId, "ruleId");

            if (!this.IsEditable || !this.AllowMultiple)
            {
                output.WriteStartBlock();
                output.Write(title);
                output.WriteEndBlock();

                return;
            }

            // var activeStyle = isClosed ? string.Empty : " scRuleActive";
            output.WriteStartBlock();

            output.WriteHyperlink(title, ToggleRule);

            var stackPanel = new StackPanel
            {
                Orientation = Orientation.Horizontal
            };

            stackPanel.Children.Add(new Button {
                Content = "Edit"
            });
            stackPanel.Children.Add(new Button {
                Content = "Delete"
            });

            output.Write(stackPanel);

            output.WriteEndBlock();
        }
Esempio n. 5
0
        /// <summary>Renders the binary operator.</summary>
        /// <param name="output">The output.</param>
        /// <param name="operatorElement">The operator element.</param>
        private void RenderBinaryOperator([NotNull] TextBlockWriter output, [NotNull] XElement operatorElement)
        {
            Debug.ArgumentNotNull(output, "output");
            Debug.ArgumentNotNull(operatorElement, "operatorElement");

            var op = operatorElement.Name.LocalName;

            // var uid = operatorElement.GetAttributeValue("uid");
            // var click = StringUtil.EscapeQuote("ToggleOperator(\"" + uid + "\")");

            var right = operatorElement.Element(1);

            if (right == null)
            {
                return;
            }

            // var leftLeaf = GetLeftLeaf(right);
            // var conditionUid = leftLeaf.GetAttributeValue("uid");

            output.WriteEndBlock();
            output.WriteStartBlock();

            if (op == "and")
            {
                output.Write("    ");
            }

            if (this.IsEditable)
            {
                output.WriteHyperlink(op, this.ToggleOperator);
            }
            else
            {
                output.Write(op);
            }

            output.Write(" ");
        }
Esempio n. 6
0
        /// <summary>Renders the conditions.</summary>
        /// <param name="output">The output.</param>
        /// <param name="rule">The rule.</param>
        private void RenderConditions([NotNull] TextBlockWriter output, [NotNull] XElement rule)
        {
            Debug.ArgumentNotNull(output, "output");
            Debug.ArgumentNotNull(rule, "rule");

            var conditions = rule.Element("conditions");

            if (conditions == null)
            {
                return;
            }

            var element = conditions.Element(0);

            if (element == null)
            {
                return;
            }

            var leftLeaf = GetLeftLeaf(element);

            var uid = leftLeaf.GetAttributeValue("uid");

            if (string.IsNullOrEmpty(uid))
            {
                return;
            }

            output.WriteStartBlock();

            if (this.IsEditable)
            {
                // RenderConditionButtons(output, uid);
            }

            this.RenderConditionsRecursive(output, element);

            output.WriteEndBlock();
        }