summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-04-30 07:32:03 (UTC)
committer zautrix <zautrix>2005-04-30 07:32:03 (UTC)
commit7c31102a00920834ab8e3778f0f459b96b2fb309 (patch) (unidiff)
tree9f238caaaab4ba150e4f14708d85162af0ea5092
parentbdaded2da25b0ccef80d6e638fa12f92a4f8744d (diff)
downloadkdepimpi-7c31102a00920834ab8e3778f0f459b96b2fb309.zip
kdepimpi-7c31102a00920834ab8e3778f0f459b96b2fb309.tar.gz
kdepimpi-7c31102a00920834ab8e3778f0f459b96b2fb309.tar.bz2
fixes
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt6
-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
-rw-r--r--libkcal/todo.cpp6
-rw-r--r--microkde/kdatetbl.cpp17
8 files changed, 104 insertions, 53 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 41b2a81..e3c4e0a 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,73 +1,79 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 2.1.4 ************
4
5Fixed two more bugs in the KA/Pi CSV import dialog:
6Made it possible to read multi-line fields and import it to the "Note" field.
7Fixed a problem in mapping custom fields, whatever a custem field is...
8
3********** VERSION 2.1.3 ************ 9********** VERSION 2.1.3 ************
4 10
5Changed the menu structure of the alarm applet: 11Changed the menu structure of the alarm applet:
6Moved "Simulate" to " Play Beeps" submenu and re-added "Todo List". 12Moved "Simulate" to " Play Beeps" submenu and re-added "Todo List".
7 13
8Fixed several problems in the KA/Pi CSV import dialog: 14Fixed several problems in the KA/Pi CSV import dialog:
9Added "Category", made codec configureable and made it possible to map many fields to the "Note" field. 15Added "Category", made codec configureable and made it possible to map many fields to the "Note" field.
10 16
11 17
12********** VERSION 2.1.2 ************ 18********** VERSION 2.1.2 ************
13 19
14Fixed a problem closing the alarm dialog on Zaurus with "OK" button. 20Fixed a problem closing the alarm dialog on Zaurus with "OK" button.
15 21
16Fixed a problem when importing data from Outlook with mutiple categories set. 22Fixed a problem when importing data from Outlook with mutiple categories set.
17 23
18Changed display of days in datenavigator: 24Changed display of days in datenavigator:
19Birthdays are now blue, not dark green. 25Birthdays are now blue, not dark green.
20When todo view is shown, no birtdays are shown and days with due todos are shown blue. 26When todo view is shown, no birtdays are shown and days with due todos are shown blue.
21When journal view is shown, only holidays are shown and days with journals are blue. 27When journal view is shown, only holidays are shown and days with journals are blue.
22 28
23Added Backup options to global config: 29Added Backup options to global config:
24You can create now x-daily backups for KO/Pi, KA/Pi (for file resources only, file resource is the standard type) and PwM/Pi ( all files you will open ). 30You can create now x-daily backups for KO/Pi, KA/Pi (for file resources only, file resource is the standard type) and PwM/Pi ( all files you will open ).
25It is recommended to use another HDD/Memory card for the backup directory. If (very useful on the Zaurus) the specified backup directory does not exist you are asked if you want to try again to create a backup. That makes it possible to insert your memory card in the Zaurus and then trying again. 31It is recommended to use another HDD/Memory card for the backup directory. If (very useful on the Zaurus) the specified backup directory does not exist you are asked if you want to try again to create a backup. That makes it possible to insert your memory card in the Zaurus and then trying again.
26The backup is created when the application wants to save for the first time on a backup-day. You can specify the amount of backups and the day interval of backups. 32The backup is created when the application wants to save for the first time on a backup-day. You can specify the amount of backups and the day interval of backups.
27 33
28********** VERSION 2.1.1 ************ 34********** VERSION 2.1.1 ************
29 35
30Stable release 2.1.1! 36Stable release 2.1.1!
31 37
32KO/Pi: 38KO/Pi:
33Fixed one problem in the layout of the edit dialogs on the Zaurus with 640x480 display. 39Fixed one problem in the layout of the edit dialogs on the Zaurus with 640x480 display.
34 40
35********** VERSION 2.1.0 ************ 41********** VERSION 2.1.0 ************
36 42
37Stable release 2.1.0! 43Stable release 2.1.0!
38 44
39Summary of changes/fixes compared to version 2.0.6: 45Summary of changes/fixes compared to version 2.0.6:
40 46
41Many bugs of version 2.0.6 fixed. 47Many bugs of version 2.0.6 fixed.
42Most of them were small bugs, but some of them were important. 48Most of them were small bugs, but some of them were important.
43It is recommended to use version 2.1.0 and not version 2.0.6. 49It is recommended to use version 2.1.0 and not version 2.0.6.
44 50
45Important changes: 51Important changes:
46 52
47Added recurring todos to KO/Pi. 53Added recurring todos to KO/Pi.
48 54
49Added global application font settings (for all KDE-Pim/Pi apps) to the general settings. 55Added global application font settings (for all KDE-Pim/Pi apps) to the general settings.
50 56
51Made Passwordmanager PwM/Pi more userfriendly: Rearranged some toolbar icons, optimized setting of focus, fixed layout problems and more. 57Made Passwordmanager PwM/Pi more userfriendly: Rearranged some toolbar icons, optimized setting of focus, fixed layout problems and more.
52 58
53Datenavigator can now display many months. Very useful on the desktop. 59Datenavigator can now display many months. Very useful on the desktop.
54 60
55KO/Pi alarm applet changed: Made buttons in alarm dialog much bigger and other usebility enhancements. 61KO/Pi alarm applet changed: Made buttons in alarm dialog much bigger and other usebility enhancements.
56 62
57Made alarm sound working on Linux desktop. 63Made alarm sound working on Linux desktop.
58 64
59Made KO/Pi and KA/Pi running from a memory stick. Please read storage HowTo for details. 65Made KO/Pi and KA/Pi running from a memory stick. Please read storage HowTo for details.
60 66
61Added timetracking feature in KO/Pi todo view. Please read timetraker HowTo for details. 67Added timetracking feature in KO/Pi todo view. Please read timetraker HowTo for details.
62 68
63Many other usebility enhancements. 69Many other usebility enhancements.
64Special thanks to Ben for his suggestions! 70Special thanks to Ben for his suggestions!
65 71
66You can find the complete changelog 72You can find the complete changelog
67from version 1.7.7 to 2.1.0 73from version 1.7.7 to 2.1.0
68in the source package or on 74in the source package or on
69 75
70http://www.pi-sync.net/html/changelog.html 76http://www.pi-sync.net/html/changelog.html
71 77
72 78
73 79
diff --git a/korganizer/koeditordetails.cpp b/korganizer/koeditordetails.cpp
index 802261c..bdfc637 100644
--- a/korganizer/koeditordetails.cpp
+++ b/korganizer/koeditordetails.cpp
@@ -1,381 +1,401 @@
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()
diff --git a/korganizer/koeditorgeneral.cpp b/korganizer/koeditorgeneral.cpp
index 0045b7f..bfe0aec 100644
--- a/korganizer/koeditorgeneral.cpp
+++ b/korganizer/koeditorgeneral.cpp
@@ -1,298 +1,308 @@
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 ) {
diff --git a/korganizer/koeventeditor.cpp b/korganizer/koeventeditor.cpp
index e23e680..02d4a78 100644
--- a/korganizer/koeventeditor.cpp
+++ b/korganizer/koeventeditor.cpp
@@ -1,308 +1,310 @@
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);
diff --git a/korganizer/kotodoeditor.cpp b/korganizer/kotodoeditor.cpp
index 5513e8b..9073bca 100644
--- a/korganizer/kotodoeditor.cpp
+++ b/korganizer/kotodoeditor.cpp
@@ -1,253 +1,255 @@
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);
diff --git a/korganizer/searchdialog.cpp b/korganizer/searchdialog.cpp
index 007d1f3..59bf1a2 100644
--- a/korganizer/searchdialog.cpp
+++ b/korganizer/searchdialog.cpp
@@ -1,309 +1,311 @@
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()) {
diff --git a/libkcal/todo.cpp b/libkcal/todo.cpp
index f7e38a7..d7431c7 100644
--- a/libkcal/todo.cpp
+++ b/libkcal/todo.cpp
@@ -1,307 +1,311 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library 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 GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21#include <kglobal.h> 21#include <kglobal.h>
22#include <kglobalsettings.h> 22#include <kglobalsettings.h>
23#include <klocale.h> 23#include <klocale.h>
24#include <kdebug.h> 24#include <kdebug.h>
25#include <qregexp.h> 25#include <qregexp.h>
26#include <qfileinfo.h> 26#include <qfileinfo.h>
27 27
28#include "calendarlocal.h" 28#include "calendarlocal.h"
29#include "icalformat.h" 29#include "icalformat.h"
30#include "todo.h" 30#include "todo.h"
31 31
32using namespace KCal; 32using namespace KCal;
33 33
34Todo::Todo(): QObject(), Incidence() 34Todo::Todo(): QObject(), Incidence()
35{ 35{
36// mStatus = TENTATIVE; 36// mStatus = TENTATIVE;
37 37
38 mHasDueDate = false; 38 mHasDueDate = false;
39 setHasStartDate( false ); 39 setHasStartDate( false );
40 mCompleted = getEvenTime(QDateTime::currentDateTime()); 40 mCompleted = getEvenTime(QDateTime::currentDateTime());
41 mHasCompletedDate = false; 41 mHasCompletedDate = false;
42 mPercentComplete = 0; 42 mPercentComplete = 0;
43 mRunning = false; 43 mRunning = false;
44 mRunSaveTimer = 0; 44 mRunSaveTimer = 0;
45} 45}
46 46
47Todo::Todo(const Todo &t) : QObject(),Incidence(t) 47Todo::Todo(const Todo &t) : QObject(),Incidence(t)
48{ 48{
49 mDtDue = t.mDtDue; 49 mDtDue = t.mDtDue;
50 mHasDueDate = t.mHasDueDate; 50 mHasDueDate = t.mHasDueDate;
51 mCompleted = t.mCompleted; 51 mCompleted = t.mCompleted;
52 mHasCompletedDate = t.mHasCompletedDate; 52 mHasCompletedDate = t.mHasCompletedDate;
53 mPercentComplete = t.mPercentComplete; 53 mPercentComplete = t.mPercentComplete;
54 mRunning = false; 54 mRunning = false;
55 mRunSaveTimer = 0; 55 mRunSaveTimer = 0;
56} 56}
57 57
58Todo::~Todo() 58Todo::~Todo()
59{ 59{
60 setRunning( false ); 60 setRunning( false );
61 //qDebug("Todo::~Todo() "); 61 //qDebug("Todo::~Todo() ");
62} 62}
63 63
64void Todo::setRunningFalse( QString s ) 64void Todo::setRunningFalse( QString s )
65{ 65{
66 if ( ! mRunning ) 66 if ( ! mRunning )
67 return; 67 return;
68 mRunning = false; 68 mRunning = false;
69 mRunSaveTimer->stop(); 69 mRunSaveTimer->stop();
70 saveRunningInfoToFile( s ); 70 saveRunningInfoToFile( s );
71} 71}
72void Todo::setRunning( bool run ) 72void Todo::setRunning( bool run )
73{ 73{
74 if ( run == mRunning ) 74 if ( run == mRunning )
75 return; 75 return;
76 //qDebug("Todo::setRunning %d ", run); 76 //qDebug("Todo::setRunning %d ", run);
77 if ( !mRunSaveTimer ) { 77 if ( !mRunSaveTimer ) {
78 mRunSaveTimer = new QTimer ( this ); 78 mRunSaveTimer = new QTimer ( this );
79 connect ( mRunSaveTimer, SIGNAL( timeout() ), this , SLOT ( saveRunningInfoToFile() ) ); 79 connect ( mRunSaveTimer, SIGNAL( timeout() ), this , SLOT ( saveRunningInfoToFile() ) );
80 } 80 }
81 mRunning = run; 81 mRunning = run;
82 if ( mRunning ) { 82 if ( mRunning ) {
83 mRunSaveTimer->start( 1000 * 60 * 5 ); // 5 min 83 mRunSaveTimer->start( 1000 * 60 * 5 ); // 5 min
84 mRunStart = QDateTime::currentDateTime(); 84 mRunStart = QDateTime::currentDateTime();
85 } else { 85 } else {
86 mRunSaveTimer->stop(); 86 mRunSaveTimer->stop();
87 saveRunningInfoToFile(); 87 saveRunningInfoToFile();
88 } 88 }
89} 89}
90 90
91void Todo::saveRunningInfoToFile( QString comment ) 91void Todo::saveRunningInfoToFile( QString comment )
92{ 92{
93 //qDebug("Todo::saveRunningInfoToFile() %s", summary().latin1()); 93 //qDebug("Todo::saveRunningInfoToFile() %s", summary().latin1());
94 if ( mRunStart.secsTo ( QDateTime::currentDateTime() ) < 30 ) { 94 if ( mRunStart.secsTo ( QDateTime::currentDateTime() ) < 30 ) {
95 qDebug("Running time < 30 seconds. Skipped. "); 95 qDebug("Running time < 30 seconds. Skipped. ");
96 return; 96 return;
97 } 97 }
98 QString dir = KGlobalSettings::timeTrackerDir(); 98 QString dir = KGlobalSettings::timeTrackerDir();
99 //qDebug("%s ", dir.latin1()); 99 //qDebug("%s ", dir.latin1());
100 QString file = "%1%2%3-%4%5%6-"; 100 QString file = "%1%2%3-%4%5%6-";
101 file = file.arg( mRunStart.date().year(), 4).arg( mRunStart.date().month(),2 ).arg( mRunStart.date().day(), 2 ).arg( mRunStart.time().hour(),2 ).arg( mRunStart.time().minute(),2 ).arg( mRunStart.time().second(),2 ); 101 file = file.arg( mRunStart.date().year(), 4).arg( mRunStart.date().month(),2 ).arg( mRunStart.date().day(), 2 ).arg( mRunStart.time().hour(),2 ).arg( mRunStart.time().minute(),2 ).arg( mRunStart.time().second(),2 );
102 file.replace ( QRegExp (" "), "0" ); 102 file.replace ( QRegExp (" "), "0" );
103 file += uid(); 103 file += uid();
104 //qDebug("File %s ",file.latin1() ); 104 //qDebug("File %s ",file.latin1() );
105 CalendarLocal cal; 105 CalendarLocal cal;
106 cal.setLocalTime(); 106 cal.setLocalTime();
107 Todo * to = (Todo*) clone(); 107 Todo * to = (Todo*) clone();
108 to->setFloats( false ); 108 to->setFloats( false );
109 to->setDtStart( mRunStart ); 109 to->setDtStart( mRunStart );
110 to->setHasStartDate( true ); 110 to->setHasStartDate( true );
111 to->setDtDue( QDateTime::currentDateTime() ); 111 to->setDtDue( QDateTime::currentDateTime() );
112 to->setHasDueDate( true ); 112 to->setHasDueDate( true );
113 to->setUid( file ); 113 to->setUid( file );
114 if ( !comment.isEmpty() ) { 114 if ( !comment.isEmpty() ) {
115 to->setDescription( comment ); 115 QString des = to->description();
116 if ( des.isEmpty () )
117 to->setDescription( "TT-Note: " + comment );
118 else
119 to->setDescription( "TT-Note: " + comment +"\n" + des );
116 } 120 }
117 cal.addIncidence( to ); 121 cal.addIncidence( to );
118 ICalFormat format; 122 ICalFormat format;
119 file = dir +"/" +file +".ics"; 123 file = dir +"/" +file +".ics";
120 format.save( &cal, file ); 124 format.save( &cal, file );
121 saveParents(); 125 saveParents();
122 126
123} 127}
124void Todo::saveParents() 128void Todo::saveParents()
125{ 129{
126 if (!relatedTo() ) 130 if (!relatedTo() )
127 return; 131 return;
128 Incidence * inc = relatedTo(); 132 Incidence * inc = relatedTo();
129 if ( inc->type() != "Todo" ) 133 if ( inc->type() != "Todo" )
130 return; 134 return;
131 Todo* to = (Todo*)inc; 135 Todo* to = (Todo*)inc;
132 bool saveTodo = false; 136 bool saveTodo = false;
133 QString file = KGlobalSettings::timeTrackerDir() + "/"+ to->uid() + ".ics"; 137 QString file = KGlobalSettings::timeTrackerDir() + "/"+ to->uid() + ".ics";
134 QFileInfo fi ( file ); 138 QFileInfo fi ( file );
135 if ( fi.exists() ) { 139 if ( fi.exists() ) {
136 if ( fi.lastModified () < to->lastModified ()) 140 if ( fi.lastModified () < to->lastModified ())
137 saveTodo = true; 141 saveTodo = true;
138 } else { 142 } else {
139 saveTodo = true; 143 saveTodo = true;
140 } 144 }
141 if ( saveTodo ) { 145 if ( saveTodo ) {
142 CalendarLocal cal; 146 CalendarLocal cal;
143 cal.setLocalTime(); 147 cal.setLocalTime();
144 Todo * par = (Todo *) to->clone(); 148 Todo * par = (Todo *) to->clone();
145 cal.addIncidence( par ); 149 cal.addIncidence( par );
146 ICalFormat format; 150 ICalFormat format;
147 format.save( &cal, file ); 151 format.save( &cal, file );
148 } 152 }
149 to->saveParents(); 153 to->saveParents();
150} 154}
151 155
152int Todo::runTime() 156int Todo::runTime()
153{ 157{
154 if ( !mRunning ) 158 if ( !mRunning )
155 return 0; 159 return 0;
156 return mRunStart.secsTo( QDateTime::currentDateTime() ); 160 return mRunStart.secsTo( QDateTime::currentDateTime() );
157} 161}
158bool Todo::hasRunningSub() 162bool Todo::hasRunningSub()
159{ 163{
160 if ( mRunning ) 164 if ( mRunning )
161 return true; 165 return true;
162 Incidence *aTodo; 166 Incidence *aTodo;
163 for (aTodo = mRelations.first(); aTodo; aTodo = mRelations.next()) { 167 for (aTodo = mRelations.first(); aTodo; aTodo = mRelations.next()) {
164 if ( ((Todo*)aTodo)->hasRunningSub() ) 168 if ( ((Todo*)aTodo)->hasRunningSub() )
165 return true; 169 return true;
166 } 170 }
167 return false; 171 return false;
168} 172}
169Incidence *Todo::clone() 173Incidence *Todo::clone()
170{ 174{
171 return new Todo(*this); 175 return new Todo(*this);
172} 176}
173 177
174bool Todo::contains ( Todo* from ) 178bool Todo::contains ( Todo* from )
175{ 179{
176 180
177 if ( !from->summary().isEmpty() ) 181 if ( !from->summary().isEmpty() )
178 if ( !summary().startsWith( from->summary() )) 182 if ( !summary().startsWith( from->summary() ))
179 return false; 183 return false;
180 if ( from->hasStartDate() ) { 184 if ( from->hasStartDate() ) {
181 if ( !hasStartDate() ) 185 if ( !hasStartDate() )
182 return false; 186 return false;
183 if ( from->dtStart() != dtStart()) 187 if ( from->dtStart() != dtStart())
184 return false; 188 return false;
185 } 189 }
186 if ( from->hasDueDate() ){ 190 if ( from->hasDueDate() ){
187 if ( !hasDueDate() ) 191 if ( !hasDueDate() )
188 return false; 192 return false;
189 if ( from->dtDue() != dtDue()) 193 if ( from->dtDue() != dtDue())
190 return false; 194 return false;
191 } 195 }
192 if ( !from->location().isEmpty() ) 196 if ( !from->location().isEmpty() )
193 if ( !location().startsWith( from->location() ) ) 197 if ( !location().startsWith( from->location() ) )
194 return false; 198 return false;
195 if ( !from->description().isEmpty() ) 199 if ( !from->description().isEmpty() )
196 if ( !description().startsWith( from->description() )) 200 if ( !description().startsWith( from->description() ))
197 return false; 201 return false;
198 if ( from->alarms().count() ) { 202 if ( from->alarms().count() ) {
199 Alarm *a = from->alarms().first(); 203 Alarm *a = from->alarms().first();
200 if ( a->enabled() ){ 204 if ( a->enabled() ){
201 if ( !alarms().count() ) 205 if ( !alarms().count() )
202 return false; 206 return false;
203 Alarm *b = alarms().first(); 207 Alarm *b = alarms().first();
204 if( ! b->enabled() ) 208 if( ! b->enabled() )
205 return false; 209 return false;
206 if ( ! (a->offset() == b->offset() )) 210 if ( ! (a->offset() == b->offset() ))
207 return false; 211 return false;
208 } 212 }
209 } 213 }
210 214
211 QStringList cat = categories(); 215 QStringList cat = categories();
212 QStringList catFrom = from->categories(); 216 QStringList catFrom = from->categories();
213 QString nCat; 217 QString nCat;
214 unsigned int iii; 218 unsigned int iii;
215 for ( iii = 0; iii < catFrom.count();++iii ) { 219 for ( iii = 0; iii < catFrom.count();++iii ) {
216 nCat = catFrom[iii]; 220 nCat = catFrom[iii];
217 if ( !nCat.isEmpty() ) 221 if ( !nCat.isEmpty() )
218 if ( !cat.contains( nCat )) { 222 if ( !cat.contains( nCat )) {
219 return false; 223 return false;
220 } 224 }
221 } 225 }
222 if ( from->isCompleted() ) { 226 if ( from->isCompleted() ) {
223 if ( !isCompleted() ) 227 if ( !isCompleted() )
224 return false; 228 return false;
225 } 229 }
226 if( priority() != from->priority() ) 230 if( priority() != from->priority() )
227 return false; 231 return false;
228 232
229 233
230 return true; 234 return true;
231 235
232} 236}
233bool KCal::operator==( const Todo& t1, const Todo& t2 ) 237bool KCal::operator==( const Todo& t1, const Todo& t2 )
234{ 238{
235 239
236 bool ret = operator==( (const Incidence&)t1, (const Incidence&)t2 ); 240 bool ret = operator==( (const Incidence&)t1, (const Incidence&)t2 );
237 if ( ! ret ) 241 if ( ! ret )
238 return false; 242 return false;
239 if ( t1.hasDueDate() == t2.hasDueDate() ) { 243 if ( t1.hasDueDate() == t2.hasDueDate() ) {
240 if ( t1.hasDueDate() ) { 244 if ( t1.hasDueDate() ) {
241 if ( t1.doesFloat() == t2.doesFloat() ) { 245 if ( t1.doesFloat() == t2.doesFloat() ) {
242 if ( t1.doesFloat() ) { 246 if ( t1.doesFloat() ) {
243 if ( t1.dtDue().date() != t2.dtDue().date() ) 247 if ( t1.dtDue().date() != t2.dtDue().date() )
244 return false; 248 return false;
245 } else 249 } else
246 if ( t1.dtDue() != t2.dtDue() ) 250 if ( t1.dtDue() != t2.dtDue() )
247 return false; 251 return false;
248 } else 252 } else
249 return false;// float != 253 return false;// float !=
250 } 254 }
251 255
252 } else 256 } else
253 return false; 257 return false;
254 if ( t1.percentComplete() != t2.percentComplete() ) 258 if ( t1.percentComplete() != t2.percentComplete() )
255 return false; 259 return false;
256 if ( t1.isCompleted() ) { 260 if ( t1.isCompleted() ) {
257 if ( t1.hasCompletedDate() == t2.hasCompletedDate() ) { 261 if ( t1.hasCompletedDate() == t2.hasCompletedDate() ) {
258 if ( t1.hasCompletedDate() ) { 262 if ( t1.hasCompletedDate() ) {
259 if ( t1.completed() != t2.completed() ) 263 if ( t1.completed() != t2.completed() )
260 return false; 264 return false;
261 } 265 }
262 266
263 } else 267 } else
264 return false; 268 return false;
265 } 269 }
266 return true; 270 return true;
267 271
268} 272}
269 273
270void Todo::setDtDue(const QDateTime &dtDue) 274void Todo::setDtDue(const QDateTime &dtDue)
271{ 275{
272 //int diffsecs = mDtDue.secsTo(dtDue); 276 //int diffsecs = mDtDue.secsTo(dtDue);
273 277
274 /*if (mReadOnly) return; 278 /*if (mReadOnly) return;
275 const QPtrList<Alarm>& alarms = alarms(); 279 const QPtrList<Alarm>& alarms = alarms();
276 for (Alarm* alarm = alarms.first(); alarm; alarm = alarms.next()) { 280 for (Alarm* alarm = alarms.first(); alarm; alarm = alarms.next()) {
277 if (alarm->enabled()) { 281 if (alarm->enabled()) {
278 alarm->setTime(alarm->time().addSecs(diffsecs)); 282 alarm->setTime(alarm->time().addSecs(diffsecs));
279 } 283 }
280 }*/ 284 }*/
281 mDtDue = getEvenTime(dtDue); 285 mDtDue = getEvenTime(dtDue);
282 286
283 //kdDebug(5800) << "setDtDue says date is " << mDtDue.toString() << endl; 287 //kdDebug(5800) << "setDtDue says date is " << mDtDue.toString() << endl;
284 288
285 /*const QPtrList<Alarm>& alarms = alarms(); 289 /*const QPtrList<Alarm>& alarms = alarms();
286 for (Alarm* alarm = alarms.first(); alarm; alarm = alarms.next()) 290 for (Alarm* alarm = alarms.first(); alarm; alarm = alarms.next())
287 alarm->setAlarmStart(mDtDue);*/ 291 alarm->setAlarmStart(mDtDue);*/
288 updated(); 292 updated();
289} 293}
290 294
291QDateTime Todo::dtDue() const 295QDateTime Todo::dtDue() const
292{ 296{
293 return mDtDue; 297 return mDtDue;
294} 298}
295 299
296QString Todo::dtDueTimeStr() const 300QString Todo::dtDueTimeStr() const
297{ 301{
298 return KGlobal::locale()->formatTime(mDtDue.time()); 302 return KGlobal::locale()->formatTime(mDtDue.time());
299} 303}
300 304
301QString Todo::dtDueDateStr(bool shortfmt) const 305QString Todo::dtDueDateStr(bool shortfmt) const
302{ 306{
303 return KGlobal::locale()->formatDate(mDtDue.date(),shortfmt); 307 return KGlobal::locale()->formatDate(mDtDue.date(),shortfmt);
304} 308}
305 309
306QString Todo::dtDueStr(bool shortfmt) const 310QString Todo::dtDueStr(bool shortfmt) const
307{ 311{
diff --git a/microkde/kdatetbl.cpp b/microkde/kdatetbl.cpp
index 2d97c8c..4271b55 100644
--- a/microkde/kdatetbl.cpp
+++ b/microkde/kdatetbl.cpp
@@ -597,343 +597,348 @@ KDateInternalMonthPicker::contentsMouseReleaseEvent(QMouseEvent *e)
597 return; 597 return;
598 } 598 }
599 // ----- 599 // -----
600 int row, col, pos; 600 int row, col, pos;
601 QPoint mouseCoord; 601 QPoint mouseCoord;
602 // ----- 602 // -----
603 mouseCoord = e->pos(); 603 mouseCoord = e->pos();
604 row=rowAt(mouseCoord.y()); 604 row=rowAt(mouseCoord.y());
605 col=columnAt(mouseCoord.x()); 605 col=columnAt(mouseCoord.x());
606 if(row<0 || col<0) 606 if(row<0 || col<0)
607 { // the user clicked on the frame of the table 607 { // the user clicked on the frame of the table
608 emit(closeMe(0)); 608 emit(closeMe(0));
609 } 609 }
610 pos=3*row+col+1; 610 pos=3*row+col+1;
611 result=pos; 611 result=pos;
612 emit(closeMe(1)); 612 emit(closeMe(1));
613} 613}
614 614
615 615
616 616
617KDateInternalYearSelector::KDateInternalYearSelector 617KDateInternalYearSelector::KDateInternalYearSelector
618(int fontsize, QWidget* parent, const char* name) 618(int fontsize, QWidget* parent, const char* name)
619 : QLineEdit(parent, name), 619 : QLineEdit(parent, name),
620 val(new QIntValidator(this)), 620 val(new QIntValidator(this)),
621 result(0) 621 result(0)
622{ 622{
623 QFont font; 623 QFont font;
624 // ----- 624 // -----
625 font=KGlobalSettings::generalFont(); 625 font=KGlobalSettings::generalFont();
626 font.setPointSize(fontsize); 626 font.setPointSize(fontsize);
627 setFont(font); 627 setFont(font);
628#if 0 628#if 0
629 setFrameStyle(QFrame::NoFrame); 629 setFrameStyle(QFrame::NoFrame);
630#endif 630#endif
631 // we have to respect the limits of QDate here, I fear: 631 // we have to respect the limits of QDate here, I fear:
632 val->setRange(0, 8000); 632 val->setRange(0, 8000);
633 setValidator(val); 633 setValidator(val);
634 connect(this, SIGNAL(returnPressed()), SLOT(yearEnteredSlot())); 634 connect(this, SIGNAL(returnPressed()), SLOT(yearEnteredSlot()));
635} 635}
636 636
637void 637void
638KDateInternalYearSelector::yearEnteredSlot() 638KDateInternalYearSelector::yearEnteredSlot()
639{ 639{
640 bool ok; 640 bool ok;
641 int year; 641 int year;
642 QDate date; 642 QDate date;
643 // ----- check if this is a valid year: 643 // ----- check if this is a valid year:
644 year=text().toInt(&ok); 644 year=text().toInt(&ok);
645 if(!ok) 645 if(!ok)
646 { 646 {
647 KNotifyClient::beep(); 647 KNotifyClient::beep();
648 return; 648 return;
649 } 649 }
650 date.setYMD(year, 1, 1); 650 date.setYMD(year, 1, 1);
651 if(!date.isValid()) 651 if(!date.isValid())
652 { 652 {
653 KNotifyClient::beep(); 653 KNotifyClient::beep();
654 return; 654 return;
655 } 655 }
656 result=year; 656 result=year;
657 emit(closeMe(1)); 657 emit(closeMe(1));
658} 658}
659 659
660int 660int
661KDateInternalYearSelector::getYear() 661KDateInternalYearSelector::getYear()
662{ 662{
663 return result; 663 return result;
664} 664}
665 665
666void 666void
667KDateInternalYearSelector::setYear(int year) 667KDateInternalYearSelector::setYear(int year)
668{ 668{
669 QString temp; 669 QString temp;
670 // ----- 670 // -----
671 temp.setNum(year); 671 temp.setNum(year);
672 setText(temp); 672 setText(temp);
673} 673}
674 674
675KPopupFrame::KPopupFrame(QWidget* parent, const char* name) 675KPopupFrame::KPopupFrame(QWidget* parent, const char* name)
676 : QFrame(parent, name, WType_Popup), 676 : QFrame(parent, name, WType_Popup),
677 result(0), // rejected 677 result(0), // rejected
678 main(0) 678 main(0)
679{ 679{
680 setFrameStyle(QFrame::Box|QFrame::Raised); 680 setFrameStyle(QFrame::Box|QFrame::Raised);
681 setMidLineWidth(2); 681 setMidLineWidth(2);
682} 682}
683 683
684void 684void
685KPopupFrame::keyPressEvent(QKeyEvent* e) 685KPopupFrame::keyPressEvent(QKeyEvent* e)
686{ 686{
687 if(e->key()==Key_Escape) 687 if(e->key()==Key_Escape)
688 { 688 {
689 result=0; // rejected 689 result=0; // rejected
690 qApp->exit_loop(); 690 qApp->exit_loop();
691 } 691 }
692} 692}
693 693
694void 694void
695KPopupFrame::close(int r) 695KPopupFrame::close(int r)
696{ 696{
697 result=r; 697 result=r;
698 qApp->exit_loop(); 698 qApp->exit_loop();
699} 699}
700 700
701void 701void
702KPopupFrame::setMainWidget(QWidget* m) 702KPopupFrame::setMainWidget(QWidget* m)
703{ 703{
704 main=m; 704 main=m;
705 if(main!=0) 705 if(main!=0)
706 { 706 {
707 resize(main->width()+2*frameWidth(), main->height()+2*frameWidth()); 707 resize(main->width()+2*frameWidth(), main->height()+2*frameWidth());
708 } 708 }
709} 709}
710 710
711void 711void
712KPopupFrame::resizeEvent(QResizeEvent*) 712KPopupFrame::resizeEvent(QResizeEvent*)
713{ 713{
714 if(main!=0) 714 if(main!=0)
715 { 715 {
716 main->setGeometry(frameWidth(), frameWidth(), 716 main->setGeometry(frameWidth(), frameWidth(),
717 width()-2*frameWidth(), height()-2*frameWidth()); 717 width()-2*frameWidth(), height()-2*frameWidth());
718 } 718 }
719} 719}
720 720
721void 721void
722KPopupFrame::popup(const QPoint &pos) 722KPopupFrame::popup(const QPoint &pos)
723{ 723{
724 // Make sure the whole popup is visible. 724 // Make sure the whole popup is visible.
725 QRect d = QApplication::desktop()->frameGeometry(); 725 QRect d = QApplication::desktop()->frameGeometry();
726 int x = pos.x(); 726 int x = pos.x();
727 int y = pos.y(); 727 int y = pos.y();
728 int w = width(); 728 int w = width();
729 int h = height(); 729 int h = height();
730 if (x+w > d.x()+d.width()) 730 if (x+w > d.x()+d.width())
731 x = d.width() - w; 731 x = d.width() - w;
732 if (y+h > d.y()+d.height()) 732 if (y+h > d.y()+d.height())
733 y = d.height() - h; 733 y = d.height() - h;
734 if (x < d.x()) 734 if (x < d.x())
735 x = 0; 735 x = 0;
736 if (y < d.y()) 736 if (y < d.y())
737 y = 0; 737 y = 0;
738 738
739 // Pop the thingy up. 739 // Pop the thingy up.
740 move(x, y); 740 move(x, y);
741 show(); 741 show();
742} 742}
743 743
744int 744int
745KPopupFrame::exec(QPoint pos) 745KPopupFrame::exec(QPoint pos)
746{ 746{
747 popup(pos); 747 popup(pos);
748 repaint(); 748 repaint();
749 qApp->enter_loop(); 749 qApp->enter_loop();
750 hide(); 750 hide();
751 return result; 751 return result;
752} 752}
753 753
754int 754int
755KPopupFrame::exec(int x, int y) 755KPopupFrame::exec(int x, int y)
756{ 756{
757 return exec(QPoint(x, y)); 757 return exec(QPoint(x, y));
758} 758}
759 759
760void KPopupFrame::virtual_hook( int, void* ) 760void KPopupFrame::virtual_hook( int, void* )
761{ /*BASE::virtual_hook( id, data );*/ } 761{ /*BASE::virtual_hook( id, data );*/ }
762 762
763void KDateTable::virtual_hook( int, void* ) 763void KDateTable::virtual_hook( int, void* )
764{ /*BASE::virtual_hook( id, data );*/ } 764{ /*BASE::virtual_hook( id, data );*/ }
765 765
766//#include "kdatetbl.moc" 766//#include "kdatetbl.moc"
767 767
768 768
769KDateInternalWeekPicker::KDateInternalWeekPicker 769KDateInternalWeekPicker::KDateInternalWeekPicker
770(QWidget* parent, const char* name) 770(QWidget* parent, const char* name)
771 : QGridView(parent, name), 771 : QGridView(parent, name),
772 result(0) // invalid 772 result(0) // invalid
773{ 773{
774 QRect rect; 774 QRect rect;
775 QFont font; 775 QFont font;
776 // ----- 776 // -----
777 activeCol = -1; 777 activeCol = -1;
778 activeRow = -1; 778 activeRow = -1;
779 font=KGlobalSettings::generalFont(); 779 font=KGlobalSettings::generalFont();
780 int fontsize = 10; 780 int fontsize = 10;
781 int add = 2; 781 int add = 2;
782 if ( QApplication::desktop()->width() >= 480 && QApplication::desktop()->width() <= 640 ) 782 if ( QApplication::desktop()->width() >= 480 && QApplication::desktop()->width() <= 640 )
783 add += 6; 783 add += 6;
784 font.setPointSize(fontsize+add); 784 font.setPointSize(fontsize+add);
785 setFont(font); 785 setFont(font);
786 setHScrollBarMode(AlwaysOff); 786 setHScrollBarMode(AlwaysOff);
787 setVScrollBarMode(AlwaysOff); 787 setVScrollBarMode(AlwaysOff);
788 setFrameStyle(QFrame::NoFrame); 788 setFrameStyle(QFrame::NoFrame);
789 setNumRows(13); 789 if ( QApplication::desktop()->height() > 240 ) {
790 setNumCols(4); 790 setNumRows(13);
791 setNumCols(4);
792 } else {
793 setNumRows(4);
794 setNumCols(13);
795 }
791 // enable to find drawing failures: 796 // enable to find drawing failures:
792 // setTableFlags(Tbl_clipCellPainting); 797 // setTableFlags(Tbl_clipCellPainting);
793#if 0 798#if 0
794 viewport()->setEraseColor(lightGray); // for consistency with the datepicker 799 viewport()->setEraseColor(lightGray); // for consistency with the datepicker
795#endif 800#endif
796 // ----- find the preferred size 801 // ----- find the preferred size
797 // (this is slow, possibly, but unfortunatly it is needed here): 802 // (this is slow, possibly, but unfortunatly it is needed here):
798 QFontMetrics metrics(font); 803 QFontMetrics metrics(font);
799 for(int i=1; i <= 52; ++i) 804 for(int i=1; i <= 52; ++i)
800 { 805 {
801 rect=metrics.boundingRect(QString::number( i )); 806 rect=metrics.boundingRect(QString::number( i ));
802 if(max.width()<rect.width()) max.setWidth(rect.width()); 807 if(max.width()<rect.width()) max.setWidth(rect.width());
803 if(max.height()<rect.height()) max.setHeight(rect.height()); 808 if(max.height()<rect.height()) max.setHeight(rect.height());
804 } 809 }
805 if ( QApplication::desktop()->width() > 640 ) { 810 if ( QApplication::desktop()->width() > 640 ) {
806 811
807 max.setWidth(max.width()+6); 812 max.setWidth(max.width()+6);
808 max.setHeight(max.height()+8); 813 max.setHeight(max.height()+8);
809 } 814 }
810} 815}
811 816
812QSize 817QSize
813KDateInternalWeekPicker::sizeHint() const 818KDateInternalWeekPicker::sizeHint() const
814{ 819{
815 return QSize((max.width()+6)*numCols()+2*frameWidth(), 820 return QSize((max.width()+6)*numCols()+2*frameWidth(),
816 (max.height()+6)*numRows()+2*frameWidth()); 821 (max.height()+6)*numRows()+2*frameWidth());
817} 822}
818 823
819int 824int
820KDateInternalWeekPicker::getResult() const 825KDateInternalWeekPicker::getResult() const
821{ 826{
822 return result; 827 return result;
823} 828}
824 829
825void 830void
826KDateInternalWeekPicker::setupPainter(QPainter *p) 831KDateInternalWeekPicker::setupPainter(QPainter *p)
827{ 832{
828 p->setPen(black); 833 p->setPen(black);
829} 834}
830 835
831void 836void
832KDateInternalWeekPicker::viewportResizeEvent(QResizeEvent*) 837KDateInternalWeekPicker::viewportResizeEvent(QResizeEvent*)
833{ 838{
834 setCellWidth(width()/4); 839 setCellWidth(width()/ numCols());
835 setCellHeight(height()/13); 840 setCellHeight(height()/ numRows());
836} 841}
837 842
838void 843void
839KDateInternalWeekPicker::paintCell(QPainter* painter, int row, int col) 844KDateInternalWeekPicker::paintCell(QPainter* painter, int row, int col)
840{ 845{
841 int index; 846 int index;
842 QString text; 847 QString text;
843 // ----- find the number of the cell: 848 // ----- find the number of the cell:
844 index=4*row+col+1; 849 index=numCols()*row+col+1;
845 text=QString::number( index ); 850 text=QString::number( index );
846 painter->drawText(0, 0, cellWidth(), cellHeight(), AlignCenter, text); 851 painter->drawText(0, 0, cellWidth(), cellHeight(), AlignCenter, text);
847 if ( activeCol == col && activeRow == row ) 852 if ( activeCol == col && activeRow == row )
848 painter->drawRect( 0, 0, cellWidth(), cellHeight() ); 853 painter->drawRect( 0, 0, cellWidth(), cellHeight() );
849} 854}
850 855
851void 856void
852KDateInternalWeekPicker::contentsMousePressEvent(QMouseEvent *e) 857KDateInternalWeekPicker::contentsMousePressEvent(QMouseEvent *e)
853{ 858{
854 if(!isEnabled() || e->button() != LeftButton) 859 if(!isEnabled() || e->button() != LeftButton)
855 { 860 {
856 KNotifyClient::beep(); 861 KNotifyClient::beep();
857 return; 862 return;
858 } 863 }
859 // ----- 864 // -----
860 int row, col; 865 int row, col;
861 QPoint mouseCoord; 866 QPoint mouseCoord;
862 // ----- 867 // -----
863 mouseCoord = e->pos(); 868 mouseCoord = e->pos();
864 row=rowAt(mouseCoord.y()); 869 row=rowAt(mouseCoord.y());
865 col=columnAt(mouseCoord.x()); 870 col=columnAt(mouseCoord.x());
866 871
867 if(row<0 || col<0) 872 if(row<0 || col<0)
868 { // the user clicked on the frame of the table 873 { // the user clicked on the frame of the table
869 activeCol = -1; 874 activeCol = -1;
870 activeRow = -1; 875 activeRow = -1;
871 } else { 876 } else {
872 activeCol = col; 877 activeCol = col;
873 activeRow = row; 878 activeRow = row;
874 updateCell( row, col /*, false */ ); 879 updateCell( row, col /*, false */ );
875 } 880 }
876} 881}
877 882
878void 883void
879KDateInternalWeekPicker::contentsMouseMoveEvent(QMouseEvent *e) 884KDateInternalWeekPicker::contentsMouseMoveEvent(QMouseEvent *e)
880{ 885{
881 if (e->state() & LeftButton) 886 if (e->state() & LeftButton)
882 { 887 {
883 int row, col; 888 int row, col;
884 QPoint mouseCoord; 889 QPoint mouseCoord;
885 // ----- 890 // -----
886 mouseCoord = e->pos(); 891 mouseCoord = e->pos();
887 row=rowAt(mouseCoord.y()); 892 row=rowAt(mouseCoord.y());
888 col=columnAt(mouseCoord.x()); 893 col=columnAt(mouseCoord.x());
889 int tmpRow = -1, tmpCol = -1; 894 int tmpRow = -1, tmpCol = -1;
890 if(row<0 || col<0) 895 if(row<0 || col<0)
891 { // the user clicked on the frame of the table 896 { // the user clicked on the frame of the table
892 if ( activeCol > -1 ) 897 if ( activeCol > -1 )
893 { 898 {
894 tmpRow = activeRow; 899 tmpRow = activeRow;
895 tmpCol = activeCol; 900 tmpCol = activeCol;
896 } 901 }
897 activeCol = -1; 902 activeCol = -1;
898 activeRow = -1; 903 activeRow = -1;
899 } else { 904 } else {
900 bool differentCell = (activeRow != row || activeCol != col); 905 bool differentCell = (activeRow != row || activeCol != col);
901 if ( activeCol > -1 && differentCell) 906 if ( activeCol > -1 && differentCell)
902 { 907 {
903 tmpRow = activeRow; 908 tmpRow = activeRow;
904 tmpCol = activeCol; 909 tmpCol = activeCol;
905 } 910 }
906 if ( differentCell) 911 if ( differentCell)
907 { 912 {
908 activeRow = row; 913 activeRow = row;
909 activeCol = col; 914 activeCol = col;
910 updateCell( row, col /*, false */ ); // mark the new active cell 915 updateCell( row, col /*, false */ ); // mark the new active cell
911 } 916 }
912 } 917 }
913 if ( tmpRow > -1 ) // repaint the former active cell 918 if ( tmpRow > -1 ) // repaint the former active cell
914 updateCell( tmpRow, tmpCol /*, true */ ); 919 updateCell( tmpRow, tmpCol /*, true */ );
915 } 920 }
916} 921}
917 922
918void 923void
919KDateInternalWeekPicker::contentsMouseReleaseEvent(QMouseEvent *e) 924KDateInternalWeekPicker::contentsMouseReleaseEvent(QMouseEvent *e)
920{ 925{
921 if(!isEnabled()) 926 if(!isEnabled())
922 { 927 {
923 return; 928 return;
924 } 929 }
925 // ----- 930 // -----
926 int row, col, pos; 931 int row, col, pos;
927 QPoint mouseCoord; 932 QPoint mouseCoord;
928 // ----- 933 // -----
929 mouseCoord = e->pos(); 934 mouseCoord = e->pos();
930 row=rowAt(mouseCoord.y()); 935 row=rowAt(mouseCoord.y());
931 col=columnAt(mouseCoord.x()); 936 col=columnAt(mouseCoord.x());
932 if(row<0 || col<0) 937 if(row<0 || col<0)
933 { // the user clicked on the frame of the table 938 { // the user clicked on the frame of the table
934 emit(closeMe(0)); 939 emit(closeMe(0));
935 } 940 }
936 pos=4*row+col+1; 941 pos=numCols()*row+col+1;
937 result=pos; 942 result=pos;
938 emit(closeMe(1)); 943 emit(closeMe(1));
939} 944}