internal void CheckRegularExpression(RibbonDefinition obj, string fieldName, string pattern)
        {
            string value = (string)obj.GetType().GetField(fieldName).GetValue(obj);

            if (!pattern.StartsWith("^"))
            {
                pattern = "^" + pattern;
            }

            if (!pattern.EndsWith("$"))
            {
                pattern += "$";
            }

            if (value == null || !new Regex(pattern).Match(value).Success)
            {
                throw new ValidationException(
                          String.Format("{0}{1}: Validation failed! {2} has value '{3}', which doesn't match validation pattern '{4}'.",
                                        obj.GetType().Name,
                                        obj.Id != null ? " (id='" + obj.Id + "')" : String.Empty,
                                        fieldName,
                                        value == null ? String.Empty : value,
                                        pattern
                                        )
                          );
            }
        }
        protected override string GenerateCommandLineCommands()
        {
            List <string> argv = new List <string>();

            argv.Add(RibbonDefinition.GetMetadata("FullPath"));
            argv.Add(Path.Combine(OutputDirectory.GetMetadata("FullPath"), RibbonDefinition.GetMetadata("FileName") + ".bin"));
            argv.Add("/res:" + Path.Combine(OutputDirectory.GetMetadata("FullPath"), RibbonDefinition.GetMetadata("FileName") + ".rc"));

            return(string.Join(" ", argv.Select(x => $"\"{x}\"")));
        }
        private string GetCommandsXML(RibbonDefinition definition)
        {
            RibbonCommandRepository.Current.ClearCommands();
            RibbonCommandRepository.Current.AddCommands(definition);
            string commandsXML = String.Empty;

            foreach (var command in RibbonCommandRepository.Current.GetCommands())
            {
                commandsXML += XmlGenerator.Current.GetCommandUIHandlerXML(command);
            }

            RibbonCommandRepository.Current.ClearCommands();
            return("<root>" + commandsXML + "</root>");
        }
        internal void CheckNotNull(RibbonDefinition obj, string fieldName)
        {
            object value = obj.GetType().GetField(fieldName).GetValue(obj);

            if (value == null)
            {
                throw new ValidationException(
                          String.Format("{0}{1}: Validation failed! {2} is required.",
                                        obj.GetType().Name,
                                        obj.Id != null ? " (id='" + obj.Id + "')" : String.Empty,
                                        fieldName
                                        )
                          );
            }
        }
        internal void CheckIntRange(RibbonDefinition obj, string fieldName, int minimum, int maximum)
        {
            int value = (int)obj.GetType().GetField(fieldName).GetValue(obj);

            if (value < minimum || value > maximum)
            {
                throw new ValidationException(
                          String.Format("{0}{1}: Validation failed! {2} has value {3}, which is outside of allowed range [{4}..{5}].",
                                        obj.GetType().Name,
                                        obj.Id != null ? " (id='" + obj.Id + "')" : String.Empty,
                                        fieldName,
                                        value,
                                        minimum,
                                        maximum
                                        )
                          );
            }
        }
        internal void CheckArrayHasElements(RibbonDefinition obj, string fieldName)
        {
            IEnumerable <RibbonDefinition> value;

            if (obj.GetType().GetMember(fieldName).First().MemberType == MemberTypes.Property)
            {
                value = (IEnumerable <RibbonDefinition>)obj.GetType().GetProperty(fieldName).GetValue(obj, null);
            }
            else
            {
                value = (IEnumerable <RibbonDefinition>)obj.GetType().GetField(fieldName).GetValue(obj);
            }

            if (value == null || value.Count() == 0)
            {
                throw new ValidationException(
                          String.Format("{0}{1}: Validation failed! {2} is required to have at least one element.",
                                        obj.GetType().Name,
                                        obj.Id != null ? " (id='" + obj.Id + "')" : String.Empty,
                                        fieldName
                                        )
                          );
            }
        }
Beispiel #7
0
        public void AddCommands(RibbonDefinition definition)
        {
            IEnumerable <ControlDefinition> controls;

            if (definition is ContextualGroupDefinition)
            {
                controls = (definition as ContextualGroupDefinition).Tabs.SelectMany(t => t.Groups).SelectMany(g => g.Controls).ToArray();
            }
            else if (definition is TabDefinition)
            {
                controls = (definition as TabDefinition).Groups.SelectMany(g => g.Controls).ToArray();
            }
            else if (definition is GroupDefinition)
            {
                controls = (definition as GroupDefinition).Controls.ToArray();
            }
            else if (definition is ControlDefinition)
            {
                controls = new ControlDefinition[] { definition as ControlDefinition }
            }
            ;
            else
            {
                throw new ArgumentException();
            }

            // MRUSplitButtonDefinition: Command="{Id}MenuCommand"
            commands.AddRange(
                controls
                .WithDescendants(c => c is IContainer ? (c as IContainer).Controls : null)
                .OfType <MRUSplitButtonDefinition>()
                .Select <MRUSplitButtonDefinition, FluentRibbonCommand>(c =>
                                                                        new FluentRibbonCommand(
                                                                            c.FullId + "MenuCommand",
                                                                            "handleCommand(properties['CommandValueId']);",
                                                                            "true"
                                                                            )
                                                                        ).ToArray()
                );

            // Buttons of all types, including Button, SplitButton, ToggleButton
            commands.AddRange(
                controls
                .WithDescendants(c => c is IContainer ? (c as IContainer).Controls : null)
                .OfType <ButtonBaseDefinition>()
                .Select <ButtonBaseDefinition, FluentRibbonCommand>(b => new FluentRibbonCommand(b.FullId + "Command", b.CommandJavaScript, b.CommandEnableJavaScript)).ToArray());

            // Initializable controls
            var initializationScript       = "var initialValue = function() { {IVScript} }; var v = initialValue(); if (v != null) { properties['On'] = true; properties['Value'] = v; }";
            var buttonInitializationScript = "var initialValue = function() { {IVScript} }; var v = initialValue(); if (v != null) { properties['On'] = v; properties['Value'] = v; }";

            commands.AddRange(
                controls
                .WithDescendants(c => c is IContainer ? (c as IContainer).Controls : null)
                .Where(c => c is IInitializable)
                .SelectMany(c =>
                            c is ButtonBaseDefinition ?
                            new FluentRibbonCommand[]
            {
                new FluentRibbonCommand(c.FullId + "QueryCommand", buttonInitializationScript.Replace("{IVScript}", (c as IInitializable).InitialValueJavaScript), "true")
            }
                    :
                            new FluentRibbonCommand[]
            {
                new FluentRibbonCommand(c.FullId + "Command", String.Empty, "true"),
                new FluentRibbonCommand(c.FullId + "QueryCommand", initializationScript.Replace("{IVScript}", (c as IInitializable).InitialValueJavaScript), "true")
            }).ToArray());
        }