summaryrefslogtreecommitdiff
authorzecke <zecke>2002-04-14 15:14:03 (UTC)
committer zecke <zecke>2002-04-14 15:14:03 (UTC)
commita0fe593db4e700989cc19e28b67a58f87823afeb (patch) (unidiff)
tree1a369409be81aa0feb15899b56adda6ec12b2591
parent16dd1d47d51e6307be8d89d36571115cb7c8788c (diff)
downloadopie-a0fe593db4e700989cc19e28b67a58f87823afeb.zip
opie-a0fe593db4e700989cc19e28b67a58f87823afeb.tar.gz
opie-a0fe593db4e700989cc19e28b67a58f87823afeb.tar.bz2
-menu restructure ( closer to the Zaurus)
-first Part of restoring journal I need to rewrite the whole crap later qt journaled on a row basis which doesn't work anymore cause of flexible sorting -something I forgot ;)
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/todo/mainwindow.cpp106
-rw-r--r--core/pim/todo/mainwindow.h14
-rw-r--r--core/pim/todo/todotable.cpp148
-rw-r--r--core/pim/todo/todotable.h7
4 files changed, 238 insertions, 37 deletions
diff --git a/core/pim/todo/mainwindow.cpp b/core/pim/todo/mainwindow.cpp
index b5cace9..883d78c 100644
--- a/core/pim/todo/mainwindow.cpp
+++ b/core/pim/todo/mainwindow.cpp
@@ -103,113 +103,153 @@ TodoWindow::TodoWindow( QWidget *parent, const char *name, WFlags f = 0 ) :
103 103
104 setCentralWidget( table ); 104 setCentralWidget( table );
105 setToolBarsMovable( FALSE ); 105 setToolBarsMovable( FALSE );
106 106
107// qDebug("after load: t=%d", t.elapsed() ); 107// qDebug("after load: t=%d", t.elapsed() );
108 108
109 Config config( "todo" ); 109 Config config( "todo" );
110 config.setGroup( "View" ); 110 config.setGroup( "View" );
111 bool complete = config.readBoolEntry( "ShowComplete", true ); 111 bool complete = config.readBoolEntry( "ShowComplete", true );
112 table->setShowCompleted( complete ); 112 table->setShowCompleted( complete );
113 113
114 bool showdeadline = config.readBoolEntry("ShowDeadLine", true); 114 bool showdeadline = config.readBoolEntry("ShowDeadLine", true);
115 table->setShowDeadline (showdeadline); 115 table->setShowDeadline (showdeadline);
116 116
117 QString category = config.readEntry( "Category", QString::null ); 117 QString category = config.readEntry( "Category", QString::null );
118 table->setShowCategory( category ); 118 table->setShowCategory( category );
119 119
120 QPEToolBar *bar = new QPEToolBar( this ); 120 QPEToolBar *bar = new QPEToolBar( this );
121 bar->setHorizontalStretchable( TRUE ); 121 bar->setHorizontalStretchable( TRUE );
122 122
123 QPEMenuBar *mb = new QPEMenuBar( bar ); 123 QPEMenuBar *mb = new QPEMenuBar( bar );
124 124
125 catMenu = new QPopupMenu( this ); 125 catMenu = new QPopupMenu( this );
126 QPopupMenu *edit = new QPopupMenu( this ); 126 QPopupMenu *edit = new QPopupMenu( this );
127 QPopupMenu *options = new QPopupMenu(this );
128
127 contextMenu = new QPopupMenu( this ); 129 contextMenu = new QPopupMenu( this );
128 130
129 bar = new QPEToolBar( this ); 131 bar = new QPEToolBar( this );
130 132
131 QAction *a = new QAction( tr( "New Task" ), Resource::loadPixmap( "new" ), 133 QAction *a = new QAction( tr( "New Task" ), Resource::loadPixmap( "new" ),
132 QString::null, 0, this, 0 ); 134 QString::null, 0, this, 0 );
133 connect( a, SIGNAL( activated() ), 135 connect( a, SIGNAL( activated() ),
134 this, SLOT( slotNew() ) ); 136 this, SLOT( slotNew() ) );
135 a->addTo( bar ); 137 a->addTo( bar );
136 a->addTo( edit ); 138 a->addTo( edit );
137 139
138 a = new QAction( tr( "Edit" ), Resource::loadIconSet( "edit" ), 140 a = new QAction( tr( "Edit Task" ), Resource::loadIconSet( "edit" ),
139 QString::null, 0, this, 0 ); 141 QString::null, 0, this, 0 );
140 connect( a, SIGNAL( activated() ), 142 connect( a, SIGNAL( activated() ),
141 this, SLOT( slotEdit() ) ); 143 this, SLOT( slotEdit() ) );
142 a->addTo( bar ); 144 a->addTo( bar );
143 a->addTo( edit ); 145 a->addTo( edit );
144 a->addTo( contextMenu ); 146 a->addTo( contextMenu );
145 a->setEnabled( FALSE ); 147 a->setEnabled( FALSE );
146 editAction = a; 148 editAction = a;
149 edit->insertSeparator();
147 150
148 a = new QAction( tr( "Delete" ), Resource::loadIconSet( "trash" ), 151 a = new QAction( tr( "Delete..." ), Resource::loadIconSet( "trash" ),
149 QString::null, 0, this, 0 ); 152 QString::null, 0, this, 0 );
150 connect( a, SIGNAL( activated() ), 153 connect( a, SIGNAL( activated() ),
151 this, SLOT( slotDelete() ) ); 154 this, SLOT( slotDelete() ) );
152 a->addTo( bar ); 155 a->addTo( bar );
153 a->addTo( edit ); 156 a->addTo( edit );
154 a->addTo( contextMenu ); 157 a->addTo( contextMenu );
155 a->setEnabled( FALSE ); 158 a->setEnabled( FALSE );
156 deleteAction = a; 159 deleteAction = a;
157 160
161 // delete All in category is missing....
162 // set All Done
163 // set All Done in category
164
165 a = new QAction( QString::null, tr( "Delete all..."), 0, this, 0 );
166 connect(a, SIGNAL( activated() ),
167 this, SLOT( slotDeleteAll() ) );
168 a->addTo(edit );
169 a->setEnabled( FALSE );
170 deleteAllAction = a;
171
172 edit->insertSeparator();
173 a = new QAction( QString::null, tr("Duplicate" ), 0, this, 0 );
174 connect(a, SIGNAL( activated() ),
175 this, SLOT( slotDuplicate() ) );
176 a->addTo(edit );
177 a->setEnabled( FALSE );
178 duplicateAction = a;
179
180 edit->insertSeparator();
158 if ( Ir::supported() ) { 181 if ( Ir::supported() ) {
159 a = new QAction( tr( "Beam" ), Resource::loadPixmap( "beam" ), 182 a = new QAction( tr( "Beam" ), Resource::loadPixmap( "beam" ),
160 QString::null, 0, this, 0 ); 183 QString::null, 0, this, 0 );
161 connect( a, SIGNAL( activated() ), 184 connect( a, SIGNAL( activated() ),
162 this, SLOT( slotBeam() ) ); 185 this, SLOT( slotBeam() ) );
163 a->addTo( edit ); 186 a->addTo( edit );
164 a->addTo( bar ); 187 a->addTo( bar );
165 } 188 }
166 189
167 a = new QAction( tr( "Find" ), Resource::loadIconSet( "mag" ), 190 a = new QAction( tr( "Find" ), Resource::loadIconSet( "mag" ),
168 QString::null, 0, this, 0 ); 191 QString::null, 0, this, 0 );
169 connect( a, SIGNAL( activated() ), 192 connect( a, SIGNAL( activated() ),
170 this, SLOT( slotFind() ) ); 193 this, SLOT( slotFind() ) );
171 a->addTo( bar ); 194 a->addTo( bar );
172 a->addTo( edit ); 195 a->addTo( options );
196 options->insertSeparator();
197
173 if ( table->numRows() ) 198 if ( table->numRows() )
174 a->setEnabled( TRUE ); 199 a->setEnabled( TRUE );
175 else 200 else
176 a->setEnabled( FALSE ); 201 a->setEnabled( FALSE );
177 202
178 //a->setEnabled( FALSE ); 203 //a->setEnabled( FALSE );
179 findAction = a; 204 findAction = a;
180// qDebug("mainwindow #2: t=%d", t.elapsed() ); 205// qDebug("mainwindow #2: t=%d", t.elapsed() );
181 206
182 completedAction = new QAction( QString::null, tr("Completed tasks"), 0, this, 0, TRUE ); 207 completedAction = new QAction( QString::null, tr("Completed tasks"), 0, this, 0, TRUE );
183 208
184 showdeadlineAction = new QAction( QString::null, tr( "Show Deadline" ), 0, this, 0, TRUE ); 209 showdeadlineAction = new QAction( QString::null, tr( "Show Deadline" ), 0, this, 0, TRUE );
185 210
186 catMenu->setCheckable( true ); 211 catMenu->setCheckable( true );
187 populateCategories(); 212 populateCategories();
188 213
189 mb->insertItem( tr( "Data" ), edit ); 214
190 mb->insertItem( tr( "View" ), catMenu ); 215 completedAction->addTo( options );
216 completedAction->setOn( table->showCompleted() );
217 showdeadlineAction->addTo( options );
218 showdeadlineAction->setOn( table->showDeadline() );
219 options->insertSeparator( );
220 QList<QWidget> list;
221 list.append(table );
222 OFontMenu *menu = new OFontMenu(this, "menu",list );
223 menu->forceSize( table->horizontalHeader(), 10 );
224 //catMenu->insertItem(tr("Fonts"), menu );
225 list.clear();
226 options->insertItem( tr("Fonts"), menu );
227
191 228
229 mb->insertItem( tr( "Data" ), edit );
230 mb->insertItem( tr( "Category" ), catMenu );
231 mb->insertItem( tr( "Options"), options );
192 resize( 200, 300 ); 232 resize( 200, 300 );
193 if ( table->numRows() > 0 ) 233 if ( table->numRows() > 0 )
194 currentEntryChanged( 0, 0 ); 234 currentEntryChanged( 0, 0 );
195 connect( table, SIGNAL( signalEdit() ), 235 connect( table, SIGNAL( signalEdit() ),
196 this, SLOT( slotEdit() ) ); 236 this, SLOT( slotEdit() ) );
197 connect( table, SIGNAL(signalShowMenu(const QPoint &)), 237 connect( table, SIGNAL(signalShowMenu(const QPoint &)),
198 this, SLOT( slotShowPopup(const QPoint &)) ); 238 this, SLOT( slotShowPopup(const QPoint &)) );
199 239
200// qDebug("mainwindow #3: t=%d", t.elapsed() ); 240// qDebug("mainwindow #3: t=%d", t.elapsed() );
201 table->updateVisible(); 241 table->updateVisible();
202 table->setUpdatesEnabled( TRUE ); 242 table->setUpdatesEnabled( TRUE );
203 table->setPaintingEnabled( TRUE ); 243 table->setPaintingEnabled( TRUE );
204 table->viewport()->setUpdatesEnabled( TRUE ); 244 table->viewport()->setUpdatesEnabled( TRUE );
205 245
206 connect( completedAction, SIGNAL( toggled(bool) ), this, SLOT( showCompleted(bool) ) ); 246 connect( completedAction, SIGNAL( toggled(bool) ), this, SLOT( showCompleted(bool) ) );
207 connect( showdeadlineAction, SIGNAL( toggled(bool) ), this, SLOT( showDeadline(bool) ) ); 247 connect( showdeadlineAction, SIGNAL( toggled(bool) ), this, SLOT( showDeadline(bool) ) );
208 connect( catMenu, SIGNAL(activated(int)), this, SLOT(setCategory(int)) ); 248 connect( catMenu, SIGNAL(activated(int)), this, SLOT(setCategory(int)) );
209 connect( table, SIGNAL( currentChanged( int, int ) ), 249 connect( table, SIGNAL( currentChanged( int, int ) ),
210 this, SLOT( currentEntryChanged( int, int ) ) ); 250 this, SLOT( currentEntryChanged( int, int ) ) );
211 251
212// qDebug("done: t=%d", t.elapsed() ); 252// qDebug("done: t=%d", t.elapsed() );
213} 253}
214 254
215void TodoWindow::slotNew() 255void TodoWindow::slotNew()
@@ -258,143 +298,171 @@ void TodoWindow::slotDelete()
258 QMessageBox::warning(this, tr("Todo"), 298 QMessageBox::warning(this, tr("Todo"),
259 tr("Can not edit data, currently syncing")); 299 tr("Can not edit data, currently syncing"));
260 return; 300 return;
261 } 301 }
262 302
263 if ( table->currentRow() == -1 ) 303 if ( table->currentRow() == -1 )
264 return; 304 return;
265 305
266 QString strName = table->text( table->currentRow(), 2 ).left( 30 ); 306 QString strName = table->text( table->currentRow(), 2 ).left( 30 );
267 307
268 if ( !QPEMessageBox::confirmDelete( this, tr( "Todo" ), strName ) ) 308 if ( !QPEMessageBox::confirmDelete( this, tr( "Todo" ), strName ) )
269 return; 309 return;
270 310
271 311
272 312
273 table->setPaintingEnabled( false ); 313 table->setPaintingEnabled( false );
274 table->removeCurrentEntry(); 314 table->removeCurrentEntry();
275 table->setPaintingEnabled( true ); 315 table->setPaintingEnabled( true );
276 316
277 if ( table->numRows() == 0 ) { 317 if ( table->numRows() == 0 ) {
278 currentEntryChanged( -1, 0 ); 318 currentEntryChanged( -1, 0 );
279 findAction->setEnabled( FALSE ); 319 findAction->setEnabled( FALSE );
280 } 320 }
281} 321}
322void TodoWindow::slotDeleteAll()
323{
324 if(syncing) {
325 QMessageBox::warning(this, tr("Todo"),
326 tr("Can not edit data, currently syncing"));
327 return;
328 }
329
330 //QString strName = table->text( table->currentRow(), 2 ).left( 30 );
331
332 if ( !QPEMessageBox::confirmDelete( this, tr( "Todo" ), tr("Should I delete all tasks?") ) )
333 return;
334
335
336
337 table->setPaintingEnabled( false );
338 table->removeAllEntries();
339 table->setPaintingEnabled( true );
340
341 if ( table->numRows() == 0 ) {
342 currentEntryChanged( -1, 0 );
343 findAction->setEnabled( FALSE );
344 }
345}
282 346
283void TodoWindow::slotEdit() 347void TodoWindow::slotEdit()
284{ 348{
285 if(syncing) { 349 if(syncing) {
286 QMessageBox::warning(this, tr("Todo"), 350 QMessageBox::warning(this, tr("Todo"),
287 tr("Can not edit data, currently syncing")); 351 tr("Can not edit data, currently syncing"));
288 return; 352 return;
289 } 353 }
290 354
291 ToDoEvent todo = table->currentEntry(); 355 ToDoEvent todo = table->currentEntry();
292 356
293 NewTaskDialog e( todo, this, 0, TRUE ); 357 NewTaskDialog e( todo, this, 0, TRUE );
294 e.setCaption( tr( "Edit Task" ) ); 358 e.setCaption( tr( "Edit Task" ) );
295 359
296#if defined(Q_WS_QWS) || defined(_WS_QWS_) 360#if defined(Q_WS_QWS) || defined(_WS_QWS_)
297 e.showMaximized(); 361 e.showMaximized();
298#endif 362#endif
299 int ret = e.exec(); 363 int ret = e.exec();
300 364
301 if ( ret == QDialog::Accepted ) { 365 if ( ret == QDialog::Accepted ) {
302 table->setPaintingEnabled( false ); 366 table->setPaintingEnabled( false );
303 todo = e.todoEntry(); 367 todo = e.todoEntry();
304 table->replaceCurrentEntry( todo ); 368 table->replaceCurrentEntry( todo );
305 table->setPaintingEnabled( true ); 369 table->setPaintingEnabled( true );
306 } 370 }
307 populateCategories(); 371 populateCategories();
308 372
309} 373}
310 374void TodoWindow::slotDuplicate()
375{
376 if(syncing) {
377 QMessageBox::warning(this, tr("Todo"),
378 tr("Can not edit data, currently syncing"));
379 return;
380 }
381 ToDoEvent ev = table->currentEntry();
382 ToDoEvent ev2 = ToDoEvent( ev );
383 table->setPaintingEnabled( false );
384 table->addEntry( ev2 );
385 table->setPaintingEnabled( true );
386}
311void TodoWindow::slotShowPopup( const QPoint &p ) 387void TodoWindow::slotShowPopup( const QPoint &p )
312{ 388{
313 contextMenu->popup( p ); 389 contextMenu->popup( p );
314} 390}
315 391
316void TodoWindow::showCompleted( bool s ) 392void TodoWindow::showCompleted( bool s )
317{ 393{
318 if ( !table->isUpdatesEnabled() ) 394 if ( !table->isUpdatesEnabled() )
319 return; 395 return;
320 table->setPaintingEnabled( false ); 396 table->setPaintingEnabled( false );
321 table->setShowCompleted( s ); 397 table->setShowCompleted( s );
322 table->setPaintingEnabled( true ); 398 table->setPaintingEnabled( true );
323} 399}
324 400
325void TodoWindow::currentEntryChanged( int r, int ) 401void TodoWindow::currentEntryChanged( int r, int )
326{ 402{
327 if ( r != -1 && table->rowHeight( r ) > 0 ) { 403 if ( r != -1 && table->rowHeight( r ) > 0 ) {
328 editAction->setEnabled( TRUE ); 404 editAction->setEnabled( TRUE );
329 deleteAction->setEnabled( TRUE ); 405 deleteAction->setEnabled( TRUE );
406 duplicateAction->setEnabled( TRUE );
407 deleteAllAction->setEnabled( TRUE );
330 } else { 408 } else {
331 editAction->setEnabled( FALSE ); 409 editAction->setEnabled( FALSE );
332 deleteAction->setEnabled( FALSE ); 410 deleteAction->setEnabled( FALSE );
411 duplicateAction->setEnabled( FALSE );
412 deleteAllAction->setEnabled( FALSE );
333 } 413 }
334} 414}
335 415
336void TodoWindow::setCategory( int c ) 416void TodoWindow::setCategory( int c )
337{ 417{
338 if ( c <= 0 ) return; 418 if ( c <= 0 ) return;
339 if ( !table->isUpdatesEnabled() ) 419 if ( !table->isUpdatesEnabled() )
340 return; 420 return;
341 table->setPaintingEnabled( false ); 421 table->setPaintingEnabled( false );
342 for ( unsigned int i = 1; i < catMenu->count(); i++ ) 422 for ( unsigned int i = 1; i < catMenu->count(); i++ )
343 catMenu->setItemChecked( i, c == (int)i ); 423 catMenu->setItemChecked( i, c == (int)i );
344 if ( c == 1 ) { 424 if ( c == 1 ) {
345 table->setShowCategory( QString::null ); 425 table->setShowCategory( QString::null );
346 setCaption( tr("Todo") + " - " + tr( "All Categories" ) ); 426 setCaption( tr("Todo") + " - " + tr( "All Categories" ) );
347 } else if ( c == (int)catMenu->count() - 1 ) { 427 } else if ( c == (int)catMenu->count() - 1 ) {
348 table->setShowCategory( tr( "Unfiled" ) ); 428 table->setShowCategory( tr( "Unfiled" ) );
349 setCaption( tr("Todo") + " - " + tr( "Unfiled" ) ); 429 setCaption( tr("Todo") + " - " + tr( "Unfiled" ) );
350 } else { 430 } else {
351 QString cat = table->categories()[c - 2]; 431 QString cat = table->categories()[c - 2];
352 table->setShowCategory( cat ); 432 table->setShowCategory( cat );
353 setCaption( tr("Todo") + " - " + cat ); 433 setCaption( tr("Todo") + " - " + cat );
354 } 434 }
355 table->setPaintingEnabled( true ); 435 table->setPaintingEnabled( true );
356} 436}
357 437
358void TodoWindow::populateCategories() 438void TodoWindow::populateCategories()
359{ 439{
360 catMenu->clear(); 440 catMenu->clear();
361
362 QList<QWidget> list;
363 list.append(table );
364 OFontMenu *menu = new OFontMenu(this, "menu",list );
365 menu->forceSize( table->horizontalHeader(), 10 );
366 catMenu->insertItem(tr("Fonts"), menu );
367
368 completedAction->addTo( catMenu );
369 completedAction->setOn( table->showCompleted() );
370 showdeadlineAction->addTo( catMenu );
371 showdeadlineAction->setOn( table->showDeadline() );
372 catMenu->insertSeparator();
373 int id, rememberId; 441 int id, rememberId;
374 id = 1; 442 id = 1;
375 catMenu->insertItem( tr( "All Categories" ), id++ ); 443 catMenu->insertItem( tr( "All Categories" ), id++ );
376// catMenu->insertSeparator(); 444 catMenu->insertSeparator();
377 QStringList categories = table->categories(); 445 QStringList categories = table->categories();
378 categories.append( tr( "Unfiled" ) ); 446 categories.append( tr( "Unfiled" ) );
379 for ( QStringList::Iterator it = categories.begin(); 447 for ( QStringList::Iterator it = categories.begin();
380 it != categories.end(); ++it ) { 448 it != categories.end(); ++it ) {
381 catMenu->insertItem( *it, id ); 449 catMenu->insertItem( *it, id );
382 if ( *it == table->showCategory() ) 450 if ( *it == table->showCategory() )
383 rememberId = id; 451 rememberId = id;
384 ++id; 452 ++id;
385 } 453 }
386 if ( table->showCategory().isEmpty() ) 454 if ( table->showCategory().isEmpty() )
387 setCategory( 1 ); 455 setCategory( 1 );
388 else 456 else
389 setCategory( rememberId ); 457 setCategory( rememberId );
390} 458}
391 459
392void TodoWindow::reload() 460void TodoWindow::reload()
393{ 461{
394 table->clear(); 462 table->clear();
395 table->load( todolistXMLFilename() ); 463 table->load( todolistXMLFilename() );
396 syncing = FALSE; 464 syncing = FALSE;
397} 465}
398 466
399void TodoWindow::flush() 467void TodoWindow::flush()
400{ 468{
diff --git a/core/pim/todo/mainwindow.h b/core/pim/todo/mainwindow.h
index 9be7c66..b9172e1 100644
--- a/core/pim/todo/mainwindow.h
+++ b/core/pim/todo/mainwindow.h
@@ -37,46 +37,50 @@ class TodoWindow : public QMainWindow
37public: 37public:
38 TodoWindow( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); 38 TodoWindow( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
39 ~TodoWindow(); 39 ~TodoWindow();
40 40
41public slots: 41public slots:
42 void flush(); 42 void flush();
43 void reload(); 43 void reload();
44 44
45protected slots: 45protected slots:
46 void slotNew(); 46 void slotNew();
47 void slotDelete(); 47 void slotDelete();
48 void slotEdit(); 48 void slotEdit();
49 void slotShowPopup( const QPoint & ); 49 void slotShowPopup( const QPoint & );
50 void showCompleted( bool ); 50 void showCompleted( bool );
51 51
52 /* added 20.01.2k2 by se */ 52 /* added 20.01.2k2 by se */
53 void showDeadline( bool ); 53 void showDeadline( bool );
54 54
55 void currentEntryChanged( int r, int c ); 55 void currentEntryChanged( int r, int c );
56 void setCategory( int ); 56 void setCategory( int );
57 void slotFind(); 57 void slotFind();
58 void setDocument( const QString & ); 58 void setDocument( const QString & );
59 void slotBeam(); 59 void slotBeam();
60 void beamDone( Ir * ); 60 void beamDone( Ir * );
61 61 void slotDeleteAll();
62 void slotDuplicate();
63
62protected: 64protected:
63 void closeEvent( QCloseEvent *e ); 65 void closeEvent( QCloseEvent *e );
64 66
65private: 67private:
66 void populateCategories(); 68 void populateCategories();
67 69
68private: 70private:
69 TodoTable *table; 71 TodoTable *table;
70 QAction *editAction, 72 QAction *editAction,
71 *deleteAction, 73 *deleteAction,
72 *findAction, 74 *findAction,
73 * completedAction, 75 *completedAction,
74 *showdeadlineAction ; 76 *showdeadlineAction,
77 *deleteAllAction,
78 *duplicateAction;
75 QPopupMenu *contextMenu, *catMenu; 79 QPopupMenu *contextMenu, *catMenu;
76 80
77 bool syncing; 81 bool syncing;
78}; 82};
79 83
80#endif 84#endif
81 85
82 86
diff --git a/core/pim/todo/todotable.cpp b/core/pim/todo/todotable.cpp
index 2acd03c..401d2c8 100644
--- a/core/pim/todo/todotable.cpp
+++ b/core/pim/todo/todotable.cpp
@@ -1,73 +1,77 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20/* Show Deadline was added by Stefan Eilers (se, eilers.stefan@epost.de) 20/* Show Deadline was added by Stefan Eilers (se, eilers.stefan@epost.de)
21 */ 21 */
22#include "todotable.h" 22#include "todotable.h"
23 23
24#include <opie/tododb.h> 24#include <opie/tododb.h>
25#include <opie/xmltree.h>
26
25#include <qpe/categoryselect.h> 27#include <qpe/categoryselect.h>
26#include <qpe/xmlreader.h> 28#include <qpe/xmlreader.h>
27 29
28#include <qasciidict.h> 30#include <qasciidict.h>
29#include <qcombobox.h> 31#include <qcombobox.h>
30#include <qfile.h> 32#include <qfile.h>
31#include <qpainter.h> 33#include <qpainter.h>
32#include <qtextcodec.h> 34#include <qtextcodec.h>
33#include <qtimer.h> 35#include <qtimer.h>
34#include <qdatetime.h> 36#include <qdatetime.h>
37#include <qtextstream.h>
35 38
36#include <qcursor.h> 39#include <qcursor.h>
37#include <qregexp.h> 40#include <qregexp.h>
38 41
39#include <errno.h> 42#include <errno.h>
40#include <stdlib.h> 43#include <stdlib.h>
41 44
42#include <stdio.h> 45#include <stdio.h>
46#include <iostream>
43 47
48namespace {
44 49
45 50 static bool taskCompare( const ToDoEvent &task, const QRegExp &r, int category );
46static bool taskCompare( const ToDoEvent &task, const QRegExp &r, int category ); 51 static QString journalFileName();
47 52 static ToDoEvent xmlToEvent( XMLElement *ev );
48static QString journalFileName(); 53}
49
50CheckItem::CheckItem( QTable *t, const QString &key ) 54CheckItem::CheckItem( QTable *t, const QString &key )
51 : QTableItem( t, Never, "" ), checked( FALSE ), sortKey( key ) 55 : QTableItem( t, Never, "" ), checked( FALSE ), sortKey( key )
52{ 56{
53} 57}
54 58
55QString CheckItem::key() const 59QString CheckItem::key() const
56{ 60{
57 return sortKey; 61 return sortKey;
58} 62}
59 63
60void CheckItem::setChecked( bool b ) 64void CheckItem::setChecked( bool b )
61{ 65{
62 checked = b; 66 checked = b;
63 table()->updateCell( row(), col() ); 67 table()->updateCell( row(), col() );
64} 68}
65 69
66void CheckItem::toggle() 70void CheckItem::toggle()
67{ 71{
68 TodoTable *parent = static_cast<TodoTable*>(table()); 72 TodoTable *parent = static_cast<TodoTable*>(table());
69 ToDoEvent newTodo = parent->currentEntry(); 73 ToDoEvent newTodo = parent->currentEntry();
70 checked = !checked; 74 checked = !checked;
71 newTodo.setCompleted( checked ); 75 newTodo.setCompleted( checked );
72 table()->updateCell( row(), col() ); 76 table()->updateCell( row(), col() );
73 parent->replaceCurrentEntry( newTodo, true ); 77 parent->replaceCurrentEntry( newTodo, true );
@@ -388,86 +392,85 @@ bool TodoTable::save( const QString &fn )
388 ToDoEvent *todo = *it; 392 ToDoEvent *todo = *it;
389 // sync item with table 393 // sync item with table
390 todo->setCompleted( ((CheckItem*)item(it.key()->row(), 0))->isChecked() ); 394 todo->setCompleted( ((CheckItem*)item(it.key()->row(), 0))->isChecked() );
391 todo->setPriority( ((ComboItem*)item( it.key()->row(), 1))->text().toInt() ); 395 todo->setPriority( ((ComboItem*)item( it.key()->row(), 1))->text().toInt() );
392 todoDB.addEvent( *todo ); 396 todoDB.addEvent( *todo );
393 } 397 }
394 if(!todoDB.save() ){ 398 if(!todoDB.save() ){
395 QFile::remove( strNewFile ); 399 QFile::remove( strNewFile );
396 return false; 400 return false;
397 }; 401 };
398 // now do the rename 402 // now do the rename
399 if ( ::rename( strNewFile, fn ) < 0 ) 403 if ( ::rename( strNewFile, fn ) < 0 )
400 qWarning( "problem renaming file %s to %s errno %d", 404 qWarning( "problem renaming file %s to %s errno %d",
401 strNewFile.latin1(), fn.latin1(), errno ); 405 strNewFile.latin1(), fn.latin1(), errno );
402 406
403 // remove the journal 407 // remove the journal
404 QFile::remove( journalFileName() ); 408 QFile::remove( journalFileName() );
405 return true; 409 return true;
406} 410}
407 411
408void TodoTable::load( const QString &fn ) 412void TodoTable::load( const QString &fn )
409{ 413{
410 loadFile( fn, false ); 414 loadFile( fn, false );
411 if ( QFile::exists(journalFileName()) ) { 415 if ( QFile::exists(journalFileName()) ) {
412 loadFile( journalFileName(), true ); 416 applyJournal( );
413 save( fn ); 417 save( fn );
414 } 418 }
415// QTable::sortColumn(2,TRUE,TRUE); 419// QTable::sortColumn(2,TRUE,TRUE);
416// QTable::sortColumn(1,TRUE,TRUE); 420// QTable::sortColumn(1,TRUE,TRUE);
417 QTable::sortColumn(0,TRUE,TRUE); 421 QTable::sortColumn(0,TRUE,TRUE);
418 setCurrentCell( 0, 2 ); 422 setCurrentCell( 0, 2 );
419 setSorting(true ); 423 setSorting(true );
420} 424}
421
422void TodoTable::updateVisible() 425void TodoTable::updateVisible()
423{ 426{
424 if ( !isUpdatesEnabled() ) 427 if ( !isUpdatesEnabled() )
425 return; 428 return;
426 429
427 if (showDeadl){ 430 if (showDeadl){
428 showColumn (3); 431 showColumn (3);
429 adjustColumn(3); 432 adjustColumn(3);
430 }else{ 433 }else{
431 hideColumn (3); 434 hideColumn (3);
432 adjustColumn(2); 435 adjustColumn(2);
433 } 436 }
434 437
435 int visible = 0; 438 int visible = 0;
436 int id = mCat.id( "Todo List", showCat ); 439 int id = mCat.id( "Todo List", showCat );
437 for ( int row = 0; row < numRows(); row++ ) { 440 for ( int row = 0; row < numRows(); row++ ) {
438 CheckItem *ci = (CheckItem *)item( row, 0 ); 441 CheckItem *ci = (CheckItem *)item( row, 0 );
439 ToDoEvent *t = todoList[ci]; 442 ToDoEvent *t = todoList[ci];
440 QArray<int> vlCats = t->categories(); 443 QArray<int> vlCats = t->categories();
441 bool hide = false; 444 bool hide = false;
442 if ( !showComp && ci->isChecked() ) 445 if ( !showComp && ci->isChecked() )
443 hide = true; 446 hide = true;
444 if ( !showCat.isEmpty() ) { 447 if ( !showCat.isEmpty() ) {
445 if ( showCat == tr( "Unfiled" ) ) { 448 if ( showCat == tr( "Unfiled" ) ) {
446 if ( vlCats.count() > 0 ) 449 if ( vlCats.count() > 0 )
447 hide = true; 450 hide = true;
448 } else { 451 } else {
449 // do some comparing, we have to reverse our idea here... which idea - zecke 452 // do some comparing, we have to reverse our idea here... which idea? - zecke
450 if ( !hide ) { 453 if ( !hide ) {
451 hide = true; 454 hide = true;
452 for ( uint it = 0; it < vlCats.count(); ++it ) { 455 for ( uint it = 0; it < vlCats.count(); ++it ) {
453 if ( vlCats[it] == id ) { 456 if ( vlCats[it] == id ) {
454 hide = false; 457 hide = false;
455 break; 458 break;
456 } 459 }
457 } 460 }
458 } 461 }
459 } 462 }
460 } 463 }
461 if ( hide ) { 464 if ( hide ) {
462 if ( currentRow() == row ) 465 if ( currentRow() == row )
463 setCurrentCell( -1, 0 ); 466 setCurrentCell( -1, 0 );
464 if ( rowHeight( row ) > 0 ) 467 if ( rowHeight( row ) > 0 )
465 hideRow( row ); 468 hideRow( row );
466 } else { 469 } else {
467 if ( rowHeight( row ) == 0 ) { 470 if ( rowHeight( row ) == 0 ) {
468 showRow( row ); 471 showRow( row );
469 adjustRow( row ); 472 adjustRow( row );
470 } 473 }
471 visible++; 474 visible++;
472 } 475 }
473 } 476 }
@@ -478,93 +481,111 @@ void TodoTable::updateVisible()
478void TodoTable::viewportPaintEvent( QPaintEvent *pe ) 481void TodoTable::viewportPaintEvent( QPaintEvent *pe )
479{ 482{
480 if ( enablePainting ) 483 if ( enablePainting )
481 QTable::viewportPaintEvent( pe ); 484 QTable::viewportPaintEvent( pe );
482} 485}
483 486
484void TodoTable::setPaintingEnabled( bool e ) 487void TodoTable::setPaintingEnabled( bool e )
485{ 488{
486 if ( e != enablePainting ) { 489 if ( e != enablePainting ) {
487 if ( !enablePainting ) { 490 if ( !enablePainting ) {
488 enablePainting = true; 491 enablePainting = true;
489 rowHeightChanged( 0 ); 492 rowHeightChanged( 0 );
490 viewport()->update(); 493 viewport()->update();
491 } else { 494 } else {
492 enablePainting = false; 495 enablePainting = false;
493 } 496 }
494 } 497 }
495} 498}
496 499
497void TodoTable::clear() 500void TodoTable::clear()
498{ 501{
499 for ( QMap<CheckItem*, ToDoEvent *>::Iterator it = todoList.begin(); 502 for ( QMap<CheckItem*, ToDoEvent *>::Iterator it = todoList.begin();
500 it != todoList.end(); ++it ) { 503 it != todoList.end(); ++it ) {
501 ToDoEvent *todo = *it; 504 ToDoEvent *todo = *it;
505 updateJournal( todo, ACTION_REMOVE, 0 );
502 delete todo; 506 delete todo;
503 } 507 }
504 todoList.clear(); 508 todoList.clear();
505 for ( int r = 0; r < numRows(); ++r ) { 509 for ( int r = 0; r < numRows(); ++r ) {
506 for ( int c = 0; c < numCols(); ++c ) { 510 for ( int c = 0; c < numCols(); ++c ) {
507 if ( cellWidget( r, c ) ) 511 if ( cellWidget( r, c ) )
508 clearCellWidget( r, c ); 512 clearCellWidget( r, c );
509 clearCell( r, c ); 513 clearCell( r, c );
510 } 514 }
511 } 515 }
512 setNumRows( 0 ); 516 setNumRows( 0 );
513} 517}
514 518
515void TodoTable::sortColumn( int col, bool ascending, bool /*wholeRows*/ ) 519void TodoTable::sortColumn( int col, bool ascending, bool /*wholeRows*/ )
516{ 520{
517 // The default for wholeRows is false, however 521 // The default for wholeRows is false, however
518 // for this todo table we want to exchange complete 522 // for this todo table we want to exchange complete
519 // rows when sorting. Also, we always want ascending, since 523 // rows when sorting. Also, we always want ascending, since
520 // the values have a logical order. 524 // the values have a logical order.
521 QTable::sortColumn( col, ascending, TRUE ); 525 QTable::sortColumn( col, ascending, TRUE );
522 updateVisible(); 526 updateVisible();
523} 527}
524 528
525void TodoTable::slotCheckPriority(int row, int col ) 529void TodoTable::slotCheckPriority(int row, int col )
526{ 530{
527 // kludgey work around to make forward along the updated priority... 531 // kludgey work around to make forward along the updated priority...
528 if ( col == 1 ) { 532 if ( col == 1 ) {
529 // let everyone know!! 533 // let everyone know!!
530 ComboItem* i = static_cast<ComboItem*>( item( row, col ) ); 534 ComboItem* i = static_cast<ComboItem*>( item( row, col ) );
531 emit signalPriorityChanged( i->text().toInt() ); 535 emit signalPriorityChanged( i->text().toInt() );
532 } 536 }
533} 537}
534 538
535 539
536void TodoTable::updateJournal( const ToDoEvent &/*todo*/, journal_action action, int row ) 540void TodoTable::updateJournal( const ToDoEvent &todo, journal_action action, int row )
537{ 541{
538 QFile f( journalFileName() ); 542 QFile f( journalFileName() );
539 if ( !f.open(IO_WriteOnly|IO_Append) ) 543 if ( !f.open(IO_WriteOnly|IO_Append) )
540 return; 544 return;
541 QString buf; 545 QString buf;
542 QCString str; 546 QCString str;
543 buf = "<Task"; 547 buf = "<Task";
544 // todo.save( buf ); 548 // todo.save( buf );
545 buf += " Action=\"" + QString::number( int(action) ) + "\""; 549 buf += " Action=\"" + QString::number( int(action) ) + "\"";
546 buf += " Row=\"" + QString::number( row ) + "\""; // better write the id 550 buf += " Uid=\"" + QString::number( todo.uid() ) + "\""; // better write the id
551 buf += " Completed=\""+ QString::number((int)todo.isCompleted() ) + "\"";
552 buf += " HasDate=\""+ QString::number((int)todo.hasDate() ) +"\"";
553 buf += " Priority=\"" + QString::number( todo.priority() ) + "\"";
554 QArray<int> arrat = todo.categories();
555 QString attr;
556 for(uint i=0; i < arrat.count(); i++ ){
557 attr.append(QString::number(arrat[i])+";" );
558 }
559 if(!attr.isEmpty() ) // remove the last ;
560 attr.remove(attr.length()-1, 1 );
561 buf += " Categories=\"" + attr + "\"";
562 buf += " Description=\"" + todo.description() + "\"";
563 if(todo.hasDate() ) {
564 buf += " DateYear=\""+QString::number( todo.date().year() ) + "\"";
565 buf += " DateMonth=\"" + QString::number( todo.date().month() ) + "\"";
566 buf += " DateDay=\"" + QString::number( todo.date().day() ) + "\"";
567 }
547 buf += "/>\n"; 568 buf += "/>\n";
548 str = buf.utf8(); 569 str = buf.utf8();
549 f.writeBlock( str.data(), str.length() ); 570 f.writeBlock( str.data(), str.length() );
550 f.close(); 571 f.close();
551} 572}
552 573
553void TodoTable::rowHeightChanged( int row ) 574void TodoTable::rowHeightChanged( int row )
554{ 575{
555 if ( enablePainting ) 576 if ( enablePainting )
556 QTable::rowHeightChanged( row ); 577 QTable::rowHeightChanged( row );
557} 578}
558 579
559void TodoTable::loadFile( const QString &strFile, bool fromJournal ) 580void TodoTable::loadFile( const QString &strFile, bool fromJournal )
560{ 581{
561 582
562 QList<ToDoEvent> list; 583 QList<ToDoEvent> list;
563 ToDoDB todoDB; 584 ToDoDB todoDB;
564 QValueList<ToDoEvent> vaList = todoDB.rawToDos(); 585 QValueList<ToDoEvent> vaList = todoDB.rawToDos();
565 for(QValueList<ToDoEvent>::ConstIterator it = vaList.begin(); it != vaList.end(); ++it ){ 586 for(QValueList<ToDoEvent>::ConstIterator it = vaList.begin(); it != vaList.end(); ++it ){
566 list.append( new ToDoEvent( (*it) ) ); 587 list.append( new ToDoEvent( (*it) ) );
567 } 588 }
568 vaList.clear(); 589 vaList.clear();
569 // qDebug("parsing done=%d", t.elapsed() ); 590 // qDebug("parsing done=%d", t.elapsed() );
570 if ( list.count() > 0 ) { 591 if ( list.count() > 0 ) {
@@ -694,68 +715,171 @@ void TodoTable::slotDoFind( const QString &findString, bool caseSensitive,
694 emit signalNotFound(); 715 emit signalNotFound();
695 wrapAround = !wrapAround; 716 wrapAround = !wrapAround;
696 } else { 717 } else {
697 currFindRow = row; 718 currFindRow = row;
698 QTableSelection foundSelection; 719 QTableSelection foundSelection;
699 foundSelection.init( currFindRow, 0 ); 720 foundSelection.init( currFindRow, 0 );
700 foundSelection.expandTo( currFindRow, numCols() - 1 ); 721 foundSelection.expandTo( currFindRow, numCols() - 1 );
701 addSelection( foundSelection ); 722 addSelection( foundSelection );
702 setCurrentCell( currFindRow, numCols() - 1 ); 723 setCurrentCell( currFindRow, numCols() - 1 );
703 // we should always be able to wrap around and find this again, 724 // we should always be able to wrap around and find this again,
704 // so don't give confusing not found message... 725 // so don't give confusing not found message...
705 wrapAround = true; 726 wrapAround = true;
706 } 727 }
707} 728}
708 729
709int TodoTable::showCategoryId() const 730int TodoTable::showCategoryId() const
710{ 731{
711 int id; 732 int id;
712 id = -1; 733 id = -1;
713 // if allcategories are selected, you get unfiled... 734 // if allcategories are selected, you get unfiled...
714 if ( showCat != tr( "Unfiled" ) && showCat != tr( "All" ) ) 735 if ( showCat != tr( "Unfiled" ) && showCat != tr( "All" ) )
715 id = mCat.id( "Todo List", showCat ); 736 id = mCat.id( "Todo List", showCat );
716 return id; 737 return id;
717} 738}
718 739void TodoTable::applyJournal()
740{
741 // we need to hack
742 QFile file( journalFileName() );
743 if( file.open(IO_ReadOnly ) ) {
744 QByteArray ar = file.readAll();
745 file.close();
746 QFile file2( journalFileName() + "_new" );
747 if( file2.open(IO_WriteOnly ) ){
748 QTextStream str(&file2 );
749 str << QString::fromLatin1("<Tasks>") << endl;
750 str << ar.data();
751 str << QString::fromLatin1("</Tasks>") << endl;
752 file2.close();
753 }
754 XMLElement *root = XMLElement::load(journalFileName()+ "_new");
755 XMLElement *el = root->firstChild();
756 el = el->firstChild();
757 while( el ){
758 qWarning("journal: %s %s", el->attribute("Uid" ).latin1(), el->tagName().latin1() );
759 doApply( el );
760 el = el->nextChild();
761 }
762 QFile::remove(journalFileName()+ "_new" );
763 }
764}
765// check Action and decide
766void TodoTable::doApply(XMLElement *el )
767{
768 QString dummy;
769 bool ok;
770 int action;
771 dummy = el->attribute("Action" );
772 action = dummy.toInt(&ok );
773 ToDoEvent ev = xmlToEvent( el );
774 if( ok ){
775 switch( action ){
776 case ACTION_ADD:
777 addEntry( ev );
778 break;
779 case ACTION_REMOVE:{ // find an entry with the same uid and remove it then
780 break;
781 }
782 case ACTION_REPLACE:
783 break;
784 }
785 }
786}
787namespace {
719static bool taskCompare( const ToDoEvent &task, const QRegExp &r, int category ) 788static bool taskCompare( const ToDoEvent &task, const QRegExp &r, int category )
720{ 789{
721 bool returnMe; 790 bool returnMe;
722 QArray<int> cats; 791 QArray<int> cats;
723 cats = task.categories(); 792 cats = task.categories();
724 793
725 returnMe = false; 794 returnMe = false;
726 if ( (category == -1 && cats.count() == 0) || category == -2 ) 795 if ( (category == -1 && cats.count() == 0) || category == -2 )
727 returnMe = task.match( r ); 796 returnMe = task.match( r );
728 else { 797 else {
729 int i; 798 int i;
730 for ( i = 0; i < int(cats.count()); i++ ) { 799 for ( i = 0; i < int(cats.count()); i++ ) {
731 if ( cats[i] == category ) { 800 if ( cats[i] == category ) {
732 returnMe = task.match( r ); 801 returnMe = task.match( r );
733 break; 802 break;
734 } 803 }
735 } 804 }
736 } 805 }
737 return returnMe; 806 return returnMe;
738} 807}
739 808
740static QString journalFileName() 809static QString journalFileName()
741{ 810{
742 QString str; 811 QString str;
743 str = getenv( "HOME" ); 812 str = getenv( "HOME" );
744 str += "/.todojournal"; 813 str += "/.opie_todojournal";
745 return str; 814 return str;
746} 815}
816static ToDoEvent xmlToEvent( XMLElement *element )
817{
818 QString dummy;
819 ToDoEvent event;
820 bool ok;
821 int dumInt;
822 // completed
823 dummy = element->attribute("Completed" );
824 dumInt = dummy.toInt(&ok );
825 if(ok ) event.setCompleted( dumInt == 0 ? false : true );
826 // hasDate
827 dummy = element->attribute("HasDate" );
828 dumInt = dummy.toInt(&ok );
829 if(ok ) event.setHasDate( dumInt == 0 ? false: true );
830 // set the date
831 bool hasDa = dumInt;
832 if ( hasDa ) { //parse the date
833 int year, day, month = 0;
834 year = day = month;
835 // year
836 dummy = element->attribute("DateYear" );
837 dumInt = dummy.toInt(&ok );
838 if( ok ) year = dumInt;
839 // month
840 dummy = element->attribute("DateMonth" );
841 dumInt = dummy.toInt(&ok );
842 if(ok ) month = dumInt;
843 dummy = element->attribute("DateDay" );
844 dumInt = dummy.toInt(&ok );
845 if(ok ) day = dumInt;
846 // set the date
847 QDate date( year, month, day );
848 event.setDate( date);
849 }
850 dummy = element->attribute("Priority" );
851 dumInt = dummy.toInt(&ok );
852 if(!ok ) dumInt = ToDoEvent::NORMAL;
853 event.setPriority( dumInt );
854 //description
855 dummy = element->attribute("Description" );
856 event.setDescription( dummy );
857 // category
858 dummy = element->attribute("Categories" );
859 QStringList ids = QStringList::split(";", dummy );
860 event.setCategories( ids );
861
862 //uid
863 dummy = element->attribute("Uid" );
864 dumInt = dummy.toInt(&ok );
865 if(ok ) event.setUid( dumInt );
866
867 return event;
868}
747 869
870}
748// int TodoTable::rowHeight( int ) const 871// int TodoTable::rowHeight( int ) const
749// { 872// {
750// return 18; 873// return 18;
751// } 874// }
752 875
753// int TodoTable::rowPos( int row ) const 876// int TodoTable::rowPos( int row ) const
754// { 877// {
755// return 18*row; 878// return 18*row;
756// } 879// }
757 880
758// int TodoTable::rowAt( int pos ) const 881// int TodoTable::rowAt( int pos ) const
759// { 882// {
760// return QMIN( pos/18, numRows()-1 ); 883// return QMIN( pos/18, numRows()-1 );
761// } 884// }
885
diff --git a/core/pim/todo/todotable.h b/core/pim/todo/todotable.h
index 32df514..6917e04 100644
--- a/core/pim/todo/todotable.h
+++ b/core/pim/todo/todotable.h
@@ -71,109 +71,114 @@ private:
71class TodoTextItem : public QTableItem 71class TodoTextItem : public QTableItem
72{ 72{
73public: 73public:
74 TodoTextItem( QTable *t, const QString & str ) 74 TodoTextItem( QTable *t, const QString & str )
75 :QTableItem( t, QTableItem::Never, str ) {} 75 :QTableItem( t, QTableItem::Never, str ) {}
76 76
77 QString key () const { return Qtopia::buildSortKey( text() ); } 77 QString key () const { return Qtopia::buildSortKey( text() ); }
78}; 78};
79 79
80class DueTextItem : public QTableItem 80class DueTextItem : public QTableItem
81{ 81{
82 public: 82 public:
83 DueTextItem( QTable *t, ToDoEvent *ev ); 83 DueTextItem( QTable *t, ToDoEvent *ev );
84 QString key() const; 84 QString key() const;
85 void setToDoEvent( const ToDoEvent *ev ); 85 void setToDoEvent( const ToDoEvent *ev );
86 void paint( QPainter *p, const QColorGroup &cg, const QRect &cr, bool selected ); 86 void paint( QPainter *p, const QColorGroup &cg, const QRect &cr, bool selected );
87 private: 87 private:
88 int m_off; 88 int m_off;
89 bool m_hasDate:1; 89 bool m_hasDate:1;
90 bool m_completed:1; 90 bool m_completed:1;
91 91
92}; 92};
93 93
94 94
95enum journal_action { ACTION_ADD, ACTION_REMOVE, ACTION_REPLACE }; 95enum journal_action { ACTION_ADD=0, ACTION_REMOVE, ACTION_REPLACE };
96 96
97class XMLElement;
97class TodoTable : public QTable 98class TodoTable : public QTable
98{ 99{
99 Q_OBJECT 100 Q_OBJECT
100 101
101public: 102public:
102 TodoTable( QWidget *parent = 0, const char * name = 0 ); 103 TodoTable( QWidget *parent = 0, const char * name = 0 );
103 void addEntry( const ToDoEvent &todo ); 104 void addEntry( const ToDoEvent &todo );
104 void clearFindRow() { currFindRow = -2; } 105 void clearFindRow() { currFindRow = -2; }
105 106
106 ToDoEvent currentEntry() const; 107 ToDoEvent currentEntry() const;
107 void replaceCurrentEntry( const ToDoEvent &todo, bool fromTableItem = false ); 108 void replaceCurrentEntry( const ToDoEvent &todo, bool fromTableItem = false );
108 109
109 QStringList categories(); 110 QStringList categories();
110 111
111 void setShowCompleted( bool sc ) { showComp = sc; updateVisible(); } 112 void setShowCompleted( bool sc ) { showComp = sc; updateVisible(); }
112 bool showCompleted() const { return showComp; } 113 bool showCompleted() const { return showComp; }
113 114
114 void setShowDeadline (bool sd) {showDeadl = sd; updateVisible();} 115 void setShowDeadline (bool sd) {showDeadl = sd; updateVisible();}
115 bool showDeadline() const { return showDeadl;} 116 bool showDeadline() const { return showDeadl;}
116 117
117 void setShowCategory( const QString &c ) { showCat = c; updateVisible(); } 118 void setShowCategory( const QString &c ) { showCat = c; updateVisible(); }
118 const QString &showCategory() const { return showCat; } 119 const QString &showCategory() const { return showCat; }
119 int showCategoryId() const; 120 int showCategoryId() const;
120 121
121 bool save( const QString &fn ); 122 bool save( const QString &fn );
122 void load( const QString &fn ); 123 void load( const QString &fn );
124 void applyJournal( );
123 void clear(); 125 void clear();
124 void removeCurrentEntry(); 126 void removeCurrentEntry();
127 void removeAllEntries() { clear(); };
128 //void removeAllEntriesInCategory(const QString &category );
125 129
126 void setPaintingEnabled( bool e ); 130 void setPaintingEnabled( bool e );
127 131
128 virtual void sortColumn( int col, bool ascending, bool /*wholeRows*/ ); 132 virtual void sortColumn( int col, bool ascending, bool /*wholeRows*/ );
129 133
130// int rowHeight( int ) const; 134// int rowHeight( int ) const;
131// int rowPos( int row ) const; 135// int rowPos( int row ) const;
132// virtual int rowAt( int pos ) const; 136// virtual int rowAt( int pos ) const;
133 137
134signals: 138signals:
135 void signalEdit(); 139 void signalEdit();
136 void signalDoneChanged( bool b ); 140 void signalDoneChanged( bool b );
137 void signalPriorityChanged( int i ); 141 void signalPriorityChanged( int i );
138 void signalShowMenu( const QPoint & ); 142 void signalShowMenu( const QPoint & );
139 void signalNotFound(); 143 void signalNotFound();
140 void signalWrapAround(); 144 void signalWrapAround();
141 145
142protected: 146protected:
143 void keyPressEvent( QKeyEvent *e ); 147 void keyPressEvent( QKeyEvent *e );
144 148
145private: 149private:
146 void updateVisible(); 150 void updateVisible();
147 void viewportPaintEvent( QPaintEvent * ); 151 void viewportPaintEvent( QPaintEvent * );
148 void internalAddEntries( QList<ToDoEvent> &list); 152 void internalAddEntries( QList<ToDoEvent> &list);
149 inline void insertIntoTable( ToDoEvent *todo, int row ); 153 inline void insertIntoTable( ToDoEvent *todo, int row );
150 void updateJournal( const ToDoEvent &todo, journal_action action, int row = -1); 154 void updateJournal( const ToDoEvent &todo, journal_action action, int row = -1);
151 void mergeJournal(); 155 void mergeJournal();
152 void journalFreeReplaceEntry( const ToDoEvent &todo, int row ); 156 void journalFreeReplaceEntry( const ToDoEvent &todo, int row );
153 void journalFreeRemoveEntry( int row ); 157 void journalFreeRemoveEntry( int row );
154 inline void realignTable( int row ); 158 inline void realignTable( int row );
155 void loadFile( const QString &strFile, bool fromJournal = false ); 159 void loadFile( const QString &strFile, bool fromJournal = false );
160 void doApply(XMLElement *el );
156 161
157private slots: 162private slots:
158 void slotClicked( int row, int col, int button, const QPoint &pos ); 163 void slotClicked( int row, int col, int button, const QPoint &pos );
159 void slotPressed( int row, int col, int button, const QPoint &pos ); 164 void slotPressed( int row, int col, int button, const QPoint &pos );
160 void slotCheckPriority(int row, int col ); 165 void slotCheckPriority(int row, int col );
161 void slotCurrentChanged(int row, int col ); 166 void slotCurrentChanged(int row, int col );
162 void slotDoFind( const QString &findString, bool caseSensetive, 167 void slotDoFind( const QString &findString, bool caseSensetive,
163 bool backwards, int category ); 168 bool backwards, int category );
164 void slotShowMenu(); 169 void slotShowMenu();
165 void rowHeightChanged( int row ); 170 void rowHeightChanged( int row );
166 171
167private: 172private:
168 friend class TodoWindow; 173 friend class TodoWindow;
169 174
170 QMap<CheckItem*, ToDoEvent *> todoList; 175 QMap<CheckItem*, ToDoEvent *> todoList;
171 QStringList categoryList; 176 QStringList categoryList;
172 bool showComp; 177 bool showComp;
173 QString showCat; 178 QString showCat;
174 QTimer *menuTimer; 179 QTimer *menuTimer;
175 bool enablePainting; 180 bool enablePainting;
176 Categories mCat; 181 Categories mCat;
177 int currFindRow; 182 int currFindRow;
178 bool showDeadl:1; 183 bool showDeadl:1;
179}; 184};