VIX-3626 Logic revamp for drag drop on Wave, Liquid, Morph, or Fixtures effects in the timeline.#789
Closed
jeffu231 wants to merge 30 commits intoVixenLights:masterfrom
Closed
VIX-3626 Logic revamp for drag drop on Wave, Liquid, Morph, or Fixtures effects in the timeline.#789jeffu231 wants to merge 30 commits intoVixenLights:masterfrom
jeffu231 wants to merge 30 commits intoVixenLights:masterfrom
Conversation
* Create a new Property discovery class instead of using the MetadataRepository that is more intended for the Effect Editor panel. * Create a new PropertyMetaData container that closely resembles the PropertyData class used in the MetadataRepository, but this is greatly slimmed down to solve for our needs in the drag drop. This class also allows us to associate the owning object of the property so we can manipulate it later instead of assuming it has to be the effect itself. In this new case, it might be in a collection of other objects. * Allow for discovery of the interested properties in collection classes such as used in the Wave and Liquid effect. This keeps us from needing to know more about the effects than we need to. It also prevents the effects from having to expose info so we can drag drop on them. * Refactor move the EffectParameterPickerControl from common to the TimedSequenceEditor where it is used to remove a circlular dependency on the PropertyData class * Refactor all the drag drop methods to use the new discovery and pass around PropertyMetaData instead of the raw PropertyDescriptor. * Refactor the property update methods to use the PropertyMetaData and update using the owner rather than assume it is the effect. * Refactor the Undo/Redo class for properties to use the new PropertyMetaData, so it knows which object the descriptor belongs to instead of assuming it is the effect. * TODO the Wave and Liquid effects that have collection objects, do not expose PropertyChanged events when those properties in the collections are modified. The logic in the Effect editor just swaps out the entire collection which does fire a top level event allowing the effect to rerender. This needs to be solved by adding Property Changed events so the effect is properly notified when it own internal things change and can update and render. * TODO Refactor many of the variables used in all the drag drop methods since the PropertyMetaData is referred to by many diffferent names. This was there previously for the PropertyData object so was an existing issue. * TODO In depth testing.
* Remove commented method used for testing. * Change string format to interpolation in the areas that have been refactored.
* Add logic on all curves and colors in the Waveform class to notify when they change. * Add logic into the Wave class to listen for child property changes on Waveform collections. * Add logic to mark the Wave dirty and propagate a change event for the Waves collection. * TODO can the effect editor only update the child property and not replace the collection now?
* Followed the same pattern as the previous commit for the Wave effect.
* Add null check handling. There should not really be any cases null is assigned here, but good practice says we should handle it. * Make logic uniform across the Wave and Liquid effect.
* Bug: When the effect editor is replacing a collection, the new collection is was not properly registering for the property changed events on the replaced items. * Added logic to properly handle the replace action when the items in a NotifyPropertyObservableCollection so the PropertyChanged listener is regestered on the new and removed on the old. * TODO Examine what should occur on reset action.
…utility class VIX-3626 Moving recursive collection handling into PropertyDiscovery utility class
* Follow the pattern of Liquid, Wave, and Fixtures to ensure property change events are fired on Curves and Gradients * Set a preferred display name for Polygons so the correct name shows up in the parameter picker
* Create a class to seperate out the Owner info into it's own meta data file. Include the Display name logic and ability to know its collection index if one exists. * Refactor the PropertyMetaData class and the PropertyDiscovery to utilize the new PropertyOwnerMetaData class. * Refactor the form picker to use the additional owner information to better format the names of the group boxes. * Change the formatting of the parameter picker to remove excess space.
* The multi effect drop needs to handle having a PropertyMetaData item for each effect changed so the owner is properly associated. * Add an extension to create a new PropertyMetaData object from an existing one with the same owner. * Refactor the multi drop logic areas to create the new PropertyMetaData for each element processed. * The color and gradient drop on multiple effects without a gradient list or gradient level pair shows the picker dialog multiple times as an existing bug that should be addressed.
* Update the gradient drop on multiples to use the toNewOwner logic so undo works correctly.
* The Liquid, Wave, Morph can have different counts of items in their collections. The picker is based on the first one, so if it has more and the user drops the item on the nth indexed item and some or any of the others don't have that many items, those that have less will be skipped.
* The ToString will be favored by the display name logic and can reduce the reflection needed to find the attribute.
johncbaur
reviewed
Feb 15, 2026
src/Vixen.Modules/Editor/TimedSequenceEditor/TimedSequenceEditorForm.cs
Outdated
Show resolved
Hide resolved
* Add logic to the PropertyDiscovery that can do a fast true as soon as any property matches the desired types. * Refactor the IsValidDataObject method to use the new function. * Refactor IsValidDataObject to avoid possible null values with is checks.
* Update the main picker form to support grouping controls like curves or gradients that are part of a gradient level pair. * Update logic creating gradient level pair picker controls to use the group capability.
* While dragging an item, the drag over logic gets repeatedly called which can use a lot of cycles. Added logic to only test the element once and store the result to be returned on subsequent tests. * This reduces calls to the proerty discovery by a significant amount.
* Add missing logic to set the existing element effect to null if the element is null when in validation. * Add logic to use the singular multi drop flow when there are more than one element so the popup only shows once. * Add logic to handle when color lists or gradient level pair lists have different counts.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Cannot drag & drop Gradient or Curve directly onto the Wave, Liquid, Morph, or Fixtures effects in the timeline