TODO for Frescobaldi (also some random ideas)
=============================================


Music length related (needs infrastructure to compute duration of music
expressions):

- bar check feedback: display a status message or balloonhint showing the length
  of the entered music between the entered barcheck (pipe symbol) and the
  previous one. Just to have a quick check that the bar length is OK.

- auto-insert bar checks 

- auto-insert comments with the bar number (every 5 measures or so)


Pitch related:

- command to re-interpret pitches (change alterations, e.g. based on key
  signature), useable to fix wrong accidentals after import of a MIDI file


Filtering music expressions:

- split out e.g. articulations or dynamics and put them in a separate expression
  attached to skips, so they can be overlaid to other voices dynamically.

- (re)combine music expressions


Score Wizard:

- support nested groups in part list (e.g. StaffGroup or GrandStaff)
- separate \score { } for the MIDI output
- idea: support multiple movements (i.e. number of scores) (idea of M. Moles)
- idea: some font settings, e.g. default fonts, title font, etc.
- idea: load/save score setups


General:

- Support other programs besides LilyPond like mup, abc, pmw, cmn, etc.


Editing:

- Document properties dialog that parses the current paper, layout, score and
  (possibly) header sections and makes all kinds of quick adjustments possible,
  such as paper size, raggedness, margins, bar and pagenumbering, headers,
  distances, staff size, default fonts, etc.

- Command to fully normalize the source document layout (indent properly, line
  breaks at sensible places, add { } to ambiguous markup constructs, etc.

- Mixed indent (indent with tabs and/or spaces without converting them to each
  other)

- Convert plain input text to markup commands:
  - easy entry of lyric text strophes
  - (justified) paragraphs, lists or tables
  - some wiki-like syntax possible

- Rich-text editor to enter/edit markup:
  - font selection
  - bold, ital, underline
  - alignment
  - urls
  - musical symbols from LilyPond font

- Document structure browser


Running LilyPond:

- separate "server" process that runs LilyPond and communicates with clients
  like Frescobaldi.  This way a user can exit Frescobaldi while a job is
  running, and have job feedback from the systray and can e.g. start LilyPond
  jobs from a file manager service menu.  The server process exits when there is
  nothing to do, and is automatically started when there is something to do.
  Communication should be done via D-Bus.

- Make it easy to download and install LilyPond documentation together with the
  binary download option in the settings.


PDF Preview:

- tighter (two-way) coupling with editor part, possibly by using a custom PDF
  (or PS or even SVG) widget instead of embedding Okular:
  - highlight object text cursor is at
  - right-click object and show relevant options in context menu (by looking
    at the linked position in the document the type of object can be determined)
  - generate \override #'extra-offset command (or other offset types) by
    simply dragging an object
  - select rectangular section in PDF also selects relevant portion in input
    document
  
  This could be done by extending the Okular Part with link stuff, but I prefer
  to make a new widget that can display PDFs using poppler-qt4. TODO:
  - get a Python binding for poppler-qt4 that supports all the link stuff
  - create a widget that shows pages from a PDF with clickable areas that can
    also be highlighted (show a box or recolor the object region). Best bet may
    be using a QGraphicsScene (per page or with multiple pages). Every link can
    be a QGraphicsItem object that can alter its appearance on mouseover.
  
  Other advantages:
  - no need to mess with Okulars settings
  - no dependency on Okular
  - point and click can be handled fully inside Frescobaldi


Output:

- quick PNG of current document (e.g. copied to clipboard or some snippet board)


Documentation browser:

- full text search in all manuals


MIDI:

- replace Rumor plugin with native MIDI in- and output support
- couple beat positions in embedded MIDI player with (approx.) cursor position
  in editor


User interface:

- list view for opened documents (like Kate)


Import/Export:

- import wizard for MIDI files and other files
- export to OpenDocument Text using the LilyPond EPS backed (generate vector
  or raster images for every system and then put them together as paragraphs).
  If possible put on clipboard for direct pasting in apps like OpenOffice.org.


Stability:

- don't error out if the ui.rc file is newer and containers for generated menus
  can't be found (e.g. after downgrading Frescobaldi)



DONE:
=====

Editing:
- Cut and assign: check mode of cut-out fragment and reuse (e.g. \lyricmode)
- Context sensitive context menu to do all sorts of things on the current
  cursor position or text selection
- Add slurs etc. to selected music fragment

Pitch related:
- transpose music
- relative -> absolute and vice versa

Score Wizard:
- more than one voice for Tablature instruments (Guitar, Jazz Guitar)

New LilyPond features (as soon as 2.14 is out):
- snappizicato articulation
- halfopen articulation

General:
- Print dialog for printing generated PDFs, instead of just calling 'lpr'
- Session save and restore (combined with named sessions like Kate)

Running LilyPond:
- A wizard to download LilyPond binaries from lilypond.org and install them into
  a local directory to explore different versions of LilyPond without needing
  to install them via a distribution's package manager.

MIDI:
- embedded MIDI player for playback of files (with stop/start)

