summaryrefslogtreecommitdiffabout
path: root/korganizer/kolistview.cpp
Unidiff
Diffstat (limited to 'korganizer/kolistview.cpp') (more/less context) (show whitespace changes)
-rw-r--r--korganizer/kolistview.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/korganizer/kolistview.cpp b/korganizer/kolistview.cpp
index 9a3ba73..bafd349 100644
--- a/korganizer/kolistview.cpp
+++ b/korganizer/kolistview.cpp
@@ -1,82 +1,83 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 1999 Preston Brown 3 Copyright (c) 1999 Preston Brown
4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24 24
25#include <qlistview.h> 25#include <qlistview.h>
26#include <qlayout.h> 26#include <qlayout.h>
27#include <qlabel.h> 27#include <qlabel.h>
28#include <qpopupmenu.h> 28#include <qpopupmenu.h>
29#include <qprogressbar.h> 29#include <qprogressbar.h>
30#include <qfileinfo.h> 30#include <qfileinfo.h>
31#include <qmessagebox.h> 31#include <qmessagebox.h>
32#include <qdialog.h> 32#include <qdialog.h>
33#include <qtextstream.h> 33#include <qtextstream.h>
34#include <qdir.h> 34#include <qdir.h>
35#include <qregexp.h>
35 36
36#include <klocale.h> 37#include <klocale.h>
37#include <kdebug.h> 38#include <kdebug.h>
38#include <kiconloader.h> 39#include <kiconloader.h>
39#include <kglobal.h> 40#include <kglobal.h>
40 41
41#include <libkcal/calendar.h> 42#include <libkcal/calendar.h>
42#include <libkcal/calendarlocal.h> 43#include <libkcal/calendarlocal.h>
43#include <libkcal/icalformat.h> 44#include <libkcal/icalformat.h>
44#include <libkcal/vcalformat.h> 45#include <libkcal/vcalformat.h>
45#include <libkcal/recurrence.h> 46#include <libkcal/recurrence.h>
46#include <libkcal/filestorage.h> 47#include <libkcal/filestorage.h>
47#include <libkdepim/categoryselectdialog.h> 48#include <libkdepim/categoryselectdialog.h>
48#ifndef DESKTOP_VERSION 49#ifndef DESKTOP_VERSION
49#include <qpe/qpeapplication.h> 50#include <qpe/qpeapplication.h>
50#else 51#else
51#include <qapplication.h> 52#include <qapplication.h>
52#endif 53#endif
53 54
54#ifndef KORG_NOPRINTER 55#ifndef KORG_NOPRINTER
55#include "calprinter.h" 56#include "calprinter.h"
56#endif 57#endif
57#include "koglobals.h" 58#include "koglobals.h"
58#include "koprefs.h" 59#include "koprefs.h"
59#include "kfiledialog.h" 60#include "kfiledialog.h"
60 61
61#include "kolistview.h" 62#include "kolistview.h"
62 63
63ListItemVisitor::ListItemVisitor(KOListViewItem *item, QDate date ) 64ListItemVisitor::ListItemVisitor(KOListViewItem *item, QDate date )
64{ 65{
65 mItem = item; 66 mItem = item;
66 mDate = date; 67 mDate = date;
67} 68}
68 69
69ListItemVisitor::~ListItemVisitor() 70ListItemVisitor::~ListItemVisitor()
70{ 71{
71} 72}
72 73
73bool ListItemVisitor::visit(Event *e) 74bool ListItemVisitor::visit(Event *e)
74{ 75{
75 76
76 bool ok = false; 77 bool ok = false;
77 QString start, end; 78 QString start, end;
78 if ( e->doesRecur() ) { 79 if ( e->doesRecur() ) {
79 QDate d = e->getNextOccurence( QDateTime( mDate, QTime(0,0,0)), &ok ).date(); 80 QDate d = e->getNextOccurence( QDateTime( mDate, QTime(0,0,0)), &ok ).date();
80 if ( ok ) { 81 if ( ok ) {
81 int days = e->dtStart().date().daysTo(e->dtEnd().date() ); 82 int days = e->dtStart().date().daysTo(e->dtEnd().date() );
82 start = KGlobal::locale()->formatDate(d,true); 83 start = KGlobal::locale()->formatDate(d,true);
@@ -120,106 +121,111 @@ bool ListItemVisitor::visit(Todo *t)
120 if (t->hasStartDate()) { 121 if (t->hasStartDate()) {
121 mItem->setText(1,t->dtStartDateStr()); 122 mItem->setText(1,t->dtStartDateStr());
122 if (t->doesFloat()) { 123 if (t->doesFloat()) {
123 mItem->setText(2,"---"); 124 mItem->setText(2,"---");
124 } else { 125 } else {
125 mItem->setText(2,t->dtStartTimeStr()); 126 mItem->setText(2,t->dtStartTimeStr());
126 } 127 }
127 } else { 128 } else {
128 mItem->setText(1,"---"); 129 mItem->setText(1,"---");
129 mItem->setText(2,"---"); 130 mItem->setText(2,"---");
130 } 131 }
131 mItem->setText(3,"---"); 132 mItem->setText(3,"---");
132 mItem->setText(4,"---"); 133 mItem->setText(4,"---");
133 mItem->setText(5,"---"); 134 mItem->setText(5,"---");
134 mItem->setText(6,"---"); 135 mItem->setText(6,"---");
135 if (t->hasDueDate()) { 136 if (t->hasDueDate()) {
136 mItem->setText(7,t->dtDueDateStr()); 137 mItem->setText(7,t->dtDueDateStr());
137 if (t->doesFloat()) { 138 if (t->doesFloat()) {
138 mItem->setText(8,"---"); 139 mItem->setText(8,"---");
139 } else { 140 } else {
140 mItem->setText(8,t->dtDueTimeStr()); 141 mItem->setText(8,t->dtDueTimeStr());
141 } 142 }
142 } else { 143 } else {
143 mItem->setText(7,"---"); 144 mItem->setText(7,"---");
144 mItem->setText(8,"---"); 145 mItem->setText(8,"---");
145 } 146 }
146 mItem->setText(9, t->cancelled() ? i18n("Yes") : i18n("No")); 147 mItem->setText(9, t->cancelled() ? i18n("Yes") : i18n("No"));
147 mItem->setText(10,t->categoriesStr()); 148 mItem->setText(10,t->categoriesStr());
148 149
149 QString key; 150 QString key;
150 QDate d; 151 QDate d;
151 if (t->hasDueDate()) { 152 if (t->hasDueDate()) {
152 d = t->dtDue().date(); 153 d = t->dtDue().date();
153 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtDue().time(); 154 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtDue().time();
154 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute()); 155 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute());
155 mItem->setSortKey(7,key); 156 mItem->setSortKey(7,key);
156 } 157 }
157 if ( t->hasStartDate() ) { 158 if ( t->hasStartDate() ) {
158 d = t->dtStart().date(); 159 d = t->dtStart().date();
159 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtStart().time(); 160 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtStart().time();
160 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute()); 161 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute());
161 mItem->setSortKey(1,key); 162 mItem->setSortKey(1,key);
162 } 163 }
163 return true; 164 return true;
164} 165}
165 166
166bool ListItemVisitor::visit(Journal * j) 167bool ListItemVisitor::visit(Journal * j)
167{ 168{
168 mItem->setText(0,i18n("Journal")); 169 QString des = j->description().left(50);
170 des = des.simplifyWhiteSpace ();
171 des.replace (QRegExp ("\\n"),"" );
172 des.replace (QRegExp ("\\r"),"" );
173 mItem->setText(0,i18n("Journal")+": "+des.left(25));
169 mItem->setText(1,j->dtStartDateStr()); 174 mItem->setText(1,j->dtStartDateStr());
170 mItem->setText(2,"---"); 175 mItem->setText(2,"---");
171 mItem->setText(3,"---"); 176 mItem->setText(3,"---");
172 mItem->setText(4,"---"); 177 mItem->setText(4,"---");
173 mItem->setText(5,"---"); 178 mItem->setText(5,"---");
174 mItem->setText(6,"---"); 179 mItem->setText(6,"---");
175 mItem->setText(7,j->dtStartDateStr()); 180 mItem->setText(7,j->dtStartDateStr());
176 mItem->setText(8,"---"); 181 mItem->setText(8,"---");
177 mItem->setText(9,"---"); 182 mItem->setText(9,"---");
183 mItem->setText(10,i18n("Last Modified: ")+ KGlobal::locale()->formatDateTime( j->lastModified() , true) );
178 184
179 QString key; 185 QString key;
180 QDate d = j->dtStart().date(); 186 QDate d = j->dtStart().date();
181 key.sprintf("%04d%02d%02d",d.year(),d.month(),d.day()); 187 key.sprintf("%04d%02d%02d",d.year(),d.month(),d.day());
182 mItem->setSortKey(1,key); 188 mItem->setSortKey(1,key);
183 mItem->setSortKey(7,key); 189 mItem->setSortKey(7,key);
184 190
185 return true; 191 return true;
186} 192}
187 193
188KOListView::KOListView(Calendar *calendar, QWidget *parent, 194KOListView::KOListView(Calendar *calendar, QWidget *parent,
189 const char *name) 195 const char *name)
190 : KOEventView(calendar, parent, name) 196 : KOEventView(calendar, parent, name)
191{ 197{
192 mActiveItem = 0; 198 mActiveItem = 0;
193 mListView = new KOListViewListView(this); 199 mListView = new KOListViewListView(this);
194 mListView->addColumn(i18n("Summary")); 200 mListView->addColumn(i18n("Summary"));
195 mListView->addColumn(i18n("Start Date")); 201 mListView->addColumn(i18n("Start Date"));
196 mListView->addColumn(i18n("Start Time")); 202 mListView->addColumn(i18n("Start Time"));
197 mListView->addColumn(i18n("End Date")); 203 mListView->addColumn(i18n("End Date"));
198 mListView->addColumn(i18n("End Time")); 204 mListView->addColumn(i18n("End Time"));
199 mListView->addColumn(i18n("Alarm")); // alarm set? 205 mListView->addColumn(i18n("Alarm")); // alarm set?
200 mListView->addColumn(i18n("Recurs")); // recurs? 206 mListView->addColumn(i18n("Recurs")); // recurs?
201 mListView->addColumn(i18n("Due Date")); 207 mListView->addColumn(i18n("Due Date"));
202 mListView->addColumn(i18n("Due Time")); 208 mListView->addColumn(i18n("Due Time"));
203 mListView->addColumn(i18n("Cancelled")); 209 mListView->addColumn(i18n("Cancelled"));
204 mListView->addColumn(i18n("Categories")); 210 mListView->addColumn(i18n("Categories"));
205 211
206 mListView->setColumnAlignment(0,AlignLeft); 212 mListView->setColumnAlignment(0,AlignLeft);
207 mListView->setColumnAlignment(1,AlignLeft); 213 mListView->setColumnAlignment(1,AlignLeft);
208 mListView->setColumnAlignment(2,AlignHCenter); 214 mListView->setColumnAlignment(2,AlignHCenter);
209 mListView->setColumnAlignment(3,AlignLeft); 215 mListView->setColumnAlignment(3,AlignLeft);
210 mListView->setColumnAlignment(4,AlignHCenter); 216 mListView->setColumnAlignment(4,AlignHCenter);
211 mListView->setColumnAlignment(5,AlignLeft); 217 mListView->setColumnAlignment(5,AlignLeft);
212 mListView->setColumnAlignment(6,AlignLeft); 218 mListView->setColumnAlignment(6,AlignLeft);
213 mListView->setColumnAlignment(7,AlignLeft); 219 mListView->setColumnAlignment(7,AlignLeft);
214 mListView->setColumnAlignment(8,AlignLeft); 220 mListView->setColumnAlignment(8,AlignLeft);
215 mListView->setColumnAlignment(9,AlignLeft); 221 mListView->setColumnAlignment(9,AlignLeft);
216 mListView->setColumnAlignment(10,AlignLeft); 222 mListView->setColumnAlignment(10,AlignLeft);
217 223
218 int iii = 0; 224 int iii = 0;
219 for ( iii = 0; iii< 10 ; ++iii ) 225 for ( iii = 0; iii< 10 ; ++iii )
220 mListView->setColumnWidthMode( iii, QListView::Manual ); 226 mListView->setColumnWidthMode( iii, QListView::Manual );
221 227
222 QBoxLayout *layoutTop = new QVBoxLayout(this); 228 QBoxLayout *layoutTop = new QVBoxLayout(this);
223 layoutTop->addWidget(mListView); 229 layoutTop->addWidget(mListView);
224 mListView->setFont ( KOPrefs::instance()->mListViewFont ); 230 mListView->setFont ( KOPrefs::instance()->mListViewFont );
225 mPopupMenu = eventPopup(); 231 mPopupMenu = eventPopup();
@@ -644,101 +650,106 @@ void KOListView::showDates(bool show)
644 } else { 650 } else {
645 mListView->setColumnWidth(1, oldColWidth1); 651 mListView->setColumnWidth(1, oldColWidth1);
646 mListView->setColumnWidth(3, oldColWidth3); 652 mListView->setColumnWidth(3, oldColWidth3);
647 } 653 }
648 mListView->repaint(); 654 mListView->repaint();
649} 655}
650 656
651void KOListView::printPreview(CalPrinter *calPrinter, const QDate &fd, 657void KOListView::printPreview(CalPrinter *calPrinter, const QDate &fd,
652 const QDate &td) 658 const QDate &td)
653{ 659{
654#ifndef KORG_NOPRINTER 660#ifndef KORG_NOPRINTER
655 calPrinter->preview(CalPrinter::Day, fd, td); 661 calPrinter->preview(CalPrinter::Day, fd, td);
656#endif 662#endif
657} 663}
658 664
659void KOListView::showDates() 665void KOListView::showDates()
660{ 666{
661 showDates(true); 667 showDates(true);
662} 668}
663 669
664void KOListView::hideDates() 670void KOListView::hideDates()
665{ 671{
666 showDates(false); 672 showDates(false);
667} 673}
668 674
669void KOListView::updateView() 675void KOListView::updateView()
670{ 676{
671 mListView->setFocus(); 677 mListView->setFocus();
672 if ( mListView->firstChild () ) 678 if ( mListView->firstChild () )
673 mListView->setCurrentItem( mListView->firstChild () ); 679 mListView->setCurrentItem( mListView->firstChild () );
674} 680}
675void KOListView::updateConfig() 681void KOListView::updateConfig()
676{ 682{
677 683
678 mListView->setFont ( KOPrefs::instance()->mListViewFont ); 684 mListView->setFont ( KOPrefs::instance()->mListViewFont );
679 updateView(); 685 updateView();
680 686
681} 687}
682void KOListView::setStartDate(const QDate &start) 688void KOListView::setStartDate(const QDate &start)
683{ 689{
684 mStartDate = start; 690 mStartDate = start;
685} 691}
686 692
687void KOListView::showDates(const QDate &start, const QDate &end) 693void KOListView::showDates(const QDate &start, const QDate &end)
688{ 694{
689 clear(); 695 clear();
690 mStartDate = start; 696 mStartDate = start;
691 QDate date = start; 697 QDate date = start;
698 QPtrList<Journal> j_list;
692 while( date <= end ) { 699 while( date <= end ) {
693 addEvents(calendar()->events(date)); 700 addEvents(calendar()->events(date));
694 addTodos(calendar()->todos(date)); 701 addTodos(calendar()->todos(date));
702 Journal* jo = calendar()->journal(date);
703 if ( jo )
704 j_list.append( jo );
695 date = date.addDays( 1 ); 705 date = date.addDays( 1 );
696 } 706 }
707 addJournals(j_list);
697 emit incidenceSelected( 0 ); 708 emit incidenceSelected( 0 );
698 updateView(); 709 updateView();
699 710
700} 711}
701 712
702void KOListView::addEvents(QPtrList<Event> eventList) 713void KOListView::addEvents(QPtrList<Event> eventList)
703{ 714{
704 Event *ev; 715 Event *ev;
705 for(ev = eventList.first(); ev; ev = eventList.next()) { 716 for(ev = eventList.first(); ev; ev = eventList.next()) {
706 addIncidence(ev); 717 addIncidence(ev);
707 } 718 }
708 if ( !mListView->currentItem() ){ 719 if ( !mListView->currentItem() ){
709 updateView(); 720 updateView();
710 } 721 }
711} 722}
712 723
713void KOListView::addTodos(QPtrList<Todo> eventList) 724void KOListView::addTodos(QPtrList<Todo> eventList)
714{ 725{
715 Todo *ev; 726 Todo *ev;
716 for(ev = eventList.first(); ev; ev = eventList.next()) { 727 for(ev = eventList.first(); ev; ev = eventList.next()) {
717 addIncidence(ev); 728 addIncidence(ev);
718 } 729 }
719 if ( !mListView->currentItem() ){ 730 if ( !mListView->currentItem() ){
720 updateView(); 731 updateView();
721 } 732 }
722} 733}
723void KOListView::addJournals(QPtrList<Journal> eventList) 734void KOListView::addJournals(QPtrList<Journal> eventList)
724{ 735{
725 Journal *ev; 736 Journal *ev;
726 for(ev = eventList.first(); ev; ev = eventList.next()) { 737 for(ev = eventList.first(); ev; ev = eventList.next()) {
727 addIncidence(ev); 738 addIncidence(ev);
728 } 739 }
729 if ( !mListView->currentItem() ){ 740 if ( !mListView->currentItem() ){
730 updateView(); 741 updateView();
731 } 742 }
732} 743}
733 744
734void KOListView::addIncidence(Incidence *incidence) 745void KOListView::addIncidence(Incidence *incidence)
735{ 746{
736 if ( mUidDict.find( incidence->uid() ) ) return; 747 if ( mUidDict.find( incidence->uid() ) ) return;
737 748
738 // mListView->setFont ( KOPrefs::instance()->mListViewFont ); 749 // mListView->setFont ( KOPrefs::instance()->mListViewFont );
739 mUidDict.insert( incidence->uid(), incidence ); 750 mUidDict.insert( incidence->uid(), incidence );
740 751
741 KOListViewItem *item = new KOListViewItem( incidence, mListView ); 752 KOListViewItem *item = new KOListViewItem( incidence, mListView );
742 ListItemVisitor v(item, mStartDate ); 753 ListItemVisitor v(item, mStartDate );
743 if (incidence->accept(v)) return; 754 if (incidence->accept(v)) return;
744 else delete item; 755 else delete item;