コード例 #1
0
        private void AddElementToListView(Element element)
        {
            ListViewItem item = new ListViewItem();

            item.Text = element.Row.RowLabel.Name;
            item.SubItems.Add(element.StartTime.ToString());
            item.SubItems.Add(comboBoxFind.SelectedIndex == 0
                                ? _layerManager.GetLayer(element.EffectNode).LayerName
                                : element.EffectNode.Effect.EffectName);
            item.Tag = element;
            listViewEffectStartTime.Items.Add(item);
        }
コード例 #2
0
        private void timelineControl_ContextSelected(object sender, ContextSelectedEventArgs e)
        {
            _contextMenuStrip.Items.Clear();

            Element element          = e.ElementsUnderCursor.FirstOrDefault();
            TimedSequenceElement tse = element as TimedSequenceElement;

            #region Add Effect

            ToolStripMenuItem contextMenuItemAddEffect = new ToolStripMenuItem("Add Effect(s)")
            {
                Image = Resources.effects
            };
            IEnumerable <IEffectModuleDescriptor> effectDesriptors =
                ApplicationServices.GetModuleDescriptors <IEffectModuleInstance>()
                .Cast <IEffectModuleDescriptor>()
                .OrderBy(x => x.EffectGroup)
                .ThenBy(n => n.EffectName);
            EffectGroups group = effectDesriptors.First().EffectGroup;
            foreach (IEffectModuleDescriptor effectDesriptor in effectDesriptors)
            {
                if (effectDesriptor.EffectName == "Nutcracker")
                {
                    continue;                                                             //Remove this when the Nutcracker module is removed
                }
                if (effectDesriptor.EffectGroup != group)
                {
                    ToolStripSeparator seperator = new ToolStripSeparator();
                    contextMenuItemAddEffect.DropDownItems.Add(seperator);
                    group = effectDesriptor.EffectGroup;
                }
                // Add an entry to the menu
                ToolStripMenuItem contextMenuItemEffect = new ToolStripMenuItem(effectDesriptor.EffectName);
                contextMenuItemEffect.Image       = effectDesriptor.GetRepresentativeImage();
                contextMenuItemEffect.Tag         = effectDesriptor.TypeId;
                contextMenuItemEffect.ToolTipText = @"Use Shift key to add multiple effects of the same type.";
                contextMenuItemEffect.Click      += (mySender, myE) =>
                {
                    if (e.Row != null)
                    {
                        //add multiple
                        if (ModifierKeys == Keys.Shift || ModifierKeys == (Keys.Shift | Keys.Control))
                        {
                            AddMultipleEffects(e.GridTime, effectDesriptor.EffectName, (Guid)contextMenuItemEffect.Tag, e.Row);
                        }
                        else                         //add single
                        {
                            AddNewEffectById((Guid)contextMenuItemEffect.Tag, e.Row, e.GridTime, TimeSpan.FromSeconds(2), true);
                        }
                    }
                };

                contextMenuItemAddEffect.DropDownItems.Add(contextMenuItemEffect);
            }

            _contextMenuStrip.Items.Add(contextMenuItemAddEffect);

            #endregion

            #region Layer Section

            ConfigureLayerMenu(e);

            #endregion

            #region Effect Alignment Section

            ToolStripMenuItem contextMenuItemAlignment = new ToolStripMenuItem("Alignment")
            {
                Enabled = TimelineControl.grid.OkToUseAlignmentHelper(TimelineControl.SelectedElements),
                Image   = Resources.alignment
            };
            //Disables the Alignment menu if too many effects are selected in a row.
            if (!contextMenuItemAlignment.Enabled)
            {
                contextMenuItemAlignment.ToolTipText = @"Disabled, maximum selected effects per row is 32.";
            }

            ToolStripMenuItem contextMenuItemAlignStart = new ToolStripMenuItem("Align Start Times")
            {
                ToolTipText = @"Holding shift will align the start times, while holding duration.",
                Image       = Resources.alignStart
            };
            contextMenuItemAlignStart.Click +=
                (mySender, myE) =>
                TimelineControl.grid.AlignElementStartTimes(TimelineControl.SelectedElements, element, ModifierKeys == Keys.Shift);
            contextMenuItemAlignStart.ShortcutKeyDisplayString = @"(Shift)+S";

            ToolStripMenuItem contextMenuItemAlignEnd = new ToolStripMenuItem("Align End Times")
            {
                ToolTipText = @"Holding shift will align the end times, while holding duration.",
                Image       = Resources.alignEnd
            };
            contextMenuItemAlignEnd.Click +=
                (mySender, myE) =>
                TimelineControl.grid.AlignElementEndTimes(TimelineControl.SelectedElements, element, ModifierKeys == Keys.Shift);
            contextMenuItemAlignEnd.ShortcutKeyDisplayString = @"(Shift)+E";

            ToolStripMenuItem contextMenuItemAlignBoth = new ToolStripMenuItem("Align Both Times")
            {
                Image = Resources.alignBoth
            };
            contextMenuItemAlignBoth.Click +=
                (mySender, myE) => TimelineControl.grid.AlignElementStartEndTimes(TimelineControl.SelectedElements, element);
            contextMenuItemAlignBoth.ShortcutKeyDisplayString = @"B";

            ToolStripMenuItem contextMenuItemMatchDuration = new ToolStripMenuItem("Match Duration")
            {
                ToolTipText =
                    @"Holding shift will hold the effects end time and adjust the start time, by default the end time is adjusted.",
                Image = Resources.matchDuration
            };
            contextMenuItemMatchDuration.Click +=
                (mySender, myE) =>
                TimelineControl.grid.AlignElementDurations(TimelineControl.SelectedElements, element, ModifierKeys == Keys.Shift);
            contextMenuItemMatchDuration.ShortcutKeyDisplayString = @"(Shift)";

            ToolStripMenuItem contextMenuItemAlignStartToEnd = new ToolStripMenuItem("Align Start to End")
            {
                ToolTipText =
                    @"Holding shift will hold the effects end time and only adjust the start time, by default the entire effect is moved.",
                Image = Resources.alignStartEnd
            };
            contextMenuItemAlignStartToEnd.Click +=
                (mySender, myE) =>
                TimelineControl.grid.AlignElementStartToEndTimes(TimelineControl.SelectedElements, element,
                                                                 ModifierKeys == Keys.Shift);
            contextMenuItemAlignStartToEnd.ShortcutKeyDisplayString = @"(Shift)";

            ToolStripMenuItem contextMenuItemAlignEndToStart = new ToolStripMenuItem("Align End to Start")
            {
                ToolTipText =
                    @"Holding shift will hold the effects start time and only adjust the end time, by default the entire effect is moved.",
                Image = Resources.alignStartEnd
            };
            contextMenuItemAlignEndToStart.Click +=
                (mySender, myE) =>
                TimelineControl.grid.AlignElementEndToStartTime(TimelineControl.SelectedElements, element,
                                                                ModifierKeys == Keys.Shift);
            contextMenuItemAlignEndToStart.ShortcutKeyDisplayString = @"(Shift)";

            ToolStripMenuItem contextMenuItemDistDialog = new ToolStripMenuItem("Distribute Effects")
            {
                Image = Resources.distribute
            };
            contextMenuItemDistDialog.Click += (mySender, myE) => DistributeSelectedEffects();

            ToolStripMenuItem contextMenuItemAlignCenter = new ToolStripMenuItem("Align Centerpoints")
            {
                Image = Resources.alignCenter
            };
            contextMenuItemAlignCenter.Click +=
                (mySender, myE) => TimelineControl.grid.AlignElementCenters(TimelineControl.SelectedElements, element);

            ToolStripMenuItem contextMenuItemDistributeEqually = new ToolStripMenuItem("Distribute Equally")
            {
                ToolTipText =
                    @"This will stair step the selected elements, starting with the element that has the earlier start mouseLocation on the time line.",
                Image = Resources.distribute
            };
            contextMenuItemDistributeEqually.Click += (mySender, myE) => DistributeSelectedEffectsEqually();

            ToolStripMenuItem contextMenuItemAlignStartToMark = new ToolStripMenuItem("Align Start to nearest mark")
            {
                Image = Resources.alignStartMark
            };
            contextMenuItemAlignStartToMark.Click += (mySender, myE) => AlignEffectsToNearestMarks("Start");
            contextMenuItemAlignStartToMark.ShortcutKeyDisplayString = @"Ctrl+Shift+S";

            ToolStripMenuItem contextMenuItemAlignEndToMark = new ToolStripMenuItem("Align End to nearest mark")
            {
                Image = Resources.alignEndMark
            };
            contextMenuItemAlignEndToMark.Click += (mySender, myE) => AlignEffectsToNearestMarks("End");
            contextMenuItemAlignEndToMark.ShortcutKeyDisplayString = @"Ctrl+Shift+E";

            ToolStripMenuItem contextMenuItemAlignBothToMark = new ToolStripMenuItem("Align Both to nearest mark")
            {
                Image = Resources.alignBothMark
            };
            contextMenuItemAlignBothToMark.Click += (mySender, myE) => AlignEffectsToNearestMarks("Both");
            contextMenuItemAlignBothToMark.ShortcutKeyDisplayString = @"Ctrl+Shift+B";

            _contextMenuStrip.Items.Add(contextMenuItemAlignment);
            contextMenuItemAlignment.DropDown.Items.Add(contextMenuItemAlignStart);
            contextMenuItemAlignment.DropDown.Items.Add(contextMenuItemAlignEnd);
            contextMenuItemAlignment.DropDown.Items.Add(contextMenuItemAlignBoth);
            contextMenuItemAlignment.DropDown.Items.Add(contextMenuItemAlignCenter);
            contextMenuItemAlignment.DropDown.Items.Add(contextMenuItemMatchDuration);
            contextMenuItemAlignment.DropDown.Items.Add(contextMenuItemAlignStartToEnd);
            contextMenuItemAlignment.DropDown.Items.Add(contextMenuItemAlignEndToStart);
            contextMenuItemAlignment.DropDown.Items.Add(contextMenuItemDistributeEqually);
            contextMenuItemAlignment.DropDown.Items.Add(contextMenuItemDistDialog);
            contextMenuItemAlignment.DropDown.Items.Add(contextMenuItemAlignStartToMark);
            contextMenuItemAlignment.DropDown.Items.Add(contextMenuItemAlignEndToMark);
            contextMenuItemAlignment.DropDown.Items.Add(contextMenuItemAlignBothToMark);

            if (TimelineControl.SelectedElements.Count() > 1 || (TimelineControl.SelectedElements.Any() && !element.Selected))
            {
                contextMenuItemDistributeEqually.Enabled = true;
                contextMenuItemDistDialog.Enabled        = true;
                contextMenuItemAlignStart.Enabled        = true;
                contextMenuItemAlignEnd.Enabled          = true;
                contextMenuItemAlignBoth.Enabled         = true;
                contextMenuItemAlignCenter.Enabled       = true;
                contextMenuItemMatchDuration.Enabled     = true;
                contextMenuItemAlignEndToStart.Enabled   = true;
                contextMenuItemAlignStartToEnd.Enabled   = true;
                contextMenuItemAlignment.Enabled         = true;
                contextMenuItemAlignment.ToolTipText     = string.Empty;
            }
            else
            {
                contextMenuItemDistributeEqually.Enabled = false;
                contextMenuItemDistDialog.Enabled        = false;
                contextMenuItemAlignStart.Enabled        = false;
                contextMenuItemAlignEnd.Enabled          = false;
                contextMenuItemAlignBoth.Enabled         = false;
                contextMenuItemAlignCenter.Enabled       = false;
                contextMenuItemMatchDuration.Enabled     = false;
                contextMenuItemAlignEndToStart.Enabled   = false;
                contextMenuItemAlignStartToEnd.Enabled   = false;
                contextMenuItemAlignment.Enabled         = false;
                if (TimelineControl.SelectedElements.Count() == 1)
                {
                    contextMenuItemAlignment.ToolTipText =
                        @"Select more then one effect or ensure you have Marks added to enable the Alignment feature.";
                }
                else
                {
                    contextMenuItemAlignment.ToolTipText = @"Select more then one effect to enable the Alignment feature.";
                }
            }

            contextMenuItemAlignStartToMark.Enabled = false;
            contextMenuItemAlignEndToMark.Enabled   = false;
            contextMenuItemAlignBothToMark.Enabled  = false;

            foreach (MarkCollection mc in _sequence.LabeledMarkCollections)
            {
                if (mc.Marks.Any())
                {
                    contextMenuItemAlignStartToMark.Enabled = true;
                    contextMenuItemAlignEndToMark.Enabled   = true;
                    contextMenuItemAlignBothToMark.Enabled  = true;
                    contextMenuItemAlignment.Enabled        = true;
                    contextMenuItemAlignment.ToolTipText    = string.Empty;
                    break;
                }
            }
            #endregion

            #region Effect Manipulation Section
            if (tse != null)
            {
                ToolStripMenuItem contextMenuItemManipulation     = new ToolStripMenuItem("Manipulation");
                ToolStripMenuItem contextMenuItemManipulateDivide = new ToolStripMenuItem("Divide at cursor")
                {
                    Image = Resources.divide
                };
                contextMenuItemManipulateDivide.Click += (mySender, myE) =>
                {
                    if (TimelineControl.SelectedElements.Any())
                    {
                        TimelineControl.grid.SplitElementsAtTime(
                            TimelineControl.SelectedElements.Where(elem => elem.StartTime <e.GridTime && elem.EndTime> e.GridTime)
                            .ToList(), e.GridTime);
                    }
                    else
                    {
                        TimelineControl.grid.SplitElementsAtTime(new List <Element> {
                            element
                        }, e.GridTime);
                    }
                };

                ToolStripMenuItem contextMenuItemManipulationClone = new ToolStripMenuItem("Clone")
                {
                    Image = Resources.page_copy
                };
                contextMenuItemManipulationClone.Click += (mySender, myE) =>
                {
                    if (TimelineControl.SelectedElements.Any())
                    {
                        CloneElements(TimelineControl.SelectedElements ?? new List <Element> {
                            element
                        });
                    }
                    else
                    {
                        CloneElements(new List <Element> {
                            element
                        });
                    }
                };

                ToolStripMenuItem contextMenuItemManipulationCloneToOther = new ToolStripMenuItem("Clone to selected effects")
                {
                    Image = Resources.copySelect
                };
                contextMenuItemManipulationCloneToOther.Click += (mySender, myE) =>
                {
                    if (TimelineControl.SelectedElements.Any(elem => elem.EffectNode.Effect.TypeId != element.EffectNode.Effect.TypeId))
                    {
                        //messageBox Arguments are (Text, Title, No Button Visible, Cancel Button Visible)
                        MessageBoxForm.msgIcon = SystemIcons.Warning;                         //this is used if you want to add a system icon to the message form.
                        var messageBox = new MessageBoxForm(string.Format(
                                                                "Some of the selected effects are not of the same type, only effects of {0} type will be modified.",
                                                                element.EffectNode.Effect.EffectName), @"Multiple type effect selected", false, true);
                        messageBox.ShowDialog();
                        if (messageBox.DialogResult == DialogResult.Cancel)
                        {
                            return;
                        }
                    }

                    foreach (
                        Element elem in
                        TimelineControl.SelectedElements.Where(elem => elem != element)
                        .Where(elem => elem.EffectNode.Effect.TypeId == element.EffectNode.Effect.TypeId))
                    {
                        elem.EffectNode.Effect.ParameterValues = element.EffectNode.Effect.ParameterValues;
                        elem.RenderElement();
                    }
                };
                contextMenuItemManipulationCloneToOther.Enabled = (TimelineControl.SelectedElements.Count() > 2);

                _contextMenuStrip.Items.Add(contextMenuItemManipulation);
                contextMenuItemManipulation.DropDown.Items.Add(contextMenuItemManipulateDivide);
                contextMenuItemManipulation.DropDown.Items.Add(contextMenuItemManipulationClone);
                contextMenuItemManipulation.DropDown.Items.Add(contextMenuItemManipulationCloneToOther);

                ToolStripMenuItem contextMenuItemEditTime = new ToolStripMenuItem("Edit Time")
                {
                    Image = Resources.clock_edit
                };
                contextMenuItemEditTime.Click += (mySender, myE) =>
                {
                    EffectTimeEditor editor = new EffectTimeEditor(tse.EffectNode.StartTime, tse.EffectNode.TimeSpan, SequenceLength);
                    if (editor.ShowDialog(this) != DialogResult.OK)
                    {
                        return;
                    }

                    if (TimelineControl.SelectedElements.Any())
                    {
                        var elementsToMove = TimelineControl.SelectedElements.ToDictionary(elem => elem,
                                                                                           elem => new Tuple <TimeSpan, TimeSpan>(editor.Start, editor.Start + editor.Duration));
                        TimelineControl.grid.MoveResizeElements(elementsToMove);
                    }
                    else
                    {
                        TimelineControl.grid.MoveResizeElement(element, editor.Start, editor.Duration);
                    }
                };
                //Why do we set .Tag ?
                contextMenuItemEditTime.Tag     = tse;
                contextMenuItemEditTime.Enabled = TimelineControl.grid.OkToUseAlignmentHelper(TimelineControl.SelectedElements);
                if (!contextMenuItemEditTime.Enabled)
                {
                    contextMenuItemEditTime.ToolTipText = @"Disabled, maximum selected effects per row is 32.";
                }
                _contextMenuStrip.Items.Add(contextMenuItemEditTime);
            }
            #endregion

            #region Cut Copy Paste Section

            _contextMenuStrip.Items.Add("-");

            ToolStripMenuItem contextMenuItemCopy = new ToolStripMenuItem("Copy", null, toolStripMenuItem_Copy_Click)
            {
                ShortcutKeyDisplayString = @"Ctrl+C",
                Image = Resources.page_copy
            };
            ToolStripMenuItem contextMenuItemCut = new ToolStripMenuItem("Cut", null, toolStripMenuItem_Cut_Click)
            {
                ShortcutKeyDisplayString = @"Ctrl+X",
                Image = Resources.cut
            };
            contextMenuItemCopy.Enabled = contextMenuItemCut.Enabled = TimelineControl.SelectedElements.Any();
            ToolStripMenuItem contextMenuItemPaste = new ToolStripMenuItem("Paste", null, toolStripMenuItem_Paste_Click)
            {
                ShortcutKeyDisplayString = @"Ctrl+V", Image = Resources.page_white_paste,
                Enabled = ClipboardHasData()
            };

            _contextMenuStrip.Items.AddRange(new ToolStripItem[] { contextMenuItemCut, contextMenuItemCopy, contextMenuItemPaste });

            if (TimelineControl.SelectedElements.Any())
            {
                //Add Delete/Collections
                ToolStripMenuItem contextMenuItemDelete = new ToolStripMenuItem("Delete Effect(s)", null,
                                                                                toolStripMenuItem_deleteElements_Click)
                {
                    ShortcutKeyDisplayString = @"Del", Image = Resources.delete
                };
                _contextMenuStrip.Items.Add(contextMenuItemDelete);
                AddContextCollectionsMenu();
            }

            #endregion

            #region Mark Section

            ToolStripMenuItem contextMenuItemAddMark = new ToolStripMenuItem("Add Marks to Effects")
            {
                Image = Resources.marks
            };
            contextMenuItemAddMark.Click += (mySender, myE) => AddMarksToSelectedEffects();
            _contextMenuStrip.Items.Add(contextMenuItemAddMark);

            #endregion

            e.AutomaticallyHandleSelection = false;
            _contextMenuStrip.Show(MousePosition);
        }
コード例 #3
0
 private bool ValidateMultipleEffects(Element element, IEnumerable<Element> elements)
 {
     if (TimelineControl.SelectedElements.Count() > 1 && elements.Count() != TimelineControl.SelectedElements.Count())
     {
         if (!ShowMultipleEffectDropMessage(element.EffectNode.Effect.EffectName))
         {
             return true;
         }
     }
     return false;
 }
コード例 #4
0
 private void UpdateEffectProperty(PropertyDescriptor descriptor, Element element, Object value)
 {
     descriptor.SetValue(element.EffectNode.Effect, value);
     element.UpdateNotifyContentChanged();
     SequenceModified();
 }
コード例 #5
0
        private bool SupportsColorLists(Element element)
        {
            if (element == null) return false;
            var propertyData = MetadataRepository.GetProperties(element.EffectNode.Effect);

            return propertyData.Any(x => (x.PropertyType == typeof(List<ColorGradient>) || x.PropertyType == typeof(List<GradientLevelPair>)) && x.IsBrowsable);
        }
コード例 #6
0
        private void HandleGradientDropOnGradientLevelPairList(PropertyData property, Element element, Dictionary<Element, Tuple<object, PropertyDescriptor>> elementValues, ColorGradient gradient)
        {
            List<GradientLevelPair> gradients = property.Descriptor.GetValue(element.EffectNode.Effect) as List<GradientLevelPair>;
            if (gradients == null) return;

            var parameterPickerControls = CreateGradientLevelPairPickerControls(property, gradients);

            var parameterPicker = CreateParameterPicker(parameterPickerControls);

            ShowMultiDropMessage();
            var dr = parameterPicker.ShowDialog();
            if (dr == DialogResult.OK)
            {
                var newGradients = gradients.ToList();
                newGradients[parameterPicker.SelectedControl.Index] = new GradientLevelPair(gradient, gradients[parameterPicker.SelectedControl.Index].Curve);
                elementValues.Add(element, new Tuple<object, PropertyDescriptor>(parameterPicker.PropertyInfo.GetValue(element.EffectNode.Effect), parameterPicker.PropertyInfo));
                UpdateEffectProperty(parameterPicker.PropertyInfo, element, newGradients);
            }
        }
コード例 #7
0
 private void HandleGradientDropOnGradient(ColorGradient gradient, Dictionary<Element, Tuple<object, PropertyDescriptor>> elementValues, Element e, PropertyDescriptor property)
 {
     elementValues.Add(e,
         new Tuple<object, PropertyDescriptor>(property.GetValue(e.EffectNode.Effect), property));
     UpdateEffectProperty(property, e, gradient);
 }
コード例 #8
0
        private void HandleGradientDrop(Element element, ColorGradient color)
        {
            _mouseOriginalPoint = new Point(MousePosition.X, MousePosition.Y);

            var elements = GetElementsForDrop(element);

            if (ValidateMultipleEffects(element, elements)) return;

            HandleGradientDropOnElements(elements, color);
        }
コード例 #9
0
        private void HandleCurveDrop(Element element, Curve curve)
        {
            _mouseOriginalPoint = new Point(MousePosition.X, MousePosition.Y);

            var elements = GetElementsForDrop(element);

            if (ValidateMultipleEffects(element, elements)) return;

            Dictionary<Element, Tuple<Object, PropertyDescriptor>> elementValues = new Dictionary<Element, Tuple<object, PropertyDescriptor>>();

            var properties = MetadataRepository.GetProperties(element.EffectNode.Effect).Where(x => (x.PropertyType == typeof(Curve) || x.PropertyType == typeof(List<GradientLevelPair>)) && x.IsBrowsable);
            if (!properties.Any()) return;

            if (properties.Count() == 1)
            {
                var property = properties.First();

                if (property.PropertyType == typeof (Curve))
                {
                    foreach (var e in elements)
                    {
                        elementValues.Add(e, new Tuple<object, PropertyDescriptor>(property.Descriptor.GetValue(e.EffectNode.Effect), property.Descriptor));
                        UpdateEffectProperty(property.Descriptor, e, curve);
                    }
                }
                else if (property.PropertyType == typeof(List<GradientLevelPair>))
                {
                    foreach (var e in elements)
                    {
                        HandleCurveDropOnGradientLevelPairList(property, e, elementValues, curve);
                    }
                }

            }
            else
            {
                //We have more than one property of the same type
                List<EffectParameterPickerControl> parameterPickerControls = properties.Select(propertyData => new EffectParameterPickerControl
                {
                    PropertyInfo = propertyData.Descriptor,
                    ParameterImage = GetCurveBitmap((Curve)propertyData.Descriptor.GetValue(element.EffectNode.Effect))
                }).ToList();

                var gradientLevelList = properties.Where(p => p.PropertyType == typeof(List<GradientLevelPair>));
                foreach (var propertyData in gradientLevelList)
                {
                    List<GradientLevelPair> gradients = propertyData.Descriptor.GetValue(element.EffectNode.Effect) as List<GradientLevelPair>;
                    if (gradients == null) return;

                    parameterPickerControls.AddRange(CreateGradientLevelPairPickerControls(propertyData, gradients, false));
                }

                FormParameterPicker parameterPicker = CreateParameterPicker(parameterPickerControls);

                ShowMultiDropMessage();
                var dr = parameterPicker.ShowDialog();
                if (dr == DialogResult.OK)
                {
                    if (parameterPicker.PropertyInfo.PropertyType == typeof (Curve))
                    {
                        foreach (var e in elements)
                        {
                            elementValues.Add(e,
                                new Tuple<object, PropertyDescriptor>(parameterPicker.PropertyInfo.GetValue(element.EffectNode.Effect),
                                    parameterPicker.PropertyInfo));
                            UpdateEffectProperty(parameterPicker.PropertyInfo, e, curve);
                        }
                    }
                    else if (parameterPicker.PropertyInfo.PropertyType == typeof(List<GradientLevelPair>))
                    {
                        List<GradientLevelPair> gradientLevelPairs = parameterPicker.PropertyInfo.GetValue(element.EffectNode.Effect) as List<GradientLevelPair>;
                        if (gradientLevelPairs != null)
                        {
                            var newGradientLevelPairs = gradientLevelPairs.ToList();
                            newGradientLevelPairs[parameterPicker.SelectedControl.Index] =
                                new GradientLevelPair(gradientLevelPairs[parameterPicker.SelectedControl.Index].ColorGradient, curve);
                            elementValues.Add(element,
                                new Tuple<object, PropertyDescriptor>(parameterPicker.PropertyInfo.GetValue(element.EffectNode.Effect),
                                    parameterPicker.PropertyInfo));
                            UpdateEffectProperty(parameterPicker.PropertyInfo, element, newGradientLevelPairs);
                        }
                    }

                }
                else
                {
                    UpdateToolStrip4(String.Empty);
                }

            }
            CompleteDrop(elementValues, element, "Curve");
        }
コード例 #10
0
 private void HandleColorDropOnColor(Color color, Dictionary<Element, Tuple<object, PropertyDescriptor>> elementValues, Element e, PropertyDescriptor property)
 {
     elementValues.Add(e,
         new Tuple<object, PropertyDescriptor>(property.GetValue(e.EffectNode.Effect), property));
     UpdateEffectProperty(property, e, color);
 }
コード例 #11
0
 private List<Color> GetSupportedColorsFromCollection(Element element, List<Color> colors )
 {
     var discreteColors = GetDiscreteColors(element.EffectNode.Effect);
     if (discreteColors.Any())
     {
         return discreteColors.Intersect(colors).ToList();
     }
     return colors;
 }
コード例 #12
0
 private IEnumerable<Element> GetElementsForDrop(Element element)
 {
     var elements = element.Selected
         ? TimelineControl.SelectedElements.Where(x => x.EffectNode.Effect.GetType() == element.EffectNode.Effect.GetType())
         : new[] { element };
     return elements;
 }
コード例 #13
0
 private void CompleteDrop(Dictionary<Element, Tuple<object, PropertyDescriptor>> elementValues, Element element, string type)
 {
     if (elementValues.Any())
     {
         var undo = new EffectsPropertyModifiedUndoAction(elementValues);
         AddEffectsModifiedToUndo(undo);
         TimelineControl.grid.ClearSelectedElements();
         TimelineControl.SelectElement(element);
         UpdateToolStrip4(
             string.Format("{2} applied to {0} {1} effect(s).", elementValues.Count(), element.EffectNode.Effect.EffectName, type), 30);
     }
 }
コード例 #14
0
        private void HandleGradientDrop(Element element, ColorGradient color)
        {
            var elements = GetElementsForDrop(element);

            if (ValidateMultipleEffects(element, elements)) return;

            HandleGradientDropOnElements(elements, color);
        }