summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-07-10 21:34:03 (UTC)
committer zautrix <zautrix>2005-07-10 21:34:03 (UTC)
commitf2f9b87daddccc3d4050c99f1b43eefc95dd830f (patch) (unidiff)
treeb0df96070f34025a79d4a4e5e137121e94aa8a21
parentbf95dce0b9143e3c9b9aeb3cdfda24cb5325dd33 (diff)
downloadkdepimpi-f2f9b87daddccc3d4050c99f1b43eefc95dd830f.zip
kdepimpi-f2f9b87daddccc3d4050c99f1b43eefc95dd830f.tar.gz
kdepimpi-f2f9b87daddccc3d4050c99f1b43eefc95dd830f.tar.bz2
fixx
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/kotodoview.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp
index 3ae977d..f46a103 100644
--- a/korganizer/kotodoview.cpp
+++ b/korganizer/kotodoview.cpp
@@ -15,1052 +15,1052 @@
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 <kdateedit.h> 39#include <kdateedit.h>
40#include "ktimeedit.h" 40#include "ktimeedit.h"
41#include <kiconloader.h> 41#include <kiconloader.h>
42#include <kmessagebox.h> 42#include <kmessagebox.h>
43 43
44#include <libkcal/icaldrag.h> 44#include <libkcal/icaldrag.h>
45#include <libkcal/vcaldrag.h> 45#include <libkcal/vcaldrag.h>
46#include <libkcal/calfilter.h> 46#include <libkcal/calfilter.h>
47#include <libkcal/dndfactory.h> 47#include <libkcal/dndfactory.h>
48#include <libkcal/calendarresources.h> 48#include <libkcal/calendarresources.h>
49#include <libkcal/resourcecalendar.h> 49#include <libkcal/resourcecalendar.h>
50#include <kresources/resourceselectdialog.h> 50#include <kresources/resourceselectdialog.h>
51#include <libkcal/kincidenceformatter.h> 51#include <libkcal/kincidenceformatter.h>
52#ifndef DESKTOP_VERSION 52#ifndef DESKTOP_VERSION
53#include <qpe/qpeapplication.h> 53#include <qpe/qpeapplication.h>
54#else 54#else
55#include <qapplication.h> 55#include <qapplication.h>
56#endif 56#endif
57#ifndef KORG_NOPRINTER 57#ifndef KORG_NOPRINTER
58#include "calprinter.h" 58#include "calprinter.h"
59#endif 59#endif
60#include "docprefs.h" 60#include "docprefs.h"
61 61
62#include "kotodoview.h" 62#include "kotodoview.h"
63using namespace KOrg; 63using namespace KOrg;
64 64
65 65
66KOStartTodoPrefs::KOStartTodoPrefs( QString sum, QWidget *parent, const char *name ) : 66KOStartTodoPrefs::KOStartTodoPrefs( QString sum, QWidget *parent, const char *name ) :
67 QDialog( parent, name, true ) 67 QDialog( parent, name, true )
68{ 68{
69 mStopAll = true; 69 mStopAll = true;
70 setCaption( i18n("Start todo") ); 70 setCaption( i18n("Start todo") );
71 QVBoxLayout* lay = new QVBoxLayout( this ); 71 QVBoxLayout* lay = new QVBoxLayout( this );
72 lay->setSpacing( 3 ); 72 lay->setSpacing( 3 );
73 lay->setMargin( 3 ); 73 lay->setMargin( 3 );
74 QLabel * lab = new QLabel( i18n("<b>%1\n</b>").arg( sum ), this ); 74 QLabel * lab = new QLabel( i18n("<b>%1\n</b>").arg( sum ), this );
75 lay->addWidget( lab ); 75 lay->addWidget( lab );
76 lab->setAlignment( AlignCenter ); 76 lab->setAlignment( AlignCenter );
77 77
78 QPushButton * ok = new QPushButton( i18n("Start this todo\nand stop all running"), this ); 78 QPushButton * ok = new QPushButton( i18n("Start this todo\nand stop all running"), this );
79 lay->addWidget( ok ); 79 lay->addWidget( ok );
80 ok->setDefault( true ); 80 ok->setDefault( true );
81 QPushButton * start = new QPushButton( i18n("Start todo"), this ); 81 QPushButton * start = new QPushButton( i18n("Start todo"), this );
82 lay->addWidget( start ); 82 lay->addWidget( start );
83 QPushButton * cancel = new QPushButton( i18n("Cancel - do not start"), this ); 83 QPushButton * cancel = new QPushButton( i18n("Cancel - do not start"), this );
84 lay->addWidget( cancel ); 84 lay->addWidget( cancel );
85 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 85 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
86 connect ( start,SIGNAL(clicked() ),this , SLOT ( doStop() ) ); 86 connect ( start,SIGNAL(clicked() ),this , SLOT ( doStop() ) );
87 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 87 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
88 resize( sizeHint() ); 88 resize( sizeHint() );
89 89
90} 90}
91void KOStartTodoPrefs::doStop() 91void KOStartTodoPrefs::doStop()
92{ 92{
93 mStopAll = false; 93 mStopAll = false;
94 accept(); 94 accept();
95} 95}
96KOStopTodoPrefs::KOStopTodoPrefs( Todo* todo, QWidget *parent, const char *name ) : 96KOStopTodoPrefs::KOStopTodoPrefs( Todo* todo, QWidget *parent, const char *name ) :
97 QDialog( parent, name, true ) 97 QDialog( parent, name, true )
98{ 98{
99 mTodo = todo; 99 mTodo = todo;
100 setCaption( i18n("Stop todo") ); 100 setCaption( i18n("Stop todo") );
101 QVBoxLayout* lay = new QVBoxLayout( this ); 101 QVBoxLayout* lay = new QVBoxLayout( this );
102 lay->setSpacing( 3 ); 102 lay->setSpacing( 3 );
103 lay->setMargin( 3 ); 103 lay->setMargin( 3 );
104 QLabel * lab = new QLabel( i18n("<b>%1\n</b>").arg( todo->summary() ), this ); 104 QLabel * lab = new QLabel( i18n("<b>%1\n</b>").arg( todo->summary() ), this );
105 lay->addWidget( lab ); 105 lay->addWidget( lab );
106 lab->setAlignment( AlignHCenter ); 106 lab->setAlignment( AlignHCenter );
107 lab = new QLabel( i18n("Additional Comment:"), this ); 107 lab = new QLabel( i18n("Additional Comment:"), this );
108 lay->addWidget( lab ); 108 lay->addWidget( lab );
109 mComment = new QLineEdit( this ); 109 mComment = new QLineEdit( this );
110 lay->addWidget( mComment ); 110 lay->addWidget( mComment );
111 QHBox * start = new QHBox ( this ); 111 QHBox * start = new QHBox ( this );
112 lay->addWidget( start ); 112 lay->addWidget( start );
113 lab = new QLabel( i18n("Start:"), start ); 113 lab = new QLabel( i18n("Start:"), start );
114 QHBox * end = new QHBox ( this ); 114 QHBox * end = new QHBox ( this );
115 lay->addWidget( end ); 115 lay->addWidget( end );
116 lab = new QLabel( i18n("End:"), end ); 116 lab = new QLabel( i18n("End:"), end );
117 sde = new KDateEdit( start ); 117 sde = new KDateEdit( start );
118 ste = new KOTimeEdit( start ); 118 ste = new KOTimeEdit( start );
119 connect ( sde,SIGNAL(setTimeTo( QTime ) ),ste , SLOT ( setTime(QTime ) ) ); 119 connect ( sde,SIGNAL(setTimeTo( QTime ) ),ste , SLOT ( setTime(QTime ) ) );
120 ede = new KDateEdit( end ); 120 ede = new KDateEdit( end );
121 ete = new KOTimeEdit(end ); 121 ete = new KOTimeEdit(end );
122 connect ( ede,SIGNAL(setTimeTo( QTime ) ),ete , SLOT ( setTime(QTime ) ) ); 122 connect ( ede,SIGNAL(setTimeTo( QTime ) ),ete , SLOT ( setTime(QTime ) ) );
123 sde->setDate( mTodo->runStart().date() ); 123 sde->setDate( mTodo->runStart().date() );
124 ste->setTime( mTodo->runStart().time() ); 124 ste->setTime( mTodo->runStart().time() );
125 ede->setDate( QDate::currentDate()); 125 ede->setDate( QDate::currentDate());
126 ete->setTime( QTime::currentTime() ); 126 ete->setTime( QTime::currentTime() );
127 QPushButton * ok = new QPushButton( i18n("Stop and save"), this ); 127 QPushButton * ok = new QPushButton( i18n("Stop and save"), this );
128 lay->addWidget( ok ); 128 lay->addWidget( ok );
129 ok->setDefault( true ); 129 ok->setDefault( true );
130 QPushButton * cancel = new QPushButton( i18n("Continue running"), this ); 130 QPushButton * cancel = new QPushButton( i18n("Continue running"), this );
131 lay->addWidget( cancel ); 131 lay->addWidget( cancel );
132 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 132 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
133 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 133 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
134 ok = new QPushButton( i18n("Stop - do not save"), this ); 134 ok = new QPushButton( i18n("Stop - do not save"), this );
135 connect ( ok,SIGNAL(clicked() ),this , SLOT ( doNotSave() ) ); 135 connect ( ok,SIGNAL(clicked() ),this , SLOT ( doNotSave() ) );
136 lay->addWidget( ok ); 136 lay->addWidget( ok );
137 if (QApplication::desktop()->width() < 320 ) 137 if (QApplication::desktop()->width() < 320 )
138 resize( 240, sizeHint().height() ); 138 resize( 240, sizeHint().height() );
139 else 139 else
140 resize( 320, sizeHint().height() ); 140 resize( 320, sizeHint().height() );
141 141
142} 142}
143 143
144void KOStopTodoPrefs::accept() 144void KOStopTodoPrefs::accept()
145{ 145{
146 QDateTime start = QDateTime( sde->date(), ste->getTime() ); 146 QDateTime start = QDateTime( sde->date(), ste->getTime() );
147 QDateTime stop = QDateTime( ede->date(), ete->getTime() ); 147 QDateTime stop = QDateTime( ede->date(), ete->getTime() );
148 if ( start > stop ) { 148 if ( start > stop ) {
149 KMessageBox::sorry(this, 149 KMessageBox::sorry(this,
150 i18n("The start time is\nafter the end time!"), 150 i18n("The start time is\nafter the end time!"),
151 i18n("Time mismatch!")); 151 i18n("Time mismatch!"));
152 return; 152 return;
153 } 153 }
154 mTodo->saveRunningInfo( mComment->text(), start, stop ); 154 mTodo->saveRunningInfo( mComment->text(), start, stop );
155 QDialog::accept(); 155 QDialog::accept();
156} 156}
157void KOStopTodoPrefs::doNotSave() 157void KOStopTodoPrefs::doNotSave()
158{ 158{
159 int result = KMessageBox::warningContinueCancel(this, 159 int result = KMessageBox::warningContinueCancel(this,
160 i18n("Do you really want to set\nthe state to stopped\nwithout saving the data?"),mTodo->summary(),i18n("Yes, stop todo") ); 160 i18n("Do you really want to set\nthe state to stopped\nwithout saving the data?"),mTodo->summary(),i18n("Yes, stop todo") );
161 if (result != KMessageBox::Continue) return; 161 if (result != KMessageBox::Continue) return;
162 mTodo->stopRunning(); 162 mTodo->stopRunning();
163 QDialog::accept(); 163 QDialog::accept();
164} 164}
165 165
166 166
167class KOTodoViewWhatsThis :public QWhatsThis 167class KOTodoViewWhatsThis :public QWhatsThis
168{ 168{
169public: 169public:
170 KOTodoViewWhatsThis( QWidget *wid, KOTodoView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { }; 170 KOTodoViewWhatsThis( QWidget *wid, KOTodoView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { };
171 171
172protected: 172protected:
173 virtual QString text( const QPoint& p) 173 virtual QString text( const QPoint& p)
174 { 174 {
175 return _view->getWhatsThisText(p) ; 175 return _view->getWhatsThisText(p) ;
176 } 176 }
177private: 177private:
178 QWidget* _wid; 178 QWidget* _wid;
179 KOTodoView * _view; 179 KOTodoView * _view;
180}; 180};
181 181
182KOTodoListView::KOTodoListView(Calendar *calendar,QWidget *parent, 182KOTodoListView::KOTodoListView(Calendar *calendar,QWidget *parent,
183 const char *name) : 183 const char *name) :
184 KListView(parent,name) 184 KListView(parent,name)
185{ 185{
186 mName = QString ( name ); 186 mName = QString ( name );
187 mCalendar = calendar; 187 mCalendar = calendar;
188#ifndef DESKTOP_VERSION 188#ifndef DESKTOP_VERSION
189 QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold ); 189 QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold );
190#endif 190#endif
191 mOldCurrent = 0; 191 mOldCurrent = 0;
192 mMousePressed = false; 192 mMousePressed = false;
193 193
194 setAcceptDrops(true); 194 setAcceptDrops(true);
195 viewport()->setAcceptDrops(true); 195 viewport()->setAcceptDrops(true);
196 int size = 16; 196 int size = 16;
197 if (qApp->desktop()->width() < 300 ) 197 if (qApp->desktop()->width() < 300 )
198 size = 12; 198 size = 12;
199 setTreeStepSize( size + 6 ); 199 setTreeStepSize( size + 6 );
200 200
201} 201}
202 202
203void KOTodoListView::contentsDragEnterEvent(QDragEnterEvent *e) 203void KOTodoListView::contentsDragEnterEvent(QDragEnterEvent *e)
204{ 204{
205#ifndef KORG_NODND 205#ifndef KORG_NODND
206// kdDebug() << "KOTodoListView::contentsDragEnterEvent" << endl; 206// kdDebug() << "KOTodoListView::contentsDragEnterEvent" << endl;
207 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 207 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
208 !QTextDrag::canDecode( e ) ) { 208 !QTextDrag::canDecode( e ) ) {
209 e->ignore(); 209 e->ignore();
210 return; 210 return;
211 } 211 }
212 212
213 mOldCurrent = currentItem(); 213 mOldCurrent = currentItem();
214#endif 214#endif
215} 215}
216 216
217 217
218void KOTodoListView::contentsDragMoveEvent(QDragMoveEvent *e) 218void KOTodoListView::contentsDragMoveEvent(QDragMoveEvent *e)
219{ 219{
220#ifndef KORG_NODND 220#ifndef KORG_NODND
221// kdDebug() << "KOTodoListView::contentsDragMoveEvent" << endl; 221// kdDebug() << "KOTodoListView::contentsDragMoveEvent" << endl;
222 222
223 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 223 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
224 !QTextDrag::canDecode( e ) ) { 224 !QTextDrag::canDecode( e ) ) {
225 e->ignore(); 225 e->ignore();
226 return; 226 return;
227 } 227 }
228 228
229 e->accept(); 229 e->accept();
230#endif 230#endif
231} 231}
232 232
233void KOTodoListView::contentsDragLeaveEvent(QDragLeaveEvent *) 233void KOTodoListView::contentsDragLeaveEvent(QDragLeaveEvent *)
234{ 234{
235#ifndef KORG_NODND 235#ifndef KORG_NODND
236// kdDebug() << "KOTodoListView::contentsDragLeaveEvent" << endl; 236// kdDebug() << "KOTodoListView::contentsDragLeaveEvent" << endl;
237 237
238 setCurrentItem(mOldCurrent); 238 setCurrentItem(mOldCurrent);
239 setSelected(mOldCurrent,true); 239 setSelected(mOldCurrent,true);
240#endif 240#endif
241} 241}
242 242
243void KOTodoListView::contentsDropEvent(QDropEvent *e) 243void KOTodoListView::contentsDropEvent(QDropEvent *e)
244{ 244{
245#ifndef KORG_NODND 245#ifndef KORG_NODND
246// kdDebug() << "KOTodoListView::contentsDropEvent" << endl; 246// kdDebug() << "KOTodoListView::contentsDropEvent" << endl;
247 247
248 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 248 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
249 !QTextDrag::canDecode( e ) ) { 249 !QTextDrag::canDecode( e ) ) {
250 e->ignore(); 250 e->ignore();
251 return; 251 return;
252 } 252 }
253 253
254 DndFactory factory( mCalendar ); 254 DndFactory factory( mCalendar );
255 Todo *todo = factory.createDropTodo(e); 255 Todo *todo = factory.createDropTodo(e);
256 256
257 if (todo) { 257 if (todo) {
258 e->acceptAction(); 258 e->acceptAction();
259 259
260 KOTodoViewItem *destination = 260 KOTodoViewItem *destination =
261 (KOTodoViewItem *)itemAt(contentsToViewport(e->pos())); 261 (KOTodoViewItem *)itemAt(contentsToViewport(e->pos()));
262 Todo *destinationEvent = 0; 262 Todo *destinationEvent = 0;
263 if (destination) destinationEvent = destination->todo(); 263 if (destination) destinationEvent = destination->todo();
264 264
265 Todo *existingTodo = mCalendar->todo(todo->uid()); 265 Todo *existingTodo = mCalendar->todo(todo->uid());
266 266
267 if(existingTodo) { 267 if(existingTodo) {
268 Incidence *to = destinationEvent; 268 Incidence *to = destinationEvent;
269 while(to) { 269 while(to) {
270 if (to->uid() == todo->uid()) { 270 if (to->uid() == todo->uid()) {
271 KMessageBox::sorry(this, 271 KMessageBox::sorry(this,
272 i18n("Cannot move Todo to itself\nor a child of itself"), 272 i18n("Cannot move Todo to itself\nor a child of itself"),
273 i18n("Drop Todo")); 273 i18n("Drop Todo"));
274 delete todo; 274 delete todo;
275 return; 275 return;
276 } 276 }
277 to = to->relatedTo(); 277 to = to->relatedTo();
278 } 278 }
279 internalDrop = true; 279 internalDrop = true;
280 if ( destinationEvent ) 280 if ( destinationEvent )
281 reparentTodoSignal( destinationEvent, existingTodo ); 281 reparentTodoSignal( destinationEvent, existingTodo );
282 else 282 else
283 unparentTodoSignal(existingTodo); 283 unparentTodoSignal(existingTodo);
284 delete todo; 284 delete todo;
285 } else { 285 } else {
286 mCalendar->addTodo(todo); 286 mCalendar->addTodo(todo);
287 emit todoDropped(todo, KOGlobals::EVENTADDED); 287 emit todoDropped(todo, KOGlobals::EVENTADDED);
288 if ( destinationEvent ) 288 if ( destinationEvent )
289 reparentTodoSignal( destinationEvent, todo ); 289 reparentTodoSignal( destinationEvent, todo );
290 } 290 }
291 } 291 }
292 else { 292 else {
293 QString text; 293 QString text;
294 if (QTextDrag::decode(e,text)) { 294 if (QTextDrag::decode(e,text)) {
295 //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) ); 295 //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) );
296 KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) )); 296 KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) ));
297 qDebug("Dropped : " + text); 297 qDebug("Dropped : " + text);
298 QStringList emails = QStringList::split(",",text); 298 QStringList emails = QStringList::split(",",text);
299 for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) { 299 for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) {
300 int pos = (*it).find("<"); 300 int pos = (*it).find("<");
301 QString name = (*it).left(pos); 301 QString name = (*it).left(pos);
302 QString email = (*it).mid(pos); 302 QString email = (*it).mid(pos);
303 if (!email.isEmpty() && todoi) { 303 if (!email.isEmpty() && todoi) {
304 todoi->todo()->addAttendee(new Attendee(name,email)); 304 todoi->todo()->addAttendee(new Attendee(name,email));
305 } 305 }
306 } 306 }
307 } 307 }
308 else { 308 else {
309 qDebug("KOTodoListView::contentsDropEvent(): Todo from drop not decodable "); 309 qDebug("KOTodoListView::contentsDropEvent(): Todo from drop not decodable ");
310 e->ignore(); 310 e->ignore();
311 } 311 }
312 } 312 }
313#endif 313#endif
314} 314}
315void KOTodoListView::wheelEvent (QWheelEvent *e) 315void KOTodoListView::wheelEvent (QWheelEvent *e)
316{ 316{
317 QListView::wheelEvent (e); 317 QListView::wheelEvent (e);
318} 318}
319 319
320void KOTodoListView::contentsMousePressEvent(QMouseEvent* e) 320void KOTodoListView::contentsMousePressEvent(QMouseEvent* e)
321{ 321{
322 322
323 QPoint p(contentsToViewport(e->pos())); 323 QPoint p(contentsToViewport(e->pos()));
324 QListViewItem *i = itemAt(p); 324 QListViewItem *i = itemAt(p);
325 bool rootClicked = true; 325 bool rootClicked = true;
326 if (i) { 326 if (i) {
327 // if the user clicked into the root decoration of the item, don't 327 // if the user clicked into the root decoration of the item, don't
328 // try to start a drag! 328 // try to start a drag!
329 int X = p.x(); 329 int X = p.x();
330 //qDebug("%d %d %d", X, header()->sectionPos(0), treeStepSize() ); 330 //qDebug("%d %d %d", X, header()->sectionPos(0), treeStepSize() );
331 if (X > header()->sectionPos(0) + 331 if (X > header()->sectionPos(0) +
332 treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) + 332 treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) +
333 itemMargin() +i->height()|| 333 itemMargin() +i->height()||
334 X < header()->sectionPos(0)) { 334 X < header()->sectionPos(0)) {
335 rootClicked = false; 335 rootClicked = false;
336 } 336 }
337 } else { 337 } else {
338 rootClicked = false; 338 rootClicked = false;
339 } 339 }
340#ifndef KORG_NODND 340#ifndef KORG_NODND
341 mMousePressed = false; 341 mMousePressed = false;
342 if (! rootClicked && !( e->button() == RightButton) ) { 342 if (! rootClicked && !( e->button() == RightButton) ) {
343 mPressPos = e->pos(); 343 mPressPos = e->pos();
344 mMousePressed = true; 344 mMousePressed = true;
345 } else { 345 } else {
346 mMousePressed = false; 346 mMousePressed = false;
347 } 347 }
348#endif 348#endif
349 //qDebug("KOTodoListView::contentsMousePressEvent %d", rootClicked); 349 //qDebug("KOTodoListView::contentsMousePressEvent %d", rootClicked);
350#ifndef DESKTOP_VERSION 350#ifndef DESKTOP_VERSION
351 if (!( e->button() == RightButton && rootClicked) ) 351 if (!( e->button() == RightButton && rootClicked) )
352 QListView::contentsMousePressEvent(e); 352 QListView::contentsMousePressEvent(e);
353#else 353#else
354 QListView::contentsMousePressEvent(e); 354 QListView::contentsMousePressEvent(e);
355#endif 355#endif
356} 356}
357void KOTodoListView::paintEvent(QPaintEvent* e) 357void KOTodoListView::paintEvent(QPaintEvent* e)
358{ 358{
359 emit paintNeeded(); 359 emit paintNeeded();
360 QListView::paintEvent( e); 360 QListView::paintEvent( e);
361} 361}
362void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e) 362void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e)
363{ 363{
364 364
365#ifndef KORG_NODND 365#ifndef KORG_NODND
366 //QListView::contentsMouseMoveEvent(e); 366 //QListView::contentsMouseMoveEvent(e);
367 if (mMousePressed && (mPressPos - e->pos()).manhattanLength() > 367 if (mMousePressed && (mPressPos - e->pos()).manhattanLength() >
368 QApplication::startDragDistance()*3) { 368 QApplication::startDragDistance()*3) {
369 mMousePressed = false; 369 mMousePressed = false;
370 QListViewItem *item = itemAt(contentsToViewport(mPressPos)); 370 QListViewItem *item = itemAt(contentsToViewport(mPressPos));
371 if (item) { 371 if (item) {
372 DndFactory factory( mCalendar ); 372 DndFactory factory( mCalendar );
373 ICalDrag *vd = factory.createDrag( 373 ICalDrag *vd = factory.createDrag(
374 ((KOTodoViewItem *)item)->todo(),viewport()); 374 ((KOTodoViewItem *)item)->todo(),viewport());
375 internalDrop = false; 375 internalDrop = false;
376 // we cannot do any senseful here, because the DnD is still broken in Qt 376 // we cannot do any senseful here, because the DnD is still broken in Qt
377 if (vd->drag()) { 377 if (vd->drag()) {
378 if ( !internalDrop ) { 378 if ( !internalDrop ) {
379 //emit deleteTodo( ((KOTodoViewItem *)item)->todo() ); 379 //emit deleteTodo( ((KOTodoViewItem *)item)->todo() );
380 qDebug("Dnd: External move: Delete drag source "); 380 qDebug("Dnd: External move: Delete drag source ");
381 } else 381 } else
382 qDebug("Dnd: Internal move "); 382 qDebug("Dnd: Internal move ");
383 383
384 } else { 384 } else {
385 if ( !internalDrop ) { 385 if ( !internalDrop ) {
386 qDebug("Dnd: External Copy"); 386 qDebug("Dnd: External Copy");
387 } else 387 } else
388 qDebug("DnD: Internal copy: Copy pending"); 388 qDebug("DnD: Internal copy: Copy pending");
389 } 389 }
390 } 390 }
391 } 391 }
392#endif 392#endif
393} 393}
394void KOTodoListView::keyReleaseEvent ( QKeyEvent *e ) 394void KOTodoListView::keyReleaseEvent ( QKeyEvent *e )
395{ 395{
396 if ( !e->isAutoRepeat() ) { 396 if ( !e->isAutoRepeat() ) {
397 mFlagKeyPressed = false; 397 mFlagKeyPressed = false;
398 } 398 }
399} 399}
400 400
401 401
402void KOTodoListView::keyPressEvent ( QKeyEvent * e ) 402void KOTodoListView::keyPressEvent ( QKeyEvent * e )
403{ 403{
404 qApp->processEvents(); 404 qApp->processEvents();
405 if ( !isVisible() ) { 405 if ( !isVisible() ) {
406 e->ignore(); 406 e->ignore();
407 return; 407 return;
408 } 408 }
409 if ( e->isAutoRepeat() && !mFlagKeyPressed ) { 409 if ( e->isAutoRepeat() && !mFlagKeyPressed ) {
410 e->ignore(); 410 e->ignore();
411 // qDebug(" ignore %d",e->isAutoRepeat() ); 411 // qDebug(" ignore %d",e->isAutoRepeat() );
412 return; 412 return;
413 } 413 }
414 if (! e->isAutoRepeat() ) 414 if (! e->isAutoRepeat() )
415 mFlagKeyPressed = true; 415 mFlagKeyPressed = true;
416 QListViewItem* cn; 416 QListViewItem* cn;
417 if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) { 417 if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) {
418 cn = currentItem(); 418 cn = currentItem();
419 if ( cn ) { 419 if ( cn ) {
420 KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); 420 KOTodoViewItem* ci = (KOTodoViewItem*)( cn );
421 if ( ci ){ 421 if ( ci ){
422 if ( e->state() == ShiftButton ) 422 if ( e->state() == ShiftButton )
423 ci->setOn( false ); 423 ci->setOn( false );
424 else 424 else
425 ci->setOn( true ); 425 ci->setOn( true );
426 cn = cn->itemBelow(); 426 cn = cn->itemBelow();
427 if ( cn ) { 427 if ( cn ) {
428 setCurrentItem ( cn ); 428 setCurrentItem ( cn );
429 ensureItemVisible ( cn ); 429 ensureItemVisible ( cn );
430 } 430 }
431 431
432 } 432 }
433 } 433 }
434 434
435 e->accept(); 435 e->accept();
436 return; 436 return;
437 } 437 }
438 438
439 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) { 439 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) {
440 switch ( e->key() ) { 440 switch ( e->key() ) {
441 case Qt::Key_Down: 441 case Qt::Key_Down:
442 case Qt::Key_Up: 442 case Qt::Key_Up:
443 QListView::keyPressEvent ( e ); 443 QListView::keyPressEvent ( e );
444 e->accept(); 444 e->accept();
445 break; 445 break;
446 case Qt::Key_Left: 446 case Qt::Key_Left:
447 case Qt::Key_Right: 447 case Qt::Key_Right:
448 QListView::keyPressEvent ( e ); 448 QListView::keyPressEvent ( e );
449 e->accept(); 449 e->accept();
450 return; 450 return;
451 break; 451 break;
452 default: 452 default:
453 e->ignore(); 453 e->ignore();
454 break; 454 break;
455 } 455 }
456 return; 456 return;
457 } 457 }
458 e->ignore(); 458 e->ignore();
459} 459}
460void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e) 460void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e)
461{ 461{
462 QListView::contentsMouseReleaseEvent(e); 462 QListView::contentsMouseReleaseEvent(e);
463 mMousePressed = false; 463 mMousePressed = false;
464} 464}
465 465
466void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e) 466void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e)
467{ 467{
468 if (!e) return; 468 if (!e) return;
469 469
470 QPoint vp = contentsToViewport(e->pos()); 470 QPoint vp = contentsToViewport(e->pos());
471 471
472 QListViewItem *item = itemAt(vp); 472 QListViewItem *item = itemAt(vp);
473 473
474 emit double_Clicked(item); 474 emit double_Clicked(item);
475 if (!item) return; 475 if (!item) return;
476 476
477 emit doubleClicked(item,vp,0); 477 emit doubleClicked(item,vp,0);
478} 478}
479 479
480///////////////////////////////////////////////////////////////////////////// 480/////////////////////////////////////////////////////////////////////////////
481 481
482KOQuickTodo::KOQuickTodo(QWidget *parent) : 482KOQuickTodo::KOQuickTodo(QWidget *parent) :
483 QLineEdit(parent) 483 QLineEdit(parent)
484{ 484{
485 setText(i18n("Click to add new Todo")); 485 setText(i18n("Click to add new Todo"));
486} 486}
487 487
488void KOQuickTodo::focusInEvent(QFocusEvent *ev) 488void KOQuickTodo::focusInEvent(QFocusEvent *ev)
489{ 489{
490 if ( text()==i18n("Click to add new Todo") ) 490 if ( text()==i18n("Click to add new Todo") )
491 setText(""); 491 setText("");
492 QLineEdit::focusInEvent(ev); 492 QLineEdit::focusInEvent(ev);
493} 493}
494 494
495void KOQuickTodo::focusOutEvent(QFocusEvent *ev) 495void KOQuickTodo::focusOutEvent(QFocusEvent *ev)
496{ 496{
497 setText(i18n("Click to add new Todo")); 497 setText(i18n("Click to add new Todo"));
498 QLineEdit::focusOutEvent(ev); 498 QLineEdit::focusOutEvent(ev);
499} 499}
500 500
501///////////////////////////////////////////////////////////////////////////// 501/////////////////////////////////////////////////////////////////////////////
502 502
503KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) : 503KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) :
504 KOrg::BaseView(calendar,parent,name) 504 KOrg::BaseView(calendar,parent,name)
505{ 505{
506 mCategoryPopupMenu = 0; 506 mCategoryPopupMenu = 0;
507 mPendingUpdateBeforeRepaint = false; 507 mPendingUpdateBeforeRepaint = false;
508 isFlatDisplay = false; 508 isFlatDisplay = false;
509 mNavigator = 0; 509 mNavigator = 0;
510 QBoxLayout *topLayout = new QVBoxLayout(this); 510 QBoxLayout *topLayout = new QVBoxLayout(this);
511 mName = QString ( name ); 511 mName = QString ( name );
512 mBlockUpdate = false; 512 mBlockUpdate = false;
513 mQuickBar = new QWidget( this ); 513 mQuickBar = new QWidget( this );
514 topLayout->addWidget(mQuickBar); 514 topLayout->addWidget(mQuickBar);
515 515
516 mQuickAdd = new KOQuickTodo(mQuickBar); 516 mQuickAdd = new KOQuickTodo(mQuickBar);
517 QBoxLayout *quickLayout = new QHBoxLayout(mQuickBar); 517 QBoxLayout *quickLayout = new QHBoxLayout(mQuickBar);
518 quickLayout->addWidget( mQuickAdd ); 518 quickLayout->addWidget( mQuickAdd );
519 mNewSubBut = new QPushButton( "sub",mQuickBar ); 519 mNewSubBut = new QPushButton( "sub",mQuickBar );
520 QPushButton * s_done = new QPushButton( "D",mQuickBar ); 520 QPushButton * s_done = new QPushButton( "D",mQuickBar );
521 QPushButton * s_run = new QPushButton( "R",mQuickBar ); 521 QPushButton * s_run = new QPushButton( "R",mQuickBar );
522 QPushButton * allopen = new QPushButton( "O",mQuickBar ); 522 QPushButton * allopen = new QPushButton( "O",mQuickBar );
523 QPushButton * allclose = new QPushButton( "C",mQuickBar ); 523 QPushButton * allclose = new QPushButton( "C",mQuickBar );
524 QPushButton * flat = new QPushButton( "F",mQuickBar ); 524 QPushButton * flat = new QPushButton( "F",mQuickBar );
525 525
526 int fixwid = mQuickAdd->sizeHint().height(); 526 int fixwid = mQuickAdd->sizeHint().height();
527 int fixhei = fixwid;
527 if ( QApplication::desktop()->width() > 800 ) 528 if ( QApplication::desktop()->width() > 800 )
528 fixwid *= 2; 529 fixwid = (fixwid*3)/2;
529 connect ( flat, SIGNAL ( clicked()), SLOT ( setAllFlat())); 530 connect ( flat, SIGNAL ( clicked()), SLOT ( setAllFlat()));
530 connect ( allopen, SIGNAL ( clicked()), SLOT ( setAllOpen())); 531 connect ( allopen, SIGNAL ( clicked()), SLOT ( setAllOpen()));
531 connect ( allclose, SIGNAL ( clicked()), SLOT ( setAllClose())); 532 connect ( allclose, SIGNAL ( clicked()), SLOT ( setAllClose()));
532 s_done->setPixmap( SmallIcon("greenhook16")); 533 s_done->setPixmap( SmallIcon("greenhook16"));
533 s_done->setFixedHeight( flat->sizeHint().height() );
534 connect ( s_done, SIGNAL ( clicked()), SLOT ( toggleCompleted())); 534 connect ( s_done, SIGNAL ( clicked()), SLOT ( toggleCompleted()));
535 s_run->setPixmap( SmallIcon("ko16old")); 535 s_run->setPixmap( SmallIcon("ko16old"));
536 connect ( s_run, SIGNAL ( clicked()), SLOT ( toggleRunning())); 536 connect ( s_run, SIGNAL ( clicked()), SLOT ( toggleRunning()));
537 537
538 connect ( mNewSubBut, SIGNAL ( clicked()), SLOT ( newSubTodo())); 538 connect ( mNewSubBut, SIGNAL ( clicked()), SLOT ( newSubTodo()));
539 539
540 mNewSubBut->setFixedWidth(mNewSubBut->sizeHint().width() ); 540 mNewSubBut->setFixedWidth(mNewSubBut->sizeHint().width() );
541 mNewSubBut->setEnabled( false ); 541 mNewSubBut->setEnabled( false );
542 flat->setFixedWidth( fixwid ); 542 flat->setFixedWidth( fixwid );
543 s_done->setFixedWidth( fixwid ); 543 s_done->setFixedWidth( fixwid );
544 allopen->setFixedWidth( fixwid ); 544 allopen->setFixedWidth( fixwid );
545 allclose->setFixedWidth( fixwid ); 545 allclose->setFixedWidth( fixwid );
546 s_run->setFixedWidth( fixwid ); 546 s_run->setFixedWidth( fixwid );
547 if ( QApplication::desktop()->width() < 800 ) { 547
548 flat->setFixedHeight( fixwid ); 548 flat->setFixedHeight(fixhei );
549 s_done->setFixedHeight( fixwid ); 549 s_done->setFixedHeight(fixhei );
550 allopen->setFixedHeight( fixwid ); 550 allopen->setFixedHeight(fixhei );
551 allclose->setFixedHeight( fixwid ); 551 allclose->setFixedHeight(fixhei );
552 s_run->setFixedHeight( fixwid ); 552 s_run->setFixedHeight(fixhei );
553 mNewSubBut->setFixedHeight( fixwid ); 553 mNewSubBut->setFixedHeight(fixhei );
554 } 554
555 quickLayout->addWidget( mNewSubBut ); 555 quickLayout->addWidget( mNewSubBut );
556 quickLayout->addWidget( s_done ); 556 quickLayout->addWidget( s_done );
557 quickLayout->addWidget( s_run ); 557 quickLayout->addWidget( s_run );
558 quickLayout->addWidget( allopen ); 558 quickLayout->addWidget( allopen );
559 quickLayout->addWidget( allclose ); 559 quickLayout->addWidget( allclose );
560 quickLayout->addWidget( flat ); 560 quickLayout->addWidget( flat );
561 561
562 if ( !KOPrefs::instance()->mEnableQuickTodo ) mQuickBar->hide(); 562 if ( !KOPrefs::instance()->mEnableQuickTodo ) mQuickBar->hide();
563 563
564 mTodoListView = new KOTodoListView(calendar,this, name ); 564 mTodoListView = new KOTodoListView(calendar,this, name );
565 topLayout->addWidget(mTodoListView); 565 topLayout->addWidget(mTodoListView);
566 //mTodoListView->header()->setMaximumHeight(30); 566 //mTodoListView->header()->setMaximumHeight(30);
567 mTodoListView->setRootIsDecorated(true); 567 mTodoListView->setRootIsDecorated(true);
568 mTodoListView->setAllColumnsShowFocus(true); 568 mTodoListView->setAllColumnsShowFocus(true);
569 569
570 mTodoListView->setShowSortIndicator(true); 570 mTodoListView->setShowSortIndicator(true);
571 571
572 mTodoListView->addColumn(i18n("Todo")); 572 mTodoListView->addColumn(i18n("Todo"));
573 mTodoListView->addColumn(i18n("Prio")); 573 mTodoListView->addColumn(i18n("Prio"));
574 mTodoListView->setColumnAlignment(1,AlignHCenter); 574 mTodoListView->setColumnAlignment(1,AlignHCenter);
575 mTodoListView->addColumn(i18n("Complete")); 575 mTodoListView->addColumn(i18n("Complete"));
576 mTodoListView->setColumnAlignment(2,AlignCenter); 576 mTodoListView->setColumnAlignment(2,AlignCenter);
577 577
578 mTodoListView->addColumn(i18n("Due Date")); 578 mTodoListView->addColumn(i18n("Due Date"));
579 mTodoListView->setColumnAlignment(3,AlignLeft); 579 mTodoListView->setColumnAlignment(3,AlignLeft);
580 mTodoListView->addColumn(i18n("Due Time")); 580 mTodoListView->addColumn(i18n("Due Time"));
581 mTodoListView->setColumnAlignment(4,AlignHCenter); 581 mTodoListView->setColumnAlignment(4,AlignHCenter);
582 582
583 mTodoListView->addColumn(i18n("Start Date")); 583 mTodoListView->addColumn(i18n("Start Date"));
584 mTodoListView->setColumnAlignment(5,AlignLeft); 584 mTodoListView->setColumnAlignment(5,AlignLeft);
585 mTodoListView->addColumn(i18n("Start Time")); 585 mTodoListView->addColumn(i18n("Start Time"));
586 mTodoListView->setColumnAlignment(6,AlignHCenter); 586 mTodoListView->setColumnAlignment(6,AlignHCenter);
587 587
588 //mTodoListView->addColumn(i18n("Cancelled")); 588 //mTodoListView->addColumn(i18n("Cancelled"));
589 mTodoListView->addColumn(i18n("Categories")); 589 mTodoListView->addColumn(i18n("Categories"));
590 mTodoListView->addColumn(i18n("Calendar")); 590 mTodoListView->addColumn(i18n("Calendar"));
591 mTodoListView->addColumn(i18n("Last Modified")); 591 mTodoListView->addColumn(i18n("Last Modified"));
592 mTodoListView->addColumn(i18n("Created")); 592 mTodoListView->addColumn(i18n("Created"));
593 mTodoListView->addColumn(i18n("Last Modified Sub")); 593 mTodoListView->addColumn(i18n("Last Modified Sub"));
594#if 0 594#if 0
595 mTodoListView->addColumn(i18n("Sort Id")); 595 mTodoListView->addColumn(i18n("Sort Id"));
596 mTodoListView->setColumnAlignment(4,AlignHCenter); 596 mTodoListView->setColumnAlignment(4,AlignHCenter);
597#endif 597#endif
598 598
599 mTodoListView->setMinimumHeight( 60 ); 599 mTodoListView->setMinimumHeight( 60 );
600 mTodoListView->setItemsRenameable( true ); 600 mTodoListView->setItemsRenameable( true );
601 mTodoListView->setRenameable( 0 ); 601 mTodoListView->setRenameable( 0 );
602 mTodoListView->setColumnWidth( 0, 120 ); 602 mTodoListView->setColumnWidth( 0, 120 );
603 int iii = 0; 603 int iii = 0;
604 for ( iii = 0; iii< 12 ; ++iii ) 604 for ( iii = 0; iii< 12 ; ++iii )
605 mTodoListView->setColumnWidthMode( iii, QListView::Manual ); 605 mTodoListView->setColumnWidthMode( iii, QListView::Manual );
606 606
607 607
608 mKOTodoViewWhatsThis = new KOTodoViewWhatsThis(mTodoListView->viewport(),this); 608 mKOTodoViewWhatsThis = new KOTodoViewWhatsThis(mTodoListView->viewport(),this);
609 609
610 mPriorityPopupMenu = new QPopupMenu(this); 610 mPriorityPopupMenu = new QPopupMenu(this);
611 for (int i = 1; i <= 5; i++) { 611 for (int i = 1; i <= 5; i++) {
612 QString label = QString ("%1").arg (i); 612 QString label = QString ("%1").arg (i);
613 mPriority[mPriorityPopupMenu->insertItem (label)] = i; 613 mPriority[mPriorityPopupMenu->insertItem (label)] = i;
614 } 614 }
615 connect (mPriorityPopupMenu, SIGNAL(activated (int)), SLOT (setNewPriority(int))); 615 connect (mPriorityPopupMenu, SIGNAL(activated (int)), SLOT (setNewPriority(int)));
616 616
617 mPercentageCompletedPopupMenu = new QPopupMenu(this); 617 mPercentageCompletedPopupMenu = new QPopupMenu(this);
618 for (int i = 0; i <= 100; i+=20) { 618 for (int i = 0; i <= 100; i+=20) {
619 QString label = QString ("%1 %").arg (i); 619 QString label = QString ("%1 %").arg (i);
620 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i; 620 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i;
621 } 621 }
622 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int))); 622 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int)));
623 623
624 624
625 mCategoryPopupMenu = new QPopupMenu (this); 625 mCategoryPopupMenu = new QPopupMenu (this);
626 mCategoryPopupMenu->setCheckable (true); 626 mCategoryPopupMenu->setCheckable (true);
627 connect (mCategoryPopupMenu, SIGNAL (activated (int)), SLOT (changedCategories (int))); 627 connect (mCategoryPopupMenu, SIGNAL (activated (int)), SLOT (changedCategories (int)));
628 connect (mCategoryPopupMenu, SIGNAL (aboutToShow ()), SLOT (fillCategories ())); 628 connect (mCategoryPopupMenu, SIGNAL (aboutToShow ()), SLOT (fillCategories ()));
629 629
630 mCalPopupMenu = new QPopupMenu (this); 630 mCalPopupMenu = new QPopupMenu (this);
631 mCalPopupMenu->setCheckable (true); 631 mCalPopupMenu->setCheckable (true);
632 connect (mCalPopupMenu, SIGNAL (activated (int)), SLOT (changedCal (int))); 632 connect (mCalPopupMenu, SIGNAL (activated (int)), SLOT (changedCal (int)));
633 connect (mCalPopupMenu, SIGNAL (aboutToShow ()), SLOT (fillCal ())); 633 connect (mCalPopupMenu, SIGNAL (aboutToShow ()), SLOT (fillCal ()));
634 634
635 635
636 636
637 637
638 mItemPopupMenu = new QPopupMenu(this); 638 mItemPopupMenu = new QPopupMenu(this);
639 mItemPopupMenu->insertItem(i18n("Show"), this, 639 mItemPopupMenu->insertItem(i18n("Show"), this,
640 SLOT (showTodo())); 640 SLOT (showTodo()));
641 mItemPopupMenu->insertItem(i18n("Edit..."), this, 641 mItemPopupMenu->insertItem(i18n("Edit..."), this,
642 SLOT (editTodo())); 642 SLOT (editTodo()));
643 mItemPopupMenu->insertItem( i18n("Delete..."), this, 643 mItemPopupMenu->insertItem( i18n("Delete..."), this,
644 SLOT (deleteTodo())); 644 SLOT (deleteTodo()));
645 mItemPopupMenu->insertItem( i18n("Clone..."), this, 645 mItemPopupMenu->insertItem( i18n("Clone..."), this,
646 SLOT (cloneTodo())); 646 SLOT (cloneTodo()));
647 mItemPopupMenu->insertItem( i18n("Move..."), this, 647 mItemPopupMenu->insertItem( i18n("Move..."), this,
648 SLOT (moveTodo())); 648 SLOT (moveTodo()));
649#ifndef DESKTOP_VERSION 649#ifndef DESKTOP_VERSION
650 mItemPopupMenu->insertItem( i18n("Beam..."), this, 650 mItemPopupMenu->insertItem( i18n("Beam..."), this,
651 SLOT (beamTodo())); 651 SLOT (beamTodo()));
652#endif 652#endif
653 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this, 653 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this,
654 SLOT (cancelTodo())); 654 SLOT (cancelTodo()));
655 mItemPopupMenu->insertItem( i18n("Categories"), mCategoryPopupMenu); 655 mItemPopupMenu->insertItem( i18n("Categories"), mCategoryPopupMenu);
656 mItemPopupMenu->insertItem( i18n("Calendar"), mCalPopupMenu); 656 mItemPopupMenu->insertItem( i18n("Calendar"), mCalPopupMenu);
657 mItemPopupMenu->insertSeparator(); 657 mItemPopupMenu->insertSeparator();
658 mItemPopupMenu->insertItem( i18n("Start/Stop todo..."), this, 658 mItemPopupMenu->insertItem( i18n("Start/Stop todo..."), this,
659 SLOT (toggleRunningItem())); 659 SLOT (toggleRunningItem()));
660 mItemPopupMenu->insertSeparator(); 660 mItemPopupMenu->insertSeparator();
661 /* 661 /*
662 mItemPopupMenu->insertItem( i18n("New Todo..."), this, 662 mItemPopupMenu->insertItem( i18n("New Todo..."), this,
663 SLOT (newTodo())); 663 SLOT (newTodo()));
664 */ 664 */
665 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this, 665 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this,
666 SLOT (newSubTodo())); 666 SLOT (newSubTodo()));
667 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this, 667 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this,
668 SLOT (unparentTodo()),0,21); 668 SLOT (unparentTodo()),0,21);
669 mItemPopupMenu->insertItem(i18n("Reparent Todo"), this, 669 mItemPopupMenu->insertItem(i18n("Reparent Todo"), this,
670 SLOT (reparentTodo()),0,22); 670 SLOT (reparentTodo()),0,22);
671 mItemPopupMenu->insertSeparator(); 671 mItemPopupMenu->insertSeparator();
672#if 0 672#if 0
673 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed..."), 673 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed..."),
674 this, SLOT( purgeCompleted() ) ); 674 this, SLOT( purgeCompleted() ) );
675 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"), 675 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"),
676 this, SLOT( toggleCompleted() ),0, 33 ); 676 this, SLOT( toggleCompleted() ),0, 33 );
677 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 677 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
678 this, SLOT( toggleQuickTodo() ),0, 34 ); 678 this, SLOT( toggleQuickTodo() ),0, 34 );
679 mItemPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"), 679 mItemPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"),
680 this, SLOT( toggleRunning() ),0, 35 ); 680 this, SLOT( toggleRunning() ),0, 35 );
681 681
682#endif 682#endif
683 mPopupMenu = new QPopupMenu(this); 683 mPopupMenu = new QPopupMenu(this);
684 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this, 684 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this,
685 SLOT (newTodo()),0,1); 685 SLOT (newTodo()),0,1);
686 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed..."), 686 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed..."),
687 this, SLOT(purgeCompleted()),0,2); 687 this, SLOT(purgeCompleted()),0,2);
688 mPopupMenu->insertItem(i18n("Show Completed"), 688 mPopupMenu->insertItem(i18n("Show Completed"),
689 this, SLOT( toggleCompleted() ),0,3 ); 689 this, SLOT( toggleCompleted() ),0,3 );
690 mPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"), 690 mPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"),
691 this, SLOT( toggleRunning() ),0,5 ); 691 this, SLOT( toggleRunning() ),0,5 );
692 mPopupMenu->insertItem(i18n(" set all open","Display all opened"), 692 mPopupMenu->insertItem(i18n(" set all open","Display all opened"),
693 this, SLOT( setAllOpen() ),0,6 ); 693 this, SLOT( setAllOpen() ),0,6 );
694 mPopupMenu->insertItem(i18n(" set all close","Display all closed"), 694 mPopupMenu->insertItem(i18n(" set all close","Display all closed"),
695 this, SLOT( setAllClose() ),0,7 ); 695 this, SLOT( setAllClose() ),0,7 );
696 mPopupMenu->insertItem(i18n(" set all flat","Display all flat"), 696 mPopupMenu->insertItem(i18n(" set all flat","Display all flat"),
697 this, SLOT( setAllFlat() ),0,8 ); 697 this, SLOT( setAllFlat() ),0,8 );
698 mPopupMenu->insertSeparator(); 698 mPopupMenu->insertSeparator();
699 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 699 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
700 this, SLOT( toggleQuickTodo() ),0,4 ); 700 this, SLOT( toggleQuickTodo() ),0,4 );
701 mDocPrefs = new DocPrefs( name ); 701 mDocPrefs = new DocPrefs( name );
702 702
703 mItemPopupMenu->insertItem(i18n("Todo View"),mPopupMenu ); 703 mItemPopupMenu->insertItem(i18n("Todo View"),mPopupMenu );
704 mPopupMenu->setCheckable( true ); 704 mPopupMenu->setCheckable( true );
705 mItemPopupMenu->setCheckable( true ); 705 mItemPopupMenu->setCheckable( true );
706 706
707 707
708 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo ); 708 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo );
709 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo ); 709 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo );
710 710
711 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo); 711 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo);
712 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo ); 712 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo );
713 713
714 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos); 714 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos);
715 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos ); 715 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos );
716 716
717 717
718 // Double clicking conflicts with opening/closing the subtree 718 // Double clicking conflicts with opening/closing the subtree
719 connect( mTodoListView, SIGNAL( doubleClicked( QListViewItem *) ), 719 connect( mTodoListView, SIGNAL( doubleClicked( QListViewItem *) ),
720 SLOT( editItem( QListViewItem *) ) ); 720 SLOT( editItem( QListViewItem *) ) );
721 /* 721 /*
722 connect( mTodoListView, SIGNAL( rightButtonClicked ( QListViewItem *, 722 connect( mTodoListView, SIGNAL( rightButtonClicked ( QListViewItem *,
723 const QPoint &,int ) ), 723 const QPoint &,int ) ),
724 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) ); 724 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) );
725 */ 725 */
726 connect( mTodoListView, SIGNAL( contextRequest ( QListViewItem *, 726 connect( mTodoListView, SIGNAL( contextRequest ( QListViewItem *,
727 const QPoint &,int ) ), 727 const QPoint &,int ) ),
728 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) ); 728 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) );
729 connect( mTodoListView, SIGNAL( clicked( QListViewItem * ) ), 729 connect( mTodoListView, SIGNAL( clicked( QListViewItem * ) ),
730 SLOT( itemClicked( QListViewItem * ) ) ); 730 SLOT( itemClicked( QListViewItem * ) ) );
731 connect( mTodoListView, SIGNAL( double_Clicked( QListViewItem * ) ), 731 connect( mTodoListView, SIGNAL( double_Clicked( QListViewItem * ) ),
732 SLOT( itemDoubleClicked( QListViewItem * ) ) ); 732 SLOT( itemDoubleClicked( QListViewItem * ) ) );
733 connect( mTodoListView, SIGNAL( todoDropped( Todo *, int ) ), 733 connect( mTodoListView, SIGNAL( todoDropped( Todo *, int ) ),
734 SLOT( updateView() ) ); 734 SLOT( updateView() ) );
735 connect( mTodoListView, SIGNAL( todoDropped( Todo *, int ) ), 735 connect( mTodoListView, SIGNAL( todoDropped( Todo *, int ) ),
736 SLOT( todoModified(Todo *, int) ) ); 736 SLOT( todoModified(Todo *, int) ) );
737 connect( mTodoListView, SIGNAL( expanded( QListViewItem * ) ), 737 connect( mTodoListView, SIGNAL( expanded( QListViewItem * ) ),
738 SLOT( itemStateChanged( QListViewItem * ) ) ); 738 SLOT( itemStateChanged( QListViewItem * ) ) );
739 connect( mTodoListView, SIGNAL( collapsed( QListViewItem * ) ), 739 connect( mTodoListView, SIGNAL( collapsed( QListViewItem * ) ),
740 SLOT( itemStateChanged( QListViewItem * ) ) ); 740 SLOT( itemStateChanged( QListViewItem * ) ) );
741 connect( mTodoListView, SIGNAL( paintNeeded() ), 741 connect( mTodoListView, SIGNAL( paintNeeded() ),
742 SLOT( paintNeeded()) ); 742 SLOT( paintNeeded()) );
743 743
744#if 0 744#if 0
745 connect(mTodoListView,SIGNAL(selectionChanged(QListViewItem *)), 745 connect(mTodoListView,SIGNAL(selectionChanged(QListViewItem *)),
746 SLOT(selectionChanged(QListViewItem *))); 746 SLOT(selectionChanged(QListViewItem *)));
747 connect(mTodoListView,SIGNAL(clicked(QListViewItem *)), 747 connect(mTodoListView,SIGNAL(clicked(QListViewItem *)),
748 SLOT(selectionChanged(QListViewItem *))); 748 SLOT(selectionChanged(QListViewItem *)));
749 connect(mTodoListView,SIGNAL(pressed(QListViewItem *)), 749 connect(mTodoListView,SIGNAL(pressed(QListViewItem *)),
750 SLOT(selectionChanged(QListViewItem *))); 750 SLOT(selectionChanged(QListViewItem *)));
751#endif 751#endif
752 752
753 connect( mTodoListView, SIGNAL(reparentTodoSignal( Todo *,Todo * ) ), SIGNAL(reparentTodoSignal( Todo *,Todo * ) )); 753 connect( mTodoListView, SIGNAL(reparentTodoSignal( Todo *,Todo * ) ), SIGNAL(reparentTodoSignal( Todo *,Todo * ) ));
754 connect( mTodoListView, SIGNAL(unparentTodoSignal(Todo *) ), SIGNAL(unparentTodoSignal(Todo *) )); 754 connect( mTodoListView, SIGNAL(unparentTodoSignal(Todo *) ), SIGNAL(unparentTodoSignal(Todo *) ));
755 connect( mTodoListView, SIGNAL( deleteTodo(Todo *) ), SIGNAL(deleteTodoSignal(Todo *) )); 755 connect( mTodoListView, SIGNAL( deleteTodo(Todo *) ), SIGNAL(deleteTodoSignal(Todo *) ));
756 756
757 connect( mTodoListView, SIGNAL(selectionChanged() ), 757 connect( mTodoListView, SIGNAL(selectionChanged() ),
758 SLOT( processSelectionChange() ) ); 758 SLOT( processSelectionChange() ) );
759 connect( mQuickAdd, SIGNAL( returnPressed () ), 759 connect( mQuickAdd, SIGNAL( returnPressed () ),
760 SLOT( addQuickTodo() ) ); 760 SLOT( addQuickTodo() ) );
761 761
762} 762}
763 763
764KOTodoView::~KOTodoView() 764KOTodoView::~KOTodoView()
765{ 765{
766 766
767#if QT_VERSION >= 0x030000 767#if QT_VERSION >= 0x030000
768 768
769#else 769#else
770 delete mKOTodoViewWhatsThis; 770 delete mKOTodoViewWhatsThis;
771#endif 771#endif
772 772
773 delete mDocPrefs; 773 delete mDocPrefs;
774} 774}
775QString KOTodoView::getWhatsThisText(QPoint p) 775QString KOTodoView::getWhatsThisText(QPoint p)
776{ 776{
777 KOTodoViewItem* item = ( KOTodoViewItem* ) mTodoListView->itemAt( p ); 777 KOTodoViewItem* item = ( KOTodoViewItem* ) mTodoListView->itemAt( p );
778 if ( item ) 778 if ( item )
779 return KIncidenceFormatter::instance()->getFormattedText( item->todo(), 779 return KIncidenceFormatter::instance()->getFormattedText( item->todo(),
780 KOPrefs::instance()->mWTshowDetails, 780 KOPrefs::instance()->mWTshowDetails,
781 KOPrefs::instance()->mWTshowCreated, 781 KOPrefs::instance()->mWTshowCreated,
782 KOPrefs::instance()->mWTshowChanged); 782 KOPrefs::instance()->mWTshowChanged);
783 return i18n("That is the todo view" ); 783 return i18n("That is the todo view" );
784 784
785} 785}
786 786
787void KOTodoView::jumpToDate () 787void KOTodoView::jumpToDate ()
788{ 788{
789 // if (mActiveItem) { 789 // if (mActiveItem) {
790// mActiveItem->todo()); 790// mActiveItem->todo());
791// if ( mActiveItem->todo()->hasDueDate() ) 791// if ( mActiveItem->todo()->hasDueDate() )
792// emit mActiveItem->todo()jumpToTime( mTodo->dtDue().date() ); 792// emit mActiveItem->todo()jumpToTime( mTodo->dtDue().date() );
793} 793}
794void KOTodoView::paintNeeded() 794void KOTodoView::paintNeeded()
795{ 795{
796 if ( mPendingUpdateBeforeRepaint ) { 796 if ( mPendingUpdateBeforeRepaint ) {
797 updateView(); 797 updateView();
798 mPendingUpdateBeforeRepaint = false; 798 mPendingUpdateBeforeRepaint = false;
799 } 799 }
800} 800}
801void KOTodoView::paintEvent(QPaintEvent * pevent) 801void KOTodoView::paintEvent(QPaintEvent * pevent)
802{ 802{
803 if ( mPendingUpdateBeforeRepaint ) { 803 if ( mPendingUpdateBeforeRepaint ) {
804 updateView(); 804 updateView();
805 mPendingUpdateBeforeRepaint = false; 805 mPendingUpdateBeforeRepaint = false;
806 } 806 }
807 KOrg::BaseView::paintEvent( pevent); 807 KOrg::BaseView::paintEvent( pevent);
808} 808}
809 809
810void KOTodoView::updateView() 810void KOTodoView::updateView()
811{ 811{
812 pendingSubtodo = 0; 812 pendingSubtodo = 0;
813 if ( mBlockUpdate ) { 813 if ( mBlockUpdate ) {
814 return; 814 return;
815 } 815 }
816 if ( !isVisible() ) { 816 if ( !isVisible() ) {
817 mPendingUpdateBeforeRepaint = true; 817 mPendingUpdateBeforeRepaint = true;
818 return; 818 return;
819 } 819 }
820 //qDebug("KOTodoView::updateView() %x", this); 820 //qDebug("KOTodoView::updateView() %x", this);
821 if ( isFlatDisplay ) { 821 if ( isFlatDisplay ) {
822 displayAllFlat(); 822 displayAllFlat();
823 return; 823 return;
824 } 824 }
825 storeCurrentItem(); 825 storeCurrentItem();
826 //qDebug("update "); 826 //qDebug("update ");
827// kdDebug() << "KOTodoView::updateView()" << endl; 827// kdDebug() << "KOTodoView::updateView()" << endl;
828 QFont fo = KOPrefs::instance()->mTodoViewFont; 828 QFont fo = KOPrefs::instance()->mTodoViewFont;
829 829
830 830
831 mTodoListView->clear(); 831 mTodoListView->clear();
832 if ( mName == "todolistsmall" ) { 832 if ( mName == "todolistsmall" ) {
833 if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) { 833 if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) {
834 int ps = fo.pointSize() -2; 834 int ps = fo.pointSize() -2;
835 if ( ps > 12 ) 835 if ( ps > 12 )
836 ps -= 2; 836 ps -= 2;
837 fo.setPointSize( ps ); 837 fo.setPointSize( ps );
838 } 838 }
839 } 839 }
840 840
841 mTodoListView->setFont( fo ); 841 mTodoListView->setFont( fo );
842 // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont ); 842 // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont );
843 //mTodoListView->header()->setMaximumHeight(fm.height()); 843 //mTodoListView->header()->setMaximumHeight(fm.height());
844 QPtrList<Todo> todoList = calendar()->todos(); 844 QPtrList<Todo> todoList = calendar()->todos();
845 845
846/* 846/*
847 kdDebug() << "KOTodoView::updateView(): Todo List:" << endl; 847 kdDebug() << "KOTodoView::updateView(): Todo List:" << endl;
848 Event *t; 848 Event *t;
849 for(t = todoList.first(); t; t = todoList.next()) { 849 for(t = todoList.first(); t; t = todoList.next()) {
850 kdDebug() << " " << t->getSummary() << endl; 850 kdDebug() << " " << t->getSummary() << endl;
851 851
852 if (t->getRelatedTo()) { 852 if (t->getRelatedTo()) {
853 kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl; 853 kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl;
854 } 854 }
855 855
856 QPtrList<Event> l = t->getRelations(); 856 QPtrList<Event> l = t->getRelations();
857 Event *c; 857 Event *c;
858 for(c=l.first();c;c=l.next()) { 858 for(c=l.first();c;c=l.next()) {
859 kdDebug() << " - relation: " << c->getSummary() << endl; 859 kdDebug() << " - relation: " << c->getSummary() << endl;
860 } 860 }
861 } 861 }
862*/ 862*/
863 863
864 // Put for each Event a KOTodoViewItem in the list view. Don't rely on a 864 // Put for each Event a KOTodoViewItem in the list view. Don't rely on a
865 // specific order of events. That means that we have to generate parent items 865 // specific order of events. That means that we have to generate parent items
866 // recursively for proper hierarchical display of Todos. 866 // recursively for proper hierarchical display of Todos.
867 mTodoMap.clear(); 867 mTodoMap.clear();
868 Todo *todo; 868 Todo *todo;
869 todo = todoList.first();// todo; todo = todoList.next()) { 869 todo = todoList.first();// todo; todo = todoList.next()) {
870 while ( todo ) { 870 while ( todo ) {
871 bool next = true; 871 bool next = true;
872 // qDebug("todo %s ", todo->summary().latin1()); 872 // qDebug("todo %s ", todo->summary().latin1());
873 Incidence *incidence = todo->relatedTo(); 873 Incidence *incidence = todo->relatedTo();
874 while ( incidence ) { 874 while ( incidence ) {
875 if ( incidence->typeID() == todoID ) { 875 if ( incidence->typeID() == todoID ) {
876 //qDebug("related %s ",incidence->summary().latin1() ); 876 //qDebug("related %s ",incidence->summary().latin1() );
877 if ( !(todoList.contains ( ((Todo* )incidence ) ) ) && incidence->calEnabled() ) { 877 if ( !(todoList.contains ( ((Todo* )incidence ) ) ) && incidence->calEnabled() ) {
878 //qDebug("related not found "); 878 //qDebug("related not found ");
879 todoList.remove( ); 879 todoList.remove( );
880 todo = todoList.current(); 880 todo = todoList.current();
881 next = false; 881 next = false;
882 incidence = 0; 882 incidence = 0;
883 883
884 } else { 884 } else {
885 //qDebug("related found "); 885 //qDebug("related found ");
886 incidence = incidence->relatedTo(); 886 incidence = incidence->relatedTo();
887 } 887 }
888 } else 888 } else
889 incidence = 0; 889 incidence = 0;
890 } 890 }
891 if ( next ) 891 if ( next )
892 todo = todoList.next(); 892 todo = todoList.next();
893 } 893 }
894 894
895 for(todo = todoList.first(); todo; todo = todoList.next()) { 895 for(todo = todoList.first(); todo; todo = todoList.next()) {
896 if (!mTodoMap.contains(todo) && checkTodo( todo ) ) 896 if (!mTodoMap.contains(todo) && checkTodo( todo ) )
897 { 897 {
898 insertTodoItem(todo); 898 insertTodoItem(todo);
899 } 899 }
900 } 900 }
901 // Restore opened/closed state 901 // Restore opened/closed state
902 mTodoListView->blockSignals( true ); 902 mTodoListView->blockSignals( true );
903 if( mDocPrefs ) restoreItemState( mTodoListView->firstChild() ); 903 if( mDocPrefs ) restoreItemState( mTodoListView->firstChild() );
904 mTodoListView->blockSignals( false ); 904 mTodoListView->blockSignals( false );
905 resetCurrentItem(); 905 resetCurrentItem();
906} 906}
907 907
908void KOTodoView::storeCurrentItem() 908void KOTodoView::storeCurrentItem()
909{ 909{
910 mCurItem = 0; 910 mCurItem = 0;
911 mCurItemRootParent = 0; 911 mCurItemRootParent = 0;
912 mCurItemParent = 0; 912 mCurItemParent = 0;
913 mCurItemAbove = 0; 913 mCurItemAbove = 0;
914 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 914 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
915 if (mActiveItem) { 915 if (mActiveItem) {
916 mCurItem = mActiveItem->todo(); 916 mCurItem = mActiveItem->todo();
917 KOTodoViewItem* activeItemAbove = (KOTodoViewItem*)mActiveItem->itemAbove (); 917 KOTodoViewItem* activeItemAbove = (KOTodoViewItem*)mActiveItem->itemAbove ();
918 if ( activeItemAbove ) 918 if ( activeItemAbove )
919 mCurItemAbove = activeItemAbove->todo(); 919 mCurItemAbove = activeItemAbove->todo();
920 mCurItemRootParent = mCurItem; 920 mCurItemRootParent = mCurItem;
921 mCurItemParent = mCurItemRootParent->relatedTo(); 921 mCurItemParent = mCurItemRootParent->relatedTo();
922 while ( mCurItemRootParent->relatedTo() != 0 ) 922 while ( mCurItemRootParent->relatedTo() != 0 )
923 mCurItemRootParent = mCurItemRootParent->relatedTo(); 923 mCurItemRootParent = mCurItemRootParent->relatedTo();
924 } 924 }
925 mActiveItem = 0; 925 mActiveItem = 0;
926} 926}
927 927
928void KOTodoView::resetCurrentItem() 928void KOTodoView::resetCurrentItem()
929{ 929{
930 //mTodoListView->setFocus(); 930 //mTodoListView->setFocus();
931 KOTodoViewItem* foundItem = 0; 931 KOTodoViewItem* foundItem = 0;
932 KOTodoViewItem* foundItemRoot = 0; 932 KOTodoViewItem* foundItemRoot = 0;
933 KOTodoViewItem* foundItemParent = 0; 933 KOTodoViewItem* foundItemParent = 0;
934 KOTodoViewItem* foundItemAbove = 0; 934 KOTodoViewItem* foundItemAbove = 0;
935 if ( mTodoListView->firstChild () ) { 935 if ( mTodoListView->firstChild () ) {
936 if ( mCurItem ) { 936 if ( mCurItem ) {
937 KOTodoViewItem* item = (KOTodoViewItem*)mTodoListView->firstChild (); 937 KOTodoViewItem* item = (KOTodoViewItem*)mTodoListView->firstChild ();
938 while ( item ) { 938 while ( item ) {
939 if ( item->todo() == mCurItem ) { 939 if ( item->todo() == mCurItem ) {
940 foundItem = item; 940 foundItem = item;
941 break; 941 break;
942 } else if ( item->todo() == mCurItemAbove ) { 942 } else if ( item->todo() == mCurItemAbove ) {
943 foundItemAbove = item; 943 foundItemAbove = item;
944 944
945 } 945 }
946 if ( item->todo() == mCurItemRootParent ) { 946 if ( item->todo() == mCurItemRootParent ) {
947 foundItemRoot = item; 947 foundItemRoot = item;
948 } 948 }
949 if ( item->todo() == mCurItemParent ) { 949 if ( item->todo() == mCurItemParent ) {
950 foundItemParent = item; 950 foundItemParent = item;
951 } 951 }
952 item = (KOTodoViewItem*)item->itemBelow(); 952 item = (KOTodoViewItem*)item->itemBelow();
953 } 953 }
954 if ( ! foundItem ) { 954 if ( ! foundItem ) {
955 if ( foundItemParent ) { 955 if ( foundItemParent ) {
956 foundItem = foundItemParent; 956 foundItem = foundItemParent;
957 } else { 957 } else {
958 if ( foundItemRoot ) 958 if ( foundItemRoot )
959 foundItem = foundItemRoot; 959 foundItem = foundItemRoot;
960 else 960 else
961 foundItem = foundItemAbove; 961 foundItem = foundItemAbove;
962 } 962 }
963 } 963 }
964 } 964 }
965 if ( foundItem ) { 965 if ( foundItem ) {
966 mTodoListView->setSelected ( foundItem, true ); 966 mTodoListView->setSelected ( foundItem, true );
967 mTodoListView->setCurrentItem( foundItem ); 967 mTodoListView->setCurrentItem( foundItem );
968 mTodoListView->ensureItemVisible( foundItem ); 968 mTodoListView->ensureItemVisible( foundItem );
969 } else { 969 } else {
970 if ( mTodoListView->firstChild () ) { 970 if ( mTodoListView->firstChild () ) {
971 mTodoListView->setSelected ( mTodoListView->firstChild (), true ); 971 mTodoListView->setSelected ( mTodoListView->firstChild (), true );
972 mTodoListView->setCurrentItem( mTodoListView->firstChild () ); 972 mTodoListView->setCurrentItem( mTodoListView->firstChild () );
973 } 973 }
974 } 974 }
975 } 975 }
976 processSelectionChange(); 976 processSelectionChange();
977 QTimer::singleShot( 100, this, SLOT ( resetFocusToList() )); 977 QTimer::singleShot( 100, this, SLOT ( resetFocusToList() ));
978} 978}
979void KOTodoView::resetFocusToList() 979void KOTodoView::resetFocusToList()
980{ 980{
981 topLevelWidget()->setActiveWindow(); 981 topLevelWidget()->setActiveWindow();
982 mTodoListView->setFocus(); 982 mTodoListView->setFocus();
983} 983}
984//Incidence * mCurItem, *mCurItemRootParent,*mCurItemAbove; 984//Incidence * mCurItem, *mCurItemRootParent,*mCurItemAbove;
985bool KOTodoView::checkTodo( Todo * todo ) 985bool KOTodoView::checkTodo( Todo * todo )
986{ 986{
987 987
988 if ( !KOPrefs::instance()->mShowCompletedTodo && todo->isCompleted() ) 988 if ( !KOPrefs::instance()->mShowCompletedTodo && todo->isCompleted() )
989 return false; 989 return false;
990 if ( !todo->isCompleted() ) { 990 if ( !todo->isCompleted() ) {
991 if ( todo->hasDueDate() && todo->dtDue().date() <= QDate::currentDate() ) 991 if ( todo->hasDueDate() && todo->dtDue().date() <= QDate::currentDate() )
992 return true; 992 return true;
993 } 993 }
994 if ( KOPrefs::instance()->mHideNonStartedTodos && mNavigator ) { 994 if ( KOPrefs::instance()->mHideNonStartedTodos && mNavigator ) {
995 if ( todo->hasStartDate() ) 995 if ( todo->hasStartDate() )
996 if ( mNavigator->selectedDates().last() < todo->dtStart().date() ) 996 if ( mNavigator->selectedDates().last() < todo->dtStart().date() )
997 return false; 997 return false;
998 if ( todo->hasDueDate() ) 998 if ( todo->hasDueDate() )
999 if ( mNavigator->selectedDates().first() > todo->dtDue().date() ) 999 if ( mNavigator->selectedDates().first() > todo->dtDue().date() )
1000 return false; 1000 return false;
1001 } 1001 }
1002 return true; 1002 return true;
1003} 1003}
1004 1004
1005void KOTodoView::restoreItemState( QListViewItem *item ) 1005void KOTodoView::restoreItemState( QListViewItem *item )
1006{ 1006{
1007 pendingSubtodo = 0; 1007 pendingSubtodo = 0;
1008 while( item ) { 1008 while( item ) {
1009 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 1009 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
1010 todoItem->setOpen( mDocPrefs->readBoolEntry( todoItem->todo()->uid() ) ); 1010 todoItem->setOpen( mDocPrefs->readBoolEntry( todoItem->todo()->uid() ) );
1011 if( item->childCount() > 0 ) restoreItemState( item->firstChild() ); 1011 if( item->childCount() > 0 ) restoreItemState( item->firstChild() );
1012 item = item->nextSibling(); 1012 item = item->nextSibling();
1013 } 1013 }
1014} 1014}
1015 1015
1016 1016
1017QMap<Todo *,KOTodoViewItem *>::ConstIterator 1017QMap<Todo *,KOTodoViewItem *>::ConstIterator
1018KOTodoView::insertTodoItem(Todo *todo) 1018KOTodoView::insertTodoItem(Todo *todo)
1019{ 1019{
1020 1020
1021 // kdDebug() << "KOTodoView::insertTodoItem(): " << todo->getSummary() << endl; 1021 // kdDebug() << "KOTodoView::insertTodoItem(): " << todo->getSummary() << endl;
1022 // TODO: Check, if dynmaic cast is necessary 1022 // TODO: Check, if dynmaic cast is necessary
1023 1023
1024 pendingSubtodo = 0; 1024 pendingSubtodo = 0;
1025 Incidence *incidence = todo->relatedTo(); 1025 Incidence *incidence = todo->relatedTo();
1026 while ( incidence && !incidence->calEnabled() ) 1026 while ( incidence && !incidence->calEnabled() )
1027 incidence = incidence->relatedTo(); 1027 incidence = incidence->relatedTo();
1028 if (incidence && incidence->typeID() == todoID ) { 1028 if (incidence && incidence->typeID() == todoID ) {
1029 Todo *relatedTodo = static_cast<Todo *>(incidence); 1029 Todo *relatedTodo = static_cast<Todo *>(incidence);
1030 1030
1031 // kdDebug() << " has Related" << endl; 1031 // kdDebug() << " has Related" << endl;
1032 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator; 1032 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator;
1033 itemIterator = mTodoMap.find(relatedTodo); 1033 itemIterator = mTodoMap.find(relatedTodo);
1034 if (itemIterator == mTodoMap.end()) { 1034 if (itemIterator == mTodoMap.end()) {
1035 // kdDebug() << " related not yet in list" << endl; 1035 // kdDebug() << " related not yet in list" << endl;
1036 itemIterator = insertTodoItem (relatedTodo); 1036 itemIterator = insertTodoItem (relatedTodo);
1037 } 1037 }
1038 // isn't this pretty stupid? We give one Todo to the KOTodoViewItem 1038 // isn't this pretty stupid? We give one Todo to the KOTodoViewItem
1039 // and one into the map. Sure finding is more easy but why? -zecke 1039 // and one into the map. Sure finding is more easy but why? -zecke
1040 KOTodoViewItem *todoItem = new KOTodoViewItem(*itemIterator,todo,this); 1040 KOTodoViewItem *todoItem = new KOTodoViewItem(*itemIterator,todo,this);
1041 return mTodoMap.insert(todo,todoItem); 1041 return mTodoMap.insert(todo,todoItem);
1042 } else { 1042 } else {
1043 // kdDebug() << " no Related" << endl; 1043 // kdDebug() << " no Related" << endl;
1044 // see above -zecke 1044 // see above -zecke
1045 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this); 1045 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this);
1046 return mTodoMap.insert(todo,todoItem); 1046 return mTodoMap.insert(todo,todoItem);
1047 } 1047 }
1048} 1048}
1049 1049
1050 1050
1051void KOTodoView::updateConfig() 1051void KOTodoView::updateConfig()
1052{ 1052{
1053 updateView(); 1053 updateView();
1054 mTodoListView->repaintContents(); 1054 mTodoListView->repaintContents();
1055} 1055}
1056 1056
1057QPtrList<Incidence> KOTodoView::selectedIncidences() 1057QPtrList<Incidence> KOTodoView::selectedIncidences()
1058{ 1058{
1059 QPtrList<Incidence> selected; 1059 QPtrList<Incidence> selected;
1060 1060
1061 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); 1061 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem());
1062// if (!item) item = mActiveItem; 1062// if (!item) item = mActiveItem;
1063 if (item) selected.append(item->todo()); 1063 if (item) selected.append(item->todo());
1064 1064
1065 return selected; 1065 return selected;
1066} 1066}