Пример #1
0
        private (ImageBindMode Mode, int Layer, EffectValue Effect, ImageDisplayInformation[] Images) AnalyseParameters(PluginExecuteContext context)
        {
            EffectValue    effect           = null;
            var            bind             = ImageBindMode.None;
            int?           layer            = null;
            var            images           = new List <ImageDisplayInformation>();
            ImageValue     currentImage     = null;
            string         currentName      = null;
            TransformValue currentTransform = null;

            foreach (var(key, value) in context.Parameters)
            {
                switch (key)
                {
                case EffectValue effectValue:
                    effect = effectValue;
                    break;

                case ImageValue imageValue:
                    if (currentImage != null)
                    {
                        AddImage(ref currentImage, ref currentName, ref currentTransform, images, context);
                    }
                    currentImage     = imageValue;
                    currentTransform = new TransformValue();
                    break;

                case IStringConverter stringConverter:
                    var name = stringConverter.ConvertToString(context.Language);
                    switch (name)
                    {
                    case "Layer":
                        layer = IntegerValue.TryParse(value);
                        break;

                    case "Name":
                        currentName = StringValue.TryParse(value);
                        break;

                    case "Effect":
                        effect = value is EffectValue effectValue ? effectValue : throw new ArgumentException($"Unable to create show command: effect {value} is not EffectValue");
                        break;

                    case "Transform":
                        currentTransform = (TransformValue)currentTransform.AddWith(value);
                        break;

                    case "Bind":
                        if (value is NullValue)
                        {
                            bind = ImageBindMode.Canvas;
                        }
                        else
                        {
                            switch (StringValue.TryParse(value))
                            {
                            case "Canvas":
                            case "Maximal":
                            case "Max":
                                bind = ImageBindMode.Canvas;
                                break;

                            case "Minimal":
                            case "Min":
                                bind = ImageBindMode.Minimal;
                                break;
                            }
                        }
                        break;

                    case "DefaultTransform":
                        _defaultTransform = value is TransformValue transformValue ? transformValue : throw new ArgumentException($"Unable to set show command default transform: target {value} is not TransformValue");
                        break;

                    case "DefaultLayer":
                        _defaultLayer = IntegerValue.TryParse(value);
                        break;

                    default:
                        TransformPlugin.AnalyzePropertyTo(name, value, currentTransform, context.Language);
                        break;
                    }
                    break;
                }
            }
            if (currentImage != null)
            {
                AddImage(ref currentImage, ref currentName, ref currentTransform, images, context);
            }
            layer = layer ?? _defaultLayer;
            var list = images.ToArray();

            for (var i = -1; ++i < list.Length;)
            {
                list[i].layer  = layer.Value;
                list[i].status = ImageStatus.PrepareToShow;
            }
            return(bind, layer.Value, effect, list);
        }
Пример #2
0
        private void AddImage(ref ImageValue currentImage, ref string currentName, ref TransformValue currentTransform, List <ImageDisplayInformation> images, PluginExecuteContext context)
        {
            if (string.IsNullOrEmpty(currentName))
            {
                throw new MissingMemberException($"Unable to create show command: missing image name for {currentImage.ConvertToString(context.Language)}");
            }
            // ReSharper disable once AccessToModifiedClosure
            var name  = currentName;
            var image = currentImage;

            images.RemoveAll(e => e.Name == name || e.Content.EqualsWith(image, context.Language));
            images.Add(new ImageDisplayInformation(currentName, currentImage, currentTransform == null ? null : (TransformValue)_defaultTransform.AddWith(currentTransform)));
            currentName      = null;
            currentImage     = null;
            currentTransform = null;
        }