author | zautrix <zautrix> | 2005-06-29 12:29:53 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2005-06-29 12:29:53 (UTC) |
commit | 0d4d5898a32f162dca010db329e02310a14629d5 (patch) (unidiff) | |
tree | 2d6e758a8a5ec64995de79a4cd1c02c89f509190 /korganizer | |
parent | 435e68d6ace30fb2121b718226e00be44971c617 (diff) | |
download | kdepimpi-0d4d5898a32f162dca010db329e02310a14629d5.zip kdepimpi-0d4d5898a32f162dca010db329e02310a14629d5.tar.gz kdepimpi-0d4d5898a32f162dca010db329e02310a14629d5.tar.bz2 |
j fixes
-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,1205 +1,1216 @@ | |||
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 |
937 | p.fillRect(0,0,width(),height(), mDefaultBackColor); | 948 | p.fillRect(0,0,width(),height(), mDefaultBackColor); |
938 | //p.setPen(mDefaultTextColor); | 949 | //p.setPen(mDefaultTextColor); |
939 | //p.drawRect(0, 0, width(), height()); | 950 | //p.drawRect(0, 0, width(), height()); |
940 | int mSelStartT = mSelStart; | 951 | int mSelStartT = mSelStart; |
941 | int mSelEndT = mSelEnd; | 952 | int mSelEndT = mSelEnd; |
942 | if ( mSelEndT >= NUMDAYS ) | 953 | if ( mSelEndT >= NUMDAYS ) |
943 | mSelEndT = NUMDAYS-1; | 954 | mSelEndT = NUMDAYS-1; |
944 | // draw selected days with highlighted background color | 955 | // draw selected days with highlighted background color |
945 | if (mSelStart != NOSELECTION) { | 956 | if (mSelStart != NOSELECTION) { |
946 | bool skip = false; | 957 | bool skip = false; |
947 | if ( ! mouseDown ) { | 958 | if ( ! mouseDown ) { |
948 | int mo = days[20].month(); | 959 | int mo = days[20].month(); |
949 | //qDebug("-- %d %d ", mSelStartT, mSelEndT); | 960 | //qDebug("-- %d %d ", mSelStartT, mSelEndT); |
950 | //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() ); | 961 | //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() ); |
951 | int startMo = days[mSelStartT].month(); | 962 | int startMo = days[mSelStartT].month(); |
952 | int endMo = days[mSelEndT].month(); | 963 | int endMo = days[mSelEndT].month(); |
953 | if ( startMo == 12 && mo == 1 && endMo <= 2 ) | 964 | if ( startMo == 12 && mo == 1 && endMo <= 2 ) |
954 | startMo = 1; | 965 | startMo = 1; |
955 | if ( endMo == 1 && mo == 12 ) | 966 | if ( endMo == 1 && mo == 12 ) |
956 | endMo = 12; | 967 | endMo = 12; |
957 | if ( mo == 12 && startMo == 1 ) | 968 | if ( mo == 12 && startMo == 1 ) |
958 | startMo = 13; | 969 | startMo = 13; |
959 | if ( (startMo > mo || endMo < mo) ) { | 970 | if ( (startMo > mo || endMo < mo) ) { |
960 | skip = true; | 971 | skip = true; |
961 | } else { | 972 | } else { |
962 | if ( days[mSelStartT].month() != mo ) { | 973 | if ( days[mSelStartT].month() != mo ) { |
963 | int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day(); | 974 | int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day(); |
964 | mSelStartT += add +1; | 975 | mSelStartT += add +1; |
965 | } | 976 | } |
966 | if ( days[mSelEndT].month() != mo ) { | 977 | if ( days[mSelEndT].month() != mo ) { |
967 | int sub = days[mSelEndT].day(); | 978 | int sub = days[mSelEndT].day(); |
968 | mSelEndT -= sub ; | 979 | mSelEndT -= sub ; |
969 | } | 980 | } |
970 | } | 981 | } |
971 | } | 982 | } |
972 | //qDebug("SKIP %d ", skip); | 983 | //qDebug("SKIP %d ", skip); |
973 | if ( ! skip ) { | 984 | if ( ! skip ) { |
974 | row = mSelStartT/7; | 985 | row = mSelStartT/7; |
975 | col = mSelStartT -row*7; | 986 | col = mSelStartT -row*7; |
976 | QColor selcol = KOPrefs::instance()->mHighlightColor; | 987 | QColor selcol = KOPrefs::instance()->mHighlightColor; |
977 | int addCol = 0; | 988 | int addCol = 0; |
978 | int addRow = 0; | 989 | int addRow = 0; |
979 | int addRow2 = 0; | 990 | int addRow2 = 0; |
980 | int addCol2 = 0; | 991 | int addCol2 = 0; |
981 | if (row == mSelEndT/7) { | 992 | if (row == mSelEndT/7) { |
982 | if ( rowModulo ) { | 993 | if ( rowModulo ) { |
983 | if ( row >= 6 - rowModulo ) | 994 | if ( row >= 6 - rowModulo ) |
984 | addRow = row - 5 + rowModulo; | 995 | addRow = row - 5 + rowModulo; |
985 | } | 996 | } |
986 | if ( colModulo ) { | 997 | if ( colModulo ) { |
987 | int colt1 = mSelEndT%7; | 998 | int colt1 = mSelEndT%7; |
988 | //qDebug("colt1 %d ", colt1 ); | 999 | //qDebug("colt1 %d ", colt1 ); |
989 | if ( colt1 >= 7 - colModulo ) | 1000 | if ( colt1 >= 7 - colModulo ) |
990 | addCol = colt1 - 7 + colModulo+1; | 1001 | addCol = colt1 - 7 + colModulo+1; |
991 | int colt = mSelStartT%7; | 1002 | int colt = mSelStartT%7; |
992 | if ( colt >= 7 - colModulo ) | 1003 | if ( colt >= 7 - colModulo ) |
993 | addCol2 = colt - 7 + colModulo; | 1004 | addCol2 = colt - 7 + colModulo; |
994 | addCol -= addCol2; | 1005 | addCol -= addCol2; |
995 | //qDebug("COL %d %d %d %d ",col , colt1 ,addCol ,addCol2 ); | 1006 | //qDebug("COL %d %d %d %d ",col , colt1 ,addCol ,addCol2 ); |
996 | } | 1007 | } |
997 | // Single row selection | 1008 | // Single row selection |
998 | //if ( row == 0) | 1009 | //if ( row == 0) |
999 | // addRow = 1; | 1010 | // addRow = 1; |
1000 | p.fillRect(isRTL ? (7 - (mSelEndT-mSelStartT+1) - col)*dwidth : col*dwidth+1+addCol2, | 1011 | p.fillRect(isRTL ? (7 - (mSelEndT-mSelStartT+1) - col)*dwidth : col*dwidth+1+addCol2, |
1001 | row*dheight+addRow, (mSelEndT-mSelStartT+1)*dwidth+addCol, dheight+1, selcol); | 1012 | row*dheight+addRow, (mSelEndT-mSelStartT+1)*dwidth+addCol, dheight+1, selcol); |
1002 | } else { | 1013 | } else { |
1003 | // draw first row to the right | 1014 | // draw first row to the right |
1004 | if ( colModulo ) { | 1015 | if ( colModulo ) { |
1005 | if ( col >= 7 - colModulo ) | 1016 | if ( col >= 7 - colModulo ) |
1006 | addCol2 = col - 7 + colModulo; | 1017 | addCol2 = col - 7 + colModulo; |
1007 | } | 1018 | } |
1008 | if ( rowModulo ) { | 1019 | if ( rowModulo ) { |
1009 | if ( row >= 6 - rowModulo ) | 1020 | if ( row >= 6 - rowModulo ) |
1010 | addRow = row - 5 + rowModulo; | 1021 | addRow = row - 5 + rowModulo; |
1011 | } | 1022 | } |
1012 | //if ( row == 0) | 1023 | //if ( row == 0) |
1013 | // addRow = 1; | 1024 | // addRow = 1; |
1014 | int drawWid = width()-(col*dwidth+1+addCol2)-1; | 1025 | int drawWid = width()-(col*dwidth+1+addCol2)-1; |
1015 | p.fillRect(isRTL ? 0 : col*dwidth+1+addCol2, row*dheight+addRow, drawWid, | 1026 | p.fillRect(isRTL ? 0 : col*dwidth+1+addCol2, row*dheight+addRow, drawWid, |
1016 | dheight+1, selcol); | 1027 | dheight+1, selcol); |
1017 | // draw full block till last line | 1028 | // draw full block till last line |
1018 | selh = mSelEndT/7-row; | 1029 | selh = mSelEndT/7-row; |
1019 | addRow = 0; | 1030 | addRow = 0; |
1020 | if ( rowModulo ) { | 1031 | if ( rowModulo ) { |
1021 | if ( mSelEndT/7 >= 6 - rowModulo ) | 1032 | if ( mSelEndT/7 >= 6 - rowModulo ) |
1022 | addRow = mSelEndT/7 - 5 + rowModulo; | 1033 | addRow = mSelEndT/7 - 5 + rowModulo; |
1023 | } | 1034 | } |
1024 | //qDebug("%d %d %d ",selh, row, addRow ); | 1035 | //qDebug("%d %d %d ",selh, row, addRow ); |
1025 | int addrow2 = addRow-selh+1; | 1036 | int addrow2 = addRow-selh+1; |
1026 | if ( addrow2 < 0 ) | 1037 | if ( addrow2 < 0 ) |
1027 | addrow2 = 0; | 1038 | addrow2 = 0; |
1028 | if (selh > 1) { | 1039 | if (selh > 1) { |
1029 | p.fillRect(1, (row+1)*dheight+addrow2, 7*dwidth+colModulo, (selh-1)*dheight+addRow,selcol); | 1040 | p.fillRect(1, (row+1)*dheight+addrow2, 7*dwidth+colModulo, (selh-1)*dheight+addRow,selcol); |
1030 | } | 1041 | } |
1031 | // draw last block from left to mSelEndT | 1042 | // draw last block from left to mSelEndT |
1032 | selw = mSelEndT-7*(mSelEndT/7)+1; | 1043 | selw = mSelEndT-7*(mSelEndT/7)+1; |
1033 | //qDebug("esl %d ",selw ); | 1044 | //qDebug("esl %d ",selw ); |
1034 | int add = 0; | 1045 | int add = 0; |
1035 | if ( colModulo ) { | 1046 | if ( colModulo ) { |
1036 | add = 7 - colModulo; | 1047 | add = 7 - colModulo; |
1037 | if ( selw > add ) | 1048 | if ( selw > add ) |
1038 | add = selw - add; | 1049 | add = selw - add; |
1039 | else | 1050 | else |
1040 | add = 0; | 1051 | add = 0; |
1041 | } | 1052 | } |
1042 | //qDebug("add %d ", add); | 1053 | //qDebug("add %d ", add); |
1043 | p.fillRect(isRTL ? (7-selw)*dwidth : 1, (row+selh)*dheight+addRow, | 1054 | p.fillRect(isRTL ? (7-selw)*dwidth : 1, (row+selh)*dheight+addRow, |
1044 | selw*dwidth+add, dheight+1, selcol); | 1055 | selw*dwidth+add, dheight+1, selcol); |
1045 | } | 1056 | } |
1046 | } | 1057 | } |
1047 | } | 1058 | } |
1048 | 1059 | ||
1049 | // iterate over all days in the matrix and draw the day label in appropriate colors | 1060 | // iterate over all days in the matrix and draw the day label in appropriate colors |
1050 | QColor actcol = mDefaultTextColorShaded; | 1061 | QColor actcol = mDefaultTextColorShaded; |
1051 | p.setPen(actcol); | 1062 | p.setPen(actcol); |
1052 | QPen tmppen; | 1063 | QPen tmppen; |
1053 | for(int i = 0; i < NUMDAYS; i++) { | 1064 | for(int i = 0; i < NUMDAYS; i++) { |
1054 | row = i/7; | 1065 | row = i/7; |
1055 | col = isRTL ? 6-(i-row*7) : i-row*7; | 1066 | col = isRTL ? 6-(i-row*7) : i-row*7; |
1056 | 1067 | ||
1057 | // if it is the first day of a month switch color from normal to shaded and vice versa | 1068 | // if it is the first day of a month switch color from normal to shaded and vice versa |
1058 | if ( KOGlobals::self()->calendarSystem()->day( days[i] ) == 1) { | 1069 | if ( KOGlobals::self()->calendarSystem()->day( days[i] ) == 1) { |
1059 | if (actcol == mDefaultTextColorShaded) { | 1070 | if (actcol == mDefaultTextColorShaded) { |
1060 | actcol = mDefaultTextColor; | 1071 | actcol = mDefaultTextColor; |
1061 | } else { | 1072 | } else { |
1062 | actcol = mDefaultTextColorShaded; | 1073 | actcol = mDefaultTextColorShaded; |
1063 | } | 1074 | } |
1064 | p.setPen(actcol); | 1075 | p.setPen(actcol); |
1065 | } | 1076 | } |
1066 | if (actcol == mDefaultTextColorShaded) { | 1077 | if (actcol == mDefaultTextColorShaded) { |
1067 | if ( ! mouseDown ) { | 1078 | if ( ! mouseDown ) { |
1068 | continue; | 1079 | continue; |
1069 | } | 1080 | } |
1070 | } | 1081 | } |
1071 | //Reset pen color after selected days block | 1082 | //Reset pen color after selected days block |
1072 | if (i == mSelEndT+1) { | 1083 | if (i == mSelEndT+1) { |
1073 | p.setPen(actcol); | 1084 | p.setPen(actcol); |
1074 | } | 1085 | } |
1075 | 1086 | ||
1076 | // if today then draw rectangle around day | 1087 | // if today then draw rectangle around day |
1077 | if (today == i) { | 1088 | if (today == i) { |
1078 | tmppen = p.pen(); | 1089 | tmppen = p.pen(); |
1079 | QPen mTodayPen(p.pen()); | 1090 | QPen mTodayPen(p.pen()); |
1080 | if ( daysize.width() < 20 ) | 1091 | if ( daysize.width() < 20 ) |
1081 | mTodayPen.setWidth(1); | 1092 | mTodayPen.setWidth(1); |
1082 | else | 1093 | else |
1083 | mTodayPen.setWidth(mTodayMarginWidth); | 1094 | mTodayPen.setWidth(mTodayMarginWidth); |
1084 | //draw red rectangle for holidays | 1095 | //draw red rectangle for holidays |
1085 | if (pDays.testBit(i)) { | 1096 | if (pDays.testBit(i)) { |
1086 | if (actcol == mDefaultTextColor) { | 1097 | if (actcol == mDefaultTextColor) { |
1087 | mTodayPen.setColor(KOPrefs::instance()->mHolidayColor); | 1098 | mTodayPen.setColor(KOPrefs::instance()->mHolidayColor); |
1088 | } else { | 1099 | } else { |
1089 | mTodayPen.setColor(mHolidayColorShaded); | 1100 | mTodayPen.setColor(mHolidayColorShaded); |
1090 | } | 1101 | } |
1091 | } | 1102 | } |
1092 | //draw gray rectangle for today if in selection | 1103 | //draw gray rectangle for today if in selection |
1093 | if (i >= mSelStartT && i <= mSelEndT) { | 1104 | if (i >= mSelStartT && i <= mSelEndT) { |
1094 | QColor grey("grey"); | 1105 | QColor grey("grey"); |
1095 | mTodayPen.setColor(grey); | 1106 | mTodayPen.setColor(grey); |
1096 | } | 1107 | } |
1097 | p.setPen(mTodayPen); | 1108 | p.setPen(mTodayPen); |
1098 | 1109 | ||
1099 | 1110 | ||
1100 | int addCol = 0; | 1111 | int addCol = 0; |
1101 | int addRow = 0; | 1112 | int addRow = 0; |
1102 | if (rowModulo) { | 1113 | if (rowModulo) { |
1103 | if ( row >= 6 - rowModulo ) | 1114 | if ( row >= 6 - rowModulo ) |
1104 | addRow = row - 5 + rowModulo; | 1115 | addRow = row - 5 + rowModulo; |
1105 | } | 1116 | } |
1106 | if ( colModulo ) { | 1117 | if ( colModulo ) { |
1107 | if ( col >= 7 - colModulo ) | 1118 | if ( col >= 7 - colModulo ) |
1108 | addCol = col - 6 + colModulo-1; | 1119 | addCol = col - 6 + colModulo-1; |
1109 | } | 1120 | } |
1110 | 1121 | ||
1111 | addCol += 1; | 1122 | addCol += 1; |
1112 | if ( row == 0 ) | 1123 | if ( row == 0 ) |
1113 | addRow = 1; | 1124 | addRow = 1; |
1114 | p.drawRect(col*dwidth+addCol, row*dheight+addRow, dwidth+1, dheight+1); | 1125 | p.drawRect(col*dwidth+addCol, row*dheight+addRow, dwidth+1, dheight+1); |
1115 | p.setPen(tmppen); | 1126 | p.setPen(tmppen); |
1116 | } | 1127 | } |
1117 | 1128 | ||
1118 | // if any events are on that day then draw it using a bold font | 1129 | // if any events are on that day then draw it using a bold font |
1119 | if ( eDays.testBit(i) ) { | 1130 | if ( eDays.testBit(i) ) { |
1120 | QFont myFont = font(); | 1131 | QFont myFont = font(); |
1121 | myFont.setBold(true); | 1132 | myFont.setBold(true); |
1122 | p.setFont(myFont); | 1133 | p.setFont(myFont); |
1123 | } | 1134 | } |
1124 | 1135 | ||
1125 | // if it is a holiday then use the default holiday color | 1136 | // if it is a holiday then use the default holiday color |
1126 | if ( pDays.testBit(i)) { | 1137 | if ( pDays.testBit(i)) { |
1127 | if ( bDays.testBit(i) ) { | 1138 | if ( bDays.testBit(i) ) { |
1128 | if ( hDays.testBit(i) ) | 1139 | if ( hDays.testBit(i) ) |
1129 | p.setPen(QColor(0,200,0)); | 1140 | p.setPen(QColor(0,200,0)); |
1130 | else | 1141 | else |
1131 | p.setPen(QColor(Qt::blue)); | 1142 | p.setPen(QColor(Qt::blue)); |
1132 | } else { | 1143 | } else { |
1133 | if (actcol == mDefaultTextColor ) { | 1144 | if (actcol == mDefaultTextColor ) { |
1134 | p.setPen(KOPrefs::instance()->mHolidayColor); | 1145 | p.setPen(KOPrefs::instance()->mHolidayColor); |
1135 | } else { | 1146 | } else { |
1136 | p.setPen(mHolidayColorShaded); | 1147 | p.setPen(mHolidayColorShaded); |
1137 | } | 1148 | } |
1138 | } | 1149 | } |
1139 | } | 1150 | } |
1140 | 1151 | ||
1141 | // draw selected days with special color | 1152 | // draw selected days with special color |
1142 | // DO NOT specially highlight holidays in selection ! | 1153 | // DO NOT specially highlight holidays in selection ! |
1143 | if (i >= mSelStartT && i <= mSelEndT) { | 1154 | if (i >= mSelStartT && i <= mSelEndT) { |
1144 | ;//p.setPen(mSelectedDaysColor); | 1155 | ;//p.setPen(mSelectedDaysColor); |
1145 | } | 1156 | } |
1146 | 1157 | ||
1147 | int addCol = 0; | 1158 | int addCol = 0; |
1148 | int addRow = 0; | 1159 | int addRow = 0; |
1149 | if ( colModulo ) { | 1160 | if ( colModulo ) { |
1150 | if ( col >= 7 - colModulo ) | 1161 | if ( col >= 7 - colModulo ) |
1151 | addCol = col - 7 + colModulo; | 1162 | addCol = col - 7 + colModulo; |
1152 | } | 1163 | } |
1153 | if ( rowModulo ) { | 1164 | if ( rowModulo ) { |
1154 | if ( row >= 6 - rowModulo ) | 1165 | if ( row >= 6 - rowModulo ) |
1155 | addRow = row - 5 + rowModulo; | 1166 | addRow = row - 5 + rowModulo; |
1156 | } | 1167 | } |
1157 | //qDebug("add %d %d -- %d %d ", col, addCol, row, addRow); | 1168 | //qDebug("add %d %d -- %d %d ", col, addCol, row, addRow); |
1158 | ++addCol;//++addCol; | 1169 | ++addCol;//++addCol; |
1159 | if ( row == 0) | 1170 | if ( row == 0) |
1160 | addRow = 1; | 1171 | addRow = 1; |
1161 | p.drawText(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight, | 1172 | p.drawText(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight, |
1162 | Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]); | 1173 | Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]); |
1163 | 1174 | ||
1164 | // reset color to actual color | 1175 | // reset color to actual color |
1165 | if (pDays.testBit(i)) { | 1176 | if (pDays.testBit(i)) { |
1166 | p.setPen(actcol); | 1177 | p.setPen(actcol); |
1167 | } | 1178 | } |
1168 | // reset bold font to plain font | 1179 | // reset bold font to plain font |
1169 | if ( eDays.testBit(i)) { | 1180 | if ( eDays.testBit(i)) { |
1170 | QFont myFont = font(); | 1181 | QFont myFont = font(); |
1171 | myFont.setBold(false); | 1182 | myFont.setBold(false); |
1172 | p.setFont(myFont); | 1183 | p.setFont(myFont); |
1173 | } | 1184 | } |
1174 | } | 1185 | } |
1175 | p.setPen(mDefaultTextColor); | 1186 | p.setPen(mDefaultTextColor); |
1176 | p.drawRect(0, 0, width(), height()); | 1187 | p.drawRect(0, 0, width(), height()); |
1177 | } else { | 1188 | } else { |
1178 | //qDebug("NO redraw "); | 1189 | //qDebug("NO redraw "); |
1179 | } | 1190 | } |
1180 | 1191 | ||
1181 | bitBlt (this, pevent->rect().topLeft(), &myPix , pevent->rect() ,CopyROP); | 1192 | bitBlt (this, pevent->rect().topLeft(), &myPix , pevent->rect() ,CopyROP); |
1182 | mRedrawNeeded = false; | 1193 | mRedrawNeeded = false; |
1183 | } | 1194 | } |
1184 | 1195 | ||
1185 | // ---------------------------------------------------------------------------- | 1196 | // ---------------------------------------------------------------------------- |
1186 | // R E SI Z E E V E N T H A N D L I N G | 1197 | // R E SI Z E E V E N T H A N D L I N G |
1187 | // ---------------------------------------------------------------------------- | 1198 | // ---------------------------------------------------------------------------- |
1188 | 1199 | ||
1189 | void KODayMatrix::resizeEvent(QResizeEvent *) | 1200 | void KODayMatrix::resizeEvent(QResizeEvent *) |
1190 | { | 1201 | { |
1191 | QRect sz = frameRect(); | 1202 | QRect sz = frameRect(); |
1192 | daysize.setHeight(sz.height()*7 / NUMDAYS); | 1203 | daysize.setHeight(sz.height()*7 / NUMDAYS); |
1193 | daysize.setWidth(sz.width() / 7); | 1204 | daysize.setWidth(sz.width() / 7); |
1194 | } | 1205 | } |
1195 | 1206 | ||
1196 | QSize KODayMatrix::sizeHint() const | 1207 | QSize KODayMatrix::sizeHint() const |
1197 | { | 1208 | { |
1198 | 1209 | ||
1199 | QFontMetrics fm ( font() ); | 1210 | QFontMetrics fm ( font() ); |
1200 | int wid = fm.width( "30") *7+3; | 1211 | int wid = fm.width( "30") *7+3; |
1201 | int hei = fm.height() * 6+3; | 1212 | int hei = fm.height() * 6+3; |
1202 | //qDebug("KODayMatrix::sizeHint()********************* %d %d", wid , hei); | 1213 | //qDebug("KODayMatrix::sizeHint()********************* %d %d", wid , hei); |
1203 | return QSize ( wid, hei ); | 1214 | return QSize ( wid, hei ); |
1204 | 1215 | ||
1205 | } | 1216 | } |
diff --git a/korganizer/koeventviewer.cpp b/korganizer/koeventviewer.cpp index 6315827..dcbb99f 100644 --- a/korganizer/koeventviewer.cpp +++ b/korganizer/koeventviewer.cpp | |||
@@ -1,800 +1,803 @@ | |||
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 | 19 | ||
20 | #include <qcstring.h> | 20 | #include <qcstring.h> |
21 | #include <qwhatsthis.h> | 21 | #include <qwhatsthis.h> |
22 | #include <qdialog.h> | 22 | #include <qdialog.h> |
23 | #include <qapplication.h> | 23 | #include <qapplication.h> |
24 | #include <qlabel.h> | 24 | #include <qlabel.h> |
25 | #include <qlayout.h> | 25 | #include <qlayout.h> |
26 | 26 | ||
27 | #include <klocale.h> | 27 | #include <klocale.h> |
28 | #include <kapplication.h> | 28 | #include <kapplication.h> |
29 | #include <libkcal/event.h> | 29 | #include <libkcal/event.h> |
30 | #include <libkcal/todo.h> | 30 | #include <libkcal/todo.h> |
31 | #include <kdebug.h> | 31 | #include <kdebug.h> |
32 | #include <kiconloader.h> | 32 | #include <kiconloader.h> |
33 | #include <krun.h> | 33 | #include <krun.h> |
34 | #include <kglobal.h> | 34 | #include <kglobal.h> |
35 | #include <kprocess.h> | 35 | #include <kprocess.h> |
36 | #include "koprefs.h" | 36 | #include "koprefs.h" |
37 | 37 | ||
38 | #include <kabc/stdaddressbook.h> | 38 | #include <kabc/stdaddressbook.h> |
39 | 39 | ||
40 | #ifndef KORG_NODCOP | 40 | #ifndef KORG_NODCOP |
41 | #include <dcopclient.h> | 41 | #include <dcopclient.h> |
42 | #include "korganizer.h" | 42 | #include "korganizer.h" |
43 | #include "koprefs.h" | 43 | #include "koprefs.h" |
44 | #include "actionmanager.h" | 44 | #include "actionmanager.h" |
45 | #endif | 45 | #endif |
46 | 46 | ||
47 | #include "koeventviewer.h" | 47 | #include "koeventviewer.h" |
48 | //#ifndef KORG_NOKABC | 48 | //#ifndef KORG_NOKABC |
49 | //#include <kabc/stdaddressbook.h> | 49 | //#include <kabc/stdaddressbook.h> |
50 | //#define size count | 50 | //#define size count |
51 | //#endif | 51 | //#endif |
52 | 52 | ||
53 | #ifdef DESKTOP_VERSION | 53 | #ifdef DESKTOP_VERSION |
54 | #include <kabc/addresseedialog.h> | 54 | #include <kabc/addresseedialog.h> |
55 | #include <kabc/addresseeview.h> | 55 | #include <kabc/addresseeview.h> |
56 | #include <qprinter.h> | 56 | #include <qprinter.h> |
57 | #include <qpainter.h> | 57 | #include <qpainter.h> |
58 | #include <qpaintdevicemetrics.h> | 58 | #include <qpaintdevicemetrics.h> |
59 | #else //DESKTOP_VERSION | 59 | #else //DESKTOP_VERSION |
60 | #include <externalapphandler.h> | 60 | #include <externalapphandler.h> |
61 | #include <qtopia/qcopenvelope_qws.h> | 61 | #include <qtopia/qcopenvelope_qws.h> |
62 | #endif //DESKTOP_VERSION | 62 | #endif //DESKTOP_VERSION |
63 | 63 | ||
64 | KOEventViewer::KOEventViewer(QWidget *parent,const char *name) | 64 | KOEventViewer::KOEventViewer(QWidget *parent,const char *name) |
65 | : QTextBrowser(parent,name) | 65 | : QTextBrowser(parent,name) |
66 | { | 66 | { |
67 | mSyncMode = false; | 67 | mSyncMode = false; |
68 | mColorMode = 0; | 68 | mColorMode = 0; |
69 | } | 69 | } |
70 | 70 | ||
71 | KOEventViewer::~KOEventViewer() | 71 | KOEventViewer::~KOEventViewer() |
72 | { | 72 | { |
73 | } | 73 | } |
74 | 74 | ||
75 | void KOEventViewer::printMe() | 75 | void KOEventViewer::printMe() |
76 | { | 76 | { |
77 | #ifdef DESKTOP_VERSION | 77 | #ifdef DESKTOP_VERSION |
78 | 78 | ||
79 | KOPrintPrefs pp ( this ); | 79 | KOPrintPrefs pp ( this ); |
80 | if (!pp.exec() ) | 80 | if (!pp.exec() ) |
81 | return; | 81 | return; |
82 | int scaleval = pp.printMode() ; | 82 | int scaleval = pp.printMode() ; |
83 | 83 | ||
84 | QPrinter printer; | 84 | QPrinter printer; |
85 | if (!printer.setup() ) | 85 | if (!printer.setup() ) |
86 | return; | 86 | return; |
87 | QPainter p; | 87 | QPainter p; |
88 | p.begin ( &printer ); | 88 | p.begin ( &printer ); |
89 | QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer ); | 89 | QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer ); |
90 | float dx, dy; | 90 | float dx, dy; |
91 | int wid = (m.width() * 9)/10; | 91 | int wid = (m.width() * 9)/10; |
92 | dx = (float) wid/(float)contentsWidth (); | 92 | dx = (float) wid/(float)contentsWidth (); |
93 | dy = (float)(m.height()) / (float)contentsHeight (); | 93 | dy = (float)(m.height()) / (float)contentsHeight (); |
94 | float scale; | 94 | float scale; |
95 | // scale to fit the width or height of the paper | 95 | // scale to fit the width or height of the paper |
96 | if ( dx < dy ) | 96 | if ( dx < dy ) |
97 | scale = dx; | 97 | scale = dx; |
98 | else | 98 | else |
99 | scale = dy; | 99 | scale = dy; |
100 | 100 | ||
101 | p.translate( m.width()/10,0 ); | 101 | p.translate( m.width()/10,0 ); |
102 | if ( scaleval == 2 || scaleval == 1 && scale < 1.0 ) { | 102 | if ( scaleval == 2 || scaleval == 1 && scale < 1.0 ) { |
103 | p.scale( scale, scale ); | 103 | p.scale( scale, scale ); |
104 | } | 104 | } |
105 | drawContents ( &p, 0,0, contentsWidth (), contentsHeight () ); | 105 | drawContents ( &p, 0,0, contentsWidth (), contentsHeight () ); |
106 | p.end(); | 106 | p.end(); |
107 | #endif | 107 | #endif |
108 | 108 | ||
109 | } | 109 | } |
110 | void KOEventViewer::setSource(const QString& n) | 110 | void KOEventViewer::setSource(const QString& n) |
111 | { | 111 | { |
112 | 112 | ||
113 | if ( n.left(3) == "uid" ) | 113 | if ( n.left(3) == "uid" ) |
114 | #ifdef DESKTOP_VERSION | 114 | #ifdef DESKTOP_VERSION |
115 | { | 115 | { |
116 | KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); | 116 | KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); |
117 | KABC::AddressBook::Iterator it; | 117 | KABC::AddressBook::Iterator it; |
118 | for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { | 118 | for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { |
119 | // LR I do not understand, why the uid string is different on zaurus and desktop | 119 | // LR I do not understand, why the uid string is different on zaurus and desktop |
120 | QString uid = "uid://"+(*it).uid(); | 120 | QString uid = "uid://"+(*it).uid(); |
121 | 121 | ||
122 | //qDebug("for *%s* +%s+ ", n.latin1(), uid.latin1()); | 122 | //qDebug("for *%s* +%s+ ", n.latin1(), uid.latin1()); |
123 | if (n == uid ) { | 123 | if (n == uid ) { |
124 | //qDebug("found %s ",(*it).mobileHomePhone().latin1() ); | 124 | //qDebug("found %s ",(*it).mobileHomePhone().latin1() ); |
125 | QDialog dia( this,"dia123", true ); | 125 | QDialog dia( this,"dia123", true ); |
126 | dia.setCaption( i18n("Details of attendee") ); | 126 | dia.setCaption( i18n("Details of attendee") ); |
127 | QVBoxLayout lay ( &dia ); | 127 | QVBoxLayout lay ( &dia ); |
128 | KABC::AddresseeView av ( &dia ); | 128 | KABC::AddresseeView av ( &dia ); |
129 | av.setAddressee( (*it) ); | 129 | av.setAddressee( (*it) ); |
130 | lay.addWidget( &av ); | 130 | lay.addWidget( &av ); |
131 | if ( QApplication::desktop()->width() < 480 ) | 131 | if ( QApplication::desktop()->width() < 480 ) |
132 | dia.resize( 220, 240); | 132 | dia.resize( 220, 240); |
133 | else { | 133 | else { |
134 | dia.resize( 400,400); | 134 | dia.resize( 400,400); |
135 | } | 135 | } |
136 | dia.exec(); | 136 | dia.exec(); |
137 | break; | 137 | break; |
138 | } | 138 | } |
139 | } | 139 | } |
140 | return; | 140 | return; |
141 | } | 141 | } |
142 | #else | 142 | #else |
143 | { | 143 | { |
144 | if ( "uid:organizer" == n ) { | 144 | if ( "uid:organizer" == n ) { |
145 | ExternalAppHandler::instance()->requestDetailsFromKAPI("", mCurrentIncidence->organizer(),""); | 145 | ExternalAppHandler::instance()->requestDetailsFromKAPI("", mCurrentIncidence->organizer(),""); |
146 | return; | 146 | return; |
147 | } | 147 | } |
148 | QPtrList<Attendee> attendees = mCurrentIncidence->attendees(); | 148 | QPtrList<Attendee> attendees = mCurrentIncidence->attendees(); |
149 | if (attendees.count()) { | 149 | if (attendees.count()) { |
150 | Attendee *a; | 150 | Attendee *a; |
151 | for(a=attendees.first();a;a=attendees.next()) { | 151 | for(a=attendees.first();a;a=attendees.next()) { |
152 | if ( "uid:"+a->uid() == n ) { | 152 | if ( "uid:"+a->uid() == n ) { |
153 | bool res = ExternalAppHandler::instance()->requestDetailsFromKAPI(a->name(), a->email(), a->uid()); | 153 | bool res = ExternalAppHandler::instance()->requestDetailsFromKAPI(a->name(), a->email(), a->uid()); |
154 | return; | 154 | return; |
155 | } | 155 | } |
156 | } | 156 | } |
157 | } | 157 | } |
158 | return; | 158 | return; |
159 | } | 159 | } |
160 | //requestNameEmailUidListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); | 160 | //requestNameEmailUidListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); |
161 | // the result should now arrive through method insertAttendees | 161 | // the result should now arrive through method insertAttendees |
162 | //QString uid = "uid:"+(*it).uid(); | 162 | //QString uid = "uid:"+(*it).uid(); |
163 | #endif | 163 | #endif |
164 | if ( n.left(6) == "mailto" ) { | 164 | if ( n.left(6) == "mailto" ) { |
165 | // qDebug("KOEventViewer::setSource %s ", n.mid(7).latin1()); | 165 | // qDebug("KOEventViewer::setSource %s ", n.mid(7).latin1()); |
166 | #ifndef DESKTOP_VERSION | 166 | #ifndef DESKTOP_VERSION |
167 | if ( n.mid(7,3) == "ALL" ) { | 167 | if ( n.mid(7,3) == "ALL" ) { |
168 | mailToAttendees( true ); | 168 | mailToAttendees( true ); |
169 | } else if ( n.mid(7,4) == "RSVP" ) { | 169 | } else if ( n.mid(7,4) == "RSVP" ) { |
170 | mailToAttendees( false ); | 170 | mailToAttendees( false ); |
171 | } else { | 171 | } else { |
172 | QCopEnvelope e("QPE/Application/ompi", "newMail(QString)" ); | 172 | QCopEnvelope e("QPE/Application/ompi", "newMail(QString)" ); |
173 | e << n.mid(7); | 173 | e << n.mid(7); |
174 | } | 174 | } |
175 | #endif | 175 | #endif |
176 | 176 | ||
177 | } | 177 | } |
178 | 178 | ||
179 | 179 | ||
180 | #ifndef KORG_NODCOP | 180 | #ifndef KORG_NODCOP |
181 | kdDebug() << "KOEventViewer::setSource(): " << n << endl; | 181 | kdDebug() << "KOEventViewer::setSource(): " << n << endl; |
182 | QString tmpStr; | 182 | QString tmpStr; |
183 | if (n.startsWith("mailto:")) { | 183 | if (n.startsWith("mailto:")) { |
184 | KApplication::kApplication()->invokeMailer(n.mid(7),QString::null); | 184 | KApplication::kApplication()->invokeMailer(n.mid(7),QString::null); |
185 | //emit showIncidence(n); | 185 | //emit showIncidence(n); |
186 | return; | 186 | return; |
187 | } else if (n.startsWith("uid:")) { | 187 | } else if (n.startsWith("uid:")) { |
188 | DCOPClient *client = KApplication::kApplication()->dcopClient(); | 188 | DCOPClient *client = KApplication::kApplication()->dcopClient(); |
189 | const QByteArray noParamData; | 189 | const QByteArray noParamData; |
190 | const QByteArray paramData; | 190 | const QByteArray paramData; |
191 | QByteArray replyData; | 191 | QByteArray replyData; |
192 | QCString replyTypeStr; | 192 | QCString replyTypeStr; |
193 | #define PING_ABBROWSER (client->call("kaddressbook", "KAddressBookIface", "interfaces()", noParamData, replyTypeStr, replyData)) | 193 | #define PING_ABBROWSER (client->call("kaddressbook", "KAddressBookIface", "interfaces()", noParamData, replyTypeStr, replyData)) |
194 | bool foundAbbrowser = PING_ABBROWSER; | 194 | bool foundAbbrowser = PING_ABBROWSER; |
195 | 195 | ||
196 | if (foundAbbrowser) { | 196 | if (foundAbbrowser) { |
197 | //KAddressbook is already running, so just DCOP to it to bring up the contact editor | 197 | //KAddressbook is already running, so just DCOP to it to bring up the contact editor |
198 | //client->send("kaddressbook","KAddressBookIface", | 198 | //client->send("kaddressbook","KAddressBookIface", |
199 | QDataStream arg(paramData, IO_WriteOnly); | 199 | QDataStream arg(paramData, IO_WriteOnly); |
200 | arg << n.mid(6); | 200 | arg << n.mid(6); |
201 | client->send("kaddressbook", "KAddressBookIface", "showContactEditor( QString )", paramData); | 201 | client->send("kaddressbook", "KAddressBookIface", "showContactEditor( QString )", paramData); |
202 | return; | 202 | return; |
203 | } else { | 203 | } else { |
204 | /* | 204 | /* |
205 | KaddressBook is not already running. Pass it the UID of the contact via the command line while starting it - its neater. | 205 | KaddressBook is not already running. Pass it the UID of the contact via the command line while starting it - its neater. |
206 | We start it without its main interface | 206 | We start it without its main interface |
207 | */ | 207 | */ |
208 | KIconLoader* iconLoader = new KIconLoader(); | 208 | KIconLoader* iconLoader = new KIconLoader(); |
209 | QString iconPath = iconLoader->iconPath("go",KIcon::Small); | 209 | QString iconPath = iconLoader->iconPath("go",KIcon::Small); |
210 | ActionManager::setStartedKAddressBook(true); | 210 | ActionManager::setStartedKAddressBook(true); |
211 | tmpStr = "kaddressbook --editor-only --uid "; | 211 | tmpStr = "kaddressbook --editor-only --uid "; |
212 | tmpStr += KProcess::quote(n.mid(6)); | 212 | tmpStr += KProcess::quote(n.mid(6)); |
213 | KRun::runCommand(tmpStr,"KAddressBook",iconPath); | 213 | KRun::runCommand(tmpStr,"KAddressBook",iconPath); |
214 | return; | 214 | return; |
215 | } | 215 | } |
216 | } else { | 216 | } else { |
217 | //QTextBrowser::setSource(n); | 217 | //QTextBrowser::setSource(n); |
218 | } | 218 | } |
219 | #endif | 219 | #endif |
220 | } | 220 | } |
221 | void KOEventViewer::mailToAttendees( bool all ) | 221 | void KOEventViewer::mailToAttendees( bool all ) |
222 | { | 222 | { |
223 | QPtrList<Attendee> attendees = mCurrentIncidence->attendees(); | 223 | QPtrList<Attendee> attendees = mCurrentIncidence->attendees(); |
224 | if (attendees.count() == 0) return; | 224 | if (attendees.count() == 0) return; |
225 | QStringList nameList; | 225 | QStringList nameList; |
226 | QStringList emailList; | 226 | QStringList emailList; |
227 | QStringList uidList; | 227 | QStringList uidList; |
228 | Attendee* a; | 228 | Attendee* a; |
229 | for(a=attendees.first();a;a=attendees.next()) { | 229 | for(a=attendees.first();a;a=attendees.next()) { |
230 | if ( !all && !a->RSVP() ) continue; | 230 | if ( !all && !a->RSVP() ) continue; |
231 | if (!a->email().isEmpty()) { | 231 | if (!a->email().isEmpty()) { |
232 | nameList.append (a->name() ); | 232 | nameList.append (a->name() ); |
233 | emailList.append (a->email() ); | 233 | emailList.append (a->email() ); |
234 | uidList.append (a->uid() ); | 234 | uidList.append (a->uid() ); |
235 | } | 235 | } |
236 | } | 236 | } |
237 | QString uid = "ComposeMailUIpick2"+mMailSubject; | 237 | QString uid = "ComposeMailUIpick2"+mMailSubject; |
238 | #ifndef DESKTOP_VERSION | 238 | #ifndef DESKTOP_VERSION |
239 | bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList); | 239 | bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList); |
240 | #endif | 240 | #endif |
241 | 241 | ||
242 | } | 242 | } |
243 | void KOEventViewer::addTag(const QString & tag,const QString & text) | 243 | void KOEventViewer::addTag(const QString & tag,const QString & text) |
244 | { | 244 | { |
245 | int number=text.contains("\n"); | 245 | int number=text.contains("\n"); |
246 | QString str = "<" + tag + ">"; | 246 | QString str = "<" + tag + ">"; |
247 | QString tmpText=text; | 247 | QString tmpText=text; |
248 | QString tmpStr=str; | 248 | QString tmpStr=str; |
249 | if(number !=-1) | 249 | if(number !=-1) |
250 | { | 250 | { |
251 | if (number > 0) { | 251 | if (number > 0) { |
252 | int pos=0; | 252 | int pos=0; |
253 | QString tmp; | 253 | QString tmp; |
254 | for(int i=0;i<=number;i++) { | 254 | for(int i=0;i<=number;i++) { |
255 | pos=tmpText.find("\n"); | 255 | pos=tmpText.find("\n"); |
256 | tmp=tmpText.left(pos); | 256 | tmp=tmpText.left(pos); |
257 | tmpText=tmpText.right(tmpText.length()-pos-1); | 257 | tmpText=tmpText.right(tmpText.length()-pos-1); |
258 | tmpStr+=tmp+"<br>"; | 258 | tmpStr+=tmp+"<br>"; |
259 | } | 259 | } |
260 | } | 260 | } |
261 | else tmpStr += tmpText; | 261 | else tmpStr += tmpText; |
262 | tmpStr+="</" + tag + ">"; | 262 | tmpStr+="</" + tag + ">"; |
263 | mText.append(tmpStr); | 263 | mText.append(tmpStr); |
264 | } | 264 | } |
265 | else | 265 | else |
266 | { | 266 | { |
267 | str += text + "</" + tag + ">"; | 267 | str += text + "</" + tag + ">"; |
268 | mText.append(str); | 268 | mText.append(str); |
269 | } | 269 | } |
270 | } | 270 | } |
271 | 271 | ||
272 | void KOEventViewer::setColorMode( int m ) | 272 | void KOEventViewer::setColorMode( int m ) |
273 | { | 273 | { |
274 | mColorMode = m; | 274 | mColorMode = m; |
275 | } | 275 | } |
276 | void KOEventViewer::appendEvent(Event *event, int mode ) | 276 | void KOEventViewer::appendEvent(Event *event, int mode ) |
277 | { | 277 | { |
278 | mMailSubject = ""; | 278 | mMailSubject = ""; |
279 | mCurrentIncidence = event; | 279 | mCurrentIncidence = event; |
280 | bool shortDate = KOPrefs::instance()->mShortDateInViewer; | 280 | bool shortDate = KOPrefs::instance()->mShortDateInViewer; |
281 | bool wideScreen = ( QApplication::desktop()->width() >= 640 ); | 281 | bool wideScreen = ( QApplication::desktop()->width() >= 640 ); |
282 | topLevelWidget()->setCaption(i18n("Event Viewer")); | 282 | topLevelWidget()->setCaption(i18n("Event Viewer")); |
283 | if ( mode == 0 ) { | 283 | if ( mode == 0 ) { |
284 | addTag("h2",deTag(event->summary())); | 284 | addTag("h2",deTag(event->summary())); |
285 | formatReadOnly(event); | 285 | formatReadOnly(event); |
286 | } | 286 | } |
287 | else { | 287 | else { |
288 | if ( mColorMode == 1 ) { | 288 | if ( mColorMode == 1 ) { |
289 | mText +="<font color=\"#00A000\">"; | 289 | mText +="<font color=\"#00A000\">"; |
290 | } | 290 | } |
291 | if ( mColorMode == 2 ) { | 291 | if ( mColorMode == 2 ) { |
292 | mText +="<font color=\"#C00000\">"; | 292 | mText +="<font color=\"#C00000\">"; |
293 | } | 293 | } |
294 | // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>"; | 294 | // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>"; |
295 | if ( mode == 1 ) { | 295 | if ( mode == 1 ) { |
296 | addTag("h2",i18n( "Local: " ) +deTag(event->summary())); | 296 | addTag("h2",i18n( "Local: " ) +deTag(event->summary())); |
297 | } else { | 297 | } else { |
298 | addTag("h2",i18n( "Remote: " ) +deTag(event->summary())); | 298 | addTag("h2",i18n( "Remote: " ) +deTag(event->summary())); |
299 | } | 299 | } |
300 | formatReadOnly(event); | 300 | formatReadOnly(event); |
301 | addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); | 301 | addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); |
302 | if ( mColorMode ) | 302 | if ( mColorMode ) |
303 | mText += "</font>"; | 303 | mText += "</font>"; |
304 | } | 304 | } |
305 | mMailSubject += i18n( "Meeting " )+ event->summary(); | 305 | mMailSubject += i18n( "Meeting " )+ event->summary(); |
306 | if (event->cancelled ()) { | 306 | if (event->cancelled ()) { |
307 | mText +="<font color=\"#B00000\">"; | 307 | mText +="<font color=\"#B00000\">"; |
308 | addTag("i",i18n("This event has been cancelled!")); | 308 | addTag("i",i18n("This event has been cancelled!")); |
309 | mText.append("<br>"); | 309 | mText.append("<br>"); |
310 | mText += "</font>"; | 310 | mText += "</font>"; |
311 | mMailSubject += i18n("(cancelled)"); | 311 | mMailSubject += i18n("(cancelled)"); |
312 | } | 312 | } |
313 | 313 | ||
314 | if (event->doesFloat()) { | 314 | if (event->doesFloat()) { |
315 | if (event->isMultiDay()) { | 315 | if (event->isMultiDay()) { |
316 | mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>") | 316 | mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>") |
317 | .arg(event->dtStartDateStr(shortDate)) | 317 | .arg(event->dtStartDateStr(shortDate)) |
318 | .arg(event->dtEndDateStr(shortDate))); | 318 | .arg(event->dtEndDateStr(shortDate))); |
319 | } else { | 319 | } else { |
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,1465 +1,1471 @@ | |||
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; |
606 | mes = i18n("KO/Pi: Ready for beaming"); | 612 | mes = i18n("KO/Pi: Ready for beaming"); |
607 | topLevelWidget()->setCaption(mes); | 613 | topLevelWidget()->setCaption(mes); |
608 | 614 | ||
609 | #ifndef DESKTOP_VERSION | 615 | #ifndef DESKTOP_VERSION |
610 | Ir *ir = new Ir( this ); | 616 | Ir *ir = new Ir( this ); |
611 | connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); | 617 | connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); |
612 | ir->send( fn, description, "text/x-vCalendar" ); | 618 | ir->send( fn, description, "text/x-vCalendar" ); |
613 | #endif | 619 | #endif |
614 | } | 620 | } |
615 | } | 621 | } |
616 | } | 622 | } |
617 | void KOListView::beamDone( Ir *ir ) | 623 | void KOListView::beamDone( Ir *ir ) |
618 | { | 624 | { |
619 | #ifndef DESKTOP_VERSION | 625 | #ifndef DESKTOP_VERSION |
620 | delete ir; | 626 | delete ir; |
621 | #endif | 627 | #endif |
622 | topLevelWidget()->setCaption(i18n("KO/Pi:Beaming done")); | 628 | topLevelWidget()->setCaption(i18n("KO/Pi:Beaming done")); |
623 | } | 629 | } |
624 | 630 | ||
625 | void KOListView::saveDescriptionToFile() | 631 | void KOListView::saveDescriptionToFile() |
626 | { | 632 | { |
627 | 633 | ||
628 | int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"), | 634 | int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"), |
629 | i18n("This saves the text/details of selected\nJournals and Events/Todos\nto a text file."), | 635 | i18n("This saves the text/details of selected\nJournals and Events/Todos\nto a text file."), |
630 | i18n("Continue"), i18n("Cancel"), 0, | 636 | i18n("Continue"), i18n("Cancel"), 0, |
631 | 0, 1 ); | 637 | 0, 1 ); |
632 | if ( result != 0 ) { | 638 | if ( result != 0 ) { |
633 | return; | 639 | return; |
634 | } | 640 | } |
635 | QPtrList<Incidence> delSel = getSelectedIncidences() ; | 641 | QPtrList<Incidence> delSel = getSelectedIncidences() ; |
636 | int icount = delSel.count(); | 642 | int icount = delSel.count(); |
637 | if ( icount ) { | 643 | if ( icount ) { |
638 | QString fn = KOPrefs::instance()->mLastSaveFile; | 644 | QString fn = KOPrefs::instance()->mLastSaveFile; |
639 | fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this ); | 645 | fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this ); |
640 | 646 | ||
641 | if ( fn == "" ) | 647 | if ( fn == "" ) |
642 | return; | 648 | return; |
643 | QFileInfo info; | 649 | QFileInfo info; |
644 | info.setFile( fn ); | 650 | info.setFile( fn ); |
645 | QString mes; | 651 | QString mes; |
646 | bool createbup = true; | 652 | bool createbup = true; |
647 | if ( info. exists() ) { | 653 | if ( info. exists() ) { |
648 | mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); | 654 | mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); |
649 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, | 655 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, |
650 | i18n("Overwrite!"), i18n("Cancel"), 0, | 656 | i18n("Overwrite!"), i18n("Cancel"), 0, |
651 | 0, 1 ); | 657 | 0, 1 ); |
652 | if ( result != 0 ) { | 658 | if ( result != 0 ) { |
653 | createbup = false; | 659 | createbup = false; |
654 | } | 660 | } |
655 | } | 661 | } |
656 | if ( createbup ) { | 662 | if ( createbup ) { |
657 | QString text = i18n("KO/Pi Description/Journal save file.\nSave date: ") + | 663 | QString text = i18n("KO/Pi Description/Journal save file.\nSave date: ") + |
658 | KGlobal::locale()->formatDateTime(QDateTime::currentDateTime(), false); | 664 | KGlobal::locale()->formatDateTime(QDateTime::currentDateTime(), false); |
659 | Incidence *incidence = delSel.first(); | 665 | Incidence *incidence = delSel.first(); |
660 | icount = 0; | 666 | icount = 0; |
661 | while ( incidence ) { | 667 | while ( incidence ) { |
662 | if ( incidence->typeID() == journalID ) { | 668 | if ( incidence->typeID() == journalID ) { |
663 | text += "\n************************************\n"; | 669 | text += "\n************************************\n"; |
664 | text += i18n("Journal from: ") +incidence->dtStartDateStr( false ); | 670 | text += i18n("Journal from: ") +incidence->dtStartDateStr( false ); |
665 | text +="\n" + i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false); | 671 | text +="\n" + i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false); |
666 | text +="\n" + i18n("Description: ") + "\n"+ incidence->description(); | 672 | text +="\n" + i18n("Description: ") + "\n"+ incidence->description(); |
667 | ++icount; | 673 | ++icount; |
668 | 674 | ||
669 | } else { | 675 | } else { |
670 | if ( !incidence->description().isEmpty() ) { | 676 | if ( !incidence->description().isEmpty() ) { |
671 | text += "\n************************************\n"; | 677 | text += "\n************************************\n"; |
672 | if ( incidence->typeID() == todoID ) | 678 | if ( incidence->typeID() == todoID ) |
673 | text += i18n("To-Do: "); | 679 | text += i18n("To-Do: "); |
674 | text += incidence->summary(); | 680 | text += incidence->summary(); |
675 | if ( incidence->hasStartDate() ) | 681 | if ( incidence->hasStartDate() ) |
676 | text +="\n"+ i18n("Start Date: ") + incidence->dtStartStr( false ); | 682 | text +="\n"+ i18n("Start Date: ") + incidence->dtStartStr( false ); |
677 | text +="\n"+ i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false); | 683 | text +="\n"+ i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false); |
678 | if ( !incidence->location().isEmpty() ) | 684 | if ( !incidence->location().isEmpty() ) |
679 | text += "\n" +i18n("Location: ") + incidence->location(); | 685 | text += "\n" +i18n("Location: ") + incidence->location(); |
680 | text += "\n" + i18n("Description: ") + "\n" + incidence->description(); | 686 | text += "\n" + i18n("Description: ") + "\n" + incidence->description(); |
681 | ++icount; | 687 | ++icount; |
682 | 688 | ||
683 | } | 689 | } |
684 | } | 690 | } |
685 | incidence = delSel.next(); | 691 | incidence = delSel.next(); |
686 | } | 692 | } |
687 | QFile file( fn ); | 693 | QFile file( fn ); |
688 | if (!file.open( IO_WriteOnly ) ) { | 694 | if (!file.open( IO_WriteOnly ) ) { |
689 | topLevelWidget()->setCaption(i18n("File open error - nothing saved!") ); | 695 | topLevelWidget()->setCaption(i18n("File open error - nothing saved!") ); |
690 | return; | 696 | return; |
691 | } | 697 | } |
692 | QTextStream ts( &file ); | 698 | QTextStream ts( &file ); |
693 | ts << text; | 699 | ts << text; |
694 | file.close(); | 700 | file.close(); |
695 | //qDebug("%s ", text.latin1()); | 701 | //qDebug("%s ", text.latin1()); |
696 | mes = i18n("KO/Pi:Saved %1 descriptions/journals").arg(icount ); | 702 | mes = i18n("KO/Pi:Saved %1 descriptions/journals").arg(icount ); |
697 | KOPrefs::instance()->mLastSaveFile = fn; | 703 | KOPrefs::instance()->mLastSaveFile = fn; |
698 | topLevelWidget()->setCaption(mes); | 704 | topLevelWidget()->setCaption(mes); |
699 | } | 705 | } |
700 | } | 706 | } |
701 | } | 707 | } |
702 | void KOListView::saveToFileVCS() | 708 | void KOListView::saveToFileVCS() |
703 | { | 709 | { |
704 | writeToFile( false ); | 710 | writeToFile( false ); |
705 | } | 711 | } |
706 | void KOListView::saveToFile() | 712 | void KOListView::saveToFile() |
707 | { | 713 | { |
708 | writeToFile( true ); | 714 | writeToFile( true ); |
709 | } | 715 | } |
710 | QPtrList<Incidence> KOListView::getSelectedIncidences( bool includeEvents, bool includeTodos, bool includeJournals, bool onlyDueTodos ) | 716 | QPtrList<Incidence> KOListView::getSelectedIncidences( bool includeEvents, bool includeTodos, bool includeJournals, bool onlyDueTodos ) |
711 | { | 717 | { |
712 | QPtrList<Incidence> delSel ; | 718 | QPtrList<Incidence> delSel ; |
713 | bool addSubTodos = false; | 719 | bool addSubTodos = false; |
714 | bool askSubTodos = true; | 720 | bool askSubTodos = true; |
715 | QListViewItem *item = mListView->firstChild (); | 721 | QListViewItem *item = mListView->firstChild (); |
716 | while ( item ) { | 722 | while ( item ) { |
717 | if ( item->isSelected() ) { | 723 | if ( item->isSelected() ) { |
718 | Incidence* inc = ((KOListViewItem *)item)->data(); | 724 | Incidence* inc = ((KOListViewItem *)item)->data(); |
719 | if ( ( addSubTodos && delSel.findRef( inc ) == -1) || !addSubTodos ) { | 725 | if ( ( addSubTodos && delSel.findRef( inc ) == -1) || !addSubTodos ) { |
720 | if ( (inc->typeID() == todoID && includeTodos) || | 726 | if ( (inc->typeID() == todoID && includeTodos) || |
721 | (inc->typeID() == eventID && includeEvents) || | 727 | (inc->typeID() == eventID && includeEvents) || |
722 | (inc->typeID() == journalID && includeJournals) ) { | 728 | (inc->typeID() == journalID && includeJournals) ) { |
723 | if ( inc->typeID() == todoID && onlyDueTodos ) { | 729 | if ( inc->typeID() == todoID && onlyDueTodos ) { |
724 | if ( ((Todo*)inc)->hasDueDate() ) | 730 | if ( ((Todo*)inc)->hasDueDate() ) |
725 | delSel.append( inc ); | 731 | delSel.append( inc ); |
726 | } else | 732 | } else |
727 | delSel.append( inc ); | 733 | delSel.append( inc ); |
728 | 734 | ||
729 | } | 735 | } |
730 | } | 736 | } |
731 | if ( inc->typeID() == todoID ) { | 737 | if ( inc->typeID() == todoID ) { |
732 | Todo * todo = (Todo*) inc; | 738 | Todo * todo = (Todo*) inc; |
733 | if ( todo->relations().count() ) { | 739 | if ( todo->relations().count() ) { |
734 | if ( askSubTodos ) { | 740 | if ( askSubTodos ) { |
735 | int result = KMessageBox::warningYesNoCancel(this, | 741 | int result = KMessageBox::warningYesNoCancel(this, |
736 | i18n("One (or more) selected\ntodo has subtodos!\nDo you want to select\nall subtodos of all\nselected todos as well?"), | 742 | i18n("One (or more) selected\ntodo has subtodos!\nDo you want to select\nall subtodos of all\nselected todos as well?"), |
737 | i18n("Todo has subtodos"), | 743 | i18n("Todo has subtodos"), |
738 | i18n("Yes"), | 744 | i18n("Yes"), |
739 | i18n("No")); | 745 | i18n("No")); |
740 | if ( result == KMessageBox::Cancel ) { | 746 | if ( result == KMessageBox::Cancel ) { |
741 | delSel.clear(); | 747 | delSel.clear(); |
742 | return delSel; | 748 | return delSel; |
743 | } | 749 | } |
744 | if (result == KMessageBox::Yes) | 750 | if (result == KMessageBox::Yes) |
745 | addSubTodos = true; | 751 | addSubTodos = true; |
746 | askSubTodos = false; | 752 | askSubTodos = false; |
747 | } | 753 | } |
748 | if ( addSubTodos ) { | 754 | if ( addSubTodos ) { |
749 | inc->addRelationsToList( &delSel ); | 755 | inc->addRelationsToList( &delSel ); |
750 | } | 756 | } |
751 | } | 757 | } |
752 | } | 758 | } |
753 | } | 759 | } |
754 | item = item->nextSibling(); | 760 | item = item->nextSibling(); |
755 | } | 761 | } |
756 | return delSel; | 762 | return delSel; |
757 | } | 763 | } |
758 | 764 | ||
759 | void KOListView::writeToFile( bool iCal ) | 765 | void KOListView::writeToFile( bool iCal ) |
760 | { | 766 | { |
761 | QPtrList<Incidence> delSel = getSelectedIncidences(); // all inc allowed; | 767 | QPtrList<Incidence> delSel = getSelectedIncidences(); // all inc allowed; |
762 | if ( !iCal ) { | 768 | if ( !iCal ) { |
763 | bool journal = false; | 769 | bool journal = false; |
764 | Incidence *incidence = delSel.first(); | 770 | Incidence *incidence = delSel.first(); |
765 | while ( incidence ) { | 771 | while ( incidence ) { |
766 | if ( incidence->typeID() == journalID ) { | 772 | if ( incidence->typeID() == journalID ) { |
767 | journal = true; | 773 | journal = true; |
768 | break; | 774 | break; |
769 | } | 775 | } |
770 | incidence = delSel.next(); | 776 | incidence = delSel.next(); |
771 | } | 777 | } |
772 | if ( journal ) { | 778 | if ( journal ) { |
773 | int result = KMessageBox::warningContinueCancel(this, | 779 | int result = KMessageBox::warningContinueCancel(this, |
774 | i18n("The journal entries can not be\nexported to a vCalendar file."), | 780 | i18n("The journal entries can not be\nexported to a vCalendar file."), |
775 | i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), | 781 | i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), |
776 | true); | 782 | true); |
777 | if (result != KMessageBox::Continue) return; | 783 | if (result != KMessageBox::Continue) return; |
778 | } | 784 | } |
779 | } | 785 | } |
780 | if ( delSel.count() ) { | 786 | if ( delSel.count() ) { |
781 | QString fn = KOPrefs::instance()->mLastSaveFile; | 787 | QString fn = KOPrefs::instance()->mLastSaveFile; |
782 | QString extension; | 788 | QString extension; |
783 | if ( iCal ) { | 789 | if ( iCal ) { |
784 | if ( fn.right( 4 ).lower() == ".vcs" ) { | 790 | if ( fn.right( 4 ).lower() == ".vcs" ) { |
785 | fn = fn.left( fn.length() -3) + "ics"; | 791 | fn = fn.left( fn.length() -3) + "ics"; |
786 | } | 792 | } |
787 | } else { | 793 | } else { |
788 | if ( fn.right( 4 ).lower() == ".ics" ) { | 794 | if ( fn.right( 4 ).lower() == ".ics" ) { |
789 | fn = fn.left( fn.length() -3) + "vcs"; | 795 | fn = fn.left( fn.length() -3) + "vcs"; |
790 | } | 796 | } |
791 | } | 797 | } |
792 | fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this ); | 798 | fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this ); |
793 | 799 | ||
794 | if ( fn == "" ) | 800 | if ( fn == "" ) |
795 | return; | 801 | return; |
796 | QFileInfo info; | 802 | QFileInfo info; |
797 | info.setFile( fn ); | 803 | info.setFile( fn ); |
798 | QString mes; | 804 | QString mes; |
799 | bool createbup = true; | 805 | bool createbup = true; |
800 | if ( info. exists() ) { | 806 | if ( info. exists() ) { |
801 | mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); | 807 | mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); |
802 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, | 808 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, |
803 | i18n("Overwrite!"), i18n("Cancel"), 0, | 809 | i18n("Overwrite!"), i18n("Cancel"), 0, |
804 | 0, 1 ); | 810 | 0, 1 ); |
805 | if ( result != 0 ) { | 811 | if ( result != 0 ) { |
806 | createbup = false; | 812 | createbup = false; |
807 | } | 813 | } |
808 | } | 814 | } |
809 | if ( createbup ) { | 815 | if ( createbup ) { |
810 | CalendarLocal cal; | 816 | CalendarLocal cal; |
811 | cal.setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); | 817 | cal.setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); |
812 | Incidence *incidence = delSel.first(); | 818 | Incidence *incidence = delSel.first(); |
813 | while ( incidence ) { | 819 | while ( incidence ) { |
814 | cal.addIncidence( incidence->clone() ); | 820 | cal.addIncidence( incidence->clone() ); |
815 | incidence = delSel.next(); | 821 | incidence = delSel.next(); |
816 | } | 822 | } |
817 | if ( iCal ) { | 823 | if ( iCal ) { |
818 | ICalFormat format; | 824 | ICalFormat format; |
819 | format.save( &cal, fn ); | 825 | format.save( &cal, fn ); |
820 | } else { | 826 | } else { |
821 | 827 | ||
822 | VCalFormat format; | 828 | VCalFormat format; |
823 | format.save( &cal, fn ); | 829 | format.save( &cal, fn ); |
824 | } | 830 | } |
825 | mes = i18n("KO/Pi:Saved %1").arg(fn ); | 831 | mes = i18n("KO/Pi:Saved %1").arg(fn ); |
826 | KOPrefs::instance()->mLastSaveFile = fn; | 832 | KOPrefs::instance()->mLastSaveFile = fn; |
827 | topLevelWidget()->setCaption(mes); | 833 | topLevelWidget()->setCaption(mes); |
828 | } | 834 | } |
829 | } | 835 | } |
830 | QTimer::singleShot( 1, this, SLOT ( resetFocus() ) ); | 836 | QTimer::singleShot( 1, this, SLOT ( resetFocus() ) ); |
831 | } | 837 | } |
832 | void KOListView::hideAll() | 838 | void KOListView::hideAll() |
833 | { | 839 | { |
834 | QPtrList<QListViewItem> delSel ; | 840 | QPtrList<QListViewItem> delSel ; |
835 | QListViewItem *item = mListView->firstChild (); | 841 | QListViewItem *item = mListView->firstChild (); |
836 | while ( item ) { | 842 | while ( item ) { |
837 | if ( item->isSelected() ) { | 843 | if ( item->isSelected() ) { |
838 | delSel.append(item); | 844 | delSel.append(item); |
839 | } | 845 | } |
840 | item = item->nextSibling(); | 846 | item = item->nextSibling(); |
841 | } | 847 | } |
842 | item = delSel.first() ; | 848 | item = delSel.first() ; |
843 | while ( item ) { | 849 | while ( item ) { |
844 | QListViewItem * del = item; | 850 | QListViewItem * del = item; |
845 | item = delSel.next(); | 851 | item = delSel.next(); |
846 | delete del; | 852 | delete del; |
847 | } | 853 | } |
848 | } | 854 | } |
849 | void KOListView::printList() | 855 | void KOListView::printList() |
850 | { | 856 | { |
851 | mListView->printList(); | 857 | mListView->printList(); |
852 | } | 858 | } |
853 | void KOListView::deleteAll() | 859 | void KOListView::deleteAll() |
854 | { | 860 | { |
855 | QPtrList<Incidence> delSel = getSelectedIncidences(); // all inc allowed;; | 861 | QPtrList<Incidence> delSel = getSelectedIncidences(); // all inc allowed;; |
856 | if ( delSel.count() ) { | 862 | if ( delSel.count() ) { |
857 | int icount = delSel.count(); | 863 | int icount = delSel.count(); |
858 | Incidence *incidence = delSel.first(); | 864 | Incidence *incidence = delSel.first(); |
859 | Incidence *toDelete; | 865 | Incidence *toDelete; |
860 | KOPrefs *p = KOPrefs::instance(); | 866 | KOPrefs *p = KOPrefs::instance(); |
861 | bool confirm = p->mConfirm; | 867 | bool confirm = p->mConfirm; |
862 | QString mess; | 868 | QString mess; |
863 | mess = mess.sprintf( i18n("You have %d item(s) selected.\n"), icount ); | 869 | mess = mess.sprintf( i18n("You have %d item(s) selected.\n"), icount ); |
864 | if ( KMessageBox::Continue == KMessageBox::warningContinueCancel(this, mess + i18n("All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n"), i18n("KO/Pi Confirmation"),i18n("Delete")) ) { | 870 | if ( KMessageBox::Continue == KMessageBox::warningContinueCancel(this, mess + i18n("All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n"), i18n("KO/Pi Confirmation"),i18n("Delete")) ) { |
865 | p->mConfirm = false; | 871 | p->mConfirm = false; |
866 | int delCounter = 0; | 872 | int delCounter = 0; |
867 | QDialog dia ( this, "p-dialog", true ); | 873 | QDialog dia ( this, "p-dialog", true ); |
868 | QLabel lab (i18n("Close dialog to abort deletion!"), &dia ); | 874 | QLabel lab (i18n("Close dialog to abort deletion!"), &dia ); |
869 | QVBoxLayout lay( &dia ); | 875 | QVBoxLayout lay( &dia ); |
870 | lay.setMargin(7); | 876 | lay.setMargin(7); |
871 | lay.setSpacing(7); | 877 | lay.setSpacing(7); |
872 | lay.addWidget( &lab); | 878 | lay.addWidget( &lab); |
873 | QProgressBar bar( icount, &dia ); | 879 | QProgressBar bar( icount, &dia ); |
874 | lay.addWidget( &bar); | 880 | lay.addWidget( &bar); |
875 | int w = 220; | 881 | int w = 220; |
876 | int h = 50; | 882 | int h = 50; |
877 | int dw = QApplication::desktop()->width(); | 883 | int dw = QApplication::desktop()->width(); |
878 | int dh = QApplication::desktop()->height(); | 884 | int dh = QApplication::desktop()->height(); |
879 | dia.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); | 885 | dia.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); |
880 | //dia.resize( 240,50 ); | 886 | //dia.resize( 240,50 ); |
881 | dia.show(); | 887 | dia.show(); |
882 | 888 | ||
883 | while ( incidence ) { | 889 | while ( incidence ) { |
884 | bar.setProgress( delCounter ); | 890 | bar.setProgress( delCounter ); |
885 | mess = mess.sprintf( i18n("Deleting item %d ..."), ++delCounter ); | 891 | mess = mess.sprintf( i18n("Deleting item %d ..."), ++delCounter ); |
886 | dia.setCaption( mess ); | 892 | dia.setCaption( mess ); |
887 | qApp->processEvents(); | 893 | qApp->processEvents(); |
888 | toDelete = (incidence); | 894 | toDelete = (incidence); |
889 | incidence = delSel.next(); | 895 | incidence = delSel.next(); |
890 | emit deleteIncidenceSignal(toDelete ); | 896 | emit deleteIncidenceSignal(toDelete ); |
891 | if ( dia.result() != 0 ) | 897 | if ( dia.result() != 0 ) |
892 | break; | 898 | break; |
893 | 899 | ||
894 | } | 900 | } |
895 | mess = mess.sprintf( i18n("%d items remaining in list."), count() ); | 901 | mess = mess.sprintf( i18n("%d items remaining in list."), count() ); |
896 | topLevelWidget ()->setCaption( mess ); | 902 | topLevelWidget ()->setCaption( mess ); |
897 | p->mConfirm = confirm; | 903 | p->mConfirm = confirm; |
898 | } | 904 | } |
899 | } | 905 | } |
900 | 906 | ||
901 | 907 | ||
902 | } | 908 | } |
903 | int KOListView::maxDatesHint() | 909 | int KOListView::maxDatesHint() |
904 | { | 910 | { |
905 | return 0; | 911 | return 0; |
906 | } | 912 | } |
907 | 913 | ||
908 | int KOListView::currentDateCount() | 914 | int KOListView::currentDateCount() |
909 | { | 915 | { |
910 | return 0; | 916 | return 0; |
911 | } | 917 | } |
912 | 918 | ||
913 | QPtrList<Incidence> KOListView::selectedIncidences() | 919 | QPtrList<Incidence> KOListView::selectedIncidences() |
914 | { | 920 | { |
915 | QPtrList<Incidence> eventList; | 921 | QPtrList<Incidence> eventList; |
916 | QListViewItem *item = mListView->firstChild (); | 922 | QListViewItem *item = mListView->firstChild (); |
917 | while ( item ) { | 923 | while ( item ) { |
918 | if ( item->isSelected() ) { | 924 | if ( item->isSelected() ) { |
919 | eventList.append(((KOListViewItem *)item)->data()); | 925 | eventList.append(((KOListViewItem *)item)->data()); |
920 | } | 926 | } |
921 | 927 | ||
922 | item = item->nextSibling(); | 928 | item = item->nextSibling(); |
923 | } | 929 | } |
924 | 930 | ||
925 | // // QListViewItem *item = mListView->selectedItem(); | 931 | // // QListViewItem *item = mListView->selectedItem(); |
926 | //if (item) eventList.append(((KOListViewItem *)item)->data()); | 932 | //if (item) eventList.append(((KOListViewItem *)item)->data()); |
927 | 933 | ||
928 | return eventList; | 934 | return eventList; |
929 | } | 935 | } |
930 | 936 | ||
931 | DateList KOListView::selectedDates() | 937 | DateList KOListView::selectedDates() |
932 | { | 938 | { |
933 | DateList eventList; | 939 | DateList eventList; |
934 | return eventList; | 940 | return eventList; |
935 | } | 941 | } |
936 | 942 | ||
937 | void KOListView::showDates(bool show) | 943 | void KOListView::showDates(bool show) |
938 | { | 944 | { |
939 | // Shouldn't we set it to a value greater 0? When showDates is called with | 945 | // Shouldn't we set it to a value greater 0? When showDates is called with |
940 | // show == true at first, then the columnwidths are set to zero. | 946 | // show == true at first, then the columnwidths are set to zero. |
941 | static int oldColWidth1 = 0; | 947 | static int oldColWidth1 = 0; |
942 | static int oldColWidth3 = 0; | 948 | static int oldColWidth3 = 0; |
943 | 949 | ||
944 | if (!show) { | 950 | if (!show) { |
945 | oldColWidth1 = mListView->columnWidth(1); | 951 | oldColWidth1 = mListView->columnWidth(1); |
946 | oldColWidth3 = mListView->columnWidth(3); | 952 | oldColWidth3 = mListView->columnWidth(3); |
947 | mListView->setColumnWidth(1, 0); | 953 | mListView->setColumnWidth(1, 0); |
948 | mListView->setColumnWidth(3, 0); | 954 | mListView->setColumnWidth(3, 0); |
949 | } else { | 955 | } else { |
950 | mListView->setColumnWidth(1, oldColWidth1); | 956 | mListView->setColumnWidth(1, oldColWidth1); |
951 | mListView->setColumnWidth(3, oldColWidth3); | 957 | mListView->setColumnWidth(3, oldColWidth3); |
952 | } | 958 | } |
953 | mListView->repaint(); | 959 | mListView->repaint(); |
954 | } | 960 | } |
955 | 961 | ||
956 | void KOListView::printPreview(CalPrinter *calPrinter, const QDate &fd, | 962 | void KOListView::printPreview(CalPrinter *calPrinter, const QDate &fd, |
957 | const QDate &td) | 963 | const QDate &td) |
958 | { | 964 | { |
959 | #ifndef KORG_NOPRINTER | 965 | #ifndef KORG_NOPRINTER |
960 | calPrinter->preview(CalPrinter::Day, fd, td); | 966 | calPrinter->preview(CalPrinter::Day, fd, td); |
961 | #endif | 967 | #endif |
962 | } | 968 | } |
963 | 969 | ||
964 | void KOListView::showDates() | 970 | void KOListView::showDates() |
965 | { | 971 | { |
966 | showDates(true); | 972 | showDates(true); |
967 | } | 973 | } |
968 | 974 | ||
969 | void KOListView::hideDates() | 975 | void KOListView::hideDates() |
970 | { | 976 | { |
971 | showDates(false); | 977 | showDates(false); |
972 | } | 978 | } |
973 | 979 | ||
974 | void KOListView::resetFocus() | 980 | void KOListView::resetFocus() |
975 | { | 981 | { |
976 | topLevelWidget()->setActiveWindow(); | 982 | topLevelWidget()->setActiveWindow(); |
977 | topLevelWidget()->raise(); | 983 | topLevelWidget()->raise(); |
978 | mListView->setFocus(); | 984 | mListView->setFocus(); |
979 | } | 985 | } |
980 | void KOListView::updateView() | 986 | void KOListView::updateView() |
981 | { | 987 | { |
982 | mListView->setFocus(); | 988 | mListView->setFocus(); |
983 | if ( mListView->firstChild () ) | 989 | if ( mListView->firstChild () ) |
984 | mListView->setCurrentItem( mListView->firstChild () ); | 990 | mListView->setCurrentItem( mListView->firstChild () ); |
985 | } | 991 | } |
986 | void KOListView::updateConfig() | 992 | void KOListView::updateConfig() |
987 | { | 993 | { |
988 | 994 | ||
989 | mListView->setFont ( KOPrefs::instance()->mListViewFont ); | 995 | mListView->setFont ( KOPrefs::instance()->mListViewFont ); |
990 | updateView(); | 996 | updateView(); |
991 | 997 | ||
992 | } | 998 | } |
993 | void KOListView::setStartDate(const QDate &start) | 999 | void KOListView::setStartDate(const QDate &start) |
994 | { | 1000 | { |
995 | mStartDate = start; | 1001 | mStartDate = start; |
996 | } | 1002 | } |
997 | 1003 | ||
998 | void KOListView::showDates(const QDate &start, const QDate &end) | 1004 | void KOListView::showDates(const QDate &start, const QDate &end) |
999 | { | 1005 | { |
1000 | clear(); | 1006 | clear(); |
1001 | mStartDate = start; | 1007 | mStartDate = start; |
1002 | QDate date = start; | 1008 | QDate date = start; |
1003 | QPtrList<Journal> j_list; | 1009 | QPtrList<Journal> j_list; |
1004 | while( date <= end ) { | 1010 | while( date <= end ) { |
1005 | addEvents(calendar()->events(date)); | 1011 | addEvents(calendar()->events(date)); |
1006 | addTodos(calendar()->todos(date)); | 1012 | addTodos(calendar()->todos(date)); |
1007 | Journal* jo = calendar()->journal(date); | 1013 | Journal* jo = calendar()->journal(date); |
1008 | if ( jo ) | 1014 | if ( jo ) |
1009 | j_list.append( jo ); | 1015 | j_list.append( jo ); |
1010 | date = date.addDays( 1 ); | 1016 | date = date.addDays( 1 ); |
1011 | } | 1017 | } |
1012 | addJournals(j_list); | 1018 | addJournals(j_list); |
1013 | emit incidenceSelected( 0 ); | 1019 | emit incidenceSelected( 0 ); |
1014 | updateView(); | 1020 | updateView(); |
1015 | 1021 | ||
1016 | } | 1022 | } |
1017 | 1023 | ||
1018 | void KOListView::addEvents(QPtrList<Event> eventList) | 1024 | void KOListView::addEvents(QPtrList<Event> eventList) |
1019 | { | 1025 | { |
1020 | 1026 | ||
1021 | Event *ev; | 1027 | Event *ev; |
1022 | for(ev = eventList.first(); ev; ev = eventList.next()) { | 1028 | for(ev = eventList.first(); ev; ev = eventList.next()) { |
1023 | addIncidence(ev); | 1029 | addIncidence(ev); |
1024 | } | 1030 | } |
1025 | if ( !mListView->currentItem() ){ | 1031 | if ( !mListView->currentItem() ){ |
1026 | updateView(); | 1032 | updateView(); |
1027 | } | 1033 | } |
1028 | } | 1034 | } |
1029 | 1035 | ||
1030 | void KOListView::addTodos(QPtrList<Todo> eventList) | 1036 | void KOListView::addTodos(QPtrList<Todo> eventList) |
1031 | { | 1037 | { |
1032 | Todo *ev; | 1038 | Todo *ev; |
1033 | for(ev = eventList.first(); ev; ev = eventList.next()) { | 1039 | for(ev = eventList.first(); ev; ev = eventList.next()) { |
1034 | addIncidence(ev); | 1040 | addIncidence(ev); |
1035 | } | 1041 | } |
1036 | if ( !mListView->currentItem() ){ | 1042 | if ( !mListView->currentItem() ){ |
1037 | updateView(); | 1043 | updateView(); |
1038 | } | 1044 | } |
1039 | } | 1045 | } |
1040 | void KOListView::addJournals(QPtrList<Journal> eventList) | 1046 | void KOListView::addJournals(QPtrList<Journal> eventList) |
1041 | { | 1047 | { |
1042 | Journal *ev; | 1048 | Journal *ev; |
1043 | for(ev = eventList.first(); ev; ev = eventList.next()) { | 1049 | for(ev = eventList.first(); ev; ev = eventList.next()) { |
1044 | addIncidence(ev); | 1050 | addIncidence(ev); |
1045 | } | 1051 | } |
1046 | if ( !mListView->currentItem() ){ | 1052 | if ( !mListView->currentItem() ){ |
1047 | updateView(); | 1053 | updateView(); |
1048 | } | 1054 | } |
1049 | } | 1055 | } |
1050 | 1056 | ||
1051 | void KOListView::showCompletedTodos() | 1057 | void KOListView::showCompletedTodos() |
1052 | { | 1058 | { |
1053 | mForceShowCompletedTodos = true; | 1059 | mForceShowCompletedTodos = true; |
1054 | } | 1060 | } |
1055 | void KOListView::addIncidence(Incidence *incidence) | 1061 | void KOListView::addIncidence(Incidence *incidence) |
1056 | { | 1062 | { |
1057 | if ( mUidDict.find( incidence->uid() ) ) return; | 1063 | if ( mUidDict.find( incidence->uid() ) ) return; |
1058 | 1064 | ||
1059 | // mListView->setFont ( KOPrefs::instance()->mListViewFont ); | 1065 | // mListView->setFont ( KOPrefs::instance()->mListViewFont ); |
1060 | if ( incidence->typeID() == todoID ) { | 1066 | if ( incidence->typeID() == todoID ) { |
1061 | if ( ! mForceShowCompletedTodos ) { | 1067 | if ( ! mForceShowCompletedTodos ) { |
1062 | if ( !KOPrefs::instance()->mShowCompletedTodo && ((Todo*)incidence)->isCompleted() ) | 1068 | if ( !KOPrefs::instance()->mShowCompletedTodo && ((Todo*)incidence)->isCompleted() ) |
1063 | return; | 1069 | return; |
1064 | } | 1070 | } |
1065 | } | 1071 | } |
1066 | mUidDict.insert( incidence->uid(), incidence ); | 1072 | mUidDict.insert( incidence->uid(), incidence ); |
1067 | KOListViewItem *item = new KOListViewItem( incidence, mListView ); | 1073 | KOListViewItem *item = new KOListViewItem( incidence, mListView ); |
1068 | ListItemVisitor v(item, mStartDate ); | 1074 | ListItemVisitor v(item, mStartDate ); |
1069 | if (incidence->accept(v)) { | 1075 | if (incidence->accept(v)) { |
1070 | return; | 1076 | return; |
1071 | } | 1077 | } |
1072 | else delete item; | 1078 | else delete item; |
1073 | } | 1079 | } |
1074 | 1080 | ||
1075 | void KOListView::showEvents(QPtrList<Event> eventList) | 1081 | void KOListView::showEvents(QPtrList<Event> eventList) |
1076 | { | 1082 | { |
1077 | clear(); | 1083 | clear(); |
1078 | 1084 | ||
1079 | addEvents(eventList); | 1085 | addEvents(eventList); |
1080 | 1086 | ||
1081 | // After new creation of list view no events are selected. | 1087 | // After new creation of list view no events are selected. |
1082 | emit incidenceSelected( 0 ); | 1088 | emit incidenceSelected( 0 ); |
1083 | } | 1089 | } |
1084 | int KOListView::count() | 1090 | int KOListView::count() |
1085 | { | 1091 | { |
1086 | return mListView->childCount(); | 1092 | return mListView->childCount(); |
1087 | } | 1093 | } |
1088 | 1094 | ||
1089 | void KOListView::changeEventDisplay(Event *event, int action) | 1095 | void KOListView::changeEventDisplay(Event *event, int action) |
1090 | { | 1096 | { |
1091 | KOListViewItem *item; | 1097 | KOListViewItem *item; |
1092 | 1098 | ||
1093 | switch(action) { | 1099 | switch(action) { |
1094 | case KOGlobals::EVENTADDED: | 1100 | case KOGlobals::EVENTADDED: |
1095 | addIncidence( event ); | 1101 | addIncidence( event ); |
1096 | break; | 1102 | break; |
1097 | case KOGlobals::EVENTEDITED: | 1103 | case KOGlobals::EVENTEDITED: |
1098 | item = getItemForEvent(event); | 1104 | item = getItemForEvent(event); |
1099 | if (item) { | 1105 | if (item) { |
1100 | mUidDict.remove( event->uid() ); | 1106 | mUidDict.remove( event->uid() ); |
1101 | delete item; | 1107 | delete item; |
1102 | addIncidence( event ); | 1108 | addIncidence( event ); |
1103 | } | 1109 | } |
1104 | break; | 1110 | break; |
1105 | case KOGlobals::EVENTDELETED: | 1111 | case KOGlobals::EVENTDELETED: |
1106 | item = getItemForEvent(event); | 1112 | item = getItemForEvent(event); |
1107 | if (item) { | 1113 | if (item) { |
1108 | mUidDict.remove( event->uid() ); | 1114 | mUidDict.remove( event->uid() ); |
1109 | delete item; | 1115 | delete item; |
1110 | } | 1116 | } |
1111 | break; | 1117 | break; |
1112 | default: | 1118 | default: |
1113 | ; | 1119 | ; |
1114 | } | 1120 | } |
1115 | } | 1121 | } |
1116 | 1122 | ||
1117 | KOListViewItem *KOListView::getItemForEvent(Incidence *event) | 1123 | KOListViewItem *KOListView::getItemForEvent(Incidence *event) |
1118 | { | 1124 | { |
1119 | KOListViewItem *item = (KOListViewItem *)mListView->firstChild(); | 1125 | KOListViewItem *item = (KOListViewItem *)mListView->firstChild(); |
1120 | while (item) { | 1126 | while (item) { |
1121 | if (item->data() == event) return item; | 1127 | if (item->data() == event) return item; |
1122 | item = (KOListViewItem *)item->nextSibling(); | 1128 | item = (KOListViewItem *)item->nextSibling(); |
1123 | } | 1129 | } |
1124 | return 0; | 1130 | return 0; |
1125 | } | 1131 | } |
1126 | 1132 | ||
1127 | void KOListView::defaultItemAction(QListViewItem *i) | 1133 | void KOListView::defaultItemAction(QListViewItem *i) |
1128 | { | 1134 | { |
1129 | KOListViewItem *item = static_cast<KOListViewItem *>( i ); | 1135 | KOListViewItem *item = static_cast<KOListViewItem *>( i ); |
1130 | if ( item ) defaultAction( item->data() ); | 1136 | if ( item ) defaultAction( item->data() ); |
1131 | 1137 | ||
1132 | } | 1138 | } |
1133 | 1139 | ||
1134 | void KOListView::popupMenu(QListViewItem *item,const QPoint &,int) | 1140 | void KOListView::popupMenu(QListViewItem *item,const QPoint &,int) |
1135 | { | 1141 | { |
1136 | mActiveItem = (KOListViewItem *)item; | 1142 | mActiveItem = (KOListViewItem *)item; |
1137 | if (mActiveItem) { | 1143 | if (mActiveItem) { |
1138 | Incidence *incidence = mActiveItem->data(); | 1144 | Incidence *incidence = mActiveItem->data(); |
1139 | mPopupMenu->enableDefault( !mListView->hasMultiSelection( item ) ); | 1145 | mPopupMenu->enableDefault( !mListView->hasMultiSelection( item ) ); |
1140 | mPopupMenu->showIncidencePopup(incidence); | 1146 | mPopupMenu->showIncidencePopup(incidence); |
1141 | 1147 | ||
1142 | /* | 1148 | /* |
1143 | if ( incidence && incidence->type() == "Event" ) { | 1149 | if ( incidence && incidence->type() == "Event" ) { |
1144 | Event *event = static_cast<Event *>( incidence ); | 1150 | Event *event = static_cast<Event *>( incidence ); |
1145 | mPopupMenu->showEventPopup(event); | 1151 | mPopupMenu->showEventPopup(event); |
1146 | } | 1152 | } |
1147 | */ | 1153 | */ |
1148 | } | 1154 | } |
1149 | } | 1155 | } |
1150 | 1156 | ||
1151 | void KOListView::readSettings(KConfig *config, QString setting) | 1157 | void KOListView::readSettings(KConfig *config, QString setting) |
1152 | { | 1158 | { |
1153 | // qDebug("KOListView::readSettings "); | 1159 | // qDebug("KOListView::readSettings "); |
1154 | mListView->restoreLayout(config,setting); | 1160 | mListView->restoreLayout(config,setting); |
1155 | } | 1161 | } |
1156 | 1162 | ||
1157 | void KOListView::writeSettings(KConfig *config, QString setting) | 1163 | void KOListView::writeSettings(KConfig *config, QString setting) |
1158 | { | 1164 | { |
1159 | // qDebug("KOListView::writeSettings "); | 1165 | // qDebug("KOListView::writeSettings "); |
1160 | mListView->saveLayout(config, setting); | 1166 | mListView->saveLayout(config, setting); |
1161 | } | 1167 | } |
1162 | 1168 | ||
1163 | void KOListView::processSelectionChange(QListViewItem *) | 1169 | void KOListView::processSelectionChange(QListViewItem *) |
1164 | { | 1170 | { |
1165 | 1171 | ||
1166 | KOListViewItem *item = | 1172 | KOListViewItem *item = |
1167 | static_cast<KOListViewItem *>( mListView->currentItem() ); | 1173 | static_cast<KOListViewItem *>( mListView->currentItem() ); |
1168 | 1174 | ||
1169 | if ( !item ) { | 1175 | if ( !item ) { |
1170 | emit incidenceSelected( 0 ); | 1176 | emit incidenceSelected( 0 ); |
1171 | } else { | 1177 | } else { |
1172 | emit incidenceSelected( item->data() ); | 1178 | emit incidenceSelected( item->data() ); |
1173 | } | 1179 | } |
1174 | } | 1180 | } |
1175 | 1181 | ||
1176 | void KOListView::clearSelection() | 1182 | void KOListView::clearSelection() |
1177 | { | 1183 | { |
1178 | mListView->selectAll( false ); | 1184 | mListView->selectAll( false ); |
1179 | } | 1185 | } |
1180 | void KOListView::allSelection() | 1186 | void KOListView::allSelection() |
1181 | { | 1187 | { |
1182 | mListView->selectAll( true ); | 1188 | mListView->selectAll( true ); |
1183 | } | 1189 | } |
1184 | 1190 | ||
1185 | void KOListView::clear() | 1191 | void KOListView::clear() |
1186 | { | 1192 | { |
1187 | mListView->clear(); | 1193 | mListView->clear(); |
1188 | mUidDict.clear(); | 1194 | mUidDict.clear(); |
1189 | } | 1195 | } |
1190 | 1196 | ||
1191 | Incidence* KOListView::currentItem() | 1197 | Incidence* KOListView::currentItem() |
1192 | { | 1198 | { |
1193 | if ( mListView->currentItem() ) | 1199 | if ( mListView->currentItem() ) |
1194 | return ((KOListViewItem*) mListView->currentItem())->data(); | 1200 | return ((KOListViewItem*) mListView->currentItem())->data(); |
1195 | return 0; | 1201 | return 0; |
1196 | } | 1202 | } |
1197 | void KOListView::keyPressEvent ( QKeyEvent *e) | 1203 | void KOListView::keyPressEvent ( QKeyEvent *e) |
1198 | { | 1204 | { |
1199 | 1205 | ||
1200 | if ( e->key() == Qt::Key_Delete || e->key() == Qt::Key_Backspace ) { | 1206 | if ( e->key() == Qt::Key_Delete || e->key() == Qt::Key_Backspace ) { |
1201 | deleteAll(); | 1207 | deleteAll(); |
1202 | return; | 1208 | return; |
1203 | } | 1209 | } |
1204 | 1210 | ||
1205 | e->ignore(); | 1211 | e->ignore(); |
1206 | } | 1212 | } |
1207 | void KOListViewListView::keyPressEvent ( QKeyEvent *e) | 1213 | void KOListViewListView::keyPressEvent ( QKeyEvent *e) |
1208 | { | 1214 | { |
1209 | 1215 | ||
1210 | switch ( e->key() ) { | 1216 | switch ( e->key() ) { |
1211 | case Qt::Key_Down: | 1217 | case Qt::Key_Down: |
1212 | if ( e->state() == ShiftButton ) { | 1218 | if ( e->state() == ShiftButton ) { |
1213 | QListViewItem* cn = currentItem(); | 1219 | QListViewItem* cn = currentItem(); |
1214 | if ( !cn ) | 1220 | if ( !cn ) |
1215 | cn = firstChild(); | 1221 | cn = firstChild(); |
1216 | if ( !cn ) | 1222 | if ( !cn ) |
1217 | return; | 1223 | return; |
1218 | while ( cn->nextSibling() ) | 1224 | while ( cn->nextSibling() ) |
1219 | cn = cn->nextSibling(); | 1225 | cn = cn->nextSibling(); |
1220 | setCurrentItem ( cn ); | 1226 | setCurrentItem ( cn ); |
1221 | ensureItemVisible ( cn ); | 1227 | ensureItemVisible ( cn ); |
1222 | 1228 | ||
1223 | e->accept(); | 1229 | e->accept(); |
1224 | return; | 1230 | return; |
1225 | } | 1231 | } |
1226 | if ( e->state() == ControlButton ) { | 1232 | if ( e->state() == ControlButton ) { |
1227 | int count = childCount (); | 1233 | int count = childCount (); |
1228 | int jump = count / 5; | 1234 | int jump = count / 5; |
1229 | QListViewItem* cn; | 1235 | QListViewItem* cn; |
1230 | cn = currentItem(); | 1236 | cn = currentItem(); |
1231 | if ( ! cn ) | 1237 | if ( ! cn ) |
1232 | return; | 1238 | return; |
1233 | if ( jump == 0 ) | 1239 | if ( jump == 0 ) |
1234 | jump = 1; | 1240 | jump = 1; |
1235 | while ( jump && cn->nextSibling() ) { | 1241 | while ( jump && cn->nextSibling() ) { |
1236 | cn = cn->nextSibling(); | 1242 | cn = cn->nextSibling(); |
1237 | --jump; | 1243 | --jump; |
1238 | } | 1244 | } |
1239 | setCurrentItem ( cn ); | 1245 | setCurrentItem ( cn ); |
1240 | ensureItemVisible ( cn ); | 1246 | ensureItemVisible ( cn ); |
1241 | 1247 | ||
1242 | } else | 1248 | } else |
1243 | QListView::keyPressEvent ( e ) ; | 1249 | QListView::keyPressEvent ( e ) ; |
1244 | e->accept(); | 1250 | e->accept(); |
1245 | break; | 1251 | break; |
1246 | 1252 | ||
1247 | case Qt::Key_Up: | 1253 | case Qt::Key_Up: |
1248 | if ( e->state() == ShiftButton ) { | 1254 | if ( e->state() == ShiftButton ) { |
1249 | QListViewItem* cn = firstChild(); | 1255 | QListViewItem* cn = firstChild(); |
1250 | if ( cn ) { | 1256 | if ( cn ) { |
1251 | setCurrentItem ( cn ); | 1257 | setCurrentItem ( cn ); |
1252 | ensureItemVisible ( cn ); | 1258 | ensureItemVisible ( cn ); |
1253 | } | 1259 | } |
1254 | e->accept(); | 1260 | e->accept(); |
1255 | return; | 1261 | return; |
1256 | } | 1262 | } |
1257 | if ( e->state() == ControlButton ) { | 1263 | if ( e->state() == ControlButton ) { |
1258 | int count = childCount (); | 1264 | int count = childCount (); |
1259 | int jump = count / 5; | 1265 | int jump = count / 5; |
1260 | QListViewItem* cn; | 1266 | QListViewItem* cn; |
1261 | cn = currentItem(); | 1267 | cn = currentItem(); |
1262 | if ( ! cn ) | 1268 | if ( ! cn ) |
1263 | return; | 1269 | return; |
1264 | if ( jump == 0 ) | 1270 | if ( jump == 0 ) |
1265 | jump = 1; | 1271 | jump = 1; |
1266 | while ( jump && cn->itemAbove ()) { | 1272 | while ( jump && cn->itemAbove ()) { |
1267 | cn = cn->itemAbove (); | 1273 | cn = cn->itemAbove (); |
1268 | --jump; | 1274 | --jump; |
1269 | } | 1275 | } |
1270 | setCurrentItem ( cn ); | 1276 | setCurrentItem ( cn ); |
1271 | ensureItemVisible ( cn ); | 1277 | ensureItemVisible ( cn ); |
1272 | } else | 1278 | } else |
1273 | QListView::keyPressEvent ( e ) ; | 1279 | QListView::keyPressEvent ( e ) ; |
1274 | e->accept(); | 1280 | e->accept(); |
1275 | break; | 1281 | break; |
1276 | case Qt::Key_I: { | 1282 | case Qt::Key_I: { |
1277 | QListViewItem* cn; | 1283 | QListViewItem* cn; |
1278 | cn = currentItem(); | 1284 | cn = currentItem(); |
1279 | if ( cn ) { | 1285 | if ( cn ) { |
1280 | KOListViewItem* ci = (KOListViewItem*)( cn ); | 1286 | KOListViewItem* ci = (KOListViewItem*)( cn ); |
1281 | if ( ci ){ | 1287 | if ( ci ){ |
1282 | //emit showIncidence( ci->data()); | 1288 | //emit showIncidence( ci->data()); |
1283 | cn = cn->nextSibling(); | 1289 | cn = cn->nextSibling(); |
1284 | if ( cn ) { | 1290 | if ( cn ) { |
1285 | setCurrentItem ( cn ); | 1291 | setCurrentItem ( cn ); |
1286 | ensureItemVisible ( cn ); | 1292 | ensureItemVisible ( cn ); |
1287 | } | 1293 | } |
1288 | emit showIncidence( ci->data()); | 1294 | emit showIncidence( ci->data()); |
1289 | } | 1295 | } |
1290 | } | 1296 | } |
1291 | e->accept(); | 1297 | e->accept(); |
1292 | } | 1298 | } |
1293 | break; | 1299 | break; |
1294 | case Qt::Key_Return: | 1300 | case Qt::Key_Return: |
1295 | case Qt::Key_Enter: | 1301 | case Qt::Key_Enter: |
1296 | { | 1302 | { |
1297 | QListViewItem* cn; | 1303 | QListViewItem* cn; |
1298 | cn = currentItem(); | 1304 | cn = currentItem(); |
1299 | if ( cn ) { | 1305 | if ( cn ) { |
1300 | KOListViewItem* ci = (KOListViewItem*)( cn ); | 1306 | KOListViewItem* ci = (KOListViewItem*)( cn ); |
1301 | if ( ci ){ | 1307 | if ( ci ){ |
1302 | if ( e->state() == ShiftButton ) | 1308 | if ( e->state() == ShiftButton ) |
1303 | ci->setSelected( false ); | 1309 | ci->setSelected( false ); |
1304 | else | 1310 | else |
1305 | ci->setSelected( true ); | 1311 | ci->setSelected( true ); |
1306 | cn = cn->nextSibling(); | 1312 | cn = cn->nextSibling(); |
1307 | if ( cn ) { | 1313 | if ( cn ) { |
1308 | setCurrentItem ( cn ); | 1314 | setCurrentItem ( cn ); |
1309 | ensureItemVisible ( cn ); | 1315 | ensureItemVisible ( cn ); |
1310 | } | 1316 | } |
1311 | } | 1317 | } |
1312 | } | 1318 | } |
1313 | e->accept(); | 1319 | e->accept(); |
1314 | } | 1320 | } |
1315 | break; | 1321 | break; |
1316 | default: | 1322 | default: |
1317 | e->ignore(); | 1323 | e->ignore(); |
1318 | } | 1324 | } |
1319 | } | 1325 | } |
1320 | KOListViewListView::KOListViewListView(KOListView * lv ) | 1326 | KOListViewListView::KOListViewListView(KOListView * lv ) |
1321 | : KListView( lv, "kolistlistview", false ) | 1327 | : KListView( lv, "kolistlistview", false ) |
1322 | { | 1328 | { |
1323 | mYMousePos = 0; | 1329 | mYMousePos = 0; |
1324 | mPopupTimer = new QTimer(this); | 1330 | mPopupTimer = new QTimer(this); |
1325 | connect(mPopupTimer , SIGNAL(timeout()), this, SLOT(popupMenu())); | 1331 | connect(mPopupTimer , SIGNAL(timeout()), this, SLOT(popupMenu())); |
1326 | #ifndef DESKTOP_VERSION | 1332 | #ifndef DESKTOP_VERSION |
1327 | //QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold ); | 1333 | //QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold ); |
1328 | #endif | 1334 | #endif |
1329 | setSelectionMode( QListView::Multi ); | 1335 | setSelectionMode( QListView::Multi ); |
1330 | setMultiSelection( true); | 1336 | setMultiSelection( true); |
1331 | } | 1337 | } |
1332 | bool KOListViewListView::hasMultiSelection(QListViewItem* item) | 1338 | bool KOListViewListView::hasMultiSelection(QListViewItem* item) |
1333 | { | 1339 | { |
1334 | int selCount = 0; | 1340 | int selCount = 0; |
1335 | QListViewItem *qitem = firstChild (); | 1341 | QListViewItem *qitem = firstChild (); |
1336 | while ( qitem ) { | 1342 | while ( qitem ) { |
1337 | if ( qitem->isSelected() && item != qitem ) | 1343 | if ( qitem->isSelected() && item != qitem ) |
1338 | return true; | 1344 | return true; |
1339 | qitem = qitem->nextSibling(); | 1345 | qitem = qitem->nextSibling(); |
1340 | } | 1346 | } |
1341 | return false; | 1347 | return false; |
1342 | } | 1348 | } |
1343 | void KOListViewListView::contentsMouseDoubleClickEvent(QMouseEvent *e) | 1349 | void KOListViewListView::contentsMouseDoubleClickEvent(QMouseEvent *e) |
1344 | { | 1350 | { |
1345 | if (!e) return; | 1351 | if (!e) return; |
1346 | QPoint vp = contentsToViewport(e->pos()); | 1352 | QPoint vp = contentsToViewport(e->pos()); |
1347 | QListViewItem *item = itemAt(vp); | 1353 | QListViewItem *item = itemAt(vp); |
1348 | if (!item) { | 1354 | if (!item) { |
1349 | emit newEvent(); | 1355 | emit newEvent(); |
1350 | return; | 1356 | return; |
1351 | } | 1357 | } |
1352 | KListView::contentsMouseDoubleClickEvent(e); | 1358 | KListView::contentsMouseDoubleClickEvent(e); |
1353 | } | 1359 | } |
1354 | #if 0 | 1360 | #if 0 |
1355 | void KOListViewListView::contentsMousePressEvent(QMouseEvent *e) | 1361 | void KOListViewListView::contentsMousePressEvent(QMouseEvent *e) |
1356 | { | 1362 | { |
1357 | //qDebug("contentsMousePressEvent++++ "); | 1363 | //qDebug("contentsMousePressEvent++++ "); |
1358 | KListView::contentsMousePressEvent( e ); | 1364 | KListView::contentsMousePressEvent( e ); |
1359 | if ( e->button() == RightButton ) { | 1365 | if ( e->button() == RightButton ) { |
1360 | QListViewItem* ci = currentItem(); | 1366 | QListViewItem* ci = currentItem(); |
1361 | clearSelection () ; | 1367 | clearSelection () ; |
1362 | if ( ci ) | 1368 | if ( ci ) |
1363 | ci->setSelected( true ); | 1369 | ci->setSelected( true ); |
1364 | } | 1370 | } |
1365 | } | 1371 | } |
1366 | void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e) | 1372 | void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e) |
1367 | { | 1373 | { |
1368 | KListView::contentsMouseReleaseEvent(e); | 1374 | KListView::contentsMouseReleaseEvent(e); |
1369 | } | 1375 | } |
1370 | void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e) | 1376 | void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e) |
1371 | { | 1377 | { |
1372 | KListView::contentsMouseMoveEvent(e); | 1378 | KListView::contentsMouseMoveEvent(e); |
1373 | } | 1379 | } |
1374 | #endif | 1380 | #endif |
1375 | void KOListViewListView::popupMenu() | 1381 | void KOListViewListView::popupMenu() |
1376 | { | 1382 | { |
1377 | mPopupTimer->stop(); | 1383 | mPopupTimer->stop(); |
1378 | QMouseEvent* e = new QMouseEvent( QEvent::MouseButtonPress, mEventPos ,mEventGlobalPos, RightButton , RightButton ); | 1384 | QMouseEvent* e = new QMouseEvent( QEvent::MouseButtonPress, mEventPos ,mEventGlobalPos, RightButton , RightButton ); |
1379 | QApplication::postEvent( this->viewport(), e ); | 1385 | QApplication::postEvent( this->viewport(), e ); |
1380 | 1386 | ||
1381 | } | 1387 | } |
1382 | void KOListViewListView::contentsMousePressEvent(QMouseEvent *e) | 1388 | void KOListViewListView::contentsMousePressEvent(QMouseEvent *e) |
1383 | { | 1389 | { |
1384 | //qDebug("contentsMousePressEvent++++ %d %d", e->pos().y(), e->globalPos().y()); | 1390 | //qDebug("contentsMousePressEvent++++ %d %d", e->pos().y(), e->globalPos().y()); |
1385 | mYMousePos = mapToGlobal( (e->pos())).y(); | 1391 | mYMousePos = mapToGlobal( (e->pos())).y(); |
1386 | if ( e->button() == LeftButton ) { | 1392 | if ( e->button() == LeftButton ) { |
1387 | mPopupTimer->start( 600 ); | 1393 | mPopupTimer->start( 600 ); |
1388 | mEventPos = contentsToViewport(e->pos()); | 1394 | mEventPos = contentsToViewport(e->pos()); |
1389 | mEventGlobalPos = e->globalPos(); | 1395 | mEventGlobalPos = e->globalPos(); |
1390 | } | 1396 | } |
1391 | KListView::contentsMousePressEvent( e ); | 1397 | KListView::contentsMousePressEvent( e ); |
1392 | if ( e->button() == RightButton ) { | 1398 | if ( e->button() == RightButton ) { |
1393 | QListViewItem* ci = currentItem(); | 1399 | QListViewItem* ci = currentItem(); |
1394 | //clearSelection(); | 1400 | //clearSelection(); |
1395 | if ( ci ) | 1401 | if ( ci ) |
1396 | ci->setSelected( true ); | 1402 | ci->setSelected( true ); |
1397 | } | 1403 | } |
1398 | } | 1404 | } |
1399 | void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e) | 1405 | void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e) |
1400 | { | 1406 | { |
1401 | mPopupTimer->stop(); | 1407 | mPopupTimer->stop(); |
1402 | KListView::contentsMouseReleaseEvent(e); | 1408 | KListView::contentsMouseReleaseEvent(e); |
1403 | } | 1409 | } |
1404 | void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e) | 1410 | void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e) |
1405 | { | 1411 | { |
1406 | // qDebug("contentsMouseMoveEv....... "); | 1412 | // qDebug("contentsMouseMoveEv....... "); |
1407 | // qDebug("start: %d current %d ",mYMousePos , mapToGlobal( (e->pos())).y() ); | 1413 | // qDebug("start: %d current %d ",mYMousePos , mapToGlobal( (e->pos())).y() ); |
1408 | int diff = mYMousePos - mapToGlobal( (e->pos())).y(); | 1414 | int diff = mYMousePos - mapToGlobal( (e->pos())).y(); |
1409 | if ( diff < 0 ) diff = -diff; | 1415 | if ( diff < 0 ) diff = -diff; |
1410 | if ( diff > 15 ) | 1416 | if ( diff > 15 ) |
1411 | mPopupTimer->stop(); | 1417 | mPopupTimer->stop(); |
1412 | else { | 1418 | else { |
1413 | mEventPos = contentsToViewport(e->pos()); | 1419 | mEventPos = contentsToViewport(e->pos()); |
1414 | mEventGlobalPos = e->globalPos(); | 1420 | mEventGlobalPos = e->globalPos(); |
1415 | } | 1421 | } |
1416 | KListView::contentsMouseMoveEvent(e); | 1422 | KListView::contentsMouseMoveEvent(e); |
1417 | } | 1423 | } |
1418 | 1424 | ||
1419 | #define protected public | 1425 | #define protected public |
1420 | #include <qheader.h> | 1426 | #include <qheader.h> |
1421 | #undef protected | 1427 | #undef protected |
1422 | void KOListViewListView::printList() | 1428 | void KOListViewListView::printList() |
1423 | { | 1429 | { |
1424 | #ifdef DESKTOP_VERSION | 1430 | #ifdef DESKTOP_VERSION |
1425 | KOPrintPrefs pp ( this ); | 1431 | KOPrintPrefs pp ( this ); |
1426 | if (!pp.exec() ) | 1432 | if (!pp.exec() ) |
1427 | return; | 1433 | return; |
1428 | int scaleval = pp.printMode() ; | 1434 | int scaleval = pp.printMode() ; |
1429 | 1435 | ||
1430 | QPrinter printer; | 1436 | QPrinter printer; |
1431 | if (!printer.setup() ) | 1437 | if (!printer.setup() ) |
1432 | return; | 1438 | return; |
1433 | clearSelection (); | 1439 | clearSelection (); |
1434 | QPainter p; | 1440 | QPainter p; |
1435 | p.begin ( &printer ); | 1441 | p.begin ( &printer ); |
1436 | QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer ); | 1442 | QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer ); |
1437 | float dx, dy; | 1443 | float dx, dy; |
1438 | int wid = (m.width() * 9)/10; | 1444 | int wid = (m.width() * 9)/10; |
1439 | dx = (float) wid/(float)contentsWidth (); | 1445 | dx = (float) wid/(float)contentsWidth (); |
1440 | dy = (float)(m.height()) / (float)contentsHeight (); | 1446 | dy = (float)(m.height()) / (float)contentsHeight (); |
1441 | float scale; | 1447 | float scale; |
1442 | // scale to fit the width or height of the paper | 1448 | // scale to fit the width or height of the paper |
1443 | if ( dx < dy ) | 1449 | if ( dx < dy ) |
1444 | scale = dx; | 1450 | scale = dx; |
1445 | else | 1451 | else |
1446 | scale = dy; | 1452 | scale = dy; |
1447 | 1453 | ||
1448 | p.translate( m.width()/10,m.width()/10 ); | 1454 | p.translate( m.width()/10,m.width()/10 ); |
1449 | if ( scaleval == 2 || scaleval == 1 && scale < 1.0 ) { | 1455 | if ( scaleval == 2 || scaleval == 1 && scale < 1.0 ) { |
1450 | p.scale( scale, scale ); | 1456 | p.scale( scale, scale ); |
1451 | } | 1457 | } |
1452 | 1458 | ||
1453 | int cou = header()->count(); | 1459 | int cou = header()->count(); |
1454 | int iii; | 1460 | int iii; |
1455 | QRect rect ( 0,0,0, header()->height()); | 1461 | QRect rect ( 0,0,0, header()->height()); |
1456 | for ( iii = 0; iii < cou; ++iii ) { | 1462 | for ( iii = 0; iii < cou; ++iii ) { |
1457 | rect.setLeft ( header()->sectionPos( iii ) ); | 1463 | rect.setLeft ( header()->sectionPos( iii ) ); |
1458 | rect.setRight ( header()->sectionPos( iii ) + header()->sectionSize (iii)); | 1464 | rect.setRight ( header()->sectionPos( iii ) + header()->sectionSize (iii)); |
1459 | header()->paintSection ( & p, header()->mapToIndex (iii), rect ); | 1465 | header()->paintSection ( & p, header()->mapToIndex (iii), rect ); |
1460 | } | 1466 | } |
1461 | p.translate( 0, header()->height()); | 1467 | p.translate( 0, header()->height()); |
1462 | drawContentsOffset ( &p, 0,0, 0,0, contentsWidth (), contentsHeight () ); | 1468 | drawContentsOffset ( &p, 0,0, 0,0, contentsWidth (), contentsHeight () ); |
1463 | p.end(); | 1469 | p.end(); |
1464 | #endif | 1470 | #endif |
1465 | } | 1471 | } |
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; |