                   ***************************************
                   *                                     *
                   *   TODO: OSSP titraq Specification   *
                   *                                     *
                   ***************************************

Must do
-------
Q_CHECK_PTR
public/private
Ensure rethrows from second loadData on upwards
Report errors in all slot code
Rework error handling in prefs
Generally maintain Preference class
  Implement missing interface methods
Review destruction of all members, compare with setupPrefs
Some menus are defined QPopupMenu in header, some in code
Memory optimization needed in tidataops
Check all identifiers for undeutig unique scope
Remove magic numbers from cpp files to titconst like TITRAQ_INDEXREMARK
Some signals implemented in Titraqform really belong in satellite classes
Write M4 macro for detecting cuserid, and prefer it in ac_assist
configure soll ueberpruefen ob libqt[-mt] threads braucht,
  dann wenn so, soll den LIBS -pthread hardgecodet haben
Read config location from optional --confgen autoconf location
IDs in as_const.h much better choosing, so they make sense
Be consistent with szQString vs QString var names
After every result write a status bar message
On multiple selection, no text should appear in edit ctrls
Make consistent setEdition(), setDirty() default parameters
Use namespace 'AS' or unique identifier 'AS' for all classnames
Unify class mycl = class(), class mycl(), class *pMycl, auto_ptr<class *>
Win32 code in User class is only half written, and incomplete homedir
Verify routine consistently scans all fields on load and new entries
Remove all exception raises from slot code
New doc, new entry, change text in table, close... No verify save!
Might not need classes Amount and Tableitem at all

Bugs (? = unverified)
---------------------
Overidden paintCell() might not work when called asynchronously?
Sometimes a click on add or delete toolbar button is ignored?
When multiple new rows are added sometimes wrong row shading?
When sorting rows, sometimes a false extra highlight appears
Disabled actions still show enabled icons in menu popups
Pressing escape on task data cells does not exit edit mode
On win32, all or some file reads and writes probably need IO_Translate?
Method saveData(stream) must write to a new file, otherwise writes data pattern
CRCs are being generated before parsing of "" is finished?
Double click on column separator is broken again
Zeitabzug moeglicherweise falsch wenn 23:00-01:00=?
Statustext soll nicht neben Pixmaps erscheinen
Loesch mal alle Text vom Task Editctrl, dann drueck mal Obentaste
Memory leak in vector<QRadioButton> as_panel

Nice to have
------------
Implement drag and drop selected row swapping
Implement an unlimited and generic undo and redo buffer class
Support pasting into as_gui from other app (like vim)
Add optional automatic file personal data file backup
Make edit control window optional through preferences
Add customizable column ordering by click and drag
Soll mehr intuitive, mit sekondaer/dritte Keycolumn
CRC und Rev sollen nicht in gleiche Methode berechnet
No need to have upd slots for non-changeable upd controls
Before openDoc, closeEvent should be used instead of new code
Align CRC field data to left edge of table items
Make Simplefile class non-Qt specific

Screwey user notes ;-)
----------------------
cs:  'd' should not delete at once but flag the record as deleted.  Use '$' to sync (similar to mutt)
cs:  first 'TAB' should complete (if possible), second 'TAB' should open selection box (similar to bash)
cs:  line numberscould be referenced when entering accounts ala bash history ('!4' = record #4)
mlelstv: 24:00 muss als Valideintrag im Finishfeld erlaubt
thl: / should enable the user to search for something
thl: using = should force a recalculation for a time field
thl: using ~ should round a time field to the next quarter (configurable)

Architectural
-------------
Decouple form, preferences, and RPC classes
Remove common class behaviours (quitApp, close...) to abstract classes

Win32
-----
Rework username, homedir, and confdaten (hive) logic

Preferences
-----------
<option name wert>      Hintergrund Functionalitaet
<aspect name wert>      Sichtliche Functionalitaet
<session name wert>     Automatisch gespeicherte
<rule name expr cond>   Amount = Finish - Start (mussen alle da z.B.)
<alias name wert>       Nutzbar lange Taskzeilen zu abstrahieren
<macro name = 'Reuse'>
  Selectiere aktuelle und 3 vorherige Reihen
  Copy
  Geh zu letzte Reihe
  Paste
</macro name = 'Reuse'>
<macro name = 'Append'>
  Geh zu letzte Reihe
  Zufug Reihe
</macro name = 'Append'>

Code snippits
-------------
// Portable processes
QProcess *Proc;
Proc = new QProcess;
Proc->setArguments("/usr/local/bin/nada");
bool ok = Proc->start();

> Does anyone know how to set the WhatsThis text for a QPushButton?.
>
> Met vriendelijke groet
Use the static QWhatsThis::add()

Document
--------
Use doxygen for C++ interface documentation.

Project plan
------------
    Prototype
    Release v0.8    Milestone 1, Alpha
    Release v0.9    Milestone 2, Beta
    Release v1.0    Milestone 3,
    Release v1.2    Milestone 4,

Requirements
------------

Deliverables
------------
    Binaries
      titraq           Verwendung

    Designdocs
      titraq_design.ps Systemdiagramme

    Manpage
      titraq.1         Hauptinfo
      titraq.conf.5    Beschreibung des Configdatei

    Geliefert
      titraq.conf      Ausgekommentet Beispieldatei

Pseudocode
----------
    initialize
    parse command line
    parse titraq.conf file
    load titraq.dat file
    show control window
    wait for quit
    save titraq.dat file
    finish

Test case
---------
    Pre:
    tar zxvf titraq-0.9.tar
    cd titraq-0.9
    ./configure
    make
    su
    make install

    Assume:
    OS has Qt 3.0.6 or newer multithreaded library

    Begin:
    $ titraq

    Output:
    Post:
    Procedure:
