summaryrefslogtreecommitdiffabout
path: root/korganizer
Unidiff
Diffstat (limited to 'korganizer') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/koeditordetails.cpp102
-rw-r--r--korganizer/koeditorgeneral.cpp16
-rw-r--r--korganizer/koeventeditor.cpp4
-rw-r--r--korganizer/kotodoeditor.cpp2
-rw-r--r--korganizer/searchdialog.cpp4
5 files changed, 82 insertions, 46 deletions
diff --git a/korganizer/koeditordetails.cpp b/korganizer/koeditordetails.cpp
index 802261c..bdfc637 100644
--- a/korganizer/koeditordetails.cpp
+++ b/korganizer/koeditordetails.cpp
@@ -1,445 +1,465 @@
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 thse hope that it will be useful, 10 This program is distributed in thse hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qtooltip.h> 24#include <qtooltip.h>
25#include <qfiledialog.h> 25#include <qfiledialog.h>
26#include <qlayout.h> 26#include <qlayout.h>
27#include <qvbox.h> 27#include <qvbox.h>
28#include <qbuttongroup.h> 28#include <qbuttongroup.h>
29#include <qvgroupbox.h> 29#include <qvgroupbox.h>
30#include <qwidgetstack.h> 30#include <qwidgetstack.h>
31#include <qdatetime.h> 31#include <qdatetime.h>
32#include <qapp.h> 32#include <qapp.h>
33 33
34#include <klocale.h> 34#include <klocale.h>
35#include <kglobal.h> 35#include <kglobal.h>
36#include <kiconloader.h> 36#include <kiconloader.h>
37#include <kstandarddirs.h> 37#include <kstandarddirs.h>
38#include <kmessagebox.h> 38#include <kmessagebox.h>
39#ifndef KORG_NOKABC 39#ifndef KORG_NOKABC
40 40
41#ifdef DESKTOP_VERSION 41#ifdef DESKTOP_VERSION
42#include <kabc/addresseedialog.h> 42#include <kabc/addresseedialog.h>
43#else //DESKTOP_VERSION 43#else //DESKTOP_VERSION
44#include <externalapphandler.h> 44#include <externalapphandler.h>
45#endif //DESKTOP_VERSION 45#endif //DESKTOP_VERSION
46 46
47#endif 47#endif
48 48
49#include <libkcal/incidence.h> 49#include <libkcal/incidence.h>
50 50
51#include "koprefs.h" 51#include "koprefs.h"
52 52
53#include "koeditordetails.h" 53#include "koeditordetails.h"
54 54
55template <> 55template <>
56CustomListViewItem<class Attendee *>::~CustomListViewItem() 56CustomListViewItem<class Attendee *>::~CustomListViewItem()
57{ 57{
58 delete mData; 58 delete mData;
59} 59}
60 60
61template <> 61template <>
62void CustomListViewItem<class Attendee *>::updateItem() 62void CustomListViewItem<class Attendee *>::updateItem()
63{ 63{
64 setText(0,mData->name()); 64 setText(0,mData->name());
65 setText(1,mData->email()); 65 setText(1,mData->email());
66 setText(2,mData->roleStr()); 66 setText(2,mData->roleStr());
67 setText(3,mData->statusStr()); 67 setText(3,mData->statusStr());
68 if (mData->RSVP() && !mData->email().isEmpty()) 68 if (mData->RSVP() && !mData->email().isEmpty())
69 setPixmap(4,SmallIcon("mailappt")); 69 setPixmap(4,SmallIcon("mailappt"));
70 else 70 else
71 setPixmap(4,SmallIcon("nomailappt")); 71 setPixmap(4,SmallIcon("nomailappt"));
72} 72}
73 73
74 74
75KOEditorDetails::KOEditorDetails (int spacing,QWidget* parent,const char* name) 75KOEditorDetails::KOEditorDetails (int spacing,QWidget* parent,const char* name)
76 : QWidget( parent, name), mDisableItemUpdate( false ) 76 : QWidget( parent, name), mDisableItemUpdate( false )
77{ 77{
78 QGridLayout *topLayout = new QGridLayout(this); 78 QGridLayout *topLayout = new QGridLayout(this);
79 topLayout->setSpacing(spacing); 79 topLayout->setSpacing(spacing);
80 80
81 QString organizer = KOPrefs::instance()->email(); 81 QString organizer = KOPrefs::instance()->email();
82 mOrganizerLabel = new QLabel(i18n("Organizer: %1").arg(organizer),this); 82 mOrganizerLabel = new QLabel(i18n("Organizer: %1").arg(organizer),this);
83 83
84 mListView = new KListView(this,"mListView"); 84 mListView = new KListView(this,"mListView");
85 mListView->addColumn(i18n("Name"),180); 85 mListView->addColumn(i18n("Name"),180);
86 mListView->addColumn(i18n("Email"),180); 86 mListView->addColumn(i18n("Email"),180);
87 mListView->addColumn(i18n("Role"),60); 87 mListView->addColumn(i18n("Role"),60);
88 mListView->addColumn(i18n("Status"),100); 88 mListView->addColumn(i18n("Status"),100);
89 mListView->addColumn(i18n("RSVP"),35); 89 mListView->addColumn(i18n("RSVP"),35);
90 if ( QApplication::desktop()->width() <= 320 ) { 90 if ( QApplication::desktop()->width() <= 320 ) {
91 //mListView->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding) ); 91 int hei = 80;
92 mListView->setFixedHeight(80); 92 if ( QApplication::desktop()->height() <= 240 )
93 hei = 60;
94 mListView->setFixedHeight(hei);
93 } 95 }
94 mListView->setAllColumnsShowFocus (true ); 96 mListView->setAllColumnsShowFocus (true );
95 //mListView->setSingleClick( true ); 97 //mListView->setSingleClick( true );
96 connect(mListView,SIGNAL(selectionChanged(QListViewItem *)), 98 connect(mListView,SIGNAL(selectionChanged(QListViewItem *)),
97 SLOT(updateAttendeeInput())); 99 SLOT(updateAttendeeInput()));
98 100
99 connect(mListView,SIGNAL(executed(QListViewItem * ,const QPoint&, int )), 101 connect(mListView,SIGNAL(executed(QListViewItem * ,const QPoint&, int )),
100 SLOT(itemClicked(QListViewItem * ,const QPoint& , int ))); 102 SLOT(itemClicked(QListViewItem * ,const QPoint& , int )));
101 103
102 mRsvpButton = new QCheckBox(this); 104 mRsvpButton = new QCheckBox(this);
103 mRsvpButton->setText(i18n("Request response")); 105 mRsvpButton->setText(i18n("Request response"));
104 mAddressBookButton = new QPushButton(i18n("Address &Book..."),this); 106 mAddressBookButton = new QPushButton(i18n("Address &Book..."),this);
105 QLabel *attendeeLabel = new QLabel(this); 107 QLabel *attendeeLabel = new QLabel(this);
106 attendeeLabel->setText(i18n("Name:")); 108 attendeeLabel->setText(i18n("Name:"));
107 attendeeLabel->setFixedSize( attendeeLabel->sizeHint() ); 109 attendeeLabel->setFixedSize( attendeeLabel->sizeHint() );
108 mNameEdit = new QLineEdit(this); 110 mNameEdit = new QLineEdit(this);
109 connect(mNameEdit,SIGNAL(textChanged(const QString &)), 111 connect(mNameEdit,SIGNAL(textChanged(const QString &)),
110 SLOT(updateAttendeeItem())); 112 SLOT(updateAttendeeItem()));
111 113
112 mUidEdit = new QLineEdit(0); 114 mUidEdit = new QLineEdit(0);
113 mUidEdit->setText(""); 115 mUidEdit->setText("");
114 116
115 QLabel *emailLabel = new QLabel(this); 117 QLabel *emailLabel = new QLabel(this);
116 emailLabel->setText(i18n("Email:")); 118 emailLabel->setText(i18n("Email:"));
117 mEmailEdit = new QLineEdit(this); 119 mEmailEdit = new QLineEdit(this);
118 connect(mEmailEdit,SIGNAL(textChanged(const QString &)), 120 connect(mEmailEdit,SIGNAL(textChanged(const QString &)),
119 SLOT(updateAttendeeItem())); 121 SLOT(updateAttendeeItem()));
120 122
121 QLabel *attendeeRoleLabel = new QLabel(this); 123 QLabel *attendeeRoleLabel = new QLabel(this);
122 attendeeRoleLabel->setText(i18n("Role:")); 124 attendeeRoleLabel->setText(i18n("Role:"));
123 mRoleCombo = new QComboBox(false,this); 125 mRoleCombo = new QComboBox(false,this);
124 mRoleCombo->insertStringList(Attendee::roleList()); 126 mRoleCombo->insertStringList(Attendee::roleList());
125 connect(mRoleCombo,SIGNAL(activated(int)),SLOT(updateAttendeeItem())); 127 connect(mRoleCombo,SIGNAL(activated(int)),SLOT(updateAttendeeItem()));
126 128
127 QLabel *statusLabel = new QLabel(this); 129 QLabel *statusLabel = new QLabel(this);
128 statusLabel->setText( i18n("Status:") ); 130 statusLabel->setText( i18n("Status:") );
129 131
130 mStatusCombo = new QComboBox(false,this); 132 mStatusCombo = new QComboBox(false,this);
131 mStatusCombo->insertStringList(Attendee::statusList()); 133 mStatusCombo->insertStringList(Attendee::statusList());
132 connect(mStatusCombo,SIGNAL(activated(int)),SLOT(updateAttendeeItem())); 134 connect(mStatusCombo,SIGNAL(activated(int)),SLOT(updateAttendeeItem()));
133 135
134 136
135 connect(mRsvpButton,SIGNAL(clicked()),SLOT(updateAttendeeItem())); 137 connect(mRsvpButton,SIGNAL(clicked()),SLOT(updateAttendeeItem()));
136 QWidget *buttonBox = new QWidget(this); 138 QWidget *buttonBox = new QWidget(this);
137 QVBoxLayout *buttonLayout = new QVBoxLayout(buttonBox); 139 QVBoxLayout *buttonLayout = new QVBoxLayout(buttonBox);
138 140
139 QPushButton *newButton = new QPushButton(i18n("&New"),buttonBox); 141 QPushButton *newButton = new QPushButton(i18n("&New"),buttonBox);
140 buttonLayout->addWidget(newButton); 142 buttonLayout->addWidget(newButton);
141 connect(newButton,SIGNAL(clicked()),SLOT(addNewAttendee())); 143 connect(newButton,SIGNAL(clicked()),SLOT(addNewAttendee()));
142 144
143 mRemoveButton = new QPushButton(i18n("&Remove"),buttonBox); 145 mRemoveButton = new QPushButton(i18n("&Remove"),buttonBox);
144 buttonLayout->addWidget(mRemoveButton); 146 buttonLayout->addWidget(mRemoveButton);
145 connect(mRemoveButton, SIGNAL(clicked()),SLOT(removeAttendee())); 147 connect(mRemoveButton, SIGNAL(clicked()),SLOT(removeAttendee()));
146 148
147 // buttonLayout->addWidget(mAddressBookButton); 149 // buttonLayout->addWidget(mAddressBookButton);
148 connect(mAddressBookButton,SIGNAL(clicked()),SLOT(openAddressBook())); 150 connect(mAddressBookButton,SIGNAL(clicked()),SLOT(openAddressBook()));
149 //mRoleCombo->setFixedSize( mRoleCombo->sizeHint () ); 151 //mRoleCombo->setFixedSize( mRoleCombo->sizeHint () );
150 152 if ( QApplication::desktop()->height() <= 240 ) {
151 if (qApp->desktop()->width() < 640 ) { 153 mRoleCombo->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::Minimum ,FALSE) );
152 if ( qApp->desktop()->width() < 300 ) 154 mStatusCombo->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::Minimum ,FALSE) );
153 topLayout->setSpacing(1);
154 ;//mListView->setFixedHeight(80);
155 topLayout->addMultiCellWidget(mOrganizerLabel,0,0,0,3);
156 topLayout->addMultiCellWidget(mListView,1,1,0,3);
157 topLayout->addWidget(attendeeLabel,3,0);
158 topLayout->addMultiCellWidget(mNameEdit,3,3,1,2);
159 topLayout->addWidget(emailLabel,4,0);
160 topLayout->addMultiCellWidget(mEmailEdit,4,4,1,2);
161 topLayout->addWidget(attendeeRoleLabel,5,0);
162 topLayout->addMultiCellWidget(mRoleCombo,5,5,1,3);
163 topLayout->addWidget(statusLabel,6,0);
164 topLayout->addMultiCellWidget(mStatusCombo,6,6,1,3);
165 topLayout->addMultiCellWidget(mAddressBookButton,2,2,2,3);
166 topLayout->addMultiCellWidget(mRsvpButton,2,2,0,1);
167 topLayout->addMultiCellWidget(buttonBox,3,4,3,3);
168 topLayout->setRowStretch(1,2);
169 topLayout->setColStretch(0,0);
170 topLayout->setColStretch(1,2);
171 topLayout->setColStretch(2,1);
172 topLayout->setColStretch(3,1);
173
174 } else {
175 topLayout->addMultiCellWidget(mOrganizerLabel,0,0,0,5); 155 topLayout->addMultiCellWidget(mOrganizerLabel,0,0,0,5);
176 topLayout->addMultiCellWidget(mListView,1,1,0,5); 156 topLayout->addMultiCellWidget(mListView,1,1,0,5);
177 topLayout->addWidget(attendeeLabel,3,0); 157 topLayout->addWidget(attendeeLabel,3,0);
178 topLayout->addMultiCellWidget(mNameEdit,3,3,1,4); 158 topLayout->addMultiCellWidget(mNameEdit,3,3,1,4);
179 topLayout->addWidget(emailLabel,4,0); 159 topLayout->addWidget(emailLabel,4,0);
180 topLayout->addMultiCellWidget(mEmailEdit,4,4,1,4); 160 topLayout->addMultiCellWidget(mEmailEdit,4,4,1,4);
181 topLayout->addWidget(attendeeRoleLabel,5,0); 161 topLayout->addWidget(attendeeRoleLabel,5,0);
182 topLayout->addMultiCellWidget(mRoleCombo,5,5,1,2); 162 topLayout->addMultiCellWidget(mRoleCombo,5,5,1,2);
183 topLayout->addWidget(statusLabel,5,3); 163 topLayout->addWidget(statusLabel,5,3);
184 topLayout->addMultiCellWidget(mStatusCombo,5,5,4,5); 164 topLayout->addMultiCellWidget(mStatusCombo,5,5,4,5);
185 topLayout->addMultiCellWidget(mAddressBookButton,2,2,4,5); 165 topLayout->addMultiCellWidget(mAddressBookButton,2,2,2,5);
186 topLayout->addMultiCellWidget(mRsvpButton,2,2,0,1); 166 topLayout->addMultiCellWidget(mRsvpButton,2,2,0,1);
187 topLayout->addMultiCellWidget(buttonBox,3,4,5,5); 167 topLayout->addMultiCellWidget(buttonBox,3,4,5,5);
188 topLayout->setRowStretch(1,5); 168 topLayout->setRowStretch(1,5);
189 topLayout->setColStretch(0,0); 169 topLayout->setColStretch(0,0);
170 } else {
171 if (qApp->desktop()->width() < 640 ) {
172 if ( qApp->desktop()->width() < 300 )
173 topLayout->setSpacing(1);
174 ;//mListView->setFixedHeight(80);
175 topLayout->addMultiCellWidget(mOrganizerLabel,0,0,0,3);
176 topLayout->addMultiCellWidget(mListView,1,1,0,3);
177 topLayout->addWidget(attendeeLabel,3,0);
178 topLayout->addMultiCellWidget(mNameEdit,3,3,1,2);
179 topLayout->addWidget(emailLabel,4,0);
180 topLayout->addMultiCellWidget(mEmailEdit,4,4,1,2);
181 topLayout->addWidget(attendeeRoleLabel,5,0);
182 topLayout->addMultiCellWidget(mRoleCombo,5,5,1,3);
183 topLayout->addWidget(statusLabel,6,0);
184 topLayout->addMultiCellWidget(mStatusCombo,6,6,1,3);
185 topLayout->addMultiCellWidget(mAddressBookButton,2,2,2,3);
186 topLayout->addMultiCellWidget(mRsvpButton,2,2,0,1);
187 topLayout->addMultiCellWidget(buttonBox,3,4,3,3);
188 topLayout->setRowStretch(1,2);
189 topLayout->setColStretch(0,0);
190 topLayout->setColStretch(1,2);
191 topLayout->setColStretch(2,1);
192 topLayout->setColStretch(3,1);
193 } else {
194 topLayout->addMultiCellWidget(mOrganizerLabel,0,0,0,5);
195 topLayout->addMultiCellWidget(mListView,1,1,0,5);
196 topLayout->addWidget(attendeeLabel,3,0);
197 topLayout->addMultiCellWidget(mNameEdit,3,3,1,4);
198 topLayout->addWidget(emailLabel,4,0);
199 topLayout->addMultiCellWidget(mEmailEdit,4,4,1,4);
200 topLayout->addWidget(attendeeRoleLabel,5,0);
201 topLayout->addMultiCellWidget(mRoleCombo,5,5,1,2);
202 topLayout->addWidget(statusLabel,5,3);
203 topLayout->addMultiCellWidget(mStatusCombo,5,5,4,5);
204 topLayout->addMultiCellWidget(mAddressBookButton,2,2,4,5);
205 topLayout->addMultiCellWidget(mRsvpButton,2,2,0,1);
206 topLayout->addMultiCellWidget(buttonBox,3,4,5,5);
207 topLayout->setRowStretch(1,5);
208 topLayout->setColStretch(0,0);
209 }
190 } 210 }
191// #if 0 211// #if 0
192// topLayout->setColStretch(2,1); 212// topLayout->setColStretch(2,1);
193// topLayout->addWidget(statusLabel,3,3); 213// topLayout->addWidget(statusLabel,3,3);
194// topLayout->addWidget(mStatusCombo,3,4); 214// topLayout->addWidget(mStatusCombo,3,4);
195// #else 215// #else
196// topLayout->addWidget(statusLabel,4,3); 216// topLayout->addWidget(statusLabel,4,3);
197// // topLayout->addWidget(mStatusCombo,4,3); 217// // topLayout->addWidget(mStatusCombo,4,3);
198// topLayout->addMultiCellWidget(mStatusCombo,4,4,4,5); 218// topLayout->addMultiCellWidget(mStatusCombo,4,4,4,5);
199 219
200// #endif 220// #endif
201// // topLayout->setRowStretch(5,1); 221// // topLayout->setRowStretch(5,1);
202// topLayout->addMultiCellWidget(mRsvpButton,5,5,0,1); 222// topLayout->addMultiCellWidget(mRsvpButton,5,5,0,1);
203// topLayout->addMultiCellWidget(buttonBox,2,3,5,5); 223// topLayout->addMultiCellWidget(buttonBox,2,3,5,5);
204// topLayout->setRowStretch(1,5); 224// topLayout->setRowStretch(1,5);
205// topLayout->setColStretch(0,0); 225// topLayout->setColStretch(0,0);
206 226
207#ifdef KORG_NOKABC 227#ifdef KORG_NOKABC
208 mAddressBookButton->hide(); 228 mAddressBookButton->hide();
209#endif 229#endif
210 230
211 updateAttendeeInput(); 231 updateAttendeeInput();
212#ifndef DESKTOP_VERSION 232#ifndef DESKTOP_VERSION
213//US listen for arriving address resultsets 233//US listen for arriving address resultsets
214 connect(ExternalAppHandler::instance(), SIGNAL(receivedNameEmailUidListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&)), 234 connect(ExternalAppHandler::instance(), SIGNAL(receivedNameEmailUidListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&)),
215 this, SLOT(insertAttendees(const QString&, const QStringList&, const QStringList&, const QStringList&))); 235 this, SLOT(insertAttendees(const QString&, const QStringList&, const QStringList&, const QStringList&)));
216#endif 236#endif
217 237
218} 238}
219 239
220KOEditorDetails::~KOEditorDetails() 240KOEditorDetails::~KOEditorDetails()
221{ 241{
222} 242}
223 243
224void KOEditorDetails::removeAttendee() 244void KOEditorDetails::removeAttendee()
225{ 245{
226 AttendeeListItem *aItem = (AttendeeListItem *)mListView->selectedItem(); 246 AttendeeListItem *aItem = (AttendeeListItem *)mListView->selectedItem();
227 if (!aItem) return; 247 if (!aItem) return;
228 248
229 Attendee *delA = new Attendee(aItem->data()->name(),aItem->data()->email(), 249 Attendee *delA = new Attendee(aItem->data()->name(),aItem->data()->email(),
230 aItem->data()->RSVP(),aItem->data()->status(),aItem->data()->role(), 250 aItem->data()->RSVP(),aItem->data()->status(),aItem->data()->role(),
231 aItem->data()->uid()); 251 aItem->data()->uid());
232 mdelAttendees.append(delA); 252 mdelAttendees.append(delA);
233 253
234 delete aItem; 254 delete aItem;
235 255
236 updateAttendeeInput(); 256 updateAttendeeInput();
237} 257}
238 258
239 259
240void KOEditorDetails::openAddressBook() 260void KOEditorDetails::openAddressBook()
241{ 261{
242#ifndef KORG_NOKABC 262#ifndef KORG_NOKABC
243 263
244#ifdef DESKTOP_VERSION 264#ifdef DESKTOP_VERSION
245 KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this); 265 KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this);
246 uint i=0; 266 uint i=0;
247 for (i=0; i < list.count(); i++) { 267 for (i=0; i < list.count(); i++) {
248 insertAttendee( new Attendee( list[i].realName(), list[i].preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,list[i].uid()) ); 268 insertAttendee( new Attendee( list[i].realName(), list[i].preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,list[i].uid()) );
249 } 269 }
250#else 270#else
251 bool res = ExternalAppHandler::instance()->requestNameEmailUidListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); 271 bool res = ExternalAppHandler::instance()->requestNameEmailUidListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/);
252 // the result should now arrive through method insertAttendees 272 // the result should now arrive through method insertAttendees
253#endif 273#endif
254 274
255 275
256#if 0 276#if 0
257 KABC::Addressee a = KABC::AddresseeDialog::getAddressee(this); 277 KABC::Addressee a = KABC::AddresseeDialog::getAddressee(this);
258 if (!a.isEmpty()) { 278 if (!a.isEmpty()) {
259 insertAttendee( new Attendee( a.realName(), a.preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,a.uid()) ); 279 insertAttendee( new Attendee( a.realName(), a.preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,a.uid()) );
260 } 280 }
261#endif 281#endif
262#endif 282#endif
263} 283}
264 284
265 285
266void KOEditorDetails::addNewAttendee() 286void KOEditorDetails::addNewAttendee()
267{ 287{
268#if 0 288#if 0
269 // this is cool. If they didn't enter an email address, 289 // this is cool. If they didn't enter an email address,
270 // try to look it up in the address book and fill it in for them. 290 // try to look it up in the address book and fill it in for them.
271 if (QString(mEmailEdit->text()).stripWhiteSpace().isEmpty()) { 291 if (QString(mEmailEdit->text()).stripWhiteSpace().isEmpty()) {
272 KabAPI addrBook; 292 KabAPI addrBook;
273 QString name; 293 QString name;
274 std::list<AddressBook::Entry> entries; 294 std::list<AddressBook::Entry> entries;
275 name = mNameEdit->text(); 295 name = mNameEdit->text();
276 if (addrBook.init() == AddressBook::NoError) { 296 if (addrBook.init() == AddressBook::NoError) {
277 if (addrBook.getEntryByName(name, entries, 1) == AddressBook::NoError) { 297 if (addrBook.getEntryByName(name, entries, 1) == AddressBook::NoError) {
278 kdDebug() << "positive match" << endl; 298 kdDebug() << "positive match" << endl;
279 // take first email address 299 // take first email address
280 if (!entries.front().emails.isEmpty() && 300 if (!entries.front().emails.isEmpty() &&
281 entries.front().emails.first().length()>0) 301 entries.front().emails.first().length()>0)
282 mEmailEdit->setText(entries.front().emails.first()); 302 mEmailEdit->setText(entries.front().emails.first());
283 } 303 }
284 } 304 }
285 } 305 }
286#endif 306#endif
287 307
288 Attendee *a = new Attendee(i18n("(EmptyName)"),i18n("(EmptyEmail)")); 308 Attendee *a = new Attendee(i18n("(EmptyName)"),i18n("(EmptyEmail)"));
289 insertAttendee(a); 309 insertAttendee(a);
290} 310}
291 311
292//the map includes name/email pairs, that comes from Ka/Pi 312//the map includes name/email pairs, that comes from Ka/Pi
293void KOEditorDetails::insertAttendees(const QString& uid,const QStringList& nameList,const QStringList& emailList,const QStringList& uidList) 313void KOEditorDetails::insertAttendees(const QString& uid,const QStringList& nameList,const QStringList& emailList,const QStringList& uidList)
294{ 314{
295 if (uid == this->name()) 315 if (uid == this->name())
296 { 316 {
297 for ( int i = 0; i < nameList.count(); i++) 317 for ( int i = 0; i < nameList.count(); i++)
298 { 318 {
299 QString _name = nameList[i]; 319 QString _name = nameList[i];
300 QString _email = emailList[i]; 320 QString _email = emailList[i];
301 QString _uid = uidList[i]; 321 QString _uid = uidList[i];
302 322
303 Attendee *a = new Attendee(_name,_email,false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant, _uid); 323 Attendee *a = new Attendee(_name,_email,false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant, _uid);
304 insertAttendee(a); 324 insertAttendee(a);
305 } 325 }
306 } 326 }
307 327
308} 328}
309 329
310void KOEditorDetails::insertAttendee(Attendee *a) 330void KOEditorDetails::insertAttendee(Attendee *a)
311{ 331{
312 AttendeeListItem *first = (AttendeeListItem*) mListView->firstChild(); 332 AttendeeListItem *first = (AttendeeListItem*) mListView->firstChild();
313 while (first) { 333 while (first) {
314 if ( first->data()->name() == a->name() && first->data()->email() == a->email() ) 334 if ( first->data()->name() == a->name() && first->data()->email() == a->email() )
315 return; 335 return;
316 first = (AttendeeListItem*) first->nextSibling(); 336 first = (AttendeeListItem*) first->nextSibling();
317 } 337 }
318 338
319 AttendeeListItem *item = new AttendeeListItem(a,mListView); 339 AttendeeListItem *item = new AttendeeListItem(a,mListView);
320 mListView->setSelected( item, true ); 340 mListView->setSelected( item, true );
321} 341}
322 342
323void KOEditorDetails::setDefaults() 343void KOEditorDetails::setDefaults()
324{ 344{
325 mRsvpButton->setChecked(true); 345 mRsvpButton->setChecked(true);
326 mListView->clear(); 346 mListView->clear();
327 mdelAttendees.clear(); 347 mdelAttendees.clear();
328 clearAttendeeInput(); 348 clearAttendeeInput();
329 mOrganizerLabel->setText(i18n("Organizer: %1").arg(KOPrefs::instance()->email())); 349 mOrganizerLabel->setText(i18n("Organizer: %1").arg(KOPrefs::instance()->email()));
330 350
331 mNameEdit->setText(""); 351 mNameEdit->setText("");
332 mUidEdit->setText(""); 352 mUidEdit->setText("");
333 mEmailEdit->setText(""); 353 mEmailEdit->setText("");
334 mRoleCombo->setCurrentItem( 0 ); 354 mRoleCombo->setCurrentItem( 0 );
335 mStatusCombo->setCurrentItem( 0 ); 355 mStatusCombo->setCurrentItem( 0 );
336 356
337} 357}
338 358
339void KOEditorDetails::readEvent(Incidence *event) 359void KOEditorDetails::readEvent(Incidence *event)
340{ 360{
341 setDefaults(); 361 setDefaults();
342 //mListView->clear(); 362 //mListView->clear();
343 //mdelAttendees.clear(); 363 //mdelAttendees.clear();
344 QPtrList<Attendee> tmpAList = event->attendees(); 364 QPtrList<Attendee> tmpAList = event->attendees();
345 Attendee *a; 365 Attendee *a;
346 for (a = tmpAList.first(); a; a = tmpAList.next()) 366 for (a = tmpAList.first(); a; a = tmpAList.next())
347 insertAttendee(new Attendee(*a)); 367 insertAttendee(new Attendee(*a));
348 368
349 mListView->setSelected( mListView->firstChild(), true ); 369 mListView->setSelected( mListView->firstChild(), true );
350 mOrganizerLabel->setText(i18n("Organizer: %1").arg(event->organizer())); 370 mOrganizerLabel->setText(i18n("Organizer: %1").arg(event->organizer()));
351} 371}
352 372
353void KOEditorDetails::writeEvent(Incidence *event) 373void KOEditorDetails::writeEvent(Incidence *event)
354{ 374{
355 event->clearAttendees(); 375 event->clearAttendees();
356 QListViewItem *item; 376 QListViewItem *item;
357 AttendeeListItem *a; 377 AttendeeListItem *a;
358 for (item = mListView->firstChild(); item; 378 for (item = mListView->firstChild(); item;
359 item = item->nextSibling()) { 379 item = item->nextSibling()) {
360 a = (AttendeeListItem *)item; 380 a = (AttendeeListItem *)item;
361 event->addAttendee(new Attendee(*(a->data()))); 381 event->addAttendee(new Attendee(*(a->data())));
362 } 382 }
363 event->setOrganizer(KOPrefs::instance()->email()); 383 event->setOrganizer(KOPrefs::instance()->email());
364} 384}
365 385
366void KOEditorDetails::cancelAttendeeEvent(Incidence *event) 386void KOEditorDetails::cancelAttendeeEvent(Incidence *event)
367{ 387{
368 event->clearAttendees(); 388 event->clearAttendees();
369 Attendee * att; 389 Attendee * att;
370 for (att=mdelAttendees.first();att;att=mdelAttendees.next()) { 390 for (att=mdelAttendees.first();att;att=mdelAttendees.next()) {
371 event->addAttendee(new Attendee(*att)); 391 event->addAttendee(new Attendee(*att));
372 } 392 }
373 mdelAttendees.clear(); 393 mdelAttendees.clear();
374} 394}
375 395
376bool KOEditorDetails::validateInput() 396bool KOEditorDetails::validateInput()
377{ 397{
378 return true; 398 return true;
379} 399}
380 400
381void KOEditorDetails::updateAttendeeInput() 401void KOEditorDetails::updateAttendeeInput()
382{ 402{
383 QListViewItem *item = mListView->selectedItem(); 403 QListViewItem *item = mListView->selectedItem();
384 AttendeeListItem *aItem = static_cast<AttendeeListItem *>( item ); 404 AttendeeListItem *aItem = static_cast<AttendeeListItem *>( item );
385 if (aItem) { 405 if (aItem) {
386 fillAttendeeInput( aItem ); 406 fillAttendeeInput( aItem );
387 } else { 407 } else {
388 clearAttendeeInput(); 408 clearAttendeeInput();
389 } 409 }
390} 410}
391 411
392void KOEditorDetails::clearAttendeeInput() 412void KOEditorDetails::clearAttendeeInput()
393{ 413{
394 mNameEdit->setText(""); 414 mNameEdit->setText("");
395 mUidEdit->setText(""); 415 mUidEdit->setText("");
396 mEmailEdit->setText(""); 416 mEmailEdit->setText("");
397 mRoleCombo->setCurrentItem(0); 417 mRoleCombo->setCurrentItem(0);
398 mStatusCombo->setCurrentItem(0); 418 mStatusCombo->setCurrentItem(0);
399 mRsvpButton->setChecked(true); 419 mRsvpButton->setChecked(true);
400 setEnabledAttendeeInput( false ); 420 setEnabledAttendeeInput( false );
401} 421}
402 422
403void KOEditorDetails::fillAttendeeInput( AttendeeListItem *aItem ) 423void KOEditorDetails::fillAttendeeInput( AttendeeListItem *aItem )
404{ 424{
405 Attendee *a = aItem->data(); 425 Attendee *a = aItem->data();
406 mDisableItemUpdate = true; 426 mDisableItemUpdate = true;
407 mNameEdit->setText(a->name()); 427 mNameEdit->setText(a->name());
408 mUidEdit->setText(a->uid()); 428 mUidEdit->setText(a->uid());
409 mEmailEdit->setText(a->email()); 429 mEmailEdit->setText(a->email());
410 mRoleCombo->setCurrentItem(a->role()); 430 mRoleCombo->setCurrentItem(a->role());
411 mStatusCombo->setCurrentItem(a->status()); 431 mStatusCombo->setCurrentItem(a->status());
412 mRsvpButton->setChecked(a->RSVP()); 432 mRsvpButton->setChecked(a->RSVP());
413 433
414 mDisableItemUpdate = false; 434 mDisableItemUpdate = false;
415 435
416 setEnabledAttendeeInput( true ); 436 setEnabledAttendeeInput( true );
417} 437}
418 438
419void KOEditorDetails::setEnabledAttendeeInput( bool enabled ) 439void KOEditorDetails::setEnabledAttendeeInput( bool enabled )
420{ 440{
421 mNameEdit->setEnabled( enabled ); 441 mNameEdit->setEnabled( enabled );
422 mEmailEdit->setEnabled( enabled ); 442 mEmailEdit->setEnabled( enabled );
423 mRoleCombo->setEnabled( enabled ); 443 mRoleCombo->setEnabled( enabled );
424 mStatusCombo->setEnabled( enabled ); 444 mStatusCombo->setEnabled( enabled );
425 mRsvpButton->setEnabled( enabled ); 445 mRsvpButton->setEnabled( enabled );
426 446
427 mRemoveButton->setEnabled( enabled ); 447 mRemoveButton->setEnabled( enabled );
428} 448}
429 449
430void KOEditorDetails::itemClicked(QListViewItem * item ,const QPoint & pnt, int c ) 450void KOEditorDetails::itemClicked(QListViewItem * item ,const QPoint & pnt, int c )
431{ 451{
432 if ( item && c == 4 ) { 452 if ( item && c == 4 ) {
433 mRsvpButton->setChecked( !mRsvpButton->isChecked() ); 453 mRsvpButton->setChecked( !mRsvpButton->isChecked() );
434 updateAttendeeItem(); 454 updateAttendeeItem();
435 } 455 }
436} 456}
437void KOEditorDetails::updateAttendeeItem() 457void KOEditorDetails::updateAttendeeItem()
438{ 458{
439 if (mDisableItemUpdate) return; 459 if (mDisableItemUpdate) return;
440 460
441 QListViewItem *item = mListView->selectedItem(); 461 QListViewItem *item = mListView->selectedItem();
442 AttendeeListItem *aItem = static_cast<AttendeeListItem *>( item ); 462 AttendeeListItem *aItem = static_cast<AttendeeListItem *>( item );
443 if ( !aItem ) return; 463 if ( !aItem ) return;
444 464
445 Attendee *a = aItem->data(); 465 Attendee *a = aItem->data();
diff --git a/korganizer/koeditorgeneral.cpp b/korganizer/koeditorgeneral.cpp
index 0045b7f..bfe0aec 100644
--- a/korganizer/koeditorgeneral.cpp
+++ b/korganizer/koeditorgeneral.cpp
@@ -1,362 +1,372 @@
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#include <qwidget.h> 24#include <qwidget.h>
25#include <qtooltip.h> 25#include <qtooltip.h>
26#include <qlayout.h> 26#include <qlayout.h>
27#include <qvbox.h> 27#include <qvbox.h>
28#include <qbuttongroup.h> 28#include <qbuttongroup.h>
29#include <qvgroupbox.h> 29#include <qvgroupbox.h>
30#include <qwidgetstack.h> 30#include <qwidgetstack.h>
31#include <qdatetime.h> 31#include <qdatetime.h>
32#include <qtimer.h> 32#include <qtimer.h>
33#include <qfile.h> 33#include <qfile.h>
34 34
35 35
36#include <kglobal.h> 36#include <kglobal.h>
37#include <kdebug.h> 37#include <kdebug.h>
38#include <klocale.h> 38#include <klocale.h>
39#include <kiconloader.h> 39#include <kiconloader.h>
40#include <kmessagebox.h> 40#include <kmessagebox.h>
41#include <kfiledialog.h> 41#include <kfiledialog.h>
42#include <kstandarddirs.h> 42#include <kstandarddirs.h>
43 43
44#include <libkcal/todo.h> 44#include <libkcal/todo.h>
45#include <libkcal/event.h> 45#include <libkcal/event.h>
46#include <libkdepim/categoryselectdialog.h> 46#include <libkdepim/categoryselectdialog.h>
47#include <libkdepim/kdateedit.h> 47#include <libkdepim/kdateedit.h>
48 48
49#include "koprefs.h" 49#include "koprefs.h"
50#include "koglobals.h" 50#include "koglobals.h"
51 51
52#include "koeditorgeneral.h" 52#include "koeditorgeneral.h"
53#include "kolocationbox.h" 53#include "kolocationbox.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
60KOEditorGeneral::KOEditorGeneral(QObject* parent, const char* name) : 60KOEditorGeneral::KOEditorGeneral(QObject* parent, const char* name) :
61 QObject( parent, name) 61 QObject( parent, name)
62{ 62{
63 mNextFocus = 0; 63 mNextFocus = 0;
64} 64}
65 65
66KOEditorGeneral::~KOEditorGeneral() 66KOEditorGeneral::~KOEditorGeneral()
67{ 67{
68} 68}
69 69
70void KOEditorGeneral::initHeader(QWidget *parent,QBoxLayout *topLayout) 70void KOEditorGeneral::initHeader(QWidget *parent,QBoxLayout *topLayout)
71{ 71{
72 QGridLayout *headerLayout = new QGridLayout(topLayout); 72 QGridLayout *headerLayout = new QGridLayout(topLayout);
73 73
74#if 0 74#if 0
75 mOwnerLabel = new QLabel(i18n("Owner:"),parent); 75 mOwnerLabel = new QLabel(i18n("Owner:"),parent);
76 headerLayout->addMultiCellWidget(mOwnerLabel,0,0,0,1); 76 headerLayout->addMultiCellWidget(mOwnerLabel,0,0,0,1);
77#endif 77#endif
78 78
79 QLabel *summaryLabel = new QLabel(i18n("Summary:"),parent); 79 QLabel *summaryLabel = new QLabel(i18n("Summary:"),parent);
80 headerLayout->addWidget(summaryLabel,1,0); 80 headerLayout->addWidget(summaryLabel,1,0);
81 81
82 mSummaryEdit = new KOLocationBox(TRUE,parent, 10); 82 mSummaryEdit = new KOLocationBox(TRUE,parent, 10);
83 mSummaryEdit->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::MinimumExpanding ,FALSE) ); 83 mSummaryEdit->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::MinimumExpanding ,FALSE) );
84 //mSummaryEdit->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5 ,(QSizePolicy::SizeType)3 ,FALSE) ); 84 //mSummaryEdit->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5 ,(QSizePolicy::SizeType)3 ,FALSE) );
85 //qDebug("h %d %d ", summaryLabel->sizeHint().height(),mSummaryEdit->sizeHint().height() ); 85 //qDebug("h %d %d ", summaryLabel->sizeHint().height(),mSummaryEdit->sizeHint().height() );
86 int hei = (summaryLabel->sizeHint().height() + mSummaryEdit->sizeHint().height())/2; 86 int hei = (summaryLabel->sizeHint().height() + mSummaryEdit->sizeHint().height())/2;
87 if ( QApplication::desktop()->width() > 320 ) 87 if ( QApplication::desktop()->width() > 320 )
88 mSummaryEdit->setMaximumHeight( hei +6 ); 88 mSummaryEdit->setMaximumHeight( hei +6 );
89 //qDebug("%d %d %d %d %d %d ", QSizePolicy::Fixed , QSizePolicy::Minimum , QSizePolicy:: Maximum , QSizePolicy:: Preferred , QSizePolicy:: MinimumExpanding , QSizePolicy::Expanding ); 89 //qDebug("%d %d %d %d %d %d ", QSizePolicy::Fixed , QSizePolicy::Minimum , QSizePolicy:: Maximum , QSizePolicy:: Preferred , QSizePolicy:: MinimumExpanding , QSizePolicy::Expanding );
90 // SizeType { Fixed = 0, Minimum = MayGrow, Maximum = MayShrink, Preferred = MayGrow|MayShrink, MinimumExpanding = Minimum|ExpMask, Expanding = MinimumExpanding|MayShrink } 90 // SizeType { Fixed = 0, Minimum = MayGrow, Maximum = MayShrink, Preferred = MayGrow|MayShrink, MinimumExpanding = Minimum|ExpMask, Expanding = MinimumExpanding|MayShrink }
91 // mSummaryEdit = new QLineEdit(parent); 91 // mSummaryEdit = new QLineEdit(parent);
92 headerLayout->addWidget(mSummaryEdit,1,1); 92 headerLayout->addWidget(mSummaryEdit,1,1);
93 connect ( mSummaryEdit->lineEdit(), SIGNAL ( returnPressed() ), this, SIGNAL (allAccepted () ) ); 93 connect ( mSummaryEdit->lineEdit(), SIGNAL ( returnPressed() ), this, SIGNAL (allAccepted () ) );
94 94
95 QLabel *locationLabel = new QLabel(i18n("Location:"),parent); 95 QLabel *locationLabel = new QLabel(i18n("Location:"),parent);
96 headerLayout->addWidget(locationLabel,2,0); 96 if ( QApplication::desktop()->height() < 320 )
97 headerLayout->addWidget(locationLabel,1,2);
98 else
99 headerLayout->addWidget(locationLabel,2,0);
97 100
98 mLocationEdit = new KOLocationBox(TRUE,parent,10); 101 mLocationEdit = new KOLocationBox(TRUE,parent,10);
99 mLocationEdit->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::MinimumExpanding ,FALSE) ); 102 mLocationEdit->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::MinimumExpanding ,FALSE) );
100 if ( QApplication::desktop()->width() > 320 ) 103 if ( QApplication::desktop()->width() > 320 )
101 mLocationEdit->setMaximumHeight( hei + 6); 104 mLocationEdit->setMaximumHeight( hei + 6);
102 105
103 // mLocationEdit = new QLineEdit(parent); 106 // mLocationEdit = new QLineEdit(parent);
104 connect ( mLocationEdit->lineEdit(), SIGNAL ( returnPressed() ), this, SIGNAL (allAccepted () ) ); 107 connect ( mLocationEdit->lineEdit(), SIGNAL ( returnPressed() ), this, SIGNAL (allAccepted () ) );
105 headerLayout->addWidget(mLocationEdit,2,1); 108 if ( QApplication::desktop()->height() < 320 ) {
106 headerLayout->setColStretch( 1, 10); 109 headerLayout->addWidget(mLocationEdit,1,3);
110 headerLayout->setColStretch( 1, 10);
111 headerLayout->setColStretch( 3, 10);
112 }
113 else {
114 headerLayout->addWidget(mLocationEdit,2,1);
115 headerLayout->setColStretch( 1, 10);
116 }
107} 117}
108void KOEditorGeneral::setFocusOn( int i ) 118void KOEditorGeneral::setFocusOn( int i )
109{ 119{
110 mNextFocus = i; 120 mNextFocus = i;
111 QTimer::singleShot( 0, this, SLOT ( slotSetFocusOn() )); 121 QTimer::singleShot( 0, this, SLOT ( slotSetFocusOn() ));
112} 122}
113void KOEditorGeneral::slotSetFocusOn() 123void KOEditorGeneral::slotSetFocusOn()
114{ 124{
115 mNextFocus; 125 mNextFocus;
116 if ( mNextFocus == 1 ) { 126 if ( mNextFocus == 1 ) {
117 mDescriptionEdit->setFocus(); 127 mDescriptionEdit->setFocus();
118 mDescriptionEdit->setCursorPosition( mDescriptionEdit->numLines (), 333); 128 mDescriptionEdit->setCursorPosition( mDescriptionEdit->numLines (), 333);
119 } 129 }
120 if ( mNextFocus == 2 ) { 130 if ( mNextFocus == 2 ) {
121 mSummaryEdit->setFocus(); 131 mSummaryEdit->setFocus();
122 } 132 }
123} 133}
124void KOEditorGeneral::editCategories() 134void KOEditorGeneral::editCategories()
125{ 135{
126 // qDebug("KOEditorGeneral::editCategories() "); 136 // qDebug("KOEditorGeneral::editCategories() ");
127 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 ); 137 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 );
128 connect(csd,SIGNAL(categoriesSelected(const QString &)), this ,SLOT(setCategories(const QString &))); 138 connect(csd,SIGNAL(categoriesSelected(const QString &)), this ,SLOT(setCategories(const QString &)));
129 //KOGlobals::fitDialogToScreen( csd ); 139 //KOGlobals::fitDialogToScreen( csd );
130 csd->setColorEnabled(); 140 csd->setColorEnabled();
131 csd->setSelected( QStringList::split (",", mCategoriesLabel->text()) ); 141 csd->setSelected( QStringList::split (",", mCategoriesLabel->text()) );
132 csd->exec(); 142 csd->exec();
133 delete csd; 143 delete csd;
134} 144}
135void KOEditorGeneral::initCategories(QWidget *parent, QBoxLayout *topLayout) 145void KOEditorGeneral::initCategories(QWidget *parent, QBoxLayout *topLayout)
136{ 146{
137 QBoxLayout *categoriesLayout = new QHBoxLayout( topLayout ); 147 QBoxLayout *categoriesLayout = new QHBoxLayout( topLayout );
138 148
139 mCategoriesButton = new QPushButton(parent); 149 mCategoriesButton = new QPushButton(parent);
140 mCategoriesButton->setText(i18n("Categories...")); 150 mCategoriesButton->setText(i18n("Categories..."));
141 connect(mCategoriesButton,SIGNAL(clicked()),this, SLOT(editCategories() )); 151 connect(mCategoriesButton,SIGNAL(clicked()),this, SLOT(editCategories() ));
142 categoriesLayout->addWidget(mCategoriesButton); 152 categoriesLayout->addWidget(mCategoriesButton);
143 153
144 mCategoriesLabel = new QLabel(parent); 154 mCategoriesLabel = new QLabel(parent);
145 mCategoriesLabel->setFrameStyle(QFrame::Panel|QFrame::Sunken); 155 mCategoriesLabel->setFrameStyle(QFrame::Panel|QFrame::Sunken);
146 categoriesLayout->addWidget(mCategoriesLabel,1); 156 categoriesLayout->addWidget(mCategoriesLabel,1);
147} 157}
148 158
149void KOEditorGeneral::initSecrecy(QWidget *parent, QBoxLayout *topLayout) 159void KOEditorGeneral::initSecrecy(QWidget *parent, QBoxLayout *topLayout)
150{ 160{
151 QBoxLayout *secrecyLayout = new QHBoxLayout( topLayout ); 161 QBoxLayout *secrecyLayout = new QHBoxLayout( topLayout );
152 162
153 QLabel *secrecyLabel = new QLabel(i18n("Access:"),parent); 163 QLabel *secrecyLabel = new QLabel(i18n("Access:"),parent);
154 mCancelBox = new QCheckBox ( i18n("Cancelled"), parent); 164 mCancelBox = new QCheckBox ( i18n("Cancelled"), parent);
155 secrecyLayout->addWidget(mCancelBox); 165 secrecyLayout->addWidget(mCancelBox);
156 secrecyLayout->addWidget(secrecyLabel); 166 secrecyLayout->addWidget(secrecyLabel);
157 167
158 mSecrecyCombo = new QComboBox(parent); 168 mSecrecyCombo = new QComboBox(parent);
159 mSecrecyCombo->insertStringList(Incidence::secrecyList()); 169 mSecrecyCombo->insertStringList(Incidence::secrecyList());
160 secrecyLayout->addWidget(mSecrecyCombo); 170 secrecyLayout->addWidget(mSecrecyCombo);
161} 171}
162 172
163void KOEditorGeneral::initDescription(QWidget *parent,QBoxLayout *topLayout) 173void KOEditorGeneral::initDescription(QWidget *parent,QBoxLayout *topLayout)
164{ 174{
165 mDescriptionEdit = new KTextEdit(parent); 175 mDescriptionEdit = new KTextEdit(parent);
166 mDescriptionEdit->setFont(KOPrefs::instance()->mEditBoxFont ); 176 mDescriptionEdit->setFont(KOPrefs::instance()->mEditBoxFont );
167 mDescriptionEdit->append(""); 177 mDescriptionEdit->append("");
168 mDescriptionEdit->setReadOnly(false); 178 mDescriptionEdit->setReadOnly(false);
169 mDescriptionEdit->setOverwriteMode(false); 179 mDescriptionEdit->setOverwriteMode(false);
170 mDescriptionEdit->setWordWrap( KTextEdit::WidgetWidth ); 180 mDescriptionEdit->setWordWrap( KTextEdit::WidgetWidth );
171 topLayout->addWidget(mDescriptionEdit); 181 topLayout->addWidget(mDescriptionEdit);
172#ifndef DESKTOP_VERSION 182#ifndef DESKTOP_VERSION
173 QPEApplication::setStylusOperation( mDescriptionEdit, QPEApplication::RightOnHold ); 183 QPEApplication::setStylusOperation( mDescriptionEdit, QPEApplication::RightOnHold );
174#endif 184#endif
175 185
176} 186}
177 187
178void KOEditorGeneral::initAlarm(QWidget *parent,QBoxLayout *topLayout) 188void KOEditorGeneral::initAlarm(QWidget *parent,QBoxLayout *topLayout)
179{ 189{
180 QBoxLayout *alarmLayout = new QHBoxLayout(topLayout); 190 QBoxLayout *alarmLayout = new QHBoxLayout(topLayout);
181 191
182 //mAlarmBell = new QLabel(parent); 192 //mAlarmBell = new QLabel(parent);
183 //mAlarmBell->setPixmap(SmallIcon("bell")); 193 //mAlarmBell->setPixmap(SmallIcon("bell"));
184 //alarmLayout->addWidget(mAlarmBell); 194 //alarmLayout->addWidget(mAlarmBell);
185 if ( QApplication::desktop()->width() < 320 ) 195 if ( QApplication::desktop()->width() < 320 )
186 mAlarmButton = new QCheckBox(i18n("Rem."),parent); 196 mAlarmButton = new QCheckBox(i18n("Rem."),parent);
187 else 197 else
188 mAlarmButton = new QCheckBox(i18n("Reminder:"),parent); 198 mAlarmButton = new QCheckBox(i18n("Reminder:"),parent);
189 199
190 connect(mAlarmButton, SIGNAL(toggled(bool)), SLOT(enableAlarmEdit(bool))); 200 connect(mAlarmButton, SIGNAL(toggled(bool)), SLOT(enableAlarmEdit(bool)));
191 alarmLayout->addWidget(mAlarmButton); 201 alarmLayout->addWidget(mAlarmButton);
192 202
193 mAlarmTimeEdit = new QSpinBox ( 0, 9999, 1, parent, "mAlarmTimeEdit " ) ; 203 mAlarmTimeEdit = new QSpinBox ( 0, 9999, 1, parent, "mAlarmTimeEdit " ) ;
194 mAlarmTimeEdit->setButtonSymbols( QSpinBox::PlusMinus ); 204 mAlarmTimeEdit->setButtonSymbols( QSpinBox::PlusMinus );
195 alarmLayout->addWidget(mAlarmTimeEdit); 205 alarmLayout->addWidget(mAlarmTimeEdit);
196 mAlarmIncrCombo = new QComboBox(false, parent); 206 mAlarmIncrCombo = new QComboBox(false, parent);
197 if ( QApplication::desktop()->width() < 320 ) { 207 if ( QApplication::desktop()->width() < 320 ) {
198 mAlarmIncrCombo->insertItem(i18n("min")); 208 mAlarmIncrCombo->insertItem(i18n("min"));
199 mAlarmIncrCombo->insertItem(i18n("hou")); 209 mAlarmIncrCombo->insertItem(i18n("hou"));
200 mAlarmIncrCombo->insertItem(i18n("day")); 210 mAlarmIncrCombo->insertItem(i18n("day"));
201 mAlarmTimeEdit->setMaximumWidth( mAlarmTimeEdit->sizeHint().width() ); 211 mAlarmTimeEdit->setMaximumWidth( mAlarmTimeEdit->sizeHint().width() );
202 mAlarmIncrCombo->setMaximumWidth( mAlarmIncrCombo->sizeHint().width() ); 212 mAlarmIncrCombo->setMaximumWidth( mAlarmIncrCombo->sizeHint().width() );
203 } else { 213 } else {
204 mAlarmIncrCombo->insertItem(i18n("minute(s)")); 214 mAlarmIncrCombo->insertItem(i18n("minute(s)"));
205 mAlarmIncrCombo->insertItem(i18n("hour(s)")); 215 mAlarmIncrCombo->insertItem(i18n("hour(s)"));
206 mAlarmIncrCombo->insertItem(i18n("day(s)")); 216 mAlarmIncrCombo->insertItem(i18n("day(s)"));
207 } 217 }
208 218
209 // mAlarmIncrCombo->setMinimumHeight(20); 219 // mAlarmIncrCombo->setMinimumHeight(20);
210 alarmLayout->addWidget(mAlarmIncrCombo); 220 alarmLayout->addWidget(mAlarmIncrCombo);
211 mAlarmSoundButton = new QPushButton(parent); 221 mAlarmSoundButton = new QPushButton(parent);
212 mAlarmSoundButton->setPixmap(SmallIcon("playsound")); 222 mAlarmSoundButton->setPixmap(SmallIcon("playsound"));
213 mAlarmSoundButton->setToggleButton(true); 223 mAlarmSoundButton->setToggleButton(true);
214 QToolTip::add(mAlarmSoundButton, i18n("No sound set")); 224 QToolTip::add(mAlarmSoundButton, i18n("No sound set"));
215 connect(mAlarmSoundButton, SIGNAL(clicked()), SLOT(pickAlarmSound())); 225 connect(mAlarmSoundButton, SIGNAL(clicked()), SLOT(pickAlarmSound()));
216 alarmLayout->addWidget(mAlarmSoundButton); 226 alarmLayout->addWidget(mAlarmSoundButton);
217 227
218 mAlarmProgramButton = new QPushButton(parent); 228 mAlarmProgramButton = new QPushButton(parent);
219 mAlarmProgramButton->setPixmap(SmallIcon("run")); 229 mAlarmProgramButton->setPixmap(SmallIcon("run"));
220 mAlarmProgramButton->setToggleButton(true); 230 mAlarmProgramButton->setToggleButton(true);
221 QToolTip::add(mAlarmProgramButton, i18n("No program set")); 231 QToolTip::add(mAlarmProgramButton, i18n("No program set"));
222 connect(mAlarmProgramButton, SIGNAL(clicked()), SLOT(pickAlarmProgram())); 232 connect(mAlarmProgramButton, SIGNAL(clicked()), SLOT(pickAlarmProgram()));
223 alarmLayout->addWidget(mAlarmProgramButton); 233 alarmLayout->addWidget(mAlarmProgramButton);
224 mAlarmSoundButton->setMaximumWidth( mAlarmSoundButton->sizeHint().width() + 4 ); 234 mAlarmSoundButton->setMaximumWidth( mAlarmSoundButton->sizeHint().width() + 4 );
225 mAlarmProgramButton->setMaximumWidth(mAlarmProgramButton->sizeHint().width() + 4 ); 235 mAlarmProgramButton->setMaximumWidth(mAlarmProgramButton->sizeHint().width() + 4 );
226 // if ( KOPrefs::instance()->mCompactDialogs ) { 236 // if ( KOPrefs::instance()->mCompactDialogs ) {
227 // mAlarmSoundButton->hide(); 237 // mAlarmSoundButton->hide();
228 // mAlarmProgramButton->hide(); 238 // mAlarmProgramButton->hide();
229 // } 239 // }
230} 240}
231 241
232void KOEditorGeneral::pickAlarmSound() 242void KOEditorGeneral::pickAlarmSound()
233{ 243{
234 244
235 //qDebug("KOEditorGeneral::pickAlarmSound() %d",mAlarmSoundButton->isOn() ); 245 //qDebug("KOEditorGeneral::pickAlarmSound() %d",mAlarmSoundButton->isOn() );
236 246
237 bool oldState = mAlarmSoundButton->isOn(); 247 bool oldState = mAlarmSoundButton->isOn();
238 248
239 QString fileName(KFileDialog::getOpenFileName(mAlarmSound, 249 QString fileName(KFileDialog::getOpenFileName(mAlarmSound,
240 i18n("*.wav|Wav Files"), 0)); 250 i18n("*.wav|Wav Files"), 0));
241 if (!fileName.isEmpty()) { 251 if (!fileName.isEmpty()) {
242 mAlarmSound = fileName; 252 mAlarmSound = fileName;
243 QToolTip::remove(mAlarmSoundButton); 253 QToolTip::remove(mAlarmSoundButton);
244 QString dispStr = i18n("Playing '%1'").arg(fileName); 254 QString dispStr = i18n("Playing '%1'").arg(fileName);
245 QToolTip::add(mAlarmSoundButton, dispStr); 255 QToolTip::add(mAlarmSoundButton, dispStr);
246 mAlarmProgramButton->setOn(false); 256 mAlarmProgramButton->setOn(false);
247 mAlarmSoundButton->setOn(true); 257 mAlarmSoundButton->setOn(true);
248 QToolTip::add(mAlarmProgramButton, i18n("No program set")); 258 QToolTip::add(mAlarmProgramButton, i18n("No program set"));
249 } else { 259 } else {
250 mAlarmProgramButton->setOn(oldState); 260 mAlarmProgramButton->setOn(oldState);
251 mAlarmSoundButton->setOn(!oldState); 261 mAlarmSoundButton->setOn(!oldState);
252 262
253 263
254 } 264 }
255 265
256 if (mAlarmProgramButton->isOn()) 266 if (mAlarmProgramButton->isOn())
257 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + getFittingPath(mAlarmProgram) ); 267 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + getFittingPath(mAlarmProgram) );
258 if ( mAlarmSoundButton->isOn()) 268 if ( mAlarmSoundButton->isOn())
259 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio Al.: ") + getFittingPath(mAlarmSound) ); 269 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio Al.: ") + getFittingPath(mAlarmSound) );
260 270
261} 271}
262 272
263void KOEditorGeneral::pickAlarmProgram() 273void KOEditorGeneral::pickAlarmProgram()
264{ 274{
265 bool oldState = mAlarmProgramButton->isOn(); 275 bool oldState = mAlarmProgramButton->isOn();
266 276
267 QString fileName(KFileDialog::getOpenFileName(mAlarmProgram,i18n("Procedure Alarm: ") , 0)); 277 QString fileName(KFileDialog::getOpenFileName(mAlarmProgram,i18n("Procedure Alarm: ") , 0));
268 if (!fileName.isEmpty()) { 278 if (!fileName.isEmpty()) {
269 mAlarmProgram = fileName; 279 mAlarmProgram = fileName;
270 QToolTip::remove(mAlarmProgramButton); 280 QToolTip::remove(mAlarmProgramButton);
271 QString dispStr = i18n("Running '%1'").arg(fileName); 281 QString dispStr = i18n("Running '%1'").arg(fileName);
272 QToolTip::add(mAlarmProgramButton, dispStr); 282 QToolTip::add(mAlarmProgramButton, dispStr);
273 mAlarmSoundButton->setOn(false); 283 mAlarmSoundButton->setOn(false);
274 mAlarmProgramButton->setOn(true); 284 mAlarmProgramButton->setOn(true);
275 QToolTip::add(mAlarmSoundButton, i18n("No sound set")); 285 QToolTip::add(mAlarmSoundButton, i18n("No sound set"));
276 } else { 286 } else {
277 mAlarmProgramButton->setOn(!oldState); 287 mAlarmProgramButton->setOn(!oldState);
278 mAlarmSoundButton->setOn(oldState); 288 mAlarmSoundButton->setOn(oldState);
279 } 289 }
280 290
281 if (mAlarmProgramButton->isOn()) 291 if (mAlarmProgramButton->isOn())
282 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + getFittingPath(mAlarmProgram) ); 292 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + getFittingPath(mAlarmProgram) );
283 if ( mAlarmSoundButton->isOn()) 293 if ( mAlarmSoundButton->isOn())
284 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio Al.: ") + getFittingPath(mAlarmSound) ); 294 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio Al.: ") + getFittingPath(mAlarmSound) );
285 295
286} 296}
287 297
288 298
289QString KOEditorGeneral::getFittingPath( const QString s ) 299QString KOEditorGeneral::getFittingPath( const QString s )
290{ 300{
291 int maxlen = 50; 301 int maxlen = 50;
292 if ( QApplication::desktop()->width() < 640 ) { 302 if ( QApplication::desktop()->width() < 640 ) {
293 if ( QApplication::desktop()->width() < 320 ) 303 if ( QApplication::desktop()->width() < 320 )
294 maxlen = 22; 304 maxlen = 22;
295 else 305 else
296 maxlen = 35; 306 maxlen = 35;
297 } 307 }
298 if ( s.length() > maxlen ) { 308 if ( s.length() > maxlen ) {
299 return "..."+s.right(maxlen -3); 309 return "..."+s.right(maxlen -3);
300 } 310 }
301 return s; 311 return s;
302} 312}
303 313
304void KOEditorGeneral::enableAlarmEdit(bool enable) 314void KOEditorGeneral::enableAlarmEdit(bool enable)
305{ 315{
306 if ( enable ) { 316 if ( enable ) {
307 if (!mAlarmProgramButton->isOn() && !mAlarmSoundButton->isOn()) { 317 if (!mAlarmProgramButton->isOn() && !mAlarmSoundButton->isOn()) {
308 mAlarmSoundButton->setOn( true ); 318 mAlarmSoundButton->setOn( true );
309 if ( mAlarmSound.isEmpty() ) 319 if ( mAlarmSound.isEmpty() )
310 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile; 320 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile;
311 else { 321 else {
312 if ( ! QFile::exists( mAlarmSound ) ) 322 if ( ! QFile::exists( mAlarmSound ) )
313 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile; 323 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile;
314 } 324 }
315 } 325 }
316 } 326 }
317 ((QWidget*)parent())->topLevelWidget()->setCaption(mAlarmMessage); 327 ((QWidget*)parent())->topLevelWidget()->setCaption(mAlarmMessage);
318 mAlarmTimeEdit->setEnabled(enable); 328 mAlarmTimeEdit->setEnabled(enable);
319 mAlarmSoundButton->setEnabled(enable); 329 mAlarmSoundButton->setEnabled(enable);
320 mAlarmProgramButton->setEnabled(enable); 330 mAlarmProgramButton->setEnabled(enable);
321 mAlarmIncrCombo->setEnabled(enable); 331 mAlarmIncrCombo->setEnabled(enable);
322} 332}
323 333
324void KOEditorGeneral::disableAlarmEdit(bool disable) 334void KOEditorGeneral::disableAlarmEdit(bool disable)
325{ 335{
326 enableAlarmEdit( !disable ); 336 enableAlarmEdit( !disable );
327} 337}
328 338
329void KOEditorGeneral::enableAlarm( bool enable ) 339void KOEditorGeneral::enableAlarm( bool enable )
330{ 340{
331 enableAlarmEdit( enable ); 341 enableAlarmEdit( enable );
332} 342}
333 343
334void KOEditorGeneral::alarmDisable(bool disable) 344void KOEditorGeneral::alarmDisable(bool disable)
335{ 345{
336 if (!disable) { 346 if (!disable) {
337 //mAlarmBell->setEnabled(true); 347 //mAlarmBell->setEnabled(true);
338 mAlarmButton->setEnabled(true); 348 mAlarmButton->setEnabled(true);
339 } else { 349 } else {
340 //mAlarmBell->setEnabled(false); 350 //mAlarmBell->setEnabled(false);
341 mAlarmButton->setEnabled(false); 351 mAlarmButton->setEnabled(false);
342 mAlarmButton->setChecked(false); 352 mAlarmButton->setChecked(false);
343 mAlarmTimeEdit->setEnabled(false); 353 mAlarmTimeEdit->setEnabled(false);
344 mAlarmSoundButton->setEnabled(false); 354 mAlarmSoundButton->setEnabled(false);
345 mAlarmProgramButton->setEnabled(false); 355 mAlarmProgramButton->setEnabled(false);
346 mAlarmIncrCombo->setEnabled(false); 356 mAlarmIncrCombo->setEnabled(false);
347 } 357 }
348} 358}
349 359
350void KOEditorGeneral::setCategories(const QString &str) 360void KOEditorGeneral::setCategories(const QString &str)
351{ 361{
352 mCategoriesLabel->setText(str); 362 mCategoriesLabel->setText(str);
353} 363}
354 364
355void KOEditorGeneral::setDefaults(bool allDay) 365void KOEditorGeneral::setDefaults(bool allDay)
356{ 366{
357#if 0 367#if 0
358 mOwnerLabel->setText(i18n("Owner: ") + KOPrefs::instance()->fullName()); 368 mOwnerLabel->setText(i18n("Owner: ") + KOPrefs::instance()->fullName());
359#endif 369#endif
360 370
361 mAlarmMessage = i18n("Edit new item"); 371 mAlarmMessage = i18n("Edit new item");
362 enableAlarmEdit( !allDay ); 372 enableAlarmEdit( !allDay );
diff --git a/korganizer/koeventeditor.cpp b/korganizer/koeventeditor.cpp
index e23e680..02d4a78 100644
--- a/korganizer/koeventeditor.cpp
+++ b/korganizer/koeventeditor.cpp
@@ -1,372 +1,374 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001,2002 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001,2002 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qtooltip.h> 24#include <qtooltip.h>
25#include <qframe.h> 25#include <qframe.h>
26#include <qpixmap.h> 26#include <qpixmap.h>
27#include <qhbox.h> 27#include <qhbox.h>
28#include <qdir.h> 28#include <qdir.h>
29#include <qlayout.h> 29#include <qlayout.h>
30#include <qwidgetstack.h> 30#include <qwidgetstack.h>
31#include <qapplication.h> 31#include <qapplication.h>
32 32
33#include <kiconloader.h> 33#include <kiconloader.h>
34#include <kstandarddirs.h> 34#include <kstandarddirs.h>
35#include <kdebug.h> 35#include <kdebug.h>
36#include <klocale.h> 36#include <klocale.h>
37#include <kfiledialog.h> 37#include <kfiledialog.h>
38#include <kmessagebox.h> 38#include <kmessagebox.h>
39#include <libkcal/calendarresources.h> 39#include <libkcal/calendarresources.h>
40#include <libkcal/resourcecalendar.h> 40#include <libkcal/resourcecalendar.h>
41#include <kresources/resourceselectdialog.h> 41#include <kresources/resourceselectdialog.h>
42 42
43#include <libkdepim/categoryselectdialog.h> 43#include <libkdepim/categoryselectdialog.h>
44#include <libkcal/calendarlocal.h> 44#include <libkcal/calendarlocal.h>
45#include <libkcal/icalformat.h> 45#include <libkcal/icalformat.h>
46 46
47#include "koprefs.h" 47#include "koprefs.h"
48 48
49#include "koeventeditor.h" 49#include "koeventeditor.h"
50extern int globalFlagBlockAgenda; 50extern int globalFlagBlockAgenda;
51 51
52KOEventEditor::KOEventEditor( Calendar *calendar, QWidget *parent ) : 52KOEventEditor::KOEventEditor( Calendar *calendar, QWidget *parent ) :
53 KOIncidenceEditor( i18n("Edit Event"), calendar, parent ) 53 KOIncidenceEditor( i18n("Edit Event"), calendar, parent )
54{ 54{
55 mEvent = 0; 55 mEvent = 0;
56 init(); 56 init();
57 if ( QApplication::desktop()->height() <= 240 )
58 hideButtons();
57} 59}
58 60
59KOEventEditor::~KOEventEditor() 61KOEventEditor::~KOEventEditor()
60{ 62{
61 //emit dialogClose( mEvent ); 63 //emit dialogClose( mEvent );
62} 64}
63 65
64void KOEventEditor::init() 66void KOEventEditor::init()
65{ 67{
66 68
67 setupGeneral(); 69 setupGeneral();
68 setupAttendeesTab(); 70 setupAttendeesTab();
69 setupRecurrence(); 71 setupRecurrence();
70 72
71 // Propagate date time settings to recurrence tab 73 // Propagate date time settings to recurrence tab
72 connect(mGeneral,SIGNAL(dateTimesChanged(QDateTime,QDateTime)), 74 connect(mGeneral,SIGNAL(dateTimesChanged(QDateTime,QDateTime)),
73 mRecurrence,SLOT(setDateTimes(QDateTime,QDateTime))); 75 mRecurrence,SLOT(setDateTimes(QDateTime,QDateTime)));
74 connect(mGeneral,SIGNAL(dateTimeStrChanged(const QString &)), 76 connect(mGeneral,SIGNAL(dateTimeStrChanged(const QString &)),
75 mRecurrence,SLOT(setDateTimeStr(const QString &))); 77 mRecurrence,SLOT(setDateTimeStr(const QString &)));
76 78
77 // Category dialog 79 // Category dialog
78 // connect(mGeneral,SIGNAL(openCategoryDialog()),mCategoryDialog,SLOT(show())); 80 // connect(mGeneral,SIGNAL(openCategoryDialog()),mCategoryDialog,SLOT(show()));
79 //connect(mCategoryDialog,SIGNAL(categoriesSelected(const QString &)), 81 //connect(mCategoryDialog,SIGNAL(categoriesSelected(const QString &)),
80 // mGeneral,SLOT(setCategories(const QString &))); 82 // mGeneral,SLOT(setCategories(const QString &)));
81 83
82 84
83} 85}
84 86
85void KOEventEditor::reload() 87void KOEventEditor::reload()
86{ 88{
87 if ( mEvent ) readEvent( mEvent ); 89 if ( mEvent ) readEvent( mEvent );
88} 90}
89 91
90void KOEventEditor::setSecrecy( int sec ) 92void KOEventEditor::setSecrecy( int sec )
91{ 93{
92 mGeneral->setSecrecy( sec ); 94 mGeneral->setSecrecy( sec );
93} 95}
94void KOEventEditor::setCategories( QString s ) 96void KOEventEditor::setCategories( QString s )
95{ 97{
96 mGeneral->setCategories(s); 98 mGeneral->setCategories(s);
97 99
98} 100}
99void KOEventEditor::setupGeneral() 101void KOEventEditor::setupGeneral()
100{ 102{
101 mGeneral = new KOEditorGeneralEvent( this, "KOEditorGeneralEvent" ); 103 mGeneral = new KOEditorGeneralEvent( this, "KOEditorGeneralEvent" );
102 connect ( mGeneral, SIGNAL ( allAccepted() ), this, SLOT ( slotOk () ) ); 104 connect ( mGeneral, SIGNAL ( allAccepted() ), this, SLOT ( slotOk () ) );
103 105
104 if( KOPrefs::instance()->mCompactDialogs ) { 106 if( KOPrefs::instance()->mCompactDialogs ) {
105 QFrame *topFrame = addPage(i18n("General")); 107 QFrame *topFrame = addPage(i18n("General"));
106 QBoxLayout *topLayout = new QVBoxLayout(topFrame); 108 QBoxLayout *topLayout = new QVBoxLayout(topFrame);
107 topLayout->setSpacing(spacingHint()-1); 109 topLayout->setSpacing(spacingHint()-1);
108 topLayout->setMargin(marginHint()-1); 110 topLayout->setMargin(marginHint()-1);
109 mGeneral->initHeader(topFrame,topLayout); 111 mGeneral->initHeader(topFrame,topLayout);
110 mGeneral->initTime(topFrame,topLayout); 112 mGeneral->initTime(topFrame,topLayout);
111// QBoxLayout *alarmLineLayout = new QHBoxLayout(topLayout); 113// QBoxLayout *alarmLineLayout = new QHBoxLayout(topLayout);
112 mGeneral->initAlarm(topFrame,topLayout); 114 mGeneral->initAlarm(topFrame,topLayout);
113 mGeneral->enableAlarm( false ); 115 mGeneral->enableAlarm( false );
114 116
115 QBoxLayout *buttonLayout; 117 QBoxLayout *buttonLayout;
116 if ( QApplication::desktop()->width() < 500 ) 118 if ( QApplication::desktop()->width() < 500 && QApplication::desktop()->height() > 240 )
117 buttonLayout = new QVBoxLayout( topLayout ); 119 buttonLayout = new QVBoxLayout( topLayout );
118 else 120 else
119 buttonLayout = new QHBoxLayout( topLayout ); 121 buttonLayout = new QHBoxLayout( topLayout );
120 QHBox* buttonWidget = new QHBox (topFrame); 122 QHBox* buttonWidget = new QHBox (topFrame);
121 QIconSet icon; 123 QIconSet icon;
122 if ( QApplication::desktop()->width() < 321 ) 124 if ( QApplication::desktop()->width() < 321 )
123 icon = SmallIcon("fileexport16"); 125 icon = SmallIcon("fileexport16");
124 else 126 else
125 icon = SmallIcon("fileexport"); 127 icon = SmallIcon("fileexport");
126 QPushButton * loadTemplate = new QPushButton( buttonWidget); 128 QPushButton * loadTemplate = new QPushButton( buttonWidget);
127 QPushButton * saveTemplate = new QPushButton( buttonWidget); 129 QPushButton * saveTemplate = new QPushButton( buttonWidget);
128 saveTemplate->setIconSet (icon ) ; 130 saveTemplate->setIconSet (icon ) ;
129 int size = saveTemplate->sizeHint().height(); 131 int size = saveTemplate->sizeHint().height();
130 saveTemplate->setFixedSize( size, size ); 132 saveTemplate->setFixedSize( size, size );
131 if ( QApplication::desktop()->width() < 321 ) 133 if ( QApplication::desktop()->width() < 321 )
132 icon = SmallIcon("fileimport16"); 134 icon = SmallIcon("fileimport16");
133 else 135 else
134 icon = SmallIcon("fileimport"); 136 icon = SmallIcon("fileimport");
135 loadTemplate->setIconSet (icon ) ; 137 loadTemplate->setIconSet (icon ) ;
136 loadTemplate->setFixedSize( size, size ); 138 loadTemplate->setFixedSize( size, size );
137 buttonLayout->addWidget( buttonWidget ); 139 buttonLayout->addWidget( buttonWidget );
138 mGeneral->initCategories( topFrame, buttonLayout ); 140 mGeneral->initCategories( topFrame, buttonLayout );
139 141
140 topLayout->addStretch( 1 ); 142 topLayout->addStretch( 1 );
141 143
142 QFrame *topFrame2 = addPage(i18n("Details")); 144 QFrame *topFrame2 = addPage(i18n("Details"));
143 145
144 QBoxLayout *topLayout2 = new QVBoxLayout(topFrame2); 146 QBoxLayout *topLayout2 = new QVBoxLayout(topFrame2);
145 topLayout2->setSpacing(spacingHint()); 147 topLayout2->setSpacing(spacingHint());
146 148
147 mGeneral->initClass(topFrame2,topLayout2); 149 mGeneral->initClass(topFrame2,topLayout2);
148 mGeneral->initSecrecy( topFrame2, topLayout2 ); 150 mGeneral->initSecrecy( topFrame2, topLayout2 );
149 mGeneral->initDescription(topFrame2,topLayout2); 151 mGeneral->initDescription(topFrame2,topLayout2);
150 152
151 connect( saveTemplate, SIGNAL( clicked() ), this , SLOT( slotSaveTemplate() ) ); 153 connect( saveTemplate, SIGNAL( clicked() ), this , SLOT( slotSaveTemplate() ) );
152 connect( loadTemplate, SIGNAL( clicked() ), this , SLOT( slotLoadTemplate() ) ); 154 connect( loadTemplate, SIGNAL( clicked() ), this , SLOT( slotLoadTemplate() ) );
153 } else { 155 } else {
154 QFrame *topFrame = addPage(i18n("General")); 156 QFrame *topFrame = addPage(i18n("General"));
155 157
156 QBoxLayout *topLayout = new QVBoxLayout(topFrame); 158 QBoxLayout *topLayout = new QVBoxLayout(topFrame);
157 topLayout->setSpacing(spacingHint()); 159 topLayout->setSpacing(spacingHint());
158 160
159 mGeneral->initHeader(topFrame,topLayout); 161 mGeneral->initHeader(topFrame,topLayout);
160 mGeneral->initTime(topFrame,topLayout); 162 mGeneral->initTime(topFrame,topLayout);
161 QBoxLayout *alarmLineLayout = new QHBoxLayout(topLayout); 163 QBoxLayout *alarmLineLayout = new QHBoxLayout(topLayout);
162 mGeneral->initAlarm(topFrame,alarmLineLayout); 164 mGeneral->initAlarm(topFrame,alarmLineLayout);
163 mGeneral->initClass(topFrame,alarmLineLayout); 165 mGeneral->initClass(topFrame,alarmLineLayout);
164 mGeneral->initDescription(topFrame,topLayout); 166 mGeneral->initDescription(topFrame,topLayout);
165 QBoxLayout *detailsLayout = new QHBoxLayout(topLayout); 167 QBoxLayout *detailsLayout = new QHBoxLayout(topLayout);
166 mGeneral->initCategories( topFrame, detailsLayout ); 168 mGeneral->initCategories( topFrame, detailsLayout );
167 mGeneral->initSecrecy( topFrame, detailsLayout ); 169 mGeneral->initSecrecy( topFrame, detailsLayout );
168 } 170 }
169 171
170 mGeneral->finishSetup(); 172 mGeneral->finishSetup();
171 173
172} 174}
173 175
174void KOEventEditor::setupRecurrence() 176void KOEventEditor::setupRecurrence()
175{ 177{
176 QFrame *topFrame = addPage( i18n("Recurrence") ); 178 QFrame *topFrame = addPage( i18n("Recurrence") );
177 QBoxLayout *topLayout = new QVBoxLayout( topFrame ); 179 QBoxLayout *topLayout = new QVBoxLayout( topFrame );
178 180
179 mRecurrence = new KOEditorRecurrence( topFrame ); 181 mRecurrence = new KOEditorRecurrence( topFrame );
180 topLayout->addWidget( mRecurrence ); 182 topLayout->addWidget( mRecurrence );
181} 183}
182 184
183void KOEventEditor::editEvent(Event *event, bool showDescription) 185void KOEventEditor::editEvent(Event *event, bool showDescription)
184{ 186{
185 // init(); 187 // init();
186 188
187 mEvent = event; 189 mEvent = event;
188 readEvent(mEvent); 190 readEvent(mEvent);
189 if ( showDescription ) { 191 if ( showDescription ) {
190 showPage( 1 ); 192 showPage( 1 );
191 mGeneral->setFocusOn( 1 ); 193 mGeneral->setFocusOn( 1 );
192 } else { 194 } else {
193 showPage( 0 ); 195 showPage( 0 );
194 mGeneral->setFocusOn( 2 ); 196 mGeneral->setFocusOn( 2 );
195 } 197 }
196} 198}
197 199
198void KOEventEditor::newEvent( QDateTime from, QDateTime to, bool allDay ) 200void KOEventEditor::newEvent( QDateTime from, QDateTime to, bool allDay )
199{ 201{
200 // init(); 202 // init();
201 203
202 mEvent = 0; 204 mEvent = 0;
203 setDefaults(from,to,allDay); 205 setDefaults(from,to,allDay);
204} 206}
205 207
206void KOEventEditor::loadDefaults() 208void KOEventEditor::loadDefaults()
207{ 209{
208 int fmt = KOPrefs::instance()->mStartTime; 210 int fmt = KOPrefs::instance()->mStartTime;
209 211
210 QDateTime from(QDate::currentDate(), QTime(fmt,0,0)); 212 QDateTime from(QDate::currentDate(), QTime(fmt,0,0));
211 QDateTime to(QDate::currentDate(), 213 QDateTime to(QDate::currentDate(),
212 QTime(fmt+KOPrefs::instance()->mDefaultDuration,0,0)); 214 QTime(fmt+KOPrefs::instance()->mDefaultDuration,0,0));
213 215
214 setDefaults(from,to,false); 216 setDefaults(from,to,false);
215} 217}
216 218
217bool KOEventEditor::processInput( bool emitTime ) 219bool KOEventEditor::processInput( bool emitTime )
218{ 220{
219 if (!validateInput()) return false; 221 if (!validateInput()) return false;
220 222
221 Event *event = 0; 223 Event *event = 0;
222 224
223 if (mEvent) event = mEvent; 225 if (mEvent) event = mEvent;
224 else { 226 else {
225 event = new Event; 227 event = new Event;
226 event->setOrganizer(KOPrefs::instance()->email()); 228 event->setOrganizer(KOPrefs::instance()->email());
227 } 229 }
228 230
229 writeEvent(event); 231 writeEvent(event);
230 if ( emitTime ) { 232 if ( emitTime ) {
231 globalFlagBlockAgenda = 1; 233 globalFlagBlockAgenda = 1;
232 emit showAgendaView( false ); 234 emit showAgendaView( false );
233 emit jumpToTime( event->dtStart().date() ); 235 emit jumpToTime( event->dtStart().date() );
234 globalFlagBlockAgenda = 2; 236 globalFlagBlockAgenda = 2;
235 237
236 } 238 }
237 if (mEvent) { 239 if (mEvent) {
238 event->setRevision(event->revision()+1); 240 event->setRevision(event->revision()+1);
239 emit eventChanged(event); 241 emit eventChanged(event);
240 } else { 242 } else {
241 mCalendar->addEvent(event); 243 mCalendar->addEvent(event);
242 mEvent = event; 244 mEvent = event;
243 emit eventAdded(event); 245 emit eventAdded(event);
244 } 246 }
245 247
246 return true; 248 return true;
247} 249}
248 250
249void KOEventEditor::deleteEvent() 251void KOEventEditor::deleteEvent()
250{ 252{
251 kdDebug() << "Delete event" << endl; 253 kdDebug() << "Delete event" << endl;
252 254
253 if (mEvent) { 255 if (mEvent) {
254 if (KOPrefs::instance()->mConfirm) { 256 if (KOPrefs::instance()->mConfirm) {
255 switch (msgItemDelete()) { 257 switch (msgItemDelete()) {
256 case KMessageBox::Continue: // OK 258 case KMessageBox::Continue: // OK
257 emit eventToBeDeleted(mEvent); 259 emit eventToBeDeleted(mEvent);
258 emit dialogClose(mEvent); 260 emit dialogClose(mEvent);
259 mCalendar->deleteEvent(mEvent); 261 mCalendar->deleteEvent(mEvent);
260 emit eventDeleted(); 262 emit eventDeleted();
261 reject(); 263 reject();
262 break; 264 break;
263 } 265 }
264 } 266 }
265 else { 267 else {
266 emit eventToBeDeleted(mEvent); 268 emit eventToBeDeleted(mEvent);
267 emit dialogClose(mEvent); 269 emit dialogClose(mEvent);
268 mCalendar->deleteEvent(mEvent); 270 mCalendar->deleteEvent(mEvent);
269 emit eventDeleted(); 271 emit eventDeleted();
270 reject(); 272 reject();
271 } 273 }
272 } else { 274 } else {
273 reject(); 275 reject();
274 } 276 }
275} 277}
276 278
277void KOEventEditor::setDefaults(QDateTime from, QDateTime to, bool allDay) 279void KOEventEditor::setDefaults(QDateTime from, QDateTime to, bool allDay)
278{ 280{
279 mGeneral->setDefaults(from,to,allDay); 281 mGeneral->setDefaults(from,to,allDay);
280 mDetails->setDefaults(); 282 mDetails->setDefaults();
281 mRecurrence->setDefaults(from,to,allDay); 283 mRecurrence->setDefaults(from,to,allDay);
282 showPage( 0 ); 284 showPage( 0 );
283 mGeneral->setFocusOn( 2 ); 285 mGeneral->setFocusOn( 2 );
284} 286}
285 287
286void KOEventEditor::readEvent( Event *event, bool tmpl ) 288void KOEventEditor::readEvent( Event *event, bool tmpl )
287{ 289{
288 mGeneral->readEvent( event, tmpl ); 290 mGeneral->readEvent( event, tmpl );
289 mDetails->readEvent( event ); 291 mDetails->readEvent( event );
290 mRecurrence->readEvent( event ); 292 mRecurrence->readEvent( event );
291 293
292 // categories 294 // categories
293 //mCategoryDialog->setSelected( event->categories() ); 295 //mCategoryDialog->setSelected( event->categories() );
294} 296}
295 297
296void KOEventEditor::writeEvent(Event *event) 298void KOEventEditor::writeEvent(Event *event)
297{ 299{
298 mGeneral->writeEvent( event ); 300 mGeneral->writeEvent( event );
299 mDetails->writeEvent( event ); 301 mDetails->writeEvent( event );
300 302
301 if ( event->organizer() == KOPrefs::instance()->email() ) { 303 if ( event->organizer() == KOPrefs::instance()->email() ) {
302 Event *ev = new Event( *event ); 304 Event *ev = new Event( *event );
303 ev->registerObserver(0); 305 ev->registerObserver(0);
304 mDetails->cancelAttendeeEvent( ev ); 306 mDetails->cancelAttendeeEvent( ev );
305 if ( ev->attendeeCount() > 0 ) { 307 if ( ev->attendeeCount() > 0 ) {
306 emit deleteAttendee( ev ); 308 emit deleteAttendee( ev );
307 } 309 }
308 delete(ev); 310 delete(ev);
309 } 311 }
310 312
311 mRecurrence->writeEvent(event); 313 mRecurrence->writeEvent(event);
312} 314}
313 315
314bool KOEventEditor::validateInput() 316bool KOEventEditor::validateInput()
315{ 317{
316 if (!mGeneral->validateInput()) return false; 318 if (!mGeneral->validateInput()) return false;
317 if (!mDetails->validateInput()) return false; 319 if (!mDetails->validateInput()) return false;
318 if (!mRecurrence->validateInput()) return false; 320 if (!mRecurrence->validateInput()) return false;
319 return true; 321 return true;
320} 322}
321 323
322int KOEventEditor::msgItemDelete() 324int KOEventEditor::msgItemDelete()
323{ 325{
324 return KMessageBox::warningContinueCancel(this, 326 return KMessageBox::warningContinueCancel(this,
325 i18n("This item will be permanently deleted."), 327 i18n("This item will be permanently deleted."),
326 i18n("KOrganizer Confirmation"),i18n("Delete")); 328 i18n("KOrganizer Confirmation"),i18n("Delete"));
327} 329}
328 330
329void KOEventEditor::slotLoadTemplate() 331void KOEventEditor::slotLoadTemplate()
330{ 332{
331 333
332 QString fileName =locateLocal( "templates", "events" ); 334 QString fileName =locateLocal( "templates", "events" );
333 QDir t_dir; 335 QDir t_dir;
334 if ( !t_dir.exists(fileName) ) 336 if ( !t_dir.exists(fileName) )
335 t_dir.mkdir ( fileName ); 337 t_dir.mkdir ( fileName );
336 fileName += "/event"; 338 fileName += "/event";
337 fileName = KFileDialog::getOpenFileName( fileName , i18n("Load Event template"), this ); 339 fileName = KFileDialog::getOpenFileName( fileName , i18n("Load Event template"), this );
338 if ( fileName.length() == 0 ) 340 if ( fileName.length() == 0 )
339 return; 341 return;
340 CalendarLocal cal; 342 CalendarLocal cal;
341 ICalFormat format; 343 ICalFormat format;
342 if ( !format.load( &cal, fileName ) ) { 344 if ( !format.load( &cal, fileName ) ) {
343 KMessageBox::error( this, i18n("Error loading template file\n '%1'.") 345 KMessageBox::error( this, i18n("Error loading template file\n '%1'.")
344 .arg( fileName ) ); 346 .arg( fileName ) );
345 return ; 347 return ;
346 } 348 }
347 QPtrList<Event> events = cal.events(); 349 QPtrList<Event> events = cal.events();
348 Event* event = events.first(); 350 Event* event = events.first();
349 if ( !event ) { 351 if ( !event ) {
350 KMessageBox::error( this, 352 KMessageBox::error( this,
351 i18n("Template does not contain\na valid Event.")); 353 i18n("Template does not contain\na valid Event."));
352 } else { 354 } else {
353 kdDebug() << "KOEventEditor::slotLoadTemplate(): readTemplate" << endl; 355 kdDebug() << "KOEventEditor::slotLoadTemplate(): readTemplate" << endl;
354 readEvent( event, true ); 356 readEvent( event, true );
355 } 357 }
356} 358}
357 359
358 360
359void KOEventEditor::slotSaveTemplate() 361void KOEventEditor::slotSaveTemplate()
360{ 362{
361 QString fileName =locateLocal( "templates", "events" ); 363 QString fileName =locateLocal( "templates", "events" );
362 QDir t_dir; 364 QDir t_dir;
363 if ( !t_dir.exists(fileName) ) 365 if ( !t_dir.exists(fileName) )
364 t_dir.mkdir ( fileName ); 366 t_dir.mkdir ( fileName );
365 fileName += "/event"; 367 fileName += "/event";
366 fileName = KFileDialog::getSaveFileName( fileName , i18n("Save as Event template"), this ); 368 fileName = KFileDialog::getSaveFileName( fileName , i18n("Save as Event template"), this );
367 if ( fileName.length() > 0 ) 369 if ( fileName.length() > 0 )
368 saveTemplate( fileName ); 370 saveTemplate( fileName );
369} 371}
370 372
371void KOEventEditor::saveTemplate( const QString &templateName ) 373void KOEventEditor::saveTemplate( const QString &templateName )
372{ 374{
diff --git a/korganizer/kotodoeditor.cpp b/korganizer/kotodoeditor.cpp
index 5513e8b..9073bca 100644
--- a/korganizer/kotodoeditor.cpp
+++ b/korganizer/kotodoeditor.cpp
@@ -1,317 +1,319 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 1997, 1998 Preston Brown 3 Copyright (c) 1997, 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 <qtooltip.h> 25#include <qtooltip.h>
26#include <qframe.h> 26#include <qframe.h>
27#include <qpixmap.h> 27#include <qpixmap.h>
28#include <qlayout.h> 28#include <qlayout.h>
29#include <qhbox.h> 29#include <qhbox.h>
30#include <qdir.h> 30#include <qdir.h>
31#include <qdatetime.h> 31#include <qdatetime.h>
32#include <qapplication.h> 32#include <qapplication.h>
33#include <qtabwidget.h> 33#include <qtabwidget.h>
34 34
35#include <kiconloader.h> 35#include <kiconloader.h>
36#include <klocale.h> 36#include <klocale.h>
37#include <kfiledialog.h> 37#include <kfiledialog.h>
38#include <kstandarddirs.h> 38#include <kstandarddirs.h>
39#include <kmessagebox.h> 39#include <kmessagebox.h>
40 40
41#include <libkdepim/categoryselectdialog.h> 41#include <libkdepim/categoryselectdialog.h>
42#include <libkcal/calendarlocal.h> 42#include <libkcal/calendarlocal.h>
43#include <libkcal/calendarresources.h> 43#include <libkcal/calendarresources.h>
44#include <libkcal/resourcecalendar.h> 44#include <libkcal/resourcecalendar.h>
45#include <libkcal/icalformat.h> 45#include <libkcal/icalformat.h>
46#include <kresources/resourceselectdialog.h> 46#include <kresources/resourceselectdialog.h>
47#include <libkdepim/kdateedit.h> 47#include <libkdepim/kdateedit.h>
48 48
49#include "koprefs.h" 49#include "koprefs.h"
50#include "kolocationbox.h" 50#include "kolocationbox.h"
51 51
52#include "kotodoeditor.h" 52#include "kotodoeditor.h"
53extern int globalFlagBlockAgenda; 53extern int globalFlagBlockAgenda;
54 54
55KOTodoEditor::KOTodoEditor( Calendar *calendar, QWidget *parent ) : 55KOTodoEditor::KOTodoEditor( Calendar *calendar, QWidget *parent ) :
56 KOIncidenceEditor( i18n("Edit To-Do"), calendar, parent ) 56 KOIncidenceEditor( i18n("Edit To-Do"), calendar, parent )
57{ 57{
58 mTodo = 0; 58 mTodo = 0;
59 mRelatedTodo = 0; 59 mRelatedTodo = 0;
60 findButton(User1)->hide(); 60 findButton(User1)->hide();
61 init(); 61 init();
62 if ( QApplication::desktop()->height() <= 240 )
63 hideButtons();
62} 64}
63 65
64KOTodoEditor::~KOTodoEditor() 66KOTodoEditor::~KOTodoEditor()
65{ 67{
66 emit dialogClose( mTodo ); 68 emit dialogClose( mTodo );
67} 69}
68 70
69void KOTodoEditor::init() 71void KOTodoEditor::init()
70{ 72{
71 setupGeneral(); 73 setupGeneral();
72 setupAttendeesTab(); 74 setupAttendeesTab();
73 setupRecurrence(); 75 setupRecurrence();
74 connect(mGeneral,SIGNAL(datesChecked()),this ,SLOT(checkRecurrence())); 76 connect(mGeneral,SIGNAL(datesChecked()),this ,SLOT(checkRecurrence()));
75 mRecurrence->setDateTimeStr( i18n("<i>The recurrence is computed from the start datetime!</i>") ); 77 mRecurrence->setDateTimeStr( i18n("<i>The recurrence is computed from the start datetime!</i>") );
76} 78}
77void KOTodoEditor::setupRecurrence() 79void KOTodoEditor::setupRecurrence()
78{ 80{
79 QFrame *topFrame = addPage( i18n("Recurrence") ); 81 QFrame *topFrame = addPage( i18n("Recurrence") );
80 QBoxLayout *topLayout = new QVBoxLayout( topFrame ); 82 QBoxLayout *topLayout = new QVBoxLayout( topFrame );
81 83
82 mRecurrence = new KOEditorRecurrence( topFrame ); 84 mRecurrence = new KOEditorRecurrence( topFrame );
83 topLayout->addWidget( mRecurrence ); 85 topLayout->addWidget( mRecurrence );
84} 86}
85 87
86void KOTodoEditor::setCategories( QString s ) 88void KOTodoEditor::setCategories( QString s )
87{ 89{
88 mGeneral->setCategories(s); 90 mGeneral->setCategories(s);
89} 91}
90void KOTodoEditor::setSecrecy( int sec ) 92void KOTodoEditor::setSecrecy( int sec )
91{ 93{
92 mGeneral->setSecrecy( sec ); 94 mGeneral->setSecrecy( sec );
93} 95}
94void KOTodoEditor::reload() 96void KOTodoEditor::reload()
95{ 97{
96 if ( mTodo ) readTodo( mTodo ); 98 if ( mTodo ) readTodo( mTodo );
97} 99}
98 100
99void KOTodoEditor::setupGeneral() 101void KOTodoEditor::setupGeneral()
100{ 102{
101 mGeneral = new KOEditorGeneralTodo(this); 103 mGeneral = new KOEditorGeneralTodo(this);
102 connect ( mGeneral, SIGNAL ( allAccepted() ), this, SLOT ( slotOk () ) ); 104 connect ( mGeneral, SIGNAL ( allAccepted() ), this, SLOT ( slotOk () ) );
103 105
104 // connect(mGeneral,SIGNAL(openCategoryDialog()),mCategoryDialog,SLOT(show())); 106 // connect(mGeneral,SIGNAL(openCategoryDialog()),mCategoryDialog,SLOT(show()));
105 //connect(mCategoryDialog, SIGNAL(categoriesSelected(const QString &)), 107 //connect(mCategoryDialog, SIGNAL(categoriesSelected(const QString &)),
106 // mGeneral,SLOT(setCategories(const QString &))); 108 // mGeneral,SLOT(setCategories(const QString &)));
107 109
108 if (KOPrefs::instance()->mCompactDialogs) { 110 if (KOPrefs::instance()->mCompactDialogs) {
109 QFrame *topFrame = addPage(i18n("General")); 111 QFrame *topFrame = addPage(i18n("General"));
110 112
111 QBoxLayout *topLayout = new QVBoxLayout(topFrame); 113 QBoxLayout *topLayout = new QVBoxLayout(topFrame);
112 if ( QApplication::desktop()->width() < 480 ) { 114 if ( QApplication::desktop()->width() < 480 ) {
113 topLayout->setMargin(marginHintSmall()); 115 topLayout->setMargin(marginHintSmall());
114 topLayout->setSpacing(spacingHintSmall()); 116 topLayout->setSpacing(spacingHintSmall());
115 } else { 117 } else {
116 topLayout->setMargin(marginHint()); 118 topLayout->setMargin(marginHint());
117 topLayout->setSpacing(spacingHint()); 119 topLayout->setSpacing(spacingHint());
118 } 120 }
119 mGeneral->initHeader(topFrame,topLayout); 121 mGeneral->initHeader(topFrame,topLayout);
120 mGeneral->initTime(topFrame,topLayout); 122 mGeneral->initTime(topFrame,topLayout);
121 mGeneral->initAlarm(topFrame,topLayout); 123 mGeneral->initAlarm(topFrame,topLayout);
122 mGeneral->enableAlarm( false ); 124 mGeneral->enableAlarm( false );
123 125
124 126
125 QBoxLayout *priorityLayout; 127 QBoxLayout *priorityLayout;
126 if ( QApplication::desktop()->width() < 500 ) 128 if ( QApplication::desktop()->width() < 500 )
127 priorityLayout = new QVBoxLayout( topLayout ); 129 priorityLayout = new QVBoxLayout( topLayout );
128 else 130 else
129 priorityLayout = new QHBoxLayout( topLayout ); 131 priorityLayout = new QHBoxLayout( topLayout );
130 QWidget* prioWidget = new QWidget (topFrame); 132 QWidget* prioWidget = new QWidget (topFrame);
131 priorityLayout->addWidget( prioWidget ); 133 priorityLayout->addWidget( prioWidget );
132 QHBoxLayout* priorityLayout2 = new QHBoxLayout( prioWidget); 134 QHBoxLayout* priorityLayout2 = new QHBoxLayout( prioWidget);
133 135
134 136
135 QIconSet icon; 137 QIconSet icon;
136 if ( QApplication::desktop()->width() < 321 ) 138 if ( QApplication::desktop()->width() < 321 )
137 icon = SmallIcon("fileimport16"); 139 icon = SmallIcon("fileimport16");
138 else 140 else
139 icon = SmallIcon("fileimport"); 141 icon = SmallIcon("fileimport");
140 QPushButton * loadTemplate = new QPushButton( prioWidget); 142 QPushButton * loadTemplate = new QPushButton( prioWidget);
141 loadTemplate->setIconSet (icon ) ; 143 loadTemplate->setIconSet (icon ) ;
142 int size = loadTemplate->sizeHint().height(); 144 int size = loadTemplate->sizeHint().height();
143 loadTemplate->setFixedSize( size, size ); 145 loadTemplate->setFixedSize( size, size );
144 if ( QApplication::desktop()->width() < 321 ) 146 if ( QApplication::desktop()->width() < 321 )
145 icon = SmallIcon("fileexport16"); 147 icon = SmallIcon("fileexport16");
146 else 148 else
147 icon = SmallIcon("fileexport"); 149 icon = SmallIcon("fileexport");
148 QPushButton * saveTemplate = new QPushButton( prioWidget); 150 QPushButton * saveTemplate = new QPushButton( prioWidget);
149 saveTemplate->setIconSet (icon ) ; 151 saveTemplate->setIconSet (icon ) ;
150 saveTemplate->setFixedSize( size, size ); 152 saveTemplate->setFixedSize( size, size );
151 153
152 priorityLayout2->addWidget(loadTemplate); 154 priorityLayout2->addWidget(loadTemplate);
153 priorityLayout2->addWidget(saveTemplate); 155 priorityLayout2->addWidget(saveTemplate);
154 mGeneral->initPriority(prioWidget,priorityLayout2); 156 mGeneral->initPriority(prioWidget,priorityLayout2);
155 mGeneral->initCategories( topFrame, priorityLayout ); 157 mGeneral->initCategories( topFrame, priorityLayout );
156 topLayout->addStretch(1); 158 topLayout->addStretch(1);
157 159
158 QFrame *topFrame2 = addPage(i18n("Details")); 160 QFrame *topFrame2 = addPage(i18n("Details"));
159 161
160 QBoxLayout *topLayout2 = new QVBoxLayout(topFrame2); 162 QBoxLayout *topLayout2 = new QVBoxLayout(topFrame2);
161 topLayout2->setMargin(marginHint()); 163 topLayout2->setMargin(marginHint());
162 topLayout2->setSpacing(spacingHint()); 164 topLayout2->setSpacing(spacingHint());
163 165
164 QHBoxLayout *completionLayout = new QHBoxLayout( topLayout2 ); 166 QHBoxLayout *completionLayout = new QHBoxLayout( topLayout2 );
165 mGeneral->initCompletion(topFrame2,completionLayout); 167 mGeneral->initCompletion(topFrame2,completionLayout);
166 168
167 169
168 mGeneral->initSecrecy( topFrame2, topLayout2 ); 170 mGeneral->initSecrecy( topFrame2, topLayout2 );
169 mGeneral->initDescription(topFrame2,topLayout2); 171 mGeneral->initDescription(topFrame2,topLayout2);
170 172
171 // QHBox * hb = new QHBox ( topFrame2 ); 173 // QHBox * hb = new QHBox ( topFrame2 );
172 // topLayout2->addWidget(hb); 174 // topLayout2->addWidget(hb);
173 // hb->setSpacing( 3 ); 175 // hb->setSpacing( 3 );
174 176
175 connect( saveTemplate, SIGNAL( clicked() ), this , SLOT( slotSaveTemplate() ) ); 177 connect( saveTemplate, SIGNAL( clicked() ), this , SLOT( slotSaveTemplate() ) );
176 connect( loadTemplate, SIGNAL( clicked() ), this , SLOT( slotLoadTemplate() ) ); 178 connect( loadTemplate, SIGNAL( clicked() ), this , SLOT( slotLoadTemplate() ) );
177 179
178 } else { 180 } else {
179 QFrame *topFrame = addPage(i18n("General")); 181 QFrame *topFrame = addPage(i18n("General"));
180 182
181 QBoxLayout *topLayout = new QVBoxLayout(topFrame); 183 QBoxLayout *topLayout = new QVBoxLayout(topFrame);
182 topLayout->setSpacing(spacingHint()); 184 topLayout->setSpacing(spacingHint());
183 185
184 mGeneral->initHeader(topFrame,topLayout); 186 mGeneral->initHeader(topFrame,topLayout);
185 mGeneral->initTime(topFrame,topLayout); 187 mGeneral->initTime(topFrame,topLayout);
186 mGeneral->initStatus(topFrame,topLayout); 188 mGeneral->initStatus(topFrame,topLayout);
187 QBoxLayout *alarmLineLayout = new QHBoxLayout(topLayout); 189 QBoxLayout *alarmLineLayout = new QHBoxLayout(topLayout);
188 mGeneral->initAlarm(topFrame,alarmLineLayout); 190 mGeneral->initAlarm(topFrame,alarmLineLayout);
189 mGeneral->initDescription(topFrame,topLayout); 191 mGeneral->initDescription(topFrame,topLayout);
190 QBoxLayout *detailsLayout = new QHBoxLayout(topLayout); 192 QBoxLayout *detailsLayout = new QHBoxLayout(topLayout);
191 mGeneral->initCategories( topFrame, detailsLayout ); 193 mGeneral->initCategories( topFrame, detailsLayout );
192 mGeneral->initSecrecy( topFrame, detailsLayout ); 194 mGeneral->initSecrecy( topFrame, detailsLayout );
193 } 195 }
194 mGeneral->finishSetup(); 196 mGeneral->finishSetup();
195 197
196} 198}
197 199
198void KOTodoEditor::editTodo(Todo *todo, bool editDescription) 200void KOTodoEditor::editTodo(Todo *todo, bool editDescription)
199{ 201{
200 //init(); 202 //init();
201 203
202 mTodo = todo; 204 mTodo = todo;
203 readTodo(mTodo); 205 readTodo(mTodo);
204 if ( editDescription ) { 206 if ( editDescription ) {
205 showPage( 1 ); 207 showPage( 1 );
206 mGeneral->setFocusOn( 1 ); 208 mGeneral->setFocusOn( 1 );
207 } else { 209 } else {
208 showPage( 0 ); 210 showPage( 0 );
209 mGeneral->setFocusOn( 2 ); 211 mGeneral->setFocusOn( 2 );
210 } 212 }
211 checkRecurrence(); 213 checkRecurrence();
212} 214}
213 215
214void KOTodoEditor::newTodo(QDateTime due,Todo *relatedTodo,bool allDay) 216void KOTodoEditor::newTodo(QDateTime due,Todo *relatedTodo,bool allDay)
215{ 217{
216 //init(); 218 //init();
217 219
218 mTodo = 0; 220 mTodo = 0;
219 setDefaults(due,relatedTodo,allDay); 221 setDefaults(due,relatedTodo,allDay);
220} 222}
221 223
222void KOTodoEditor::loadDefaults() 224void KOTodoEditor::loadDefaults()
223{ 225{
224 setDefaults(QDateTime::currentDateTime().addDays(7),0,false); 226 setDefaults(QDateTime::currentDateTime().addDays(7),0,false);
225} 227}
226 228
227bool KOTodoEditor::processInput( bool emitTime ) 229bool KOTodoEditor::processInput( bool emitTime )
228{ 230{
229 if (!validateInput()) return false; 231 if (!validateInput()) return false;
230 232
231 Todo *todo = 0; 233 Todo *todo = 0;
232 234
233 if (mTodo) todo = mTodo; 235 if (mTodo) todo = mTodo;
234 else { 236 else {
235 todo = new Todo; 237 todo = new Todo;
236 todo->setOrganizer(KOPrefs::instance()->email()); 238 todo->setOrganizer(KOPrefs::instance()->email());
237 } 239 }
238 240
239 writeTodo(todo); 241 writeTodo(todo);
240 if ( emitTime ) { 242 if ( emitTime ) {
241 globalFlagBlockAgenda = 1; 243 globalFlagBlockAgenda = 1;
242 emit showAgendaView( false ); 244 emit showAgendaView( false );
243 if ( todo->hasDueDate() ) 245 if ( todo->hasDueDate() )
244 emit jumpToTime( todo->dtDue().date() ); 246 emit jumpToTime( todo->dtDue().date() );
245 globalFlagBlockAgenda = 2; 247 globalFlagBlockAgenda = 2;
246 } 248 }
247 if (mTodo) { 249 if (mTodo) {
248 todo->setRevision(todo->revision()+1); 250 todo->setRevision(todo->revision()+1);
249 emit todoChanged(todo); 251 emit todoChanged(todo);
250 } else { 252 } else {
251 mCalendar->addTodo(todo); 253 mCalendar->addTodo(todo);
252 mTodo = todo; 254 mTodo = todo;
253 emit todoAdded(todo); 255 emit todoAdded(todo);
254 } 256 }
255 257
256 return true; 258 return true;
257} 259}
258 260
259void KOTodoEditor::deleteTodo() 261void KOTodoEditor::deleteTodo()
260{ 262{
261 if (mTodo) { 263 if (mTodo) {
262 if (KOPrefs::instance()->mConfirm) { 264 if (KOPrefs::instance()->mConfirm) {
263 switch (msgItemDelete()) { 265 switch (msgItemDelete()) {
264 case KMessageBox::Continue: // OK 266 case KMessageBox::Continue: // OK
265 emit todoToBeDeleted(mTodo); 267 emit todoToBeDeleted(mTodo);
266 emit dialogClose(mTodo); 268 emit dialogClose(mTodo);
267 mCalendar->deleteTodo(mTodo); 269 mCalendar->deleteTodo(mTodo);
268 emit todoDeleted(); 270 emit todoDeleted();
269 reject(); 271 reject();
270 break; 272 break;
271 } 273 }
272 } 274 }
273 else { 275 else {
274 emit todoToBeDeleted(mTodo); 276 emit todoToBeDeleted(mTodo);
275 emit dialogClose(mTodo); 277 emit dialogClose(mTodo);
276 mCalendar->deleteTodo(mTodo); 278 mCalendar->deleteTodo(mTodo);
277 emit todoDeleted(); 279 emit todoDeleted();
278 reject(); 280 reject();
279 } 281 }
280 } else { 282 } else {
281 reject(); 283 reject();
282 } 284 }
283} 285}
284 286
285void KOTodoEditor::setDefaults(QDateTime due,Todo *relatedEvent,bool allDay) 287void KOTodoEditor::setDefaults(QDateTime due,Todo *relatedEvent,bool allDay)
286{ 288{
287 mRelatedTodo = relatedEvent; 289 mRelatedTodo = relatedEvent;
288 290
289 mGeneral->setDefaults(due,allDay); 291 mGeneral->setDefaults(due,allDay);
290 mDetails->setDefaults(); 292 mDetails->setDefaults();
291 showPage( 0 ); 293 showPage( 0 );
292 if ( mRelatedTodo ) { 294 if ( mRelatedTodo ) {
293 mGeneral->setCategories (mRelatedTodo->categoriesStr ()); 295 mGeneral->setCategories (mRelatedTodo->categoriesStr ());
294 mGeneral->setSecrecy (mRelatedTodo->secrecy ()); 296 mGeneral->setSecrecy (mRelatedTodo->secrecy ());
295 if ( mRelatedTodo->priority() < 3 ) 297 if ( mRelatedTodo->priority() < 3 )
296 mGeneral->mPriorityCombo->setCurrentItem(mRelatedTodo->priority()-1); 298 mGeneral->mPriorityCombo->setCurrentItem(mRelatedTodo->priority()-1);
297 mGeneral->mSummaryEdit->lineEdit()->setText(mRelatedTodo->summary()+": "); 299 mGeneral->mSummaryEdit->lineEdit()->setText(mRelatedTodo->summary()+": ");
298 int len = mRelatedTodo->summary().length(); 300 int len = mRelatedTodo->summary().length();
299 mGeneral->mSummaryEdit->lineEdit()->setFocus(); 301 mGeneral->mSummaryEdit->lineEdit()->setFocus();
300 mGeneral->mSummaryEdit->lineEdit()->setCursorPosition ( len+2 ); 302 mGeneral->mSummaryEdit->lineEdit()->setCursorPosition ( len+2 );
301 mGeneral->mSummaryEdit->lineEdit()->setSelection ( 0, len+2 ); 303 mGeneral->mSummaryEdit->lineEdit()->setSelection ( 0, len+2 );
302 304
303 } else 305 } else
304 mGeneral->setFocusOn( 2 ); 306 mGeneral->setFocusOn( 2 );
305 tabWidget()->setTabEnabled ( mRecurrence->parentWidget(), false ); 307 tabWidget()->setTabEnabled ( mRecurrence->parentWidget(), false );
306 mRecurrence->setDefaults(QDateTime::currentDateTime(),QDateTime::currentDateTime().addSecs( 3600 ),true); 308 mRecurrence->setDefaults(QDateTime::currentDateTime(),QDateTime::currentDateTime().addSecs( 3600 ),true);
307} 309}
308void KOTodoEditor::checkRecurrence() 310void KOTodoEditor::checkRecurrence()
309{ 311{
310 if ( mGeneral->mDueCheck->isChecked() && mGeneral->mStartCheck->isChecked()) { 312 if ( mGeneral->mDueCheck->isChecked() && mGeneral->mStartCheck->isChecked()) {
311 tabWidget()->setTabEnabled ( mRecurrence->parentWidget(), true ); 313 tabWidget()->setTabEnabled ( mRecurrence->parentWidget(), true );
312 314
313 if ( mTodo ) 315 if ( mTodo )
314 mRecurrence->readEvent( mTodo ); 316 mRecurrence->readEvent( mTodo );
315 else { 317 else {
316 bool time = mGeneral->mTimeButton->isChecked(); 318 bool time = mGeneral->mTimeButton->isChecked();
317 QDateTime from,to; 319 QDateTime from,to;
diff --git a/korganizer/searchdialog.cpp b/korganizer/searchdialog.cpp
index 007d1f3..59bf1a2 100644
--- a/korganizer/searchdialog.cpp
+++ b/korganizer/searchdialog.cpp
@@ -1,373 +1,375 @@
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 33
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
47SearchDialog::SearchDialog(Calendar *calendar,CalendarView *parent) 47SearchDialog::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 searchLabel = new QLabel(topFrame); 58 searchLabel = new QLabel(topFrame);
59 searchLabel->setText(i18n("Search for:")); 59 searchLabel->setText(i18n("Search for:"));
60 subLayout->addWidget(searchLabel); 60 subLayout->addWidget(searchLabel);
61 61
62 searchEdit = new KLineEdit(topFrame); 62 searchEdit = new KLineEdit(topFrame);
63 subLayout->addWidget(searchEdit); 63 subLayout->addWidget(searchEdit);
64 QPushButton *OkButton = new QPushButton( i18n("&Find"), topFrame ); 64 QPushButton *OkButton = new QPushButton( i18n("&Find"), topFrame );
65 //OkButton->setDefault( true ); 65 //OkButton->setDefault( true );
66 connect(OkButton,SIGNAL(clicked()),SLOT(doSearch())); 66 connect(OkButton,SIGNAL(clicked()),SLOT(doSearch()));
67 subLayout->addWidget(OkButton); 67 subLayout->addWidget(OkButton);
68 searchEdit->setText("*"); // Find all events by default 68 searchEdit->setText("*"); // Find all events by default
69 searchEdit->setFocus(); 69 searchEdit->setFocus();
70 connect(searchEdit, SIGNAL(textChanged ( const QString & )),this,SLOT(searchTextChanged( const QString & ))); 70 connect(searchEdit, SIGNAL(textChanged ( const QString & )),this,SLOT(searchTextChanged( const QString & )));
71 connect(searchEdit, SIGNAL( returnPressed () ),this,SLOT(doSearch())); 71 connect(searchEdit, SIGNAL( returnPressed () ),this,SLOT(doSearch()));
72 // Subjects to search 72 // Subjects to search
73 // QGroupBox *subjectGroup = new QGroupBox(1,Vertical,i18n("Search In"), 73 // QGroupBox *subjectGroup = new QGroupBox(1,Vertical,i18n("Search In"),
74 // topFrame); 74 // topFrame);
75 75
76 QHBox *incidenceGroup = new QHBox( topFrame ); 76 QHBox *incidenceGroup = new QHBox( topFrame );
77 layout->addWidget(incidenceGroup); 77 layout->addWidget(incidenceGroup);
78 78
79 mSearchEvent = new QCheckBox(i18n("Events"),incidenceGroup); 79 mSearchEvent = new QCheckBox(i18n("Events"),incidenceGroup);
80 //mSearchEvent->setChecked(true); 80 //mSearchEvent->setChecked(true);
81 mSearchTodo = new QCheckBox(i18n("Todos"),incidenceGroup); 81 mSearchTodo = new QCheckBox(i18n("Todos"),incidenceGroup);
82 mSearchJournal = new QCheckBox(i18n("Journals"),incidenceGroup); 82 mSearchJournal = new QCheckBox(i18n("Journals"),incidenceGroup);
83 83
84 QHBox *subjectGroup = new QHBox( topFrame ); 84 QHBox *subjectGroup = new QHBox( topFrame );
85 layout->addWidget(subjectGroup); 85 layout->addWidget(subjectGroup);
86 86
87 mSummaryCheck = new QCheckBox(i18n("Summary/Loc."),subjectGroup); 87 mSummaryCheck = new QCheckBox(i18n("Summary/Loc."),subjectGroup);
88 mSummaryCheck->setChecked(true); 88 mSummaryCheck->setChecked(true);
89 mDescriptionCheck = new QCheckBox(i18n("Details"),subjectGroup); 89 mDescriptionCheck = new QCheckBox(i18n("Details"),subjectGroup);
90 mCategoryCheck = new QCheckBox(i18n("Categories"),subjectGroup); 90 mCategoryCheck = new QCheckBox(i18n("Categories"),subjectGroup);
91 91
92 QHBox *attendeeGroup = new QHBox( topFrame ); 92 QHBox *attendeeGroup = new QHBox( topFrame );
93 layout->addWidget(attendeeGroup ); 93 layout->addWidget(attendeeGroup );
94 new QLabel( i18n("Attendee:"),attendeeGroup ); 94 new QLabel( i18n("Attendee:"),attendeeGroup );
95 mSearchAName = new QCheckBox(i18n("Name"),attendeeGroup ); 95 mSearchAName = new QCheckBox(i18n("Name"),attendeeGroup );
96 mSearchAEmail = new QCheckBox(i18n("Email"), attendeeGroup ); 96 mSearchAEmail = new QCheckBox(i18n("Email"), attendeeGroup );
97 // Date range 97 // Date range
98 // QGroupBox *rangeGroup = new QGroupBox(1,Horizontal,i18n("Date Range"), 98 // QGroupBox *rangeGroup = new QGroupBox(1,Horizontal,i18n("Date Range"),
99 // topFrame); 99 // topFrame);
100 // layout->addWidget(rangeGroup); 100 // layout->addWidget(rangeGroup);
101 101
102 QWidget *rangeWidget = new QWidget(topFrame); 102 QWidget *rangeWidget = new QWidget(topFrame);
103 QHBoxLayout *rangeLayout = new QHBoxLayout(rangeWidget,0,KDialog::spacingHint()); 103 QHBoxLayout *rangeLayout = new QHBoxLayout(rangeWidget,0,KDialog::spacingHint());
104 rangeLayout->addWidget(new QLabel(i18n("From:"),rangeWidget)); 104 rangeLayout->addWidget(new QLabel(i18n("From:"),rangeWidget));
105 mStartDate = new KDateEdit(rangeWidget); 105 mStartDate = new KDateEdit(rangeWidget);
106 rangeLayout->addWidget(mStartDate); 106 rangeLayout->addWidget(mStartDate);
107 rangeLayout->addWidget(new QLabel(i18n("To:"),rangeWidget)); 107 rangeLayout->addWidget(new QLabel(i18n("To:"),rangeWidget));
108 mEndDate = new KDateEdit(rangeWidget); 108 mEndDate = new KDateEdit(rangeWidget);
109 mEndDate->setDate(QDate::currentDate().addDays(365)); 109 mEndDate->setDate(QDate::currentDate().addDays(365));
110 rangeLayout->addWidget(mEndDate); 110 rangeLayout->addWidget(mEndDate);
111 QToolButton *wt = QWhatsThis::whatsThisButton ( rangeWidget ); 111 QToolButton *wt = QWhatsThis::whatsThisButton ( rangeWidget );
112 rangeLayout->addWidget( (QWidget*)wt ); 112 rangeLayout->addWidget( (QWidget*)wt );
113 layout->addWidget(rangeWidget); 113 layout->addWidget(rangeWidget);
114 // Results list view 114 // Results list view
115 listView = new KOListView(mCalendar,topFrame); 115 listView = new KOListView(mCalendar,topFrame);
116 layout->addWidget(listView); 116 layout->addWidget(listView);
117 117 //layout->setStretchFactor( listView, 333 );
118 //listView->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::Expanding) );
119 //listView->setMaximumHeight( 50 );
118 listView->readSettings(KOGlobals::config(),"SearchListView Layout"); 120 listView->readSettings(KOGlobals::config(),"SearchListView Layout");
119 connect(searchEdit,SIGNAL(scrollDOWN()),SLOT(setFocusToList())); 121 connect(searchEdit,SIGNAL(scrollDOWN()),SLOT(setFocusToList()));
120 122
121 setCaption( i18n("KO/Pi Find: ")); 123 setCaption( i18n("KO/Pi Find: "));
122#ifdef DESKTOP_VERSION 124#ifdef DESKTOP_VERSION
123 OkButton = new QPushButton( i18n("Close"), this ); 125 OkButton = new QPushButton( i18n("Close"), this );
124 connect(OkButton,SIGNAL(clicked()),SLOT(hide())); 126 connect(OkButton,SIGNAL(clicked()),SLOT(hide()));
125#endif 127#endif
126} 128}
127 129
128SearchDialog::~SearchDialog() 130SearchDialog::~SearchDialog()
129{ 131{
130 132
131} 133}
132void SearchDialog::raiseAndSelect() 134void SearchDialog::raiseAndSelect()
133{ 135{
134 136
135 static int currentState = 0; 137 static int currentState = 0;
136 138
137 if ( !mSearchJournal->isChecked() && !mSearchTodo->isChecked() && !mSearchEvent->isChecked() ) 139 if ( !mSearchJournal->isChecked() && !mSearchTodo->isChecked() && !mSearchEvent->isChecked() )
138 currentState = 0; 140 currentState = 0;
139 int newState = 0; 141 int newState = 0;
140 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) { 142 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) {
141 newState = VIEW_J_VIEW; 143 newState = VIEW_J_VIEW;
142 } 144 }
143 else if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) { 145 else if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) {
144 newState = VIEW_T_VIEW; 146 newState = VIEW_T_VIEW;
145 } 147 }
146 else { 148 else {
147 newState = VIEW_A_VIEW; 149 newState = VIEW_A_VIEW;
148 } 150 }
149 if ( newState != currentState ) { 151 if ( newState != currentState ) {
150 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) { 152 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) {
151 if ( ! mSearchJournal->isChecked() ) { 153 if ( ! mSearchJournal->isChecked() ) {
152 mSearchJournal->setChecked( true ); 154 mSearchJournal->setChecked( true );
153 mSearchTodo->setChecked( false ); 155 mSearchTodo->setChecked( false );
154 mSearchEvent->setChecked( false ); 156 mSearchEvent->setChecked( false );
155 } 157 }
156 } 158 }
157 else if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) { 159 else if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) {
158 if ( ! mSearchTodo->isChecked() ) { 160 if ( ! mSearchTodo->isChecked() ) {
159 mSearchTodo->setChecked( true ); 161 mSearchTodo->setChecked( true );
160 mSearchJournal->setChecked( false ); 162 mSearchJournal->setChecked( false );
161 mSearchEvent->setChecked( false ); 163 mSearchEvent->setChecked( false );
162 } 164 }
163 } 165 }
164 else { 166 else {
165 if ( ! mSearchEvent->isChecked() ) { 167 if ( ! mSearchEvent->isChecked() ) {
166 mSearchEvent->setChecked( true ); 168 mSearchEvent->setChecked( true );
167 mSearchJournal->setChecked( false ); 169 mSearchJournal->setChecked( false );
168 mSearchTodo->setChecked( false ); 170 mSearchTodo->setChecked( false );
169 } 171 }
170 } 172 }
171 } 173 }
172 currentState = newState; 174 currentState = newState;
173 raise(); 175 raise();
174} 176}
175void SearchDialog::setFocusToList() 177void SearchDialog::setFocusToList()
176{ 178{
177 listView->resetFocus(); 179 listView->resetFocus();
178} 180}
179void SearchDialog::accept() 181void SearchDialog::accept()
180{ 182{
181 doSearch(); 183 doSearch();
182} 184}
183void SearchDialog::updateList() 185void SearchDialog::updateList()
184{ 186{
185 //listView->updateList(); 187 //listView->updateList();
186 if ( isVisible() ) { 188 if ( isVisible() ) {
187 updateView(); 189 updateView();
188 //qDebug("SearchDialog::updated "); 190 //qDebug("SearchDialog::updated ");
189 } 191 }
190 else { 192 else {
191 listView->clear(); 193 listView->clear();
192 //qDebug("SearchDialog::cleared "); 194 //qDebug("SearchDialog::cleared ");
193 195
194 } 196 }
195} 197}
196void SearchDialog::searchTextChanged( const QString &_text ) 198void SearchDialog::searchTextChanged( const QString &_text )
197{ 199{
198#if 0 200#if 0
199 enableButton( KDialogBase::User1, !_text.isEmpty() ); 201 enableButton( KDialogBase::User1, !_text.isEmpty() );
200#endif 202#endif
201} 203}
202 204
203void SearchDialog::doSearch() 205void SearchDialog::doSearch()
204{ 206{
205 QRegExp re; 207 QRegExp re;
206 208
207 re.setWildcard(true); // most people understand these better. 209 re.setWildcard(true); // most people understand these better.
208 re.setCaseSensitive(false); 210 re.setCaseSensitive(false);
209 QString st = searchEdit->text(); 211 QString st = searchEdit->text();
210 if ( st.right(1) != "*") 212 if ( st.right(1) != "*")
211 st += "*"; 213 st += "*";
212 re.setPattern(st); 214 re.setPattern(st);
213 if (!mSearchEvent->isChecked() && !mSearchTodo->isChecked() && !mSearchJournal->isChecked() ) { 215 if (!mSearchEvent->isChecked() && !mSearchTodo->isChecked() && !mSearchJournal->isChecked() ) {
214 KMessageBox::sorry(this, 216 KMessageBox::sorry(this,
215 i18n("Please select at least one\nof the types to search for:\n\nEvents\nTodos\nJournals")); 217 i18n("Please select at least one\nof the types to search for:\n\nEvents\nTodos\nJournals"));
216 return; 218 return;
217 } 219 }
218 if (!re.isValid() ) { 220 if (!re.isValid() ) {
219 KMessageBox::sorry(this, 221 KMessageBox::sorry(this,
220 i18n("Invalid search expression,\ncannot perform " 222 i18n("Invalid search expression,\ncannot perform "
221 "the search.\nPlease enter a search expression\n" 223 "the search.\nPlease enter a search expression\n"
222 "using the wildcard characters\n '*' and '?'" 224 "using the wildcard characters\n '*' and '?'"
223 "where needed.")); 225 "where needed."));
224 return; 226 return;
225 } 227 }
226 search(re); 228 search(re);
227 listView->setStartDate( mStartDate->date() ); 229 listView->setStartDate( mStartDate->date() );
228 listView->showEvents(mMatchedEvents); 230 listView->showEvents(mMatchedEvents);
229 listView->addTodos(mMatchedTodos); 231 listView->addTodos(mMatchedTodos);
230 listView->addJournals(mMatchedJournals); 232 listView->addJournals(mMatchedJournals);
231 if (mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() == 0) { 233 if (mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() == 0) {
232 setCaption(i18n("No items found. Use '*' and '?' where needed.")); 234 setCaption(i18n("No items found. Use '*' and '?' where needed."));
233 } else { 235 } else {
234 QString mess; 236 QString mess;
235 mess = mess.sprintf( i18n("%d item(s) found."), mMatchedEvents.count()+ mMatchedJournals.count() + mMatchedTodos.count() ); 237 mess = mess.sprintf( i18n("%d item(s) found."), mMatchedEvents.count()+ mMatchedJournals.count() + mMatchedTodos.count() );
236 setCaption( i18n("KO/Pi Find: ") + mess); 238 setCaption( i18n("KO/Pi Find: ") + mess);
237 239
238 } 240 }
239 searchEdit->setFocus(); 241 searchEdit->setFocus();
240} 242}
241void SearchDialog::updateConfig() 243void SearchDialog::updateConfig()
242{ 244{
243 listView->updateConfig(); 245 listView->updateConfig();
244} 246}
245void SearchDialog::updateView() 247void SearchDialog::updateView()
246{ 248{
247 //qDebug("SearchDialog::updateView() %d ", isVisible()); 249 //qDebug("SearchDialog::updateView() %d ", isVisible());
248 QRegExp re; 250 QRegExp re;
249 re.setWildcard(true); // most people understand these better. 251 re.setWildcard(true); // most people understand these better.
250 re.setCaseSensitive(false); 252 re.setCaseSensitive(false);
251 QString st = searchEdit->text(); 253 QString st = searchEdit->text();
252 if ( st.right(1) != "*") 254 if ( st.right(1) != "*")
253 st += "*"; 255 st += "*";
254 re.setPattern(st); 256 re.setPattern(st);
255 if (re.isValid()) { 257 if (re.isValid()) {
256 search(re); 258 search(re);
257 } else { 259 } else {
258 mMatchedEvents.clear(); 260 mMatchedEvents.clear();
259 mMatchedTodos.clear(); 261 mMatchedTodos.clear();
260 mMatchedJournals.clear(); 262 mMatchedJournals.clear();
261 } 263 }
262 listView->setStartDate( mStartDate->date() ); 264 listView->setStartDate( mStartDate->date() );
263 listView->showEvents(mMatchedEvents); 265 listView->showEvents(mMatchedEvents);
264 listView->addTodos(mMatchedTodos); 266 listView->addTodos(mMatchedTodos);
265 listView->addJournals(mMatchedJournals); 267 listView->addJournals(mMatchedJournals);
266} 268}
267 269
268void SearchDialog::search(const QRegExp &re) 270void SearchDialog::search(const QRegExp &re)
269{ 271{
270 QPtrList<Event> events = mCalendar->events( mStartDate->date(), 272 QPtrList<Event> events = mCalendar->events( mStartDate->date(),
271 mEndDate->date(), 273 mEndDate->date(),
272 false /*mInclusiveCheck->isChecked()*/ ); 274 false /*mInclusiveCheck->isChecked()*/ );
273 275
274 mMatchedEvents.clear(); 276 mMatchedEvents.clear();
275 if ( mSearchEvent->isChecked() ) { 277 if ( mSearchEvent->isChecked() ) {
276 Event *ev; 278 Event *ev;
277 for(ev=events.first();ev;ev=events.next()) { 279 for(ev=events.first();ev;ev=events.next()) {
278 if (mSummaryCheck->isChecked()) { 280 if (mSummaryCheck->isChecked()) {
279#if QT_VERSION >= 0x030000 281#if QT_VERSION >= 0x030000
280 if (re.search(ev->summary()) != -1) 282 if (re.search(ev->summary()) != -1)
281#else 283#else
282 if (re.match(ev->summary()) != -1) 284 if (re.match(ev->summary()) != -1)
283#endif 285#endif
284 { 286 {
285 mMatchedEvents.append(ev); 287 mMatchedEvents.append(ev);
286 continue; 288 continue;
287 } 289 }
288#if QT_VERSION >= 0x030000 290#if QT_VERSION >= 0x030000
289 if (re.search(ev->location()) != -1) 291 if (re.search(ev->location()) != -1)
290#else 292#else
291 if (re.match(ev->location()) != -1) 293 if (re.match(ev->location()) != -1)
292#endif 294#endif
293 { 295 {
294 mMatchedEvents.append(ev); 296 mMatchedEvents.append(ev);
295 continue; 297 continue;
296 } 298 }
297 } 299 }
298 if (mDescriptionCheck->isChecked()) { 300 if (mDescriptionCheck->isChecked()) {
299#if QT_VERSION >= 0x030000 301#if QT_VERSION >= 0x030000
300 if (re.search(ev->description()) != -1) 302 if (re.search(ev->description()) != -1)
301#else 303#else
302 if (re.match(ev->description()) != -1) 304 if (re.match(ev->description()) != -1)
303#endif 305#endif
304 { 306 {
305 mMatchedEvents.append(ev); 307 mMatchedEvents.append(ev);
306 continue; 308 continue;
307 } 309 }
308 } 310 }
309 if (mCategoryCheck->isChecked()) { 311 if (mCategoryCheck->isChecked()) {
310#if QT_VERSION >= 0x030000 312#if QT_VERSION >= 0x030000
311 if (re.search(ev->categoriesStr()) != -1) 313 if (re.search(ev->categoriesStr()) != -1)
312#else 314#else
313 if (re.match(ev->categoriesStr()) != -1) 315 if (re.match(ev->categoriesStr()) != -1)
314#endif 316#endif
315 { 317 {
316 mMatchedEvents.append(ev); 318 mMatchedEvents.append(ev);
317 continue; 319 continue;
318 } 320 }
319 } 321 }
320 if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) { 322 if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) {
321 QPtrList<Attendee> tmpAList = ev->attendees(); 323 QPtrList<Attendee> tmpAList = ev->attendees();
322 Attendee *a; 324 Attendee *a;
323 for (a = tmpAList.first(); a; a = tmpAList.next()) { 325 for (a = tmpAList.first(); a; a = tmpAList.next()) {
324 if (mSearchAName->isChecked()) { 326 if (mSearchAName->isChecked()) {
325#if QT_VERSION >= 0x030000 327#if QT_VERSION >= 0x030000
326 if (re.search(a->name()) != -1) 328 if (re.search(a->name()) != -1)
327#else 329#else
328 if (re.match(a->name()) != -1) 330 if (re.match(a->name()) != -1)
329#endif 331#endif
330 { 332 {
331 mMatchedEvents.append(ev); 333 mMatchedEvents.append(ev);
332 break; 334 break;
333 } 335 }
334 } 336 }
335 if (mSearchAEmail->isChecked()) { 337 if (mSearchAEmail->isChecked()) {
336#if QT_VERSION >= 0x030000 338#if QT_VERSION >= 0x030000
337 if (re.search(a->email()) != -1) 339 if (re.search(a->email()) != -1)
338#else 340#else
339 if (re.match(a->email()) != -1) 341 if (re.match(a->email()) != -1)
340#endif 342#endif
341 { 343 {
342 mMatchedEvents.append(ev); 344 mMatchedEvents.append(ev);
343 break; 345 break;
344 } 346 }
345 } 347 }
346 } 348 }
347 } 349 }
348 } 350 }
349 } 351 }
350 QPtrList<Todo> todos = mCalendar->todos( ); 352 QPtrList<Todo> todos = mCalendar->todos( );
351 mMatchedTodos.clear(); 353 mMatchedTodos.clear();
352 if ( mSearchTodo->isChecked() ) { 354 if ( mSearchTodo->isChecked() ) {
353 Todo *tod; 355 Todo *tod;
354 for(tod=todos.first();tod;tod=todos.next()) { 356 for(tod=todos.first();tod;tod=todos.next()) {
355 if (mSummaryCheck->isChecked()) { 357 if (mSummaryCheck->isChecked()) {
356#if QT_VERSION >= 0x030000 358#if QT_VERSION >= 0x030000
357 if (re.search(tod->summary()) != -1) 359 if (re.search(tod->summary()) != -1)
358#else 360#else
359 if (re.match(tod->summary()) != -1) 361 if (re.match(tod->summary()) != -1)
360#endif 362#endif
361 { 363 {
362 mMatchedTodos.append(tod); 364 mMatchedTodos.append(tod);
363 continue; 365 continue;
364 } 366 }
365 } 367 }
366 if (mDescriptionCheck->isChecked()) { 368 if (mDescriptionCheck->isChecked()) {
367#if QT_VERSION >= 0x030000 369#if QT_VERSION >= 0x030000
368 if (re.search(tod->description()) != -1) 370 if (re.search(tod->description()) != -1)
369#else 371#else
370 if (re.match(tod->description()) != -1) 372 if (re.match(tod->description()) != -1)
371#endif 373#endif
372 { 374 {
373 mMatchedTodos.append(tod); 375 mMatchedTodos.append(tod);