Development update (January 27)
Just merged the branch for a "command cleanup" sprint. This was mostly an internal cleanup with just a few user visible changes.
What's new
Now some sequences of commands are merged into a single command.
Every time you make a change to the project, a command is issues for it and (in broad terms) this command is appened to the "undo list". Turning a dial could produce dozens if not hundreds of separate commands, and an 'undo' would undo each of those one at a time.
Now new commands might get merged into the previous command, so a sequence of many control value changes is collapsed into a single change. And 'undo' will undo all those changes in one step.
It is also possible again to set the pitch for the note events produced by a beat track. That got lost in some previous refactoring.
Internal changes
The major part of the sprint was to cleanup the commands, which are internally used by the UI to
modify the opened project. Initially I used very fine grained commands, e.g. a dedicated command
SetClef
to change the clef of a measure. The whole thing grew quite organically and I never
developed a consistend scheme.
Now I changed that to a basic CRUD
scheme, i.e. most commands are
called CreateFoo
, UpdateFoo
, DeleteFoo
(ok, it's really CUD
, but whatever). And instead of
separate commands to change the various properties of an object (like the SetClef
mentioned
above), there is now just a single UpdateFoo
command, and which property should be changed is
determined by the presence of specific fields in that command (which are just protocol buffer
messages).
While doing those changes I also got tired of typing names like PipelineGraphNode
. Given the
central role, which the graph and the nodes therein should now play, I renamed those to the much
more compact Node
, NodeConnection
, etc.
And some minor cleanups: simplify the API of the Command
class, add factory functions for all
command protos (for some more type safety).