Thu, 06 Aug 2009 13:21:30 +0200
Remove seemingly declarations unnecessary according to Qt 4.5.2 headers.
michael@1 | 1 | *************************************** |
michael@1 | 2 | * * |
michael@1 | 3 | * TODO: OSSP titraq Specification * |
michael@1 | 4 | * * |
michael@1 | 5 | *************************************** |
michael@1 | 6 | |
michael@1 | 7 | Must do |
michael@1 | 8 | ------- |
michael@1 | 9 | Q_CHECK_PTR |
michael@1 | 10 | public/private |
michael@1 | 11 | Ensure rethrows from second loadData on upwards |
michael@1 | 12 | Report errors in all slot code |
michael@1 | 13 | Rework error handling in prefs |
michael@1 | 14 | Generally maintain Preference class |
michael@1 | 15 | Implement missing interface methods |
michael@1 | 16 | Review destruction of all members, compare with setupPrefs |
michael@1 | 17 | Some menus are defined QPopupMenu in header, some in code |
michael@1 | 18 | Memory optimization needed in tidataops |
michael@1 | 19 | Check all identifiers for undeutig unique scope |
michael@1 | 20 | Remove magic numbers from cpp files to titconst like TITRAQ_INDEXREMARK |
michael@1 | 21 | Some signals implemented in Titraqform really belong in satellite classes |
michael@1 | 22 | Write M4 macro for detecting cuserid, and prefer it in ac_assist |
michael@1 | 23 | configure soll ueberpruefen ob libqt[-mt] threads braucht, |
michael@1 | 24 | dann wenn so, soll den LIBS -pthread hardgecodet haben |
michael@1 | 25 | Read config location from optional --confgen autoconf location |
michael@1 | 26 | IDs in as_const.h much better choosing, so they make sense |
michael@1 | 27 | Be consistent with szQString vs QString var names |
michael@1 | 28 | After every result write a status bar message |
michael@1 | 29 | On multiple selection, no text should appear in edit ctrls |
michael@1 | 30 | Make consistent setEdition(), setDirty() default parameters |
michael@1 | 31 | Use namespace 'AS' or unique identifier 'AS' for all classnames |
michael@1 | 32 | Unify class mycl = class(), class mycl(), class *pMycl, auto_ptr<class *> |
michael@1 | 33 | Win32 code in User class is only half written, and incomplete homedir |
michael@1 | 34 | Verify routine consistently scans all fields on load and new entries |
michael@1 | 35 | Remove all exception raises from slot code |
michael@1 | 36 | New doc, new entry, change text in table, close... No verify save! |
michael@1 | 37 | Might not need classes Amount and Tableitem at all |
michael@1 | 38 | Mach mal mit den 'autobackup' und 'fextension' Optionen von prefs |
michael@1 | 39 | Check for outdated config file version |
michael@1 | 40 | Make status bar message, qWarning, qDebug, and Popup messages consistent |
michael@1 | 41 | For which purposes do messages go in each category? |
michael@1 | 42 | Label methods and parameters throughout as const ... const, use & |
michael@1 | 43 | Yank out all #include from headers, replace with class ...; protos |
michael@1 | 44 | Check for empty amount field in getWeektotals before Hashtasks[Convstring] += |
michael@1 | 45 | Accountlistbox is sorted both in assist and dataops with maps |
michael@1 | 46 | Verify that unviewable rows are not redrawn cerr << "Rownum" << nRow << endl; |
michael@1 | 47 | Also, use bool QTable::isRowHidden (int nRow) const |
michael@1 | 48 | Don't raise the question 'Save before quitting' when no contents were changed |
michael@1 | 49 | |
michael@1 | 50 | Bugs (? = unverified) |
michael@1 | 51 | --------------------- |
michael@1 | 52 | Overidden paintCell() might not work when called asynchronously? |
michael@1 | 53 | Sometimes a click on add or delete toolbar button is ignored? |
michael@1 | 54 | When multiple new rows are added sometimes wrong row shading? |
michael@1 | 55 | When sorting rows, sometimes a false extra highlight appears |
michael@1 | 56 | Disabled actions still show enabled icons in menu popups |
michael@1 | 57 | Pressing escape on task data cells does not exit edit mode |
michael@1 | 58 | On win32, all or some file reads and writes probably need IO_Translate? |
michael@1 | 59 | Method saveData(stream) must write to a new file, otherwise writes data pattern |
michael@1 | 60 | CRCs are being generated before parsing of "" is finished? |
michael@1 | 61 | Double click on column separator is broken again |
michael@1 | 62 | Zeitabzug moeglicherweise falsch wenn 23:00-01:00=? |
michael@1 | 63 | Statustext soll nicht neben Pixmaps erscheinen |
michael@1 | 64 | Loesch mal alle Text vom Task Editctrl, dann drueck mal Obentaste |
michael@1 | 65 | Memory leak in vector<QRadioButton> as_panel |
michael@1 | 66 | Opendoc, schau amount unten Knopf (ist dimmed) |
michael@1 | 67 | Reporting only works if event data is sorted by date |
michael@1 | 68 | Press Return then Tab many times to see invalid selections |
michael@1 | 69 | Does not enter edit mode for a cell when double click |
michael@1 | 70 | Some versions (as.de.cw.net:/v/as-old/sw), double click to |
michael@1 | 71 | edit a cell, add two characters, click X to close without |
michael@1 | 72 | leaving the cell. It should ask to save doc, but doesn't. |
michael@1 | 73 | |
michael@1 | 74 | Nice to have |
michael@1 | 75 | ------------ |
michael@1 | 76 | Implement drag and drop selected row swapping |
michael@1 | 77 | Implement an unlimited and generic undo and redo buffer class |
michael@1 | 78 | Support pasting into as_gui from other app (like vim) |
michael@1 | 79 | Add optional automatic file personal data file backup |
michael@1 | 80 | Make edit control window optional through preferences |
michael@1 | 81 | Add customizable column ordering by click and drag |
michael@1 | 82 | Soll mehr intuitive, mit sekondaer/dritte Keycolumn |
michael@1 | 83 | CRC und Rev sollen nicht in gleiche Methode berechnet |
michael@1 | 84 | No need to have upd slots for non-changeable upd controls |
michael@1 | 85 | Before openDoc, closeEvent should be used instead of new code |
michael@1 | 86 | Align CRC field data to left edge of table items |
michael@1 | 87 | Make Simplefile class non-Qt specific |
michael@1 | 88 | Read and write karm format files with file extension detection |
michael@1 | 89 | Offer general option 'Use vim keymap' |
michael@1 | 90 | Text revisions |
michael@1 | 91 | Title case, sentence case, or lower case |
michael@1 | 92 | Past tense, third person, style, usage... |
michael@1 | 93 | Make consistent when version is shown in titlebar of all dialogs |
michael@1 | 94 | Runtime help system should not depend on installtime documentation |
michael@1 | 95 | App should start even if no accounts file is found |
michael@1 | 96 | Fully vimize all input widgets by subclassing them (w - back word) |
michael@1 | 97 | Reload accountlist on startup, but reload during 'Open Doc' as well |
michael@1 | 98 | Better file validation, instead of just single line validateData op |
michael@1 | 99 | Freetext field, for copyright or some announcement (this data isn't |
michael@1 | 100 | accurate enough for billing purposes). Field can be optionally |
michael@1 | 101 | shown above main table, but always dimmed to avoid accidental edit. |
michael@1 | 102 | Check for account list updates (checkbox), to allow a local user to |
michael@1 | 103 | query a CORBA or SOAP server for a new account list via accessors: |
michael@1 | 104 | U32 Account::getCrc(void) |
michael@1 | 105 | Acctlist Account::getData(void) |
michael@1 | 106 | Reimplement void QTable::swapRows, so that rows can be moved easily |
michael@1 | 107 | Update edit controls only after return from TiTable::createEditor() |
michael@1 | 108 | |
michael@12 | 109 | Appealing billing features |
michael@12 | 110 | -------------------------- |
michael@12 | 111 | 'Billable' column checkbox |
michael@12 | 112 | Chroot type reporting (for a single customer) |
michael@12 | 113 | |
michael@1 | 114 | Screwey user notes ;-) |
michael@1 | 115 | ---------------------- |
michael@1 | 116 | cs: 'd' should not delete at once but flag the record as deleted. Use '$' to sync (similar to mutt) |
michael@1 | 117 | cs: first 'TAB' should complete (if possible), second 'TAB' should open selection box (similar to bash) |
michael@1 | 118 | cs: line numberscould be referenced when entering accounts ala bash history ('!4' = record #4) |
michael@1 | 119 | mlelstv: 24:00 muss als Valideintrag im Finishfeld erlaubt |
michael@1 | 120 | thl: / should enable the user to search for something |
michael@1 | 121 | thl: using = should force a recalculation for a time field |
michael@1 | 122 | thl: using ~ should round a time field to the next quarter (configurable) |
michael@1 | 123 | |
michael@1 | 124 | Architectural |
michael@1 | 125 | ------------- |
michael@1 | 126 | Decouple form, preferences, and RPC classes |
michael@1 | 127 | Remove common class behaviours (quitApp, close...) to abstract classes |
michael@1 | 128 | |
michael@1 | 129 | Win32 |
michael@1 | 130 | ----- |
michael@1 | 131 | Rework username, homedir, and confdaten (hive) logic |
michael@1 | 132 | |
michael@1 | 133 | Preferences |
michael@1 | 134 | ----------- |
michael@1 | 135 | <option name wert> Hintergrund Functionalitaet |
michael@1 | 136 | <aspect name wert> Sichtliche Functionalitaet |
michael@1 | 137 | <session name wert> Automatisch gespeicherte |
michael@1 | 138 | <rule name expr cond> Amount = Finish - Start (mussen alle da z.B.) |
michael@1 | 139 | <alias name wert> Nutzbar lange Taskzeilen zu abstrahieren |
michael@1 | 140 | <macro name = 'Reuse'> |
michael@1 | 141 | Selectiere aktuelle und 3 vorherige Reihen |
michael@1 | 142 | Copy |
michael@1 | 143 | Geh zu letzte Reihe |
michael@1 | 144 | Paste |
michael@1 | 145 | </macro name = 'Reuse'> |
michael@1 | 146 | <macro name = 'Append'> |
michael@1 | 147 | Geh zu letzte Reihe |
michael@1 | 148 | Zufug Reihe |
michael@1 | 149 | </macro name = 'Append'> |
michael@1 | 150 | |
michael@1 | 151 | Code snippits |
michael@1 | 152 | ------------- |
michael@1 | 153 | // Portable processes |
michael@1 | 154 | QProcess *Proc; |
michael@1 | 155 | Proc = new QProcess; |
michael@1 | 156 | Proc->setArguments("/usr/local/bin/nada"); |
michael@1 | 157 | bool ok = Proc->start(); |
michael@1 | 158 | |
michael@1 | 159 | > Does anyone know how to set the WhatsThis text for a QPushButton?. |
michael@1 | 160 | > |
michael@1 | 161 | > Met vriendelijke groet |
michael@1 | 162 | Use the static QWhatsThis::add() |
michael@1 | 163 | |
michael@1 | 164 | Document |
michael@1 | 165 | -------- |
michael@1 | 166 | Use doxygen for C++ interface documentation. |
michael@1 | 167 | |
michael@1 | 168 | Project plan |
michael@1 | 169 | ------------ |
michael@1 | 170 | Prototype |
michael@1 | 171 | Release v0.8 Milestone 1, Alpha |
michael@1 | 172 | Release v0.9 Milestone 2, Beta |
michael@1 | 173 | Release v1.0 Milestone 3, |
michael@1 | 174 | Release v1.2 Milestone 4, |
michael@1 | 175 | |
michael@1 | 176 | Requirements |
michael@1 | 177 | ------------ |
michael@1 | 178 | |
michael@1 | 179 | Deliverables |
michael@1 | 180 | ------------ |
michael@1 | 181 | Binaries |
michael@1 | 182 | titraq Verwendung |
michael@1 | 183 | |
michael@1 | 184 | Designdocs |
michael@1 | 185 | titraq_design.ps Systemdiagramme |
michael@1 | 186 | |
michael@1 | 187 | Manpage |
michael@1 | 188 | titraq.1 Hauptinfo |
michael@1 | 189 | titraq.conf.5 Beschreibung des Configdatei |
michael@1 | 190 | |
michael@1 | 191 | Geliefert |
michael@1 | 192 | titraq.conf Ausgekommentet Beispieldatei |
michael@1 | 193 | |
michael@1 | 194 | Pseudocode |
michael@1 | 195 | ---------- |
michael@1 | 196 | initialize |
michael@1 | 197 | parse command line |
michael@1 | 198 | parse titraq.conf file |
michael@1 | 199 | load titraq.dat file |
michael@1 | 200 | show control window |
michael@1 | 201 | wait for quit |
michael@1 | 202 | save titraq.dat file |
michael@1 | 203 | finish |
michael@1 | 204 | |
michael@1 | 205 | Test case |
michael@1 | 206 | --------- |
michael@1 | 207 | Pre: |
michael@1 | 208 | tar zxvf titraq-0.9.tar |
michael@1 | 209 | cd titraq-0.9 |
michael@1 | 210 | ./configure |
michael@1 | 211 | make |
michael@1 | 212 | su |
michael@1 | 213 | make install |
michael@1 | 214 | |
michael@1 | 215 | Assume: |
michael@1 | 216 | OS has Qt 3.0.6 or newer multithreaded library |
michael@1 | 217 | |
michael@1 | 218 | Begin: |
michael@1 | 219 | $ titraq |
michael@1 | 220 | |
michael@1 | 221 | Output: |
michael@1 | 222 | Post: |
michael@1 | 223 | Procedure: |
michael@1 | 224 | |
michael@1 | 225 | |
michael@1 | 226 | **************************** |
michael@1 | 227 | * * |
michael@1 | 228 | * Inadequacies of as-gui * |
michael@1 | 229 | * * |
michael@1 | 230 | **************************** |
michael@1 | 231 | |
michael@1 | 232 | Architecture Inconsistencies |
michael@1 | 233 | o Some custom classes are thinly veiled Qt classes. Others |
michael@1 | 234 | are completely different, but with similar functionality. |
michael@1 | 235 | o Several classes are immense, and should be split into |
michael@1 | 236 | into easier to read pieces. |
michael@1 | 237 | o Some classes should be abstracted and new subclasses built. |
michael@1 | 238 | |
michael@1 | 239 | Implementation |
michael@1 | 240 | o Too procedural for my taste. Many methods should be merged |
michael@1 | 241 | or split and grouped into new classes or such. |
michael@1 | 242 | |
michael@1 | 243 | Naming |
michael@1 | 244 | o Hungarian notation is only used to 90% potential. |
michael@1 | 245 | o Inconsistent length and abbreviations. |
michael@1 | 246 | o Conventions suggested on Qt website not followed. |
michael@1 | 247 | |
michael@1 | 248 | Error handling |
michael@1 | 249 | o No standardized return values. |
michael@1 | 250 | o C++ exceptions used inconsistently. |
michael@1 | 251 | |
michael@1 | 252 | Memory handling |
michael@1 | 253 | o Smart pointers should be used in all exception code blocks. |
michael@1 | 254 | o A consistent policy of automatic versus dynamic pointer |
michael@1 | 255 | variables should be used in all classes. |