Skip to content

[FR] Editing scores #25

Description

@mike-lischke

Editing scores is a big feature and consists of different parts. This is the umbrella issue for it.

  • Editing must work in both view modes (grid and staff view). Mechanics are different for each view.
  • Editing must work on desktop and mobile devices, so everything what's available by keyboard must be also available via touch events.
  • Core of the entire editing feature is the Undo Manager, which is based on snapshots. Undoing or reapplying changes boils down to just applying snapshots. For now we don't use diffs.
  • A special edit mode is used for the app which allows to add spezial UI elements that would otherwise just waste real estate.
    • Leaving this mode will ask the user about saving their changes (if needed). The user can choose to save or ignore the changes (or stay in editing mode).
    • Loading a score while editing will also ask for saving any pending changes or dropping changes. Loading a score will put the app into non-editing mode.
    • Switching away from editing mode or saving changes will empty the undo manager's history.
  • Changes (the undo manager's history) should be staged in browser storage automatically to avoid losing work if the app tab was closed without saving them. On next open of the app these changes should be reapplied (user must confirm). The frequency of how often the history is dumped needs to be figured out (maybe a minute). We can make this configurable.
  • Clearing the undo manager's history should also remove staged changes, by directly synching the new (empty) history to browser local storage.
  • Add a button to start editing with an empty score.
    • Offer a list of templates to start from, with adjustable instruments. Alternatively the user can set everything manually (time measure, number of bars etc.).
    • If a score is currently being edited when pressing this button the same procedure like for leaving edit mode should be executed (user confirmation, but staying in edit mode).
  • Each bar gets a radial menu with entries for:
    • Adding an empty bar left or right
    • Duplicating the current bar left or right
    • Removing the current bar
    • Clearing the current bar
  • Each bar gets a marked area above it which is used to grab the bar and drag it around. The drag image shows the bar being dragged, while the bar itself is made partially transparent. An indicator is drawn between bars depending on the drag position over another bar. The minimap can be a drag target too for quicker navigation in long scores.
  • Each track (instrument) gets a radial menu with entries for:
    • Duplicating the track
    • Removing the track
    • Adding an empty track above or below
    • Clearing the track
    • Filling the track with a specific pattern
    • Changing the instrument
  • Each selectable entity (bar, track, track piece, note group, note) can be dragged and moved to or copied in a different location.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions