-rw-r--r-- | korganizer/journalentry.cpp | 53 | ||||
-rw-r--r-- | korganizer/journalentry.h | 4 | ||||
-rw-r--r-- | korganizer/kodaymatrix.cpp | 27 | ||||
-rw-r--r-- | korganizer/koeventviewer.cpp | 3 | ||||
-rw-r--r-- | korganizer/kojournalview.cpp | 22 | ||||
-rw-r--r-- | korganizer/kojournalview.h | 2 | ||||
-rw-r--r-- | korganizer/kolistview.cpp | 14 | ||||
-rw-r--r-- | korganizer/searchdialog.cpp | 37 |
8 files changed, 108 insertions, 54 deletions
diff --git a/korganizer/journalentry.cpp b/korganizer/journalentry.cpp index 0b923ad..05bfd31 100644 --- a/korganizer/journalentry.cpp +++ b/korganizer/journalentry.cpp | |||
@@ -1,292 +1,281 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KOrganizer. | 2 | This file is part of KOrganizer. |
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | 3 | Copyright (c) 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 | // | 24 | // |
25 | // Journal Entry | 25 | // Journal Entry |
26 | 26 | ||
27 | #include <qlabel.h> | 27 | #include <qlabel.h> |
28 | #include <qlayout.h> | 28 | #include <qlayout.h> |
29 | #include <qvbox.h> | 29 | #include <qvbox.h> |
30 | #include <qfile.h> | 30 | #include <qfile.h> |
31 | #include <qdir.h> | 31 | #include <qdir.h> |
32 | #include <qtextstream.h> | 32 | #include <qtextstream.h> |
33 | #include <qtextcodec.h> | 33 | #include <qtextcodec.h> |
34 | #include <qpixmap.h> | 34 | #include <qpixmap.h> |
35 | #include <qpushbutton.h> | 35 | #include <qpushbutton.h> |
36 | #include <qapplication.h> | 36 | #include <qapplication.h> |
37 | 37 | ||
38 | #include <kdebug.h> | 38 | #include <kdebug.h> |
39 | #include <kglobal.h> | 39 | #include <kglobal.h> |
40 | #include <klocale.h> | 40 | #include <klocale.h> |
41 | #include <ktextedit.h> | 41 | #include <ktextedit.h> |
42 | #include <kfiledialog.h> | 42 | #include <kfiledialog.h> |
43 | #include <kmessagebox.h> | 43 | #include <kmessagebox.h> |
44 | #include "koprefs.h" | 44 | #include "koprefs.h" |
45 | #include <klineedit.h> | ||
45 | 46 | ||
46 | #include <libkcal/journal.h> | 47 | #include <libkcal/journal.h> |
47 | #include <libkcal/calendarresources.h> | 48 | #include <libkcal/calendarresources.h> |
48 | #include <libkcal/resourcecalendar.h> | 49 | #include <libkcal/resourcecalendar.h> |
49 | #include <kresources/resourceselectdialog.h> | 50 | #include <kresources/resourceselectdialog.h> |
50 | 51 | ||
51 | #include "journalentry.h" | 52 | #include "journalentry.h" |
52 | //#include "journalentry.moc" | 53 | //#include "journalentry.moc" |
53 | #ifndef DESKTOP_VERSION | 54 | #ifndef DESKTOP_VERSION |
54 | #include <qpe/qpeapplication.h> | 55 | #include <qpe/qpeapplication.h> |
55 | #endif | 56 | #endif |
56 | JournalEntry::JournalEntry(Calendar *calendar,QWidget *parent) : | 57 | JournalEntry::JournalEntry(Calendar *calendar,QWidget *parent) : |
57 | QFrame(parent) | 58 | QFrame(parent) |
58 | { | 59 | { |
59 | heiHint = QApplication::desktop()->height() / 5 ; | 60 | heiHint = QApplication::desktop()->height() / 5 ; |
60 | showOnlyMode = false; | 61 | showOnlyMode = false; |
61 | mCalendar = calendar; | 62 | mCalendar = calendar; |
62 | mJournal = 0; | 63 | mJournal = 0; |
63 | mDirty = false; | 64 | mDirty = false; |
64 | 65 | ||
65 | QHBox * vb = new QHBox ( this ); | 66 | QHBox * vb = new QHBox ( this ); |
66 | QPushButton * newJournal = new QPushButton( vb ); | ||
67 | QIconSet icon; | 67 | QIconSet icon; |
68 | if ( QApplication::desktop()->width() < 321 ) | ||
69 | icon = SmallIcon("ko16old"); | ||
70 | else | ||
71 | icon = SmallIcon("ko24old"); | ||
72 | newJournal->setIconSet (icon ) ; | ||
73 | int size = newJournal->sizeHint().height(); | ||
74 | newJournal->setFixedSize( size, size ); | ||
75 | |||
76 | 68 | ||
77 | QPushButton * toggleJournal = new QPushButton( vb ); | 69 | QPushButton * toggleJournal = new QPushButton( vb ); |
78 | icon = SmallIcon("1updownarrow"); | 70 | icon = SmallIcon("1updownarrow"); |
79 | toggleJournal->setIconSet (icon ) ; | 71 | toggleJournal->setIconSet (icon ) ; |
80 | //int size = toggleJournal->sizeHint().height(); | 72 | int size = toggleJournal->sizeHint().height(); |
81 | toggleJournal->setFixedSize( size * 2 /3 , size ); | 73 | toggleJournal->setFixedSize( size * 2 /3 , size ); |
82 | 74 | new QLabel(i18n(" Title: "),vb); | |
83 | 75 | mTitle = new KLineEdit ( vb ); | |
84 | |||
85 | mTitleLabel = new QLabel(i18n("Title"),vb); | 76 | mTitleLabel = new QLabel(i18n("Title"),vb); |
86 | mTitleLabel->setMargin(2); | 77 | mTitleLabel->setMargin(0); |
87 | mTitleLabel->setAlignment(AlignCenter); | 78 | mTitleLabel->setAlignment(AlignCenter); |
88 | QPushButton * loadTemplate = new QPushButton( vb ); | 79 | QPushButton * loadTemplate = new QPushButton( vb ); |
89 | QPushButton * saveTemplate = new QPushButton( vb ); | 80 | QPushButton * saveTemplate = new QPushButton( vb ); |
90 | if ( QApplication::desktop()->width() < 321 ) | 81 | if ( QApplication::desktop()->width() < 321 ) |
91 | icon = SmallIcon("fileexport16"); | 82 | icon = SmallIcon("fileexport16"); |
92 | else | 83 | else |
93 | icon = SmallIcon("fileexport"); | 84 | icon = SmallIcon("fileexport"); |
94 | saveTemplate->setIconSet (icon ) ; | 85 | saveTemplate->setIconSet (icon ) ; |
95 | //size = saveTemplate->sizeHint().height(); | 86 | //size = saveTemplate->sizeHint().height(); |
96 | saveTemplate->setFixedSize( size, size ); | 87 | saveTemplate->setFixedSize( size, size ); |
97 | if ( QApplication::desktop()->width() < 321 ) | 88 | if ( QApplication::desktop()->width() < 321 ) |
98 | icon = SmallIcon("fileimport16"); | 89 | icon = SmallIcon("fileimport16"); |
99 | else | 90 | else |
100 | icon = SmallIcon("fileimport"); | 91 | icon = SmallIcon("fileimport"); |
101 | loadTemplate->setIconSet (icon ) ; | 92 | loadTemplate->setIconSet (icon ) ; |
102 | loadTemplate->setFixedSize( size, size ); | 93 | loadTemplate->setFixedSize( size, size ); |
103 | mEditor = new KTextEdit(this); | 94 | mEditor = new KTextEdit(this); |
104 | connect(mEditor,SIGNAL(textChanged()),SLOT(setDirty())); | 95 | connect(mEditor,SIGNAL(textChanged()),SLOT(setDirty())); |
105 | #ifndef DESKTOP_VERSION | 96 | #ifndef DESKTOP_VERSION |
106 | QPEApplication::setStylusOperation( mEditor, QPEApplication::RightOnHold ); | 97 | QPEApplication::setStylusOperation( mEditor, QPEApplication::RightOnHold ); |
107 | #endif | 98 | #endif |
108 | mEditor->setWordWrap( KTextEdit::WidgetWidth ); | 99 | mEditor->setWordWrap( KTextEdit::WidgetWidth ); |
109 | QBoxLayout *topLayout = new QVBoxLayout(this); | 100 | QBoxLayout *topLayout = new QVBoxLayout(this); |
110 | topLayout->addWidget(vb); | 101 | topLayout->addWidget(vb); |
111 | topLayout->addWidget(mEditor); | 102 | topLayout->addWidget(mEditor); |
112 | mEditor->installEventFilter(this); | 103 | mEditor->installEventFilter(this); |
113 | connect( saveTemplate, SIGNAL( clicked() ), this , SLOT( slotSaveTemplate() ) ); | 104 | connect( saveTemplate, SIGNAL( clicked() ), this , SLOT( slotSaveTemplate() ) ); |
105 | connect( mTitle, SIGNAL( textChanged ( const QString & ) ), this , SLOT( setDirty() ) ); | ||
114 | connect( loadTemplate, SIGNAL( clicked() ), this , SLOT( slotLoadTemplate() ) ); | 106 | connect( loadTemplate, SIGNAL( clicked() ), this , SLOT( slotLoadTemplate() ) ); |
115 | connect( newJournal, SIGNAL( clicked() ), this , SIGNAL( newJournal() ) ); | ||
116 | connect( toggleJournal, SIGNAL( clicked() ), this , SLOT( toggleShowJournal() ) ); | 107 | connect( toggleJournal, SIGNAL( clicked() ), this , SLOT( toggleShowJournal() ) ); |
117 | } | 108 | } |
118 | 109 | ||
119 | JournalEntry::~JournalEntry() | 110 | JournalEntry::~JournalEntry() |
120 | { | 111 | { |
121 | qDebug("JournalEntry::~JournalEntry() "); | 112 | //qDebug("JournalEntry::~JournalEntry() "); |
122 | } | 113 | } |
123 | QSize JournalEntry::sizeHint() const | 114 | QSize JournalEntry::sizeHint() const |
124 | { | 115 | { |
125 | return QSize ( 240, heiHint ); | 116 | return QSize ( 240, heiHint ); |
126 | } | 117 | } |
127 | void JournalEntry::slotSaveTemplate() | 118 | void JournalEntry::slotSaveTemplate() |
128 | { | 119 | { |
129 | QString fileName =locateLocal( "templates", "journals" ); | 120 | QString fileName =locateLocal( "templates", "journals" ); |
130 | QDir t_dir; | 121 | QDir t_dir; |
131 | if ( !t_dir.exists(fileName) ) | 122 | if ( !t_dir.exists(fileName) ) |
132 | t_dir.mkdir ( fileName ); | 123 | t_dir.mkdir ( fileName ); |
133 | fileName += "/journal"; | 124 | fileName += "/journal"; |
134 | fileName = KFileDialog::getSaveFileName( fileName , i18n("Save as Journal template"), this ); | 125 | fileName = KFileDialog::getSaveFileName( fileName , i18n("Save as Journal template"), this ); |
135 | if ( fileName.length() == 0 ) | 126 | if ( fileName.length() == 0 ) |
136 | return; | 127 | return; |
137 | 128 | ||
138 | QFile fileIn( fileName ); | 129 | QFile fileIn( fileName ); |
139 | if (!fileIn.open( IO_WriteOnly ) ) { | 130 | if (!fileIn.open( IO_WriteOnly ) ) { |
140 | KMessageBox::error( this, i18n("Error saving template file\n '%1'.") | 131 | KMessageBox::error( this, i18n("Error saving template file\n '%1'.") |
141 | .arg( fileName ) ); | 132 | .arg( fileName ) ); |
142 | return; | 133 | return; |
143 | } | 134 | } |
144 | // QString text; | 135 | // QString text; |
145 | QTextStream tsIn( &fileIn ); | 136 | QTextStream tsIn( &fileIn ); |
146 | tsIn.setCodec( QTextCodec::codecForName("utf8") ); | 137 | tsIn.setCodec( QTextCodec::codecForName("utf8") ); |
147 | tsIn << mEditor->text(); | 138 | tsIn << mEditor->text(); |
148 | fileIn.close(); | 139 | fileIn.close(); |
149 | } | 140 | } |
150 | void JournalEntry::slotLoadTemplate() | 141 | void JournalEntry::slotLoadTemplate() |
151 | { | 142 | { |
152 | QString fileName =locateLocal( "templates", "journals" ); | 143 | QString fileName =locateLocal( "templates", "journals" ); |
153 | QDir t_dir; | 144 | QDir t_dir; |
154 | if ( !t_dir.exists(fileName) ) | 145 | if ( !t_dir.exists(fileName) ) |
155 | t_dir.mkdir ( fileName ); | 146 | t_dir.mkdir ( fileName ); |
156 | fileName += "/journal"; | 147 | fileName += "/journal"; |
157 | fileName = KFileDialog::getOpenFileName( fileName , i18n("Insert Journal template"), this ); | 148 | fileName = KFileDialog::getOpenFileName( fileName , i18n("Insert Journal template"), this ); |
158 | if ( fileName.length() == 0 ) | 149 | if ( fileName.length() == 0 ) |
159 | return; | 150 | return; |
160 | QFile fileIn( fileName ); | 151 | QFile fileIn( fileName ); |
161 | if (!fileIn.open( IO_ReadOnly ) ) { | 152 | if (!fileIn.open( IO_ReadOnly ) ) { |
162 | KMessageBox::error( this, i18n("Error loading template file\n '%1'.") | 153 | KMessageBox::error( this, i18n("Error loading template file\n '%1'.") |
163 | .arg( fileName ) ); | 154 | .arg( fileName ) ); |
164 | return; | 155 | return; |
165 | } | 156 | } |
166 | QTextStream tsIn( &fileIn ); | 157 | QTextStream tsIn( &fileIn ); |
167 | tsIn.setCodec( QTextCodec::codecForName("utf8") ); | 158 | tsIn.setCodec( QTextCodec::codecForName("utf8") ); |
168 | QString text = tsIn.read(); | 159 | QString text = tsIn.read(); |
169 | fileIn.close(); | 160 | fileIn.close(); |
170 | int line, col; | 161 | int line, col; |
171 | mEditor->getCursorPosition (& line, & col ); | 162 | mEditor->getCursorPosition (& line, & col ); |
172 | mEditor-> insertAt ( text, line, col, true ); | 163 | mEditor-> insertAt ( text, line, col, true ); |
173 | //mEditor->setIgnoreMark( true ); | 164 | //mEditor->setIgnoreMark( true ); |
174 | setDirty(); | 165 | setDirty(); |
175 | } | 166 | } |
176 | void JournalEntry::setDate(const QDate &date) | 167 | void JournalEntry::setDate(const QDate &date) |
177 | { | 168 | { |
178 | showOnlyMode = false; | 169 | showOnlyMode = false; |
179 | mDate = date; | 170 | mDate = date; |
180 | writeJournal(); | 171 | writeJournal(); |
181 | int id = mCalendar->defaultCalendar(); | 172 | int id = mCalendar->defaultCalendar(); |
182 | if ( id == 1 ) { | 173 | QString calname = KOPrefs::instance()->getCalendar( id )->mName; |
183 | mTitleLabel->setText(KGlobal::locale()->formatDate(date)); | 174 | mTitleLabel->setText( " (" + calname +")"); |
184 | } else { | ||
185 | QString calname = KOPrefs::instance()->getCalendar( id )->mName; | ||
186 | mTitleLabel->setText( KGlobal::locale()->formatDate(mDate,true) + " (" + calname +")"); | ||
187 | } | ||
188 | } | 175 | } |
189 | 176 | ||
190 | void JournalEntry::toggleShowJournal() | 177 | void JournalEntry::toggleShowJournal() |
191 | { | 178 | { |
179 | flushEntry(); | ||
192 | if ( showOnlyMode ) | 180 | if ( showOnlyMode ) |
193 | emit showJournalOnly( 0 ); | 181 | emit showJournalOnly( 0 ); |
194 | else | 182 | else |
195 | emit showJournalOnly( mJournal ); | 183 | emit showJournalOnly( mJournal ); |
196 | } | 184 | } |
197 | 185 | void JournalEntry::setShowOnly() | |
186 | { | ||
187 | showOnlyMode = true; | ||
188 | mEditor->setFocus(); | ||
189 | } | ||
198 | void JournalEntry::setJournal(Journal *journal) | 190 | void JournalEntry::setJournal(Journal *journal) |
199 | { | 191 | { |
200 | writeJournal(); | 192 | writeJournal(); |
201 | 193 | ||
202 | mJournal = journal; | 194 | mJournal = journal; |
203 | 195 | mTitle->setText(mJournal->summary()); | |
204 | mEditor->setText(mJournal->description()); | 196 | mEditor->setText(mJournal->description()); |
205 | int id = mJournal->calID(); | 197 | int id = mJournal->calID(); |
206 | if ( id > 1 ) { | 198 | |
207 | QString calname = KOPrefs::instance()->getCalendar( id )->mName; | 199 | QString calname = KOPrefs::instance()->getCalendar( id )->mName; |
208 | mTitleLabel->setText( KGlobal::locale()->formatDate(mDate,true) + " (" + calname +")"); | 200 | mTitleLabel->setText( " (" + calname +")"); |
209 | } else { | 201 | |
210 | mTitleLabel->setText(KGlobal::locale()->formatDate(mDate)); | ||
211 | } | ||
212 | mDirty = false; | 202 | mDirty = false; |
213 | } | 203 | } |
214 | 204 | ||
215 | Journal *JournalEntry::journal() const | 205 | Journal *JournalEntry::journal() const |
216 | { | 206 | { |
217 | return mJournal; | 207 | return mJournal; |
218 | } | 208 | } |
219 | 209 | ||
220 | void JournalEntry::setDirty() | 210 | void JournalEntry::setDirty() |
221 | { | 211 | { |
222 | mDirty = true; | 212 | mDirty = true; |
223 | 213 | ||
224 | // kdDebug() << "JournalEntry::setDirty()" << endl; | 214 | // kdDebug() << "JournalEntry::setDirty()" << endl; |
225 | } | 215 | } |
226 | 216 | ||
227 | void JournalEntry::clear() | 217 | void JournalEntry::clear() |
228 | { | 218 | { |
229 | mJournal = 0; | 219 | mJournal = 0; |
230 | mEditor->setText(""); | 220 | mEditor->setText(""); |
231 | } | 221 | } |
232 | 222 | ||
233 | bool JournalEntry::eventFilter( QObject *o, QEvent *e ) | 223 | bool JournalEntry::eventFilter( QObject *o, QEvent *e ) |
234 | { | 224 | { |
235 | // kdDebug() << "JournalEntry::event received " << e->type() << endl; | 225 | // kdDebug() << "JournalEntry::event received " << e->type() << endl; |
236 | 226 | ||
237 | if ( e->type() == QEvent::FocusOut ) { | 227 | if ( e->type() == QEvent::FocusOut ) { |
238 | writeJournal(); | 228 | writeJournal(); |
239 | } | 229 | } |
240 | if ( e->type() == QEvent::KeyPress ) { | 230 | if ( e->type() == QEvent::KeyPress ) { |
241 | QKeyEvent * k = (QKeyEvent *) e; | 231 | QKeyEvent * k = (QKeyEvent *) e; |
242 | if ( k->state() == Qt::ControlButton ) { | 232 | if ( k->state() == Qt::ControlButton ) { |
243 | k->ignore(); | 233 | k->ignore(); |
244 | //return true; | 234 | //return true; |
245 | } | 235 | } |
246 | } | 236 | } |
247 | 237 | ||
248 | return QFrame::eventFilter( o, e ); // standard event processing | 238 | return QFrame::eventFilter( o, e ); // standard event processing |
249 | } | 239 | } |
250 | 240 | ||
251 | void JournalEntry::writeJournal() | 241 | void JournalEntry::writeJournal() |
252 | { | 242 | { |
253 | // kdDebug() << "JournalEntry::writeJournal()" << endl; | 243 | // kdDebug() << "JournalEntry::writeJournal()" << endl; |
254 | if (!mDirty) return; | 244 | if (!mDirty) return; |
255 | 245 | ||
256 | if (mEditor->text().isEmpty()) { | 246 | if (mEditor->text().isEmpty()) { |
257 | if ( mJournal ) { | 247 | if ( mJournal ) { |
258 | mDirty = false; | 248 | mDirty = false; |
259 | bool conf = KOPrefs::instance()->mConfirm; | 249 | bool conf = KOPrefs::instance()->mConfirm; |
260 | KOPrefs::instance()->mConfirm = false; | 250 | KOPrefs::instance()->mConfirm = false; |
261 | emit deleteJournal(mJournal); | 251 | emit deleteJournal(mJournal); |
262 | KOPrefs::instance()->mConfirm = conf; | 252 | KOPrefs::instance()->mConfirm = conf; |
263 | mJournal = 0; | 253 | mJournal = 0; |
264 | } | 254 | } |
265 | return; | 255 | return; |
266 | } | 256 | } |
267 | 257 | ||
268 | // kdDebug() << "JournalEntry::writeJournal()..." << endl; | 258 | // kdDebug() << "JournalEntry::writeJournal()..." << endl; |
269 | 259 | ||
270 | if (!mJournal) { | 260 | if (!mJournal) { |
271 | mJournal = new Journal; | 261 | mJournal = new Journal; |
272 | mJournal->setDtStart(QDateTime(mDate,QTime(0,0,0))); | 262 | mJournal->setDtStart(QDateTime(mDate,QTime(0,0,0))); |
273 | mCalendar->addJournal(mJournal); | 263 | mCalendar->addJournal(mJournal); |
274 | } | 264 | } |
275 | 265 | ||
276 | mJournal->setDescription(mEditor->text()); | 266 | mJournal->setDescription(mEditor->text()); |
277 | //qDebug("tttt%s ", mEditor->text().latin1()); | 267 | mJournal->setSummary(mTitle->text()); |
278 | |||
279 | mDirty = false; | 268 | mDirty = false; |
280 | } | 269 | } |
281 | 270 | ||
282 | void JournalEntry::flushEntry() | 271 | void JournalEntry::flushEntry() |
283 | { | 272 | { |
284 | if (!mDirty) return; | 273 | if (!mDirty) return; |
285 | 274 | ||
286 | writeJournal(); | 275 | writeJournal(); |
287 | } | 276 | } |
288 | void JournalEntry::keyPressEvent ( QKeyEvent * e ) | 277 | void JournalEntry::keyPressEvent ( QKeyEvent * e ) |
289 | { | 278 | { |
290 | e->ignore(); | 279 | e->ignore(); |
291 | 280 | ||
292 | } | 281 | } |
diff --git a/korganizer/journalentry.h b/korganizer/journalentry.h index b0e9cc7..b37cabd 100644 --- a/korganizer/journalentry.h +++ b/korganizer/journalentry.h | |||
@@ -1,82 +1,84 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KOrganizer. | 2 | This file is part of KOrganizer. |
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | 3 | Copyright (c) 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 | #ifndef JOURNALENTRY_H | 23 | #ifndef JOURNALENTRY_H |
24 | #define JOURNALENTRY_H | 24 | #define JOURNALENTRY_H |
25 | // | 25 | // |
26 | // Widget showing one Journal entry | 26 | // Widget showing one Journal entry |
27 | 27 | ||
28 | #include <qframe.h> | 28 | #include <qframe.h> |
29 | 29 | ||
30 | #include <libkcal/calendar.h> | 30 | #include <libkcal/calendar.h> |
31 | 31 | ||
32 | class QLabel; | 32 | class QLabel; |
33 | class KTextEdit; | 33 | class KTextEdit; |
34 | class KLineEdit; | ||
34 | 35 | ||
35 | using namespace KCal; | 36 | using namespace KCal; |
36 | 37 | ||
37 | class JournalEntry : public QFrame { | 38 | class JournalEntry : public QFrame { |
38 | Q_OBJECT | 39 | Q_OBJECT |
39 | public: | 40 | public: |
40 | JournalEntry(Calendar *,QWidget *parent); | 41 | JournalEntry(Calendar *,QWidget *parent); |
41 | virtual ~JournalEntry(); | 42 | virtual ~JournalEntry(); |
42 | 43 | ||
43 | void setJournal(Journal *); | 44 | void setJournal(Journal *); |
44 | Journal *journal() const; | 45 | Journal *journal() const; |
45 | 46 | ||
46 | void setDate(const QDate &); | 47 | void setDate(const QDate &); |
47 | 48 | ||
48 | void clear(); | 49 | void clear(); |
49 | 50 | ||
50 | void flushEntry(); | 51 | void flushEntry(); |
51 | void setShowOnly() {showOnlyMode = true;} | 52 | void setShowOnly(); |
52 | QSize sizeHint() const; | 53 | QSize sizeHint() const; |
53 | 54 | ||
54 | protected slots: | 55 | protected slots: |
55 | void slotSaveTemplate(); | 56 | void slotSaveTemplate(); |
56 | void slotLoadTemplate(); | 57 | void slotLoadTemplate(); |
57 | void setDirty(); | 58 | void setDirty(); |
58 | void toggleShowJournal(); | 59 | void toggleShowJournal(); |
59 | signals: | 60 | signals: |
60 | void deleteJournal(Journal *); | 61 | void deleteJournal(Journal *); |
61 | void newJournal(); | 62 | void newJournal(); |
62 | void showJournalOnly( Journal * ); | 63 | void showJournalOnly( Journal * ); |
63 | 64 | ||
64 | protected: | 65 | protected: |
65 | bool eventFilter( QObject *o, QEvent *e ); | 66 | bool eventFilter( QObject *o, QEvent *e ); |
66 | 67 | ||
67 | void writeJournal(); | 68 | void writeJournal(); |
68 | 69 | ||
69 | private: | 70 | private: |
70 | bool showOnlyMode; | 71 | bool showOnlyMode; |
71 | Calendar *mCalendar; | 72 | Calendar *mCalendar; |
72 | Journal *mJournal; | 73 | Journal *mJournal; |
73 | QDate mDate; | 74 | QDate mDate; |
74 | void keyPressEvent ( QKeyEvent * ) ; | 75 | void keyPressEvent ( QKeyEvent * ) ; |
75 | QLabel *mTitleLabel; | 76 | QLabel *mTitleLabel; |
77 | KLineEdit * mTitle; | ||
76 | KTextEdit *mEditor; | 78 | KTextEdit *mEditor; |
77 | int heiHint; | 79 | int heiHint; |
78 | 80 | ||
79 | bool mDirty; | 81 | bool mDirty; |
80 | }; | 82 | }; |
81 | 83 | ||
82 | #endif | 84 | #endif |
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp index 3468657..067c34c 100644 --- a/korganizer/kodaymatrix.cpp +++ b/korganizer/kodaymatrix.cpp | |||
@@ -1,936 +1,947 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KOrganizer. | 2 | This file is part of KOrganizer. |
3 | Copyright (c) 2001 Eitzenberger Thomas <thomas.eitzenberger@siemens.at> | 3 | Copyright (c) 2001 Eitzenberger Thomas <thomas.eitzenberger@siemens.at> |
4 | Parts of the source code have been copied from kdpdatebutton.cpp | 4 | Parts of the source code have been copied from kdpdatebutton.cpp |
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 ode for Qt in the source distribution. | 22 | without including the source ode for Qt in the source distribution. |
23 | */ | 23 | */ |
24 | 24 | ||
25 | #include <qevent.h> | 25 | #include <qevent.h> |
26 | #include <qpainter.h> | 26 | #include <qpainter.h> |
27 | #include <qptrlist.h> | 27 | #include <qptrlist.h> |
28 | #include <qtimer.h> | 28 | #include <qtimer.h> |
29 | #include <qwhatsthis.h> | 29 | #include <qwhatsthis.h> |
30 | 30 | ||
31 | #include <kglobal.h> | 31 | #include <kglobal.h> |
32 | #include <kdebug.h> | 32 | #include <kdebug.h> |
33 | #include <klocale.h> | 33 | #include <klocale.h> |
34 | 34 | ||
35 | #include <libkcal/vcaldrag.h> | 35 | #include <libkcal/vcaldrag.h> |
36 | #include <libkcal/icaldrag.h> | 36 | #include <libkcal/icaldrag.h> |
37 | #include <libkcal/dndfactory.h> | 37 | #include <libkcal/dndfactory.h> |
38 | #include <libkcal/calendarresources.h> | 38 | #include <libkcal/calendarresources.h> |
39 | #include <libkcal/resourcecalendar.h> | 39 | #include <libkcal/resourcecalendar.h> |
40 | #include <kresources/resourceselectdialog.h> | 40 | #include <kresources/resourceselectdialog.h> |
41 | 41 | ||
42 | #include <kcalendarsystem.h> | 42 | #include <kcalendarsystem.h> |
43 | 43 | ||
44 | #ifndef KORG_NOPLUGINS | 44 | #ifndef KORG_NOPLUGINS |
45 | #include "kocore.h" | 45 | #include "kocore.h" |
46 | #endif | 46 | #endif |
47 | #include "koprefs.h" | 47 | #include "koprefs.h" |
48 | #include "koglobals.h" | 48 | #include "koglobals.h" |
49 | 49 | ||
50 | #include "kodaymatrix.h" | 50 | #include "kodaymatrix.h" |
51 | 51 | ||
52 | // ============================================================================ | 52 | // ============================================================================ |
53 | // D Y N A M I C T I P | 53 | // D Y N A M I C T I P |
54 | // ============================================================================ | 54 | // ============================================================================ |
55 | 55 | ||
56 | DynamicTip::DynamicTip( QWidget * parent ) | 56 | DynamicTip::DynamicTip( QWidget * parent ) |
57 | : QToolTip( parent ) | 57 | : QToolTip( parent ) |
58 | { | 58 | { |
59 | matrix = (KODayMatrix*)parent; | 59 | matrix = (KODayMatrix*)parent; |
60 | } | 60 | } |
61 | 61 | ||
62 | class KODaymatrixWhatsThis :public QWhatsThis | 62 | class KODaymatrixWhatsThis :public QWhatsThis |
63 | { | 63 | { |
64 | public: | 64 | public: |
65 | KODaymatrixWhatsThis( KODayMatrix* view ) : QWhatsThis( view ),_view (view) { ;}; | 65 | KODaymatrixWhatsThis( KODayMatrix* view ) : QWhatsThis( view ),_view (view) { ;}; |
66 | ~KODaymatrixWhatsThis() { ; }; | 66 | ~KODaymatrixWhatsThis() { ; }; |
67 | 67 | ||
68 | protected: | 68 | protected: |
69 | virtual QString text( const QPoint& p ) | 69 | virtual QString text( const QPoint& p ) |
70 | { | 70 | { |
71 | return _view->getWhatsThisText( p ) ; | 71 | return _view->getWhatsThisText( p ) ; |
72 | } | 72 | } |
73 | private: | 73 | private: |
74 | KODayMatrix * _view; | 74 | KODayMatrix * _view; |
75 | }; | 75 | }; |
76 | 76 | ||
77 | void DynamicTip::maybeTip( const QPoint &pos ) | 77 | void DynamicTip::maybeTip( const QPoint &pos ) |
78 | { | 78 | { |
79 | //calculate which cell of the matrix the mouse is in | 79 | //calculate which cell of the matrix the mouse is in |
80 | QRect sz = matrix->frameRect(); | 80 | QRect sz = matrix->frameRect(); |
81 | int dheight = sz.height()*7 / 42; | 81 | int dheight = sz.height()*7 / 42; |
82 | int dwidth = sz.width() / 7; | 82 | int dwidth = sz.width() / 7; |
83 | int row = pos.y()/dheight; | 83 | int row = pos.y()/dheight; |
84 | int col = pos.x()/dwidth; | 84 | int col = pos.x()/dwidth; |
85 | 85 | ||
86 | QRect rct(col*dwidth, row*dheight, dwidth, dheight); | 86 | QRect rct(col*dwidth, row*dheight, dwidth, dheight); |
87 | 87 | ||
88 | // kdDebug() << "DynamicTip::maybeTip matrix cell index [" << | 88 | // kdDebug() << "DynamicTip::maybeTip matrix cell index [" << |
89 | // col << "][" << row << "] => " <<(col+row*7) << endl; | 89 | // col << "][" << row << "] => " <<(col+row*7) << endl; |
90 | 90 | ||
91 | //show holiday names only | 91 | //show holiday names only |
92 | QString str = matrix->getHolidayLabel(col+row*7); | 92 | QString str = matrix->getHolidayLabel(col+row*7); |
93 | if (str.isEmpty()) return; | 93 | if (str.isEmpty()) return; |
94 | tip(rct, str); | 94 | tip(rct, str); |
95 | } | 95 | } |
96 | 96 | ||
97 | 97 | ||
98 | // ============================================================================ | 98 | // ============================================================================ |
99 | // K O D A Y M A T R I X | 99 | // K O D A Y M A T R I X |
100 | // ============================================================================ | 100 | // ============================================================================ |
101 | 101 | ||
102 | const int KODayMatrix::NOSELECTION = -1000; | 102 | const int KODayMatrix::NOSELECTION = -1000; |
103 | const int KODayMatrix::NUMDAYS = 42; | 103 | const int KODayMatrix::NUMDAYS = 42; |
104 | 104 | ||
105 | KODayMatrix::KODayMatrix( QWidget *parent, const char *name ) | 105 | KODayMatrix::KODayMatrix( QWidget *parent, const char *name ) |
106 | : QFrame( parent, name , Qt::WRepaintNoErase ), mCalendar( 0 ) | 106 | : QFrame( parent, name , Qt::WRepaintNoErase ), mCalendar( 0 ) |
107 | 107 | ||
108 | 108 | ||
109 | { | 109 | { |
110 | mLastView = -1; | 110 | mLastView = -1; |
111 | oldW = 0; | 111 | oldW = 0; |
112 | oldH = 0; | 112 | oldH = 0; |
113 | myPix.resize( 150, 120 ); | 113 | myPix.resize( 150, 120 ); |
114 | mRedrawNeeded = true; | 114 | mRedrawNeeded = true; |
115 | mKODaymatrixWhatsThis = new KODaymatrixWhatsThis(this); | 115 | mKODaymatrixWhatsThis = new KODaymatrixWhatsThis(this); |
116 | mPendingUpdateBeforeRepaint = false; | 116 | mPendingUpdateBeforeRepaint = false; |
117 | mouseDown = false; | 117 | mouseDown = false; |
118 | // initialize dynamic arrays | 118 | // initialize dynamic arrays |
119 | bDays.resize ( NUMDAYS ); | 119 | bDays.resize ( NUMDAYS ); |
120 | pDays.resize ( NUMDAYS ); | 120 | pDays.resize ( NUMDAYS ); |
121 | hDays.resize ( NUMDAYS ); | 121 | hDays.resize ( NUMDAYS ); |
122 | eDays.resize ( NUMDAYS ); | 122 | eDays.resize ( NUMDAYS ); |
123 | days = new QDate[NUMDAYS]; | 123 | days = new QDate[NUMDAYS]; |
124 | daylbls = new QString[NUMDAYS]; | 124 | daylbls = new QString[NUMDAYS]; |
125 | //events = new int[NUMDAYS]; | 125 | //events = new int[NUMDAYS]; |
126 | mToolTip = new DynamicTip(this); | 126 | mToolTip = new DynamicTip(this); |
127 | 127 | ||
128 | // set default values used for drawing the matrix | 128 | // set default values used for drawing the matrix |
129 | mDefaultBackColor = palette().active().base(); | 129 | mDefaultBackColor = palette().active().base(); |
130 | mDefaultTextColor = palette().active().foreground(); | 130 | mDefaultTextColor = palette().active().foreground(); |
131 | mDefaultTextColorShaded = getShadedColor(mDefaultTextColor); | 131 | mDefaultTextColorShaded = getShadedColor(mDefaultTextColor); |
132 | mHolidayColorShaded = getShadedColor(KOPrefs::instance()->mHolidayColor); | 132 | mHolidayColorShaded = getShadedColor(KOPrefs::instance()->mHolidayColor); |
133 | mSelectedDaysColor = QColor("white"); | 133 | mSelectedDaysColor = QColor("white"); |
134 | mTodayMarginWidth = 2; | 134 | mTodayMarginWidth = 2; |
135 | mSelEnd = mSelStart = NOSELECTION; | 135 | mSelEnd = mSelStart = NOSELECTION; |
136 | 136 | ||
137 | setAcceptDrops(true); | 137 | setAcceptDrops(true); |
138 | //setFont( QFont("Arial", 10) ); | 138 | //setFont( QFont("Arial", 10) ); |
139 | 139 | ||
140 | mUpdateTimer = new QTimer( this ); | 140 | mUpdateTimer = new QTimer( this ); |
141 | connect (mUpdateTimer ,SIGNAL(timeout()), this, SLOT ( updateViewTimed() )); | 141 | connect (mUpdateTimer ,SIGNAL(timeout()), this, SLOT ( updateViewTimed() )); |
142 | mRepaintTimer = new QTimer( this ); | 142 | mRepaintTimer = new QTimer( this ); |
143 | connect (mRepaintTimer ,SIGNAL(timeout()), this, SLOT ( repaintViewTimed() )); | 143 | connect (mRepaintTimer ,SIGNAL(timeout()), this, SLOT ( repaintViewTimed() )); |
144 | mDayChanged = false; | 144 | mDayChanged = false; |
145 | updateView(); | 145 | updateView(); |
146 | } | 146 | } |
147 | QString KODayMatrix::getWhatsThisText( QPoint p ) | 147 | QString KODayMatrix::getWhatsThisText( QPoint p ) |
148 | { | 148 | { |
149 | 149 | ||
150 | int tmp = getDayIndexFrom(p.x(), p.y()); | 150 | int tmp = getDayIndexFrom(p.x(), p.y()); |
151 | if ( tmp < 0 || tmp > NUMDAYS-1 || !mCalendar ) | 151 | if ( tmp < 0 || tmp > NUMDAYS-1 || !mCalendar ) |
152 | return QString(); | 152 | return QString(); |
153 | QDate mDate = days[tmp]; | 153 | QDate mDate = days[tmp]; |
154 | QPtrList<Event> eventlist = mCalendar->events(mDate); | 154 | QPtrList<Event> eventlist = mCalendar->events(mDate); |
155 | Event *event; | 155 | Event *event; |
156 | QStringList mToolTip; | 156 | QStringList mToolTip; |
157 | for(event=eventlist.first();event != 0;event=eventlist.next()) { | 157 | for(event=eventlist.first();event != 0;event=eventlist.next()) { |
158 | QString mToolTipText; | 158 | QString mToolTipText; |
159 | QString text; | 159 | QString text; |
160 | int multiday = 0;// 1 = start, 2 = midddle, 3 = end day | 160 | int multiday = 0;// 1 = start, 2 = midddle, 3 = end day |
161 | if (event->isMultiDay()) { | 161 | if (event->isMultiDay()) { |
162 | QString prefix = "<->";multiday = 2; | 162 | QString prefix = "<->";multiday = 2; |
163 | QString time; | 163 | QString time; |
164 | if ( event->doesRecur() ) { | 164 | if ( event->doesRecur() ) { |
165 | if ( event->recursOn( mDate) ) { | 165 | if ( event->recursOn( mDate) ) { |
166 | prefix ="->" ;multiday = 1; | 166 | prefix ="->" ;multiday = 1; |
167 | } | 167 | } |
168 | else { | 168 | else { |
169 | int days = event->dtStart().date().daysTo ( event->dtEnd().date() ); | 169 | int days = event->dtStart().date().daysTo ( event->dtEnd().date() ); |
170 | if ( event->recursOn( mDate.addDays( -days)) ) { | 170 | if ( event->recursOn( mDate.addDays( -days)) ) { |
171 | prefix ="<-" ;multiday = 3; | 171 | prefix ="<-" ;multiday = 3; |
172 | } | 172 | } |
173 | } | 173 | } |
174 | } else { | 174 | } else { |
175 | if (mDate == event->dtStart().date()) { | 175 | if (mDate == event->dtStart().date()) { |
176 | prefix ="->" ;multiday = 1; | 176 | prefix ="->" ;multiday = 1; |
177 | } else if (mDate == event->dtEnd().date()) { | 177 | } else if (mDate == event->dtEnd().date()) { |
178 | prefix ="<-" ;multiday = 3; | 178 | prefix ="<-" ;multiday = 3; |
179 | } | 179 | } |
180 | } | 180 | } |
181 | if ( !event->doesFloat() ) { | 181 | if ( !event->doesFloat() ) { |
182 | if ( mDate == event->dtStart().date () ) | 182 | if ( mDate == event->dtStart().date () ) |
183 | time = KGlobal::locale()->formatTime(event->dtStart().time())+" "; | 183 | time = KGlobal::locale()->formatTime(event->dtStart().time())+" "; |
184 | else if ( mDate == event->dtEnd().date () ) | 184 | else if ( mDate == event->dtEnd().date () ) |
185 | time = KGlobal::locale()->formatTime(event->dtEnd().time())+" "; | 185 | time = KGlobal::locale()->formatTime(event->dtEnd().time())+" "; |
186 | 186 | ||
187 | } | 187 | } |
188 | text = time + event->summary(); | 188 | text = time + event->summary(); |
189 | mToolTipText += prefix + text; | 189 | mToolTipText += prefix + text; |
190 | } else { | 190 | } else { |
191 | if (event->doesFloat()) { | 191 | if (event->doesFloat()) { |
192 | text = event->summary(); | 192 | text = event->summary(); |
193 | mToolTipText += text; | 193 | mToolTipText += text; |
194 | } | 194 | } |
195 | else { | 195 | else { |
196 | text = KGlobal::locale()->formatTime(event->dtStart().time()); | 196 | text = KGlobal::locale()->formatTime(event->dtStart().time()); |
197 | text += " " + event->summary(); | 197 | text += " " + event->summary(); |
198 | mToolTipText += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary(); | 198 | mToolTipText += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary(); |
199 | } | 199 | } |
200 | } | 200 | } |
201 | if ( !event->location().isEmpty() ) | 201 | if ( !event->location().isEmpty() ) |
202 | mToolTipText += " (" + event->location() + ")"; | 202 | mToolTipText += " (" + event->location() + ")"; |
203 | //qDebug("TTT: %s ", mToolTipText.latin1()); | 203 | //qDebug("TTT: %s ", mToolTipText.latin1()); |
204 | mToolTip.append( deTag( mToolTipText ) ); | 204 | mToolTip.append( deTag( mToolTipText ) ); |
205 | } | 205 | } |
206 | mToolTip.sort(); | 206 | mToolTip.sort(); |
207 | if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) { | 207 | if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) { |
208 | QPtrList<Todo> todolist = mCalendar->todos(mDate); | 208 | QPtrList<Todo> todolist = mCalendar->todos(mDate); |
209 | Todo *todo; | 209 | Todo *todo; |
210 | for(todo=todolist.first();todo != 0;todo=todolist.next()) { | 210 | for(todo=todolist.first();todo != 0;todo=todolist.next()) { |
211 | QString mToolTipText; | 211 | QString mToolTipText; |
212 | if ( !todo->doesFloat() ) | 212 | if ( !todo->doesFloat() ) |
213 | mToolTipText += KGlobal::locale()->formatTime(todo->dtDue().time())+" "; | 213 | mToolTipText += KGlobal::locale()->formatTime(todo->dtDue().time())+" "; |
214 | mToolTipText += todo->summary(); | 214 | mToolTipText += todo->summary(); |
215 | if ( !todo->location().isEmpty() ) | 215 | if ( !todo->location().isEmpty() ) |
216 | mToolTipText += " (" + todo->location() + ")"; | 216 | mToolTipText += " (" + todo->location() + ")"; |
217 | mToolTipText = deTag( mToolTipText); | 217 | mToolTipText = deTag( mToolTipText); |
218 | mToolTipText = "<b>" + i18n("Todo: ") + "</b>"+ mToolTipText; | 218 | mToolTipText = "<b>" + i18n("Todo: ") + "</b>"+ mToolTipText; |
219 | mToolTip.append( mToolTipText ); | 219 | mToolTip.append( mToolTipText ); |
220 | } | 220 | } |
221 | } | 221 | } |
222 | if (KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) { | 222 | if (KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) { |
223 | Journal *j = mCalendar->journal( mDate ); | 223 | QPtrList<Journal> j_list = mCalendar->journals4Date( mDate ); |
224 | if ( j ) { | 224 | Journal *j = j_list.first(); |
225 | QString mToolTipText = j->description().left(100); | 225 | while ( j ) { |
226 | if ( j->description().length() > 100 ) | 226 | QString mToolTipText; |
227 | mToolTipText += " ..."; | 227 | if ( !j->summary().isEmpty() ) { |
228 | mToolTipText = deTag( mToolTipText); | 228 | mToolTipText = j->summary().left(30); |
229 | if ( j->summary().length() > 30 ) | ||
230 | mToolTipText += " ..."; | ||
231 | } else { | ||
232 | mToolTipText = j->description().left(25); | ||
233 | if ( j->description().length() > 25 ) | ||
234 | mToolTipText += " ..."; | ||
235 | mToolTipText = deTag( mToolTipText); | ||
236 | } | ||
229 | mToolTipText = "<b>" + i18n("Journal: ") + "</b>"+ mToolTipText; | 237 | mToolTipText = "<b>" + i18n("Journal: ") + "</b>"+ mToolTipText; |
230 | mToolTip.append( mToolTipText ); | 238 | mToolTip.append( mToolTipText ); |
239 | j = j_list.next(); | ||
231 | } | 240 | } |
232 | } | 241 | } |
233 | return "<b>"+KGlobal::locale()->formatDate(days[tmp]) + "</b><br>" + mToolTip.join("<br>"); | 242 | return "<b>"+KGlobal::locale()->formatDate(days[tmp]) + "</b><br>" + mToolTip.join("<br>"); |
234 | } | 243 | } |
235 | 244 | ||
236 | 245 | ||
237 | QString KODayMatrix::deTag( QString mToolTipText ) | 246 | QString KODayMatrix::deTag( QString mToolTipText ) |
238 | { | 247 | { |
239 | 248 | ||
240 | #if QT_VERSION >= 0x030000 | 249 | #if QT_VERSION >= 0x030000 |
241 | mToolTipText.replace( '<' , "<" ); | 250 | mToolTipText.replace( '<' , "<" ); |
242 | mToolTipText.replace( '>' , ">" ); | 251 | mToolTipText.replace( '>' , ">" ); |
243 | #else | 252 | #else |
244 | if ( mToolTipText.find ('<') >= 0 ) { | 253 | if ( mToolTipText.find ('<') >= 0 ) { |
245 | mToolTipText.replace( QRegExp("<") , "<" ); | 254 | mToolTipText.replace( QRegExp("<") , "<" ); |
246 | } | 255 | } |
247 | if ( mToolTipText.find ('>') >= 0 ) { | 256 | if ( mToolTipText.find ('>') >= 0 ) { |
248 | mToolTipText.replace( QRegExp(">") , ">" ); | 257 | mToolTipText.replace( QRegExp(">") , ">" ); |
249 | } | 258 | } |
250 | #endif | 259 | #endif |
251 | return mToolTipText; | 260 | return mToolTipText; |
252 | } | 261 | } |
253 | void KODayMatrix::setCalendar( Calendar *cal ) | 262 | void KODayMatrix::setCalendar( Calendar *cal ) |
254 | { | 263 | { |
255 | mCalendar = cal; | 264 | mCalendar = cal; |
256 | 265 | ||
257 | setAcceptDrops( mCalendar ); | 266 | setAcceptDrops( mCalendar ); |
258 | 267 | ||
259 | updateEvents(); | 268 | updateEvents(); |
260 | } | 269 | } |
261 | 270 | ||
262 | QColor KODayMatrix::getShadedColor(QColor color) | 271 | QColor KODayMatrix::getShadedColor(QColor color) |
263 | { | 272 | { |
264 | QColor shaded; | 273 | QColor shaded; |
265 | int h=0; | 274 | int h=0; |
266 | int s=0; | 275 | int s=0; |
267 | int v=0; | 276 | int v=0; |
268 | color.hsv(&h,&s,&v); | 277 | color.hsv(&h,&s,&v); |
269 | s = s/4; | 278 | s = s/4; |
270 | v = 192+v/4; | 279 | v = 192+v/4; |
271 | shaded.setHsv(h,s,v); | 280 | shaded.setHsv(h,s,v); |
272 | 281 | ||
273 | return shaded; | 282 | return shaded; |
274 | } | 283 | } |
275 | 284 | ||
276 | KODayMatrix::~KODayMatrix() | 285 | KODayMatrix::~KODayMatrix() |
277 | { | 286 | { |
278 | #if QT_VERSION >= 0x030000 | 287 | #if QT_VERSION >= 0x030000 |
279 | 288 | ||
280 | #else | 289 | #else |
281 | delete mKODaymatrixWhatsThis; | 290 | delete mKODaymatrixWhatsThis; |
282 | #endif | 291 | #endif |
283 | 292 | ||
284 | // delete mKODaymatrixWhatsThis; | 293 | // delete mKODaymatrixWhatsThis; |
285 | delete [] days; | 294 | delete [] days; |
286 | delete [] daylbls; | 295 | delete [] daylbls; |
287 | //delete [] events; | 296 | //delete [] events; |
288 | delete mToolTip; | 297 | delete mToolTip; |
289 | } | 298 | } |
290 | 299 | ||
291 | /* | 300 | /* |
292 | void KODayMatrix::setStartDate(QDate start) | 301 | void KODayMatrix::setStartDate(QDate start) |
293 | { | 302 | { |
294 | updateView(start); | 303 | updateView(start); |
295 | } | 304 | } |
296 | */ | 305 | */ |
297 | 306 | ||
298 | void KODayMatrix::addSelectedDaysTo(DateList& selDays) | 307 | void KODayMatrix::addSelectedDaysTo(DateList& selDays) |
299 | { | 308 | { |
300 | 309 | ||
301 | if (mSelStart == NOSELECTION) { | 310 | if (mSelStart == NOSELECTION) { |
302 | return; | 311 | return; |
303 | } | 312 | } |
304 | 313 | ||
305 | //cope with selection being out of matrix limits at top (< 0) | 314 | //cope with selection being out of matrix limits at top (< 0) |
306 | int i0 = mSelStart; | 315 | int i0 = mSelStart; |
307 | if (i0 < 0) { | 316 | if (i0 < 0) { |
308 | for (int i = i0; i < 0; i++) { | 317 | for (int i = i0; i < 0; i++) { |
309 | selDays.append(days[0].addDays(i)); | 318 | selDays.append(days[0].addDays(i)); |
310 | } | 319 | } |
311 | i0 = 0; | 320 | i0 = 0; |
312 | } | 321 | } |
313 | 322 | ||
314 | //cope with selection being out of matrix limits at bottom (> NUMDAYS-1) | 323 | //cope with selection being out of matrix limits at bottom (> NUMDAYS-1) |
315 | if (mSelEnd > NUMDAYS-1) { | 324 | if (mSelEnd > NUMDAYS-1) { |
316 | for (int i = i0; i <= NUMDAYS-1; i++) { | 325 | for (int i = i0; i <= NUMDAYS-1; i++) { |
317 | selDays.append(days[i]); | 326 | selDays.append(days[i]); |
318 | } | 327 | } |
319 | for (int i = NUMDAYS; i < mSelEnd; i++) { | 328 | for (int i = NUMDAYS; i < mSelEnd; i++) { |
320 | selDays.append(days[0].addDays(i)); | 329 | selDays.append(days[0].addDays(i)); |
321 | } | 330 | } |
322 | 331 | ||
323 | // apply normal routine to selection being entirely within matrix limits | 332 | // apply normal routine to selection being entirely within matrix limits |
324 | } else { | 333 | } else { |
325 | for (int i = i0; i <= mSelEnd; i++) { | 334 | for (int i = i0; i <= mSelEnd; i++) { |
326 | selDays.append(days[i]); | 335 | selDays.append(days[i]); |
327 | } | 336 | } |
328 | } | 337 | } |
329 | } | 338 | } |
330 | 339 | ||
331 | bool KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end) | 340 | bool KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end) |
332 | { | 341 | { |
333 | mRedrawNeeded = true; | 342 | mRedrawNeeded = true; |
334 | bool noSel = (mSelEnd == NOSELECTION && mSelStart == NOSELECTION ); | 343 | bool noSel = (mSelEnd == NOSELECTION && mSelStart == NOSELECTION ); |
335 | mSelStart = startdate.daysTo(start); | 344 | mSelStart = startdate.daysTo(start); |
336 | if ( mSelStart < 0 ) | 345 | if ( mSelStart < 0 ) |
337 | mSelStart = 0; | 346 | mSelStart = 0; |
338 | mSelEnd = startdate.daysTo(end); | 347 | mSelEnd = startdate.daysTo(end); |
339 | if ( mSelEnd > NUMDAYS-1 ) | 348 | if ( mSelEnd > NUMDAYS-1 ) |
340 | mSelEnd = NUMDAYS-1; | 349 | mSelEnd = NUMDAYS-1; |
341 | if ( mSelEnd < 0 || mSelStart > NUMDAYS-1 ) { | 350 | if ( mSelEnd < 0 || mSelStart > NUMDAYS-1 ) { |
342 | clearSelection(); | 351 | clearSelection(); |
343 | if ( noSel ) | 352 | if ( noSel ) |
344 | return false; | 353 | return false; |
345 | } | 354 | } |
346 | 355 | ||
347 | return true; | 356 | return true; |
348 | } | 357 | } |
349 | void KODayMatrix::clearSelection() | 358 | void KODayMatrix::clearSelection() |
350 | { | 359 | { |
351 | mSelEnd = mSelStart = NOSELECTION; | 360 | mSelEnd = mSelStart = NOSELECTION; |
352 | } | 361 | } |
353 | 362 | ||
354 | 363 | ||
355 | void KODayMatrix::recalculateToday() | 364 | void KODayMatrix::recalculateToday() |
356 | { | 365 | { |
357 | today = -1; | 366 | today = -1; |
358 | for (int i=0; i<NUMDAYS; i++) { | 367 | for (int i=0; i<NUMDAYS; i++) { |
359 | //events[i] = 0; | 368 | //events[i] = 0; |
360 | days[i] = startdate.addDays(i); | 369 | days[i] = startdate.addDays(i); |
361 | daylbls[i] = QString::number( KOGlobals::self()->calendarSystem()->day( days[i] )); | 370 | daylbls[i] = QString::number( KOGlobals::self()->calendarSystem()->day( days[i] )); |
362 | 371 | ||
363 | // if today is in the currently displayed month, hilight today | 372 | // if today is in the currently displayed month, hilight today |
364 | if (days[i].year() == QDate::currentDate().year() && | 373 | if (days[i].year() == QDate::currentDate().year() && |
365 | days[i].month() == QDate::currentDate().month() && | 374 | days[i].month() == QDate::currentDate().month() && |
366 | days[i].day() == QDate::currentDate().day()) { | 375 | days[i].day() == QDate::currentDate().day()) { |
367 | today = i; | 376 | today = i; |
368 | } | 377 | } |
369 | } | 378 | } |
370 | // qDebug(QString("Today is visible at %1.").arg(today)); | 379 | // qDebug(QString("Today is visible at %1.").arg(today)); |
371 | } | 380 | } |
372 | 381 | ||
373 | void KODayMatrix::updateView() | 382 | void KODayMatrix::updateView() |
374 | { | 383 | { |
375 | updateView(startdate); | 384 | updateView(startdate); |
376 | } | 385 | } |
377 | void KODayMatrix::repaintViewTimed() | 386 | void KODayMatrix::repaintViewTimed() |
378 | { | 387 | { |
379 | mRedrawNeeded = true; | 388 | mRedrawNeeded = true; |
380 | // bDays.fill( false); | 389 | // bDays.fill( false); |
381 | //pDays.fill( false); | 390 | //pDays.fill( false); |
382 | //hDays.fill( false); | 391 | //hDays.fill( false); |
383 | //eDays.fill( false); | 392 | //eDays.fill( false); |
384 | mRepaintTimer->stop(); | 393 | mRepaintTimer->stop(); |
385 | int startDay = days[0].dayOfWeek(); // 1...7 7 = sunday | 394 | int startDay = days[0].dayOfWeek(); // 1...7 7 = sunday |
386 | int i; | 395 | int i; |
387 | for(i = 0; i < NUMDAYS; i++) { | 396 | for(i = 0; i < NUMDAYS; i++) { |
388 | if ( ( (i+startDay) % 7 == 0 ) ) { | 397 | if ( ( (i+startDay) % 7 == 0 ) ) { |
389 | pDays.setBit(i); | 398 | pDays.setBit(i); |
390 | } | 399 | } |
391 | } | 400 | } |
392 | repaint(false); | 401 | repaint(false); |
393 | } | 402 | } |
394 | void KODayMatrix::computeEvent(Event *event, int i ) | 403 | void KODayMatrix::computeEvent(Event *event, int i ) |
395 | { | 404 | { |
396 | QString holiStr = mHolidays[i]; | 405 | QString holiStr = mHolidays[i]; |
397 | if ( event->isHoliday()) { | 406 | if ( event->isHoliday()) { |
398 | pDays.setBit(i); | 407 | pDays.setBit(i); |
399 | hDays.setBit(i); | 408 | hDays.setBit(i); |
400 | if ( !holiStr.isEmpty() ) | 409 | if ( !holiStr.isEmpty() ) |
401 | holiStr += "\n"; | 410 | holiStr += "\n"; |
402 | holiStr += event->summary(); | 411 | holiStr += event->summary(); |
403 | if ( !event->location().isEmpty() ) | 412 | if ( !event->location().isEmpty() ) |
404 | holiStr += " (" + event->location() + ")"; | 413 | holiStr += " (" + event->location() + ")"; |
405 | mHolidays[i] =holiStr ; | 414 | mHolidays[i] =holiStr ; |
406 | eDays.setBit(i); | 415 | eDays.setBit(i); |
407 | } | 416 | } |
408 | if ( KOPrefs::instance()->mCurrentDisplayedView != VIEW_T_VIEW && KOPrefs::instance()->mCurrentDisplayedView != VIEW_J_VIEW ) { | 417 | if ( KOPrefs::instance()->mCurrentDisplayedView != VIEW_T_VIEW && KOPrefs::instance()->mCurrentDisplayedView != VIEW_J_VIEW ) { |
409 | if ( event->isBirthday()) { | 418 | if ( event->isBirthday()) { |
410 | pDays.setBit(i); | 419 | pDays.setBit(i); |
411 | if ( !holiStr.isEmpty() ) | 420 | if ( !holiStr.isEmpty() ) |
412 | holiStr += "\n"; | 421 | holiStr += "\n"; |
413 | holiStr += i18n("Birthday") + ": "+event->summary(); | 422 | holiStr += i18n("Birthday") + ": "+event->summary(); |
414 | if ( !event->location().isEmpty() ) | 423 | if ( !event->location().isEmpty() ) |
415 | holiStr += " (" + event->location() + ")"; | 424 | holiStr += " (" + event->location() + ")"; |
416 | bDays.setBit(i); | 425 | bDays.setBit(i); |
417 | mHolidays[i] =holiStr ; | 426 | mHolidays[i] =holiStr ; |
418 | } | 427 | } |
419 | } | 428 | } |
420 | if ( KOPrefs::instance()->mCurrentDisplayedView != VIEW_J_VIEW ) | 429 | if ( KOPrefs::instance()->mCurrentDisplayedView != VIEW_J_VIEW ) |
421 | eDays.setBit(i); | 430 | eDays.setBit(i); |
422 | } | 431 | } |
423 | void KODayMatrix::updateViewTimed() | 432 | void KODayMatrix::updateViewTimed() |
424 | { | 433 | { |
425 | mUpdateTimer->stop(); | 434 | mUpdateTimer->stop(); |
426 | if ( !mCalendar ) { | 435 | if ( !mCalendar ) { |
427 | qDebug("NOT CAL "); | 436 | qDebug("NOT CAL "); |
428 | return; | 437 | return; |
429 | } | 438 | } |
430 | #if 1 | 439 | #if 1 |
431 | 440 | ||
432 | 441 | ||
433 | int i; | 442 | int i; |
434 | int timeSpan = NUMDAYS-1; | 443 | int timeSpan = NUMDAYS-1; |
435 | QPtrList<Event> events = mCalendar->events(); | 444 | QPtrList<Event> events = mCalendar->events(); |
436 | Event *event; | 445 | Event *event; |
437 | QDateTime dt; | 446 | QDateTime dt; |
438 | bool ok; | 447 | bool ok; |
439 | bDays.fill( false); | 448 | bDays.fill( false); |
440 | pDays.fill( false); | 449 | pDays.fill( false); |
441 | hDays.fill( false); | 450 | hDays.fill( false); |
442 | eDays.fill( false); | 451 | eDays.fill( false); |
443 | mHolidays.clear(); | 452 | mHolidays.clear(); |
444 | QDate mStartDate = days[0]; | 453 | QDate mStartDate = days[0]; |
445 | QDate endDate = mStartDate.addDays( timeSpan ); | 454 | QDate endDate = mStartDate.addDays( timeSpan ); |
446 | for( event = events.first(); event; event = events.next() ) { // for event | 455 | for( event = events.first(); event; event = events.next() ) { // for event |
447 | ushort recurType = event->recurrence()->doesRecur(); | 456 | ushort recurType = event->recurrence()->doesRecur(); |
448 | if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) || | 457 | if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) || |
449 | (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) { | 458 | (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) { |
450 | continue; | 459 | continue; |
451 | } | 460 | } |
452 | if ( event->doesRecur() ) { | 461 | if ( event->doesRecur() ) { |
453 | bool last; | 462 | bool last; |
454 | QDateTime incidenceStart = event->recurrence()->getPreviousDateTime( QDateTime( mStartDate ) , &last ); | 463 | QDateTime incidenceStart = event->recurrence()->getPreviousDateTime( QDateTime( mStartDate ) , &last ); |
455 | QDateTime incidenceEnd; | 464 | QDateTime incidenceEnd; |
456 | int eventlen = event->dtStart().date().daysTo ( event->dtEnd().date() ); | 465 | int eventlen = event->dtStart().date().daysTo ( event->dtEnd().date() ); |
457 | bool invalid = false; | 466 | bool invalid = false; |
458 | while( true ) { | 467 | while( true ) { |
459 | if ( incidenceStart.isValid() ) { | 468 | if ( incidenceStart.isValid() ) { |
460 | incidenceEnd = incidenceStart.addDays( eventlen ); | 469 | incidenceEnd = incidenceStart.addDays( eventlen ); |
461 | int st = incidenceStart.date().daysTo( endDate ); | 470 | int st = incidenceStart.date().daysTo( endDate ); |
462 | if ( st >= 0 ) { // start before timeend | 471 | if ( st >= 0 ) { // start before timeend |
463 | int end = mStartDate.daysTo( incidenceEnd.date() ); | 472 | int end = mStartDate.daysTo( incidenceEnd.date() ); |
464 | if ( end >= 0 ) { // end after timestart --- got one! | 473 | if ( end >= 0 ) { // end after timestart --- got one! |
465 | //normalize | 474 | //normalize |
466 | st = timeSpan - st; | 475 | st = timeSpan - st; |
467 | if ( st < 0 ) st = 0; | 476 | if ( st < 0 ) st = 0; |
468 | if ( end > timeSpan ) end = timeSpan; | 477 | if ( end > timeSpan ) end = timeSpan; |
469 | int iii; | 478 | int iii; |
470 | //qDebug("found %s %d %d ",event->summary().latin1(), st, end ); | 479 | //qDebug("found %s %d %d ",event->summary().latin1(), st, end ); |
471 | for ( iii = st;iii<= end;++iii) { | 480 | for ( iii = st;iii<= end;++iii) { |
472 | computeEvent( event, iii ); | 481 | computeEvent( event, iii ); |
473 | } | 482 | } |
474 | } | 483 | } |
475 | } | 484 | } |
476 | } else { | 485 | } else { |
477 | if ( invalid ) | 486 | if ( invalid ) |
478 | break; | 487 | break; |
479 | invalid = true; | 488 | invalid = true; |
480 | //qDebug("invalid %s", event->summary().latin1()); | 489 | //qDebug("invalid %s", event->summary().latin1()); |
481 | incidenceStart = QDateTime( mStartDate ).addSecs( -2 );; | 490 | incidenceStart = QDateTime( mStartDate ).addSecs( -2 );; |
482 | } | 491 | } |
483 | if ( last ) | 492 | if ( last ) |
484 | break; | 493 | break; |
485 | bool ok; | 494 | bool ok; |
486 | incidenceStart = event->getNextOccurence( incidenceStart.addSecs( 1 ) ,&ok ); | 495 | incidenceStart = event->getNextOccurence( incidenceStart.addSecs( 1 ) ,&ok ); |
487 | if ( ! ok ) | 496 | if ( ! ok ) |
488 | break; | 497 | break; |
489 | if ( incidenceStart.date() > endDate ) | 498 | if ( incidenceStart.date() > endDate ) |
490 | break; | 499 | break; |
491 | } | 500 | } |
492 | } else { // no recur | 501 | } else { // no recur |
493 | int st = event->dtStart().date().daysTo( endDate ); | 502 | int st = event->dtStart().date().daysTo( endDate ); |
494 | if ( st >= 0 ) { // start before timeend | 503 | if ( st >= 0 ) { // start before timeend |
495 | int end = mStartDate.daysTo( event->dtEnd().date() ); | 504 | int end = mStartDate.daysTo( event->dtEnd().date() ); |
496 | if ( end >= 0 ) { // end after timestart --- got one! | 505 | if ( end >= 0 ) { // end after timestart --- got one! |
497 | //normalize | 506 | //normalize |
498 | st = timeSpan - st; | 507 | st = timeSpan - st; |
499 | if ( st < 0 ) st = 0; | 508 | if ( st < 0 ) st = 0; |
500 | if ( end > timeSpan ) end = timeSpan; | 509 | if ( end > timeSpan ) end = timeSpan; |
501 | int iii; | 510 | int iii; |
502 | for ( iii = st;iii<= end;++iii) | 511 | for ( iii = st;iii<= end;++iii) |
503 | computeEvent( event, iii ); | 512 | computeEvent( event, iii ); |
504 | } | 513 | } |
505 | } | 514 | } |
506 | } | 515 | } |
507 | } | 516 | } |
508 | int startDay = days[0].dayOfWeek(); // 1...7 7 = sunday | 517 | int startDay = days[0].dayOfWeek(); // 1...7 7 = sunday |
509 | for(i = 0; i < NUMDAYS; i++) { | 518 | for(i = 0; i < NUMDAYS; i++) { |
510 | if ( ( (i+startDay) % 7 == 0 ) ) { | 519 | if ( ( (i+startDay) % 7 == 0 ) ) { |
511 | pDays.setBit(i); | 520 | pDays.setBit(i); |
512 | } | 521 | } |
513 | } | 522 | } |
514 | if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) { | 523 | if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) { |
515 | bDays.fill( false); | 524 | bDays.fill( false); |
516 | // insert due todos | 525 | // insert due todos |
517 | QPtrList<Todo> todos = mCalendar->todos( ); | 526 | QPtrList<Todo> todos = mCalendar->todos( ); |
518 | Todo *todo; | 527 | Todo *todo; |
519 | for(todo = todos.first(); todo; todo = todos.next()) { | 528 | for(todo = todos.first(); todo; todo = todos.next()) { |
520 | //insertTodo( todo ); | 529 | //insertTodo( todo ); |
521 | if ( todo->hasDueDate() ) { | 530 | if ( todo->hasDueDate() ) { |
522 | int day = mStartDate.daysTo( todo->dtDue().date() ); | 531 | int day = mStartDate.daysTo( todo->dtDue().date() ); |
523 | if ( day >= 0 && day < timeSpan + 1) { | 532 | if ( day >= 0 && day < timeSpan + 1) { |
524 | int i = day; | 533 | int i = day; |
525 | QString holiStr = mHolidays[i]; | 534 | QString holiStr = mHolidays[i]; |
526 | pDays.setBit(i); | 535 | pDays.setBit(i); |
527 | if ( !holiStr.isEmpty() ) | 536 | if ( !holiStr.isEmpty() ) |
528 | holiStr += "\n"; | 537 | holiStr += "\n"; |
529 | holiStr += i18n("Todo") + ": "+todo->summary(); | 538 | holiStr += i18n("Todo") + ": "+todo->summary(); |
530 | if ( !todo->location().isEmpty() ) | 539 | if ( !todo->location().isEmpty() ) |
531 | holiStr += " (" + todo->location() + ")"; | 540 | holiStr += " (" + todo->location() + ")"; |
532 | bDays.setBit(i); | 541 | bDays.setBit(i); |
533 | mHolidays[i] =holiStr ; | 542 | mHolidays[i] =holiStr ; |
534 | eDays.setBit(i); | 543 | eDays.setBit(i); |
535 | } | 544 | } |
536 | } | 545 | } |
537 | } | 546 | } |
538 | } | 547 | } |
539 | if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) { | 548 | if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) { |
540 | bDays.fill( false); | 549 | bDays.fill( false); |
541 | // insert due todos | 550 | // insert due todos |
542 | QPtrList<Journal> todos = mCalendar->journals( ); | 551 | QPtrList<Journal> todos = mCalendar->journals( ); |
543 | Journal *todo; | 552 | Journal *todo; |
544 | for(todo = todos.first(); todo; todo = todos.next()) { | 553 | for(todo = todos.first(); todo; todo = todos.next()) { |
545 | int day = mStartDate.daysTo( todo->dtStart().date() ); | 554 | int day = mStartDate.daysTo( todo->dtStart().date() ); |
546 | if ( day >= 0 && day < timeSpan + 1) { | 555 | if ( day >= 0 && day < timeSpan + 1) { |
547 | int i = day; | 556 | int i = day; |
548 | QString holiStr = mHolidays[i]; | 557 | QString holiStr = mHolidays[i]; |
549 | pDays.setBit(i); | 558 | pDays.setBit(i); |
550 | if ( !holiStr.isEmpty() ) | 559 | if ( !holiStr.isEmpty() ) |
551 | holiStr += "\n"; | 560 | holiStr += "\n"; |
552 | holiStr += i18n("Journal"); | 561 | holiStr += i18n("Journal: ")+todo->summary().left(25); |
562 | if ( todo->summary().length() > 25 ) | ||
563 | holiStr +="..."; | ||
553 | bDays.setBit(i); | 564 | bDays.setBit(i); |
554 | mHolidays[i] =holiStr ; | 565 | mHolidays[i] =holiStr ; |
555 | eDays.setBit(i); | 566 | eDays.setBit(i); |
556 | 567 | ||
557 | } | 568 | } |
558 | } | 569 | } |
559 | } | 570 | } |
560 | #else | 571 | #else |
561 | //qDebug("KODayMatrix::updateViewTimed "); | 572 | //qDebug("KODayMatrix::updateViewTimed "); |
562 | for(int i = 0; i < NUMDAYS; i++) { | 573 | for(int i = 0; i < NUMDAYS; i++) { |
563 | // if events are set for the day then remember to draw it bold | 574 | // if events are set for the day then remember to draw it bold |
564 | QPtrList<Event> eventlist = mCalendar->events(days[i]); | 575 | QPtrList<Event> eventlist = mCalendar->events(days[i]); |
565 | Event *event; | 576 | Event *event; |
566 | int numEvents = eventlist.count(); | 577 | int numEvents = eventlist.count(); |
567 | QString holiStr = ""; | 578 | QString holiStr = ""; |
568 | bDays.clearBit(i); | 579 | bDays.clearBit(i); |
569 | hDays.clearBit(i); | 580 | hDays.clearBit(i); |
570 | eDays.clearBit(i); | 581 | eDays.clearBit(i); |
571 | for(event=eventlist.first();event != 0;event=eventlist.next()) { | 582 | for(event=eventlist.first();event != 0;event=eventlist.next()) { |
572 | ushort recurType = event->recurrence()->doesRecur(); | 583 | ushort recurType = event->recurrence()->doesRecur(); |
573 | if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) || | 584 | if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) || |
574 | (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) { | 585 | (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) { |
575 | numEvents--; | 586 | numEvents--; |
576 | } | 587 | } |
577 | if ( event->isHoliday()) { | 588 | if ( event->isHoliday()) { |
578 | hDays.setBit(i); | 589 | hDays.setBit(i); |
579 | if ( !holiStr.isEmpty() ) | 590 | if ( !holiStr.isEmpty() ) |
580 | holiStr += "\n"; | 591 | holiStr += "\n"; |
581 | holiStr += event->summary(); | 592 | holiStr += event->summary(); |
582 | if ( !event->location().isEmpty() ) | 593 | if ( !event->location().isEmpty() ) |
583 | holiStr += " (" + event->location() + ")"; | 594 | holiStr += " (" + event->location() + ")"; |
584 | } | 595 | } |
585 | if ( event->isBirthday()) { | 596 | if ( event->isBirthday()) { |
586 | if ( !holiStr.isEmpty() ) | 597 | if ( !holiStr.isEmpty() ) |
587 | holiStr += "\n"; | 598 | holiStr += "\n"; |
588 | holiStr += i18n("Birthday") + ": "+event->summary(); | 599 | holiStr += i18n("Birthday") + ": "+event->summary(); |
589 | if ( !event->location().isEmpty() ) | 600 | if ( !event->location().isEmpty() ) |
590 | holiStr += " (" + event->location() + ")"; | 601 | holiStr += " (" + event->location() + ")"; |
591 | bDays.setBit(i); | 602 | bDays.setBit(i); |
592 | } | 603 | } |
593 | } | 604 | } |
594 | if ( numEvents ) | 605 | if ( numEvents ) |
595 | eDays.setBit(i); | 606 | eDays.setBit(i); |
596 | //if it is a holy day then draw it red. Sundays are consider holidays, too | 607 | //if it is a holy day then draw it red. Sundays are consider holidays, too |
597 | if ( (KOGlobals::self()->calendarSystem()->dayOfWeek(days[i]) == KOGlobals::self()->calendarSystem()->weekDayOfPray()) || | 608 | if ( (KOGlobals::self()->calendarSystem()->dayOfWeek(days[i]) == KOGlobals::self()->calendarSystem()->weekDayOfPray()) || |
598 | !holiStr.isEmpty()) { | 609 | !holiStr.isEmpty()) { |
599 | mHolidays[i] = holiStr; | 610 | mHolidays[i] = holiStr; |
600 | } else { | 611 | } else { |
601 | mHolidays[i] = QString::null; | 612 | mHolidays[i] = QString::null; |
602 | } | 613 | } |
603 | } | 614 | } |
604 | #endif | 615 | #endif |
605 | mRedrawNeeded = true; | 616 | mRedrawNeeded = true; |
606 | if ( ! mPendingUpdateBeforeRepaint ) | 617 | if ( ! mPendingUpdateBeforeRepaint ) |
607 | repaint(false); | 618 | repaint(false); |
608 | } | 619 | } |
609 | void KODayMatrix::updateView(QDate actdate) | 620 | void KODayMatrix::updateView(QDate actdate) |
610 | { | 621 | { |
611 | if ( mLastView != KOPrefs::instance()->mCurrentDisplayedView ) | 622 | if ( mLastView != KOPrefs::instance()->mCurrentDisplayedView ) |
612 | mRedrawNeeded = true; | 623 | mRedrawNeeded = true; |
613 | mLastView = KOPrefs::instance()->mCurrentDisplayedView; | 624 | mLastView = KOPrefs::instance()->mCurrentDisplayedView; |
614 | if ( ! actdate.isValid() ) { | 625 | if ( ! actdate.isValid() ) { |
615 | //qDebug("date not valid "); | 626 | //qDebug("date not valid "); |
616 | return; | 627 | return; |
617 | } | 628 | } |
618 | mDayChanged = false; | 629 | mDayChanged = false; |
619 | //flag to indicate if the starting day of the matrix has changed by this call | 630 | //flag to indicate if the starting day of the matrix has changed by this call |
620 | //mDayChanged = false; | 631 | //mDayChanged = false; |
621 | // if a new startdate is to be set then apply Cornelius's calculation | 632 | // if a new startdate is to be set then apply Cornelius's calculation |
622 | // of the first day to be shown | 633 | // of the first day to be shown |
623 | if (actdate != startdate) { | 634 | if (actdate != startdate) { |
624 | // reset index of selection according to shift of starting date from startdate to actdate | 635 | // reset index of selection according to shift of starting date from startdate to actdate |
625 | if (mSelStart != NOSELECTION) { | 636 | if (mSelStart != NOSELECTION) { |
626 | int tmp = actdate.daysTo(startdate); | 637 | int tmp = actdate.daysTo(startdate); |
627 | //kdDebug() << "Shift of Selection1: " << mSelStart << " - " << mSelEnd << " -> " << tmp << "(" << offset << ")" << endl; | 638 | //kdDebug() << "Shift of Selection1: " << mSelStart << " - " << mSelEnd << " -> " << tmp << "(" << offset << ")" << endl; |
628 | // shift selection if new one would be visible at least partly ! | 639 | // shift selection if new one would be visible at least partly ! |
629 | 640 | ||
630 | if (mSelStart+tmp < NUMDAYS && mSelEnd+tmp >= 0) { | 641 | if (mSelStart+tmp < NUMDAYS && mSelEnd+tmp >= 0) { |
631 | // nested if is required for next X display pushed from a different month - correction required | 642 | // nested if is required for next X display pushed from a different month - correction required |
632 | // otherwise, for month forward and backward, it must be avoided | 643 | // otherwise, for month forward and backward, it must be avoided |
633 | if( mSelStart > NUMDAYS || mSelStart < 0 ) | 644 | if( mSelStart > NUMDAYS || mSelStart < 0 ) |
634 | mSelStart = mSelStart + tmp; | 645 | mSelStart = mSelStart + tmp; |
635 | if( mSelEnd > NUMDAYS || mSelEnd < 0 ) | 646 | if( mSelEnd > NUMDAYS || mSelEnd < 0 ) |
636 | mSelEnd = mSelEnd + tmp; | 647 | mSelEnd = mSelEnd + tmp; |
637 | } | 648 | } |
638 | } | 649 | } |
639 | startdate = actdate; | 650 | startdate = actdate; |
640 | mDayChanged = true; | 651 | mDayChanged = true; |
641 | recalculateToday(); | 652 | recalculateToday(); |
642 | mRedrawNeeded = true; | 653 | mRedrawNeeded = true; |
643 | } | 654 | } |
644 | //qDebug("restart Timer %d vis: %d", mDayChanged, isVisible() ); | 655 | //qDebug("restart Timer %d vis: %d", mDayChanged, isVisible() ); |
645 | if ( !isVisible() ) { | 656 | if ( !isVisible() ) { |
646 | mPendingUpdateBeforeRepaint = true; | 657 | mPendingUpdateBeforeRepaint = true; |
647 | } else { | 658 | } else { |
648 | #ifdef DESKTOP_VERSION | 659 | #ifdef DESKTOP_VERSION |
649 | //mRepaintTimer->start( 100 ); | 660 | //mRepaintTimer->start( 100 ); |
650 | //updateViewTimed(); | 661 | //updateViewTimed(); |
651 | mUpdateTimer->start( 50 ); | 662 | mUpdateTimer->start( 50 ); |
652 | #else | 663 | #else |
653 | mRepaintTimer->start( 350 ); | 664 | mRepaintTimer->start( 350 ); |
654 | mUpdateTimer->start( 800 ); | 665 | mUpdateTimer->start( 800 ); |
655 | #endif | 666 | #endif |
656 | } | 667 | } |
657 | } | 668 | } |
658 | void KODayMatrix::updateEvents() | 669 | void KODayMatrix::updateEvents() |
659 | { | 670 | { |
660 | if ( !mCalendar ) return; | 671 | if ( !mCalendar ) return; |
661 | 672 | ||
662 | for( int i = 0; i < NUMDAYS; i++ ) { | 673 | for( int i = 0; i < NUMDAYS; i++ ) { |
663 | // if events are set for the day then remember to draw it bold | 674 | // if events are set for the day then remember to draw it bold |
664 | QPtrList<Event> eventlist = mCalendar->events( days[ i ] ); | 675 | QPtrList<Event> eventlist = mCalendar->events( days[ i ] ); |
665 | int numEvents = eventlist.count(); | 676 | int numEvents = eventlist.count(); |
666 | Event *event; | 677 | Event *event; |
667 | for( event = eventlist.first(); event != 0;event=eventlist.next()) { | 678 | for( event = eventlist.first(); event != 0;event=eventlist.next()) { |
668 | ushort recurType = event->doesRecur(); | 679 | ushort recurType = event->doesRecur(); |
669 | 680 | ||
670 | if ( ( recurType == Recurrence::rDaily && | 681 | if ( ( recurType == Recurrence::rDaily && |
671 | !KOPrefs::instance()->mDailyRecur ) || | 682 | !KOPrefs::instance()->mDailyRecur ) || |
672 | ( recurType == Recurrence::rWeekly && | 683 | ( recurType == Recurrence::rWeekly && |
673 | !KOPrefs::instance()->mWeeklyRecur ) ) { | 684 | !KOPrefs::instance()->mWeeklyRecur ) ) { |
674 | numEvents--; | 685 | numEvents--; |
675 | } | 686 | } |
676 | } | 687 | } |
677 | if ( numEvents ) | 688 | if ( numEvents ) |
678 | eDays.setBit(i); | 689 | eDays.setBit(i); |
679 | else | 690 | else |
680 | eDays.clearBit(i); | 691 | eDays.clearBit(i); |
681 | } | 692 | } |
682 | } | 693 | } |
683 | 694 | ||
684 | const QDate& KODayMatrix::getDate(int offset) | 695 | const QDate& KODayMatrix::getDate(int offset) |
685 | { | 696 | { |
686 | if (offset < 0 || offset > NUMDAYS-1) { | 697 | if (offset < 0 || offset > NUMDAYS-1) { |
687 | qDebug("Wrong offset2 %d", offset); | 698 | qDebug("Wrong offset2 %d", offset); |
688 | return days[0]; | 699 | return days[0]; |
689 | } | 700 | } |
690 | return days[offset]; | 701 | return days[offset]; |
691 | } | 702 | } |
692 | 703 | ||
693 | QString KODayMatrix::getHolidayLabel(int offset) | 704 | QString KODayMatrix::getHolidayLabel(int offset) |
694 | { | 705 | { |
695 | if (offset < 0 || offset > NUMDAYS-1) { | 706 | if (offset < 0 || offset > NUMDAYS-1) { |
696 | qDebug("Wrong offset1 %d", offset); | 707 | qDebug("Wrong offset1 %d", offset); |
697 | return QString(); | 708 | return QString(); |
698 | } | 709 | } |
699 | return mHolidays[offset]; | 710 | return mHolidays[offset]; |
700 | } | 711 | } |
701 | 712 | ||
702 | int KODayMatrix::getDayIndexFrom(int x, int y) | 713 | int KODayMatrix::getDayIndexFrom(int x, int y) |
703 | { | 714 | { |
704 | int colModulo = (width()-2) % 7; | 715 | int colModulo = (width()-2) % 7; |
705 | int rowModulo = (height()-2) % 6; | 716 | int rowModulo = (height()-2) % 6; |
706 | #if 0 | 717 | #if 0 |
707 | return 7*(y/daysize.height()) + (KOGlobals::self()->reverseLayout() ? | 718 | return 7*(y/daysize.height()) + (KOGlobals::self()->reverseLayout() ? |
708 | 6 - x/daysize.width() : x/daysize.width()); | 719 | 6 - x/daysize.width() : x/daysize.width()); |
709 | #endif | 720 | #endif |
710 | int xVal = (x-colModulo/2-2)/daysize.width(); | 721 | int xVal = (x-colModulo/2-2)/daysize.width(); |
711 | int yVal = (y-rowModulo/2-2)/daysize.height(); | 722 | int yVal = (y-rowModulo/2-2)/daysize.height(); |
712 | 723 | ||
713 | 724 | ||
714 | return 7*(yVal) + xVal; | 725 | return 7*(yVal) + xVal; |
715 | 726 | ||
716 | } | 727 | } |
717 | 728 | ||
718 | // ---------------------------------------------------------------------------- | 729 | // ---------------------------------------------------------------------------- |
719 | // M O U S E E V E N T H A N D L I N G | 730 | // M O U S E E V E N T H A N D L I N G |
720 | // ---------------------------------------------------------------------------- | 731 | // ---------------------------------------------------------------------------- |
721 | 732 | ||
722 | void KODayMatrix::mousePressEvent (QMouseEvent* e) | 733 | void KODayMatrix::mousePressEvent (QMouseEvent* e) |
723 | { | 734 | { |
724 | 735 | ||
725 | if ( e->button() == LeftButton ) | 736 | if ( e->button() == LeftButton ) |
726 | mouseDown = true; | 737 | mouseDown = true; |
727 | mSelStart = getDayIndexFrom(e->x(), e->y()); | 738 | mSelStart = getDayIndexFrom(e->x(), e->y()); |
728 | if (mSelStart > NUMDAYS-1) mSelStart=NUMDAYS-1; | 739 | if (mSelStart > NUMDAYS-1) mSelStart=NUMDAYS-1; |
729 | mSelInit = mSelStart; | 740 | mSelInit = mSelStart; |
730 | mSelEnd = mSelStart; | 741 | mSelEnd = mSelStart; |
731 | mRedrawNeeded = true; | 742 | mRedrawNeeded = true; |
732 | repaint(false); | 743 | repaint(false); |
733 | } | 744 | } |
734 | 745 | ||
735 | void KODayMatrix::mouseReleaseEvent (QMouseEvent* e) | 746 | void KODayMatrix::mouseReleaseEvent (QMouseEvent* e) |
736 | { | 747 | { |
737 | mRedrawNeeded = true; | 748 | mRedrawNeeded = true; |
738 | if ( e->button() == LeftButton ) | 749 | if ( e->button() == LeftButton ) |
739 | if ( ! mouseDown ) { | 750 | if ( ! mouseDown ) { |
740 | return; | 751 | return; |
741 | } | 752 | } |
742 | else | 753 | else |
743 | mouseDown = false; | 754 | mouseDown = false; |
744 | int tmp = getDayIndexFrom(e->x(), e->y()); | 755 | int tmp = getDayIndexFrom(e->x(), e->y()); |
745 | if (tmp > NUMDAYS-1) tmp=NUMDAYS-1; | 756 | if (tmp > NUMDAYS-1) tmp=NUMDAYS-1; |
746 | 757 | ||
747 | if (mSelInit > tmp) { | 758 | if (mSelInit > tmp) { |
748 | mSelEnd = mSelInit; | 759 | mSelEnd = mSelInit; |
749 | if (tmp != mSelStart) { | 760 | if (tmp != mSelStart) { |
750 | mSelStart = tmp; | 761 | mSelStart = tmp; |
751 | repaint(false); | 762 | repaint(false); |
752 | } | 763 | } |
753 | } else { | 764 | } else { |
754 | mSelStart = mSelInit; | 765 | mSelStart = mSelInit; |
755 | 766 | ||
756 | //repaint only if selection has changed | 767 | //repaint only if selection has changed |
757 | if (tmp != mSelEnd) { | 768 | if (tmp != mSelEnd) { |
758 | mSelEnd = tmp; | 769 | mSelEnd = tmp; |
759 | repaint(false); | 770 | repaint(false); |
760 | } | 771 | } |
761 | } | 772 | } |
762 | 773 | ||
763 | DateList daylist; | 774 | DateList daylist; |
764 | if ( mSelStart < 0 ) | 775 | if ( mSelStart < 0 ) |
765 | mSelStart = 0; | 776 | mSelStart = 0; |
766 | for (int i = mSelStart; i <= mSelEnd; i++) { | 777 | for (int i = mSelStart; i <= mSelEnd; i++) { |
767 | daylist.append(days[i]); | 778 | daylist.append(days[i]); |
768 | } | 779 | } |
769 | emit selected((const DateList)daylist); | 780 | emit selected((const DateList)daylist); |
770 | 781 | ||
771 | } | 782 | } |
772 | 783 | ||
773 | void KODayMatrix::mouseMoveEvent (QMouseEvent* e) | 784 | void KODayMatrix::mouseMoveEvent (QMouseEvent* e) |
774 | { | 785 | { |
775 | if ( ! mouseDown ) { | 786 | if ( ! mouseDown ) { |
776 | return; | 787 | return; |
777 | } | 788 | } |
778 | mRedrawNeeded = true; | 789 | mRedrawNeeded = true; |
779 | int tmp = getDayIndexFrom(e->x(), e->y()); | 790 | int tmp = getDayIndexFrom(e->x(), e->y()); |
780 | if (tmp > NUMDAYS-1) tmp=NUMDAYS-1; | 791 | if (tmp > NUMDAYS-1) tmp=NUMDAYS-1; |
781 | 792 | ||
782 | if (mSelInit > tmp) { | 793 | if (mSelInit > tmp) { |
783 | mSelEnd = mSelInit; | 794 | mSelEnd = mSelInit; |
784 | if (tmp != mSelStart) { | 795 | if (tmp != mSelStart) { |
785 | mSelStart = tmp; | 796 | mSelStart = tmp; |
786 | repaint(false); | 797 | repaint(false); |
787 | } | 798 | } |
788 | } else { | 799 | } else { |
789 | mSelStart = mSelInit; | 800 | mSelStart = mSelInit; |
790 | 801 | ||
791 | //repaint only if selection has changed | 802 | //repaint only if selection has changed |
792 | if (tmp != mSelEnd) { | 803 | if (tmp != mSelEnd) { |
793 | mSelEnd = tmp; | 804 | mSelEnd = tmp; |
794 | repaint(false); | 805 | repaint(false); |
795 | } | 806 | } |
796 | } | 807 | } |
797 | } | 808 | } |
798 | 809 | ||
799 | // ---------------------------------------------------------------------------- | 810 | // ---------------------------------------------------------------------------- |
800 | // D R A G ' N D R O P H A N D L I N G | 811 | // D R A G ' N D R O P H A N D L I N G |
801 | // ---------------------------------------------------------------------------- | 812 | // ---------------------------------------------------------------------------- |
802 | 813 | ||
803 | void KODayMatrix::dragEnterEvent(QDragEnterEvent *e) | 814 | void KODayMatrix::dragEnterEvent(QDragEnterEvent *e) |
804 | { | 815 | { |
805 | #ifndef KORG_NODND | 816 | #ifndef KORG_NODND |
806 | if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { | 817 | if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { |
807 | e->ignore(); | 818 | e->ignore(); |
808 | return; | 819 | return; |
809 | } | 820 | } |
810 | 821 | ||
811 | // some visual feedback | 822 | // some visual feedback |
812 | // oldPalette = palette(); | 823 | // oldPalette = palette(); |
813 | // setPalette(my_HilitePalette); | 824 | // setPalette(my_HilitePalette); |
814 | // update(); | 825 | // update(); |
815 | #endif | 826 | #endif |
816 | } | 827 | } |
817 | 828 | ||
818 | void KODayMatrix::dragMoveEvent(QDragMoveEvent *e) | 829 | void KODayMatrix::dragMoveEvent(QDragMoveEvent *e) |
819 | { | 830 | { |
820 | #ifndef KORG_NODND | 831 | #ifndef KORG_NODND |
821 | if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { | 832 | if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { |
822 | e->ignore(); | 833 | e->ignore(); |
823 | return; | 834 | return; |
824 | } | 835 | } |
825 | 836 | ||
826 | e->accept(); | 837 | e->accept(); |
827 | #endif | 838 | #endif |
828 | } | 839 | } |
829 | 840 | ||
830 | void KODayMatrix::dragLeaveEvent(QDragLeaveEvent */*dl*/) | 841 | void KODayMatrix::dragLeaveEvent(QDragLeaveEvent */*dl*/) |
831 | { | 842 | { |
832 | #ifndef KORG_NODND | 843 | #ifndef KORG_NODND |
833 | // setPalette(oldPalette); | 844 | // setPalette(oldPalette); |
834 | // update(); | 845 | // update(); |
835 | #endif | 846 | #endif |
836 | } | 847 | } |
837 | 848 | ||
838 | void KODayMatrix::dropEvent(QDropEvent *e) | 849 | void KODayMatrix::dropEvent(QDropEvent *e) |
839 | { | 850 | { |
840 | #ifndef KORG_NODND | 851 | #ifndef KORG_NODND |
841 | // kdDebug() << "KODayMatrix::dropEvent(e) begin" << endl; | 852 | // kdDebug() << "KODayMatrix::dropEvent(e) begin" << endl; |
842 | 853 | ||
843 | if (!mCalendar || !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { | 854 | if (!mCalendar || !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { |
844 | e->ignore(); | 855 | e->ignore(); |
845 | return; | 856 | return; |
846 | } | 857 | } |
847 | 858 | ||
848 | DndFactory factory( mCalendar ); | 859 | DndFactory factory( mCalendar ); |
849 | Event *event = factory.createDrop(e); | 860 | Event *event = factory.createDrop(e); |
850 | 861 | ||
851 | if (event) { | 862 | if (event) { |
852 | e->acceptAction(); | 863 | e->acceptAction(); |
853 | 864 | ||
854 | Event *existingEvent = mCalendar->event(event->uid()); | 865 | Event *existingEvent = mCalendar->event(event->uid()); |
855 | 866 | ||
856 | if(existingEvent) { | 867 | if(existingEvent) { |
857 | // uniquify event | 868 | // uniquify event |
858 | event->recreate(); | 869 | event->recreate(); |
859 | /* | 870 | /* |
860 | KMessageBox::sorry(this, | 871 | KMessageBox::sorry(this, |
861 | i18n("Event already exists in this calendar."), | 872 | i18n("Event already exists in this calendar."), |
862 | i18n("Drop Event")); | 873 | i18n("Drop Event")); |
863 | delete event; | 874 | delete event; |
864 | return; | 875 | return; |
865 | */ | 876 | */ |
866 | } | 877 | } |
867 | // kdDebug() << "Drop new Event" << endl; | 878 | // kdDebug() << "Drop new Event" << endl; |
868 | // Adjust date | 879 | // Adjust date |
869 | QDateTime start = event->dtStart(); | 880 | QDateTime start = event->dtStart(); |
870 | QDateTime end = event->dtEnd(); | 881 | QDateTime end = event->dtEnd(); |
871 | int duration = start.daysTo(end); | 882 | int duration = start.daysTo(end); |
872 | int idx = getDayIndexFrom(e->pos().x(), e->pos().y()); | 883 | int idx = getDayIndexFrom(e->pos().x(), e->pos().y()); |
873 | 884 | ||
874 | start.setDate(days[idx]); | 885 | start.setDate(days[idx]); |
875 | end.setDate(days[idx].addDays(duration)); | 886 | end.setDate(days[idx].addDays(duration)); |
876 | 887 | ||
877 | event->setDtStart(start); | 888 | event->setDtStart(start); |
878 | event->setDtEnd(end); | 889 | event->setDtEnd(end); |
879 | mCalendar->addEvent(event); | 890 | mCalendar->addEvent(event); |
880 | 891 | ||
881 | emit eventDropped(event); | 892 | emit eventDropped(event); |
882 | } else { | 893 | } else { |
883 | // kdDebug() << "KODayMatrix::dropEvent(): Event from drop not decodable" << endl; | 894 | // kdDebug() << "KODayMatrix::dropEvent(): Event from drop not decodable" << endl; |
884 | e->ignore(); | 895 | e->ignore(); |
885 | } | 896 | } |
886 | #endif | 897 | #endif |
887 | } | 898 | } |
888 | 899 | ||
889 | // ---------------------------------------------------------------------------- | 900 | // ---------------------------------------------------------------------------- |
890 | // P A I N T E V E N T H A N D L I N G | 901 | // P A I N T E V E N T H A N D L I N G |
891 | // ---------------------------------------------------------------------------- | 902 | // ---------------------------------------------------------------------------- |
892 | 903 | ||
893 | void KODayMatrix::paintEvent(QPaintEvent * pevent) | 904 | void KODayMatrix::paintEvent(QPaintEvent * pevent) |
894 | { | 905 | { |
895 | 906 | ||
896 | if ( width() <= 0 || height() <= 0 ) | 907 | if ( width() <= 0 || height() <= 0 ) |
897 | return; | 908 | return; |
898 | if ( mPendingUpdateBeforeRepaint ) { | 909 | if ( mPendingUpdateBeforeRepaint ) { |
899 | updateViewTimed(); | 910 | updateViewTimed(); |
900 | mPendingUpdateBeforeRepaint = false; | 911 | mPendingUpdateBeforeRepaint = false; |
901 | } | 912 | } |
902 | #if 0 | 913 | #if 0 |
903 | if ( myPix.width() != width() || myPix.height()!=height() ) { | 914 | if ( myPix.width() != width() || myPix.height()!=height() ) { |
904 | myPix.resize(size() ); | 915 | myPix.resize(size() ); |
905 | mRedrawNeeded = true; | 916 | mRedrawNeeded = true; |
906 | } | 917 | } |
907 | #endif | 918 | #endif |
908 | if ( oldW != width() || oldH !=height() ) | 919 | if ( oldW != width() || oldH !=height() ) |
909 | mRedrawNeeded = true; | 920 | mRedrawNeeded = true; |
910 | 921 | ||
911 | oldH = height() ; | 922 | oldH = height() ; |
912 | oldW = width(); | 923 | oldW = width(); |
913 | if ( myPix.width() < width() || myPix.height() < height() ) { | 924 | if ( myPix.width() < width() || myPix.height() < height() ) { |
914 | myPix.resize(size() ); | 925 | myPix.resize(size() ); |
915 | mRedrawNeeded = true; | 926 | mRedrawNeeded = true; |
916 | 927 | ||
917 | } | 928 | } |
918 | 929 | ||
919 | if ( mRedrawNeeded ) { | 930 | if ( mRedrawNeeded ) { |
920 | //qDebug("REDRAW "); | 931 | //qDebug("REDRAW "); |
921 | QPainter p(&myPix); | 932 | QPainter p(&myPix); |
922 | p.setFont(font()); | 933 | p.setFont(font()); |
923 | 934 | ||
924 | 935 | ||
925 | int dheight = daysize.height(); | 936 | int dheight = daysize.height(); |
926 | int dwidth = daysize.width(); | 937 | int dwidth = daysize.width(); |
927 | int row,col; | 938 | int row,col; |
928 | int selw, selh; | 939 | int selw, selh; |
929 | int xyOff = frameWidth(); | 940 | int xyOff = frameWidth(); |
930 | int colModulo = (width()-2) % 7; | 941 | int colModulo = (width()-2) % 7; |
931 | int rowModulo = (height()-2) % 6; | 942 | int rowModulo = (height()-2) % 6; |
932 | //qDebug("col %d row %d ",colModulo,rowModulo ); | 943 | //qDebug("col %d row %d ",colModulo,rowModulo ); |
933 | 944 | ||
934 | bool isRTL = KOGlobals::self()->reverseLayout(); | 945 | bool isRTL = KOGlobals::self()->reverseLayout(); |
935 | 946 | ||
936 | // draw background and topleft frame | 947 | // draw background and topleft frame |
diff --git a/korganizer/koeventviewer.cpp b/korganizer/koeventviewer.cpp index 6315827..dcbb99f 100644 --- a/korganizer/koeventviewer.cpp +++ b/korganizer/koeventviewer.cpp | |||
@@ -320,481 +320,484 @@ void KOEventViewer::appendEvent(Event *event, int mode ) | |||
320 | mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate ))); | 320 | mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate ))); |
321 | } | 321 | } |
322 | } else { | 322 | } else { |
323 | if (event->isMultiDay()) { | 323 | if (event->isMultiDay()) { |
324 | mText.append(i18n("<p><b>From:</b> %1</p> ") | 324 | mText.append(i18n("<p><b>From:</b> %1</p> ") |
325 | .arg(event->dtStartStr( shortDate))); | 325 | .arg(event->dtStartStr( shortDate))); |
326 | mText.append(i18n("<p><b>To:</b> %1</p>") | 326 | mText.append(i18n("<p><b>To:</b> %1</p>") |
327 | .arg(event->dtEndStr(shortDate))); | 327 | .arg(event->dtEndStr(shortDate))); |
328 | } else { | 328 | } else { |
329 | mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>") | 329 | mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>") |
330 | .arg(event->dtStartTimeStr()) | 330 | .arg(event->dtStartTimeStr()) |
331 | .arg(event->dtEndTimeStr())); | 331 | .arg(event->dtEndTimeStr())); |
332 | mText.append(i18n("<p><b>On:</b> %1</p> ") | 332 | mText.append(i18n("<p><b>On:</b> %1</p> ") |
333 | .arg(event->dtStartDateStr( shortDate ))); | 333 | .arg(event->dtStartDateStr( shortDate ))); |
334 | } | 334 | } |
335 | } | 335 | } |
336 | if (!event->location().isEmpty()) { | 336 | if (!event->location().isEmpty()) { |
337 | addTag("p","<b>"+i18n("Location: ")+"</b>"+ deTag(event->location() ) ); | 337 | addTag("p","<b>"+i18n("Location: ")+"</b>"+ deTag(event->location() ) ); |
338 | mMailSubject += i18n(" at ") + event->location(); | 338 | mMailSubject += i18n(" at ") + event->location(); |
339 | } | 339 | } |
340 | if (event->recurrence()->doesRecur()) { | 340 | if (event->recurrence()->doesRecur()) { |
341 | 341 | ||
342 | QString recurText = event->recurrence()->recurrenceText(); | 342 | QString recurText = event->recurrence()->recurrenceText(); |
343 | addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>"); | 343 | addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>"); |
344 | bool ok; | 344 | bool ok; |
345 | QDate start = QDate::currentDate(); | 345 | QDate start = QDate::currentDate(); |
346 | QDateTime next; | 346 | QDateTime next; |
347 | next = event->getNextOccurence( QDateTime::currentDateTime() , &ok ); | 347 | next = event->getNextOccurence( QDateTime::currentDateTime() , &ok ); |
348 | if ( ok ) { | 348 | if ( ok ) { |
349 | if ( wideScreen ){ | 349 | if ( wideScreen ){ |
350 | addTag("p",i18n("<b>Next recurrence is on:</b>") +" " + KGlobal::locale()->formatDate( next.date(), shortDate ) ); | 350 | addTag("p",i18n("<b>Next recurrence is on:</b>") +" " + KGlobal::locale()->formatDate( next.date(), shortDate ) ); |
351 | } else { | 351 | } else { |
352 | addTag("p",i18n("<b>Next recurrence is on:</b>") ); | 352 | addTag("p",i18n("<b>Next recurrence is on:</b>") ); |
353 | addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate )); | 353 | addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate )); |
354 | } | 354 | } |
355 | mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( next, true ); | 355 | mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( next, true ); |
356 | 356 | ||
357 | } else { | 357 | } else { |
358 | bool last; | 358 | bool last; |
359 | QDate nextd; | 359 | QDate nextd; |
360 | nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last ); | 360 | nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last ); |
361 | if ( last ) { | 361 | if ( last ) { |
362 | if ( wideScreen ){ | 362 | if ( wideScreen ){ |
363 | addTag("p",i18n("<b>Last recurrence was on:</b>") +" " + KGlobal::locale()->formatDate( nextd, shortDate )); | 363 | addTag("p",i18n("<b>Last recurrence was on:</b>") +" " + KGlobal::locale()->formatDate( nextd, shortDate )); |
364 | } else{ | 364 | } else{ |
365 | addTag("p",i18n("<b>Last recurrence was on:</b>") ); | 365 | addTag("p",i18n("<b>Last recurrence was on:</b>") ); |
366 | addTag("p", KGlobal::locale()->formatDate( nextd, shortDate )); | 366 | addTag("p", KGlobal::locale()->formatDate( nextd, shortDate )); |
367 | } | 367 | } |
368 | } | 368 | } |
369 | } | 369 | } |
370 | } else { | 370 | } else { |
371 | mMailSubject += i18n(" - " )+event->dtStartStr( true ); | 371 | mMailSubject += i18n(" - " )+event->dtStartStr( true ); |
372 | 372 | ||
373 | } | 373 | } |
374 | 374 | ||
375 | 375 | ||
376 | if (event->isAlarmEnabled()) { | 376 | if (event->isAlarmEnabled()) { |
377 | Alarm *alarm =event->alarms().first() ; | 377 | Alarm *alarm =event->alarms().first() ; |
378 | QDateTime t = alarm->time(); | 378 | QDateTime t = alarm->time(); |
379 | QString s =i18n("( %1 before )").arg( alarm->offsetText() ); | 379 | QString s =i18n("( %1 before )").arg( alarm->offsetText() ); |
380 | if(wideScreen ){ | 380 | if(wideScreen ){ |
381 | addTag("p",i18n("<b>Alarm on: ") + s +" </b>"+ KGlobal::locale()->formatDateTime( t, shortDate )); | 381 | addTag("p",i18n("<b>Alarm on: ") + s +" </b>"+ KGlobal::locale()->formatDateTime( t, shortDate )); |
382 | }else{ | 382 | }else{ |
383 | addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); | 383 | addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); |
384 | addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); | 384 | addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); |
385 | } | 385 | } |
386 | //addTag("p",s); | 386 | //addTag("p",s); |
387 | } | 387 | } |
388 | 388 | ||
389 | addTag("p","<b>"+i18n("Access: ") + "</b>" + event->secrecyStr()); | 389 | addTag("p","<b>"+i18n("Access: ") + "</b>" + event->secrecyStr()); |
390 | 390 | ||
391 | formatCategories(event); | 391 | formatCategories(event); |
392 | 392 | ||
393 | formatAttendees(event); | 393 | formatAttendees(event); |
394 | 394 | ||
395 | if ( KOPrefs::instance()->mEVshowCreated ) { | 395 | if ( KOPrefs::instance()->mEVshowCreated ) { |
396 | if(wideScreen ){ | 396 | if(wideScreen ){ |
397 | addTag("p",i18n("<b>Created: ") +" </b>"+KGlobal::locale()->formatDateTime( event->created(), shortDate )); | 397 | addTag("p",i18n("<b>Created: ") +" </b>"+KGlobal::locale()->formatDateTime( event->created(), shortDate )); |
398 | }else{ | 398 | }else{ |
399 | addTag("p",i18n("<b>Created: ") +" </b>"); | 399 | addTag("p",i18n("<b>Created: ") +" </b>"); |
400 | addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate )); | 400 | addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate )); |
401 | } | 401 | } |
402 | 402 | ||
403 | 403 | ||
404 | } | 404 | } |
405 | if ( KOPrefs::instance()->mEVshowChanged ) { | 405 | if ( KOPrefs::instance()->mEVshowChanged ) { |
406 | if(wideScreen ){ | 406 | if(wideScreen ){ |
407 | addTag("p",i18n("<b>Last modified: ") +" </b>" + KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ) ); | 407 | addTag("p",i18n("<b>Last modified: ") +" </b>" + KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ) ); |
408 | }else{ | 408 | }else{ |
409 | addTag("p",i18n("<b>Last modified: ") +" </b>"); | 409 | addTag("p",i18n("<b>Last modified: ") +" </b>"); |
410 | addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate )); | 410 | addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate )); |
411 | } | 411 | } |
412 | 412 | ||
413 | } | 413 | } |
414 | if ( KOPrefs::instance()->mEVshowDetails ) { | 414 | if ( KOPrefs::instance()->mEVshowDetails ) { |
415 | if (!event->description().isEmpty()) { | 415 | if (!event->description().isEmpty()) { |
416 | addTag("p",i18n("<b>Details: </b>")); | 416 | addTag("p",i18n("<b>Details: </b>")); |
417 | addTag("p",deTag(event->description())); | 417 | addTag("p",deTag(event->description())); |
418 | } | 418 | } |
419 | } | 419 | } |
420 | setText(mText); | 420 | setText(mText); |
421 | //QWhatsThis::add(this,mText); | 421 | //QWhatsThis::add(this,mText); |
422 | 422 | ||
423 | } | 423 | } |
424 | 424 | ||
425 | void KOEventViewer::appendTodo(Todo *event, int mode ) | 425 | void KOEventViewer::appendTodo(Todo *event, int mode ) |
426 | { | 426 | { |
427 | mMailSubject = ""; | 427 | mMailSubject = ""; |
428 | mCurrentIncidence = event; | 428 | mCurrentIncidence = event; |
429 | topLevelWidget()->setCaption(i18n("Todo Viewer")); | 429 | topLevelWidget()->setCaption(i18n("Todo Viewer")); |
430 | bool shortDate = KOPrefs::instance()->mShortDateInViewer; | 430 | bool shortDate = KOPrefs::instance()->mShortDateInViewer; |
431 | bool wideScreen = ( QApplication::desktop()->width() >= 640 ); | 431 | bool wideScreen = ( QApplication::desktop()->width() >= 640 ); |
432 | if (mode == 0 ) { | 432 | if (mode == 0 ) { |
433 | addTag("h2",deTag(event->summary())); | 433 | addTag("h2",deTag(event->summary())); |
434 | formatReadOnly(event); | 434 | formatReadOnly(event); |
435 | } | 435 | } |
436 | else { | 436 | else { |
437 | if ( mColorMode == 1 ) { | 437 | if ( mColorMode == 1 ) { |
438 | mText +="<font color=\"#00A000\">"; | 438 | mText +="<font color=\"#00A000\">"; |
439 | } | 439 | } |
440 | if ( mColorMode == 2 ) { | 440 | if ( mColorMode == 2 ) { |
441 | mText +="<font color=\"#B00000\">"; | 441 | mText +="<font color=\"#B00000\">"; |
442 | } | 442 | } |
443 | if ( mode == 1 ) { | 443 | if ( mode == 1 ) { |
444 | addTag("h2",i18n( "Local: " ) +deTag(event->summary())); | 444 | addTag("h2",i18n( "Local: " ) +deTag(event->summary())); |
445 | } else { | 445 | } else { |
446 | addTag("h2",i18n( "Remote: " ) +deTag(event->summary())); | 446 | addTag("h2",i18n( "Remote: " ) +deTag(event->summary())); |
447 | } | 447 | } |
448 | formatReadOnly(event); | 448 | formatReadOnly(event); |
449 | addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); | 449 | addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); |
450 | if ( mColorMode ) | 450 | if ( mColorMode ) |
451 | mText += "</font>"; | 451 | mText += "</font>"; |
452 | } | 452 | } |
453 | mMailSubject += i18n( "Todo " )+ event->summary(); | 453 | mMailSubject += i18n( "Todo " )+ event->summary(); |
454 | 454 | ||
455 | if ( event->percentComplete() == 100 && event->hasCompletedDate() ) { | 455 | if ( event->percentComplete() == 100 && event->hasCompletedDate() ) { |
456 | mText +="<font color=\"#B00000\">"; | 456 | mText +="<font color=\"#B00000\">"; |
457 | addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) ); | 457 | addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) ); |
458 | mText += "</font>"; | 458 | mText += "</font>"; |
459 | } else { | 459 | } else { |
460 | mText.append(i18n("<p><i>%1 % completed</i></p>") | 460 | mText.append(i18n("<p><i>%1 % completed</i></p>") |
461 | .arg(event->percentComplete())); | 461 | .arg(event->percentComplete())); |
462 | } | 462 | } |
463 | 463 | ||
464 | if (event->cancelled ()) { | 464 | if (event->cancelled ()) { |
465 | mText +="<font color=\"#B00000\">"; | 465 | mText +="<font color=\"#B00000\">"; |
466 | addTag("i",i18n("This todo has been cancelled!")); | 466 | addTag("i",i18n("This todo has been cancelled!")); |
467 | mText.append("<br>"); | 467 | mText.append("<br>"); |
468 | mText += "</font>"; | 468 | mText += "</font>"; |
469 | mMailSubject += i18n("(cancelled)"); | 469 | mMailSubject += i18n("(cancelled)"); |
470 | } | 470 | } |
471 | 471 | ||
472 | 472 | ||
473 | 473 | ||
474 | if (event->recurrence()->doesRecur()) { | 474 | if (event->recurrence()->doesRecur()) { |
475 | 475 | ||
476 | QString recurText = event->recurrence()->recurrenceText(); | 476 | QString recurText = event->recurrence()->recurrenceText(); |
477 | addTag("p","<em>" + i18n("This is a %1 recurring todo.").arg(recurText ) + "</em>"); | 477 | addTag("p","<em>" + i18n("This is a %1 recurring todo.").arg(recurText ) + "</em>"); |
478 | 478 | ||
479 | } | 479 | } |
480 | if (event->hasStartDate()) { | 480 | if (event->hasStartDate()) { |
481 | mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer))); | 481 | mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer))); |
482 | } | 482 | } |
483 | if (event->hasDueDate()) { | 483 | if (event->hasDueDate()) { |
484 | mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer))); | 484 | mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer))); |
485 | mMailSubject += i18n(" - " )+event->dtDueStr( true ); | 485 | mMailSubject += i18n(" - " )+event->dtDueStr( true ); |
486 | } | 486 | } |
487 | if (!event->location().isEmpty()) { | 487 | if (!event->location().isEmpty()) { |
488 | addTag("p","<b>"+i18n("Location: ")+"</b>"+ deTag(event->location() ) ); | 488 | addTag("p","<b>"+i18n("Location: ")+"</b>"+ deTag(event->location() ) ); |
489 | mMailSubject += i18n(" at ") + event->location(); | 489 | mMailSubject += i18n(" at ") + event->location(); |
490 | } | 490 | } |
491 | mText.append(i18n("<p><b>Priority:</b> %2</p>") | 491 | mText.append(i18n("<p><b>Priority:</b> %2</p>") |
492 | .arg(QString::number(event->priority()))); | 492 | .arg(QString::number(event->priority()))); |
493 | 493 | ||
494 | if (event->isAlarmEnabled()) { | 494 | if (event->isAlarmEnabled()) { |
495 | Alarm *alarm =event->alarms().first() ; | 495 | Alarm *alarm =event->alarms().first() ; |
496 | QDateTime t = alarm->time(); | 496 | QDateTime t = alarm->time(); |
497 | QString s =i18n("( %1 before )").arg( alarm->offsetText() ); | 497 | QString s =i18n("( %1 before )").arg( alarm->offsetText() ); |
498 | if ( wideScreen ) { | 498 | if ( wideScreen ) { |
499 | addTag("p",i18n("<b>Alarm on: ") + s +" </b>"+ KGlobal::locale()->formatDateTime( t, shortDate )); | 499 | addTag("p",i18n("<b>Alarm on: ") + s +" </b>"+ KGlobal::locale()->formatDateTime( t, shortDate )); |
500 | } else { | 500 | } else { |
501 | addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); | 501 | addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); |
502 | addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); | 502 | addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); |
503 | } | 503 | } |
504 | } | 504 | } |
505 | 505 | ||
506 | addTag("p","<b>"+i18n("Access: ") + "</b>" + event->secrecyStr()); | 506 | addTag("p","<b>"+i18n("Access: ") + "</b>" + event->secrecyStr()); |
507 | 507 | ||
508 | formatCategories(event); | 508 | formatCategories(event); |
509 | 509 | ||
510 | formatAttendees(event); | 510 | formatAttendees(event); |
511 | 511 | ||
512 | if ( KOPrefs::instance()->mEVshowCreated ) { | 512 | if ( KOPrefs::instance()->mEVshowCreated ) { |
513 | if(wideScreen ){ | 513 | if(wideScreen ){ |
514 | 514 | ||
515 | addTag("p",i18n("<b>Created: ") +" </b>"+KGlobal::locale()->formatDateTime( event->created(), shortDate )); | 515 | addTag("p",i18n("<b>Created: ") +" </b>"+KGlobal::locale()->formatDateTime( event->created(), shortDate )); |
516 | 516 | ||
517 | } else { | 517 | } else { |
518 | addTag("p",i18n("<b>Created: ") +" </b>"); | 518 | addTag("p",i18n("<b>Created: ") +" </b>"); |
519 | addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate )); | 519 | addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate )); |
520 | } | 520 | } |
521 | } | 521 | } |
522 | if ( KOPrefs::instance()->mEVshowChanged ) { | 522 | if ( KOPrefs::instance()->mEVshowChanged ) { |
523 | if(wideScreen ){ | 523 | if(wideScreen ){ |
524 | addTag("p",i18n("<b>Last modified: ") +" </b>" +KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ) ); | 524 | addTag("p",i18n("<b>Last modified: ") +" </b>" +KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ) ); |
525 | 525 | ||
526 | } else { | 526 | } else { |
527 | addTag("p",i18n("<b>Last modified: ") +" </b>"); | 527 | addTag("p",i18n("<b>Last modified: ") +" </b>"); |
528 | addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate )); | 528 | addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate )); |
529 | } | 529 | } |
530 | } | 530 | } |
531 | if ( event->relatedTo() ) { | 531 | if ( event->relatedTo() ) { |
532 | addTag("b",i18n("Parent todo:<br>")); | 532 | addTag("b",i18n("Parent todo:<br>")); |
533 | mText.append(deTag(event->relatedTo()->summary())+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>"); | 533 | mText.append(deTag(event->relatedTo()->summary())+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>"); |
534 | } | 534 | } |
535 | QPtrList<Incidence> Relations = event->relations(); | 535 | QPtrList<Incidence> Relations = event->relations(); |
536 | Incidence *to; | 536 | Incidence *to; |
537 | if ( Relations.first() ) | 537 | if ( Relations.first() ) |
538 | addTag("b",i18n("Sub todos:<br>")); | 538 | addTag("b",i18n("Sub todos:<br>")); |
539 | for (to=Relations.first();to;to=Relations.next()) { | 539 | for (to=Relations.first();to;to=Relations.next()) { |
540 | mText.append( deTag(to->summary())+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>"); | 540 | mText.append( deTag(to->summary())+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>"); |
541 | 541 | ||
542 | } | 542 | } |
543 | 543 | ||
544 | if ( KOPrefs::instance()->mEVshowDetails ) { | 544 | if ( KOPrefs::instance()->mEVshowDetails ) { |
545 | if (!event->description().isEmpty()) { | 545 | if (!event->description().isEmpty()) { |
546 | addTag("p",i18n("<b>Details: </b>")); | 546 | addTag("p",i18n("<b>Details: </b>")); |
547 | addTag("p",deTag(event->description())); | 547 | addTag("p",deTag(event->description())); |
548 | } | 548 | } |
549 | } | 549 | } |
550 | setText(mText); | 550 | setText(mText); |
551 | } | 551 | } |
552 | 552 | ||
553 | void KOEventViewer::formatCategories(Incidence *event) | 553 | void KOEventViewer::formatCategories(Incidence *event) |
554 | { | 554 | { |
555 | if (!event->categoriesStr().isEmpty()) { | 555 | if (!event->categoriesStr().isEmpty()) { |
556 | if (event->categories().count() == 1) { | 556 | if (event->categories().count() == 1) { |
557 | addTag("p","<b>"+i18n("Category") + ":</b> " + event->categoriesStrWithSpace()); | 557 | addTag("p","<b>"+i18n("Category") + ":</b> " + event->categoriesStrWithSpace()); |
558 | } else { | 558 | } else { |
559 | addTag("p","<b>"+i18n("Categories")+":</b> " + event->categoriesStrWithSpace() ) ; | 559 | addTag("p","<b>"+i18n("Categories")+":</b> " + event->categoriesStrWithSpace() ) ; |
560 | } | 560 | } |
561 | } | 561 | } |
562 | } | 562 | } |
563 | void KOEventViewer::formatAttendees(Incidence *event) | 563 | void KOEventViewer::formatAttendees(Incidence *event) |
564 | { | 564 | { |
565 | QPtrList<Attendee> attendees = event->attendees(); | 565 | QPtrList<Attendee> attendees = event->attendees(); |
566 | if (attendees.count()) { | 566 | if (attendees.count()) { |
567 | 567 | ||
568 | 568 | ||
569 | QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small); | 569 | QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small); |
570 | QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small); | 570 | QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small); |
571 | addTag("h3",i18n("Organizer")); | 571 | addTag("h3",i18n("Organizer")); |
572 | mText.append("<ul><li>"); | 572 | mText.append("<ul><li>"); |
573 | #ifndef KORG_NOKABC | 573 | #ifndef KORG_NOKABC |
574 | 574 | ||
575 | #ifdef DESKTOP_VERSION | 575 | #ifdef DESKTOP_VERSION |
576 | KABC::AddressBook *add_book = KABC::StdAddressBook::self(); | 576 | KABC::AddressBook *add_book = KABC::StdAddressBook::self(); |
577 | KABC::Addressee::List addressList; | 577 | KABC::Addressee::List addressList; |
578 | addressList = add_book->findByEmail(event->organizer()); | 578 | addressList = add_book->findByEmail(event->organizer()); |
579 | KABC::Addressee o = addressList.first(); | 579 | KABC::Addressee o = addressList.first(); |
580 | if (!o.isEmpty() && addressList.size()<2) { | 580 | if (!o.isEmpty() && addressList.size()<2) { |
581 | mText += "<a href=\"uid:" + o.uid() + "\">"; | 581 | mText += "<a href=\"uid:" + o.uid() + "\">"; |
582 | mText += o.formattedName(); | 582 | mText += o.formattedName(); |
583 | mText += "</a>\n"; | 583 | mText += "</a>\n"; |
584 | } else { | 584 | } else { |
585 | mText.append(event->organizer()); | 585 | mText.append(event->organizer()); |
586 | } | 586 | } |
587 | #else //DESKTOP_VERSION | 587 | #else //DESKTOP_VERSION |
588 | mText += "<a href=\"uid:organizer\">"; | 588 | mText += "<a href=\"uid:organizer\">"; |
589 | mText += event->organizer(); | 589 | mText += event->organizer(); |
590 | mText += "</a>\n"; | 590 | mText += "</a>\n"; |
591 | #endif //DESKTOP_VERSION | 591 | #endif //DESKTOP_VERSION |
592 | 592 | ||
593 | 593 | ||
594 | #else | 594 | #else |
595 | mText.append(event->organizer()); | 595 | mText.append(event->organizer()); |
596 | #endif | 596 | #endif |
597 | 597 | ||
598 | if (iconPath) { | 598 | if (iconPath) { |
599 | mText += " <a href=\"mailto:" + event->organizer() + "\">"; | 599 | mText += " <a href=\"mailto:" + event->organizer() + "\">"; |
600 | mText += "<IMG src=\"" + iconPath + "\">"; | 600 | mText += "<IMG src=\"" + iconPath + "\">"; |
601 | mText += "</a>\n"; | 601 | mText += "</a>\n"; |
602 | } | 602 | } |
603 | mText.append("</li></ul>"); | 603 | mText.append("</li></ul>"); |
604 | 604 | ||
605 | addTag("h3",i18n("Attendees")); | 605 | addTag("h3",i18n("Attendees")); |
606 | Attendee *a; | 606 | Attendee *a; |
607 | mText.append("<ul>"); | 607 | mText.append("<ul>"); |
608 | int a_count = 0; | 608 | int a_count = 0; |
609 | int a_count_nr = 0; | 609 | int a_count_nr = 0; |
610 | 610 | ||
611 | for(a=attendees.first();a;a=attendees.next()) { | 611 | for(a=attendees.first();a;a=attendees.next()) { |
612 | #ifndef KORG_NOKABC | 612 | #ifndef KORG_NOKABC |
613 | #ifdef DESKTOP_VERSION | 613 | #ifdef DESKTOP_VERSION |
614 | if (a->name().isEmpty()) { | 614 | if (a->name().isEmpty()) { |
615 | addressList = add_book->findByEmail(a->email()); | 615 | addressList = add_book->findByEmail(a->email()); |
616 | KABC::Addressee o = addressList.first(); | 616 | KABC::Addressee o = addressList.first(); |
617 | if (!o.isEmpty() && addressList.size()<2) { | 617 | if (!o.isEmpty() && addressList.size()<2) { |
618 | mText += "<a href=\"uid:" + o.uid() + "\">"; | 618 | mText += "<a href=\"uid:" + o.uid() + "\">"; |
619 | mText += o.formattedName(); | 619 | mText += o.formattedName(); |
620 | mText += "</a>\n"; | 620 | mText += "</a>\n"; |
621 | } else { | 621 | } else { |
622 | mText += "<li>"; | 622 | mText += "<li>"; |
623 | mText.append(a->email()); | 623 | mText.append(a->email()); |
624 | mText += "\n"; | 624 | mText += "\n"; |
625 | } | 625 | } |
626 | } else { | 626 | } else { |
627 | mText += "<li><a href=\"uid:" + a->uid() + "\">"; | 627 | mText += "<li><a href=\"uid:" + a->uid() + "\">"; |
628 | if (!a->name().isEmpty()) mText += a->name(); | 628 | if (!a->name().isEmpty()) mText += a->name(); |
629 | else mText += a->email(); | 629 | else mText += a->email(); |
630 | mText += "</a>\n"; | 630 | mText += "</a>\n"; |
631 | } | 631 | } |
632 | #else //DESKTOP_VERSION | 632 | #else //DESKTOP_VERSION |
633 | mText += "<li><a href=\"uid:" + a->uid() + "\">"; | 633 | mText += "<li><a href=\"uid:" + a->uid() + "\">"; |
634 | if (!a->name().isEmpty()) mText += a->name(); | 634 | if (!a->name().isEmpty()) mText += a->name(); |
635 | else mText += a->email(); | 635 | else mText += a->email(); |
636 | mText += "</a>\n"; | 636 | mText += "</a>\n"; |
637 | #endif //DESKTOP_VERSION | 637 | #endif //DESKTOP_VERSION |
638 | #else | 638 | #else |
639 | //qDebug("nokabc "); | 639 | //qDebug("nokabc "); |
640 | mText += "<li><a href=\"uid:" + a->uid() + "\">"; | 640 | mText += "<li><a href=\"uid:" + a->uid() + "\">"; |
641 | if (!a->name().isEmpty()) mText += a->name(); | 641 | if (!a->name().isEmpty()) mText += a->name(); |
642 | else mText += a->email(); | 642 | else mText += a->email(); |
643 | mText += "</a>\n"; | 643 | mText += "</a>\n"; |
644 | #endif | 644 | #endif |
645 | 645 | ||
646 | 646 | ||
647 | if (!a->email().isEmpty()) { | 647 | if (!a->email().isEmpty()) { |
648 | if (iconPath) { | 648 | if (iconPath) { |
649 | mText += "<a href=\"mailto:" + a->name() +" <" + a->email() + ">:" + mMailSubject + "\">"; | 649 | mText += "<a href=\"mailto:" + a->name() +" <" + a->email() + ">:" + mMailSubject + "\">"; |
650 | if ( a->RSVP() ) { | 650 | if ( a->RSVP() ) { |
651 | ++a_count_nr; | 651 | ++a_count_nr; |
652 | mText += "<IMG src=\"" + iconPath + "\">"; | 652 | mText += "<IMG src=\"" + iconPath + "\">"; |
653 | } | 653 | } |
654 | else { | 654 | else { |
655 | ++a_count; | 655 | ++a_count; |
656 | mText += "<IMG src=\"" + NOiconPath + "\">"; | 656 | mText += "<IMG src=\"" + NOiconPath + "\">"; |
657 | } | 657 | } |
658 | mText += "</a>\n"; | 658 | mText += "</a>\n"; |
659 | } | 659 | } |
660 | } | 660 | } |
661 | if (a->status() != Attendee::NeedsAction ) | 661 | if (a->status() != Attendee::NeedsAction ) |
662 | mText +="[" + a->statusStr() + "] "; | 662 | mText +="[" + a->statusStr() + "] "; |
663 | if (a->role() == Attendee::Chair ) | 663 | if (a->role() == Attendee::Chair ) |
664 | mText +="(" + a->roleStr().left(1) + ".)"; | 664 | mText +="(" + a->roleStr().left(1) + ".)"; |
665 | } | 665 | } |
666 | mText.append("</li></ul>"); | 666 | mText.append("</li></ul>"); |
667 | if ( (a_count+a_count_nr) > 1 ) { | 667 | if ( (a_count+a_count_nr) > 1 ) { |
668 | mText += "<a href=\"mailto:ALL\">"; | 668 | mText += "<a href=\"mailto:ALL\">"; |
669 | mText += i18n( "Mail to all" ); | 669 | mText += i18n( "Mail to all" ); |
670 | mText += "</a> ( "; | 670 | mText += "</a> ( "; |
671 | mText += "<IMG src=\"" + iconPath + "\">"; | 671 | mText += "<IMG src=\"" + iconPath + "\">"; |
672 | mText += i18n( " and " ); | 672 | mText += i18n( " and " ); |
673 | mText += "<IMG src=\"" + NOiconPath + "\"> )"; | 673 | mText += "<IMG src=\"" + NOiconPath + "\"> )"; |
674 | mText += "<br>\n"; | 674 | mText += "<br>\n"; |
675 | 675 | ||
676 | 676 | ||
677 | } | 677 | } |
678 | if ( a_count_nr > 1 ) { | 678 | if ( a_count_nr > 1 ) { |
679 | mText += "<a href=\"mailto:RSVP\">"; | 679 | mText += "<a href=\"mailto:RSVP\">"; |
680 | mText += i18n( "Mail to selected" ); | 680 | mText += i18n( "Mail to selected" ); |
681 | mText += "</a> ( "; | 681 | mText += "</a> ( "; |
682 | mText += i18n( "<IMG src=\"%1\"> only )").arg ( iconPath ); | 682 | mText += i18n( "<IMG src=\"%1\"> only )").arg ( iconPath ); |
683 | mText += "<br>\n"; | 683 | mText += "<br>\n"; |
684 | } | 684 | } |
685 | } | 685 | } |
686 | 686 | ||
687 | } | 687 | } |
688 | void KOEventViewer::appendJournal(Journal *jour, int mode ) | 688 | void KOEventViewer::appendJournal(Journal *jour, int mode ) |
689 | { | 689 | { |
690 | bool shortDate = KOPrefs::instance()->mShortDateInViewer; | 690 | bool shortDate = KOPrefs::instance()->mShortDateInViewer; |
691 | if (mode == 0 ) { | 691 | if (mode == 0 ) { |
692 | addTag("h2",i18n("Journal from: ")); | 692 | addTag("h2",i18n("Journal from: ")); |
693 | } | 693 | } |
694 | else { | 694 | else { |
695 | if ( mode == 1 ) { | 695 | if ( mode == 1 ) { |
696 | addTag("h2",i18n( "Local: " ) +i18n("Journal from: ")); | 696 | addTag("h2",i18n( "Local: " ) +i18n("Journal from: ")); |
697 | } else { | 697 | } else { |
698 | addTag("h2",i18n( "Remote: " ) +i18n("Journal from: ")); | 698 | addTag("h2",i18n( "Remote: " ) +i18n("Journal from: ")); |
699 | } | 699 | } |
700 | } | 700 | } |
701 | topLevelWidget()->setCaption("Journal Viewer"); | 701 | topLevelWidget()->setCaption("Journal Viewer"); |
702 | mText.append(i18n("<h3> %1 </h3> ").arg(jour->dtStartDateStr(KOPrefs::instance()->mShortDateInViewer))); | 702 | mText.append(i18n("<h3> %1 </h3> ").arg(jour->dtStartDateStr(KOPrefs::instance()->mShortDateInViewer))); |
703 | addTag("b",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(jour->lastModified(),shortDate ) ); | 703 | addTag("b",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(jour->lastModified(),shortDate ) ); |
704 | if (!jour->summary().isEmpty()) { | ||
705 | addTag("p",i18n(" Title: ") + deTag(jour->summary())); | ||
706 | } | ||
704 | if (!jour->description().isEmpty()) { | 707 | if (!jour->description().isEmpty()) { |
705 | addTag("p",deTag(jour->description())); | 708 | addTag("p",deTag(jour->description())); |
706 | } | 709 | } |
707 | setText(mText); | 710 | setText(mText); |
708 | } | 711 | } |
709 | 712 | ||
710 | void KOEventViewer::formatReadOnly(Incidence *event) | 713 | void KOEventViewer::formatReadOnly(Incidence *event) |
711 | { | 714 | { |
712 | if (event->isReadOnly()) { | 715 | if (event->isReadOnly()) { |
713 | addTag("p","<em>(" + i18n("read-only") + ")</em>"); | 716 | addTag("p","<em>(" + i18n("read-only") + ")</em>"); |
714 | } | 717 | } |
715 | } | 718 | } |
716 | void KOEventViewer::setSyncMode( bool b ) | 719 | void KOEventViewer::setSyncMode( bool b ) |
717 | { | 720 | { |
718 | mSyncMode = b; | 721 | mSyncMode = b; |
719 | } | 722 | } |
720 | 723 | ||
721 | void KOEventViewer::setTodo(Todo *event, bool clearV ) | 724 | void KOEventViewer::setTodo(Todo *event, bool clearV ) |
722 | { | 725 | { |
723 | if ( clearV ) | 726 | if ( clearV ) |
724 | clearEvents(); | 727 | clearEvents(); |
725 | if ( mSyncMode ) { | 728 | if ( mSyncMode ) { |
726 | if ( clearV ) | 729 | if ( clearV ) |
727 | appendTodo(event,1 ); | 730 | appendTodo(event,1 ); |
728 | else | 731 | else |
729 | appendTodo(event,2); | 732 | appendTodo(event,2); |
730 | } else | 733 | } else |
731 | appendTodo(event); | 734 | appendTodo(event); |
732 | } | 735 | } |
733 | void KOEventViewer::setJournal(Journal *event, bool clearV ) | 736 | void KOEventViewer::setJournal(Journal *event, bool clearV ) |
734 | { | 737 | { |
735 | if ( clearV ) | 738 | if ( clearV ) |
736 | clearEvents(); | 739 | clearEvents(); |
737 | if ( mSyncMode ) { | 740 | if ( mSyncMode ) { |
738 | if ( clearV ) | 741 | if ( clearV ) |
739 | appendJournal(event, 1); | 742 | appendJournal(event, 1); |
740 | else | 743 | else |
741 | appendJournal(event, 2); | 744 | appendJournal(event, 2); |
742 | } else | 745 | } else |
743 | appendJournal(event); | 746 | appendJournal(event); |
744 | } | 747 | } |
745 | 748 | ||
746 | void KOEventViewer::setEvent(Event *event) | 749 | void KOEventViewer::setEvent(Event *event) |
747 | { | 750 | { |
748 | clearEvents(); | 751 | clearEvents(); |
749 | if ( mSyncMode ) | 752 | if ( mSyncMode ) |
750 | appendEvent(event, 1); | 753 | appendEvent(event, 1); |
751 | else | 754 | else |
752 | appendEvent(event); | 755 | appendEvent(event); |
753 | } | 756 | } |
754 | 757 | ||
755 | void KOEventViewer::addEvent(Event *event) | 758 | void KOEventViewer::addEvent(Event *event) |
756 | { | 759 | { |
757 | if ( mSyncMode ) | 760 | if ( mSyncMode ) |
758 | appendEvent(event, 2); | 761 | appendEvent(event, 2); |
759 | else | 762 | else |
760 | appendEvent(event); | 763 | appendEvent(event); |
761 | } | 764 | } |
762 | 765 | ||
763 | void KOEventViewer::clearEvents(bool now) | 766 | void KOEventViewer::clearEvents(bool now) |
764 | { | 767 | { |
765 | mText = ""; | 768 | mText = ""; |
766 | if (now) setText(mText); | 769 | if (now) setText(mText); |
767 | } | 770 | } |
768 | 771 | ||
769 | void KOEventViewer::addText(QString text) | 772 | void KOEventViewer::addText(QString text) |
770 | { | 773 | { |
771 | mText.append(text); | 774 | mText.append(text); |
772 | setText(mText); | 775 | setText(mText); |
773 | } | 776 | } |
774 | QString KOEventViewer::deTag(QString text) | 777 | QString KOEventViewer::deTag(QString text) |
775 | { | 778 | { |
776 | #if QT_VERSION >= 0x030000 | 779 | #if QT_VERSION >= 0x030000 |
777 | text.replace( '<' , "<" ); | 780 | text.replace( '<' , "<" ); |
778 | text.replace( '>' , ">" ); | 781 | text.replace( '>' , ">" ); |
779 | #else | 782 | #else |
780 | if ( text.find ('<') >= 0 ) { | 783 | if ( text.find ('<') >= 0 ) { |
781 | text.replace( QRegExp("<") , "<" ); | 784 | text.replace( QRegExp("<") , "<" ); |
782 | } | 785 | } |
783 | if ( text.find ('>') >= 0 ) { | 786 | if ( text.find ('>') >= 0 ) { |
784 | text.replace( QRegExp(">") , ">" ); | 787 | text.replace( QRegExp(">") , ">" ); |
785 | } | 788 | } |
786 | #endif | 789 | #endif |
787 | return text; | 790 | return text; |
788 | } | 791 | } |
789 | void KOEventViewer::keyPressEvent ( QKeyEvent * e ) | 792 | void KOEventViewer::keyPressEvent ( QKeyEvent * e ) |
790 | { | 793 | { |
791 | switch ( e->key() ) { | 794 | switch ( e->key() ) { |
792 | case Qt::Key_Return: | 795 | case Qt::Key_Return: |
793 | case Qt::Key_Enter : | 796 | case Qt::Key_Enter : |
794 | e->ignore(); | 797 | e->ignore(); |
795 | break; | 798 | break; |
796 | default: | 799 | default: |
797 | QTextBrowser::keyPressEvent ( e ); | 800 | QTextBrowser::keyPressEvent ( e ); |
798 | break; | 801 | break; |
799 | } | 802 | } |
800 | } | 803 | } |
diff --git a/korganizer/kojournalview.cpp b/korganizer/kojournalview.cpp index 9e354d3..4fc9013 100644 --- a/korganizer/kojournalview.cpp +++ b/korganizer/kojournalview.cpp | |||
@@ -1,195 +1,217 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KOrganizer. | 2 | This file is part of KOrganizer. |
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | 3 | Copyright (c) 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 | // | 24 | // |
25 | // View of Journal entries | 25 | // View of Journal entries |
26 | 26 | ||
27 | #include <qlayout.h> | 27 | #include <qlayout.h> |
28 | #include <qscrollview.h> | 28 | #include <qscrollview.h> |
29 | #include <qpopupmenu.h> | 29 | #include <qpopupmenu.h> |
30 | #include <qhbox.h> | ||
31 | #include <qpushbutton.h> | ||
32 | #include <qlabel.h> | ||
33 | #include <qpushbutton.h> | ||
34 | #include <qapplication.h> | ||
30 | 35 | ||
31 | #include <klocale.h> | 36 | #include <klocale.h> |
32 | #include <kdebug.h> | 37 | #include <kdebug.h> |
33 | #include "koprefs.h" | 38 | #include "koprefs.h" |
39 | #include <kglobal.h> | ||
34 | 40 | ||
35 | #include <libkcal/calendar.h> | 41 | #include <libkcal/calendar.h> |
36 | 42 | ||
37 | #include "journalentry.h" | 43 | #include "journalentry.h" |
38 | 44 | ||
39 | #include "kojournalview.h" | 45 | #include "kojournalview.h" |
40 | using namespace KOrg; | 46 | using namespace KOrg; |
41 | 47 | ||
42 | KOJournalView::KOJournalView(Calendar *calendar, QWidget *parent, | 48 | KOJournalView::KOJournalView(Calendar *calendar, QWidget *parent, |
43 | const char *name) | 49 | const char *name) |
44 | : KOrg::BaseView(calendar, parent, name) | 50 | : KOrg::BaseView(calendar, parent, name) |
45 | { | 51 | { |
46 | mCalendar = calendar; | 52 | mCalendar = calendar; |
47 | QScrollView * sv = new QScrollView( this ); | 53 | QScrollView * sv = new QScrollView( this ); |
48 | QHBoxLayout * hbl = new QHBoxLayout( this ); | 54 | QHBoxLayout * hbl = new QHBoxLayout( this ); |
49 | hbl->addWidget( sv ); | 55 | hbl->addWidget( sv ); |
50 | parWid = new QWidget( sv->viewport() ); | 56 | parWid = new QWidget( sv->viewport() ); |
51 | sv->addChild(parWid); | 57 | sv->addChild(parWid); |
52 | sv->setResizePolicy( QScrollView:: AutoOneFit ); | 58 | sv->setResizePolicy( QScrollView:: AutoOneFit ); |
53 | mTopLayout = new QVBoxLayout(parWid); | 59 | mTopLayout = new QVBoxLayout(parWid); |
60 | QHBox * vb = new QHBox ( parWid ); | ||
61 | QPushButton * newJournal = new QPushButton( vb ); | ||
62 | QIconSet icon; | ||
63 | if ( QApplication::desktop()->width() < 321 ) | ||
64 | icon = SmallIcon("ko16old"); | ||
65 | else | ||
66 | icon = SmallIcon("ko24old"); | ||
67 | newJournal->setIconSet (icon ) ; | ||
68 | int size = newJournal->sizeHint().height(); | ||
69 | newJournal->setFixedSize( size, size ); | ||
70 | mDateLabel = new QLabel ( vb ); | ||
71 | mTopLayout->addWidget( vb ); | ||
72 | mDateLabel->setMargin(2); | ||
73 | mDateLabel->setAlignment(AlignCenter); | ||
74 | connect( newJournal, SIGNAL( clicked() ), this , SLOT( newJournal() ) ); | ||
54 | getNewEntry(); | 75 | getNewEntry(); |
55 | } | 76 | } |
56 | 77 | ||
57 | KOJournalView::~KOJournalView() | 78 | KOJournalView::~KOJournalView() |
58 | { | 79 | { |
59 | } | 80 | } |
60 | 81 | ||
61 | int KOJournalView::currentDateCount() | 82 | int KOJournalView::currentDateCount() |
62 | { | 83 | { |
63 | return 0; | 84 | return 0; |
64 | } | 85 | } |
65 | JournalEntry* KOJournalView::getNewEntry() | 86 | JournalEntry* KOJournalView::getNewEntry() |
66 | { | 87 | { |
67 | JournalEntry* Entry = new JournalEntry(mCalendar,parWid); | 88 | JournalEntry* Entry = new JournalEntry(mCalendar,parWid); |
68 | jEntries.append( Entry ); | 89 | jEntries.append( Entry ); |
69 | mTopLayout->addWidget(Entry); | 90 | mTopLayout->addWidget(Entry); |
70 | Entry->setFont ( KOPrefs::instance()->mJornalViewFont ); | 91 | Entry->setFont ( KOPrefs::instance()->mJornalViewFont ); |
71 | connect ( Entry,SIGNAL(deleteJournal(Journal *) ),this ,SIGNAL(deleteJournal(Journal *) ) ) ; | 92 | connect ( Entry,SIGNAL(deleteJournal(Journal *) ),this ,SIGNAL(deleteJournal(Journal *) ) ) ; |
72 | connect ( Entry,SIGNAL(newJournal() ),this ,SLOT(newJournal() ) ) ; | 93 | connect ( Entry,SIGNAL(newJournal() ),this ,SLOT(newJournal() ) ) ; |
73 | connect ( Entry,SIGNAL(showJournalOnly( Journal * ) ),this ,SLOT(showOnly ( Journal* ) ) ) ; | 94 | connect ( Entry,SIGNAL(showJournalOnly( Journal * ) ),this ,SLOT(showOnly ( Journal* ) ) ) ; |
74 | return Entry; | 95 | return Entry; |
75 | } | 96 | } |
76 | 97 | ||
77 | QPtrList<Incidence> KOJournalView::selectedIncidences() | 98 | QPtrList<Incidence> KOJournalView::selectedIncidences() |
78 | { | 99 | { |
79 | QPtrList<Incidence> eventList; | 100 | QPtrList<Incidence> eventList; |
80 | 101 | ||
81 | return eventList; | 102 | return eventList; |
82 | } | 103 | } |
83 | void KOJournalView::updateConfig() | 104 | void KOJournalView::updateConfig() |
84 | { | 105 | { |
85 | JournalEntry* mEntry = jEntries.first(); | 106 | JournalEntry* mEntry = jEntries.first(); |
86 | while ( mEntry ) { | 107 | while ( mEntry ) { |
87 | mEntry->setFont ( KOPrefs::instance()->mJornalViewFont ); | 108 | mEntry->setFont ( KOPrefs::instance()->mJornalViewFont ); |
88 | mEntry = jEntries.next(); | 109 | mEntry = jEntries.next(); |
89 | } | 110 | } |
90 | } | 111 | } |
91 | void KOJournalView::updateView() | 112 | void KOJournalView::updateView() |
92 | { | 113 | { |
93 | JournalEntry* mEntry = jEntries.first(); | 114 | JournalEntry* mEntry = jEntries.first(); |
94 | while ( mEntry ) { | 115 | while ( mEntry ) { |
95 | mEntry->setFont ( KOPrefs::instance()->mJornalViewFont ); | 116 | mEntry->setFont ( KOPrefs::instance()->mJornalViewFont ); |
96 | mEntry = jEntries.next(); | 117 | mEntry = jEntries.next(); |
97 | } | 118 | } |
98 | showDates( mDate, QDate() ); | 119 | showDates( mDate, QDate() ); |
99 | } | 120 | } |
100 | 121 | ||
101 | void KOJournalView::flushView() | 122 | void KOJournalView::flushView() |
102 | { | 123 | { |
103 | JournalEntry* mEntry = jEntries.first(); | 124 | JournalEntry* mEntry = jEntries.first(); |
104 | while ( mEntry ) { | 125 | while ( mEntry ) { |
105 | mEntry->flushEntry(); | 126 | mEntry->flushEntry(); |
106 | mEntry = jEntries.next(); | 127 | mEntry = jEntries.next(); |
107 | } | 128 | } |
108 | } | 129 | } |
109 | 130 | ||
110 | void KOJournalView::clearList() | 131 | void KOJournalView::clearList() |
111 | { | 132 | { |
112 | JournalEntry* mEntry = jEntries.first(); | 133 | JournalEntry* mEntry = jEntries.first(); |
113 | while ( mEntry ) { | 134 | while ( mEntry ) { |
114 | mEntry->clear(); | 135 | mEntry->clear(); |
115 | mEntry = jEntries.next(); | 136 | mEntry = jEntries.next(); |
116 | } | 137 | } |
117 | } | 138 | } |
118 | void KOJournalView::newJournal() | 139 | void KOJournalView::newJournal() |
119 | { | 140 | { |
120 | Journal* mJournal = new Journal; | 141 | Journal* mJournal = new Journal; |
121 | mJournal->setDtStart(QDateTime(mDate,QTime(0,0,0))); | 142 | mJournal->setDtStart(QDateTime(mDate,QTime(0,0,0))); |
122 | mCalendar->addJournal(mJournal); | 143 | mCalendar->addJournal(mJournal); |
123 | showDates( mDate, QDate() ); | 144 | showDates( mDate, QDate() ); |
124 | } | 145 | } |
125 | 146 | ||
126 | void KOJournalView::showOnly ( Journal* j ) | 147 | void KOJournalView::showOnly ( Journal* j ) |
127 | { | 148 | { |
128 | if ( j == 0 ) { | 149 | if ( j == 0 ) { |
129 | showDates( mDate, QDate() ); | 150 | showDates( mDate, QDate() ); |
130 | return; | 151 | return; |
131 | } | 152 | } |
132 | QPtrList<Journal> jl; | 153 | QPtrList<Journal> jl; |
133 | jl.append ( j ); | 154 | jl.append ( j ); |
134 | showList( jl ); | 155 | showList( jl ); |
135 | JournalEntry* mEntry = jEntries.first(); | 156 | JournalEntry* mEntry = jEntries.first(); |
136 | mEntry->setShowOnly(); | 157 | mEntry->setShowOnly(); |
137 | } | 158 | } |
138 | void KOJournalView::showList(QPtrList<Journal> jl) | 159 | void KOJournalView::showList(QPtrList<Journal> jl) |
139 | { | 160 | { |
140 | JournalEntry* mEntry = jEntries.first(); | 161 | JournalEntry* mEntry = jEntries.first(); |
141 | JournalEntry* firstEntry = mEntry; | 162 | JournalEntry* firstEntry = mEntry; |
142 | int count = jl.count(); | 163 | int count = jl.count(); |
143 | int iii = 0; | 164 | int iii = 0; |
144 | while ( iii < count ) { | 165 | while ( iii < count ) { |
145 | if ( !mEntry ) { | 166 | if ( !mEntry ) { |
146 | mEntry = getNewEntry(); | 167 | mEntry = getNewEntry(); |
147 | mEntry->show(); | 168 | mEntry->show(); |
148 | mEntry->setDate(mDate); | 169 | mEntry->setDate(mDate); |
149 | mEntry->setJournal(jl.at(iii)); | 170 | mEntry->setJournal(jl.at(iii)); |
150 | mEntry = 0; | 171 | mEntry = 0; |
151 | } else { | 172 | } else { |
152 | mEntry->setDate(mDate); | 173 | mEntry->setDate(mDate); |
153 | mEntry->setJournal(jl.at(iii)); | 174 | mEntry->setJournal(jl.at(iii)); |
154 | mEntry->show(); | 175 | mEntry->show(); |
155 | mEntry = jEntries.next(); | 176 | mEntry = jEntries.next(); |
156 | } | 177 | } |
157 | ++iii; | 178 | ++iii; |
158 | } | 179 | } |
159 | while ( mEntry ) { | 180 | while ( mEntry ) { |
160 | mEntry->setDate(mDate); | 181 | mEntry->setDate(mDate); |
161 | mEntry->clear(); | 182 | mEntry->clear(); |
162 | if ( mEntry != firstEntry ) | 183 | if ( mEntry != firstEntry ) |
163 | mEntry->hide(); | 184 | mEntry->hide(); |
164 | else | 185 | else |
165 | mEntry->show(); | 186 | mEntry->show(); |
166 | mEntry = jEntries.next(); | 187 | mEntry = jEntries.next(); |
167 | } | 188 | } |
168 | } | 189 | } |
169 | 190 | ||
170 | void KOJournalView::showDates(const QDate &start, const QDate &) | 191 | void KOJournalView::showDates(const QDate &start, const QDate &) |
171 | { | 192 | { |
172 | mDate = start; | 193 | mDate = start; |
194 | mDateLabel-> setText(KGlobal::locale()->formatDate(mDate)); | ||
173 | QPtrList<Journal> jl = calendar()->journals4Date( start ); | 195 | QPtrList<Journal> jl = calendar()->journals4Date( start ); |
174 | showList( jl ); | 196 | showList( jl ); |
175 | } | 197 | } |
176 | 198 | ||
177 | void KOJournalView::showEvents(QPtrList<Event>) | 199 | void KOJournalView::showEvents(QPtrList<Event>) |
178 | { | 200 | { |
179 | // After new creation of list view no events are selected. | 201 | // After new creation of list view no events are selected. |
180 | // emit incidenceSelected( 0 ); | 202 | // emit incidenceSelected( 0 ); |
181 | } | 203 | } |
182 | 204 | ||
183 | void KOJournalView::changeEventDisplay(Event *, int /*action*/) | 205 | void KOJournalView::changeEventDisplay(Event *, int /*action*/) |
184 | { | 206 | { |
185 | updateView(); | 207 | updateView(); |
186 | } | 208 | } |
187 | 209 | ||
188 | void KOJournalView::keyPressEvent ( QKeyEvent * e ) | 210 | void KOJournalView::keyPressEvent ( QKeyEvent * e ) |
189 | { | 211 | { |
190 | //qDebug("keyPressEven "); | 212 | //qDebug("keyPressEven "); |
191 | if ( e->state() == Qt::ControlButton ) { | 213 | if ( e->state() == Qt::ControlButton ) { |
192 | if ( e->key () == Qt::Key_Right || e->key () == Qt::Key_Left ) | 214 | if ( e->key () == Qt::Key_Right || e->key () == Qt::Key_Left ) |
193 | e->ignore(); | 215 | e->ignore(); |
194 | } | 216 | } |
195 | } | 217 | } |
diff --git a/korganizer/kojournalview.h b/korganizer/kojournalview.h index 0437d95..331bdfa 100644 --- a/korganizer/kojournalview.h +++ b/korganizer/kojournalview.h | |||
@@ -1,77 +1,79 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KOrganizer. | 2 | This file is part of KOrganizer. |
3 | Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> | 3 | Copyright (c) 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 | #ifndef _KOJOURNALVIEW_H | 23 | #ifndef _KOJOURNALVIEW_H |
24 | #define _KOJOURNALVIEW_H | 24 | #define _KOJOURNALVIEW_H |
25 | 25 | ||
26 | #include <korganizer/baseview.h> | 26 | #include <korganizer/baseview.h> |
27 | #include <qlayout.h> | 27 | #include <qlayout.h> |
28 | 28 | ||
29 | class JournalEntry; | 29 | class JournalEntry; |
30 | class QLabel; | ||
30 | 31 | ||
31 | /** | 32 | /** |
32 | * This class provides a journal view. | 33 | * This class provides a journal view. |
33 | 34 | ||
34 | * @short View for Journal components. | 35 | * @short View for Journal components. |
35 | * @author Cornelius Schumacher <schumacher@kde.org> | 36 | * @author Cornelius Schumacher <schumacher@kde.org> |
36 | * @see KOBaseView | 37 | * @see KOBaseView |
37 | */ | 38 | */ |
38 | class KOJournalView : public KOrg::BaseView | 39 | class KOJournalView : public KOrg::BaseView |
39 | { | 40 | { |
40 | Q_OBJECT | 41 | Q_OBJECT |
41 | public: | 42 | public: |
42 | KOJournalView(Calendar *calendar, QWidget *parent = 0, | 43 | KOJournalView(Calendar *calendar, QWidget *parent = 0, |
43 | const char *name = 0); | 44 | const char *name = 0); |
44 | ~KOJournalView(); | 45 | ~KOJournalView(); |
45 | 46 | ||
46 | virtual int currentDateCount(); | 47 | virtual int currentDateCount(); |
47 | void clearList(); | 48 | void clearList(); |
48 | virtual QPtrList<Incidence> selectedIncidences(); | 49 | virtual QPtrList<Incidence> selectedIncidences(); |
49 | DateList selectedDates() | 50 | DateList selectedDates() |
50 | {DateList q; | 51 | {DateList q; |
51 | return q;}; | 52 | return q;}; |
52 | signals: | 53 | signals: |
53 | void deleteJournal(Journal *); | 54 | void deleteJournal(Journal *); |
54 | public slots: | 55 | public slots: |
55 | void showOnly ( Journal* ); | 56 | void showOnly ( Journal* ); |
56 | void newJournal(); | 57 | void newJournal(); |
57 | void updateView(); | 58 | void updateView(); |
58 | void flushView(); | 59 | void flushView(); |
59 | void updateConfig(); | 60 | void updateConfig(); |
60 | void showDates( const QDate &start, const QDate &end ); | 61 | void showDates( const QDate &start, const QDate &end ); |
61 | void showEvents(QPtrList<Event> eventList); | 62 | void showEvents(QPtrList<Event> eventList); |
62 | 63 | ||
63 | void changeEventDisplay(Event *, int); | 64 | void changeEventDisplay(Event *, int); |
64 | 65 | ||
65 | private: | 66 | private: |
66 | void showList(QPtrList<Journal> jl); | 67 | void showList(QPtrList<Journal> jl); |
67 | Calendar *mCalendar; | 68 | Calendar *mCalendar; |
68 | JournalEntry* getNewEntry(); | 69 | JournalEntry* getNewEntry(); |
69 | QPtrList<JournalEntry> jEntries; | 70 | QPtrList<JournalEntry> jEntries; |
70 | void keyPressEvent ( QKeyEvent * ) ; | 71 | void keyPressEvent ( QKeyEvent * ) ; |
71 | QBoxLayout *mTopLayout; | 72 | QBoxLayout *mTopLayout; |
72 | QWidget *parWid; | 73 | QWidget *parWid; |
74 | QLabel * mDateLabel; | ||
73 | QDate mDate; | 75 | QDate mDate; |
74 | 76 | ||
75 | }; | 77 | }; |
76 | 78 | ||
77 | #endif | 79 | #endif |
diff --git a/korganizer/kolistview.cpp b/korganizer/kolistview.cpp index 22d9ac0..0c1ac7a 100644 --- a/korganizer/kolistview.cpp +++ b/korganizer/kolistview.cpp | |||
@@ -1,605 +1,611 @@ | |||
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 <qwhatsthis.h> | 35 | #include <qwhatsthis.h> |
36 | #include <qregexp.h> | 36 | #include <qregexp.h> |
37 | #include <qpainter.h> | 37 | #include <qpainter.h> |
38 | #include <qpaintdevicemetrics.h> | 38 | #include <qpaintdevicemetrics.h> |
39 | 39 | ||
40 | #include <klocale.h> | 40 | #include <klocale.h> |
41 | #include <kdebug.h> | 41 | #include <kdebug.h> |
42 | #include <kiconloader.h> | 42 | #include <kiconloader.h> |
43 | #include <kglobal.h> | 43 | #include <kglobal.h> |
44 | 44 | ||
45 | #include <libkdepim/kpimglobalprefs.h> | 45 | #include <libkdepim/kpimglobalprefs.h> |
46 | #include <libkcal/calendar.h> | 46 | #include <libkcal/calendar.h> |
47 | #include <libkcal/calendarlocal.h> | 47 | #include <libkcal/calendarlocal.h> |
48 | #include <libkcal/icalformat.h> | 48 | #include <libkcal/icalformat.h> |
49 | #include <libkcal/vcalformat.h> | 49 | #include <libkcal/vcalformat.h> |
50 | #include <libkcal/recurrence.h> | 50 | #include <libkcal/recurrence.h> |
51 | #include <libkcal/filestorage.h> | 51 | #include <libkcal/filestorage.h> |
52 | #include <libkdepim/categoryselectdialog.h> | 52 | #include <libkdepim/categoryselectdialog.h> |
53 | #include <libkcal/kincidenceformatter.h> | 53 | #include <libkcal/kincidenceformatter.h> |
54 | #ifndef DESKTOP_VERSION | 54 | #ifndef DESKTOP_VERSION |
55 | #include <qpe/qpeapplication.h> | 55 | #include <qpe/qpeapplication.h> |
56 | #else | 56 | #else |
57 | #include <qapplication.h> | 57 | #include <qapplication.h> |
58 | #endif | 58 | #endif |
59 | 59 | ||
60 | #ifndef KORG_NOPRINTER | 60 | #ifndef KORG_NOPRINTER |
61 | #include "calprinter.h" | 61 | #include "calprinter.h" |
62 | #endif | 62 | #endif |
63 | #include "koglobals.h" | 63 | #include "koglobals.h" |
64 | #include "koprefs.h" | 64 | #include "koprefs.h" |
65 | #include "kfiledialog.h" | 65 | #include "kfiledialog.h" |
66 | 66 | ||
67 | #include "kolistview.h" | 67 | #include "kolistview.h" |
68 | #include "koeventviewer.h" | 68 | #include "koeventviewer.h" |
69 | 69 | ||
70 | extern QPixmap* sgListViewCompletedPix[6]; | 70 | extern QPixmap* sgListViewCompletedPix[6]; |
71 | 71 | ||
72 | class KOListViewWhatsThis :public QWhatsThis | 72 | class KOListViewWhatsThis :public QWhatsThis |
73 | { | 73 | { |
74 | public: | 74 | public: |
75 | KOListViewWhatsThis( QWidget *wid, KOListView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { }; | 75 | KOListViewWhatsThis( QWidget *wid, KOListView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { }; |
76 | 76 | ||
77 | protected: | 77 | protected: |
78 | virtual QString text( const QPoint& p) | 78 | virtual QString text( const QPoint& p) |
79 | { | 79 | { |
80 | return _view->getWhatsThisText(p) ; | 80 | return _view->getWhatsThisText(p) ; |
81 | } | 81 | } |
82 | private: | 82 | private: |
83 | QWidget* _wid; | 83 | QWidget* _wid; |
84 | KOListView * _view; | 84 | KOListView * _view; |
85 | }; | 85 | }; |
86 | 86 | ||
87 | 87 | ||
88 | ListItemVisitor::ListItemVisitor(KOListViewItem *item, QDate date ) | 88 | ListItemVisitor::ListItemVisitor(KOListViewItem *item, QDate date ) |
89 | { | 89 | { |
90 | mItem = item; | 90 | mItem = item; |
91 | mDate = date; | 91 | mDate = date; |
92 | } | 92 | } |
93 | 93 | ||
94 | ListItemVisitor::~ListItemVisitor() | 94 | ListItemVisitor::~ListItemVisitor() |
95 | { | 95 | { |
96 | } | 96 | } |
97 | 97 | ||
98 | bool ListItemVisitor::visit(Event *e) | 98 | bool ListItemVisitor::visit(Event *e) |
99 | { | 99 | { |
100 | bool ok = false; | 100 | bool ok = false; |
101 | QString start, end; | 101 | QString start, end; |
102 | QDate ds, de; | 102 | QDate ds, de; |
103 | if ( e->doesRecur() ) { | 103 | if ( e->doesRecur() ) { |
104 | ds = e->getNextOccurence( QDateTime( mDate, QTime(0,0,0)), &ok ).date(); | 104 | ds = e->getNextOccurence( QDateTime( mDate, QTime(0,0,0)), &ok ).date(); |
105 | if ( ok ) { | 105 | if ( ok ) { |
106 | int days = e->dtStart().date().daysTo(e->dtEnd().date() ); | 106 | int days = e->dtStart().date().daysTo(e->dtEnd().date() ); |
107 | start = KGlobal::locale()->formatDate(ds,true); | 107 | start = KGlobal::locale()->formatDate(ds,true); |
108 | de = ds.addDays( days); | 108 | de = ds.addDays( days); |
109 | end = KGlobal::locale()->formatDate(de,true); | 109 | end = KGlobal::locale()->formatDate(de,true); |
110 | } | 110 | } |
111 | 111 | ||
112 | } | 112 | } |
113 | if ( ! ok ) { | 113 | if ( ! ok ) { |
114 | start =e->dtStartDateStr(); | 114 | start =e->dtStartDateStr(); |
115 | end = e->dtEndDateStr(); | 115 | end = e->dtEndDateStr(); |
116 | ds = e->dtStart().date(); | 116 | ds = e->dtStart().date(); |
117 | de = e->dtEnd().date(); | 117 | de = e->dtEnd().date(); |
118 | } | 118 | } |
119 | mItem->setText(0,e->summary()); | 119 | mItem->setText(0,e->summary()); |
120 | mItem->setText(1,start); | 120 | mItem->setText(1,start); |
121 | if ( e->doesFloat() ) | 121 | if ( e->doesFloat() ) |
122 | mItem->setText(2,"---"); | 122 | mItem->setText(2,"---"); |
123 | else | 123 | else |
124 | mItem->setText(2,e->dtStartTimeStr()); | 124 | mItem->setText(2,e->dtStartTimeStr()); |
125 | mItem->setText(3,end); | 125 | mItem->setText(3,end); |
126 | if ( e->doesFloat() ) | 126 | if ( e->doesFloat() ) |
127 | mItem->setText(4,"---"); | 127 | mItem->setText(4,"---"); |
128 | else | 128 | else |
129 | mItem->setText(4,e->dtEndTimeStr()); | 129 | mItem->setText(4,e->dtEndTimeStr()); |
130 | if ( e->isAlarmEnabled() ) { | 130 | if ( e->isAlarmEnabled() ) { |
131 | mItem->setText(5,e->alarms().first()->offsetText() ); | 131 | mItem->setText(5,e->alarms().first()->offsetText() ); |
132 | } else { | 132 | } else { |
133 | mItem->setText(5, i18n("No")); | 133 | mItem->setText(5, i18n("No")); |
134 | } | 134 | } |
135 | mItem->setText(6, e->recurrence()->recurrenceText()); | 135 | mItem->setText(6, e->recurrence()->recurrenceText()); |
136 | if( ! e->doesRecur() ) | 136 | if( ! e->doesRecur() ) |
137 | mItem->setSortKey( 6, "-" ); | 137 | mItem->setSortKey( 6, "-" ); |
138 | mItem->setText(7,"---"); | 138 | mItem->setText(7,"---"); |
139 | mItem->setText(8,"---"); | 139 | mItem->setText(8,"---"); |
140 | mItem->setText(9, e->cancelled() ? i18n("Yes") : i18n("No")); | 140 | mItem->setText(9, e->cancelled() ? i18n("Yes") : i18n("No")); |
141 | mItem->setText(10,e->categoriesStr()); | 141 | mItem->setText(10,e->categoriesStr()); |
142 | mItem->setText(11, KOPrefs::instance()->calName( e->calID() )); | 142 | mItem->setText(11, KOPrefs::instance()->calName( e->calID() )); |
143 | 143 | ||
144 | QString key; | 144 | QString key; |
145 | QTime t = e->doesFloat() ? QTime(0,0) : e->dtStart().time(); | 145 | QTime t = e->doesFloat() ? QTime(0,0) : e->dtStart().time(); |
146 | key.sprintf("%04d%02d%02d%02d%02d",ds.year(),ds.month(),ds.day(),t.hour(),t.minute()); | 146 | key.sprintf("%04d%02d%02d%02d%02d",ds.year(),ds.month(),ds.day(),t.hour(),t.minute()); |
147 | mItem->setSortKey(1,key); | 147 | mItem->setSortKey(1,key); |
148 | 148 | ||
149 | t = e->doesFloat() ? QTime(0,0) : e->dtEnd().time(); | 149 | t = e->doesFloat() ? QTime(0,0) : e->dtEnd().time(); |
150 | key.sprintf("%04d%02d%02d%02d%02d",de.year(),de.month(),de.day(),t.hour(),t.minute()); | 150 | key.sprintf("%04d%02d%02d%02d%02d",de.year(),de.month(),de.day(),t.hour(),t.minute()); |
151 | mItem->setSortKey(3,key); | 151 | mItem->setSortKey(3,key); |
152 | return true; | 152 | return true; |
153 | } | 153 | } |
154 | 154 | ||
155 | bool ListItemVisitor::visit(Todo *t) | 155 | bool ListItemVisitor::visit(Todo *t) |
156 | { | 156 | { |
157 | mItem->setText(0,t->summary()); | 157 | mItem->setText(0,t->summary()); |
158 | if ( t->isCompleted() ) { | 158 | if ( t->isCompleted() ) { |
159 | mItem->setSortKey(0,"99"+ t->summary().left(10)); | 159 | mItem->setSortKey(0,"99"+ t->summary().left(10)); |
160 | } else | 160 | } else |
161 | mItem->setSortKey(0,QString::number( t->percentComplete() )+ t->summary().left(10)); | 161 | mItem->setSortKey(0,QString::number( t->percentComplete() )+ t->summary().left(10)); |
162 | mItem->setPixmap( 0, *(sgListViewCompletedPix[t->percentComplete()/20])); | 162 | mItem->setPixmap( 0, *(sgListViewCompletedPix[t->percentComplete()/20])); |
163 | if (t->hasStartDate()) { | 163 | if (t->hasStartDate()) { |
164 | mItem->setText(1,t->dtStartDateStr()); | 164 | mItem->setText(1,t->dtStartDateStr()); |
165 | if (t->doesFloat()) { | 165 | if (t->doesFloat()) { |
166 | mItem->setText(2,"---"); | 166 | mItem->setText(2,"---"); |
167 | } else { | 167 | } else { |
168 | mItem->setText(2,t->dtStartTimeStr()); | 168 | mItem->setText(2,t->dtStartTimeStr()); |
169 | } | 169 | } |
170 | } else { | 170 | } else { |
171 | mItem->setText(1,"---"); | 171 | mItem->setText(1,"---"); |
172 | mItem->setText(2,"---"); | 172 | mItem->setText(2,"---"); |
173 | } | 173 | } |
174 | mItem->setText(3,"---"); | 174 | mItem->setText(3,"---"); |
175 | mItem->setText(4,"---"); | 175 | mItem->setText(4,"---"); |
176 | if ( t->isAlarmEnabled() ) { | 176 | if ( t->isAlarmEnabled() ) { |
177 | mItem->setText(5,t->alarms().first()->offsetText() ); | 177 | mItem->setText(5,t->alarms().first()->offsetText() ); |
178 | } else { | 178 | } else { |
179 | mItem->setText(5, i18n("No")); | 179 | mItem->setText(5, i18n("No")); |
180 | } | 180 | } |
181 | mItem->setText(6, t->recurrence()->recurrenceText()); | 181 | mItem->setText(6, t->recurrence()->recurrenceText()); |
182 | if( ! t->doesRecur() ) | 182 | if( ! t->doesRecur() ) |
183 | mItem->setSortKey( 6, "-" ); | 183 | mItem->setSortKey( 6, "-" ); |
184 | if (t->hasDueDate()) { | 184 | if (t->hasDueDate()) { |
185 | mItem->setText(7,t->dtDueDateStr()); | 185 | mItem->setText(7,t->dtDueDateStr()); |
186 | if (t->doesFloat()) { | 186 | if (t->doesFloat()) { |
187 | mItem->setText(8,"---"); | 187 | mItem->setText(8,"---"); |
188 | } else { | 188 | } else { |
189 | mItem->setText(8,t->dtDueTimeStr()); | 189 | mItem->setText(8,t->dtDueTimeStr()); |
190 | } | 190 | } |
191 | } else { | 191 | } else { |
192 | mItem->setText(7,"---"); | 192 | mItem->setText(7,"---"); |
193 | mItem->setText(8,"---"); | 193 | mItem->setText(8,"---"); |
194 | } | 194 | } |
195 | mItem->setText(9, t->cancelled() ? i18n("Yes") : i18n("No")); | 195 | mItem->setText(9, t->cancelled() ? i18n("Yes") : i18n("No")); |
196 | mItem->setText(10,t->categoriesStr()); | 196 | mItem->setText(10,t->categoriesStr()); |
197 | mItem->setText(11, KOPrefs::instance()->calName( t->calID() )); | 197 | mItem->setText(11, KOPrefs::instance()->calName( t->calID() )); |
198 | 198 | ||
199 | QString key; | 199 | QString key; |
200 | QDate d; | 200 | QDate d; |
201 | if (t->hasDueDate()) { | 201 | if (t->hasDueDate()) { |
202 | d = t->dtDue().date(); | 202 | d = t->dtDue().date(); |
203 | QTime tm = t->doesFloat() ? QTime(0,0) : t->dtDue().time(); | 203 | QTime tm = t->doesFloat() ? QTime(0,0) : t->dtDue().time(); |
204 | key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute()); | 204 | key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute()); |
205 | mItem->setSortKey(7,key); | 205 | mItem->setSortKey(7,key); |
206 | } | 206 | } |
207 | if ( t->hasStartDate() ) { | 207 | if ( t->hasStartDate() ) { |
208 | d = t->dtStart().date(); | 208 | d = t->dtStart().date(); |
209 | QTime tm = t->doesFloat() ? QTime(0,0) : t->dtStart().time(); | 209 | QTime tm = t->doesFloat() ? QTime(0,0) : t->dtStart().time(); |
210 | key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute()); | 210 | key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute()); |
211 | mItem->setSortKey(1,key); | 211 | mItem->setSortKey(1,key); |
212 | } | 212 | } |
213 | return true; | 213 | return true; |
214 | } | 214 | } |
215 | 215 | ||
216 | bool ListItemVisitor::visit(Journal * j) | 216 | bool ListItemVisitor::visit(Journal * j) |
217 | { | 217 | { |
218 | QString des = j->description().left(30); | 218 | |
219 | des = des.simplifyWhiteSpace (); | 219 | QString des; |
220 | des.replace (QRegExp ("\\n"),"" ); | 220 | if ( !j->summary().isEmpty() ) { |
221 | des.replace (QRegExp ("\\r"),"" ); | 221 | des = j->summary(); |
222 | } else { | ||
223 | des = j->description().left(30); | ||
224 | des = des.simplifyWhiteSpace (); | ||
225 | des.replace (QRegExp ("\\n"),"" ); | ||
226 | des.replace (QRegExp ("\\r"),"" ); | ||
227 | } | ||
222 | mItem->setText(0,i18n("Journal: ")+des.left(25)); | 228 | mItem->setText(0,i18n("Journal: ")+des.left(25)); |
223 | mItem->setText(1,j->dtStartDateStr()); | 229 | mItem->setText(1,j->dtStartDateStr()); |
224 | mItem->setText(2,"---"); | 230 | mItem->setText(2,"---"); |
225 | mItem->setText(3,"---"); | 231 | mItem->setText(3,"---"); |
226 | mItem->setText(4,"---"); | 232 | mItem->setText(4,"---"); |
227 | mItem->setText(5,"---"); | 233 | mItem->setText(5,"---"); |
228 | mItem->setText(6,"---"); | 234 | mItem->setText(6,"---"); |
229 | mItem->setText(7,j->dtStartDateStr()); | 235 | mItem->setText(7,j->dtStartDateStr()); |
230 | mItem->setText(8,"---"); | 236 | mItem->setText(8,"---"); |
231 | mItem->setText(9,"---"); | 237 | mItem->setText(9,"---"); |
232 | mItem->setText(10,i18n("Last Modified: ")+ KGlobal::locale()->formatDateTime( j->lastModified() , true) ); | 238 | mItem->setText(10,i18n("Last Modified: ")+ KGlobal::locale()->formatDateTime( j->lastModified() , true) ); |
233 | mItem->setText(11, KOPrefs::instance()->calName( j->calID() )); | 239 | mItem->setText(11, KOPrefs::instance()->calName( j->calID() )); |
234 | 240 | ||
235 | QString key; | 241 | QString key; |
236 | QDate d = j->dtStart().date(); | 242 | QDate d = j->dtStart().date(); |
237 | key.sprintf("%04d%02d%02d",d.year(),d.month(),d.day()); | 243 | key.sprintf("%04d%02d%02d",d.year(),d.month(),d.day()); |
238 | mItem->setSortKey(1,key); | 244 | mItem->setSortKey(1,key); |
239 | mItem->setSortKey(7,key); | 245 | mItem->setSortKey(7,key); |
240 | 246 | ||
241 | return true; | 247 | return true; |
242 | } | 248 | } |
243 | 249 | ||
244 | KOListView::KOListView(Calendar *calendar, QWidget *parent, | 250 | KOListView::KOListView(Calendar *calendar, QWidget *parent, |
245 | const char *name) | 251 | const char *name) |
246 | : KOEventView(calendar, parent, name) | 252 | : KOEventView(calendar, parent, name) |
247 | { | 253 | { |
248 | 254 | ||
249 | mActiveItem = 0; | 255 | mActiveItem = 0; |
250 | mForceShowCompletedTodos = false; | 256 | mForceShowCompletedTodos = false; |
251 | mListView = new KOListViewListView(this); | 257 | mListView = new KOListViewListView(this); |
252 | mListView->addColumn(i18n("Summary")); | 258 | mListView->addColumn(i18n("Summary")); |
253 | mListView->addColumn(i18n("Start Date")); | 259 | mListView->addColumn(i18n("Start Date")); |
254 | mListView->addColumn(i18n("Start Time")); | 260 | mListView->addColumn(i18n("Start Time")); |
255 | mListView->addColumn(i18n("End Date")); | 261 | mListView->addColumn(i18n("End Date")); |
256 | mListView->addColumn(i18n("End Time")); | 262 | mListView->addColumn(i18n("End Time")); |
257 | mListView->addColumn(i18n("Alarm")); // alarm set? | 263 | mListView->addColumn(i18n("Alarm")); // alarm set? |
258 | mListView->addColumn(i18n("Recurs")); // recurs? | 264 | mListView->addColumn(i18n("Recurs")); // recurs? |
259 | mListView->addColumn(i18n("Due Date")); | 265 | mListView->addColumn(i18n("Due Date")); |
260 | mListView->addColumn(i18n("Due Time")); | 266 | mListView->addColumn(i18n("Due Time")); |
261 | mListView->addColumn(i18n("Cancelled")); | 267 | mListView->addColumn(i18n("Cancelled")); |
262 | mListView->addColumn(i18n("Categories")); | 268 | mListView->addColumn(i18n("Categories")); |
263 | mListView->addColumn(i18n("Calendar")); | 269 | mListView->addColumn(i18n("Calendar")); |
264 | 270 | ||
265 | mListView->setColumnAlignment(0,AlignLeft); | 271 | mListView->setColumnAlignment(0,AlignLeft); |
266 | mListView->setColumnAlignment(1,AlignLeft); | 272 | mListView->setColumnAlignment(1,AlignLeft); |
267 | mListView->setColumnAlignment(2,AlignHCenter); | 273 | mListView->setColumnAlignment(2,AlignHCenter); |
268 | mListView->setColumnAlignment(3,AlignLeft); | 274 | mListView->setColumnAlignment(3,AlignLeft); |
269 | mListView->setColumnAlignment(4,AlignHCenter); | 275 | mListView->setColumnAlignment(4,AlignHCenter); |
270 | mListView->setColumnAlignment(5,AlignLeft); | 276 | mListView->setColumnAlignment(5,AlignLeft); |
271 | mListView->setColumnAlignment(6,AlignLeft); | 277 | mListView->setColumnAlignment(6,AlignLeft); |
272 | mListView->setColumnAlignment(7,AlignLeft); | 278 | mListView->setColumnAlignment(7,AlignLeft); |
273 | mListView->setColumnAlignment(8,AlignLeft); | 279 | mListView->setColumnAlignment(8,AlignLeft); |
274 | mListView->setColumnAlignment(9,AlignLeft); | 280 | mListView->setColumnAlignment(9,AlignLeft); |
275 | mListView->setColumnAlignment(10,AlignLeft); | 281 | mListView->setColumnAlignment(10,AlignLeft); |
276 | mListView->setColumnAlignment(11,AlignLeft); | 282 | mListView->setColumnAlignment(11,AlignLeft); |
277 | mKOListViewWhatsThis = new KOListViewWhatsThis(mListView->viewport(),this); | 283 | mKOListViewWhatsThis = new KOListViewWhatsThis(mListView->viewport(),this); |
278 | 284 | ||
279 | int iii = 0; | 285 | int iii = 0; |
280 | for ( iii = 0; iii< 12 ; ++iii ) | 286 | for ( iii = 0; iii< 12 ; ++iii ) |
281 | mListView->setColumnWidthMode( iii, QListView::Manual ); | 287 | mListView->setColumnWidthMode( iii, QListView::Manual ); |
282 | 288 | ||
283 | QBoxLayout *layoutTop = new QVBoxLayout(this); | 289 | QBoxLayout *layoutTop = new QVBoxLayout(this); |
284 | layoutTop->addWidget(mListView); | 290 | layoutTop->addWidget(mListView); |
285 | mListView->setFont ( KOPrefs::instance()->mListViewFont ); | 291 | mListView->setFont ( KOPrefs::instance()->mListViewFont ); |
286 | mPopupMenu = eventPopup(); | 292 | mPopupMenu = eventPopup(); |
287 | mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), | 293 | mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), |
288 | i18n("Select all"),this, | 294 | i18n("Select all"),this, |
289 | SLOT(allSelection()),true); | 295 | SLOT(allSelection()),true); |
290 | mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), | 296 | mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), |
291 | i18n("Deselect all"),this, | 297 | i18n("Deselect all"),this, |
292 | SLOT(clearSelection()),true); | 298 | SLOT(clearSelection()),true); |
293 | mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), | 299 | mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), |
294 | i18n("Delete all selected"),this, | 300 | i18n("Delete all selected"),this, |
295 | SLOT(deleteAll()),true); | 301 | SLOT(deleteAll()),true); |
296 | 302 | ||
297 | mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), | 303 | mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), |
298 | i18n("Hide all selected"),this, | 304 | i18n("Hide all selected"),this, |
299 | SLOT(hideAll()),true); | 305 | SLOT(hideAll()),true); |
300 | 306 | ||
301 | mPopupMenu->insertSeparator(); | 307 | mPopupMenu->insertSeparator(); |
302 | #ifdef DESKTOP_VERSION | 308 | #ifdef DESKTOP_VERSION |
303 | mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), | 309 | mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), |
304 | i18n("Print complete list"),this, | 310 | i18n("Print complete list"),this, |
305 | SLOT(printList()),true); | 311 | SLOT(printList()),true); |
306 | mPopupMenu->insertSeparator(); | 312 | mPopupMenu->insertSeparator(); |
307 | #endif | 313 | #endif |
308 | mCalPopup = new QPopupMenu ( this ); | 314 | mCalPopup = new QPopupMenu ( this ); |
309 | mPopupMenu->insertItem( i18n("Set Calendar"), mCalPopup ); | 315 | mPopupMenu->insertItem( i18n("Set Calendar"), mCalPopup ); |
310 | 316 | ||
311 | QObject::connect(mCalPopup,SIGNAL(aboutToShow()),this, | 317 | QObject::connect(mCalPopup,SIGNAL(aboutToShow()),this, |
312 | SLOT( populateCalPopup() )); | 318 | SLOT( populateCalPopup() )); |
313 | QObject::connect(mCalPopup,SIGNAL(activated( int )),this, | 319 | QObject::connect(mCalPopup,SIGNAL(activated( int )),this, |
314 | SLOT( setCalendar( int ) )); | 320 | SLOT( setCalendar( int ) )); |
315 | QPopupMenu * exportPO = new QPopupMenu ( this ); | 321 | QPopupMenu * exportPO = new QPopupMenu ( this ); |
316 | mPopupMenu->insertItem( i18n("Export selected"), exportPO ); | 322 | mPopupMenu->insertItem( i18n("Export selected"), exportPO ); |
317 | exportPO->insertItem( i18n("As iCal (ics) file..."),this, | 323 | exportPO->insertItem( i18n("As iCal (ics) file..."),this, |
318 | SLOT(saveToFile())); | 324 | SLOT(saveToFile())); |
319 | exportPO->insertItem( i18n("As vCal (vcs) file..."),this, | 325 | exportPO->insertItem( i18n("As vCal (vcs) file..."),this, |
320 | SLOT(saveToFileVCS())); | 326 | SLOT(saveToFileVCS())); |
321 | exportPO->insertItem( i18n("Journal/Details..."),this, | 327 | exportPO->insertItem( i18n("Journal/Details..."),this, |
322 | SLOT(saveDescriptionToFile())); | 328 | SLOT(saveDescriptionToFile())); |
323 | // mPopupMenu->insertSeparator(); | 329 | // mPopupMenu->insertSeparator(); |
324 | mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), | 330 | mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), |
325 | i18n("Add Categ. to selected..."),this, | 331 | i18n("Add Categ. to selected..."),this, |
326 | SLOT(addCat()),true); | 332 | SLOT(addCat()),true); |
327 | mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), | 333 | mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), |
328 | i18n("Set Categ. for selected..."),this, | 334 | i18n("Set Categ. for selected..."),this, |
329 | SLOT(setCat()),true); | 335 | SLOT(setCat()),true); |
330 | //mPopupMenu->insertSeparator(); | 336 | //mPopupMenu->insertSeparator(); |
331 | mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), | 337 | mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), |
332 | i18n("Set alarm for selected..."),this, | 338 | i18n("Set alarm for selected..."),this, |
333 | SLOT(setAlarm()),true); | 339 | SLOT(setAlarm()),true); |
334 | 340 | ||
335 | 341 | ||
336 | 342 | ||
337 | #ifndef DESKTOP_VERSION | 343 | #ifndef DESKTOP_VERSION |
338 | mPopupMenu->insertSeparator(); | 344 | mPopupMenu->insertSeparator(); |
339 | mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), | 345 | mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), |
340 | i18n("Beam selected via IR"),this, | 346 | i18n("Beam selected via IR"),this, |
341 | SLOT(beamSelected()),true); | 347 | SLOT(beamSelected()),true); |
342 | #endif | 348 | #endif |
343 | /* | 349 | /* |
344 | mPopupMenu = new QPopupMenu; | 350 | mPopupMenu = new QPopupMenu; |
345 | mPopupMenu->insertItem(i18n("Edit Event"), this, | 351 | mPopupMenu->insertItem(i18n("Edit Event"), this, |
346 | SLOT (editEvent())); | 352 | SLOT (editEvent())); |
347 | mPopupMenu->insertItem(SmallIcon("delete"), i18n("Delete Event"), this, | 353 | mPopupMenu->insertItem(SmallIcon("delete"), i18n("Delete Event"), this, |
348 | SLOT (deleteEvent())); | 354 | SLOT (deleteEvent())); |
349 | mPopupMenu->insertSeparator(); | 355 | mPopupMenu->insertSeparator(); |
350 | mPopupMenu->insertItem(i18n("Show Dates"), this, | 356 | mPopupMenu->insertItem(i18n("Show Dates"), this, |
351 | SLOT(showDates())); | 357 | SLOT(showDates())); |
352 | mPopupMenu->insertItem(i18n("Hide Dates"), this, | 358 | mPopupMenu->insertItem(i18n("Hide Dates"), this, |
353 | SLOT(hideDates())); | 359 | SLOT(hideDates())); |
354 | */ | 360 | */ |
355 | QObject::connect(mListView,SIGNAL( newEvent()), | 361 | QObject::connect(mListView,SIGNAL( newEvent()), |
356 | this,SIGNAL(signalNewEvent())); | 362 | this,SIGNAL(signalNewEvent())); |
357 | QObject::connect(mListView,SIGNAL(doubleClicked(QListViewItem *)), | 363 | QObject::connect(mListView,SIGNAL(doubleClicked(QListViewItem *)), |
358 | this,SLOT(defaultItemAction(QListViewItem *))); | 364 | this,SLOT(defaultItemAction(QListViewItem *))); |
359 | QObject::connect(mListView,SIGNAL(rightButtonPressed( QListViewItem *, | 365 | QObject::connect(mListView,SIGNAL(rightButtonPressed( QListViewItem *, |
360 | const QPoint &, int )), | 366 | const QPoint &, int )), |
361 | this,SLOT(popupMenu(QListViewItem *,const QPoint &,int))); | 367 | this,SLOT(popupMenu(QListViewItem *,const QPoint &,int))); |
362 | QObject::connect(mListView,SIGNAL(currentChanged(QListViewItem *)), | 368 | QObject::connect(mListView,SIGNAL(currentChanged(QListViewItem *)), |
363 | SLOT(processSelectionChange(QListViewItem *))); | 369 | SLOT(processSelectionChange(QListViewItem *))); |
364 | QObject::connect(mListView,SIGNAL(showIncidence(Incidence *)), | 370 | QObject::connect(mListView,SIGNAL(showIncidence(Incidence *)), |
365 | SIGNAL(showIncidenceSignal(Incidence *)) ); | 371 | SIGNAL(showIncidenceSignal(Incidence *)) ); |
366 | 372 | ||
367 | readSettings(KOGlobals::config(),"KOListView Layout"); | 373 | readSettings(KOGlobals::config(),"KOListView Layout"); |
368 | } | 374 | } |
369 | 375 | ||
370 | KOListView::~KOListView() | 376 | KOListView::~KOListView() |
371 | { | 377 | { |
372 | delete mPopupMenu; | 378 | delete mPopupMenu; |
373 | #if QT_VERSION >= 0x030000 | 379 | #if QT_VERSION >= 0x030000 |
374 | 380 | ||
375 | #else | 381 | #else |
376 | delete mKOListViewWhatsThis; | 382 | delete mKOListViewWhatsThis; |
377 | #endif | 383 | #endif |
378 | } | 384 | } |
379 | 385 | ||
380 | QString KOListView::getWhatsThisText(QPoint p) | 386 | QString KOListView::getWhatsThisText(QPoint p) |
381 | { | 387 | { |
382 | KOListViewItem* item = ( KOListViewItem* ) mListView->itemAt( p ); | 388 | KOListViewItem* item = ( KOListViewItem* ) mListView->itemAt( p ); |
383 | if ( item ) | 389 | if ( item ) |
384 | return KIncidenceFormatter::instance()->getFormattedText( item->data(), | 390 | return KIncidenceFormatter::instance()->getFormattedText( item->data(), |
385 | KOPrefs::instance()->mWTshowDetails, | 391 | KOPrefs::instance()->mWTshowDetails, |
386 | KOPrefs::instance()->mWTshowCreated, | 392 | KOPrefs::instance()->mWTshowCreated, |
387 | KOPrefs::instance()->mWTshowChanged); | 393 | KOPrefs::instance()->mWTshowChanged); |
388 | return i18n("That is the list view" ); | 394 | return i18n("That is the list view" ); |
389 | 395 | ||
390 | } | 396 | } |
391 | 397 | ||
392 | void KOListView::setCalendar( int c ) | 398 | void KOListView::setCalendar( int c ) |
393 | { | 399 | { |
394 | int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"), | 400 | int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"), |
395 | i18n("This adds the selected\nitems to the calendar\n%1\nand removes them from\ntheir current calendar!").arg( KOPrefs::instance()->calName( c ) ), | 401 | i18n("This adds the selected\nitems to the calendar\n%1\nand removes them from\ntheir current calendar!").arg( KOPrefs::instance()->calName( c ) ), |
396 | i18n("Continue"), i18n("Cancel"), 0, | 402 | i18n("Continue"), i18n("Cancel"), 0, |
397 | 0, 1 ); | 403 | 0, 1 ); |
398 | if ( result != 0 ) { | 404 | if ( result != 0 ) { |
399 | return; | 405 | return; |
400 | } | 406 | } |
401 | 407 | ||
402 | QPtrList<Incidence> delSel = getSelectedIncidences() ; | 408 | QPtrList<Incidence> delSel = getSelectedIncidences() ; |
403 | int icount = delSel.count(); | 409 | int icount = delSel.count(); |
404 | if ( icount ) { | 410 | if ( icount ) { |
405 | Incidence *incidence = delSel.first(); | 411 | Incidence *incidence = delSel.first(); |
406 | while ( incidence ) { | 412 | while ( incidence ) { |
407 | incidence->setCalID( c ); | 413 | incidence->setCalID( c ); |
408 | KOListViewItem * item = getItemForEvent( incidence ); | 414 | KOListViewItem * item = getItemForEvent( incidence ); |
409 | if ( item ) { | 415 | if ( item ) { |
410 | ListItemVisitor v(item, mStartDate ); | 416 | ListItemVisitor v(item, mStartDate ); |
411 | incidence->accept(v); | 417 | incidence->accept(v); |
412 | } | 418 | } |
413 | incidence = delSel.next(); | 419 | incidence = delSel.next(); |
414 | } | 420 | } |
415 | } | 421 | } |
416 | QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; | 422 | QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; |
417 | KopiCalendarFile * cal = calendars.first(); | 423 | KopiCalendarFile * cal = calendars.first(); |
418 | while ( cal ) { | 424 | while ( cal ) { |
419 | mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled ); | 425 | mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled ); |
420 | mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled ); | 426 | mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled ); |
421 | mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly ); | 427 | mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly ); |
422 | if ( cal->isStandard ) | 428 | if ( cal->isStandard ) |
423 | mCalendar->setDefaultCalendar( cal->mCalNumber ); | 429 | mCalendar->setDefaultCalendar( cal->mCalNumber ); |
424 | cal = calendars.next(); | 430 | cal = calendars.next(); |
425 | } | 431 | } |
426 | mCalendar->setSyncEventsReadOnly(); | 432 | mCalendar->setSyncEventsReadOnly(); |
427 | mCalendar->reInitAlarmSettings(); | 433 | mCalendar->reInitAlarmSettings(); |
428 | 434 | ||
429 | } | 435 | } |
430 | void KOListView::populateCalPopup() | 436 | void KOListView::populateCalPopup() |
431 | { | 437 | { |
432 | mCalPopup->clear(); | 438 | mCalPopup->clear(); |
433 | KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); | 439 | KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); |
434 | while ( kkf ) { | 440 | while ( kkf ) { |
435 | mCalPopup->insertItem( kkf->mName, kkf->mCalNumber); | 441 | mCalPopup->insertItem( kkf->mName, kkf->mCalNumber); |
436 | kkf = KOPrefs::instance()->mCalendars.next(); | 442 | kkf = KOPrefs::instance()->mCalendars.next(); |
437 | } | 443 | } |
438 | } | 444 | } |
439 | void KOListView::updateList() | 445 | void KOListView::updateList() |
440 | { | 446 | { |
441 | // qDebug(" KOListView::updateList() "); | 447 | // qDebug(" KOListView::updateList() "); |
442 | 448 | ||
443 | } | 449 | } |
444 | 450 | ||
445 | void KOListView::clearList() | 451 | void KOListView::clearList() |
446 | { | 452 | { |
447 | clear (); | 453 | clear (); |
448 | } | 454 | } |
449 | void KOListView::addCat( ) | 455 | void KOListView::addCat( ) |
450 | { | 456 | { |
451 | setCategories( false ); | 457 | setCategories( false ); |
452 | } | 458 | } |
453 | void KOListView::setCat() | 459 | void KOListView::setCat() |
454 | { | 460 | { |
455 | setCategories( true ); | 461 | setCategories( true ); |
456 | } | 462 | } |
457 | 463 | ||
458 | void KOListView::setAlarm() | 464 | void KOListView::setAlarm() |
459 | { | 465 | { |
460 | KOAlarmPrefs kap( this); | 466 | KOAlarmPrefs kap( this); |
461 | if ( !kap.exec() ) | 467 | if ( !kap.exec() ) |
462 | return; | 468 | return; |
463 | QStringList itemList; | 469 | QStringList itemList; |
464 | QPtrList<KOListViewItem> sel ; | 470 | QPtrList<KOListViewItem> sel ; |
465 | QListViewItem *qitem = mListView->firstChild (); | 471 | QListViewItem *qitem = mListView->firstChild (); |
466 | while ( qitem ) { | 472 | while ( qitem ) { |
467 | if ( qitem->isSelected() ) { | 473 | if ( qitem->isSelected() ) { |
468 | Incidence* inc = ((KOListViewItem *) qitem)->data(); | 474 | Incidence* inc = ((KOListViewItem *) qitem)->data(); |
469 | if ( inc->typeID() != journalID ) { | 475 | if ( inc->typeID() != journalID ) { |
470 | if ( inc->typeID() == todoID ) { | 476 | if ( inc->typeID() == todoID ) { |
471 | if ( ((Todo*)inc)->hasDueDate() ) | 477 | if ( ((Todo*)inc)->hasDueDate() ) |
472 | sel.append(((KOListViewItem *)qitem)); | 478 | sel.append(((KOListViewItem *)qitem)); |
473 | } else | 479 | } else |
474 | sel.append(((KOListViewItem *)qitem)); | 480 | sel.append(((KOListViewItem *)qitem)); |
475 | } | 481 | } |
476 | } | 482 | } |
477 | qitem = qitem->nextSibling(); | 483 | qitem = qitem->nextSibling(); |
478 | } | 484 | } |
479 | int count = 0; | 485 | int count = 0; |
480 | KOListViewItem * item, *temp; | 486 | KOListViewItem * item, *temp; |
481 | item = sel.first(); | 487 | item = sel.first(); |
482 | Incidence* inc; | 488 | Incidence* inc; |
483 | while ( item ) { | 489 | while ( item ) { |
484 | inc = item->data(); | 490 | inc = item->data(); |
485 | ++count; | 491 | ++count; |
486 | if (kap.mAlarmButton->isChecked()) { | 492 | if (kap.mAlarmButton->isChecked()) { |
487 | if (inc->alarms().count() == 0) | 493 | if (inc->alarms().count() == 0) |
488 | inc->newAlarm(); | 494 | inc->newAlarm(); |
489 | QPtrList<Alarm> alarms = inc->alarms(); | 495 | QPtrList<Alarm> alarms = inc->alarms(); |
490 | Alarm *alarm; | 496 | Alarm *alarm; |
491 | for (alarm = alarms.first(); alarm; alarm = alarms.next() ) { | 497 | for (alarm = alarms.first(); alarm; alarm = alarms.next() ) { |
492 | alarm->setEnabled(true); | 498 | alarm->setEnabled(true); |
493 | int j = kap.mAlarmTimeEdit->value()* -60; | 499 | int j = kap.mAlarmTimeEdit->value()* -60; |
494 | if (kap.mAlarmIncrCombo->currentItem() == 1) | 500 | if (kap.mAlarmIncrCombo->currentItem() == 1) |
495 | j = j * 60; | 501 | j = j * 60; |
496 | else if (kap.mAlarmIncrCombo->currentItem() == 2) | 502 | else if (kap.mAlarmIncrCombo->currentItem() == 2) |
497 | j = j * (60 * 24); | 503 | j = j * (60 * 24); |
498 | alarm->setStartOffset( j ); | 504 | alarm->setStartOffset( j ); |
499 | 505 | ||
500 | if (!kap.mAlarmProgram.isEmpty() && kap.mAlarmProgramButton->isOn()) { | 506 | if (!kap.mAlarmProgram.isEmpty() && kap.mAlarmProgramButton->isOn()) { |
501 | alarm->setProcedureAlarm(kap.mAlarmProgram); | 507 | alarm->setProcedureAlarm(kap.mAlarmProgram); |
502 | } | 508 | } |
503 | else if (!kap.mAlarmSound.isEmpty() && kap.mAlarmSoundButton->isOn()) | 509 | else if (!kap.mAlarmSound.isEmpty() && kap.mAlarmSoundButton->isOn()) |
504 | alarm->setAudioAlarm(kap.mAlarmSound); | 510 | alarm->setAudioAlarm(kap.mAlarmSound); |
505 | else | 511 | else |
506 | alarm->setType(Alarm::Invalid); | 512 | alarm->setType(Alarm::Invalid); |
507 | //alarm->setAudioAlarm("default"); | 513 | //alarm->setAudioAlarm("default"); |
508 | // TODO: Deal with multiple alarms | 514 | // TODO: Deal with multiple alarms |
509 | break; // For now, stop after the first alarm | 515 | break; // For now, stop after the first alarm |
510 | } | 516 | } |
511 | } else { | 517 | } else { |
512 | Alarm* alarm = inc->alarms().first(); | 518 | Alarm* alarm = inc->alarms().first(); |
513 | if ( alarm ) { | 519 | if ( alarm ) { |
514 | alarm->setEnabled(false); | 520 | alarm->setEnabled(false); |
515 | alarm->setType(Alarm::Invalid); | 521 | alarm->setType(Alarm::Invalid); |
516 | } | 522 | } |
517 | } | 523 | } |
518 | ListItemVisitor v(item, mStartDate ); | 524 | ListItemVisitor v(item, mStartDate ); |
519 | inc->accept(v); | 525 | inc->accept(v); |
520 | item = sel.next(); | 526 | item = sel.next(); |
521 | } | 527 | } |
522 | topLevelWidget()->setCaption( i18n("Changed alarm for %1 items").arg( count ) ); | 528 | topLevelWidget()->setCaption( i18n("Changed alarm for %1 items").arg( count ) ); |
523 | qDebug("KO: Set alarm for %d items", count); | 529 | qDebug("KO: Set alarm for %d items", count); |
524 | calendar()->reInitAlarmSettings(); | 530 | calendar()->reInitAlarmSettings(); |
525 | QTimer::singleShot( 1, this, SLOT ( resetFocus() ) ); | 531 | QTimer::singleShot( 1, this, SLOT ( resetFocus() ) ); |
526 | } | 532 | } |
527 | void KOListView::setCategories( bool removeOld ) | 533 | void KOListView::setCategories( bool removeOld ) |
528 | { | 534 | { |
529 | 535 | ||
530 | KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 ); | 536 | KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 ); |
531 | csd->setColorEnabled(); | 537 | csd->setColorEnabled(); |
532 | if (! csd->exec()) { | 538 | if (! csd->exec()) { |
533 | delete csd; | 539 | delete csd; |
534 | return; | 540 | return; |
535 | } | 541 | } |
536 | QStringList catList = csd->selectedCategories(); | 542 | QStringList catList = csd->selectedCategories(); |
537 | delete csd; | 543 | delete csd; |
538 | // if ( catList.count() == 0 ) | 544 | // if ( catList.count() == 0 ) |
539 | // return; | 545 | // return; |
540 | //catList.sort(); | 546 | //catList.sort(); |
541 | QString categoriesStr = catList.join(","); | 547 | QString categoriesStr = catList.join(","); |
542 | int i; | 548 | int i; |
543 | QStringList itemList; | 549 | QStringList itemList; |
544 | QPtrList<KOListViewItem> sel ; | 550 | QPtrList<KOListViewItem> sel ; |
545 | QListViewItem *qitem = mListView->firstChild (); | 551 | QListViewItem *qitem = mListView->firstChild (); |
546 | while ( qitem ) { | 552 | while ( qitem ) { |
547 | if ( qitem->isSelected() ) { | 553 | if ( qitem->isSelected() ) { |
548 | sel.append(((KOListViewItem *)qitem)); | 554 | sel.append(((KOListViewItem *)qitem)); |
549 | } | 555 | } |
550 | qitem = qitem->nextSibling(); | 556 | qitem = qitem->nextSibling(); |
551 | } | 557 | } |
552 | KOListViewItem * item, *temp; | 558 | KOListViewItem * item, *temp; |
553 | item = sel.first(); | 559 | item = sel.first(); |
554 | if( item ) { | 560 | if( item ) { |
555 | Incidence* inc = item->data() ; | 561 | Incidence* inc = item->data() ; |
556 | bool setSub = false; | 562 | bool setSub = false; |
557 | if( inc->typeID() == todoID && sel.count() == 1 && inc->relations().count() > 0 ) { | 563 | if( inc->typeID() == todoID && sel.count() == 1 && inc->relations().count() > 0 ) { |
558 | int result = KMessageBox::warningYesNoCancel(this, | 564 | int result = KMessageBox::warningYesNoCancel(this, |
559 | i18n("The todo\n%1\nhas subtodos!\nDo you want to set\nthe categories for\nall subtodos as well?").arg( inc->summary().left ( 25 ) ), | 565 | i18n("The todo\n%1\nhas subtodos!\nDo you want to set\nthe categories for\nall subtodos as well?").arg( inc->summary().left ( 25 ) ), |
560 | i18n("Todo has subtodos"), | 566 | i18n("Todo has subtodos"), |
561 | i18n("Yes"), | 567 | i18n("Yes"), |
562 | i18n("No")); | 568 | i18n("No")); |
563 | if (result == KMessageBox::Cancel) item = 0; | 569 | if (result == KMessageBox::Cancel) item = 0; |
564 | if (result == KMessageBox::Yes) setSub = true; | 570 | if (result == KMessageBox::Yes) setSub = true; |
565 | } | 571 | } |
566 | while ( item ) { | 572 | while ( item ) { |
567 | inc = item->data(); | 573 | inc = item->data(); |
568 | if ( removeOld ) { | 574 | if ( removeOld ) { |
569 | inc->setCategories( catList, setSub ); | 575 | inc->setCategories( catList, setSub ); |
570 | } else { | 576 | } else { |
571 | inc->addCategories( catList, setSub ); | 577 | inc->addCategories( catList, setSub ); |
572 | } | 578 | } |
573 | ListItemVisitor v(item, mStartDate ); | 579 | ListItemVisitor v(item, mStartDate ); |
574 | inc->accept(v); | 580 | inc->accept(v); |
575 | item = sel.next(); | 581 | item = sel.next(); |
576 | } | 582 | } |
577 | } | 583 | } |
578 | QTimer::singleShot( 1, this, SLOT ( resetFocus() ) ); | 584 | QTimer::singleShot( 1, this, SLOT ( resetFocus() ) ); |
579 | } | 585 | } |
580 | 586 | ||
581 | void KOListView::beamSelected() | 587 | void KOListView::beamSelected() |
582 | { | 588 | { |
583 | QPtrList<Incidence> delSel = getSelectedIncidences() ; | 589 | QPtrList<Incidence> delSel = getSelectedIncidences() ; |
584 | int icount = delSel.count(); | 590 | int icount = delSel.count(); |
585 | if ( icount ) { | 591 | if ( icount ) { |
586 | emit beamIncidenceList( delSel ); | 592 | emit beamIncidenceList( delSel ); |
587 | return; | 593 | return; |
588 | QString fn ; | 594 | QString fn ; |
589 | fn = QDir::homeDirPath()+"/kopitempbeamfile.vcs"; | 595 | fn = QDir::homeDirPath()+"/kopitempbeamfile.vcs"; |
590 | QString mes; | 596 | QString mes; |
591 | bool createbup = true; | 597 | bool createbup = true; |
592 | if ( createbup ) { | 598 | if ( createbup ) { |
593 | QString description = "\n"; | 599 | QString description = "\n"; |
594 | CalendarLocal* cal = new CalendarLocal(); | 600 | CalendarLocal* cal = new CalendarLocal(); |
595 | cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); | 601 | cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); |
596 | Incidence *incidence = delSel.first(); | 602 | Incidence *incidence = delSel.first(); |
597 | while ( incidence ) { | 603 | while ( incidence ) { |
598 | Incidence *in = incidence->clone(); | 604 | Incidence *in = incidence->clone(); |
599 | description += in->summary() + "\n"; | 605 | description += in->summary() + "\n"; |
600 | cal->addIncidence( in ); | 606 | cal->addIncidence( in ); |
601 | incidence = delSel.next(); | 607 | incidence = delSel.next(); |
602 | } | 608 | } |
603 | FileStorage storage( cal, fn, new VCalFormat ); | 609 | FileStorage storage( cal, fn, new VCalFormat ); |
604 | storage.save(); | 610 | storage.save(); |
605 | delete cal; | 611 | delete cal; |
diff --git a/korganizer/searchdialog.cpp b/korganizer/searchdialog.cpp index 0e9f64c..72359df 100644 --- a/korganizer/searchdialog.cpp +++ b/korganizer/searchdialog.cpp | |||
@@ -1,598 +1,617 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of KOrganizer. | 2 | This file is part of KOrganizer. |
3 | Copyright (c) 1998 Preston Brown | 3 | Copyright (c) 1998 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 <qlayout.h> | 25 | #include <qlayout.h> |
26 | #include <qcheckbox.h> | 26 | #include <qcheckbox.h> |
27 | #include <qgroupbox.h> | 27 | #include <qgroupbox.h> |
28 | #include <qlabel.h> | 28 | #include <qlabel.h> |
29 | #include <qlistview.h> | 29 | #include <qlistview.h> |
30 | #include <qwhatsthis.h> | 30 | #include <qwhatsthis.h> |
31 | #include <qlineedit.h> | 31 | #include <qlineedit.h> |
32 | #include <qpushbutton.h> | 32 | #include <qpushbutton.h> |
33 | #include <qhbuttongroup.h> | 33 | #include <qhbuttongroup.h> |
34 | #include <klocale.h> | 34 | #include <klocale.h> |
35 | #include <kmessagebox.h> | 35 | #include <kmessagebox.h> |
36 | 36 | ||
37 | #include <libkdepim/kdateedit.h> | 37 | #include <libkdepim/kdateedit.h> |
38 | 38 | ||
39 | #include "koglobals.h" | 39 | #include "koglobals.h" |
40 | #include "koprefs.h" | 40 | #include "koprefs.h" |
41 | #include "klineedit.h" | 41 | #include "klineedit.h" |
42 | 42 | ||
43 | #include "calendarview.h" | 43 | #include "calendarview.h" |
44 | #include "koviewmanager.h" | 44 | #include "koviewmanager.h" |
45 | #include "searchdialog.h" | 45 | #include "searchdialog.h" |
46 | 46 | ||
47 | SearchDialog::SearchDialog(Calendar *calendar,CalendarView *parent) | 47 | SearchDialog::SearchDialog(Calendar *calendar,CalendarView *parent) |
48 | : QVBox( 0 ) | 48 | : QVBox( 0 ) |
49 | 49 | ||
50 | { | 50 | { |
51 | mCalendar = calendar; | 51 | mCalendar = calendar; |
52 | QFrame *topFrame = new QFrame( this ) ;//plainPage(); | 52 | QFrame *topFrame = new QFrame( this ) ;//plainPage(); |
53 | QVBoxLayout *layout = new QVBoxLayout(topFrame,KDialog::marginHint(),KDialog::spacingHint()); | 53 | QVBoxLayout *layout = new QVBoxLayout(topFrame,KDialog::marginHint(),KDialog::spacingHint()); |
54 | 54 | ||
55 | // Search expression | 55 | // Search expression |
56 | QHBoxLayout *subLayout = new QHBoxLayout(); | 56 | QHBoxLayout *subLayout = new QHBoxLayout(); |
57 | layout->addLayout(subLayout); | 57 | layout->addLayout(subLayout); |
58 | /* | 58 | /* |
59 | searchLabel = new QLabel(topFrame); | 59 | searchLabel = new QLabel(topFrame); |
60 | searchLabel->setText(i18n("Search for:")); | 60 | searchLabel->setText(i18n("Search for:")); |
61 | subLayout->addWidget(searchLabel); | 61 | subLayout->addWidget(searchLabel); |
62 | */ | 62 | */ |
63 | QPushButton *OkButton = new QPushButton( i18n("Search for:"), topFrame ); | 63 | QPushButton *OkButton = new QPushButton( i18n("Search for:"), topFrame ); |
64 | //OkButton->setDefault( true ); | 64 | //OkButton->setDefault( true ); |
65 | connect(OkButton,SIGNAL(clicked()),SLOT(doSearch())); | 65 | connect(OkButton,SIGNAL(clicked()),SLOT(doSearch())); |
66 | subLayout->addWidget(OkButton); | 66 | subLayout->addWidget(OkButton); |
67 | searchEdit = new KLineEdit(topFrame); | 67 | searchEdit = new KLineEdit(topFrame); |
68 | subLayout->addWidget(searchEdit); | 68 | subLayout->addWidget(searchEdit); |
69 | 69 | ||
70 | mAddItems = new QRadioButton( "+ ", topFrame ); | 70 | mAddItems = new QRadioButton( "+ ", topFrame ); |
71 | mSubItems = new QRadioButton( "- ", topFrame ); | 71 | mSubItems = new QRadioButton( "- ", topFrame ); |
72 | mRefineItems = new QRadioButton( "< ", topFrame ); | 72 | mRefineItems = new QRadioButton( "< ", topFrame ); |
73 | subLayout->addWidget( mAddItems ); | 73 | subLayout->addWidget( mAddItems ); |
74 | subLayout->addWidget( mSubItems ); | 74 | subLayout->addWidget( mSubItems ); |
75 | subLayout->addWidget( mRefineItems ); | 75 | subLayout->addWidget( mRefineItems ); |
76 | QFont fo ( mAddItems->font() ); | 76 | QFont fo ( mAddItems->font() ); |
77 | fo.setBold( true ); | 77 | fo.setBold( true ); |
78 | fo.setPointSize( fo.pointSize() + 2 ); | 78 | fo.setPointSize( fo.pointSize() + 2 ); |
79 | mAddItems->setFont( fo ); | 79 | mAddItems->setFont( fo ); |
80 | mSubItems->setFont( fo ); | 80 | mSubItems->setFont( fo ); |
81 | mRefineItems->setFont( fo ); | 81 | mRefineItems->setFont( fo ); |
82 | connect( mAddItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_add( bool ))); | 82 | connect( mAddItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_add( bool ))); |
83 | connect( mSubItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_sub( bool ))); | 83 | connect( mSubItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_sub( bool ))); |
84 | connect( mRefineItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_refine( bool ))); | 84 | connect( mRefineItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_refine( bool ))); |
85 | 85 | ||
86 | QPushButton *togButton = new QPushButton( "", topFrame ); | 86 | QPushButton *togButton = new QPushButton( "", topFrame ); |
87 | subLayout->addWidget(togButton); | 87 | subLayout->addWidget(togButton); |
88 | connect(togButton,SIGNAL(clicked()),SLOT(toggleCheckboxes())); | 88 | connect(togButton,SIGNAL(clicked()),SLOT(toggleCheckboxes())); |
89 | togButton->setPixmap(SmallIcon("1updownarrow")); | 89 | togButton->setPixmap(SmallIcon("1updownarrow")); |
90 | togButton->setMinimumWidth( togButton->sizeHint().height() ); | 90 | togButton->setMinimumWidth( togButton->sizeHint().height() ); |
91 | 91 | ||
92 | searchEdit->setText("*"); // Find all events by default | 92 | searchEdit->setText("*"); // Find all events by default |
93 | searchEdit->setFocus(); | 93 | searchEdit->setFocus(); |
94 | connect(searchEdit, SIGNAL(textChanged ( const QString & )),this,SLOT(searchTextChanged( const QString & ))); | 94 | connect(searchEdit, SIGNAL(textChanged ( const QString & )),this,SLOT(searchTextChanged( const QString & ))); |
95 | connect(searchEdit, SIGNAL( returnPressed () ),this,SLOT(doSearch())); | 95 | connect(searchEdit, SIGNAL( returnPressed () ),this,SLOT(doSearch())); |
96 | // Subjects to search | 96 | // Subjects to search |
97 | // QGroupBox *subjectGroup = new QGroupBox(1,Vertical,i18n("Search In"), | 97 | // QGroupBox *subjectGroup = new QGroupBox(1,Vertical,i18n("Search In"), |
98 | // topFrame); | 98 | // topFrame); |
99 | 99 | ||
100 | incidenceGroup = new QHBox( topFrame ); | 100 | incidenceGroup = new QHBox( topFrame ); |
101 | layout->addWidget(incidenceGroup); | 101 | layout->addWidget(incidenceGroup); |
102 | 102 | ||
103 | mSearchEvent = new QCheckBox(i18n("Events"),incidenceGroup); | 103 | mSearchEvent = new QCheckBox(i18n("Events"),incidenceGroup); |
104 | //mSearchEvent->setChecked(true); | 104 | //mSearchEvent->setChecked(true); |
105 | mSearchTodo = new QCheckBox(i18n("Todos"),incidenceGroup); | 105 | mSearchTodo = new QCheckBox(i18n("Todos"),incidenceGroup); |
106 | mSearchJournal = new QCheckBox(i18n("Journals"),incidenceGroup); | 106 | mSearchJournal = new QCheckBox(i18n("Journals"),incidenceGroup); |
107 | 107 | ||
108 | subjectGroup = new QHBox( topFrame ); | 108 | subjectGroup = new QHBox( topFrame ); |
109 | layout->addWidget(subjectGroup); | 109 | layout->addWidget(subjectGroup); |
110 | 110 | ||
111 | mSummaryCheck = new QCheckBox(i18n("Summary/Loc."),subjectGroup); | 111 | mSummaryCheck = new QCheckBox(i18n("Summary/Loc."),subjectGroup); |
112 | mSummaryCheck->setChecked(true); | 112 | mSummaryCheck->setChecked(true); |
113 | mDescriptionCheck = new QCheckBox(i18n("Details"),subjectGroup); | 113 | mDescriptionCheck = new QCheckBox(i18n("Details"),subjectGroup); |
114 | mCategoryCheck = new QCheckBox(i18n("Categories"),subjectGroup); | 114 | mCategoryCheck = new QCheckBox(i18n("Categories"),subjectGroup); |
115 | 115 | ||
116 | attendeeGroup = new QHBox( topFrame ); | 116 | attendeeGroup = new QHBox( topFrame ); |
117 | layout->addWidget(attendeeGroup ); | 117 | layout->addWidget(attendeeGroup ); |
118 | new QLabel( i18n("Attendee:"),attendeeGroup ); | 118 | new QLabel( i18n("Attendee:"),attendeeGroup ); |
119 | mSearchAName = new QCheckBox(i18n("Name"),attendeeGroup ); | 119 | mSearchAName = new QCheckBox(i18n("Name"),attendeeGroup ); |
120 | mSearchAEmail = new QCheckBox(i18n("Email"), attendeeGroup ); | 120 | mSearchAEmail = new QCheckBox(i18n("Email"), attendeeGroup ); |
121 | // Date range | 121 | // Date range |
122 | // QGroupBox *rangeGroup = new QGroupBox(1,Horizontal,i18n("Date Range"), | 122 | // QGroupBox *rangeGroup = new QGroupBox(1,Horizontal,i18n("Date Range"), |
123 | // topFrame); | 123 | // topFrame); |
124 | // layout->addWidget(rangeGroup); | 124 | // layout->addWidget(rangeGroup); |
125 | 125 | ||
126 | QWidget *rangeWidget = new QWidget(topFrame); | 126 | QWidget *rangeWidget = new QWidget(topFrame); |
127 | QHBoxLayout *rangeLayout = new QHBoxLayout(rangeWidget,0,KDialog::spacingHint()); | 127 | QHBoxLayout *rangeLayout = new QHBoxLayout(rangeWidget,0,KDialog::spacingHint()); |
128 | rangeLayout->addWidget(new QLabel(i18n("From:"),rangeWidget)); | 128 | rangeLayout->addWidget(new QLabel(i18n("From:"),rangeWidget)); |
129 | mStartDate = new KDateEdit(rangeWidget); | 129 | mStartDate = new KDateEdit(rangeWidget); |
130 | rangeLayout->addWidget(mStartDate); | 130 | rangeLayout->addWidget(mStartDate); |
131 | rangeLayout->addWidget(new QLabel(i18n("To:"),rangeWidget)); | 131 | rangeLayout->addWidget(new QLabel(i18n("To:"),rangeWidget)); |
132 | mEndDate = new KDateEdit(rangeWidget); | 132 | mEndDate = new KDateEdit(rangeWidget); |
133 | mEndDate->setDate(QDate::currentDate().addDays(365)); | 133 | mEndDate->setDate(QDate::currentDate().addDays(365)); |
134 | rangeLayout->addWidget(mEndDate); | 134 | rangeLayout->addWidget(mEndDate); |
135 | QToolButton *wt = QWhatsThis::whatsThisButton ( rangeWidget ); | 135 | QToolButton *wt = QWhatsThis::whatsThisButton ( rangeWidget ); |
136 | rangeLayout->addWidget( (QWidget*)wt ); | 136 | rangeLayout->addWidget( (QWidget*)wt ); |
137 | layout->addWidget(rangeWidget); | 137 | layout->addWidget(rangeWidget); |
138 | // Results list view | 138 | // Results list view |
139 | listView = new KOListView(mCalendar,topFrame); | 139 | listView = new KOListView(mCalendar,topFrame); |
140 | layout->addWidget(listView); | 140 | layout->addWidget(listView); |
141 | listView->showCompletedTodos(); | 141 | listView->showCompletedTodos(); |
142 | //layout->setStretchFactor( listView, 333 ); | 142 | //layout->setStretchFactor( listView, 333 ); |
143 | //listView->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::Expanding) ); | 143 | //listView->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::Expanding) ); |
144 | //listView->setMaximumHeight( 50 ); | 144 | //listView->setMaximumHeight( 50 ); |
145 | listView->readSettings(KOGlobals::config(),"SearchListView Layout"); | 145 | listView->readSettings(KOGlobals::config(),"SearchListView Layout"); |
146 | connect(searchEdit,SIGNAL(scrollDOWN()),SLOT(setFocusToList())); | 146 | connect(searchEdit,SIGNAL(scrollDOWN()),SLOT(setFocusToList())); |
147 | 147 | ||
148 | setCaption( i18n("KO/Pi Find: ")); | 148 | setCaption( i18n("KO/Pi Find: ")); |
149 | #ifdef DESKTOP_VERSION | 149 | #ifdef DESKTOP_VERSION |
150 | OkButton = new QPushButton( i18n("Close"), this ); | 150 | OkButton = new QPushButton( i18n("Close"), this ); |
151 | connect(OkButton,SIGNAL(clicked()),SLOT(hide())); | 151 | connect(OkButton,SIGNAL(clicked()),SLOT(hide())); |
152 | #endif | 152 | #endif |
153 | } | 153 | } |
154 | 154 | ||
155 | SearchDialog::~SearchDialog() | 155 | SearchDialog::~SearchDialog() |
156 | { | 156 | { |
157 | 157 | ||
158 | } | 158 | } |
159 | void SearchDialog::slot_add( bool b ) | 159 | void SearchDialog::slot_add( bool b ) |
160 | { | 160 | { |
161 | if ( b ) { | 161 | if ( b ) { |
162 | if ( mSubItems->isOn() ) mSubItems->toggle(); | 162 | if ( mSubItems->isOn() ) mSubItems->toggle(); |
163 | if ( mRefineItems->isOn() ) mRefineItems->toggle(); | 163 | if ( mRefineItems->isOn() ) mRefineItems->toggle(); |
164 | setCaption( i18n("Matching items will be added to list")); | 164 | setCaption( i18n("Matching items will be added to list")); |
165 | } else | 165 | } else |
166 | setCaption( i18n("List will be cleared before search")); | 166 | setCaption( i18n("List will be cleared before search")); |
167 | } | 167 | } |
168 | void SearchDialog::slot_sub( bool b) | 168 | void SearchDialog::slot_sub( bool b) |
169 | { | 169 | { |
170 | if ( b ) { | 170 | if ( b ) { |
171 | if ( mRefineItems->isOn() ) mRefineItems->toggle(); | 171 | if ( mRefineItems->isOn() ) mRefineItems->toggle(); |
172 | if ( mAddItems->isOn() ) mAddItems->toggle(); | 172 | if ( mAddItems->isOn() ) mAddItems->toggle(); |
173 | setCaption( i18n("Matching items will be removed from list")); | 173 | setCaption( i18n("Matching items will be removed from list")); |
174 | } else | 174 | } else |
175 | setCaption( i18n("List will be cleared before search")); | 175 | setCaption( i18n("List will be cleared before search")); |
176 | } | 176 | } |
177 | void SearchDialog::slot_refine( bool b) | 177 | void SearchDialog::slot_refine( bool b) |
178 | { | 178 | { |
179 | if ( b ) { | 179 | if ( b ) { |
180 | if ( mSubItems->isOn() ) mSubItems->toggle(); | 180 | if ( mSubItems->isOn() ) mSubItems->toggle(); |
181 | if ( mAddItems->isOn() ) mAddItems->toggle(); | 181 | if ( mAddItems->isOn() ) mAddItems->toggle(); |
182 | setCaption( i18n("Search on displayed list only")); | 182 | setCaption( i18n("Search on displayed list only")); |
183 | } else | 183 | } else |
184 | setCaption( i18n("List will be cleared before search")); | 184 | setCaption( i18n("List will be cleared before search")); |
185 | } | 185 | } |
186 | void SearchDialog::toggleCheckboxes() | 186 | void SearchDialog::toggleCheckboxes() |
187 | { | 187 | { |
188 | if ( incidenceGroup->isVisible() ) { | 188 | if ( incidenceGroup->isVisible() ) { |
189 | incidenceGroup->hide() ; | 189 | incidenceGroup->hide() ; |
190 | subjectGroup->hide() ; | 190 | subjectGroup->hide() ; |
191 | attendeeGroup->hide() ; | 191 | attendeeGroup->hide() ; |
192 | } else { | 192 | } else { |
193 | incidenceGroup->show() ; | 193 | incidenceGroup->show() ; |
194 | subjectGroup->show() ; | 194 | subjectGroup->show() ; |
195 | attendeeGroup->show() ; | 195 | attendeeGroup->show() ; |
196 | } | 196 | } |
197 | } | 197 | } |
198 | void SearchDialog::raiseAndSelect() | 198 | void SearchDialog::raiseAndSelect() |
199 | { | 199 | { |
200 | 200 | ||
201 | static int currentState = 0; | 201 | static int currentState = 0; |
202 | 202 | ||
203 | if ( !mSearchJournal->isChecked() && !mSearchTodo->isChecked() && !mSearchEvent->isChecked() ) | 203 | if ( !mSearchJournal->isChecked() && !mSearchTodo->isChecked() && !mSearchEvent->isChecked() ) |
204 | currentState = 0; | 204 | currentState = 0; |
205 | int newState = 0; | 205 | int newState = 0; |
206 | if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) { | 206 | if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) { |
207 | newState = VIEW_J_VIEW; | 207 | newState = VIEW_J_VIEW; |
208 | } | 208 | } |
209 | else if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) { | 209 | else if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) { |
210 | newState = VIEW_T_VIEW; | 210 | newState = VIEW_T_VIEW; |
211 | } | 211 | } |
212 | else { | 212 | else { |
213 | newState = VIEW_A_VIEW; | 213 | newState = VIEW_A_VIEW; |
214 | } | 214 | } |
215 | if ( newState != currentState ) { | 215 | if ( newState != currentState ) { |
216 | if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) { | 216 | if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) { |
217 | if ( ! mSearchJournal->isChecked() ) { | 217 | if ( ! mSearchJournal->isChecked() ) { |
218 | mSearchJournal->setChecked( true ); | 218 | mSearchJournal->setChecked( true ); |
219 | mSearchTodo->setChecked( false ); | 219 | mSearchTodo->setChecked( false ); |
220 | mSearchEvent->setChecked( false ); | 220 | mSearchEvent->setChecked( false ); |
221 | mSummaryCheck->setChecked( true ); | ||
222 | mDescriptionCheck->setChecked( true ); | ||
223 | |||
221 | } | 224 | } |
222 | } | 225 | } |
223 | else if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) { | 226 | else if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) { |
224 | if ( ! mSearchTodo->isChecked() ) { | 227 | if ( ! mSearchTodo->isChecked() ) { |
225 | mSearchTodo->setChecked( true ); | 228 | mSearchTodo->setChecked( true ); |
226 | mSearchJournal->setChecked( false ); | 229 | mSearchJournal->setChecked( false ); |
227 | mSearchEvent->setChecked( false ); | 230 | mSearchEvent->setChecked( false ); |
228 | } | 231 | } |
229 | } | 232 | } |
230 | else { | 233 | else { |
231 | if ( ! mSearchEvent->isChecked() ) { | 234 | if ( ! mSearchEvent->isChecked() ) { |
232 | mSearchEvent->setChecked( true ); | 235 | mSearchEvent->setChecked( true ); |
233 | mSearchJournal->setChecked( false ); | 236 | mSearchJournal->setChecked( false ); |
234 | mSearchTodo->setChecked( false ); | 237 | mSearchTodo->setChecked( false ); |
235 | } | 238 | } |
236 | } | 239 | } |
237 | } | 240 | } |
238 | currentState = newState; | 241 | currentState = newState; |
239 | raise(); | 242 | raise(); |
240 | } | 243 | } |
241 | void SearchDialog::setFocusToList() | 244 | void SearchDialog::setFocusToList() |
242 | { | 245 | { |
243 | listView->resetFocus(); | 246 | listView->resetFocus(); |
244 | } | 247 | } |
245 | void SearchDialog::accept() | 248 | void SearchDialog::accept() |
246 | { | 249 | { |
247 | doSearch(); | 250 | doSearch(); |
248 | } | 251 | } |
249 | void SearchDialog::updateList() | 252 | void SearchDialog::updateList() |
250 | { | 253 | { |
251 | //listView->updateList(); | 254 | //listView->updateList(); |
252 | if ( isVisible() ) { | 255 | if ( isVisible() ) { |
253 | updateView(); | 256 | updateView(); |
254 | //qDebug("SearchDialog::updated "); | 257 | //qDebug("SearchDialog::updated "); |
255 | } | 258 | } |
256 | else { | 259 | else { |
257 | listView->clear(); | 260 | listView->clear(); |
258 | //qDebug("SearchDialog::cleared "); | 261 | //qDebug("SearchDialog::cleared "); |
259 | 262 | ||
260 | } | 263 | } |
261 | } | 264 | } |
262 | void SearchDialog::searchTextChanged( const QString &_text ) | 265 | void SearchDialog::searchTextChanged( const QString &_text ) |
263 | { | 266 | { |
264 | #if 0 | 267 | #if 0 |
265 | enableButton( KDialogBase::User1, !_text.isEmpty() ); | 268 | enableButton( KDialogBase::User1, !_text.isEmpty() ); |
266 | #endif | 269 | #endif |
267 | } | 270 | } |
268 | 271 | ||
269 | void SearchDialog::doSearch() | 272 | void SearchDialog::doSearch() |
270 | { | 273 | { |
271 | QRegExp re; | 274 | QRegExp re; |
272 | re.setWildcard(true); // most people understand these better. | 275 | re.setWildcard(true); // most people understand these better. |
273 | re.setCaseSensitive(false); | 276 | re.setCaseSensitive(false); |
274 | QString st = searchEdit->text(); | 277 | QString st = searchEdit->text(); |
275 | if ( st.right(1) != "*") | 278 | if ( st.right(1) != "*") |
276 | st += "*"; | 279 | st += "*"; |
277 | re.setPattern(st); | 280 | re.setPattern(st); |
278 | if (!mSearchEvent->isChecked() && !mSearchTodo->isChecked() && !mSearchJournal->isChecked() ) { | 281 | if (!mSearchEvent->isChecked() && !mSearchTodo->isChecked() && !mSearchJournal->isChecked() ) { |
279 | KMessageBox::sorry(this, | 282 | KMessageBox::sorry(this, |
280 | i18n("Please select at least one\nof the types to search for:\n\nEvents\nTodos\nJournals")); | 283 | i18n("Please select at least one\nof the types to search for:\n\nEvents\nTodos\nJournals")); |
281 | return; | 284 | return; |
282 | } | 285 | } |
283 | if (!re.isValid() ) { | 286 | if (!re.isValid() ) { |
284 | KMessageBox::sorry(this, | 287 | KMessageBox::sorry(this, |
285 | i18n("Invalid search expression,\ncannot perform " | 288 | i18n("Invalid search expression,\ncannot perform " |
286 | "the search.\nPlease enter a search expression\n" | 289 | "the search.\nPlease enter a search expression\n" |
287 | "using the wildcard characters\n '*' and '?'" | 290 | "using the wildcard characters\n '*' and '?'" |
288 | "where needed.")); | 291 | "where needed.")); |
289 | return; | 292 | return; |
290 | } | 293 | } |
291 | search(re); | 294 | search(re); |
292 | listView->setStartDate( mStartDate->date() ); | 295 | listView->setStartDate( mStartDate->date() ); |
293 | listView->showEvents(mMatchedEvents); | 296 | listView->showEvents(mMatchedEvents); |
294 | listView->addTodos(mMatchedTodos); | 297 | listView->addTodos(mMatchedTodos); |
295 | listView->addJournals(mMatchedJournals); | 298 | listView->addJournals(mMatchedJournals); |
296 | if (mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() == 0) { | 299 | if (mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() == 0) { |
297 | setCaption(i18n("No items found. Use '*' and '?' where needed.")); | 300 | setCaption(i18n("No items found. Use '*' and '?' where needed.")); |
298 | } else { | 301 | } else { |
299 | QString mess; | 302 | QString mess; |
300 | mess = mess.sprintf( i18n("%d item(s) found."), mMatchedEvents.count()+ mMatchedJournals.count() + mMatchedTodos.count() ); | 303 | mess = mess.sprintf( i18n("%d item(s) found."), mMatchedEvents.count()+ mMatchedJournals.count() + mMatchedTodos.count() ); |
301 | setCaption( i18n("KO/Pi Find: ") + mess); | 304 | setCaption( i18n("KO/Pi Find: ") + mess); |
302 | 305 | ||
303 | } | 306 | } |
304 | searchEdit->setFocus(); | 307 | searchEdit->setFocus(); |
305 | } | 308 | } |
306 | void SearchDialog::updateConfig() | 309 | void SearchDialog::updateConfig() |
307 | { | 310 | { |
308 | listView->updateConfig(); | 311 | listView->updateConfig(); |
309 | } | 312 | } |
310 | void SearchDialog::updateView() | 313 | void SearchDialog::updateView() |
311 | { | 314 | { |
312 | //qDebug("SearchDialog::updateView() %d ", isVisible()); | 315 | //qDebug("SearchDialog::updateView() %d ", isVisible()); |
313 | QRegExp re; | 316 | QRegExp re; |
314 | re.setWildcard(true); // most people understand these better. | 317 | re.setWildcard(true); // most people understand these better. |
315 | re.setCaseSensitive(false); | 318 | re.setCaseSensitive(false); |
316 | QString st = searchEdit->text(); | 319 | QString st = searchEdit->text(); |
317 | if ( st.right(1) != "*") | 320 | if ( st.right(1) != "*") |
318 | st += "*"; | 321 | st += "*"; |
319 | re.setPattern(st); | 322 | re.setPattern(st); |
320 | mMatchedEvents.clear(); | 323 | mMatchedEvents.clear(); |
321 | mMatchedTodos.clear(); | 324 | mMatchedTodos.clear(); |
322 | mMatchedJournals.clear(); | 325 | mMatchedJournals.clear(); |
323 | if (re.isValid()) { | 326 | if (re.isValid()) { |
324 | search(re); | 327 | search(re); |
325 | } | 328 | } |
326 | listView->setStartDate( mStartDate->date() ); | 329 | listView->setStartDate( mStartDate->date() ); |
327 | listView->showEvents(mMatchedEvents); | 330 | listView->showEvents(mMatchedEvents); |
328 | listView->addTodos(mMatchedTodos); | 331 | listView->addTodos(mMatchedTodos); |
329 | listView->addJournals(mMatchedJournals); | 332 | listView->addJournals(mMatchedJournals); |
330 | } | 333 | } |
331 | 334 | ||
332 | void SearchDialog::search(const QRegExp &re) | 335 | void SearchDialog::search(const QRegExp &re) |
333 | { | 336 | { |
334 | QPtrList<Event> events; | 337 | QPtrList<Event> events; |
335 | if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) { | 338 | if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) { |
336 | if ( mRefineItems->isChecked() ) events = mMatchedEvents; | 339 | if ( mRefineItems->isChecked() ) events = mMatchedEvents; |
337 | mMatchedEvents.clear(); | 340 | mMatchedEvents.clear(); |
338 | } | 341 | } |
339 | if ( mSearchEvent->isChecked() ) { | 342 | if ( mSearchEvent->isChecked() ) { |
340 | if ( !mRefineItems->isChecked() ) | 343 | if ( !mRefineItems->isChecked() ) |
341 | events = mCalendar->events( mStartDate->date(), | 344 | events = mCalendar->events( mStartDate->date(), |
342 | mEndDate->date(), | 345 | mEndDate->date(), |
343 | false /*mInclusiveCheck->isChecked()*/ ); | 346 | false /*mInclusiveCheck->isChecked()*/ ); |
344 | 347 | ||
345 | 348 | ||
346 | Event *ev; | 349 | Event *ev; |
347 | for(ev=events.first();ev;ev=events.next()) { | 350 | for(ev=events.first();ev;ev=events.next()) { |
348 | if (mSummaryCheck->isChecked()) { | 351 | if (mSummaryCheck->isChecked()) { |
349 | #if QT_VERSION >= 0x030000 | 352 | #if QT_VERSION >= 0x030000 |
350 | if (re.search(ev->summary()) != -1) | 353 | if (re.search(ev->summary()) != -1) |
351 | #else | 354 | #else |
352 | if (re.match(ev->summary()) != -1) | 355 | if (re.match(ev->summary()) != -1) |
353 | #endif | 356 | #endif |
354 | { | 357 | { |
355 | if ( mSubItems->isChecked() ) | 358 | if ( mSubItems->isChecked() ) |
356 | mMatchedEvents.remove(ev); | 359 | mMatchedEvents.remove(ev); |
357 | else { | 360 | else { |
358 | if ( !mMatchedEvents.contains( ev ) ) | 361 | if ( !mMatchedEvents.contains( ev ) ) |
359 | mMatchedEvents.append(ev); | 362 | mMatchedEvents.append(ev); |
360 | } | 363 | } |
361 | continue; | 364 | continue; |
362 | } | 365 | } |
363 | #if QT_VERSION >= 0x030000 | 366 | #if QT_VERSION >= 0x030000 |
364 | if (re.search(ev->location()) != -1) | 367 | if (re.search(ev->location()) != -1) |
365 | #else | 368 | #else |
366 | if (re.match(ev->location()) != -1) | 369 | if (re.match(ev->location()) != -1) |
367 | #endif | 370 | #endif |
368 | { | 371 | { |
369 | if ( mSubItems->isChecked() ) | 372 | if ( mSubItems->isChecked() ) |
370 | mMatchedEvents.remove(ev); | 373 | mMatchedEvents.remove(ev); |
371 | else{ | 374 | else{ |
372 | if ( !mMatchedEvents.contains( ev ) ) | 375 | if ( !mMatchedEvents.contains( ev ) ) |
373 | mMatchedEvents.append(ev); | 376 | mMatchedEvents.append(ev); |
374 | } | 377 | } |
375 | continue; | 378 | continue; |
376 | } | 379 | } |
377 | } | 380 | } |
378 | if (mDescriptionCheck->isChecked()) { | 381 | if (mDescriptionCheck->isChecked()) { |
379 | #if QT_VERSION >= 0x030000 | 382 | #if QT_VERSION >= 0x030000 |
380 | if (re.search(ev->description()) != -1) | 383 | if (re.search(ev->description()) != -1) |
381 | #else | 384 | #else |
382 | if (re.match(ev->description()) != -1) | 385 | if (re.match(ev->description()) != -1) |
383 | #endif | 386 | #endif |
384 | { | 387 | { |
385 | if ( mSubItems->isChecked() ) | 388 | if ( mSubItems->isChecked() ) |
386 | mMatchedEvents.remove(ev); | 389 | mMatchedEvents.remove(ev); |
387 | else{ | 390 | else{ |
388 | if ( !mMatchedEvents.contains( ev ) ) | 391 | if ( !mMatchedEvents.contains( ev ) ) |
389 | mMatchedEvents.append(ev); | 392 | mMatchedEvents.append(ev); |
390 | } | 393 | } |
391 | continue; | 394 | continue; |
392 | } | 395 | } |
393 | } | 396 | } |
394 | if (mCategoryCheck->isChecked()) { | 397 | if (mCategoryCheck->isChecked()) { |
395 | #if QT_VERSION >= 0x030000 | 398 | #if QT_VERSION >= 0x030000 |
396 | if (re.search(ev->categoriesStr()) != -1) | 399 | if (re.search(ev->categoriesStr()) != -1) |
397 | #else | 400 | #else |
398 | if (re.match(ev->categoriesStr()) != -1) | 401 | if (re.match(ev->categoriesStr()) != -1) |
399 | #endif | 402 | #endif |
400 | { | 403 | { |
401 | 404 | ||
402 | if ( mSubItems->isChecked() ) | 405 | if ( mSubItems->isChecked() ) |
403 | mMatchedEvents.remove(ev); | 406 | mMatchedEvents.remove(ev); |
404 | else{ | 407 | else{ |
405 | if ( !mMatchedEvents.contains( ev ) ) | 408 | if ( !mMatchedEvents.contains( ev ) ) |
406 | mMatchedEvents.append(ev); | 409 | mMatchedEvents.append(ev); |
407 | } | 410 | } |
408 | continue; | 411 | continue; |
409 | } | 412 | } |
410 | } | 413 | } |
411 | if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) { | 414 | if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) { |
412 | QPtrList<Attendee> tmpAList = ev->attendees(); | 415 | QPtrList<Attendee> tmpAList = ev->attendees(); |
413 | Attendee *a; | 416 | Attendee *a; |
414 | for (a = tmpAList.first(); a; a = tmpAList.next()) { | 417 | for (a = tmpAList.first(); a; a = tmpAList.next()) { |
415 | if (mSearchAName->isChecked()) { | 418 | if (mSearchAName->isChecked()) { |
416 | #if QT_VERSION >= 0x030000 | 419 | #if QT_VERSION >= 0x030000 |
417 | if (re.search(a->name()) != -1) | 420 | if (re.search(a->name()) != -1) |
418 | #else | 421 | #else |
419 | if (re.match(a->name()) != -1) | 422 | if (re.match(a->name()) != -1) |
420 | #endif | 423 | #endif |
421 | { | 424 | { |
422 | if ( mSubItems->isChecked() ) | 425 | if ( mSubItems->isChecked() ) |
423 | mMatchedEvents.remove(ev); | 426 | mMatchedEvents.remove(ev); |
424 | else{ | 427 | else{ |
425 | if ( !mMatchedEvents.contains( ev ) ) | 428 | if ( !mMatchedEvents.contains( ev ) ) |
426 | mMatchedEvents.append(ev); | 429 | mMatchedEvents.append(ev); |
427 | } | 430 | } |
428 | break; | 431 | break; |
429 | } | 432 | } |
430 | } | 433 | } |
431 | if (mSearchAEmail->isChecked()) { | 434 | if (mSearchAEmail->isChecked()) { |
432 | #if QT_VERSION >= 0x030000 | 435 | #if QT_VERSION >= 0x030000 |
433 | if (re.search(a->email()) != -1) | 436 | if (re.search(a->email()) != -1) |
434 | #else | 437 | #else |
435 | if (re.match(a->email()) != -1) | 438 | if (re.match(a->email()) != -1) |
436 | #endif | 439 | #endif |
437 | { | 440 | { |
438 | if ( mSubItems->isChecked() ) | 441 | if ( mSubItems->isChecked() ) |
439 | mMatchedEvents.remove(ev); | 442 | mMatchedEvents.remove(ev); |
440 | else{ | 443 | else{ |
441 | if ( !mMatchedEvents.contains( ev ) ) | 444 | if ( !mMatchedEvents.contains( ev ) ) |
442 | mMatchedEvents.append(ev); | 445 | mMatchedEvents.append(ev); |
443 | } | 446 | } |
444 | break; | 447 | break; |
445 | } | 448 | } |
446 | } | 449 | } |
447 | } | 450 | } |
448 | } | 451 | } |
449 | } | 452 | } |
450 | } | 453 | } |
451 | QPtrList<Todo> todos; | 454 | QPtrList<Todo> todos; |
452 | 455 | ||
453 | if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) { | 456 | if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) { |
454 | if ( mRefineItems->isChecked() ) todos = mMatchedTodos ; | 457 | if ( mRefineItems->isChecked() ) todos = mMatchedTodos ; |
455 | mMatchedTodos.clear(); | 458 | mMatchedTodos.clear(); |
456 | } | 459 | } |
457 | 460 | ||
458 | if ( mSearchTodo->isChecked() ) { | 461 | if ( mSearchTodo->isChecked() ) { |
459 | if ( !mRefineItems->isChecked() ) todos = mCalendar->todos( ); | 462 | if ( !mRefineItems->isChecked() ) todos = mCalendar->todos( ); |
460 | Todo *tod; | 463 | Todo *tod; |
461 | for(tod=todos.first();tod;tod=todos.next()) { | 464 | for(tod=todos.first();tod;tod=todos.next()) { |
462 | if (mSummaryCheck->isChecked()) { | 465 | if (mSummaryCheck->isChecked()) { |
463 | #if QT_VERSION >= 0x030000 | 466 | #if QT_VERSION >= 0x030000 |
464 | if (re.search(tod->summary()) != -1) | 467 | if (re.search(tod->summary()) != -1) |
465 | #else | 468 | #else |
466 | if (re.match(tod->summary()) != -1) | 469 | if (re.match(tod->summary()) != -1) |
467 | #endif | 470 | #endif |
468 | { | 471 | { |
469 | if ( mSubItems->isChecked() ) | 472 | if ( mSubItems->isChecked() ) |
470 | mMatchedTodos.remove(tod); | 473 | mMatchedTodos.remove(tod); |
471 | else if (!mMatchedTodos.contains( tod )) | 474 | else if (!mMatchedTodos.contains( tod )) |
472 | mMatchedTodos.append(tod); | 475 | mMatchedTodos.append(tod); |
473 | continue; | 476 | continue; |
474 | } | 477 | } |
475 | } | 478 | } |
476 | if (mDescriptionCheck->isChecked()) { | 479 | if (mDescriptionCheck->isChecked()) { |
477 | #if QT_VERSION >= 0x030000 | 480 | #if QT_VERSION >= 0x030000 |
478 | if (re.search(tod->description()) != -1) | 481 | if (re.search(tod->description()) != -1) |
479 | #else | 482 | #else |
480 | if (re.match(tod->description()) != -1) | 483 | if (re.match(tod->description()) != -1) |
481 | #endif | 484 | #endif |
482 | { | 485 | { |
483 | if ( mSubItems->isChecked() ) | 486 | if ( mSubItems->isChecked() ) |
484 | mMatchedTodos.remove(tod); | 487 | mMatchedTodos.remove(tod); |
485 | else if (!mMatchedTodos.contains( tod )) | 488 | else if (!mMatchedTodos.contains( tod )) |
486 | mMatchedTodos.append(tod); | 489 | mMatchedTodos.append(tod); |
487 | continue; | 490 | continue; |
488 | } | 491 | } |
489 | } | 492 | } |
490 | if (mCategoryCheck->isChecked()) { | 493 | if (mCategoryCheck->isChecked()) { |
491 | #if QT_VERSION >= 0x030000 | 494 | #if QT_VERSION >= 0x030000 |
492 | if (re.search(tod->categoriesStr()) != -1) | 495 | if (re.search(tod->categoriesStr()) != -1) |
493 | #else | 496 | #else |
494 | if (re.match(tod->categoriesStr()) != -1) | 497 | if (re.match(tod->categoriesStr()) != -1) |
495 | #endif | 498 | #endif |
496 | { | 499 | { |
497 | if ( mSubItems->isChecked() ) | 500 | if ( mSubItems->isChecked() ) |
498 | mMatchedTodos.remove(tod); | 501 | mMatchedTodos.remove(tod); |
499 | else if (!mMatchedTodos.contains( tod )) | 502 | else if (!mMatchedTodos.contains( tod )) |
500 | mMatchedTodos.append(tod); | 503 | mMatchedTodos.append(tod); |
501 | continue; | 504 | continue; |
502 | } | 505 | } |
503 | } | 506 | } |
504 | if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) { | 507 | if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) { |
505 | QPtrList<Attendee> tmpAList = tod->attendees(); | 508 | QPtrList<Attendee> tmpAList = tod->attendees(); |
506 | Attendee *a; | 509 | Attendee *a; |
507 | for (a = tmpAList.first(); a; a = tmpAList.next()) { | 510 | for (a = tmpAList.first(); a; a = tmpAList.next()) { |
508 | if (mSearchAName->isChecked()) { | 511 | if (mSearchAName->isChecked()) { |
509 | #if QT_VERSION >= 0x030000 | 512 | #if QT_VERSION >= 0x030000 |
510 | if (re.search(a->name()) != -1) | 513 | if (re.search(a->name()) != -1) |
511 | #else | 514 | #else |
512 | if (re.match(a->name()) != -1) | 515 | if (re.match(a->name()) != -1) |
513 | #endif | 516 | #endif |
514 | { | 517 | { |
515 | if ( mSubItems->isChecked() ) | 518 | if ( mSubItems->isChecked() ) |
516 | mMatchedTodos.remove(tod); | 519 | mMatchedTodos.remove(tod); |
517 | else if (!mMatchedTodos.contains( tod )) | 520 | else if (!mMatchedTodos.contains( tod )) |
518 | mMatchedTodos.append(tod); | 521 | mMatchedTodos.append(tod); |
519 | break; | 522 | break; |
520 | } | 523 | } |
521 | } | 524 | } |
522 | if (mSearchAEmail->isChecked()) { | 525 | if (mSearchAEmail->isChecked()) { |
523 | #if QT_VERSION >= 0x030000 | 526 | #if QT_VERSION >= 0x030000 |
524 | if (re.search(a->email()) != -1) | 527 | if (re.search(a->email()) != -1) |
525 | #else | 528 | #else |
526 | if (re.match(a->email()) != -1) | 529 | if (re.match(a->email()) != -1) |
527 | #endif | 530 | #endif |
528 | { | 531 | { |
529 | if ( mSubItems->isChecked() ) | 532 | if ( mSubItems->isChecked() ) |
530 | mMatchedTodos.remove(tod); | 533 | mMatchedTodos.remove(tod); |
531 | else if (!mMatchedTodos.contains( tod )) | 534 | else if (!mMatchedTodos.contains( tod )) |
532 | mMatchedTodos.append(tod); | 535 | mMatchedTodos.append(tod); |
533 | break; | 536 | break; |
534 | } | 537 | } |
535 | } | 538 | } |
536 | } | 539 | } |
537 | } | 540 | } |
538 | } | 541 | } |
539 | } | 542 | } |
540 | 543 | ||
541 | QPtrList<Journal> journals; | 544 | QPtrList<Journal> journals; |
542 | if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) { | 545 | if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) { |
543 | if ( mRefineItems->isChecked() ) journals = mMatchedJournals ; | 546 | if ( mRefineItems->isChecked() ) journals = mMatchedJournals ; |
544 | mMatchedJournals.clear(); | 547 | mMatchedJournals.clear(); |
545 | } | 548 | } |
546 | if (mSearchJournal->isChecked() ) { | 549 | if (mSearchJournal->isChecked() ) { |
547 | if ( ! mRefineItems->isChecked() ) journals = mCalendar->journals(); | 550 | if ( ! mRefineItems->isChecked() ) journals = mCalendar->journals(); |
548 | Journal* journ; | 551 | Journal* journ; |
549 | 552 | ||
550 | for(journ=journals.first();journ;journ=journals.next()) { | 553 | for(journ=journals.first();journ;journ=journals.next()) { |
551 | if ( journ->dtStart().date() <= mEndDate->date() | 554 | if ( journ->dtStart().date() <= mEndDate->date() |
552 | &&journ->dtStart().date() >= mStartDate->date()) { | 555 | &&journ->dtStart().date() >= mStartDate->date()) { |
556 | if (mDescriptionCheck->isChecked()) { | ||
553 | #if QT_VERSION >= 0x030000 | 557 | #if QT_VERSION >= 0x030000 |
554 | if (re.search(journ->description()) != -1) | 558 | if (re.search(journ->description()) != -1) |
555 | #else | 559 | #else |
556 | if (re.match(journ->description()) != -1) | 560 | if (re.match(journ->description()) != -1) |
557 | #endif | 561 | #endif |
558 | { | 562 | { |
559 | if ( mSubItems->isChecked() ) | 563 | if ( mSubItems->isChecked() ) |
560 | mMatchedJournals.remove(journ); | 564 | mMatchedJournals.remove(journ); |
561 | else if (!mMatchedJournals.contains( journ )) | 565 | else if (!mMatchedJournals.contains( journ )) |
562 | mMatchedJournals.append(journ); | 566 | mMatchedJournals.append(journ); |
563 | continue; | 567 | continue; |
564 | } | 568 | } |
569 | } | ||
570 | if (mSummaryCheck->isChecked()) { | ||
571 | #if QT_VERSION >= 0x030000 | ||
572 | if (re.search(journ->summary()) != -1) | ||
573 | #else | ||
574 | if (re.match(journ->summary()) != -1) | ||
575 | #endif | ||
576 | { | ||
577 | if ( mSubItems->isChecked() ) | ||
578 | mMatchedJournals.remove(journ); | ||
579 | else if (!mMatchedJournals.contains( journ )) | ||
580 | mMatchedJournals.append(journ); | ||
581 | continue; | ||
582 | } | ||
583 | } | ||
565 | } | 584 | } |
566 | } | 585 | } |
567 | } | 586 | } |
568 | if ( mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() < 1 ) { | 587 | if ( mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() < 1 ) { |
569 | qDebug("count %d ", mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() ); | 588 | qDebug("count %d ", mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() ); |
570 | if ( mRefineItems->isChecked() ) | 589 | if ( mRefineItems->isChecked() ) |
571 | mRefineItems->setChecked( false ); | 590 | mRefineItems->setChecked( false ); |
572 | else if ( mSubItems->isChecked() ) | 591 | else if ( mSubItems->isChecked() ) |
573 | mSubItems->setChecked( false ); | 592 | mSubItems->setChecked( false ); |
574 | } | 593 | } |
575 | } | 594 | } |
576 | 595 | ||
577 | void SearchDialog::keyPressEvent ( QKeyEvent *e) | 596 | void SearchDialog::keyPressEvent ( QKeyEvent *e) |
578 | { | 597 | { |
579 | switch ( e->key() ) { | 598 | switch ( e->key() ) { |
580 | case Qt::Key_Escape: | 599 | case Qt::Key_Escape: |
581 | close(); | 600 | close(); |
582 | break; | 601 | break; |
583 | case Qt::Key_F: | 602 | case Qt::Key_F: |
584 | if ( e->state() == Qt::ControlButton ) { | 603 | if ( e->state() == Qt::ControlButton ) { |
585 | 604 | ||
586 | } | 605 | } |
587 | break; | 606 | break; |
588 | case Qt::Key_Return: | 607 | case Qt::Key_Return: |
589 | case Qt::Key_Enter: | 608 | case Qt::Key_Enter: |
590 | doSearch(); | 609 | doSearch(); |
591 | break; | 610 | break; |
592 | 611 | ||
593 | default: | 612 | default: |
594 | e->ignore(); | 613 | e->ignore(); |
595 | } | 614 | } |
596 | } | 615 | } |
597 | 616 | ||
598 | //mMatchedJournals; | 617 | //mMatchedJournals; |