summaryrefslogtreecommitdiff
path: root/core
Unidiff
Diffstat (limited to 'core') (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/todo/mainwindow.cpp2
-rw-r--r--core/pim/todo/todoentry.ui370
-rw-r--r--core/pim/todo/todoentryimpl.cpp7
-rw-r--r--core/pim/todo/todotable.cpp11
-rw-r--r--core/pim/todo/todotable.h3
5 files changed, 232 insertions, 161 deletions
diff --git a/core/pim/todo/mainwindow.cpp b/core/pim/todo/mainwindow.cpp
index b7b1da0..1358f1c 100644
--- a/core/pim/todo/mainwindow.cpp
+++ b/core/pim/todo/mainwindow.cpp
@@ -501,127 +501,127 @@ void TodoWindow::reload()
501} 501}
502 502
503void TodoWindow::flush() 503void TodoWindow::flush()
504{ 504{
505 syncing = TRUE; 505 syncing = TRUE;
506 table->save( todolistXMLFilename() ); 506 table->save( todolistXMLFilename() );
507} 507}
508 508
509void TodoWindow::closeEvent( QCloseEvent *e ) 509void TodoWindow::closeEvent( QCloseEvent *e )
510{ 510{
511 if( mStack->visibleWidget() != table ){ 511 if( mStack->visibleWidget() != table ){
512 mStack->raiseWidget( 1 ); 512 mStack->raiseWidget( 1 );
513 e->ignore(); 513 e->ignore();
514 return; 514 return;
515 } 515 }
516 if(syncing) { 516 if(syncing) {
517 /* no need to save if in the middle of syncing */ 517 /* no need to save if in the middle of syncing */
518 e->accept(); 518 e->accept();
519 return; 519 return;
520 } 520 }
521 521
522 if ( table->save( todolistXMLFilename() ) ) { 522 if ( table->save( todolistXMLFilename() ) ) {
523 e->accept(); 523 e->accept();
524 // repeat for categories... 524 // repeat for categories...
525 // if writing configs fail, it will emit an 525 // if writing configs fail, it will emit an
526 // error, but I feel that it is "ok" for us to exit 526 // error, but I feel that it is "ok" for us to exit
527 // espically since we aren't told if the write succeeded... 527 // espically since we aren't told if the write succeeded...
528 Config config( "todo" ); 528 Config config( "todo" );
529 config.setGroup( "View" ); 529 config.setGroup( "View" );
530 config.writeEntry( "ShowComplete", table->showCompleted() ); 530 config.writeEntry( "ShowComplete", table->showCompleted() );
531 config.writeEntry( "Category", table->showCategory() ); 531 config.writeEntry( "Category", table->showCategory() );
532 /* added 20.01.2k2 by se */ 532 /* added 20.01.2k2 by se */
533 config.writeEntry( "ShowDeadLine", table->showDeadline()); 533 config.writeEntry( "ShowDeadLine", table->showDeadline());
534 } else { 534 } else {
535 if ( QMessageBox::critical( this, tr("Out of space"), 535 if ( QMessageBox::critical( this, tr("Out of space"),
536 tr("Todo was unable\n" 536 tr("Todo was unable\n"
537 "to save your changes.\n" 537 "to save your changes.\n"
538 "Free up some space\n" 538 "Free up some space\n"
539 "and try again.\n" 539 "and try again.\n"
540 "\nQuit Anyway?"), 540 "\nQuit Anyway?"),
541 QMessageBox::Yes|QMessageBox::Escape, 541 QMessageBox::Yes|QMessageBox::Escape,
542 QMessageBox::No|QMessageBox::Default) 542 QMessageBox::No|QMessageBox::Default)
543 != QMessageBox::No ) 543 != QMessageBox::No )
544 e->accept(); 544 e->accept();
545 else 545 else
546 e->ignore(); 546 e->ignore();
547 } 547 }
548} 548}
549 549
550void TodoWindow::slotFind() 550void TodoWindow::slotFind()
551{ 551{
552 // put everything back to view all for searching... 552 // put everything back to view all for searching...
553 mStack->raiseWidget( 1 ); 553 mStack->raiseWidget( 1 );
554 if ( !catMenu->isItemChecked( 0 ) ) 554 if ( !catMenu->isItemChecked( 0 ) )
555 setCategory( 0 ); 555 setCategory( 0 );
556 556
557 FindDialog dlg( "Todo List", this ); 557 FindDialog dlg( "Todo List", this );
558 QObject::connect( &dlg, 558 QObject::connect( &dlg,
559 SIGNAL(signalFindClicked(const QString &, 559 SIGNAL(signalFindClicked(const QString &,
560 bool, bool, int)), 560 bool, bool, int)),
561 table, 561 table,
562 SLOT(slotDoFind(const QString&, bool, bool, int)) ); 562 SLOT(slotDoFind(const QString&, bool, bool, int)) );
563 QObject::connect( table, SIGNAL(signalNotFound()), &dlg, 563 QObject::connect( table, SIGNAL(signalNotFound()), &dlg,
564 SLOT(slotNotFound()) ); 564 SLOT(slotNotFound()) );
565 QObject::connect( table, SIGNAL(signalWrapAround()), &dlg, 565 QObject::connect( table, SIGNAL(signalWrapAround()), &dlg,
566 SLOT(slotWrapAround()) ); 566 SLOT(slotWrapAround()) );
567 dlg.exec(); 567 dlg.exec();
568 if ( table->numSelections() ) 568 if ( table->numSelections() )
569 table->clearSelection(); 569 table->clearSelection();
570 table->clearFindRow(); 570 table->clearFindRow();
571} 571}
572 572
573 573
574void TodoWindow::setDocument( const QString &filename ) 574void TodoWindow::setDocument( const QString &filename )
575{ 575{
576 if ( filename.find(".vcs") != int(filename.length()) - 4 ) return; 576 if ( filename.find(".vcs") != int(filename.length()) - 4 ) return;
577 577
578 ToDoDB todoDB(filename, new ToDoVCalResource() ); 578 ToDoDB todoDB(filename, new ToDoVCalResource() );
579 QValueList<ToDoEvent> tl = todoDB.rawToDos(); 579 QValueList<ToDoEvent> tl = todoDB.rawToDos();
580 for( QValueList<ToDoEvent>::Iterator it = tl.begin(); it != tl.end(); ++it ) { 580 for( QValueList<ToDoEvent>::Iterator it = tl.begin(); it != tl.end(); ++it ) {
581 table->addEntry( *it ); 581 table->addEntry( *it );
582 } 582 }
583} 583}
584 584
585static const char * beamfile = "/tmp/obex/todo.vcs"; 585static const char * beamfile = "/tmp/obex/todo.vcs";
586 586
587void TodoWindow::slotBeam() 587void TodoWindow::slotBeam()
588{ 588{
589 unlink( beamfile ); // delete if exists 589 unlink( beamfile ); // delete if exists
590 ToDoEvent c = table->currentEntry(); 590 ToDoEvent c = table->currentEntry();
591 mkdir("/tmp/obex/", 0755); 591 mkdir("/tmp/obex/", 0755);
592 ToDoDB todoDB( beamfile, new ToDoVCalResource() ); 592 ToDoDB todoDB( beamfile, new ToDoVCalResource() );
593 todoDB.addEvent( c ); 593 todoDB.addEvent( c );
594 todoDB.save(); 594 todoDB.save();
595 Ir *ir = new Ir( this ); 595 Ir *ir = new Ir( this );
596 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 596 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
597 QString description = c.description(); 597 QString description = c.summary();
598 ir->send( beamfile, description, "text/x-vCalendar" ); 598 ir->send( beamfile, description, "text/x-vCalendar" );
599} 599}
600 600
601void TodoWindow::beamDone( Ir *ir ) 601void TodoWindow::beamDone( Ir *ir )
602{ 602{
603 delete ir; 603 delete ir;
604 unlink( beamfile ); 604 unlink( beamfile );
605} 605}
606 606
607void TodoWindow::showDeadline( bool s ) 607void TodoWindow::showDeadline( bool s )
608{ 608{
609 table->setPaintingEnabled( false ); 609 table->setPaintingEnabled( false );
610 table->setShowDeadline( s ); 610 table->setShowDeadline( s );
611 table->setPaintingEnabled( true ); 611 table->setPaintingEnabled( true );
612} 612}
613void TodoWindow::slotShowDetails() 613void TodoWindow::slotShowDetails()
614{ 614{
615 ToDoEvent event = table->currentEntry(); 615 ToDoEvent event = table->currentEntry();
616 slotShowDetails( event ); 616 slotShowDetails( event );
617} 617}
618void TodoWindow::slotShowDetails( const ToDoEvent &event ) 618void TodoWindow::slotShowDetails( const ToDoEvent &event )
619{ 619{
620 if( mView == 0l ){ 620 if( mView == 0l ){
621 mView = new TodoLabel(mStack); 621 mView = new TodoLabel(mStack);
622 mStack->addWidget( mView, 2 ); 622 mStack->addWidget( mView, 2 );
623 } 623 }
624 mView->init( event ); 624 mView->init( event );
625 mView->sync(); 625 mView->sync();
626 mStack->raiseWidget( 2); 626 mStack->raiseWidget( 2);
627} 627}
diff --git a/core/pim/todo/todoentry.ui b/core/pim/todo/todoentry.ui
index c735e76..87ee68c 100644
--- a/core/pim/todo/todoentry.ui
+++ b/core/pim/todo/todoentry.ui
@@ -1,266 +1,326 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>NewTaskDialogBase</class> 2<class>NewTaskDialogBase</class>
3<comment>********************************************************************* 3<comment>*********************************************************************
4** Copyright (C) 2000 Trolltech AS. All rights reserved. 4** Copyright (C) 2000 Trolltech AS. All rights reserved.
5** 5**
6** This file is part of Qtopia Environment. 6** This file is part of Qtopia Environment.
7** 7**
8** This file may be distributed and/or modified under the terms of the 8** This file may be distributed and/or modified under the terms of the
9** GNU General Public License version 2 as published by the Free Software 9** GNU General Public License version 2 as published by the Free Software
10** Foundation and appearing in the file LICENSE.GPL included in the 10** Foundation and appearing in the file LICENSE.GPL included in the
11** packaging of this file. 11** packaging of this file.
12** 12**
13** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 13** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
14** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 14** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
15** 15**
16** See http://www.trolltech.com/gpl/ for GPL licensing information. 16** See http://www.trolltech.com/gpl/ for GPL licensing information.
17** 17**
18** Contact info@trolltech.com if any conditions of this licensing are 18** Contact info@trolltech.com if any conditions of this licensing are
19** not clear to you. 19** not clear to you.
20** 20**
21*********************************************************************</comment> 21*********************************************************************</comment>
22<widget> 22<widget>
23 <class>QDialog</class> 23 <class>QDialog</class>
24 <property stdset="1"> 24 <property stdset="1">
25 <name>name</name> 25 <name>name</name>
26 <cstring>NewTaskDialogBase</cstring> 26 <cstring>NewTaskDialogBase</cstring>
27 </property> 27 </property>
28 <property stdset="1"> 28 <property stdset="1">
29 <name>geometry</name> 29 <name>geometry</name>
30 <rect> 30 <rect>
31 <x>0</x> 31 <x>0</x>
32 <y>0</y> 32 <y>0</y>
33 <width>249</width> 33 <width>245</width>
34 <height>321</height> 34 <height>321</height>
35 </rect> 35 </rect>
36 </property> 36 </property>
37 <property stdset="1"> 37 <property stdset="1">
38 <name>caption</name> 38 <name>caption</name>
39 <string>New Task</string> 39 <string>New Task</string>
40 </property> 40 </property>
41 <property> 41 <property>
42 <name>layoutMargin</name> 42 <name>layoutMargin</name>
43 </property> 43 </property>
44 <property> 44 <property>
45 <name>layoutSpacing</name> 45 <name>layoutSpacing</name>
46 </property> 46 </property>
47 <vbox> 47 <widget>
48 <class>QLayoutWidget</class>
48 <property stdset="1"> 49 <property stdset="1">
49 <name>margin</name> 50 <name>name</name>
50 <number>0</number> 51 <cstring>Layout3</cstring>
51 </property> 52 </property>
52 <property stdset="1"> 53 <property stdset="1">
53 <name>spacing</name> 54 <name>geometry</name>
54 <number>0</number> 55 <rect>
56 <x>1</x>
57 <y>25</y>
58 <width>243</width>
59 <height>17</height>
60 </rect>
55 </property> 61 </property>
56 <widget> 62 <hbox>
57 <class>QLayoutWidget</class>
58 <property stdset="1"> 63 <property stdset="1">
59 <name>name</name> 64 <name>margin</name>
60 <cstring>Layout4</cstring> 65 <number>0</number>
61 </property> 66 </property>
62 <hbox> 67 <property stdset="1">
68 <name>spacing</name>
69 <number>6</number>
70 </property>
71 <widget>
72 <class>QLabel</class>
63 <property stdset="1"> 73 <property stdset="1">
64 <name>margin</name> 74 <name>name</name>
65 <number>0</number> 75 <cstring>TextLabel3</cstring>
66 </property> 76 </property>
67 <property stdset="1"> 77 <property stdset="1">
68 <name>spacing</name> 78 <name>frameShape</name>
69 <number>6</number> 79 <enum>NoFrame</enum>
70 </property> 80 </property>
71 <widget> 81 <property stdset="1">
72 <class>QLabel</class> 82 <name>text</name>
83 <string>Category:</string>
84 </property>
85 </widget>
86 <widget>
87 <class>CategorySelect</class>
88 <property stdset="1">
89 <name>name</name>
90 <cstring>comboCategory</cstring>
91 </property>
92 </widget>
93 </hbox>
94 </widget>
95 <widget>
96 <class>QLayoutWidget</class>
97 <property stdset="1">
98 <name>name</name>
99 <cstring>Layout6</cstring>
100 </property>
101 <property stdset="1">
102 <name>geometry</name>
103 <rect>
104 <x>0</x>
105 <y>0</y>
106 <width>240</width>
107 <height>320</height>
108 </rect>
109 </property>
110 <grid>
111 <property stdset="1">
112 <name>margin</name>
113 <number>0</number>
114 </property>
115 <property stdset="1">
116 <name>spacing</name>
117 <number>6</number>
118 </property>
119 <widget row="2" column="0" >
120 <class>QLayoutWidget</class>
121 <property stdset="1">
122 <name>name</name>
123 <cstring>Layout4</cstring>
124 </property>
125 <hbox>
73 <property stdset="1"> 126 <property stdset="1">
74 <name>name</name> 127 <name>margin</name>
75 <cstring>TextLabel2</cstring> 128 <number>0</number>
76 </property> 129 </property>
77 <property stdset="1"> 130 <property stdset="1">
78 <name>text</name> 131 <name>spacing</name>
79 <string>Priority:</string> 132 <number>6</number>
80 </property> 133 </property>
81 </widget> 134 <widget>
82 <widget> 135 <class>QLabel</class>
83 <class>QComboBox</class> 136 <property stdset="1">
84 <item> 137 <name>name</name>
85 <property> 138 <cstring>TextLabel1</cstring>
86 <name>text</name>
87 <string>1 - Very High</string>
88 </property> 139 </property>
89 </item> 140 <property stdset="1">
90 <item>
91 <property>
92 <name>text</name> 141 <name>text</name>
93 <string>2 - High</string> 142 <string>Summary:</string>
94 </property> 143 </property>
95 </item> 144 </widget>
96 <item> 145 <widget>
97 <property> 146 <class>QLineEdit</class>
98 <name>text</name> 147 <property stdset="1">
99 <string>3 - Normal</string> 148 <name>name</name>
100 </property> 149 <cstring>lneSum</cstring>
101 </item>
102 <item>
103 <property>
104 <name>text</name>
105 <string>4 - Low</string>
106 </property>
107 </item>
108 <item>
109 <property>
110 <name>text</name>
111 <string>5 - Very Low</string>
112 </property> 150 </property>
113 </item> 151 </widget>
114 <property stdset="1"> 152 </hbox>
115 <name>name</name> 153 </widget>
116 <cstring>comboPriority</cstring> 154 <widget row="3" column="0" >
117 </property> 155 <class>QMultiLineEdit</class>
118 <property stdset="1">
119 <name>sizePolicy</name>
120 <sizepolicy>
121 <hsizetype>7</hsizetype>
122 <vsizetype>0</vsizetype>
123 </sizepolicy>
124 </property>
125 <property stdset="1">
126 <name>currentItem</name>
127 <number>2</number>
128 </property>
129 </widget>
130 </hbox>
131 </widget>
132 <widget>
133 <class>QLayoutWidget</class>
134 <property stdset="1">
135 <name>name</name>
136 <cstring>Layout3</cstring>
137 </property>
138 <hbox>
139 <property stdset="1"> 156 <property stdset="1">
140 <name>margin</name> 157 <name>name</name>
141 <number>0</number> 158 <cstring>txtTodo</cstring>
142 </property> 159 </property>
160 </widget>
161 <widget row="1" column="0" >
162 <class>QLayoutWidget</class>
143 <property stdset="1"> 163 <property stdset="1">
144 <name>spacing</name> 164 <name>name</name>
145 <number>6</number> 165 <cstring>Layout4</cstring>
146 </property> 166 </property>
147 <widget> 167 <hbox>
148 <class>QLabel</class>
149 <property stdset="1">
150 <name>name</name>
151 <cstring>TextLabel3</cstring>
152 </property>
153 <property stdset="1">
154 <name>frameShape</name>
155 <enum>NoFrame</enum>
156 </property>
157 <property stdset="1"> 168 <property stdset="1">
158 <name>text</name> 169 <name>margin</name>
159 <string>Category:</string> 170 <number>0</number>
160 </property> 171 </property>
161 </widget>
162 <widget>
163 <class>CategorySelect</class>
164 <property stdset="1"> 172 <property stdset="1">
165 <name>name</name> 173 <name>spacing</name>
166 <cstring>comboCategory</cstring> 174 <number>6</number>
167 </property> 175 </property>
168 </widget> 176 <widget>
169 </hbox> 177 <class>QCheckBox</class>
170 </widget> 178 <property stdset="1">
171 <widget> 179 <name>name</name>
172 <class>QLayoutWidget</class> 180 <cstring>checkCompleted</cstring>
173 <property stdset="1"> 181 </property>
174 <name>name</name> 182 <property stdset="1">
175 <cstring>Layout4</cstring> 183 <name>text</name>
176 </property> 184 <string>&amp;Completed</string>
177 <hbox> 185 </property>
178 <property stdset="1"> 186 </widget>
179 <name>margin</name> 187 <widget>
180 <number>0</number> 188 <class>QCheckBox</class>
181 </property> 189 <property stdset="1">
190 <name>name</name>
191 <cstring>checkDate</cstring>
192 </property>
193 <property stdset="1">
194 <name>text</name>
195 <string>D&amp;ue</string>
196 </property>
197 </widget>
198 <widget>
199 <class>QPushButton</class>
200 <property stdset="1">
201 <name>name</name>
202 <cstring>buttonDate</cstring>
203 </property>
204 <property stdset="1">
205 <name>enabled</name>
206 <bool>false</bool>
207 </property>
208 <property stdset="1">
209 <name>text</name>
210 <string>1 Jan 2001</string>
211 </property>
212 </widget>
213 </hbox>
214 </widget>
215 <widget row="0" column="0" >
216 <class>QLayoutWidget</class>
182 <property stdset="1"> 217 <property stdset="1">
183 <name>spacing</name> 218 <name>name</name>
184 <number>6</number> 219 <cstring>Layout4</cstring>
185 </property> 220 </property>
186 <widget> 221 <hbox>
187 <class>QCheckBox</class>
188 <property stdset="1">
189 <name>name</name>
190 <cstring>checkCompleted</cstring>
191 </property>
192 <property stdset="1"> 222 <property stdset="1">
193 <name>text</name> 223 <name>margin</name>
194 <string>&amp;Completed</string> 224 <number>0</number>
195 </property> 225 </property>
196 </widget>
197 <widget>
198 <class>QCheckBox</class>
199 <property stdset="1"> 226 <property stdset="1">
200 <name>name</name> 227 <name>spacing</name>
201 <cstring>checkDate</cstring> 228 <number>6</number>
202 </property> 229 </property>
203 <property stdset="1"> 230 <widget>
204 <name>text</name> 231 <class>QLabel</class>
205 <string>D&amp;ue</string> 232 <property stdset="1">
206 </property> 233 <name>name</name>
207 </widget> 234 <cstring>TextLabel2</cstring>
208 <widget> 235 </property>
209 <class>QPushButton</class> 236 <property stdset="1">
210 <property stdset="1"> 237 <name>text</name>
211 <name>name</name> 238 <string>Priority:</string>
212 <cstring>buttonDate</cstring> 239 </property>
213 </property> 240 </widget>
214 <property stdset="1"> 241 <widget>
215 <name>enabled</name> 242 <class>QComboBox</class>
216 <bool>false</bool> 243 <item>
217 </property> 244 <property>
218 <property stdset="1"> 245 <name>text</name>
219 <name>text</name> 246 <string>1 - Very High</string>
220 <string>1 Jan 2001</string> 247 </property>
221 </property> 248 </item>
222 </widget> 249 <item>
223 </hbox> 250 <property>
224 </widget> 251 <name>text</name>
225 <widget> 252 <string>2 - High</string>
226 <class>QMultiLineEdit</class> 253 </property>
227 <property stdset="1"> 254 </item>
228 <name>name</name> 255 <item>
229 <cstring>txtTodo</cstring> 256 <property>
230 </property> 257 <name>text</name>
231 </widget> 258 <string>3 - Normal</string>
232 </vbox> 259 </property>
260 </item>
261 <item>
262 <property>
263 <name>text</name>
264 <string>4 - Low</string>
265 </property>
266 </item>
267 <item>
268 <property>
269 <name>text</name>
270 <string>5 - Very Low</string>
271 </property>
272 </item>
273 <property stdset="1">
274 <name>name</name>
275 <cstring>comboPriority</cstring>
276 </property>
277 <property stdset="1">
278 <name>sizePolicy</name>
279 <sizepolicy>
280 <hsizetype>7</hsizetype>
281 <vsizetype>0</vsizetype>
282 </sizepolicy>
283 </property>
284 <property stdset="1">
285 <name>currentItem</name>
286 <number>2</number>
287 </property>
288 </widget>
289 </hbox>
290 </widget>
291 </grid>
292 </widget>
233</widget> 293</widget>
234<customwidgets> 294<customwidgets>
235 <customwidget> 295 <customwidget>
236 <class>CategorySelect</class> 296 <class>CategorySelect</class>
237 <header location="global">qpe/categoryselect.h</header> 297 <header location="global">qpe/categoryselect.h</header>
238 <sizehint> 298 <sizehint>
239 <width>-1</width> 299 <width>-1</width>
240 <height>-1</height> 300 <height>-1</height>
241 </sizehint> 301 </sizehint>
242 <container>0</container> 302 <container>0</container>
243 <sizepolicy> 303 <sizepolicy>
244 <hordata>7</hordata> 304 <hordata>7</hordata>
245 <verdata>1</verdata> 305 <verdata>1</verdata>
246 </sizepolicy> 306 </sizepolicy>
247 <pixmap>image0</pixmap> 307 <pixmap>image0</pixmap>
248 </customwidget> 308 </customwidget>
249</customwidgets> 309</customwidgets>
250<images> 310<images>
251 <image> 311 <image>
252 <name>image0</name> 312 <name>image0</name>
253 <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data> 313 <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
254 </image> 314 </image>
255</images> 315</images>
256<connections> 316<connections>
257 <connection> 317 <connection>
258 <sender>checkDate</sender> 318 <sender>checkDate</sender>
259 <signal>toggled(bool)</signal> 319 <signal>toggled(bool)</signal>
260 <receiver>buttonDate</receiver> 320 <receiver>buttonDate</receiver>
261 <slot>setEnabled(bool)</slot> 321 <slot>setEnabled(bool)</slot>
262 </connection> 322 </connection>
263 <slot access="protected">dateChanged( const QString &amp; )</slot> 323 <slot access="protected">dateChanged( const QString &amp; )</slot>
264 <slot access="protected">dateChanged( int, int, int )</slot> 324 <slot access="protected">dateChanged( int, int, int )</slot>
265</connections> 325</connections>
266</UI> 326</UI>
diff --git a/core/pim/todo/todoentryimpl.cpp b/core/pim/todo/todoentryimpl.cpp
index 26a685c..dfaf9b4 100644
--- a/core/pim/todo/todoentryimpl.cpp
+++ b/core/pim/todo/todoentryimpl.cpp
@@ -1,153 +1,156 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** Copyright (C) 2002 zecke
3** 4**
4** This file is part of Qtopia Environment. 5** This file is part of Qtopia Environment.
5** 6**
6** This file may be distributed and/or modified under the terms of the 7** 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 8** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 9** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 10** packaging of this file.
10** 11**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 12** 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. 13** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 14**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 15** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 16**
16** Contact info@trolltech.com if any conditions of this licensing are 17** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 18** not clear to you.
18** 19**
19**********************************************************************/ 20**********************************************************************/
20 21
21#include "todoentryimpl.h" 22#include "todoentryimpl.h"
22 23
23#include <opie/todoevent.h> 24#include <opie/todoevent.h>
24#include <opie/tododb.h> 25#include <opie/tododb.h>
25 26
26#include <qpe/categoryselect.h> 27#include <qpe/categoryselect.h>
27#include <qpe/datebookmonth.h> 28#include <qpe/datebookmonth.h>
28#include <qpe/global.h> 29#include <qpe/global.h>
29#include <qpe/imageedit.h> 30#include <qpe/imageedit.h>
30#include <qpe/timestring.h> 31#include <qpe/timestring.h>
31#include <qpe/palmtoprecord.h> 32#include <qpe/palmtoprecord.h>
32 33
33#include <qmessagebox.h> 34#include <qmessagebox.h>
34#include <qpopupmenu.h> 35#include <qpopupmenu.h>
35#include <qtoolbutton.h> 36#include <qtoolbutton.h>
36#include <qcombobox.h> 37#include <qcombobox.h>
37#include <qcheckbox.h> 38#include <qcheckbox.h>
38#include <qlineedit.h> 39#include <qlineedit.h>
39#include <qmultilineedit.h> 40#include <qmultilineedit.h>
40#include <qlabel.h> 41#include <qlabel.h>
41#include <qtimer.h> 42#include <qtimer.h>
42#include <qapplication.h> 43#include <qapplication.h>
43 44
44 45
45NewTaskDialog::NewTaskDialog( const ToDoEvent& task, QWidget *parent, 46NewTaskDialog::NewTaskDialog( const ToDoEvent& task, QWidget *parent,
46 const char *name, bool modal, WFlags fl ) 47 const char *name, bool modal, WFlags fl )
47 : NewTaskDialogBase( parent, name, modal, fl ), 48 : NewTaskDialogBase( parent, name, modal, fl ),
48 todo( task ) 49 todo( task )
49{ 50{
50 todo.setCategories( task.allCategories() ); 51 todo.setCategories( task.allCategories() );
51 if ( todo.hasDate() ) 52 if ( todo.hasDate() )
52 date = todo.date(); 53 date = todo.date();
53 else 54 else
54 date = QDate::currentDate(); 55 date = QDate::currentDate();
55 56
56 init(); 57 init();
57 comboPriority->setCurrentItem( task.priority() - 1 ); 58 comboPriority->setCurrentItem( task.priority() - 1 );
58 59
59 checkCompleted->setChecked( task.isCompleted() ); 60 checkCompleted->setChecked( task.isCompleted() );
60 checkDate->setChecked( task.hasDate() ); 61 checkDate->setChecked( task.hasDate() );
61 buttonDate->setText( TimeString::longDateString( date ) ); 62 buttonDate->setText( TimeString::longDateString( date ) );
62 63
63 txtTodo->setText( task.description() ); 64 txtTodo->setText( task.description() );
65 lneSum->setText( task.summary() );
64} 66}
65 67
66/* 68/*
67 * Constructs a NewTaskDialog which is a child of 'parent', with the 69 * Constructs a NewTaskDialog which is a child of 'parent', with the
68 * name 'name' and widget flags set to 'f' 70 * name 'name' and widget flags set to 'f'
69 * 71 *
70 * The dialog will by default be modeless, unless you set 'modal' to 72 * The dialog will by default be modeless, unless you set 'modal' to
71 * TRUE to construct a modal dialog. 73 * TRUE to construct a modal dialog.
72 */ 74 */
73NewTaskDialog::NewTaskDialog( int id, QWidget* parent, const char* name, bool modal, 75NewTaskDialog::NewTaskDialog( int id, QWidget* parent, const char* name, bool modal,
74 WFlags fl ) 76 WFlags fl )
75 : NewTaskDialogBase( parent, name, modal, fl ), 77 : NewTaskDialogBase( parent, name, modal, fl ),
76 date( QDate::currentDate() ) 78 date( QDate::currentDate() )
77{ 79{
78 if ( id != -1 ) { 80 if ( id != -1 ) {
79 QArray<int> ids( 1 ); 81 QArray<int> ids( 1 );
80 ids[0] = id; 82 ids[0] = id;
81 todo.setCategory( Qtopia::Record::idsToString( ids ) ); 83 todo.setCategory( Qtopia::Record::idsToString( ids ) );
82 } 84 }
83 init(); 85 init();
84} 86}
85 87
86void NewTaskDialog::init() 88void NewTaskDialog::init()
87{ 89{
88 QPopupMenu *m1 = new QPopupMenu( this ); 90 QPopupMenu *m1 = new QPopupMenu( this );
89 picker = new DateBookMonth( m1, 0, TRUE ); 91 picker = new DateBookMonth( m1, 0, TRUE );
90 m1->insertItem( picker ); 92 m1->insertItem( picker );
91 buttonDate->setPopup( m1 ); 93 buttonDate->setPopup( m1 );
92 comboCategory->setCategories( todo.categories(), "Todo List", tr("Todo List") ); 94 comboCategory->setCategories( todo.categories(), "Todo List", tr("Todo List") );
93 95
94 connect( picker, SIGNAL( dateClicked( int, int, int ) ), 96 connect( picker, SIGNAL( dateClicked( int, int, int ) ),
95 this, SLOT( dateChanged( int, int, int ) ) ); 97 this, SLOT( dateChanged( int, int, int ) ) );
96 98
97 buttonDate->setText( TimeString::longDateString( date ) ); 99 buttonDate->setText( TimeString::longDateString( date ) );
98 picker->setDate( date.year(), date.month(), date.day() ); 100 picker->setDate( date.year(), date.month(), date.day() );
99} 101}
100 102
101/* 103/*
102 * Destroys the object and frees any allocated resources 104 * Destroys the object and frees any allocated resources
103 */ 105 */
104NewTaskDialog::~NewTaskDialog() 106NewTaskDialog::~NewTaskDialog()
105{ 107{
106 // no need to delete child widgets, Qt does it all for us 108 // no need to delete child widgets, Qt does it all for us
107} 109}
108void NewTaskDialog::dateChanged( int y, int m, int d ) 110void NewTaskDialog::dateChanged( int y, int m, int d )
109{ 111{
110 date = QDate( y, m, d ); 112 date = QDate( y, m, d );
111 buttonDate->setText( TimeString::longDateString( date ) ); 113 buttonDate->setText( TimeString::longDateString( date ) );
112} 114}
113 115
114/*! 116/*!
115*/ 117*/
116 118
117ToDoEvent NewTaskDialog::todoEntry() 119ToDoEvent NewTaskDialog::todoEntry()
118{ 120{
119 if( checkDate->isChecked() ){ 121 if( checkDate->isChecked() ){
120 todo.setDate( date ); 122 todo.setDate( date );
121 todo.setHasDate( true ); 123 todo.setHasDate( true );
122 }else{ 124 }else{
123 todo.setHasDate( false ); 125 todo.setHasDate( false );
124 } 126 }
125 if ( comboCategory->currentCategory() != -1 ) { 127 if ( comboCategory->currentCategory() != -1 ) {
126 QArray<int> arr = comboCategory->currentCategories(); 128 QArray<int> arr = comboCategory->currentCategories();
127 QStringList list; 129 QStringList list;
128 list = QStringList::split(";", Qtopia::Record::idsToString( arr )) ; 130 list = QStringList::split(";", Qtopia::Record::idsToString( arr )) ;
129 todo.setCategories( list ); 131 todo.setCategories( list );
130 } 132 }
131 todo.setPriority( comboPriority->currentItem() + 1 ); 133 todo.setPriority( comboPriority->currentItem() + 1 );
132 todo.setCompleted( checkCompleted->isChecked() ); 134 todo.setCompleted( checkCompleted->isChecked() );
133 135
134 todo.setDescription( txtTodo->text() ); 136 todo.setDescription( txtTodo->text() );
135 137 todo.setSummary( lneSum->text() );
138
136 return todo; 139 return todo;
137} 140}
138 141
139 142
140/*! 143/*!
141 144
142*/ 145*/
143 146
144void NewTaskDialog::accept() 147void NewTaskDialog::accept()
145{ 148{
146 QString strText = txtTodo->text(); 149 QString strText = txtTodo->text();
147 if ( strText.isEmpty() ) { 150 if ( strText.isEmpty() ) {
148 // hmm... just decline it then, the user obviously didn't care about it 151 // hmm... just decline it then, the user obviously didn't care about it
149 QDialog::reject(); 152 QDialog::reject();
150 return; 153 return;
151 } 154 }
152 QDialog::accept(); 155 QDialog::accept();
153} 156}
diff --git a/core/pim/todo/todotable.cpp b/core/pim/todo/todotable.cpp
index 52a3087..779b28c 100644
--- a/core/pim/todo/todotable.cpp
+++ b/core/pim/todo/todotable.cpp
@@ -479,232 +479,236 @@ void TodoTable::updateVisible()
479 if ( rowHeight( row ) > 0 ) 479 if ( rowHeight( row ) > 0 )
480 hideRow( row ); 480 hideRow( row );
481 } else { 481 } else {
482 if ( rowHeight( row ) == 0 ) { 482 if ( rowHeight( row ) == 0 ) {
483 showRow( row ); 483 showRow( row );
484 adjustRow( row ); 484 adjustRow( row );
485 } 485 }
486 visible++; 486 visible++;
487 } 487 }
488 } 488 }
489 if ( !visible ) 489 if ( !visible )
490 setCurrentCell( -1, 0 ); 490 setCurrentCell( -1, 0 );
491} 491}
492 492
493void TodoTable::viewportPaintEvent( QPaintEvent *pe ) 493void TodoTable::viewportPaintEvent( QPaintEvent *pe )
494{ 494{
495 if ( enablePainting ) 495 if ( enablePainting )
496 QTable::viewportPaintEvent( pe ); 496 QTable::viewportPaintEvent( pe );
497} 497}
498 498
499void TodoTable::setPaintingEnabled( bool e ) 499void TodoTable::setPaintingEnabled( bool e )
500{ 500{
501 if ( e != enablePainting ) { 501 if ( e != enablePainting ) {
502 if ( !enablePainting ) { 502 if ( !enablePainting ) {
503 enablePainting = true; 503 enablePainting = true;
504 rowHeightChanged( 0 ); 504 rowHeightChanged( 0 );
505 viewport()->update(); 505 viewport()->update();
506 } else { 506 } else {
507 enablePainting = false; 507 enablePainting = false;
508 } 508 }
509 } 509 }
510} 510}
511 511
512void TodoTable::clear() 512void TodoTable::clear()
513{ 513{
514 for ( QMap<CheckItem*, ToDoEvent *>::Iterator it = todoList.begin(); 514 for ( QMap<CheckItem*, ToDoEvent *>::Iterator it = todoList.begin();
515 it != todoList.end(); ++it ) { 515 it != todoList.end(); ++it ) {
516 ToDoEvent *todo = it.data(); 516 ToDoEvent *todo = it.data();
517 updateJournal( *todo, ACTION_REMOVE ); 517 updateJournal( *todo, ACTION_REMOVE );
518 delete todo; 518 delete todo;
519 } 519 }
520 todoList.clear(); 520 todoList.clear();
521 for ( int r = 0; r < numRows(); ++r ) { 521 for ( int r = 0; r < numRows(); ++r ) {
522 for ( int c = 0; c < numCols(); ++c ) { 522 for ( int c = 0; c < numCols(); ++c ) {
523 if ( cellWidget( r, c ) ) 523 if ( cellWidget( r, c ) )
524 clearCellWidget( r, c ); 524 clearCellWidget( r, c );
525 clearCell( r, c ); 525 clearCell( r, c );
526 } 526 }
527 } 527 }
528 setNumRows( 0 ); 528 setNumRows( 0 );
529} 529}
530 530
531void TodoTable::sortColumn( int col, bool ascending, bool /*wholeRows*/ ) 531void TodoTable::sortColumn( int col, bool ascending, bool /*wholeRows*/ )
532{ 532{
533 // The default for wholeRows is false, however 533 // The default for wholeRows is false, however
534 // for this todo table we want to exchange complete 534 // for this todo table we want to exchange complete
535 // rows when sorting. Also, we always want ascending, since 535 // rows when sorting. Also, we always want ascending, since
536 // the values have a logical order. 536 // the values have a logical order.
537 QTable::sortColumn( col, ascending, TRUE ); 537 QTable::sortColumn( col, ascending, TRUE );
538 updateVisible(); 538 updateVisible();
539} 539}
540 540
541void TodoTable::slotCheckPriority(int row, int col ) 541void TodoTable::slotCheckPriority(int row, int col )
542{ 542{
543 // kludgey work around to make forward along the updated priority... 543 // kludgey work around to make forward along the updated priority...
544 if ( col == 1 ) { 544 if ( col == 1 ) {
545 // let everyone know!! 545 // let everyone know!!
546 ComboItem* i = static_cast<ComboItem*>( item( row, col ) ); 546 ComboItem* i = static_cast<ComboItem*>( item( row, col ) );
547 emit signalPriorityChanged( i->text().toInt() ); 547 emit signalPriorityChanged( i->text().toInt() );
548 } 548 }
549} 549}
550 550
551 551
552void TodoTable::updateJournal( const ToDoEvent &todo, journal_action action ) 552void TodoTable::updateJournal( const ToDoEvent &todo, journal_action action )
553{ 553{
554 QFile f( journalFileName() ); 554 QFile f( journalFileName() );
555 if ( !f.open(IO_WriteOnly|IO_Append) ) 555 if ( !f.open(IO_WriteOnly|IO_Append) )
556 return; 556 return;
557 QString buf; 557 QString buf;
558 QCString str; 558 QCString str;
559 buf = "<Task"; 559 buf = "<Task";
560 // todo.save( buf ); 560 // todo.save( buf );
561 buf += " Action=\"" + QString::number( int(action) ) + "\""; 561 buf += " Action=\"" + QString::number( int(action) ) + "\"";
562 buf += " Uid=\"" + QString::number( todo.uid() ) + "\""; // better write the id 562 buf += " Uid=\"" + QString::number( todo.uid() ) + "\""; // better write the id
563 buf += " Completed=\""+ QString::number((int)todo.isCompleted() ) + "\""; 563 buf += " Completed=\""+ QString::number((int)todo.isCompleted() ) + "\"";
564 buf += " HasDate=\""+ QString::number((int)todo.hasDate() ) +"\""; 564 buf += " HasDate=\""+ QString::number((int)todo.hasDate() ) +"\"";
565 buf += " Priority=\"" + QString::number( todo.priority() ) + "\""; 565 buf += " Priority=\"" + QString::number( todo.priority() ) + "\"";
566 QArray<int> arrat = todo.categories(); 566 QArray<int> arrat = todo.categories();
567 QString attr; 567 QString attr;
568 for(uint i=0; i < arrat.count(); i++ ){ 568 for(uint i=0; i < arrat.count(); i++ ){
569 attr.append(QString::number(arrat[i])+";" ); 569 attr.append(QString::number(arrat[i])+";" );
570 } 570 }
571 if(!attr.isEmpty() ) // remove the last ; 571 if(!attr.isEmpty() ) // remove the last ;
572 attr.remove(attr.length()-1, 1 ); 572 attr.remove(attr.length()-1, 1 );
573 buf += " Categories=\"" + attr + "\""; 573 buf += " Categories=\"" + attr + "\"";
574 buf += " Description=\"" + todo.description() + "\""; 574 buf += " Description=\"" + todo.description() + "\"";
575 buf += " Summary=\"" + todo.summary() + "\"";
575 if(todo.hasDate() ) { 576 if(todo.hasDate() ) {
576 buf += " DateYear=\""+QString::number( todo.date().year() ) + "\""; 577 buf += " DateYear=\""+QString::number( todo.date().year() ) + "\"";
577 buf += " DateMonth=\"" + QString::number( todo.date().month() ) + "\""; 578 buf += " DateMonth=\"" + QString::number( todo.date().month() ) + "\"";
578 buf += " DateDay=\"" + QString::number( todo.date().day() ) + "\""; 579 buf += " DateDay=\"" + QString::number( todo.date().day() ) + "\"";
579 } 580 }
580 buf += "/>\n"; 581 buf += "/>\n";
581 str = buf.utf8(); 582 str = buf.utf8();
582 f.writeBlock( str.data(), str.length() ); 583 f.writeBlock( str.data(), str.length() );
583 f.close(); 584 f.close();
584} 585}
585 586
586void TodoTable::rowHeightChanged( int row ) 587void TodoTable::rowHeightChanged( int row )
587{ 588{
588 if ( enablePainting ) 589 if ( enablePainting )
589 QTable::rowHeightChanged( row ); 590 QTable::rowHeightChanged( row );
590} 591}
591 592
592void TodoTable::loadFile( const QString &/*we use the standard*/ ) 593void TodoTable::loadFile( const QString &/*we use the standard*/ )
593{ 594{
594 595
595 QList<ToDoEvent> list; 596 QList<ToDoEvent> list;
596 ToDoDB todoDB; 597 ToDoDB todoDB;
597 QValueList<ToDoEvent> vaList = todoDB.rawToDos(); 598 QValueList<ToDoEvent> vaList = todoDB.rawToDos();
598 for(QValueList<ToDoEvent>::ConstIterator it = vaList.begin(); it != vaList.end(); ++it ){ 599 for(QValueList<ToDoEvent>::ConstIterator it = vaList.begin(); it != vaList.end(); ++it ){
599 ToDoEvent *event = new ToDoEvent( (*it) ); 600 ToDoEvent *event = new ToDoEvent( (*it) );
600 list.append( event ); 601 list.append( event );
601 } 602 }
602 vaList.clear(); 603 vaList.clear();
603 // qDebug("parsing done=%d", t.elapsed() ); 604 // qDebug("parsing done=%d", t.elapsed() );
604 if ( list.count() > 0 ) { 605 if ( list.count() > 0 ) {
605 internalAddEntries( list ); 606 internalAddEntries( list );
606 list.clear(); 607 list.clear();
607 } 608 }
608// qDebug("loading done: t=%d", t.elapsed() ); 609// qDebug("loading done: t=%d", t.elapsed() );
609} 610}
610 611
611void TodoTable::journalFreeReplaceEntry( const ToDoEvent &todo, int row ) 612void TodoTable::journalFreeReplaceEntry( const ToDoEvent &todo, int row )
612{ 613{
613 QString strTodo; 614 QString strTodo = todo.summary();
614 strTodo = todo.description().left(40).simplifyWhiteSpace(); 615 if( strTodo.isEmpty() ){
616 strTodo = todo.description().left(40).simplifyWhiteSpace();
617 //todo.setSummary(strTodo );
618 }
615 if ( row == -1 ) { 619 if ( row == -1 ) {
616 QMapIterator<CheckItem*, ToDoEvent *> it; 620 QMapIterator<CheckItem*, ToDoEvent *> it;
617 for ( it = todoList.begin(); it != todoList.end(); ++it ) { 621 for ( it = todoList.begin(); it != todoList.end(); ++it ) {
618 if ( *(*it) == todo ) { 622 if ( *(*it) == todo ) {
619 row = it.key()->row(); 623 row = it.key()->row();
620 it.key()->setChecked( todo.isCompleted() ); 624 it.key()->setChecked( todo.isCompleted() );
621 static_cast<ComboItem*>(item(row, 1))->setText( QString::number(todo.priority()) ); 625 static_cast<ComboItem*>(item(row, 1))->setText( QString::number(todo.priority()) );
622 item( row, 2 )->setText( strTodo ); 626 item( row, 2 )->setText( strTodo );
623 627
624 if (showDeadl){ 628 if (showDeadl){
625 static_cast<DueTextItem*>(item(row,3))->setToDoEvent(&todo ); 629 static_cast<DueTextItem*>(item(row,3))->setToDoEvent(&todo );
626 } 630 }
627 631
628 *(*it) = todo; 632 *(*it) = todo;
629 } 633 }
630 } 634 }
631 } else { 635 } else {
632 ToDoEvent *t = todoList[static_cast<CheckItem*>(item(row, 0))]; 636 ToDoEvent *t = todoList[static_cast<CheckItem*>(item(row, 0))];
633 todoList.remove( static_cast<CheckItem*>(item(row, 0)) ); 637 todoList.remove( static_cast<CheckItem*>(item(row, 0)) );
634 delete t; 638 delete t;
635 static_cast<CheckItem*>(item(row, 0))->setChecked( todo.isCompleted() ); 639 static_cast<CheckItem*>(item(row, 0))->setChecked( todo.isCompleted() );
636 static_cast<ComboItem*>(item(row, 1))->setText( QString::number(todo.priority()) ); 640 static_cast<ComboItem*>(item(row, 1))->setText( QString::number(todo.priority()) );
637 item( row, 2 )->setText( strTodo ); 641 item( row, 2 )->setText( strTodo );
638 642
639 if (showDeadl){ 643 if (showDeadl){
640 static_cast<DueTextItem*>(item(row,3))->setToDoEvent(&todo ); 644 static_cast<DueTextItem*>(item(row,3))->setToDoEvent(&todo );
641 } 645 }
642 todoList.insert( static_cast<CheckItem*>(item(row,0)), new ToDoEvent(todo) ); 646 todoList.insert( static_cast<CheckItem*>(item(row,0)), new ToDoEvent(todo) );
643 } 647 }
644} 648}
645 649
646void TodoTable::journalFreeRemoveEntry( int row ) 650void TodoTable::journalFreeRemoveEntry( int row )
647{ 651{
648 CheckItem *chk; 652 CheckItem *chk;
649 chk = static_cast<CheckItem*>(item(row, 0 )); 653 chk = static_cast<CheckItem*>(item(row, 0 ));
650 if ( !chk ) 654 if ( !chk )
651 return; 655 return;
652 todoList.remove( chk ); 656 todoList.remove( chk );
653 657
654 realignTable( row ); 658 realignTable( row );
655} 659}
656 660
657void TodoTable::keyPressEvent( QKeyEvent *e ) 661void TodoTable::keyPressEvent( QKeyEvent *e )
658{ 662{
659 if ( e->key() == Key_Space || e->key() == Key_Return ) { 663 if ( e->key() == Key_Space || e->key() == Key_Return ) {
660 switch ( currentColumn() ) { 664 switch ( currentColumn() ) {
661 case 0: { 665 case 0: {
662 CheckItem *i = static_cast<CheckItem*>(item(currentRow(), 666 CheckItem *i = static_cast<CheckItem*>(item(currentRow(),
663 currentColumn())); 667 currentColumn()));
664 if ( i ) 668 if ( i )
665 i->toggle(); 669 i->toggle();
666 break; 670 break;
667 } 671 }
668 case 1: 672 case 1:
669 break; 673 break;
670 case 2:{ 674 case 2:{
671 ToDoEvent *todo = todoList[static_cast<CheckItem*>(item(currentRow(), 0))]; 675 ToDoEvent *todo = todoList[static_cast<CheckItem*>(item(currentRow(), 0))];
672 emit showDetails(*todo); 676 emit showDetails(*todo);
673 break; 677 break;
674 } 678 }
675 case 3: 679 case 3:
676 // Future: Let us change the dueDate directly... 680 // Future: Let us change the dueDate directly...
677 emit signalEdit(); 681 emit signalEdit();
678 default: 682 default:
679 break; 683 break;
680 } 684 }
681 } else 685 } else
682 QTable::keyPressEvent( e ); 686 QTable::keyPressEvent( e );
683} 687}
684 688
685 689
686QStringList TodoTable::categories() 690QStringList TodoTable::categories()
687{ 691{
688 // This is called seldom, so calling a load in here 692 // This is called seldom, so calling a load in here
689 // should be fine. 693 // should be fine.
690 mCat.load( categoryFileName() ); 694 mCat.load( categoryFileName() );
691 QStringList categoryList = mCat.labels( "Todo List" ); 695 QStringList categoryList = mCat.labels( "Todo List" );
692 return categoryList; 696 return categoryList;
693} 697}
694 698
695void TodoTable::slotDoFind( const QString &findString, bool caseSensitive, 699void TodoTable::slotDoFind( const QString &findString, bool caseSensitive,
696 bool backwards, int category ) 700 bool backwards, int category )
697{ 701{
698 // we have to iterate through the table, this gives the illusion that 702 // we have to iterate through the table, this gives the illusion that
699 // sorting is actually being used. 703 // sorting is actually being used.
700 if ( currFindRow < -1 ) 704 if ( currFindRow < -1 )
701 currFindRow = currentRow() - 1; 705 currFindRow = currentRow() - 1;
702 clearSelection( TRUE ); 706 clearSelection( TRUE );
703 int rows, 707 int rows,
704 row; 708 row;
705 CheckItem *chk; 709 CheckItem *chk;
706 QRegExp r( findString ); 710 QRegExp r( findString );
707 711
708 r.setCaseSensitive( caseSensitive ); 712 r.setCaseSensitive( caseSensitive );
709 rows = numRows(); 713 rows = numRows();
710 static bool wrapAround = true; 714 static bool wrapAround = true;
@@ -815,124 +819,127 @@ void TodoTable::slotCheckDay()
815 mDayTimer->start( 60 * 1000 ); // 60 seconds 819 mDayTimer->start( 60 * 1000 ); // 60 seconds
816} 820}
817// check Action and decide 821// check Action and decide
818/* 822/*
819void TodoTable::doApply(XMLElement *el ) 823void TodoTable::doApply(XMLElement *el )
820{ 824{
821 QString dummy; 825 QString dummy;
822 bool ok; 826 bool ok;
823 int action; 827 int action;
824 dummy = el->attribute("Action" ); 828 dummy = el->attribute("Action" );
825 action = dummy.toInt(&ok ); 829 action = dummy.toInt(&ok );
826 ToDoEvent ev = xmlToEvent( el ); 830 ToDoEvent ev = xmlToEvent( el );
827 if( ok ){ 831 if( ok ){
828 switch( action ){ 832 switch( action ){
829 case ACTION_ADD: 833 case ACTION_ADD:
830 addEntry( ev ); 834 addEntry( ev );
831 break; 835 break;
832 case ACTION_REMOVE:{ // find an entry with the same uid and remove it then 836 case ACTION_REMOVE:{ // find an entry with the same uid and remove it then
833 break; 837 break;
834 } 838 }
835 case ACTION_REPLACE: 839 case ACTION_REPLACE:
836 break; 840 break;
837 } 841 }
838 } 842 }
839} 843}
840*/ 844*/
841namespace { 845namespace {
842static bool taskCompare( const ToDoEvent &task, const QRegExp &r, int category ) 846static bool taskCompare( const ToDoEvent &task, const QRegExp &r, int category )
843{ 847{
844 bool returnMe; 848 bool returnMe;
845 QArray<int> cats; 849 QArray<int> cats;
846 cats = task.categories(); 850 cats = task.categories();
847 851
848 returnMe = false; 852 returnMe = false;
849 if ( (category == -1 && cats.count() == 0) || category == -2 ) 853 if ( (category == -1 && cats.count() == 0) || category == -2 )
850 returnMe = task.match( r ); 854 returnMe = task.match( r );
851 else { 855 else {
852 int i; 856 int i;
853 for ( i = 0; i < int(cats.count()); i++ ) { 857 for ( i = 0; i < int(cats.count()); i++ ) {
854 if ( cats[i] == category ) { 858 if ( cats[i] == category ) {
855 returnMe = task.match( r ); 859 returnMe = task.match( r );
856 break; 860 break;
857 } 861 }
858 } 862 }
859 } 863 }
860 return returnMe; 864 return returnMe;
861} 865}
862 866
863static QString journalFileName() 867static QString journalFileName()
864{ 868{
865 QString str; 869 QString str;
866 str = getenv( "HOME" ); 870 str = getenv( "HOME" );
867 str += "/.opie_todojournal"; 871 str += "/.opie_todojournal";
868 return str; 872 return str;
869} 873}
870static ToDoEvent xmlToEvent( XMLElement *element ) 874static ToDoEvent xmlToEvent( XMLElement *element )
871{ 875{
872 QString dummy; 876 QString dummy;
873 ToDoEvent event; 877 ToDoEvent event;
874 bool ok; 878 bool ok;
875 int dumInt; 879 int dumInt;
876 // completed 880 // completed
877 dummy = element->attribute("Completed" ); 881 dummy = element->attribute("Completed" );
878 dumInt = dummy.toInt(&ok ); 882 dumInt = dummy.toInt(&ok );
879 if(ok ) event.setCompleted( dumInt == 0 ? false : true ); 883 if(ok ) event.setCompleted( dumInt == 0 ? false : true );
880 // hasDate 884 // hasDate
881 dummy = element->attribute("HasDate" ); 885 dummy = element->attribute("HasDate" );
882 dumInt = dummy.toInt(&ok ); 886 dumInt = dummy.toInt(&ok );
883 if(ok ) event.setHasDate( dumInt == 0 ? false: true ); 887 if(ok ) event.setHasDate( dumInt == 0 ? false: true );
884 // set the date 888 // set the date
885 bool hasDa = dumInt; 889 bool hasDa = dumInt;
886 if ( hasDa ) { //parse the date 890 if ( hasDa ) { //parse the date
887 int year, day, month = 0; 891 int year, day, month = 0;
888 year = day = month; 892 year = day = month;
889 // year 893 // year
890 dummy = element->attribute("DateYear" ); 894 dummy = element->attribute("DateYear" );
891 dumInt = dummy.toInt(&ok ); 895 dumInt = dummy.toInt(&ok );
892 if( ok ) year = dumInt; 896 if( ok ) year = dumInt;
893 // month 897 // month
894 dummy = element->attribute("DateMonth" ); 898 dummy = element->attribute("DateMonth" );
895 dumInt = dummy.toInt(&ok ); 899 dumInt = dummy.toInt(&ok );
896 if(ok ) month = dumInt; 900 if(ok ) month = dumInt;
897 dummy = element->attribute("DateDay" ); 901 dummy = element->attribute("DateDay" );
898 dumInt = dummy.toInt(&ok ); 902 dumInt = dummy.toInt(&ok );
899 if(ok ) day = dumInt; 903 if(ok ) day = dumInt;
900 // set the date 904 // set the date
901 QDate date( year, month, day ); 905 QDate date( year, month, day );
902 event.setDate( date); 906 event.setDate( date);
903 } 907 }
904 dummy = element->attribute("Priority" ); 908 dummy = element->attribute("Priority" );
905 dumInt = dummy.toInt(&ok ); 909 dumInt = dummy.toInt(&ok );
906 if(!ok ) dumInt = ToDoEvent::NORMAL; 910 if(!ok ) dumInt = ToDoEvent::NORMAL;
907 event.setPriority( dumInt ); 911 event.setPriority( dumInt );
908 //description 912 //description
909 dummy = element->attribute("Description" ); 913 dummy = element->attribute("Description" );
910 event.setDescription( dummy ); 914 event.setDescription( dummy );
915 // summary
916 dummy = element->attribute("Summary" );
917 event.setSummary( dummy );
911 // category 918 // category
912 dummy = element->attribute("Categories" ); 919 dummy = element->attribute("Categories" );
913 QStringList ids = QStringList::split(";", dummy ); 920 QStringList ids = QStringList::split(";", dummy );
914 event.setCategories( ids ); 921 event.setCategories( ids );
915 922
916 //uid 923 //uid
917 dummy = element->attribute("Uid" ); 924 dummy = element->attribute("Uid" );
918 dumInt = dummy.toInt(&ok ); 925 dumInt = dummy.toInt(&ok );
919 if(ok ) event.setUid( dumInt ); 926 if(ok ) event.setUid( dumInt );
920 return event; 927 return event;
921} 928}
922 929
923} 930}
924// int TodoTable::rowHeight( int ) const 931// int TodoTable::rowHeight( int ) const
925// { 932// {
926// return 18; 933// return 18;
927// } 934// }
928 935
929// int TodoTable::rowPos( int row ) const 936// int TodoTable::rowPos( int row ) const
930// { 937// {
931// return 18*row; 938// return 18*row;
932// } 939// }
933 940
934// int TodoTable::rowAt( int pos ) const 941// int TodoTable::rowAt( int pos ) const
935// { 942// {
936// return QMIN( pos/18, numRows()-1 ); 943// return QMIN( pos/18, numRows()-1 );
937// } 944// }
938 945
diff --git a/core/pim/todo/todotable.h b/core/pim/todo/todotable.h
index 7672f21..39e00d1 100644
--- a/core/pim/todo/todotable.h
+++ b/core/pim/todo/todotable.h
@@ -106,139 +106,140 @@ class TodoTable : public QTable
106public: 106public:
107 TodoTable( QWidget *parent = 0, const char * name = 0 ); 107 TodoTable( QWidget *parent = 0, const char * name = 0 );
108 void addEntry( const ToDoEvent &todo ); 108 void addEntry( const ToDoEvent &todo );
109 void clearFindRow() { currFindRow = -2; } 109 void clearFindRow() { currFindRow = -2; }
110 110
111 ToDoEvent currentEntry() const; 111 ToDoEvent currentEntry() const;
112 void replaceCurrentEntry( const ToDoEvent &todo, bool fromTableItem = false ); 112 void replaceCurrentEntry( const ToDoEvent &todo, bool fromTableItem = false );
113 113
114 QStringList categories(); 114 QStringList categories();
115 115
116 void setShowCompleted( bool sc ) { showComp = sc; updateVisible(); } 116 void setShowCompleted( bool sc ) { showComp = sc; updateVisible(); }
117 bool showCompleted() const { return showComp; } 117 bool showCompleted() const { return showComp; }
118 118
119 void setShowDeadline (bool sd) {showDeadl = sd; updateVisible();} 119 void setShowDeadline (bool sd) {showDeadl = sd; updateVisible();}
120 bool showDeadline() const { return showDeadl;} 120 bool showDeadline() const { return showDeadl;}
121 121
122 void setShowCategory( const QString &c ) { showCat = c; updateVisible(); } 122 void setShowCategory( const QString &c ) { showCat = c; updateVisible(); }
123 const QString &showCategory() const { return showCat; } 123 const QString &showCategory() const { return showCat; }
124 int showCategoryId() const; 124 int showCategoryId() const;
125 125
126 bool save( const QString &fn ); 126 bool save( const QString &fn );
127 void load( const QString &fn ); 127 void load( const QString &fn );
128 void applyJournal( ); 128 void applyJournal( );
129 void clear(); 129 void clear();
130 void removeCurrentEntry(); 130 void removeCurrentEntry();
131 void removeAllEntries() { clear(); }; 131 void removeAllEntries() { clear(); };
132 //void removeAllEntriesInCategory(const QString &category ); 132 //void removeAllEntriesInCategory(const QString &category );
133 133
134 void setPaintingEnabled( bool e ); 134 void setPaintingEnabled( bool e );
135 135
136 virtual void sortColumn( int col, bool ascending, bool /*wholeRows*/ ); 136 virtual void sortColumn( int col, bool ascending, bool /*wholeRows*/ );
137 137
138// int rowHeight( int ) const; 138// int rowHeight( int ) const;
139// int rowPos( int row ) const; 139// int rowPos( int row ) const;
140// virtual int rowAt( int pos ) const; 140// virtual int rowAt( int pos ) const;
141 141
142signals: 142signals:
143 void signalEdit(); 143 void signalEdit();
144 void signalDoneChanged( bool b ); 144 void signalDoneChanged( bool b );
145 void signalPriorityChanged( int i ); 145 void signalPriorityChanged( int i );
146 void signalShowMenu( const QPoint & ); 146 void signalShowMenu( const QPoint & );
147 void signalNotFound(); 147 void signalNotFound();
148 void signalWrapAround(); 148 void signalWrapAround();
149 void showDetails( const ToDoEvent & ); 149 void showDetails( const ToDoEvent & );
150protected: 150protected:
151 void keyPressEvent( QKeyEvent *e ); 151 void keyPressEvent( QKeyEvent *e );
152 152
153private: 153private:
154 void updateVisible(); 154 void updateVisible();
155 void viewportPaintEvent( QPaintEvent * ); 155 void viewportPaintEvent( QPaintEvent * );
156 void internalAddEntries( QList<ToDoEvent> &list); 156 void internalAddEntries( QList<ToDoEvent> &list);
157 inline void insertIntoTable( ToDoEvent *todo, int row ); 157 inline void insertIntoTable( ToDoEvent *todo, int row );
158 void updateJournal( const ToDoEvent &todo, journal_action action); 158 void updateJournal( const ToDoEvent &todo, journal_action action);
159 void mergeJournal(); 159 void mergeJournal();
160 void journalFreeReplaceEntry( const ToDoEvent &todo, int row ); 160 void journalFreeReplaceEntry( const ToDoEvent &todo, int row );
161 void journalFreeRemoveEntry( int row ); 161 void journalFreeRemoveEntry( int row );
162 inline void realignTable( int row ); 162 inline void realignTable( int row );
163 void loadFile( const QString &strFile); 163 void loadFile( const QString &strFile);
164 164
165private slots: 165private slots:
166 void slotClicked( int row, int col, int button, const QPoint &pos ); 166 void slotClicked( int row, int col, int button, const QPoint &pos );
167 void slotPressed( int row, int col, int button, const QPoint &pos ); 167 void slotPressed( int row, int col, int button, const QPoint &pos );
168 void slotCheckPriority(int row, int col ); 168 void slotCheckPriority(int row, int col );
169 void slotCurrentChanged(int row, int col ); 169 void slotCurrentChanged(int row, int col );
170 void slotDoFind( const QString &findString, bool caseSensetive, 170 void slotDoFind( const QString &findString, bool caseSensetive,
171 bool backwards, int category ); 171 bool backwards, int category );
172 void slotShowMenu(); 172 void slotShowMenu();
173 void rowHeightChanged( int row ); 173 void rowHeightChanged( int row );
174 void slotCheckDay(); // check the day 174 void slotCheckDay(); // check the day
175 175
176private: 176private:
177 friend class TodoWindow; 177 friend class TodoWindow;
178 178
179 QMap<CheckItem*, ToDoEvent *> todoList; 179 QMap<CheckItem*, ToDoEvent *> todoList;
180 QStringList categoryList; 180 QStringList categoryList;
181 bool showComp; 181 bool showComp;
182 QString showCat; 182 QString showCat;
183 QTimer *menuTimer; 183 QTimer *menuTimer;
184 QDate mDay; 184 QDate mDay;
185 QTimer *mDayTimer; // see if the day changed 185 QTimer *mDayTimer; // see if the day changed
186 bool enablePainting; 186 bool enablePainting;
187 Categories mCat; 187 Categories mCat;
188 int currFindRow; 188 int currFindRow;
189 bool showDeadl:1; 189 bool showDeadl:1;
190}; 190};
191 191
192 192
193inline void TodoTable::insertIntoTable( ToDoEvent *todo, int row ) 193inline void TodoTable::insertIntoTable( ToDoEvent *todo, int row )
194{ 194{
195 QString sortKey = (char) ((todo->isCompleted() ? 'a' : 'A') 195 QString sortKey = (char) ((todo->isCompleted() ? 'a' : 'A')
196 + todo->priority() ) 196 + todo->priority() )
197 + Qtopia::buildSortKey( todo->description() ); 197 + Qtopia::buildSortKey( todo->description() );
198 CheckItem *chk = new CheckItem( this, sortKey ); 198 CheckItem *chk = new CheckItem( this, sortKey );
199 chk->setChecked( todo->isCompleted() ); 199 chk->setChecked( todo->isCompleted() );
200 ComboItem *cmb = new ComboItem( this, QTableItem::WhenCurrent ); 200 ComboItem *cmb = new ComboItem( this, QTableItem::WhenCurrent );
201 cmb->setText( QString::number( todo->priority() ) ); 201 cmb->setText( QString::number( todo->priority() ) );
202 QTableItem *ti = new TodoTextItem( this, todo->description().left(40).simplifyWhiteSpace() ); 202 QString sum = todo->summary();
203 QTableItem *ti = new TodoTextItem( this, sum.isEmpty() ? todo->description().left(40).simplifyWhiteSpace() : sum );
203 ti->setReplaceable( false ); 204 ti->setReplaceable( false );
204 205
205 DueTextItem *due = new DueTextItem(this, todo ); 206 DueTextItem *due = new DueTextItem(this, todo );
206 setItem( row, 3, due); 207 setItem( row, 3, due);
207 208
208 setItem( row, 0, chk ); 209 setItem( row, 0, chk );
209 setItem( row, 1, cmb ); 210 setItem( row, 1, cmb );
210 setItem( row, 2, ti ); 211 setItem( row, 2, ti );
211 212
212 213
213 todoList.insert( chk, todo ); 214 todoList.insert( chk, todo );
214} 215}
215 216
216inline void TodoTable::realignTable( int row ) 217inline void TodoTable::realignTable( int row )
217{ 218{
218 QTableItem *ti1, 219 QTableItem *ti1,
219 *ti2, 220 *ti2,
220 *ti3, 221 *ti3,
221 *ti4; 222 *ti4;
222 int totalRows = numRows(); 223 int totalRows = numRows();
223 for ( int curr = row; curr < totalRows - 1; curr++ ) { 224 for ( int curr = row; curr < totalRows - 1; curr++ ) {
224 // this is bad, we must take the item out and then 225 // this is bad, we must take the item out and then
225 // set it. In the end, it behaves no worse (time wise) 226 // set it. In the end, it behaves no worse (time wise)
226 // then the old way of saving the entries to file, clearing 227 // then the old way of saving the entries to file, clearing
227 // the table re-reading in the file and resetting the table 228 // the table re-reading in the file and resetting the table
228 ti1 = item( curr + 1, 0 ); 229 ti1 = item( curr + 1, 0 );
229 ti2 = item( curr + 1, 1 ); 230 ti2 = item( curr + 1, 1 );
230 ti3 = item( curr + 1, 2 ); 231 ti3 = item( curr + 1, 2 );
231 ti4 = item( curr + 1, 3 ); 232 ti4 = item( curr + 1, 3 );
232 takeItem( ti1 ); 233 takeItem( ti1 );
233 takeItem( ti2 ); 234 takeItem( ti2 );
234 takeItem( ti3 ); 235 takeItem( ti3 );
235 takeItem( ti4 ); 236 takeItem( ti4 );
236 setItem( curr, 0, ti1 ); 237 setItem( curr, 0, ti1 );
237 setItem( curr, 1, ti2 ); 238 setItem( curr, 1, ti2 );
238 setItem( curr, 2, ti3 ); 239 setItem( curr, 2, ti3 );
239 setItem( curr, 3, ti4 ); 240 setItem( curr, 3, ti4 );
240 } 241 }
241 setNumRows( totalRows - 1 ); 242 setNumRows( totalRows - 1 );
242} 243}
243 244
244#endif 245#endif