summaryrefslogtreecommitdiffabout
path: root/korganizer
Unidiff
Diffstat (limited to 'korganizer') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/kotodoview.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp
index 99e6a3a..c5fae17 100644
--- a/korganizer/kotodoview.cpp
+++ b/korganizer/kotodoview.cpp
@@ -1,1510 +1,1517 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qlayout.h> 24#include <qlayout.h>
25#include <qheader.h> 25#include <qheader.h>
26#include <qcursor.h> 26#include <qcursor.h>
27#include <qwhatsthis.h> 27#include <qwhatsthis.h>
28#include <qdialog.h> 28#include <qdialog.h>
29#include <qlabel.h> 29#include <qlabel.h>
30#include <qpushbutton.h> 30#include <qpushbutton.h>
31 31
32#include <qinputdialog.h> 32#include <qinputdialog.h>
33 33
34#include <qvbox.h> 34#include <qvbox.h>
35#include <kdebug.h> 35#include <kdebug.h>
36#include "koprefs.h" 36#include "koprefs.h"
37#include <klocale.h> 37#include <klocale.h>
38#include <kglobal.h> 38#include <kglobal.h>
39#include <kiconloader.h> 39#include <kiconloader.h>
40#include <kmessagebox.h> 40#include <kmessagebox.h>
41 41
42#include <libkcal/icaldrag.h> 42#include <libkcal/icaldrag.h>
43#include <libkcal/vcaldrag.h> 43#include <libkcal/vcaldrag.h>
44#include <libkcal/calfilter.h> 44#include <libkcal/calfilter.h>
45#include <libkcal/dndfactory.h> 45#include <libkcal/dndfactory.h>
46#include <libkcal/calendarresources.h> 46#include <libkcal/calendarresources.h>
47#include <libkcal/resourcecalendar.h> 47#include <libkcal/resourcecalendar.h>
48#include <kresources/resourceselectdialog.h> 48#include <kresources/resourceselectdialog.h>
49#include <libkcal/kincidenceformatter.h> 49#include <libkcal/kincidenceformatter.h>
50#ifndef DESKTOP_VERSION 50#ifndef DESKTOP_VERSION
51#include <qpe/qpeapplication.h> 51#include <qpe/qpeapplication.h>
52#else 52#else
53#include <qapplication.h> 53#include <qapplication.h>
54#endif 54#endif
55#ifndef KORG_NOPRINTER 55#ifndef KORG_NOPRINTER
56#include "calprinter.h" 56#include "calprinter.h"
57#endif 57#endif
58#include "docprefs.h" 58#include "docprefs.h"
59 59
60#include "kotodoview.h" 60#include "kotodoview.h"
61using namespace KOrg; 61using namespace KOrg;
62 62
63 63
64KOStopTodoPrefs::KOStopTodoPrefs( Todo* todo, QWidget *parent, const char *name ) : 64KOStopTodoPrefs::KOStopTodoPrefs( Todo* todo, QWidget *parent, const char *name ) :
65 QDialog( parent, name, true ) 65 QDialog( parent, name, true )
66{ 66{
67 mTodo = todo; 67 mTodo = todo;
68 setCaption( i18n("Stop todo") ); 68 setCaption( i18n("Stop todo") );
69 QVBoxLayout* lay = new QVBoxLayout( this ); 69 QVBoxLayout* lay = new QVBoxLayout( this );
70 lay->setSpacing( 3 ); 70 lay->setSpacing( 3 );
71 lay->setMargin( 3 ); 71 lay->setMargin( 3 );
72 QLabel * lab = new QLabel( i18n("%1\nis running!").arg( todo->summary() ), this ); 72 QLabel * lab = new QLabel( i18n("%1\nis running!").arg( todo->summary() ), this );
73 lay->addWidget( lab ); 73 lay->addWidget( lab );
74 lab->setAlignment( AlignHCenter ); 74 lab->setAlignment( AlignHCenter );
75 75
76 QPushButton * ok = new QPushButton( i18n("Stop and save"), this ); 76 QPushButton * ok = new QPushButton( i18n("Stop and save"), this );
77 lay->addWidget( ok ); 77 lay->addWidget( ok );
78 QPushButton * cancel = new QPushButton( i18n("Continue running"), this ); 78 QPushButton * cancel = new QPushButton( i18n("Continue running"), this );
79 lay->addWidget( cancel ); 79 lay->addWidget( cancel );
80 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 80 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
81 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 81 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
82 ok = new QPushButton( i18n("Stop - do not save"), this ); 82 ok = new QPushButton( i18n("Stop - do not save"), this );
83 connect ( ok,SIGNAL(clicked() ),this , SLOT ( doNotSave() ) ); 83 connect ( ok,SIGNAL(clicked() ),this , SLOT ( doNotSave() ) );
84 lay->addWidget( ok ); 84 lay->addWidget( ok );
85 resize( 200, 200 ); 85 resize( 200, 200 );
86} 86}
87 87
88void KOStopTodoPrefs::accept() 88void KOStopTodoPrefs::accept()
89{ 89{
90 qDebug("KOStopTodoPrefs::accept() "); 90 qDebug("KOStopTodoPrefs::accept() ");
91
92
93#if 0
94 t->setRunningFalse( comment );
95
96 t->setRunning( false );
97#endif
98
91 QDialog::accept(); 99 QDialog::accept();
92} 100}
93void KOStopTodoPrefs::doNotSave() 101void KOStopTodoPrefs::doNotSave()
94{ 102{
95
96 int result = KMessageBox::warningContinueCancel(this, 103 int result = KMessageBox::warningContinueCancel(this,
97 i18n("Do you really want to set\nthe state to stopped\nwithout saving the data?"),mTodo->summary() ); 104 i18n("Do you really want to set\nthe state to stopped\nwithout saving the data?"),mTodo->summary() );
98 if (result != KMessageBox::Continue) return; 105 if (result != KMessageBox::Continue) return;
99 mTodo->stopRunning(); 106 mTodo->stopRunning();
100 QDialog::accept(); 107 QDialog::accept();
101} 108}
102 109
103 110
104class KOTodoViewWhatsThis :public QWhatsThis 111class KOTodoViewWhatsThis :public QWhatsThis
105{ 112{
106public: 113public:
107 KOTodoViewWhatsThis( QWidget *wid, KOTodoView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { }; 114 KOTodoViewWhatsThis( QWidget *wid, KOTodoView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { };
108 115
109protected: 116protected:
110 virtual QString text( const QPoint& p) 117 virtual QString text( const QPoint& p)
111 { 118 {
112 return _view->getWhatsThisText(p) ; 119 return _view->getWhatsThisText(p) ;
113 } 120 }
114private: 121private:
115 QWidget* _wid; 122 QWidget* _wid;
116 KOTodoView * _view; 123 KOTodoView * _view;
117}; 124};
118 125
119KOTodoListView::KOTodoListView(Calendar *calendar,QWidget *parent, 126KOTodoListView::KOTodoListView(Calendar *calendar,QWidget *parent,
120 const char *name) : 127 const char *name) :
121 KListView(parent,name) 128 KListView(parent,name)
122{ 129{
123 mName = QString ( name ); 130 mName = QString ( name );
124 mCalendar = calendar; 131 mCalendar = calendar;
125#ifndef DESKTOP_VERSION 132#ifndef DESKTOP_VERSION
126 QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold ); 133 QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold );
127#endif 134#endif
128 mOldCurrent = 0; 135 mOldCurrent = 0;
129 mMousePressed = false; 136 mMousePressed = false;
130 137
131 setAcceptDrops(true); 138 setAcceptDrops(true);
132 viewport()->setAcceptDrops(true); 139 viewport()->setAcceptDrops(true);
133 int size = 16; 140 int size = 16;
134 if (qApp->desktop()->width() < 300 ) 141 if (qApp->desktop()->width() < 300 )
135 size = 12; 142 size = 12;
136 setTreeStepSize( size + 6 ); 143 setTreeStepSize( size + 6 );
137 144
138} 145}
139 146
140void KOTodoListView::contentsDragEnterEvent(QDragEnterEvent *e) 147void KOTodoListView::contentsDragEnterEvent(QDragEnterEvent *e)
141{ 148{
142#ifndef KORG_NODND 149#ifndef KORG_NODND
143// kdDebug() << "KOTodoListView::contentsDragEnterEvent" << endl; 150// kdDebug() << "KOTodoListView::contentsDragEnterEvent" << endl;
144 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 151 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
145 !QTextDrag::canDecode( e ) ) { 152 !QTextDrag::canDecode( e ) ) {
146 e->ignore(); 153 e->ignore();
147 return; 154 return;
148 } 155 }
149 156
150 mOldCurrent = currentItem(); 157 mOldCurrent = currentItem();
151#endif 158#endif
152} 159}
153 160
154 161
155void KOTodoListView::contentsDragMoveEvent(QDragMoveEvent *e) 162void KOTodoListView::contentsDragMoveEvent(QDragMoveEvent *e)
156{ 163{
157#ifndef KORG_NODND 164#ifndef KORG_NODND
158// kdDebug() << "KOTodoListView::contentsDragMoveEvent" << endl; 165// kdDebug() << "KOTodoListView::contentsDragMoveEvent" << endl;
159 166
160 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 167 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
161 !QTextDrag::canDecode( e ) ) { 168 !QTextDrag::canDecode( e ) ) {
162 e->ignore(); 169 e->ignore();
163 return; 170 return;
164 } 171 }
165 172
166 e->accept(); 173 e->accept();
167#endif 174#endif
168} 175}
169 176
170void KOTodoListView::contentsDragLeaveEvent(QDragLeaveEvent *) 177void KOTodoListView::contentsDragLeaveEvent(QDragLeaveEvent *)
171{ 178{
172#ifndef KORG_NODND 179#ifndef KORG_NODND
173// kdDebug() << "KOTodoListView::contentsDragLeaveEvent" << endl; 180// kdDebug() << "KOTodoListView::contentsDragLeaveEvent" << endl;
174 181
175 setCurrentItem(mOldCurrent); 182 setCurrentItem(mOldCurrent);
176 setSelected(mOldCurrent,true); 183 setSelected(mOldCurrent,true);
177#endif 184#endif
178} 185}
179 186
180void KOTodoListView::contentsDropEvent(QDropEvent *e) 187void KOTodoListView::contentsDropEvent(QDropEvent *e)
181{ 188{
182#ifndef KORG_NODND 189#ifndef KORG_NODND
183// kdDebug() << "KOTodoListView::contentsDropEvent" << endl; 190// kdDebug() << "KOTodoListView::contentsDropEvent" << endl;
184 191
185 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 192 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
186 !QTextDrag::canDecode( e ) ) { 193 !QTextDrag::canDecode( e ) ) {
187 e->ignore(); 194 e->ignore();
188 return; 195 return;
189 } 196 }
190 197
191 DndFactory factory( mCalendar ); 198 DndFactory factory( mCalendar );
192 Todo *todo = factory.createDropTodo(e); 199 Todo *todo = factory.createDropTodo(e);
193 200
194 if (todo) { 201 if (todo) {
195 e->acceptAction(); 202 e->acceptAction();
196 203
197 KOTodoViewItem *destination = 204 KOTodoViewItem *destination =
198 (KOTodoViewItem *)itemAt(contentsToViewport(e->pos())); 205 (KOTodoViewItem *)itemAt(contentsToViewport(e->pos()));
199 Todo *destinationEvent = 0; 206 Todo *destinationEvent = 0;
200 if (destination) destinationEvent = destination->todo(); 207 if (destination) destinationEvent = destination->todo();
201 208
202 Todo *existingTodo = mCalendar->todo(todo->uid()); 209 Todo *existingTodo = mCalendar->todo(todo->uid());
203 210
204 if(existingTodo) { 211 if(existingTodo) {
205 Incidence *to = destinationEvent; 212 Incidence *to = destinationEvent;
206 while(to) { 213 while(to) {
207 if (to->uid() == todo->uid()) { 214 if (to->uid() == todo->uid()) {
208 KMessageBox::sorry(this, 215 KMessageBox::sorry(this,
209 i18n("Cannot move Todo to itself\nor a child of itself"), 216 i18n("Cannot move Todo to itself\nor a child of itself"),
210 i18n("Drop Todo")); 217 i18n("Drop Todo"));
211 delete todo; 218 delete todo;
212 return; 219 return;
213 } 220 }
214 to = to->relatedTo(); 221 to = to->relatedTo();
215 } 222 }
216 internalDrop = true; 223 internalDrop = true;
217 if ( destinationEvent ) 224 if ( destinationEvent )
218 reparentTodoSignal( destinationEvent, existingTodo ); 225 reparentTodoSignal( destinationEvent, existingTodo );
219 else 226 else
220 unparentTodoSignal(existingTodo); 227 unparentTodoSignal(existingTodo);
221 delete todo; 228 delete todo;
222 } else { 229 } else {
223 mCalendar->addTodo(todo); 230 mCalendar->addTodo(todo);
224 emit todoDropped(todo, KOGlobals::EVENTADDED); 231 emit todoDropped(todo, KOGlobals::EVENTADDED);
225 if ( destinationEvent ) 232 if ( destinationEvent )
226 reparentTodoSignal( destinationEvent, todo ); 233 reparentTodoSignal( destinationEvent, todo );
227 } 234 }
228 } 235 }
229 else { 236 else {
230 QString text; 237 QString text;
231 if (QTextDrag::decode(e,text)) { 238 if (QTextDrag::decode(e,text)) {
232 //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) ); 239 //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) );
233 KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) )); 240 KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) ));
234 qDebug("Dropped : " + text); 241 qDebug("Dropped : " + text);
235 QStringList emails = QStringList::split(",",text); 242 QStringList emails = QStringList::split(",",text);
236 for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) { 243 for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) {
237 int pos = (*it).find("<"); 244 int pos = (*it).find("<");
238 QString name = (*it).left(pos); 245 QString name = (*it).left(pos);
239 QString email = (*it).mid(pos); 246 QString email = (*it).mid(pos);
240 if (!email.isEmpty() && todoi) { 247 if (!email.isEmpty() && todoi) {
241 todoi->todo()->addAttendee(new Attendee(name,email)); 248 todoi->todo()->addAttendee(new Attendee(name,email));
242 } 249 }
243 } 250 }
244 } 251 }
245 else { 252 else {
246 qDebug("KOTodoListView::contentsDropEvent(): Todo from drop not decodable "); 253 qDebug("KOTodoListView::contentsDropEvent(): Todo from drop not decodable ");
247 e->ignore(); 254 e->ignore();
248 } 255 }
249 } 256 }
250#endif 257#endif
251} 258}
252void KOTodoListView::wheelEvent (QWheelEvent *e) 259void KOTodoListView::wheelEvent (QWheelEvent *e)
253{ 260{
254 QListView::wheelEvent (e); 261 QListView::wheelEvent (e);
255} 262}
256 263
257void KOTodoListView::contentsMousePressEvent(QMouseEvent* e) 264void KOTodoListView::contentsMousePressEvent(QMouseEvent* e)
258{ 265{
259 266
260 QPoint p(contentsToViewport(e->pos())); 267 QPoint p(contentsToViewport(e->pos()));
261 QListViewItem *i = itemAt(p); 268 QListViewItem *i = itemAt(p);
262 bool rootClicked = true; 269 bool rootClicked = true;
263 if (i) { 270 if (i) {
264 // if the user clicked into the root decoration of the item, don't 271 // if the user clicked into the root decoration of the item, don't
265 // try to start a drag! 272 // try to start a drag!
266 int X = p.x(); 273 int X = p.x();
267 //qDebug("%d %d %d", X, header()->sectionPos(0), treeStepSize() ); 274 //qDebug("%d %d %d", X, header()->sectionPos(0), treeStepSize() );
268 if (X > header()->sectionPos(0) + 275 if (X > header()->sectionPos(0) +
269 treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) + 276 treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) +
270 itemMargin() +i->height()|| 277 itemMargin() +i->height()||
271 X < header()->sectionPos(0)) { 278 X < header()->sectionPos(0)) {
272 rootClicked = false; 279 rootClicked = false;
273 } 280 }
274 } else { 281 } else {
275 rootClicked = false; 282 rootClicked = false;
276 } 283 }
277#ifndef KORG_NODND 284#ifndef KORG_NODND
278 mMousePressed = false; 285 mMousePressed = false;
279 if (! rootClicked && !( e->button() == RightButton) ) { 286 if (! rootClicked && !( e->button() == RightButton) ) {
280 mPressPos = e->pos(); 287 mPressPos = e->pos();
281 mMousePressed = true; 288 mMousePressed = true;
282 } else { 289 } else {
283 mMousePressed = false; 290 mMousePressed = false;
284 } 291 }
285#endif 292#endif
286 //qDebug("KOTodoListView::contentsMousePressEvent %d", rootClicked); 293 //qDebug("KOTodoListView::contentsMousePressEvent %d", rootClicked);
287#ifndef DESKTOP_VERSION 294#ifndef DESKTOP_VERSION
288 if (!( e->button() == RightButton && rootClicked) ) 295 if (!( e->button() == RightButton && rootClicked) )
289 QListView::contentsMousePressEvent(e); 296 QListView::contentsMousePressEvent(e);
290#else 297#else
291 QListView::contentsMousePressEvent(e); 298 QListView::contentsMousePressEvent(e);
292#endif 299#endif
293} 300}
294void KOTodoListView::paintEvent(QPaintEvent* e) 301void KOTodoListView::paintEvent(QPaintEvent* e)
295{ 302{
296 emit paintNeeded(); 303 emit paintNeeded();
297 QListView::paintEvent( e); 304 QListView::paintEvent( e);
298} 305}
299void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e) 306void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e)
300{ 307{
301 308
302#ifndef KORG_NODND 309#ifndef KORG_NODND
303 //QListView::contentsMouseMoveEvent(e); 310 //QListView::contentsMouseMoveEvent(e);
304 if (mMousePressed && (mPressPos - e->pos()).manhattanLength() > 311 if (mMousePressed && (mPressPos - e->pos()).manhattanLength() >
305 QApplication::startDragDistance()*3) { 312 QApplication::startDragDistance()*3) {
306 mMousePressed = false; 313 mMousePressed = false;
307 QListViewItem *item = itemAt(contentsToViewport(mPressPos)); 314 QListViewItem *item = itemAt(contentsToViewport(mPressPos));
308 if (item) { 315 if (item) {
309 DndFactory factory( mCalendar ); 316 DndFactory factory( mCalendar );
310 ICalDrag *vd = factory.createDrag( 317 ICalDrag *vd = factory.createDrag(
311 ((KOTodoViewItem *)item)->todo(),viewport()); 318 ((KOTodoViewItem *)item)->todo(),viewport());
312 internalDrop = false; 319 internalDrop = false;
313 // we cannot do any senseful here, because the DnD is still broken in Qt 320 // we cannot do any senseful here, because the DnD is still broken in Qt
314 if (vd->drag()) { 321 if (vd->drag()) {
315 if ( !internalDrop ) { 322 if ( !internalDrop ) {
316 //emit deleteTodo( ((KOTodoViewItem *)item)->todo() ); 323 //emit deleteTodo( ((KOTodoViewItem *)item)->todo() );
317 qDebug("Dnd: External move: Delete drag source "); 324 qDebug("Dnd: External move: Delete drag source ");
318 } else 325 } else
319 qDebug("Dnd: Internal move "); 326 qDebug("Dnd: Internal move ");
320 327
321 } else { 328 } else {
322 if ( !internalDrop ) { 329 if ( !internalDrop ) {
323 qDebug("Dnd: External Copy"); 330 qDebug("Dnd: External Copy");
324 } else 331 } else
325 qDebug("DnD: Internal copy: Copy pending"); 332 qDebug("DnD: Internal copy: Copy pending");
326 } 333 }
327 } 334 }
328 } 335 }
329#endif 336#endif
330} 337}
331void KOTodoListView::keyReleaseEvent ( QKeyEvent *e ) 338void KOTodoListView::keyReleaseEvent ( QKeyEvent *e )
332{ 339{
333 if ( !e->isAutoRepeat() ) { 340 if ( !e->isAutoRepeat() ) {
334 mFlagKeyPressed = false; 341 mFlagKeyPressed = false;
335 } 342 }
336} 343}
337 344
338 345
339void KOTodoListView::keyPressEvent ( QKeyEvent * e ) 346void KOTodoListView::keyPressEvent ( QKeyEvent * e )
340{ 347{
341 qApp->processEvents(); 348 qApp->processEvents();
342 if ( e->isAutoRepeat() && !mFlagKeyPressed ) { 349 if ( e->isAutoRepeat() && !mFlagKeyPressed ) {
343 e->ignore(); 350 e->ignore();
344 // qDebug(" ignore %d",e->isAutoRepeat() ); 351 // qDebug(" ignore %d",e->isAutoRepeat() );
345 return; 352 return;
346 } 353 }
347 if (! e->isAutoRepeat() ) 354 if (! e->isAutoRepeat() )
348 mFlagKeyPressed = true; 355 mFlagKeyPressed = true;
349 QListViewItem* cn; 356 QListViewItem* cn;
350 if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) { 357 if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) {
351 cn = currentItem(); 358 cn = currentItem();
352 if ( cn ) { 359 if ( cn ) {
353 KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); 360 KOTodoViewItem* ci = (KOTodoViewItem*)( cn );
354 if ( ci ){ 361 if ( ci ){
355 if ( e->state() == ShiftButton ) 362 if ( e->state() == ShiftButton )
356 ci->setOn( false ); 363 ci->setOn( false );
357 else 364 else
358 ci->setOn( true ); 365 ci->setOn( true );
359 cn = cn->itemBelow(); 366 cn = cn->itemBelow();
360 if ( cn ) { 367 if ( cn ) {
361 setCurrentItem ( cn ); 368 setCurrentItem ( cn );
362 ensureItemVisible ( cn ); 369 ensureItemVisible ( cn );
363 } 370 }
364 371
365 } 372 }
366 } 373 }
367 374
368 return; 375 return;
369 } 376 }
370 377
371 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) { 378 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) {
372 switch ( e->key() ) { 379 switch ( e->key() ) {
373 case Qt::Key_Down: 380 case Qt::Key_Down:
374 case Qt::Key_Up: 381 case Qt::Key_Up:
375 QListView::keyPressEvent ( e ); 382 QListView::keyPressEvent ( e );
376 break; 383 break;
377 case Qt::Key_Left: 384 case Qt::Key_Left:
378 case Qt::Key_Right: 385 case Qt::Key_Right:
379 QListView::keyPressEvent ( e ); 386 QListView::keyPressEvent ( e );
380 e->accept(); 387 e->accept();
381 return; 388 return;
382 break; 389 break;
383 default: 390 default:
384 e->ignore(); 391 e->ignore();
385 break; 392 break;
386 } 393 }
387 return; 394 return;
388 } 395 }
389 e->ignore(); 396 e->ignore();
390} 397}
391void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e) 398void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e)
392{ 399{
393 QListView::contentsMouseReleaseEvent(e); 400 QListView::contentsMouseReleaseEvent(e);
394 mMousePressed = false; 401 mMousePressed = false;
395} 402}
396 403
397void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e) 404void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e)
398{ 405{
399 if (!e) return; 406 if (!e) return;
400 407
401 QPoint vp = contentsToViewport(e->pos()); 408 QPoint vp = contentsToViewport(e->pos());
402 409
403 QListViewItem *item = itemAt(vp); 410 QListViewItem *item = itemAt(vp);
404 411
405 emit double_Clicked(item); 412 emit double_Clicked(item);
406 if (!item) return; 413 if (!item) return;
407 414
408 emit doubleClicked(item,vp,0); 415 emit doubleClicked(item,vp,0);
409} 416}
410 417
411///////////////////////////////////////////////////////////////////////////// 418/////////////////////////////////////////////////////////////////////////////
412 419
413KOQuickTodo::KOQuickTodo(QWidget *parent) : 420KOQuickTodo::KOQuickTodo(QWidget *parent) :
414 QLineEdit(parent) 421 QLineEdit(parent)
415{ 422{
416 setText(i18n("Click to add a new Todo")); 423 setText(i18n("Click to add a new Todo"));
417} 424}
418 425
419void KOQuickTodo::focusInEvent(QFocusEvent *ev) 426void KOQuickTodo::focusInEvent(QFocusEvent *ev)
420{ 427{
421 if ( text()==i18n("Click to add a new Todo") ) 428 if ( text()==i18n("Click to add a new Todo") )
422 setText(""); 429 setText("");
423 QLineEdit::focusInEvent(ev); 430 QLineEdit::focusInEvent(ev);
424} 431}
425 432
426void KOQuickTodo::focusOutEvent(QFocusEvent *ev) 433void KOQuickTodo::focusOutEvent(QFocusEvent *ev)
427{ 434{
428 setText(i18n("Click to add a new Todo")); 435 setText(i18n("Click to add a new Todo"));
429 QLineEdit::focusOutEvent(ev); 436 QLineEdit::focusOutEvent(ev);
430} 437}
431 438
432///////////////////////////////////////////////////////////////////////////// 439/////////////////////////////////////////////////////////////////////////////
433 440
434KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) : 441KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) :
435 KOrg::BaseView(calendar,parent,name) 442 KOrg::BaseView(calendar,parent,name)
436{ 443{
437 mPendingUpdateBeforeRepaint = false; 444 mPendingUpdateBeforeRepaint = false;
438 isFlatDisplay = false; 445 isFlatDisplay = false;
439 mNavigator = 0; 446 mNavigator = 0;
440 QBoxLayout *topLayout = new QVBoxLayout(this); 447 QBoxLayout *topLayout = new QVBoxLayout(this);
441 mName = QString ( name ); 448 mName = QString ( name );
442 mBlockUpdate = false; 449 mBlockUpdate = false;
443 mQuickAdd = new KOQuickTodo(this); 450 mQuickAdd = new KOQuickTodo(this);
444 topLayout->addWidget(mQuickAdd); 451 topLayout->addWidget(mQuickAdd);
445 452
446 if ( !KOPrefs::instance()->mEnableQuickTodo ) mQuickAdd->hide(); 453 if ( !KOPrefs::instance()->mEnableQuickTodo ) mQuickAdd->hide();
447 454
448 mTodoListView = new KOTodoListView(calendar,this, name ); 455 mTodoListView = new KOTodoListView(calendar,this, name );
449 topLayout->addWidget(mTodoListView); 456 topLayout->addWidget(mTodoListView);
450 //mTodoListView->header()->setMaximumHeight(30); 457 //mTodoListView->header()->setMaximumHeight(30);
451 mTodoListView->setRootIsDecorated(true); 458 mTodoListView->setRootIsDecorated(true);
452 mTodoListView->setAllColumnsShowFocus(true); 459 mTodoListView->setAllColumnsShowFocus(true);
453 460
454 mTodoListView->setShowSortIndicator(true); 461 mTodoListView->setShowSortIndicator(true);
455 462
456 mTodoListView->addColumn(i18n("Todo")); 463 mTodoListView->addColumn(i18n("Todo"));
457 mTodoListView->addColumn(i18n("Prio")); 464 mTodoListView->addColumn(i18n("Prio"));
458 mTodoListView->setColumnAlignment(1,AlignHCenter); 465 mTodoListView->setColumnAlignment(1,AlignHCenter);
459 mTodoListView->addColumn(i18n("Complete")); 466 mTodoListView->addColumn(i18n("Complete"));
460 mTodoListView->setColumnAlignment(2,AlignCenter); 467 mTodoListView->setColumnAlignment(2,AlignCenter);
461 468
462 mTodoListView->addColumn(i18n("Due Date")); 469 mTodoListView->addColumn(i18n("Due Date"));
463 mTodoListView->setColumnAlignment(3,AlignLeft); 470 mTodoListView->setColumnAlignment(3,AlignLeft);
464 mTodoListView->addColumn(i18n("Due Time")); 471 mTodoListView->addColumn(i18n("Due Time"));
465 mTodoListView->setColumnAlignment(4,AlignHCenter); 472 mTodoListView->setColumnAlignment(4,AlignHCenter);
466 473
467 mTodoListView->addColumn(i18n("Start Date")); 474 mTodoListView->addColumn(i18n("Start Date"));
468 mTodoListView->setColumnAlignment(5,AlignLeft); 475 mTodoListView->setColumnAlignment(5,AlignLeft);
469 mTodoListView->addColumn(i18n("Start Time")); 476 mTodoListView->addColumn(i18n("Start Time"));
470 mTodoListView->setColumnAlignment(6,AlignHCenter); 477 mTodoListView->setColumnAlignment(6,AlignHCenter);
471 478
472 mTodoListView->addColumn(i18n("Cancelled")); 479 mTodoListView->addColumn(i18n("Cancelled"));
473 mTodoListView->addColumn(i18n("Categories")); 480 mTodoListView->addColumn(i18n("Categories"));
474 mTodoListView->addColumn(i18n("Calendar")); 481 mTodoListView->addColumn(i18n("Calendar"));
475#if 0 482#if 0
476 mTodoListView->addColumn(i18n("Sort Id")); 483 mTodoListView->addColumn(i18n("Sort Id"));
477 mTodoListView->setColumnAlignment(4,AlignHCenter); 484 mTodoListView->setColumnAlignment(4,AlignHCenter);
478#endif 485#endif
479 486
480 mTodoListView->setMinimumHeight( 60 ); 487 mTodoListView->setMinimumHeight( 60 );
481 mTodoListView->setItemsRenameable( true ); 488 mTodoListView->setItemsRenameable( true );
482 mTodoListView->setRenameable( 0 ); 489 mTodoListView->setRenameable( 0 );
483 mTodoListView->setColumnWidth( 0, 120 ); 490 mTodoListView->setColumnWidth( 0, 120 );
484 int iii = 0; 491 int iii = 0;
485 for ( iii = 0; iii< 10 ; ++iii ) 492 for ( iii = 0; iii< 10 ; ++iii )
486 mTodoListView->setColumnWidthMode( iii, QListView::Manual ); 493 mTodoListView->setColumnWidthMode( iii, QListView::Manual );
487 494
488 495
489 mKOTodoViewWhatsThis = new KOTodoViewWhatsThis(mTodoListView->viewport(),this); 496 mKOTodoViewWhatsThis = new KOTodoViewWhatsThis(mTodoListView->viewport(),this);
490 497
491 mPriorityPopupMenu = new QPopupMenu(this); 498 mPriorityPopupMenu = new QPopupMenu(this);
492 for (int i = 1; i <= 5; i++) { 499 for (int i = 1; i <= 5; i++) {
493 QString label = QString ("%1").arg (i); 500 QString label = QString ("%1").arg (i);
494 mPriority[mPriorityPopupMenu->insertItem (label)] = i; 501 mPriority[mPriorityPopupMenu->insertItem (label)] = i;
495 } 502 }
496 connect (mPriorityPopupMenu, SIGNAL(activated (int)), SLOT (setNewPriority(int))); 503 connect (mPriorityPopupMenu, SIGNAL(activated (int)), SLOT (setNewPriority(int)));
497 504
498 mPercentageCompletedPopupMenu = new QPopupMenu(this); 505 mPercentageCompletedPopupMenu = new QPopupMenu(this);
499 for (int i = 0; i <= 100; i+=20) { 506 for (int i = 0; i <= 100; i+=20) {
500 QString label = QString ("%1 %").arg (i); 507 QString label = QString ("%1 %").arg (i);
501 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i; 508 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i;
502 } 509 }
503 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int))); 510 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int)));
504 511
505 512
506 513
507 mItemPopupMenu = new QPopupMenu(this); 514 mItemPopupMenu = new QPopupMenu(this);
508 mItemPopupMenu->insertItem(i18n("Show..."), this, 515 mItemPopupMenu->insertItem(i18n("Show..."), this,
509 SLOT (showTodo())); 516 SLOT (showTodo()));
510 mItemPopupMenu->insertItem(i18n("Edit..."), this, 517 mItemPopupMenu->insertItem(i18n("Edit..."), this,
511 SLOT (editTodo())); 518 SLOT (editTodo()));
512 mItemPopupMenu->insertItem( i18n("Delete"), this, 519 mItemPopupMenu->insertItem( i18n("Delete"), this,
513 SLOT (deleteTodo())); 520 SLOT (deleteTodo()));
514 mItemPopupMenu->insertItem( i18n("Clone..."), this, 521 mItemPopupMenu->insertItem( i18n("Clone..."), this,
515 SLOT (cloneTodo())); 522 SLOT (cloneTodo()));
516 mItemPopupMenu->insertItem( i18n("Move..."), this, 523 mItemPopupMenu->insertItem( i18n("Move..."), this,
517 SLOT (moveTodo())); 524 SLOT (moveTodo()));
518#ifndef DESKTOP_VERSION 525#ifndef DESKTOP_VERSION
519 mItemPopupMenu->insertItem( i18n("Beam..."), this, 526 mItemPopupMenu->insertItem( i18n("Beam..."), this,
520 SLOT (beamTodo())); 527 SLOT (beamTodo()));
521#endif 528#endif
522 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this, 529 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this,
523 SLOT (cancelTodo())); 530 SLOT (cancelTodo()));
524 mItemPopupMenu->insertSeparator(); 531 mItemPopupMenu->insertSeparator();
525 mItemPopupMenu->insertItem( i18n("Start/Stop todo..."), this, 532 mItemPopupMenu->insertItem( i18n("Start/Stop todo..."), this,
526 SLOT (toggleRunningItem())); 533 SLOT (toggleRunningItem()));
527 mItemPopupMenu->insertSeparator(); 534 mItemPopupMenu->insertSeparator();
528 /* 535 /*
529 mItemPopupMenu->insertItem( i18n("New Todo..."), this, 536 mItemPopupMenu->insertItem( i18n("New Todo..."), this,
530 SLOT (newTodo())); 537 SLOT (newTodo()));
531 */ 538 */
532 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this, 539 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this,
533 SLOT (newSubTodo())); 540 SLOT (newSubTodo()));
534 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this, 541 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this,
535 SLOT (unparentTodo()),0,21); 542 SLOT (unparentTodo()),0,21);
536 mItemPopupMenu->insertItem(i18n("Reparent Todo"), this, 543 mItemPopupMenu->insertItem(i18n("Reparent Todo"), this,
537 SLOT (reparentTodo()),0,22); 544 SLOT (reparentTodo()),0,22);
538 mItemPopupMenu->insertSeparator(); 545 mItemPopupMenu->insertSeparator();
539#if 0 546#if 0
540 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"), 547 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"),
541 this, SLOT( purgeCompleted() ) ); 548 this, SLOT( purgeCompleted() ) );
542 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"), 549 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"),
543 this, SLOT( toggleCompleted() ),0, 33 ); 550 this, SLOT( toggleCompleted() ),0, 33 );
544 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 551 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
545 this, SLOT( toggleQuickTodo() ),0, 34 ); 552 this, SLOT( toggleQuickTodo() ),0, 34 );
546 mItemPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"), 553 mItemPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"),
547 this, SLOT( toggleRunning() ),0, 35 ); 554 this, SLOT( toggleRunning() ),0, 35 );
548 555
549#endif 556#endif
550 mPopupMenu = new QPopupMenu(this); 557 mPopupMenu = new QPopupMenu(this);
551 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this, 558 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this,
552 SLOT (newTodo()),0,1); 559 SLOT (newTodo()),0,1);
553 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"), 560 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"),
554 this, SLOT(purgeCompleted()),0,2); 561 this, SLOT(purgeCompleted()),0,2);
555 mPopupMenu->insertItem(i18n("Show Completed"), 562 mPopupMenu->insertItem(i18n("Show Completed"),
556 this, SLOT( toggleCompleted() ),0,3 ); 563 this, SLOT( toggleCompleted() ),0,3 );
557 mPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"), 564 mPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"),
558 this, SLOT( toggleRunning() ),0,5 ); 565 this, SLOT( toggleRunning() ),0,5 );
559 mPopupMenu->insertItem(i18n(" set all open","Display all opened"), 566 mPopupMenu->insertItem(i18n(" set all open","Display all opened"),
560 this, SLOT( setAllOpen() ),0,6 ); 567 this, SLOT( setAllOpen() ),0,6 );
561 mPopupMenu->insertItem(i18n(" set all close","Display all closed"), 568 mPopupMenu->insertItem(i18n(" set all close","Display all closed"),
562 this, SLOT( setAllClose() ),0,7 ); 569 this, SLOT( setAllClose() ),0,7 );
563 mPopupMenu->insertItem(i18n(" set all flat","Display all flat"), 570 mPopupMenu->insertItem(i18n(" set all flat","Display all flat"),
564 this, SLOT( setAllFlat() ),0,8 ); 571 this, SLOT( setAllFlat() ),0,8 );
565 mPopupMenu->insertSeparator(); 572 mPopupMenu->insertSeparator();
566 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 573 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
567 this, SLOT( toggleQuickTodo() ),0,4 ); 574 this, SLOT( toggleQuickTodo() ),0,4 );
568 mDocPrefs = new DocPrefs( name ); 575 mDocPrefs = new DocPrefs( name );
569 576
570 mItemPopupMenu->insertItem(i18n("Todo View"),mPopupMenu ); 577 mItemPopupMenu->insertItem(i18n("Todo View"),mPopupMenu );
571 mPopupMenu->setCheckable( true ); 578 mPopupMenu->setCheckable( true );
572 mItemPopupMenu->setCheckable( true ); 579 mItemPopupMenu->setCheckable( true );
573 580
574 581
575 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo ); 582 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo );
576 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo ); 583 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo );
577 584
578 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo); 585 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo);
579 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo ); 586 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo );
580 587
581 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos); 588 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos);
582 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos ); 589 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos );
583 590
584 591
585 // Double clicking conflicts with opening/closing the subtree 592 // Double clicking conflicts with opening/closing the subtree
586 connect( mTodoListView, SIGNAL( doubleClicked( QListViewItem *) ), 593 connect( mTodoListView, SIGNAL( doubleClicked( QListViewItem *) ),
587 SLOT( editItem( QListViewItem *) ) ); 594 SLOT( editItem( QListViewItem *) ) );
588 /* 595 /*
589 connect( mTodoListView, SIGNAL( rightButtonClicked ( QListViewItem *, 596 connect( mTodoListView, SIGNAL( rightButtonClicked ( QListViewItem *,
590 const QPoint &,int ) ), 597 const QPoint &,int ) ),
591 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) ); 598 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) );
592 */ 599 */
593 connect( mTodoListView, SIGNAL( contextRequest ( QListViewItem *, 600 connect( mTodoListView, SIGNAL( contextRequest ( QListViewItem *,
594 const QPoint &,int ) ), 601 const QPoint &,int ) ),
595 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) ); 602 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) );
596 connect( mTodoListView, SIGNAL( clicked( QListViewItem * ) ), 603 connect( mTodoListView, SIGNAL( clicked( QListViewItem * ) ),
597 SLOT( itemClicked( QListViewItem * ) ) ); 604 SLOT( itemClicked( QListViewItem * ) ) );
598 connect( mTodoListView, SIGNAL( double_Clicked( QListViewItem * ) ), 605 connect( mTodoListView, SIGNAL( double_Clicked( QListViewItem * ) ),
599 SLOT( itemDoubleClicked( QListViewItem * ) ) ); 606 SLOT( itemDoubleClicked( QListViewItem * ) ) );
600 connect( mTodoListView, SIGNAL( todoDropped( Todo *, int ) ), 607 connect( mTodoListView, SIGNAL( todoDropped( Todo *, int ) ),
601 SLOT( updateView() ) ); 608 SLOT( updateView() ) );
602 connect( mTodoListView, SIGNAL( todoDropped( Todo *, int ) ), 609 connect( mTodoListView, SIGNAL( todoDropped( Todo *, int ) ),
603 SLOT( todoModified(Todo *, int) ) ); 610 SLOT( todoModified(Todo *, int) ) );
604 connect( mTodoListView, SIGNAL( expanded( QListViewItem * ) ), 611 connect( mTodoListView, SIGNAL( expanded( QListViewItem * ) ),
605 SLOT( itemStateChanged( QListViewItem * ) ) ); 612 SLOT( itemStateChanged( QListViewItem * ) ) );
606 connect( mTodoListView, SIGNAL( collapsed( QListViewItem * ) ), 613 connect( mTodoListView, SIGNAL( collapsed( QListViewItem * ) ),
607 SLOT( itemStateChanged( QListViewItem * ) ) ); 614 SLOT( itemStateChanged( QListViewItem * ) ) );
608 connect( mTodoListView, SIGNAL( paintNeeded() ), 615 connect( mTodoListView, SIGNAL( paintNeeded() ),
609 SLOT( paintNeeded()) ); 616 SLOT( paintNeeded()) );
610 617
611#if 0 618#if 0
612 connect(mTodoListView,SIGNAL(selectionChanged(QListViewItem *)), 619 connect(mTodoListView,SIGNAL(selectionChanged(QListViewItem *)),
613 SLOT(selectionChanged(QListViewItem *))); 620 SLOT(selectionChanged(QListViewItem *)));
614 connect(mTodoListView,SIGNAL(clicked(QListViewItem *)), 621 connect(mTodoListView,SIGNAL(clicked(QListViewItem *)),
615 SLOT(selectionChanged(QListViewItem *))); 622 SLOT(selectionChanged(QListViewItem *)));
616 connect(mTodoListView,SIGNAL(pressed(QListViewItem *)), 623 connect(mTodoListView,SIGNAL(pressed(QListViewItem *)),
617 SLOT(selectionChanged(QListViewItem *))); 624 SLOT(selectionChanged(QListViewItem *)));
618#endif 625#endif
619 626
620 connect( mTodoListView, SIGNAL(reparentTodoSignal( Todo *,Todo * ) ), SIGNAL(reparentTodoSignal( Todo *,Todo * ) )); 627 connect( mTodoListView, SIGNAL(reparentTodoSignal( Todo *,Todo * ) ), SIGNAL(reparentTodoSignal( Todo *,Todo * ) ));
621 connect( mTodoListView, SIGNAL(unparentTodoSignal(Todo *) ), SIGNAL(unparentTodoSignal(Todo *) )); 628 connect( mTodoListView, SIGNAL(unparentTodoSignal(Todo *) ), SIGNAL(unparentTodoSignal(Todo *) ));
622 connect( mTodoListView, SIGNAL( deleteTodo(Todo *) ), SIGNAL(deleteTodoSignal(Todo *) )); 629 connect( mTodoListView, SIGNAL( deleteTodo(Todo *) ), SIGNAL(deleteTodoSignal(Todo *) ));
623 630
624 connect( mTodoListView, SIGNAL(selectionChanged() ), 631 connect( mTodoListView, SIGNAL(selectionChanged() ),
625 SLOT( processSelectionChange() ) ); 632 SLOT( processSelectionChange() ) );
626 connect( mQuickAdd, SIGNAL( returnPressed () ), 633 connect( mQuickAdd, SIGNAL( returnPressed () ),
627 SLOT( addQuickTodo() ) ); 634 SLOT( addQuickTodo() ) );
628 635
629} 636}
630 637
631KOTodoView::~KOTodoView() 638KOTodoView::~KOTodoView()
632{ 639{
633 640
634#if QT_VERSION >= 0x030000 641#if QT_VERSION >= 0x030000
635 642
636#else 643#else
637 delete mKOTodoViewWhatsThis; 644 delete mKOTodoViewWhatsThis;
638#endif 645#endif
639 646
640 delete mDocPrefs; 647 delete mDocPrefs;
641} 648}
642QString KOTodoView::getWhatsThisText(QPoint p) 649QString KOTodoView::getWhatsThisText(QPoint p)
643{ 650{
644 KOTodoViewItem* item = ( KOTodoViewItem* ) mTodoListView->itemAt( p ); 651 KOTodoViewItem* item = ( KOTodoViewItem* ) mTodoListView->itemAt( p );
645 if ( item ) 652 if ( item )
646 return KIncidenceFormatter::instance()->getFormattedText( item->todo(), 653 return KIncidenceFormatter::instance()->getFormattedText( item->todo(),
647 KOPrefs::instance()->mWTshowDetails, 654 KOPrefs::instance()->mWTshowDetails,
648 KOPrefs::instance()->mWTshowCreated, 655 KOPrefs::instance()->mWTshowCreated,
649 KOPrefs::instance()->mWTshowChanged); 656 KOPrefs::instance()->mWTshowChanged);
650 return i18n("That is the todo view" ); 657 return i18n("That is the todo view" );
651 658
652} 659}
653 660
654void KOTodoView::jumpToDate () 661void KOTodoView::jumpToDate ()
655{ 662{
656 // if (mActiveItem) { 663 // if (mActiveItem) {
657// mActiveItem->todo()); 664// mActiveItem->todo());
658// if ( mActiveItem->todo()->hasDueDate() ) 665// if ( mActiveItem->todo()->hasDueDate() )
659// emit mActiveItem->todo()jumpToTime( mTodo->dtDue().date() ); 666// emit mActiveItem->todo()jumpToTime( mTodo->dtDue().date() );
660} 667}
661void KOTodoView::paintNeeded() 668void KOTodoView::paintNeeded()
662{ 669{
663 if ( mPendingUpdateBeforeRepaint ) { 670 if ( mPendingUpdateBeforeRepaint ) {
664 updateView(); 671 updateView();
665 mPendingUpdateBeforeRepaint = false; 672 mPendingUpdateBeforeRepaint = false;
666 } 673 }
667} 674}
668void KOTodoView::paintEvent(QPaintEvent * pevent) 675void KOTodoView::paintEvent(QPaintEvent * pevent)
669{ 676{
670 if ( mPendingUpdateBeforeRepaint ) { 677 if ( mPendingUpdateBeforeRepaint ) {
671 updateView(); 678 updateView();
672 mPendingUpdateBeforeRepaint = false; 679 mPendingUpdateBeforeRepaint = false;
673 } 680 }
674 KOrg::BaseView::paintEvent( pevent); 681 KOrg::BaseView::paintEvent( pevent);
675} 682}
676 683
677void KOTodoView::updateView() 684void KOTodoView::updateView()
678{ 685{
679 pendingSubtodo = 0; 686 pendingSubtodo = 0;
680 if ( mBlockUpdate ) { 687 if ( mBlockUpdate ) {
681 return; 688 return;
682 } 689 }
683 if ( !isVisible() ) { 690 if ( !isVisible() ) {
684 mPendingUpdateBeforeRepaint = true; 691 mPendingUpdateBeforeRepaint = true;
685 return; 692 return;
686 } 693 }
687 storeCurrentItem(); 694 storeCurrentItem();
688 //qDebug("KOTodoView::updateView() %x", this); 695 //qDebug("KOTodoView::updateView() %x", this);
689 if ( isFlatDisplay ) { 696 if ( isFlatDisplay ) {
690 displayAllFlat(); 697 displayAllFlat();
691 resetCurrentItem(); 698 resetCurrentItem();
692 return; 699 return;
693 } 700 }
694 //qDebug("update "); 701 //qDebug("update ");
695// kdDebug() << "KOTodoView::updateView()" << endl; 702// kdDebug() << "KOTodoView::updateView()" << endl;
696 QFont fo = KOPrefs::instance()->mTodoViewFont; 703 QFont fo = KOPrefs::instance()->mTodoViewFont;
697 704
698 705
699 mTodoListView->clear(); 706 mTodoListView->clear();
700 if ( mName == "todolistsmall" ) { 707 if ( mName == "todolistsmall" ) {
701 if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) { 708 if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) {
702 int ps = fo.pointSize() -2; 709 int ps = fo.pointSize() -2;
703 if ( ps > 12 ) 710 if ( ps > 12 )
704 ps -= 2; 711 ps -= 2;
705 fo.setPointSize( ps ); 712 fo.setPointSize( ps );
706 } 713 }
707 } 714 }
708 715
709 mTodoListView->setFont( fo ); 716 mTodoListView->setFont( fo );
710 // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont ); 717 // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont );
711 //mTodoListView->header()->setMaximumHeight(fm.height()); 718 //mTodoListView->header()->setMaximumHeight(fm.height());
712 QPtrList<Todo> todoList = calendar()->todos(); 719 QPtrList<Todo> todoList = calendar()->todos();
713 720
714/* 721/*
715 kdDebug() << "KOTodoView::updateView(): Todo List:" << endl; 722 kdDebug() << "KOTodoView::updateView(): Todo List:" << endl;
716 Event *t; 723 Event *t;
717 for(t = todoList.first(); t; t = todoList.next()) { 724 for(t = todoList.first(); t; t = todoList.next()) {
718 kdDebug() << " " << t->getSummary() << endl; 725 kdDebug() << " " << t->getSummary() << endl;
719 726
720 if (t->getRelatedTo()) { 727 if (t->getRelatedTo()) {
721 kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl; 728 kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl;
722 } 729 }
723 730
724 QPtrList<Event> l = t->getRelations(); 731 QPtrList<Event> l = t->getRelations();
725 Event *c; 732 Event *c;
726 for(c=l.first();c;c=l.next()) { 733 for(c=l.first();c;c=l.next()) {
727 kdDebug() << " - relation: " << c->getSummary() << endl; 734 kdDebug() << " - relation: " << c->getSummary() << endl;
728 } 735 }
729 } 736 }
730*/ 737*/
731 738
732 // Put for each Event a KOTodoViewItem in the list view. Don't rely on a 739 // Put for each Event a KOTodoViewItem in the list view. Don't rely on a
733 // specific order of events. That means that we have to generate parent items 740 // specific order of events. That means that we have to generate parent items
734 // recursively for proper hierarchical display of Todos. 741 // recursively for proper hierarchical display of Todos.
735 mTodoMap.clear(); 742 mTodoMap.clear();
736 Todo *todo; 743 Todo *todo;
737 todo = todoList.first();// todo; todo = todoList.next()) { 744 todo = todoList.first();// todo; todo = todoList.next()) {
738 while ( todo ) { 745 while ( todo ) {
739 bool next = true; 746 bool next = true;
740 // qDebug("todo %s ", todo->summary().latin1()); 747 // qDebug("todo %s ", todo->summary().latin1());
741 Incidence *incidence = todo->relatedTo(); 748 Incidence *incidence = todo->relatedTo();
742 while ( incidence ) { 749 while ( incidence ) {
743 if ( incidence->typeID() == todoID ) { 750 if ( incidence->typeID() == todoID ) {
744 //qDebug("related %s ",incidence->summary().latin1() ); 751 //qDebug("related %s ",incidence->summary().latin1() );
745 if ( !(todoList.contains ( ((Todo* )incidence ) ) ) && incidence->calEnabled() ) { 752 if ( !(todoList.contains ( ((Todo* )incidence ) ) ) && incidence->calEnabled() ) {
746 //qDebug("related not found "); 753 //qDebug("related not found ");
747 todoList.remove( ); 754 todoList.remove( );
748 todo = todoList.current(); 755 todo = todoList.current();
749 next = false; 756 next = false;
750 incidence = 0; 757 incidence = 0;
751 758
752 } else { 759 } else {
753 //qDebug("related found "); 760 //qDebug("related found ");
754 incidence = incidence->relatedTo(); 761 incidence = incidence->relatedTo();
755 } 762 }
756 } else 763 } else
757 incidence = 0; 764 incidence = 0;
758 } 765 }
759 if ( next ) 766 if ( next )
760 todo = todoList.next(); 767 todo = todoList.next();
761 } 768 }
762 769
763 for(todo = todoList.first(); todo; todo = todoList.next()) { 770 for(todo = todoList.first(); todo; todo = todoList.next()) {
764 if (!mTodoMap.contains(todo) && checkTodo( todo ) ) 771 if (!mTodoMap.contains(todo) && checkTodo( todo ) )
765 { 772 {
766 insertTodoItem(todo); 773 insertTodoItem(todo);
767 } 774 }
768 } 775 }
769 // Restore opened/closed state 776 // Restore opened/closed state
770 mTodoListView->blockSignals( true ); 777 mTodoListView->blockSignals( true );
771 if( mDocPrefs ) restoreItemState( mTodoListView->firstChild() ); 778 if( mDocPrefs ) restoreItemState( mTodoListView->firstChild() );
772 mTodoListView->blockSignals( false ); 779 mTodoListView->blockSignals( false );
773 resetCurrentItem(); 780 resetCurrentItem();
774 processSelectionChange(); 781 processSelectionChange();
775} 782}
776 783
777void KOTodoView::storeCurrentItem() 784void KOTodoView::storeCurrentItem()
778{ 785{
779 mCurItem = 0; 786 mCurItem = 0;
780 mCurItemRootParent = 0; 787 mCurItemRootParent = 0;
781 mCurItemParent = 0; 788 mCurItemParent = 0;
782 mCurItemAbove = 0; 789 mCurItemAbove = 0;
783 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 790 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
784 if (mActiveItem) { 791 if (mActiveItem) {
785 mCurItem = mActiveItem->todo(); 792 mCurItem = mActiveItem->todo();
786 KOTodoViewItem* activeItemAbove = (KOTodoViewItem*)mActiveItem->itemAbove (); 793 KOTodoViewItem* activeItemAbove = (KOTodoViewItem*)mActiveItem->itemAbove ();
787 if ( activeItemAbove ) 794 if ( activeItemAbove )
788 mCurItemAbove = activeItemAbove->todo(); 795 mCurItemAbove = activeItemAbove->todo();
789 mCurItemRootParent = mCurItem; 796 mCurItemRootParent = mCurItem;
790 mCurItemParent = mCurItemRootParent->relatedTo(); 797 mCurItemParent = mCurItemRootParent->relatedTo();
791 while ( mCurItemRootParent->relatedTo() != 0 ) 798 while ( mCurItemRootParent->relatedTo() != 0 )
792 mCurItemRootParent = mCurItemRootParent->relatedTo(); 799 mCurItemRootParent = mCurItemRootParent->relatedTo();
793 } 800 }
794 mActiveItem = 0; 801 mActiveItem = 0;
795} 802}
796 803
797void KOTodoView::resetCurrentItem() 804void KOTodoView::resetCurrentItem()
798{ 805{
799 mTodoListView->setFocus(); 806 mTodoListView->setFocus();
800 KOTodoViewItem* foundItem = 0; 807 KOTodoViewItem* foundItem = 0;
801 KOTodoViewItem* foundItemRoot = 0; 808 KOTodoViewItem* foundItemRoot = 0;
802 KOTodoViewItem* foundItemParent = 0; 809 KOTodoViewItem* foundItemParent = 0;
803 KOTodoViewItem* foundItemAbove = 0; 810 KOTodoViewItem* foundItemAbove = 0;
804 if ( mTodoListView->firstChild () ) { 811 if ( mTodoListView->firstChild () ) {
805 if ( mCurItem ) { 812 if ( mCurItem ) {
806 KOTodoViewItem* item = (KOTodoViewItem*)mTodoListView->firstChild (); 813 KOTodoViewItem* item = (KOTodoViewItem*)mTodoListView->firstChild ();
807 while ( item ) { 814 while ( item ) {
808 if ( item->todo() == mCurItem ) { 815 if ( item->todo() == mCurItem ) {
809 foundItem = item; 816 foundItem = item;
810 break; 817 break;
811 } else if ( item->todo() == mCurItemAbove ) { 818 } else if ( item->todo() == mCurItemAbove ) {
812 foundItemAbove = item; 819 foundItemAbove = item;
813 820
814 } 821 }
815 if ( item->todo() == mCurItemRootParent ) { 822 if ( item->todo() == mCurItemRootParent ) {
816 foundItemRoot = item; 823 foundItemRoot = item;
817 } 824 }
818 if ( item->todo() == mCurItemParent ) { 825 if ( item->todo() == mCurItemParent ) {
819 foundItemParent = item; 826 foundItemParent = item;
820 } 827 }
821 item = (KOTodoViewItem*)item->itemBelow(); 828 item = (KOTodoViewItem*)item->itemBelow();
822 } 829 }
823 if ( ! foundItem ) { 830 if ( ! foundItem ) {
824 if ( foundItemParent ) { 831 if ( foundItemParent ) {
825 foundItem = foundItemParent; 832 foundItem = foundItemParent;
826 } else { 833 } else {
827 if ( foundItemRoot ) 834 if ( foundItemRoot )
828 foundItem = foundItemRoot; 835 foundItem = foundItemRoot;
829 else 836 else
830 foundItem = foundItemAbove; 837 foundItem = foundItemAbove;
831 } 838 }
832 } 839 }
833 } 840 }
834 if ( foundItem ) { 841 if ( foundItem ) {
835 mTodoListView->setCurrentItem( foundItem ); 842 mTodoListView->setCurrentItem( foundItem );
836 mTodoListView->ensureItemVisible( foundItem ); 843 mTodoListView->ensureItemVisible( foundItem );
837 } else { 844 } else {
838 mTodoListView->setCurrentItem( mTodoListView->firstChild () ); 845 mTodoListView->setCurrentItem( mTodoListView->firstChild () );
839 } 846 }
840 } 847 }
841 mTodoListView->setFocus(); 848 mTodoListView->setFocus();
842} 849}
843//Incidence * mCurItem, *mCurItemRootParent,*mCurItemAbove; 850//Incidence * mCurItem, *mCurItemRootParent,*mCurItemAbove;
844bool KOTodoView::checkTodo( Todo * todo ) 851bool KOTodoView::checkTodo( Todo * todo )
845{ 852{
846 853
847 if ( !KOPrefs::instance()->mShowCompletedTodo && todo->isCompleted() ) 854 if ( !KOPrefs::instance()->mShowCompletedTodo && todo->isCompleted() )
848 return false; 855 return false;
849 if ( !todo->isCompleted() ) { 856 if ( !todo->isCompleted() ) {
850 if ( todo->hasDueDate() && todo->dtDue().date() <= QDate::currentDate() ) 857 if ( todo->hasDueDate() && todo->dtDue().date() <= QDate::currentDate() )
851 return true; 858 return true;
852 } 859 }
853 if ( KOPrefs::instance()->mHideNonStartedTodos && mNavigator ) { 860 if ( KOPrefs::instance()->mHideNonStartedTodos && mNavigator ) {
854 if ( todo->hasStartDate() ) 861 if ( todo->hasStartDate() )
855 if ( mNavigator->selectedDates().last() < todo->dtStart().date() ) 862 if ( mNavigator->selectedDates().last() < todo->dtStart().date() )
856 return false; 863 return false;
857 if ( todo->hasDueDate() ) 864 if ( todo->hasDueDate() )
858 if ( mNavigator->selectedDates().first() > todo->dtDue().date() ) 865 if ( mNavigator->selectedDates().first() > todo->dtDue().date() )
859 return false; 866 return false;
860 } 867 }
861 return true; 868 return true;
862} 869}
863 870
864void KOTodoView::restoreItemState( QListViewItem *item ) 871void KOTodoView::restoreItemState( QListViewItem *item )
865{ 872{
866 pendingSubtodo = 0; 873 pendingSubtodo = 0;
867 while( item ) { 874 while( item ) {
868 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 875 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
869 todoItem->setOpen( mDocPrefs->readBoolEntry( todoItem->todo()->uid() ) ); 876 todoItem->setOpen( mDocPrefs->readBoolEntry( todoItem->todo()->uid() ) );
870 if( item->childCount() > 0 ) restoreItemState( item->firstChild() ); 877 if( item->childCount() > 0 ) restoreItemState( item->firstChild() );
871 item = item->nextSibling(); 878 item = item->nextSibling();
872 } 879 }
873} 880}
874 881
875 882
876QMap<Todo *,KOTodoViewItem *>::ConstIterator 883QMap<Todo *,KOTodoViewItem *>::ConstIterator
877KOTodoView::insertTodoItem(Todo *todo) 884KOTodoView::insertTodoItem(Todo *todo)
878{ 885{
879 886
880 // kdDebug() << "KOTodoView::insertTodoItem(): " << todo->getSummary() << endl; 887 // kdDebug() << "KOTodoView::insertTodoItem(): " << todo->getSummary() << endl;
881 // TODO: Check, if dynmaic cast is necessary 888 // TODO: Check, if dynmaic cast is necessary
882 889
883 pendingSubtodo = 0; 890 pendingSubtodo = 0;
884 Incidence *incidence = todo->relatedTo(); 891 Incidence *incidence = todo->relatedTo();
885 while ( incidence && !incidence->calEnabled() ) 892 while ( incidence && !incidence->calEnabled() )
886 incidence = incidence->relatedTo(); 893 incidence = incidence->relatedTo();
887 if (incidence && incidence->typeID() == todoID ) { 894 if (incidence && incidence->typeID() == todoID ) {
888 Todo *relatedTodo = static_cast<Todo *>(incidence); 895 Todo *relatedTodo = static_cast<Todo *>(incidence);
889 896
890 // kdDebug() << " has Related" << endl; 897 // kdDebug() << " has Related" << endl;
891 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator; 898 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator;
892 itemIterator = mTodoMap.find(relatedTodo); 899 itemIterator = mTodoMap.find(relatedTodo);
893 if (itemIterator == mTodoMap.end()) { 900 if (itemIterator == mTodoMap.end()) {
894 // kdDebug() << " related not yet in list" << endl; 901 // kdDebug() << " related not yet in list" << endl;
895 itemIterator = insertTodoItem (relatedTodo); 902 itemIterator = insertTodoItem (relatedTodo);
896 } 903 }
897 // isn't this pretty stupid? We give one Todo to the KOTodoViewItem 904 // isn't this pretty stupid? We give one Todo to the KOTodoViewItem
898 // and one into the map. Sure finding is more easy but why? -zecke 905 // and one into the map. Sure finding is more easy but why? -zecke
899 KOTodoViewItem *todoItem = new KOTodoViewItem(*itemIterator,todo,this); 906 KOTodoViewItem *todoItem = new KOTodoViewItem(*itemIterator,todo,this);
900 return mTodoMap.insert(todo,todoItem); 907 return mTodoMap.insert(todo,todoItem);
901 } else { 908 } else {
902 // kdDebug() << " no Related" << endl; 909 // kdDebug() << " no Related" << endl;
903 // see above -zecke 910 // see above -zecke
904 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this); 911 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this);
905 return mTodoMap.insert(todo,todoItem); 912 return mTodoMap.insert(todo,todoItem);
906 } 913 }
907} 914}
908 915
909 916
910void KOTodoView::updateConfig() 917void KOTodoView::updateConfig()
911{ 918{
912 updateView(); 919 updateView();
913 mTodoListView->repaintContents(); 920 mTodoListView->repaintContents();
914} 921}
915 922
916QPtrList<Incidence> KOTodoView::selectedIncidences() 923QPtrList<Incidence> KOTodoView::selectedIncidences()
917{ 924{
918 QPtrList<Incidence> selected; 925 QPtrList<Incidence> selected;
919 926
920 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); 927 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem());
921// if (!item) item = mActiveItem; 928// if (!item) item = mActiveItem;
922 if (item) selected.append(item->todo()); 929 if (item) selected.append(item->todo());
923 930
924 return selected; 931 return selected;
925} 932}
926 933
927QPtrList<Todo> KOTodoView::selectedTodos() 934QPtrList<Todo> KOTodoView::selectedTodos()
928{ 935{
929 QPtrList<Todo> selected; 936 QPtrList<Todo> selected;
930 937
931 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); 938 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem());
932// if (!item) item = mActiveItem; 939// if (!item) item = mActiveItem;
933 if (item) selected.append(item->todo()); 940 if (item) selected.append(item->todo());
934 941
935 return selected; 942 return selected;
936} 943}
937 944
938void KOTodoView::changeEventDisplay(Event *, int) 945void KOTodoView::changeEventDisplay(Event *, int)
939{ 946{
940 updateView(); 947 updateView();
941} 948}
942 949
943void KOTodoView::showDates(const QDate &, const QDate &) 950void KOTodoView::showDates(const QDate &, const QDate &)
944{ 951{
945} 952}
946 953
947void KOTodoView::showEvents(QPtrList<Event>) 954void KOTodoView::showEvents(QPtrList<Event>)
948{ 955{
949 kdDebug() << "KOTodoView::selectEvents(): not yet implemented" << endl; 956 kdDebug() << "KOTodoView::selectEvents(): not yet implemented" << endl;
950} 957}
951 958
952void KOTodoView::printPreview(CalPrinter *calPrinter, const QDate &fd, 959void KOTodoView::printPreview(CalPrinter *calPrinter, const QDate &fd,
953 const QDate &td) 960 const QDate &td)
954{ 961{
955#ifndef KORG_NOPRINTER 962#ifndef KORG_NOPRINTER
956 calPrinter->preview(CalPrinter::Todolist, fd, td); 963 calPrinter->preview(CalPrinter::Todolist, fd, td);
957#endif 964#endif
958} 965}
959 966
960void KOTodoView::editItem(QListViewItem *item ) 967void KOTodoView::editItem(QListViewItem *item )
961{ 968{
962 emit editTodoSignal(((KOTodoViewItem *)item)->todo()); 969 emit editTodoSignal(((KOTodoViewItem *)item)->todo());
963} 970}
964 971
965void KOTodoView::showItem(QListViewItem *item,const QPoint &,int) 972void KOTodoView::showItem(QListViewItem *item,const QPoint &,int)
966{ 973{
967 emit showTodoSignal(((KOTodoViewItem *)item)->todo()); 974 emit showTodoSignal(((KOTodoViewItem *)item)->todo());
968} 975}
969 976
970void KOTodoView::popupMenu(QListViewItem *item,const QPoint &p,int column) 977void KOTodoView::popupMenu(QListViewItem *item,const QPoint &p,int column)
971{ 978{
972 pendingSubtodo = 0; 979 pendingSubtodo = 0;
973 mActiveItem = (KOTodoViewItem *)item; 980 mActiveItem = (KOTodoViewItem *)item;
974 if (item) { 981 if (item) {
975 switch (column){ 982 switch (column){
976 case 1: 983 case 1:
977 mPriorityPopupMenu->popup(QCursor::pos ()); break; 984 mPriorityPopupMenu->popup(QCursor::pos ()); break;
978 case 2: 985 case 2:
979 mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break; 986 mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break;
980 case 3: 987 case 3:
981 moveTodo(); 988 moveTodo();
982 break; 989 break;
983 case 8: 990 case 8:
984 getCategoryPopupMenu((KOTodoViewItem *)item)->popup(QCursor::pos ()); break; 991 getCategoryPopupMenu((KOTodoViewItem *)item)->popup(QCursor::pos ()); break;
985 default: 992 default:
986 mItemPopupMenu->popup(QCursor::pos()); 993 mItemPopupMenu->popup(QCursor::pos());
987 } 994 }
988 } else mPopupMenu->popup(QCursor::pos()); 995 } else mPopupMenu->popup(QCursor::pos());
989} 996}
990void KOTodoView::newTodo() 997void KOTodoView::newTodo()
991{ 998{
992 emit newTodoSignal(); 999 emit newTodoSignal();
993} 1000}
994 1001
995void KOTodoView::newSubTodo() 1002void KOTodoView::newSubTodo()
996{ 1003{
997 if (mActiveItem) { 1004 if (mActiveItem) {
998 emit newSubTodoSignal(mActiveItem->todo()); 1005 emit newSubTodoSignal(mActiveItem->todo());
999 } 1006 }
1000} 1007}
1001void KOTodoView::unparentTodo() 1008void KOTodoView::unparentTodo()
1002{ 1009{
1003 if (mActiveItem) { 1010 if (mActiveItem) {
1004 emit unparentTodoSignal(mActiveItem->todo()); 1011 emit unparentTodoSignal(mActiveItem->todo());
1005 } 1012 }
1006} 1013}
1007 1014
1008void KOTodoView::reparentTodo() 1015void KOTodoView::reparentTodo()
1009{ 1016{
1010 if (mActiveItem) { 1017 if (mActiveItem) {
1011 topLevelWidget()->setCaption(i18n("Click on new parent item")); 1018 topLevelWidget()->setCaption(i18n("Click on new parent item"));
1012 pendingSubtodo = mActiveItem; 1019 pendingSubtodo = mActiveItem;
1013 } 1020 }
1014} 1021}
1015void KOTodoView::editTodo() 1022void KOTodoView::editTodo()
1016{ 1023{
1017 if (mActiveItem) { 1024 if (mActiveItem) {
1018 emit editTodoSignal(mActiveItem->todo()); 1025 emit editTodoSignal(mActiveItem->todo());
1019 } 1026 }
1020} 1027}
1021void KOTodoView::cloneTodo() 1028void KOTodoView::cloneTodo()
1022{ 1029{
1023 if (mActiveItem) { 1030 if (mActiveItem) {
1024 emit cloneTodoSignal((Incidence*)mActiveItem->todo()); 1031 emit cloneTodoSignal((Incidence*)mActiveItem->todo());
1025 } 1032 }
1026} 1033}
1027void KOTodoView::cancelTodo() 1034void KOTodoView::cancelTodo()
1028{ 1035{
1029 if (mActiveItem) { 1036 if (mActiveItem) {
1030 emit cancelTodoSignal((Incidence*)mActiveItem->todo()); 1037 emit cancelTodoSignal((Incidence*)mActiveItem->todo());
1031 } 1038 }
1032} 1039}
1033void KOTodoView::moveTodo() 1040void KOTodoView::moveTodo()
1034{ 1041{
1035 if (mActiveItem) { 1042 if (mActiveItem) {
1036 emit moveTodoSignal((Incidence*)mActiveItem->todo()); 1043 emit moveTodoSignal((Incidence*)mActiveItem->todo());
1037 } 1044 }
1038} 1045}
1039void KOTodoView::beamTodo() 1046void KOTodoView::beamTodo()
1040{ 1047{
1041 if (mActiveItem) { 1048 if (mActiveItem) {
1042 emit beamTodoSignal((Incidence*)mActiveItem->todo()); 1049 emit beamTodoSignal((Incidence*)mActiveItem->todo());
1043 } 1050 }
1044} 1051}
1045 1052
1046 1053
1047void KOTodoView::showTodo() 1054void KOTodoView::showTodo()
1048{ 1055{
1049 if (mActiveItem) { 1056 if (mActiveItem) {
1050 emit showTodoSignal(mActiveItem->todo()); 1057 emit showTodoSignal(mActiveItem->todo());
1051 } 1058 }
1052} 1059}
1053 1060
1054void KOTodoView::deleteTodo() 1061void KOTodoView::deleteTodo()
1055{ 1062{
1056 if (mActiveItem) { 1063 if (mActiveItem) {
1057 emit deleteTodoSignal(mActiveItem->todo()); 1064 emit deleteTodoSignal(mActiveItem->todo());
1058 } 1065 }
1059} 1066}
1060 1067
1061void KOTodoView::setNewPriority(int index) 1068void KOTodoView::setNewPriority(int index)
1062{ 1069{
1063 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 1070 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
1064 mActiveItem->todo()->setPriority(mPriority[index]); 1071 mActiveItem->todo()->setPriority(mPriority[index]);
1065 mActiveItem->construct(); 1072 mActiveItem->construct();
1066 todoModified (mActiveItem->todo(), KOGlobals::PRIORITY_MODIFIED); 1073 todoModified (mActiveItem->todo(), KOGlobals::PRIORITY_MODIFIED);
1067 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 1074 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
1068 } 1075 }
1069} 1076}
1070 1077
1071void KOTodoView::setNewPercentage(int index) 1078void KOTodoView::setNewPercentage(int index)
1072{ 1079{
1073 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 1080 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
1074 1081
1075 if ( mPercentage[index] == 100 && !mActiveItem->isOn() ) { 1082 if ( mPercentage[index] == 100 && !mActiveItem->isOn() ) {
1076 mActiveItem->setOn( true ); 1083 mActiveItem->setOn( true );
1077 return; 1084 return;
1078 } else if ( mPercentage[index] != 100 && mActiveItem->isOn() ) { 1085 } else if ( mPercentage[index] != 100 && mActiveItem->isOn() ) {
1079 KOTodoViewItem* par = (static_cast<KOTodoViewItem*>(mActiveItem->parent())); 1086 KOTodoViewItem* par = (static_cast<KOTodoViewItem*>(mActiveItem->parent()));
1080 if ( par && par->isOn() ) 1087 if ( par && par->isOn() )
1081 par->setOn( false ); 1088 par->setOn( false );
1082 } 1089 }
1083 if (mPercentage[index] == 100) { 1090 if (mPercentage[index] == 100) {
1084 mActiveItem->todo()->setCompleted(QDateTime::currentDateTime()); 1091 mActiveItem->todo()->setCompleted(QDateTime::currentDateTime());
1085 } else { 1092 } else {
1086 mActiveItem->todo()->setCompleted(false); 1093 mActiveItem->todo()->setCompleted(false);
1087 } 1094 }
1088 mActiveItem->todo()->setPercentComplete(mPercentage[index]); 1095 mActiveItem->todo()->setPercentComplete(mPercentage[index]);
1089 mActiveItem->construct(); 1096 mActiveItem->construct();
1090 todoModified (mActiveItem->todo (), KOGlobals::COMPLETION_MODIFIED); 1097 todoModified (mActiveItem->todo (), KOGlobals::COMPLETION_MODIFIED);
1091 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 1098 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
1092 } 1099 }
1093} 1100}
1094 1101
1095 1102
1096QPopupMenu * KOTodoView::getCategoryPopupMenu (KOTodoViewItem *todoItem) 1103QPopupMenu * KOTodoView::getCategoryPopupMenu (KOTodoViewItem *todoItem)
1097{ 1104{
1098 QPopupMenu* tempMenu = new QPopupMenu (this); 1105 QPopupMenu* tempMenu = new QPopupMenu (this);
1099 QStringList checkedCategories = todoItem->todo()->categories (); 1106 QStringList checkedCategories = todoItem->todo()->categories ();
1100 1107
1101 tempMenu->setCheckable (true); 1108 tempMenu->setCheckable (true);
1102 for (QStringList::Iterator it = KOPrefs::instance()->mCustomCategories.begin (); 1109 for (QStringList::Iterator it = KOPrefs::instance()->mCustomCategories.begin ();
1103 it != KOPrefs::instance()->mCustomCategories.end (); 1110 it != KOPrefs::instance()->mCustomCategories.end ();
1104 ++it) { 1111 ++it) {
1105 int index = tempMenu->insertItem (*it); 1112 int index = tempMenu->insertItem (*it);
1106 mCategory[index] = *it; 1113 mCategory[index] = *it;
1107 if (checkedCategories.find (*it) != checkedCategories.end ()) tempMenu->setItemChecked (index, true); 1114 if (checkedCategories.find (*it) != checkedCategories.end ()) tempMenu->setItemChecked (index, true);
1108 } 1115 }
1109 1116
1110 connect (tempMenu, SIGNAL (activated (int)), SLOT (changedCategories (int))); 1117 connect (tempMenu, SIGNAL (activated (int)), SLOT (changedCategories (int)));
1111 return tempMenu; 1118 return tempMenu;
1112 1119
1113 1120
1114} 1121}
1115void KOTodoView::changedCategories(int index) 1122void KOTodoView::changedCategories(int index)
1116{ 1123{
1117 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 1124 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
1118 QStringList categories = mActiveItem->todo()->categories (); 1125 QStringList categories = mActiveItem->todo()->categories ();
1119 QString colcat = categories.first(); 1126 QString colcat = categories.first();
1120 if (categories.find (mCategory[index]) != categories.end ()) 1127 if (categories.find (mCategory[index]) != categories.end ())
1121 categories.remove (mCategory[index]); 1128 categories.remove (mCategory[index]);
1122 else 1129 else
1123 categories.insert (categories.end(), mCategory[index]); 1130 categories.insert (categories.end(), mCategory[index]);
1124 categories.sort (); 1131 categories.sort ();
1125 if ( !colcat.isEmpty() ) { 1132 if ( !colcat.isEmpty() ) {
1126 if ( categories.find ( colcat ) != categories.end () ) { 1133 if ( categories.find ( colcat ) != categories.end () ) {
1127 categories.remove( colcat ); 1134 categories.remove( colcat );
1128 categories.prepend( colcat ); 1135 categories.prepend( colcat );
1129 } 1136 }
1130 } 1137 }
1131 mActiveItem->todo()->setCategories (categories); 1138 mActiveItem->todo()->setCategories (categories);
1132 mActiveItem->construct(); 1139 mActiveItem->construct();
1133 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 1140 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
1134 todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED); 1141 todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED);
1135 } 1142 }
1136} 1143}
1137void KOTodoView::itemDoubleClicked(QListViewItem *item) 1144void KOTodoView::itemDoubleClicked(QListViewItem *item)
1138{ 1145{
1139 if ( pendingSubtodo != 0 ) { 1146 if ( pendingSubtodo != 0 ) {
1140 topLevelWidget()->setCaption(i18n("Reparenting aborted!")); 1147 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
1141 } 1148 }
1142 pendingSubtodo = 0; 1149 pendingSubtodo = 0;
1143 //int row = mTodoListView->header()->sectionAt ( mTodoListView->header()->mapFromGlobal( QCursor::pos()).x() ); 1150 //int row = mTodoListView->header()->sectionAt ( mTodoListView->header()->mapFromGlobal( QCursor::pos()).x() );
1144 int row = mTodoListView->header()->sectionAt ( mTodoListView->viewportToContents(mTodoListView->viewport()->mapFromGlobal( QCursor::pos())) .x() ); 1151 int row = mTodoListView->header()->sectionAt ( mTodoListView->viewportToContents(mTodoListView->viewport()->mapFromGlobal( QCursor::pos())) .x() );
1145 //qDebug("ROW %d ", row); 1152 //qDebug("ROW %d ", row);
1146 if (!item) { 1153 if (!item) {
1147 newTodo(); 1154 newTodo();
1148 return; 1155 return;
1149 } else { 1156 } else {
1150 if ( row == 2 || row == 1 ) { 1157 if ( row == 2 || row == 1 ) {
1151 mActiveItem = (KOTodoViewItem *) item; 1158 mActiveItem = (KOTodoViewItem *) item;
1152 newSubTodo(); 1159 newSubTodo();
1153 return; 1160 return;
1154 } 1161 }
1155 if ( row == 5 || row == 6 ) { 1162 if ( row == 5 || row == 6 ) {
1156 mActiveItem = (KOTodoViewItem *) item; 1163 mActiveItem = (KOTodoViewItem *) item;
1157 toggleRunningItem(); 1164 toggleRunningItem();
1158 return; 1165 return;
1159 } 1166 }
1160 } 1167 }
1161 if ( KOPrefs::instance()->mEditOnDoubleClick ) 1168 if ( KOPrefs::instance()->mEditOnDoubleClick )
1162 editItem( item ); 1169 editItem( item );
1163 else 1170 else
1164 showItem( item , QPoint(), 0 ); 1171 showItem( item , QPoint(), 0 );
1165} 1172}
1166void KOTodoView::toggleRunningItem() 1173void KOTodoView::toggleRunningItem()
1167{ 1174{
1168 // qDebug("KOTodoView::toggleRunning() "); 1175 // qDebug("KOTodoView::toggleRunning() ");
1169 if ( ! mActiveItem ) 1176 if ( ! mActiveItem )
1170 return; 1177 return;
1171 Todo * t = mActiveItem->todo(); 1178 Todo * t = mActiveItem->todo();
1172 if ( t->isRunning() ) { 1179 if ( t->isRunning() ) {
1173 1180
1174 1181
1175 KOStopTodoPrefs tp ( t, this ); 1182 KOStopTodoPrefs tp ( t, this );
1176 tp.exec(); 1183 tp.exec();
1177 1184
1178 1185
1179#if 0 1186#if 0
1180 int result = KMessageBox::warningYesNoCancel(this, 1187 int result = KMessageBox::warningYesNoCancel(this,
1181 i18n("The todo\n%1\nis started.\nDo you want to set\nthe state to stopped?").arg(mActiveItem->text(0).left( 25 ) ),i18n("Todo is started"),i18n("Stop"),i18n("Stop+note")); 1188 i18n("The todo\n%1\nis started.\nDo you want to set\nthe state to stopped?").arg(mActiveItem->text(0).left( 25 ) ),i18n("Todo is started"),i18n("Stop"),i18n("Stop+note"));
1182 if (result == KMessageBox::Cancel) return; 1189 if (result == KMessageBox::Cancel) return;
1183 if ( result == KMessageBox::No ) { 1190 if ( result == KMessageBox::No ) {
1184 QString comment = QInputDialog::getText(mActiveItem->text(0).left( 25 ),i18n("Comment for todo:") ); 1191 QString comment = QInputDialog::getText(mActiveItem->text(0).left( 25 ),i18n("Comment for todo:") );
1185 t->setRunningFalse( comment ); 1192 t->setRunningFalse( comment );
1186 } else { 1193 } else {
1187 t->setRunning( false ); 1194 t->setRunning( false );
1188 } 1195 }
1189 mActiveItem->construct(); 1196 mActiveItem->construct();
1190 1197
1191 1198
1192#endif 1199#endif
1193 } else { 1200 } else {
1194 int result = KMessageBox::warningContinueCancel(this, 1201 int result = KMessageBox::warningContinueCancel(this,
1195 i18n("The todo\n%1\nis stopped.\nDo you want to set\nthe state to started?").arg(mActiveItem->text(0).left( 25 ) ),i18n("Todo is stopped"),i18n("Start todo"),i18n("Cancel"), true); 1202 i18n("The todo\n%1\nis stopped.\nDo you want to set\nthe state to started?").arg(mActiveItem->text(0).left( 25 ) ),i18n("Todo is stopped"),i18n("Start todo"),i18n("Cancel"), true);
1196 if (result != KMessageBox::Continue) return; 1203 if (result != KMessageBox::Continue) return;
1197 t->setRunning( true ); 1204 t->setRunning( true );
1198 mActiveItem->construct(); 1205 mActiveItem->construct();
1199 } 1206 }
1200} 1207}
1201 1208
1202void KOTodoView::itemClicked(QListViewItem *item) 1209void KOTodoView::itemClicked(QListViewItem *item)
1203{ 1210{
1204 //qDebug("KOTodoView::itemClicked %d", item); 1211 //qDebug("KOTodoView::itemClicked %d", item);
1205 if (!item) { 1212 if (!item) {
1206 if ( pendingSubtodo != 0 ) { 1213 if ( pendingSubtodo != 0 ) {
1207 topLevelWidget()->setCaption(i18n("Reparenting aborted!")); 1214 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
1208 } 1215 }
1209 pendingSubtodo = 0; 1216 pendingSubtodo = 0;
1210 return; 1217 return;
1211 } 1218 }
1212 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 1219 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
1213 if ( pendingSubtodo != 0 ) { 1220 if ( pendingSubtodo != 0 ) {
1214 bool allowReparent = true; 1221 bool allowReparent = true;
1215 QListViewItem *par = item; 1222 QListViewItem *par = item;
1216 while ( par ) { 1223 while ( par ) {
1217 if ( par == pendingSubtodo ) { 1224 if ( par == pendingSubtodo ) {
1218 allowReparent = false; 1225 allowReparent = false;
1219 break; 1226 break;
1220 } 1227 }
1221 par = par->parent(); 1228 par = par->parent();
1222 } 1229 }
1223 if ( !allowReparent ) { 1230 if ( !allowReparent ) {
1224 topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!")); 1231 topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!"));
1225 pendingSubtodo = 0; 1232 pendingSubtodo = 0;
1226 } else { 1233 } else {
1227 Todo* newParent = todoItem->todo(); 1234 Todo* newParent = todoItem->todo();
1228 Todo* newSub = pendingSubtodo->todo(); 1235 Todo* newSub = pendingSubtodo->todo();
1229 pendingSubtodo = 0; 1236 pendingSubtodo = 0;
1230 emit reparentTodoSignal( newParent,newSub ); 1237 emit reparentTodoSignal( newParent,newSub );
1231 return; 1238 return;
1232 } 1239 }
1233 } 1240 }
1234 1241
1235} 1242}
1236 1243
1237void KOTodoView::setDocumentId( const QString &id ) 1244void KOTodoView::setDocumentId( const QString &id )
1238{ 1245{
1239 1246
1240 mDocPrefs->setDoc( id ); 1247 mDocPrefs->setDoc( id );
1241} 1248}
1242 1249
1243void KOTodoView::itemStateChanged( QListViewItem *item ) 1250void KOTodoView::itemStateChanged( QListViewItem *item )
1244{ 1251{
1245 if (!item) return; 1252 if (!item) return;
1246 1253
1247 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 1254 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
1248 1255
1249// kdDebug() << "KOTodoView::itemStateChanged(): " << todoItem->todo()->summary() << endl; 1256// kdDebug() << "KOTodoView::itemStateChanged(): " << todoItem->todo()->summary() << endl;
1250 1257
1251 if( mDocPrefs ) mDocPrefs->writeEntry( todoItem->todo()->uid(), todoItem->isOpen() ); 1258 if( mDocPrefs ) mDocPrefs->writeEntry( todoItem->todo()->uid(), todoItem->isOpen() );
1252} 1259}
1253 1260
1254void KOTodoView::saveLayout(KConfig *config, const QString &group) const 1261void KOTodoView::saveLayout(KConfig *config, const QString &group) const
1255{ 1262{
1256 mTodoListView->saveLayout(config,group); 1263 mTodoListView->saveLayout(config,group);
1257} 1264}
1258 1265
1259void KOTodoView::restoreLayout(KConfig *config, const QString &group) 1266void KOTodoView::restoreLayout(KConfig *config, const QString &group)
1260{ 1267{
1261 mTodoListView->restoreLayout(config,group); 1268 mTodoListView->restoreLayout(config,group);
1262} 1269}
1263 1270
1264void KOTodoView::processSelectionChange() 1271void KOTodoView::processSelectionChange()
1265{ 1272{
1266// kdDebug() << "KOTodoView::processSelectionChange()" << endl; 1273// kdDebug() << "KOTodoView::processSelectionChange()" << endl;
1267 1274
1268 KOTodoViewItem *item = 1275 KOTodoViewItem *item =
1269 static_cast<KOTodoViewItem *>( mTodoListView->selectedItem() ); 1276 static_cast<KOTodoViewItem *>( mTodoListView->selectedItem() );
1270 1277
1271 if ( !item ) { 1278 if ( !item ) {
1272 emit incidenceSelected( 0 ); 1279 emit incidenceSelected( 0 );
1273 } else { 1280 } else {
1274 emit incidenceSelected( item->todo() ); 1281 emit incidenceSelected( item->todo() );
1275 } 1282 }
1276} 1283}
1277 1284
1278void KOTodoView::modified(bool b) 1285void KOTodoView::modified(bool b)
1279{ 1286{
1280 emit isModified(b); 1287 emit isModified(b);
1281} 1288}
1282void KOTodoView::setTodoModified( Todo* todo ) 1289void KOTodoView::setTodoModified( Todo* todo )
1283{ 1290{
1284 todoModified( todo, KOGlobals::UNKNOWN_MODIFIED ); 1291 todoModified( todo, KOGlobals::UNKNOWN_MODIFIED );
1285} 1292}
1286void KOTodoView::clearSelection() 1293void KOTodoView::clearSelection()
1287{ 1294{
1288 mTodoListView->selectAll( false ); 1295 mTodoListView->selectAll( false );
1289} 1296}
1290void KOTodoView::setAllOpen() 1297void KOTodoView::setAllOpen()
1291{ 1298{
1292 if ( isFlatDisplay ) { 1299 if ( isFlatDisplay ) {
1293 isFlatDisplay = false; 1300 isFlatDisplay = false;
1294 mPopupMenu->setItemChecked( 8,false ); 1301 mPopupMenu->setItemChecked( 8,false );
1295 updateView(); 1302 updateView();
1296 } else { 1303 } else {
1297 storeCurrentItem(); 1304 storeCurrentItem();
1298 } 1305 }
1299 setOpen(mTodoListView->firstChild(), true); 1306 setOpen(mTodoListView->firstChild(), true);
1300 resetCurrentItem(); 1307 resetCurrentItem();
1301} 1308}
1302void KOTodoView::setAllClose() 1309void KOTodoView::setAllClose()
1303{ 1310{
1304 if ( isFlatDisplay ) { 1311 if ( isFlatDisplay ) {
1305 isFlatDisplay = false; 1312 isFlatDisplay = false;
1306 mPopupMenu->setItemChecked( 8,false ); 1313 mPopupMenu->setItemChecked( 8,false );
1307 updateView(); 1314 updateView();
1308 } else { 1315 } else {
1309 storeCurrentItem(); 1316 storeCurrentItem();
1310 } 1317 }
1311 setOpen(mTodoListView->firstChild(), false); 1318 setOpen(mTodoListView->firstChild(), false);
1312 resetCurrentItem(); 1319 resetCurrentItem();
1313} 1320}
1314void KOTodoView::setOpen( QListViewItem* item, bool setOpenI) 1321void KOTodoView::setOpen( QListViewItem* item, bool setOpenI)
1315{ 1322{
1316 1323
1317 while ( item ) { 1324 while ( item ) {
1318 setOpen( item->firstChild(), setOpenI ); 1325 setOpen( item->firstChild(), setOpenI );
1319 item->setOpen( setOpenI ); 1326 item->setOpen( setOpenI );
1320 item = item->nextSibling(); 1327 item = item->nextSibling();
1321 } 1328 }
1322} 1329}
1323 1330
1324void KOTodoView::displayAllFlat() 1331void KOTodoView::displayAllFlat()
1325{ 1332{
1326 pendingSubtodo = 0; 1333 pendingSubtodo = 0;
1327 if ( mBlockUpdate ) { 1334 if ( mBlockUpdate ) {
1328 return; 1335 return;
1329 } 1336 }
1330 mPopupMenu->setItemChecked( 8,true ); 1337 mPopupMenu->setItemChecked( 8,true );
1331 isFlatDisplay = true; 1338 isFlatDisplay = true;
1332 QPtrList<Todo> todoList = calendar()->todos(); 1339 QPtrList<Todo> todoList = calendar()->todos();
1333 mTodoMap.clear(); 1340 mTodoMap.clear();
1334 mTodoListView->clear(); 1341 mTodoListView->clear();
1335 Todo *todo; 1342 Todo *todo;
1336 for(todo = todoList.first(); todo; todo = todoList.next()) { 1343 for(todo = todoList.first(); todo; todo = todoList.next()) {
1337 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this); 1344 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this);
1338 mTodoMap.insert(todo,todoItem); 1345 mTodoMap.insert(todo,todoItem);
1339 } 1346 }
1340 mTodoListView->setFocus(); 1347 mTodoListView->setFocus();
1341 processSelectionChange(); 1348 processSelectionChange();
1342} 1349}
1343 1350
1344void KOTodoView::setAllFlat() 1351void KOTodoView::setAllFlat()
1345{ 1352{
1346 if ( isFlatDisplay ) { 1353 if ( isFlatDisplay ) {
1347 isFlatDisplay = false; 1354 isFlatDisplay = false;
1348 mPopupMenu->setItemChecked( 8,false ); 1355 mPopupMenu->setItemChecked( 8,false );
1349 updateView(); 1356 updateView();
1350 return; 1357 return;
1351 } 1358 }
1352 storeCurrentItem(); 1359 storeCurrentItem();
1353 displayAllFlat(); 1360 displayAllFlat();
1354 resetCurrentItem(); 1361 resetCurrentItem();
1355} 1362}
1356 1363
1357void KOTodoView::purgeCompleted() 1364void KOTodoView::purgeCompleted()
1358{ 1365{
1359 emit purgeCompletedSignal(); 1366 emit purgeCompletedSignal();
1360 1367
1361} 1368}
1362void KOTodoView::toggleQuickTodo() 1369void KOTodoView::toggleQuickTodo()
1363{ 1370{
1364 if ( mQuickAdd->isVisible() ) { 1371 if ( mQuickAdd->isVisible() ) {
1365 mQuickAdd->hide(); 1372 mQuickAdd->hide();
1366 KOPrefs::instance()->mEnableQuickTodo = false; 1373 KOPrefs::instance()->mEnableQuickTodo = false;
1367 } 1374 }
1368 else { 1375 else {
1369 mQuickAdd->show(); 1376 mQuickAdd->show();
1370 KOPrefs::instance()->mEnableQuickTodo = true; 1377 KOPrefs::instance()->mEnableQuickTodo = true;
1371 } 1378 }
1372 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo); 1379 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo);
1373 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo ); 1380 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo );
1374} 1381}
1375 1382
1376void KOTodoView::toggleRunning() 1383void KOTodoView::toggleRunning()
1377{ 1384{
1378 KOPrefs::instance()->mHideNonStartedTodos = !KOPrefs::instance()->mHideNonStartedTodos; 1385 KOPrefs::instance()->mHideNonStartedTodos = !KOPrefs::instance()->mHideNonStartedTodos;
1379 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos); 1386 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos);
1380 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos ); 1387 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos );
1381 updateView(); 1388 updateView();
1382} 1389}
1383 1390
1384void KOTodoView::toggleCompleted() 1391void KOTodoView::toggleCompleted()
1385{ 1392{
1386 KOPrefs::instance()->mShowCompletedTodo = !KOPrefs::instance()->mShowCompletedTodo; 1393 KOPrefs::instance()->mShowCompletedTodo = !KOPrefs::instance()->mShowCompletedTodo;
1387 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo ); 1394 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo );
1388 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo ); 1395 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo );
1389 updateView(); 1396 updateView();
1390} 1397}
1391 1398
1392void KOTodoView::addQuickTodo() 1399void KOTodoView::addQuickTodo()
1393{ 1400{
1394 Todo *todo = new Todo(); 1401 Todo *todo = new Todo();
1395 todo->setSummary(mQuickAdd->text()); 1402 todo->setSummary(mQuickAdd->text());
1396 todo->setOrganizer(KOPrefs::instance()->email()); 1403 todo->setOrganizer(KOPrefs::instance()->email());
1397 CalFilter * cf = mCalendar->filter(); 1404 CalFilter * cf = mCalendar->filter();
1398 if ( cf ) { 1405 if ( cf ) {
1399 if ( cf->isEnabled()&& cf->showCategories()) { 1406 if ( cf->isEnabled()&& cf->showCategories()) {
1400 todo->setCategories(cf->categoryList()); 1407 todo->setCategories(cf->categoryList());
1401 } 1408 }
1402 if ( cf->isEnabled() ) 1409 if ( cf->isEnabled() )
1403 todo->setSecrecy( cf->getSecrecy()); 1410 todo->setSecrecy( cf->getSecrecy());
1404 } 1411 }
1405 mCalendar->addTodo(todo); 1412 mCalendar->addTodo(todo);
1406 mQuickAdd->setText(""); 1413 mQuickAdd->setText("");
1407 todoModified (todo, KOGlobals::EVENTADDED ); 1414 todoModified (todo, KOGlobals::EVENTADDED );
1408 updateView(); 1415 updateView();
1409} 1416}
1410 1417
1411void KOTodoView::keyPressEvent ( QKeyEvent * e ) 1418void KOTodoView::keyPressEvent ( QKeyEvent * e )
1412{ 1419{
1413 // e->ignore(); 1420 // e->ignore();
1414 //return; 1421 //return;
1415 //qDebug("KOTodoView::keyPressEvent "); 1422 //qDebug("KOTodoView::keyPressEvent ");
1416 switch ( e->key() ) { 1423 switch ( e->key() ) {
1417 case Qt::Key_Down: 1424 case Qt::Key_Down:
1418 case Qt::Key_Up: 1425 case Qt::Key_Up:
1419 QWidget::keyPressEvent ( e ); 1426 QWidget::keyPressEvent ( e );
1420 break; 1427 break;
1421 1428
1422 case Qt::Key_Q: 1429 case Qt::Key_Q:
1423 toggleQuickTodo(); 1430 toggleQuickTodo();
1424 break; 1431 break;
1425 case Qt::Key_U: 1432 case Qt::Key_U:
1426 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { 1433 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) {
1427 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1434 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1428 unparentTodo(); 1435 unparentTodo();
1429 e->accept(); 1436 e->accept();
1430 } else 1437 } else
1431 e->ignore(); 1438 e->ignore();
1432 break; 1439 break;
1433 case Qt::Key_S: 1440 case Qt::Key_S:
1434 if ( e->state() == Qt::ControlButton ) { 1441 if ( e->state() == Qt::ControlButton ) {
1435 e->ignore(); 1442 e->ignore();
1436 break; 1443 break;
1437 } 1444 }
1438 if ( e->state() == Qt::ShiftButton ) { 1445 if ( e->state() == Qt::ShiftButton ) {
1439 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1446 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1440 reparentTodo(); 1447 reparentTodo();
1441 e->accept(); 1448 e->accept();
1442 } else 1449 } else
1443 e->ignore(); 1450 e->ignore();
1444 break; 1451 break;
1445 case Qt::Key_P: 1452 case Qt::Key_P:
1446 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { 1453 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) {
1447 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1454 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1448 if ( pendingSubtodo ) 1455 if ( pendingSubtodo )
1449 itemClicked(mActiveItem); 1456 itemClicked(mActiveItem);
1450 e->accept(); 1457 e->accept();
1451 } else 1458 } else
1452 e->ignore(); 1459 e->ignore();
1453 break; 1460 break;
1454 case Qt::Key_Escape: 1461 case Qt::Key_Escape:
1455 if ( pendingSubtodo ) { 1462 if ( pendingSubtodo ) {
1456 itemClicked(0); 1463 itemClicked(0);
1457 e->accept(); 1464 e->accept();
1458 } else 1465 } else
1459 e->ignore(); 1466 e->ignore();
1460 break; 1467 break;
1461 default: 1468 default:
1462 e->ignore(); 1469 e->ignore();
1463 } 1470 }
1464 1471
1465 if ( true ) { 1472 if ( true ) {
1466 if ( e->key() == Qt::Key_I ) { 1473 if ( e->key() == Qt::Key_I ) {
1467 KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem(); 1474 KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem();
1468 if ( cn ) { 1475 if ( cn ) {
1469 mActiveItem = cn; 1476 mActiveItem = cn;
1470 KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); 1477 KOTodoViewItem* ci = (KOTodoViewItem*)( cn );
1471 if ( ci ){ 1478 if ( ci ){
1472 showTodo(); 1479 showTodo();
1473 cn = (KOTodoViewItem*)cn->itemBelow(); 1480 cn = (KOTodoViewItem*)cn->itemBelow();
1474 if ( cn ) { 1481 if ( cn ) {
1475 mTodoListView->setCurrentItem ( cn ); 1482 mTodoListView->setCurrentItem ( cn );
1476 mTodoListView->ensureItemVisible ( cn ); 1483 mTodoListView->ensureItemVisible ( cn );
1477 } 1484 }
1478 1485
1479 } 1486 }
1480 } 1487 }
1481 e->accept(); 1488 e->accept();
1482 1489
1483 } 1490 }
1484 1491
1485 } 1492 }
1486 1493
1487} 1494}
1488void KOTodoView::updateTodo( Todo * t, int type ) 1495void KOTodoView::updateTodo( Todo * t, int type )
1489{ 1496{
1490 if ( mBlockUpdate) 1497 if ( mBlockUpdate)
1491 return; 1498 return;
1492 1499
1493 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator; 1500 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator;
1494 itemIterator = mTodoMap.find(t); 1501 itemIterator = mTodoMap.find(t);
1495 if (itemIterator != mTodoMap.end()) { 1502 if (itemIterator != mTodoMap.end()) {
1496 (*itemIterator)->construct(); 1503 (*itemIterator)->construct();
1497 } else { 1504 } else {
1498 if ( type == KOGlobals::EVENTADDED ) { 1505 if ( type == KOGlobals::EVENTADDED ) {
1499 insertTodoItem( t ); 1506 insertTodoItem( t );
1500 } 1507 }
1501 } 1508 }
1502 1509
1503} 1510}
1504 1511
1505void KOTodoView::todoModified(Todo * t , int p ) 1512void KOTodoView::todoModified(Todo * t , int p )
1506{ 1513{
1507 mBlockUpdate = true; 1514 mBlockUpdate = true;
1508 emit todoModifiedSignal ( t, p ); 1515 emit todoModifiedSignal ( t, p );
1509 mBlockUpdate = false; 1516 mBlockUpdate = false;
1510} 1517}