summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-07-07 22:22:20 (UTC)
committer zautrix <zautrix>2005-07-07 22:22:20 (UTC)
commit876816e6582299d527610e847d259d2be6de403c (patch) (unidiff)
tree6683baf2835672d0d9b28b3cbbf90e84c398b835
parent3fe323e4e63f3b7c1cf8c96093fa14fd63fb4efc (diff)
downloadkdepimpi-876816e6582299d527610e847d259d2be6de403c.zip
kdepimpi-876816e6582299d527610e847d259d2be6de403c.tar.gz
kdepimpi-876816e6582299d527610e847d259d2be6de403c.tar.bz2
fixxx
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt4
-rw-r--r--korganizer/calendarview.cpp64
-rw-r--r--korganizer/koagenda.cpp4
-rw-r--r--korganizer/koagenda.h1
-rw-r--r--korganizer/komonthview.cpp5
5 files changed, 17 insertions, 61 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 814c541..aa4a89a 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,201 +1,201 @@
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.14 ************ 3********** VERSION 2.1.14 ************
4 4
5Added some buttons to the KO/Pi Quick-todo line to make it possible to quickly access some todo view layout settings like display all flat/open/close and hide/show running/done. 5Added some buttons to the KO/Pi Quick-todo line to make it possible to quickly access some todo view layout settings like display all flat/open/close and hide/show running/done.
6Added a button to add a subtodo quickly. 6Added a button to add a subtodo quickly.
7 7
8Added a possibility to search for conflicting events. (In the Action menu. Keyboard shortcut "q" ). 8Added a possibility to search for conflicting events. (In the Action menu. Keyboard shortcut "q", shift+q or ctrl +q ).
9 9Added an option to change the layout of the list week to column mode.
10 10
11********** VERSION 2.1.13 ************ 11********** VERSION 2.1.13 ************
12 12
13Fixed a problem in KA/Pi search. 13Fixed a problem in KA/Pi search.
14Fixed some minor problems in KO/Pi. 14Fixed some minor problems in KO/Pi.
15Added calendar selection possibility to the todo view popup and to the event/todo/journal editor. 15Added calendar selection possibility to the todo view popup and to the event/todo/journal editor.
16 16
17Fixed memory usage problems in KA/Pi: 17Fixed memory usage problems in KA/Pi:
18When loading data KA/Pi did load the file data twice. 18When loading data KA/Pi did load the file data twice.
19Example: 19Example:
20 A 600k file did consume 1200k memory during loading process. 20 A 600k file did consume 1200k memory during loading process.
21 This is fixed, it does now consume only 600k during loading process. 21 This is fixed, it does now consume only 600k during loading process.
22When saving data KA/Pi did consume a lot of memory for the data parsing during the save process. 22When saving data KA/Pi did consume a lot of memory for the data parsing during the save process.
23This is fixed. 23This is fixed.
24Example: 24Example:
25 Before saving a 600k file KA/Pi did consume 21.7 Meg of Ram. 25 Before saving a 600k file KA/Pi did consume 21.7 Meg of Ram.
26 When saving KA/Pi did consume 28.6 Meg of Ram. That causes a crash on the Zaurus because there was no memeory left in the system. 26 When saving KA/Pi did consume 28.6 Meg of Ram. That causes a crash on the Zaurus because there was no memeory left in the system.
27 Now KA/Pi is consuming on saving the same data 22.0 Meg of Ram during the save process. 27 Now KA/Pi is consuming on saving the same data 22.0 Meg of Ram during the save process.
28Note: The memory usage of KA/Pi after the data is loaded/saved has not changed. 28Note: The memory usage of KA/Pi after the data is loaded/saved has not changed.
29The saving of data may be a bit slower now. 29The saving of data may be a bit slower now.
30 30
31Fixed memory usage problems in KO/Pi: 31Fixed memory usage problems in KO/Pi:
32When KO/Pi did save the data to file, it did not release the used buffers after saving. 32When KO/Pi did save the data to file, it did not release the used buffers after saving.
33The used buffer was released after saving the next time, but there was new buffer space allocated again on that save operation. 33The used buffer was released after saving the next time, but there was new buffer space allocated again on that save operation.
34This is fixed. 34This is fixed.
35Example: 35Example:
36 When saving a 400k file KO/Pi do now use 400k less memory now. 36 When saving a 400k file KO/Pi do now use 400k less memory now.
37 37
38Optimized memory usage in KO/Pi Agenda view: 38Optimized memory usage in KO/Pi Agenda view:
39KO/Pi is storing some paint information in extra buffers for faster repainting of the agenda view. 39KO/Pi is storing some paint information in extra buffers for faster repainting of the agenda view.
40These buffers were not made smaller (i.e. downsized) because of performance reasons. 40These buffers were not made smaller (i.e. downsized) because of performance reasons.
41The handling of these buffers are now much smarter: 41The handling of these buffers are now much smarter:
42Two (of six) buffers are removed completely. 42Two (of six) buffers are removed completely.
43The remaing four buffers are now downsized after not using the agenda view for 45 seconds. 43The remaing four buffers are now downsized after not using the agenda view for 45 seconds.
44Such that the memory usage of KO/Pi is smaller now in general ( because 2 buffers are removed) and is much smaller when not using the agenda view. That is very important when using fastload for KO/Pi. 44Such that the memory usage of KO/Pi is smaller now in general ( because 2 buffers are removed) and is much smaller when not using the agenda view. That is very important when using fastload for KO/Pi.
45 45
46Worst case example ( for a maximum size agenda content): 46Worst case example ( for a maximum size agenda content):
47 When resizing the agenda content to a large scale, KO/Pi did use 17Meg of mem ( and did not use less memory until it was stopped). Now KO/Pi is using on the same operation only 14.3 Meg of mem and after 45 seconds not using the agenda view it uses only 9.4 Meg of mem. 47 When resizing the agenda content to a large scale, KO/Pi did use 17Meg of mem ( and did not use less memory until it was stopped). Now KO/Pi is using on the same operation only 14.3 Meg of mem and after 45 seconds not using the agenda view it uses only 9.4 Meg of mem.
48 48
49When switching to an unused Agenda view now KO/Pi is upizing the buffers again. This takes less than a second. Such that switching to Agenda view (after not using it for more than 45 seconds) is now a bit slower. 49When switching to an unused Agenda view now KO/Pi is upizing the buffers again. This takes less than a second. Such that switching to Agenda view (after not using it for more than 45 seconds) is now a bit slower.
50 50
51Summary: 51Summary:
52Many memory wasting problems of KA/Pi and KO/Pi fixed such that it is better to use on the Zaurus. 52Many memory wasting problems of KA/Pi and KO/Pi fixed such that it is better to use on the Zaurus.
53 53
54********** VERSION 2.1.12 ************ 54********** VERSION 2.1.12 ************
55 55
56KO/Pi: 56KO/Pi:
57Many small usability fixes, e.g. rearranged the popup menus such that they are better to use on the Zaurus. 57Many small usability fixes, e.g. rearranged the popup menus such that they are better to use on the Zaurus.
58Fixed a problem with the month view when file was saved but KO/Pi was not the active window. 58Fixed a problem with the month view when file was saved but KO/Pi was not the active window.
59Fixed some problems in the resource config dialog (e.g. added a warning if you set all calendars to read-only). 59Fixed some problems in the resource config dialog (e.g. added a warning if you set all calendars to read-only).
60Fixed some other small problems. 60Fixed some other small problems.
61 61
62********** VERSION 2.1.11 ************ 62********** VERSION 2.1.11 ************
63 63
64KO/Pi: 64KO/Pi:
65Because we can have many calendars now in KO/Pi we can have more than one journal entry per day. 65Because we can have many calendars now in KO/Pi we can have more than one journal entry per day.
66Added features to handle (and add ) more than one journal entry per day. 66Added features to handle (and add ) more than one journal entry per day.
67Added option for a journal title. 67Added option for a journal title.
68 68
69Added info about the calendar, the item belongs to, to the event/todo/journal viewer. 69Added info about the calendar, the item belongs to, to the event/todo/journal viewer.
70Fixed a problem of the alarm of completed recurring todos. 70Fixed a problem of the alarm of completed recurring todos.
71Added to the event/todo editor to set quickly the category of an item. 71Added to the event/todo editor to set quickly the category of an item.
72 72
73 73
74Fixed some problems when calling KO/Pi or KA/Pi from the alarm applet. 74Fixed some problems when calling KO/Pi or KA/Pi from the alarm applet.
75 75
76Added KA/Pi multi sync to the multi sync called from the alarm applet. 76Added KA/Pi multi sync to the multi sync called from the alarm applet.
77 77
78********** VERSION 2.1.10 ************ 78********** VERSION 2.1.10 ************
79 79
80KO/Pi: 80KO/Pi:
81Importing Birthdays will now create another file resource "Birthdays" and import the birthday data from KA/Pi into that file. 81Importing Birthdays will now create another file resource "Birthdays" and import the birthday data from KA/Pi into that file.
82When a multidayevent is selected in monthview all occurences of this event in the monthview are now hightlighted. 82When a multidayevent is selected in monthview all occurences of this event in the monthview are now hightlighted.
83Fixed a bug in searching for a small timerange, i.e. one day. 83Fixed a bug in searching for a small timerange, i.e. one day.
84 84
85KA/Pi: 85KA/Pi:
86Fixed two problems in csv export. 86Fixed two problems in csv export.
87Fixed problems when calling the contact selection dialog from KO/Pi or OM/Pi. 87Fixed problems when calling the contact selection dialog from KO/Pi or OM/Pi.
88 88
89********** VERSION 2.1.9 ************ 89********** VERSION 2.1.9 ************
90 90
91KO/Pi: 91KO/Pi:
92Fixed some problems of the new search options in the search dialog. 92Fixed some problems of the new search options in the search dialog.
93Fixed some problems in the new resource config options. 93Fixed some problems in the new resource config options.
94Changed the recurrence edit of events and todos such that the recurrence edit page now is notified about a change of the start date on the first page. 94Changed the recurrence edit of events and todos such that the recurrence edit page now is notified about a change of the start date on the first page.
95Fixed a problem creating new events in the agenda view if at the day/time is already an agenda item shown: 95Fixed a problem creating new events in the agenda view if at the day/time is already an agenda item shown:
96Now you can click on the bottom/top of an allday agenda item or on the left/right side of an agenda item to get the "new todo/new event" popup. 96Now you can click on the bottom/top of an allday agenda item or on the left/right side of an agenda item to get the "new todo/new event" popup.
97 97
98Fixed a problem in recurrence range in syncing with DTM. 98Fixed a problem in recurrence range in syncing with DTM.
99 99
100KA/Pi: 100KA/Pi:
101Made it posiible to show in the contact overview the details of all data available for that contact( e.g. office, spouse, children, nickname ...) 101Made it posiible to show in the contact overview the details of all data available for that contact( e.g. office, spouse, children, nickname ...)
102 102
103PwM/Pi: 103PwM/Pi:
104Added "sec" to the timeout config settings to make it clear the timeout values are seconds. 104Added "sec" to the timeout config settings to make it clear the timeout values are seconds.
105 105
106********** VERSION 2.1.8 ************ 106********** VERSION 2.1.8 ************
107 107
108KO/Pi: 108KO/Pi:
109Added info about the completion state of a todo in the ListView/Searchdialog. 109Added info about the completion state of a todo in the ListView/Searchdialog.
110If in TodoView is selected "do not show compledted todos" then completed todos are not shown in the ListView as well. 110If in TodoView is selected "do not show compledted todos" then completed todos are not shown in the ListView as well.
111Fixed some updating problems when changing the filter. 111Fixed some updating problems when changing the filter.
112 112
113KA/Pi: 113KA/Pi:
114In the addressee selection dialog now the formatted name is shown, if not empty. 114In the addressee selection dialog now the formatted name is shown, if not empty.
115Added a column "category" to the addressee selection dialog to make it possible to sort addressees after category. 115Added a column "category" to the addressee selection dialog to make it possible to sort addressees after category.
116Now in the addressee selection dialog a selected contact is remove with a single click from the selected list. 116Now in the addressee selection dialog a selected contact is remove with a single click from the selected list.
117 117
118Fixed in the file selector on the Zaurus the problem that symbolic links to files/dirs were ignored. 118Fixed in the file selector on the Zaurus the problem that symbolic links to files/dirs were ignored.
119Fixed the sorting for size in the file selector on the Z. 119Fixed the sorting for size in the file selector on the Z.
120 120
121Changed the color selection dialog on the Zaurus to a more user friendly version. 121Changed the color selection dialog on the Zaurus to a more user friendly version.
122 122
123********** VERSION 2.1.7 ************ 123********** VERSION 2.1.7 ************
124 124
125KO/Pi: 125KO/Pi:
126Fixed several problems in the new Resource handling. 126Fixed several problems in the new Resource handling.
127Added more options to the search dialog. 127Added more options to the search dialog.
128Fixed a problem in the Month view. 128Fixed a problem in the Month view.
129Added more options to the dialog when setting a todo to stopped. 129Added more options to the dialog when setting a todo to stopped.
130 130
131Fixed two small problems in KO/Pi Alarm applet. 131Fixed two small problems in KO/Pi Alarm applet.
132 132
133********** VERSION 2.1.6 ************ 133********** VERSION 2.1.6 ************
134 134
135This release is for testing only. 135This release is for testing only.
136 136
137KO/Pi: 137KO/Pi:
138Added to the list view (the list view is used in search dialog as well) the possibility to print it. 138Added to the list view (the list view is used in search dialog as well) the possibility to print it.
139Added to the list view the possibility to hide entries, if you do not want to print all entries of the list view. 139Added to the list view the possibility to hide entries, if you do not want to print all entries of the list view.
140Added to the list view the possibility to add all subtodos of selected todos to an export/beam. 140Added to the list view the possibility to add all subtodos of selected todos to an export/beam.
141Added to the search dialog the possibility to make an additive search such that you can get a better list for export/printout. 141Added to the search dialog the possibility to make an additive search such that you can get a better list for export/printout.
142Added to the search dialog the possibility to hide the checkboxes such that there is more space for the list view on the Zaurus. 142Added to the search dialog the possibility to hide the checkboxes such that there is more space for the list view on the Zaurus.
143Fixed a problem in the AlarmTimer Applet: Now utf8 messages are displayed properly. 143Fixed a problem in the AlarmTimer Applet: Now utf8 messages are displayed properly.
144 144
145Added support for multiple calendar files in KO/Pi. Only local ical (*.ics) files are supported as calendars. 145Added support for multiple calendar files in KO/Pi. Only local ical (*.ics) files are supported as calendars.
146In the sync profile config it is still missing to specify a particular calendar to sync with this profile. That setting will be added later. 146In the sync profile config it is still missing to specify a particular calendar to sync with this profile. That setting will be added later.
147Now on every sync the set of calendars is synced which are enabled in the resource view. 147Now on every sync the set of calendars is synced which are enabled in the resource view.
148 148
149A calendar is enabled in the resource view if the "eye" column is checked. 149A calendar is enabled in the resource view if the "eye" column is checked.
150You can set a calendar to be the default for new items( "+" column ). 150You can set a calendar to be the default for new items( "+" column ).
151You can tell KO/Pi to ignore all alarm of a calendar ( "bell" column ) and you can set it readonly. 151You can tell KO/Pi to ignore all alarm of a calendar ( "bell" column ) and you can set it readonly.
152To find out how to add a new calendar and how to remove a calendar is left as an exercise to the reader ... 152To find out how to add a new calendar and how to remove a calendar is left as an exercise to the reader ...
153 153
154 154
155********** VERSION 2.1.5 ************ 155********** VERSION 2.1.5 ************
156 156
157This is the new stable version. 157This is the new stable version.
158Bugfix: 158Bugfix:
159Fixed a problem with agenda popup on the desktop in KO/Pi. 159Fixed a problem with agenda popup on the desktop in KO/Pi.
160Fixed a crash when reloading file, e.g. after a passive pi-sync synchronization. 160Fixed a crash when reloading file, e.g. after a passive pi-sync synchronization.
161Added config option to not display completed todos in agenda view. 161Added config option to not display completed todos in agenda view.
162Addressee view is now using the formatted name, if defined. 162Addressee view is now using the formatted name, if defined.
163That makes it possible to display "lastname, firstname" in that view now. 163That makes it possible to display "lastname, firstname" in that view now.
164To set the formatted name for all contacts, please use menu: 164To set the formatted name for all contacts, please use menu:
165Edit->Change->Set formatted name. 165Edit->Change->Set formatted name.
166Fixed the bug in KA/Pi that is was not possible to add images to a contact on Windows. 166Fixed the bug in KA/Pi that is was not possible to add images to a contact on Windows.
167 167
168********** VERSION 2.1.4 ************ 168********** VERSION 2.1.4 ************
169 169
170Fixed two more bugs in the KA/Pi CSV import dialog: 170Fixed two more bugs in the KA/Pi CSV import dialog:
171Made it possible to read multi-line fields and import it to the "Note" field. 171Made it possible to read multi-line fields and import it to the "Note" field.
172Fixed a problem in mapping custom fields, whatever a custem field is... 172Fixed a problem in mapping custom fields, whatever a custem field is...
173 173
174********** VERSION 2.1.3 ************ 174********** VERSION 2.1.3 ************
175 175
176Changed the menu structure of the alarm applet: 176Changed the menu structure of the alarm applet:
177Moved "Simulate" to " Play Beeps" submenu and re-added "Todo List". 177Moved "Simulate" to " Play Beeps" submenu and re-added "Todo List".
178 178
179Fixed several problems in the KA/Pi CSV import dialog: 179Fixed several problems in the KA/Pi CSV import dialog:
180Added "Category", made codec configureable and made it possible to map many fields to the "Note" field. 180Added "Category", made codec configureable and made it possible to map many fields to the "Note" field.
181 181
182 182
183********** VERSION 2.1.2 ************ 183********** VERSION 2.1.2 ************
184 184
185Fixed a problem closing the alarm dialog on Zaurus with "OK" button. 185Fixed a problem closing the alarm dialog on Zaurus with "OK" button.
186 186
187Fixed a problem when importing data from Outlook with mutiple categories set. 187Fixed a problem when importing data from Outlook with mutiple categories set.
188 188
189Changed display of days in datenavigator: 189Changed display of days in datenavigator:
190Birthdays are now blue, not dark green. 190Birthdays are now blue, not dark green.
191When todo view is shown, no birtdays are shown and days with due todos are shown blue. 191When todo view is shown, no birtdays are shown and days with due todos are shown blue.
192When journal view is shown, only holidays are shown and days with journals are blue. 192When journal view is shown, only holidays are shown and days with journals are blue.
193 193
194Added Backup options to global config: 194Added Backup options to global config:
195You 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 ). 195You 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 ).
196It 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. 196It 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.
197The 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. 197The 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.
198 198
199********** VERSION 2.1.1 ************ 199********** VERSION 2.1.1 ************
200 200
201Stable release 2.1.1! 201Stable release 2.1.1!
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 426e8f9..2582931 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,298 +1,299 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 3
4 Requires the Qt and KDE widget libraries, available at no cost at 4 Requires the Qt and KDE widget libraries, available at no cost at
5 http://www.troll.no and http://www.kde.org respectively 5 http://www.troll.no and http://www.kde.org respectively
6 6
7 Copyright (c) 1997, 1998, 1999 7 Copyright (c) 1997, 1998, 1999
8 Preston Brown (preton.brown@yale.edu) 8 Preston Brown (preton.brown@yale.edu)
9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl) 9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl)
10 Ian Dawes (iadawes@globalserve.net) 10 Ian Dawes (iadawes@globalserve.net)
11 Laszlo Boloni (boloni@cs.purdue.edu) 11 Laszlo Boloni (boloni@cs.purdue.edu)
12 12
13 Copyright (c) 2000, 2001, 2002 13 Copyright (c) 2000, 2001, 2002
14 Cornelius Schumacher <schumacher@kde.org> 14 Cornelius Schumacher <schumacher@kde.org>
15 15
16 This program is free software; you can redistribute it and/or modify 16 This program is free software; you can redistribute it and/or modify
17 it under the terms of the GNU General Public License as published by 17 it under the terms of the GNU General Public License as published by
18 the Free Software Foundation; either version 2 of the License, or 18 the Free Software Foundation; either version 2 of the License, or
19 (at your option) any later version. 19 (at your option) any later version.
20 20
21 This program is distributed in the hope that it will be useful, 21 This program is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of 22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
24 GNU General Public License for more details. 24 GNU General Public License for more details.
25 25
26 You should have received a copy of the GNU General Public License 26 You should have received a copy of the GNU General Public License
27 along with this program; if not, write to the Free Software 27 along with this program; if not, write to the Free Software
28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29*/ 29*/
30 30
31#include <stdlib.h> 31#include <stdlib.h>
32 32
33#include <qapplication.h> 33#include <qapplication.h>
34#include <qradiobutton.h> 34#include <qradiobutton.h>
35#include <qbuttongroup.h> 35#include <qbuttongroup.h>
36#include <qlayout.h> 36#include <qlayout.h>
37#include <qclipboard.h> 37#include <qclipboard.h>
38#include <qcursor.h> 38#include <qcursor.h>
39#include <qmessagebox.h> 39#include <qmessagebox.h>
40#include <qprogressbar.h> 40#include <qprogressbar.h>
41#include <qmultilineedit.h> 41#include <qmultilineedit.h>
42#include <qtimer.h> 42#include <qtimer.h>
43#include <qwidgetstack.h> 43#include <qwidgetstack.h>
44#include <qptrlist.h> 44#include <qptrlist.h>
45#include <qregexp.h> 45#include <qregexp.h>
46#include <qgroupbox.h> 46#include <qgroupbox.h>
47#include <qfile.h> 47#include <qfile.h>
48#include <qdir.h> 48#include <qdir.h>
49#ifndef KORG_NOSPLITTER 49#ifndef KORG_NOSPLITTER
50#include <qsplitter.h> 50#include <qsplitter.h>
51#endif 51#endif
52 52
53#include <kglobal.h> 53#include <kglobal.h>
54#include <kdebug.h> 54#include <kdebug.h>
55#include <kstandarddirs.h> 55#include <kstandarddirs.h>
56#include <kfiledialog.h> 56#include <kfiledialog.h>
57#include <kmessagebox.h> 57#include <kmessagebox.h>
58#include <knotifyclient.h> 58#include <knotifyclient.h>
59#include <kconfig.h> 59#include <kconfig.h>
60 60
61#include <libkdepim/ksyncprefsdialog.h> 61#include <libkdepim/ksyncprefsdialog.h>
62#include <krun.h> 62#include <krun.h>
63#include <kdirwatch.h> 63#include <kdirwatch.h>
64#include <libkdepim/kdatepicker.h> 64#include <libkdepim/kdatepicker.h>
65#include <libkdepim/ksyncprofile.h> 65#include <libkdepim/ksyncprofile.h>
66#include <libkdepim/kpimglobalprefs.h> 66#include <libkdepim/kpimglobalprefs.h>
67 67
68#include <libkcal/vcaldrag.h> 68#include <libkcal/vcaldrag.h>
69#include <libkcal/icaldrag.h> 69#include <libkcal/icaldrag.h>
70#include <libkcal/icalformat.h> 70#include <libkcal/icalformat.h>
71#include <libkcal/vcalformat.h> 71#include <libkcal/vcalformat.h>
72#include <libkcal/scheduler.h> 72#include <libkcal/scheduler.h>
73#include <libkcal/calendarlocal.h> 73#include <libkcal/calendarlocal.h>
74#include <libkcal/journal.h> 74#include <libkcal/journal.h>
75#include <libkcal/calfilter.h> 75#include <libkcal/calfilter.h>
76#include <libkcal/attendee.h> 76#include <libkcal/attendee.h>
77#include <libkcal/dndfactory.h> 77#include <libkcal/dndfactory.h>
78#include <libkcal/freebusy.h> 78#include <libkcal/freebusy.h>
79#include <libkcal/filestorage.h> 79#include <libkcal/filestorage.h>
80#include <libkcal/calendarresources.h> 80#include <libkcal/calendarresources.h>
81#include <libkcal/qtopiaformat.h> 81#include <libkcal/qtopiaformat.h>
82#include "../kalarmd/alarmdialog.h" 82#include "../kalarmd/alarmdialog.h"
83 83
84#ifndef DESKTOP_VERSION 84#ifndef DESKTOP_VERSION
85#include <libkcal/sharpformat.h> 85#include <libkcal/sharpformat.h>
86#include <externalapphandler.h> 86#include <externalapphandler.h>
87#endif 87#endif
88#include <libkcal/phoneformat.h> 88#include <libkcal/phoneformat.h>
89#ifndef KORG_NOMAIL 89#ifndef KORG_NOMAIL
90#include "komailclient.h" 90#include "komailclient.h"
91#endif 91#endif
92#ifndef KORG_NOPRINTER 92#ifndef KORG_NOPRINTER
93#include "calprinter.h" 93#include "calprinter.h"
94#endif 94#endif
95#ifndef KORG_NOPLUGINS 95#ifndef KORG_NOPLUGINS
96#include "kocore.h" 96#include "kocore.h"
97#endif 97#endif
98#include "koeventeditor.h" 98#include "koeventeditor.h"
99#include "kotodoeditor.h" 99#include "kotodoeditor.h"
100#include "koprefs.h" 100#include "koprefs.h"
101#include "koeventviewerdialog.h" 101#include "koeventviewerdialog.h"
102#include "publishdialog.h" 102#include "publishdialog.h"
103#include "kofilterview.h" 103#include "kofilterview.h"
104#include "koglobals.h" 104#include "koglobals.h"
105#include "koviewmanager.h" 105#include "koviewmanager.h"
106#include "koagendaview.h" 106#include "koagendaview.h"
107#include "koagenda.h"
107#include "kodialogmanager.h" 108#include "kodialogmanager.h"
108#include "outgoingdialog.h" 109#include "outgoingdialog.h"
109#include "incomingdialog.h" 110#include "incomingdialog.h"
110#include "datenavigatorcontainer.h" 111#include "datenavigatorcontainer.h"
111#include "statusdialog.h" 112#include "statusdialog.h"
112#include "kdatenavigator.h" 113#include "kdatenavigator.h"
113#include "kotodoview.h" 114#include "kotodoview.h"
114#include "datenavigator.h" 115#include "datenavigator.h"
115#include "resourceview.h" 116#include "resourceview.h"
116#include "navigatorbar.h" 117#include "navigatorbar.h"
117#include "searchdialog.h" 118#include "searchdialog.h"
118#include "mainwindow.h" 119#include "mainwindow.h"
119#include "categoryeditdialog.h" 120#include "categoryeditdialog.h"
120 121
121#include "calendarview.h" 122#include "calendarview.h"
122#ifndef DESKTOP_VERSION 123#ifndef DESKTOP_VERSION
123#include <qtopia/alarmserver.h> 124#include <qtopia/alarmserver.h>
124#endif 125#endif
125#ifndef _WIN32_ 126#ifndef _WIN32_
126#include <stdlib.h> 127#include <stdlib.h>
127#include <stdio.h> 128#include <stdio.h>
128#include <unistd.h> 129#include <unistd.h>
129#else 130#else
130#include <qprocess.h> 131#include <qprocess.h>
131#endif 132#endif
132 133
133#ifdef DESKTOP_VERSION 134#ifdef DESKTOP_VERSION
134#include <kabc/stdaddressbook.h> 135#include <kabc/stdaddressbook.h>
135#endif 136#endif
136using namespace KOrg; 137using namespace KOrg;
137using namespace KCal; 138using namespace KCal;
138extern int globalFlagBlockAgenda; 139extern int globalFlagBlockAgenda;
139extern int globalFlagBlockStartup; 140extern int globalFlagBlockStartup;
140 141
141 142
142MissedAlarmTextBrowser::MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms,QDateTime start ) : QTextBrowser(parent) 143MissedAlarmTextBrowser::MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms,QDateTime start ) : QTextBrowser(parent)
143 144
144{ 145{
145 mAlarms = alarms; 146 mAlarms = alarms;
146 viewport()->setBackgroundColor( QColor( 255, 255, 255 ) ); 147 viewport()->setBackgroundColor( QColor( 255, 255, 255 ) );
147 QString mText = "<table width=\"100%\">\n"; 148 QString mText = "<table width=\"100%\">\n";
148 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>"; 149 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>";
149#ifdef DESKTOP_VERSION 150#ifdef DESKTOP_VERSION
150 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>"; 151 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>";
151#else 152#else
152 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h3>"; 153 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h3>";
153#endif 154#endif
154 // mText += "<img src=\""; 155 // mText += "<img src=\"";
155 // mText += ipath; 156 // mText += ipath;
156 // mText += "\">"; 157 // mText += "\">";
157 //mEventDate = QDate::currentDate(); 158 //mEventDate = QDate::currentDate();
158#ifdef DESKTOP_VERSION 159#ifdef DESKTOP_VERSION
159 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h2>"; 160 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h2>";
160#else 161#else
161 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h3>"; 162 mText += "<font color=\"#FFFFFF\"> <em>" + i18n("You missed the alarms for the following events or todos:")+"</em></font></h3>";
162#endif 163#endif
163 //mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>"; 164 //mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>";
164 165
165 Incidence * inc = getNextInc( start ); 166 Incidence * inc = getNextInc( start );
166 int time = 0; 167 int time = 0;
167 //mText += "<table>"; 168 //mText += "<table>";
168 while ( inc ) { 169 while ( inc ) {
169 QDateTime dt ; 170 QDateTime dt ;
170 QString tempText = "<a "; 171 QString tempText = "<a ";
171 bool ok; 172 bool ok;
172 dt = inc->getNextOccurence( start, &ok ); 173 dt = inc->getNextOccurence( start, &ok );
173 if ( !ok ) continue; 174 if ( !ok ) continue;
174 if ( inc->typeID() == eventID ) { 175 if ( inc->typeID() == eventID ) {
175 tempText += "href=\"event:"; 176 tempText += "href=\"event:";
176 } else if ( inc->typeID() == todoID ) { 177 } else if ( inc->typeID() == todoID ) {
177 tempText += "href=\"todo:"; 178 tempText += "href=\"todo:";
178 } 179 }
179 tempText += inc->uid() + "\">"; 180 tempText += inc->uid() + "\">";
180 if ( inc->typeID() == todoID ) 181 if ( inc->typeID() == todoID )
181 tempText += i18n("Todo: "); 182 tempText += i18n("Todo: ");
182 if ( inc->summary().length() > 0 ) 183 if ( inc->summary().length() > 0 )
183 tempText += inc->summary(); 184 tempText += inc->summary();
184 else 185 else
185 tempText += i18n("-no summary-"); 186 tempText += i18n("-no summary-");
186 QString timestr; 187 QString timestr;
187 if (!inc->doesFloat()) 188 if (!inc->doesFloat())
188 timestr = KGlobal::locale()->formatDateTime( dt, KOPrefs::instance()->mShortDateInViewer) +": "; 189 timestr = KGlobal::locale()->formatDateTime( dt, KOPrefs::instance()->mShortDateInViewer) +": ";
189 else 190 else
190 timestr = KGlobal::locale()->formatDate( dt.date() , KOPrefs::instance()->mShortDateInViewer) +": "; 191 timestr = KGlobal::locale()->formatDate( dt.date() , KOPrefs::instance()->mShortDateInViewer) +": ";
191 if ( dt.date() < QDate::currentDate() && time == 0 ) { 192 if ( dt.date() < QDate::currentDate() && time == 0 ) {
192 mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>"; 193 mText += "</td></tr>\n<tr bgcolor=\"#FF997D\"><td>";
193 mText += "<table>"; 194 mText += "<table>";
194 time = 1; 195 time = 1;
195 } 196 }
196 if ( dt.date() == QDate::currentDate() && time <= 1 ) { 197 if ( dt.date() == QDate::currentDate() && time <= 1 ) {
197 if ( time > 0 ) 198 if ( time > 0 )
198 mText +="</table>"; 199 mText +="</table>";
199 mText += "</td></tr>\n<tr bgcolor=\"#FFDC64\"><td>"; 200 mText += "</td></tr>\n<tr bgcolor=\"#FFDC64\"><td>";
200 mText += "<table>"; 201 mText += "<table>";
201 time = 2; 202 time = 2;
202 203
203 } 204 }
204 if ( dt.date() > QDate::currentDate() && time <= 2 ) { 205 if ( dt.date() > QDate::currentDate() && time <= 2 ) {
205 if ( time > 0 ) 206 if ( time > 0 )
206 mText +="</table>"; 207 mText +="</table>";
207 mText += "</td></tr>\n<tr bgcolor=\"#6AFF6A\"><td>"; 208 mText += "</td></tr>\n<tr bgcolor=\"#6AFF6A\"><td>";
208 mText += "<table>"; 209 mText += "<table>";
209 time = 3; 210 time = 3;
210 } 211 }
211 mText +="<tr><td><b>"; 212 mText +="<tr><td><b>";
212 mText += timestr; 213 mText += timestr;
213 mText += "</b></td><td>"; 214 mText += "</b></td><td>";
214 mText += tempText; 215 mText += tempText;
215 mText += "</td></tr>\n"; 216 mText += "</td></tr>\n";
216 inc = getNextInc( start ); 217 inc = getNextInc( start );
217 } 218 }
218 mText +="</table>"; 219 mText +="</table>";
219 setText( mText ); 220 setText( mText );
220} 221}
221 222
222MissedAlarmTextBrowser::~MissedAlarmTextBrowser() 223MissedAlarmTextBrowser::~MissedAlarmTextBrowser()
223{ 224{
224 //qDebug("delete MissedAlarmTextBrowser::~MissedAlarmTextBrowser() "); 225 //qDebug("delete MissedAlarmTextBrowser::~MissedAlarmTextBrowser() ");
225} 226}
226Incidence * MissedAlarmTextBrowser::getNextInc( QDateTime start ) 227Incidence * MissedAlarmTextBrowser::getNextInc( QDateTime start )
227{ 228{
228 QDateTime dt ; 229 QDateTime dt ;
229 Incidence * retInc; 230 Incidence * retInc;
230 Incidence * inc = mAlarms.first(); 231 Incidence * inc = mAlarms.first();
231 if ( inc == 0 ) 232 if ( inc == 0 )
232 return 0; 233 return 0;
233 bool ok; 234 bool ok;
234 dt = inc->getNextOccurence( start, &ok ); 235 dt = inc->getNextOccurence( start, &ok );
235 if ( ! ok ) return 0; 236 if ( ! ok ) return 0;
236 QDateTime dtn ; 237 QDateTime dtn ;
237 retInc = inc; 238 retInc = inc;
238 inc = mAlarms.next(); 239 inc = mAlarms.next();
239 while ( inc ) { 240 while ( inc ) {
240 dtn = inc->getNextOccurence( start, &ok ); 241 dtn = inc->getNextOccurence( start, &ok );
241 if ( ! ok ) return 0; 242 if ( ! ok ) return 0;
242 if ( dtn < dt ) { 243 if ( dtn < dt ) {
243 dt = dtn; 244 dt = dtn;
244 retInc = inc; 245 retInc = inc;
245 } 246 }
246 inc = mAlarms.next(); 247 inc = mAlarms.next();
247 } 248 }
248 mAlarms.remove( retInc ); 249 mAlarms.remove( retInc );
249 return retInc; 250 return retInc;
250 251
251} 252}
252void MissedAlarmTextBrowser::setSource(const QString & n) 253void MissedAlarmTextBrowser::setSource(const QString & n)
253{ 254{
254 if (n.startsWith("event:")) { 255 if (n.startsWith("event:")) {
255#ifdef DESKTOP_VERSION 256#ifdef DESKTOP_VERSION
256 emit showIncidence(n.mid(8)); 257 emit showIncidence(n.mid(8));
257#else 258#else
258 emit showIncidence(n.mid(6)); 259 emit showIncidence(n.mid(6));
259#endif 260#endif
260 return; 261 return;
261 } else if (n.startsWith("todo:")) { 262 } else if (n.startsWith("todo:")) {
262#ifdef DESKTOP_VERSION 263#ifdef DESKTOP_VERSION
263 emit showIncidence(n.mid(7)); 264 emit showIncidence(n.mid(7));
264#else 265#else
265 emit showIncidence(n.mid(5)); 266 emit showIncidence(n.mid(5));
266#endif 267#endif
267 return; 268 return;
268 } 269 }
269} 270}
270 271
271 272
272class KOBeamPrefs : public QDialog 273class KOBeamPrefs : public QDialog
273{ 274{
274 public: 275 public:
275 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : 276 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) :
276 QDialog( parent, name, true ) 277 QDialog( parent, name, true )
277 { 278 {
278 setCaption( i18n("Beam Options") ); 279 setCaption( i18n("Beam Options") );
279 QVBoxLayout* lay = new QVBoxLayout( this ); 280 QVBoxLayout* lay = new QVBoxLayout( this );
280 lay->setSpacing( 3 ); 281 lay->setSpacing( 3 );
281 lay->setMargin( 3 ); 282 lay->setMargin( 3 );
282 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); 283 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this );
283 lay->addWidget( format ); 284 lay->addWidget( format );
284 format->setExclusive ( true ) ; 285 format->setExclusive ( true ) ;
285 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); 286 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this );
286 lay->addWidget( time ); time->setExclusive ( true ) ; 287 lay->addWidget( time ); time->setExclusive ( true ) ;
287 vcal = new QRadioButton(" vCalendar ", format ); 288 vcal = new QRadioButton(" vCalendar ", format );
288 ical = new QRadioButton(" iCalendar ", format ); 289 ical = new QRadioButton(" iCalendar ", format );
289 vcal->setChecked( true ); 290 vcal->setChecked( true );
290 tz = new QRadioButton(i18n(" With timezone "), time ); 291 tz = new QRadioButton(i18n(" With timezone "), time );
291 local = new QRadioButton(i18n(" Local time "), time ); 292 local = new QRadioButton(i18n(" Local time "), time );
292 tz->setChecked( true ); 293 tz->setChecked( true );
293 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); 294 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this );
294 lay->addWidget( ok ); 295 lay->addWidget( ok );
295 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 296 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
296 lay->addWidget( cancel ); 297 lay->addWidget( cancel );
297 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 298 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
298 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 299 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
@@ -474,498 +475,445 @@ void CalendarView::init()
474 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) ); 475 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) );
475 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) ); 476 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) );
476 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) ); 477 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) );
477 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() )); 478 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() ));
478 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) ); 479 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) );
479 480
480 mTodoList->setNavigator( mNavigator ); 481 mTodoList->setNavigator( mNavigator );
481#if 0 482#if 0
482 if ( QApplication::desktop()->width() < 480 ) { 483 if ( QApplication::desktop()->width() < 480 ) {
483 leftFrameLayout->addWidget(mFilterView); 484 leftFrameLayout->addWidget(mFilterView);
484 leftFrameLayout->addWidget(mTodoList, 2 ); 485 leftFrameLayout->addWidget(mTodoList, 2 );
485 486
486 } else { 487 } else {
487 leftFrameLayout->addWidget(mTodoList,2 ); 488 leftFrameLayout->addWidget(mTodoList,2 );
488 leftFrameLayout->addWidget(mFilterView ); 489 leftFrameLayout->addWidget(mFilterView );
489 } 490 }
490#endif 491#endif
491 mFilterView->hide(); 492 mFilterView->hide();
492 mCalEditView->hide(); 493 mCalEditView->hide();
493 QWidget *rightBox = new QWidget( mMainFrame ); 494 QWidget *rightBox = new QWidget( mMainFrame );
494 //mainBoxLayout->addWidget ( rightBox, 10 ); 495 //mainBoxLayout->addWidget ( rightBox, 10 );
495 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 496 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
496 mRightFrame = new QWidgetStack( rightBox ); 497 mRightFrame = new QWidgetStack( rightBox );
497 rightLayout->addWidget( mRightFrame, 10 ); 498 rightLayout->addWidget( mRightFrame, 10 );
498 499
499 //mLeftFrame = (QWidget *)leftFrame; 500 //mLeftFrame = (QWidget *)leftFrame;
500 if ( KOPrefs::instance()->mVerticalScreen ) { 501 if ( KOPrefs::instance()->mVerticalScreen ) {
501 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() ); 502 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() );
502 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() ); 503 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() );
503 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); 504 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() );
504 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); 505 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() );
505 } else { 506 } else {
506 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() ); 507 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() );
507 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); 508 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() );
508 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); 509 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() );
509 } 510 }
510 if ( !KOPrefs::instance()->mShowDateNavigator) 511 if ( !KOPrefs::instance()->mShowDateNavigator)
511 mDateNavigator->hide(); 512 mDateNavigator->hide();
512 //qDebug("Calendarview Size %d %d ", width(), height()); 513 //qDebug("Calendarview Size %d %d ", width(), height());
513#endif 514#endif
514 515
515 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 516 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
516 SLOT( showDates( const KCal::DateList & ) ) ); 517 SLOT( showDates( const KCal::DateList & ) ) );
517 518
518 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 519 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
519 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 520 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
520 521
521 522
522 523
523 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ), 524 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ),
524 mViewManager, SLOT( showMonth( const QDate & ) ) ); 525 mViewManager, SLOT( showMonth( const QDate & ) ) );
525 526
526 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), 527 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ),
527 mNavigator, SLOT( selectWeek( const QDate & ) ) ); 528 mNavigator, SLOT( selectWeek( const QDate & ) ) );
528 529
529 connect( mDateNavigator, SIGNAL( goPrevYear() ), 530 connect( mDateNavigator, SIGNAL( goPrevYear() ),
530 mNavigator, SLOT( selectPreviousYear() ) ); 531 mNavigator, SLOT( selectPreviousYear() ) );
531 connect( mDateNavigator, SIGNAL( goNextYear() ), 532 connect( mDateNavigator, SIGNAL( goNextYear() ),
532 mNavigator, SLOT( selectNextYear() ) ); 533 mNavigator, SLOT( selectNextYear() ) );
533 connect( mDateNavigator, SIGNAL( goPrevMonth() ), 534 connect( mDateNavigator, SIGNAL( goPrevMonth() ),
534 mNavigator, SLOT( selectPreviousMonth() ) ); 535 mNavigator, SLOT( selectPreviousMonth() ) );
535 connect( mDateNavigator, SIGNAL( goNextMonth() ), 536 connect( mDateNavigator, SIGNAL( goNextMonth() ),
536 mNavigator, SLOT( selectNextMonth() ) ); 537 mNavigator, SLOT( selectNextMonth() ) );
537 538
538 connect( mDateNavigator, SIGNAL( goPrevious() ), 539 connect( mDateNavigator, SIGNAL( goPrevious() ),
539 mNavigator, SLOT( selectPrevious() ) ); 540 mNavigator, SLOT( selectPrevious() ) );
540 connect( mDateNavigator, SIGNAL( goNext() ), 541 connect( mDateNavigator, SIGNAL( goNext() ),
541 mNavigator, SLOT( selectNext() ) ); 542 mNavigator, SLOT( selectNext() ) );
542 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), 543 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ),
543 mNavigator, SLOT( slotMonthSelect( int ) ) ); 544 mNavigator, SLOT( slotMonthSelect( int ) ) );
544 545
545 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 546 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
546 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 547 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
547#if 0 548#if 0
548 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ), 549 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ),
549 SLOT( incidenceAdded( Incidence *) ) ); 550 SLOT( incidenceAdded( Incidence *) ) );
550#endif 551#endif
551 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); 552 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView()));
552 553
553 connect( this, SIGNAL( configChanged() ), 554 connect( this, SIGNAL( configChanged() ),
554 mDateNavigator, SLOT( updateConfig() ) ); 555 mDateNavigator, SLOT( updateConfig() ) );
555 556
556 connect( mTodoList, SIGNAL( newTodoSignal() ), 557 connect( mTodoList, SIGNAL( newTodoSignal() ),
557 SLOT( newTodo() ) ); 558 SLOT( newTodo() ) );
558 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), 559 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ),
559 SLOT( newSubTodo( Todo * ) ) ); 560 SLOT( newSubTodo( Todo * ) ) );
560 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), 561 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ),
561 SLOT( editTodo( Todo * ) ) ); 562 SLOT( editTodo( Todo * ) ) );
562 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), 563 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ),
563 SLOT( showTodo( Todo *) ) ); 564 SLOT( showTodo( Todo *) ) );
564 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), 565 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ),
565 SLOT( deleteTodo( Todo *) ) ); 566 SLOT( deleteTodo( Todo *) ) );
566 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); 567 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) );
567 connect( mTodoList, SIGNAL( purgeCompletedSignal() ), 568 connect( mTodoList, SIGNAL( purgeCompletedSignal() ),
568 SLOT( purgeCompleted() ) ); 569 SLOT( purgeCompleted() ) );
569 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), 570 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ),
570 SIGNAL( todoModified( Todo *, int ) ) ); 571 SIGNAL( todoModified( Todo *, int ) ) );
571 572
572 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), 573 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ),
573 this, SLOT ( cloneIncidence( Incidence * ) ) ); 574 this, SLOT ( cloneIncidence( Incidence * ) ) );
574 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), 575 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ),
575 this, SLOT (cancelIncidence( Incidence * ) ) ); 576 this, SLOT (cancelIncidence( Incidence * ) ) );
576 577
577 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), 578 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ),
578 this, SLOT ( moveIncidence( Incidence * ) ) ); 579 this, SLOT ( moveIncidence( Incidence * ) ) );
579 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), 580 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ),
580 this, SLOT ( beamIncidence( Incidence * ) ) ); 581 this, SLOT ( beamIncidence( Incidence * ) ) );
581 582
582 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), 583 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ),
583 this, SLOT ( todo_unsub( Todo * ) ) ); 584 this, SLOT ( todo_unsub( Todo * ) ) );
584 585
585 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ), 586 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ),
586 this, SLOT ( todo_resub( Todo *,Todo * ) ) ); 587 this, SLOT ( todo_resub( Todo *,Todo * ) ) );
587 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, 588 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList,
588 SLOT( updateTodo( Todo *, int ) ) ); 589 SLOT( updateTodo( Todo *, int ) ) );
589 connect( this, SIGNAL( todoModified( Todo *, int )), this, 590 connect( this, SIGNAL( todoModified( Todo *, int )), this,
590 SLOT( changeTodoDisplay( Todo *, int ) ) ); 591 SLOT( changeTodoDisplay( Todo *, int ) ) );
591 592
592 593
593 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); 594 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) );
594 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); 595 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) );
595 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); 596 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) );
596 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); 597 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) );
597 598
598 599
599 600
600 601
601 602
602 connect(QApplication::clipboard(),SIGNAL(dataChanged()), 603 connect(QApplication::clipboard(),SIGNAL(dataChanged()),
603 SLOT(checkClipboard())); 604 SLOT(checkClipboard()));
604 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), 605 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ),
605 SLOT( processTodoListSelection( Incidence * ) ) ); 606 SLOT( processTodoListSelection( Incidence * ) ) );
606 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); 607 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool)));
607 608
608 // kdDebug() << "CalendarView::CalendarView() done" << endl; 609 // kdDebug() << "CalendarView::CalendarView() done" << endl;
609 610
610 mDateFrame = new QVBox(0,0,WType_Popup); 611 mDateFrame = new QVBox(0,0,WType_Popup);
611 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 612 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
612 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 613 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
613 mDateFrame->setLineWidth(3); 614 mDateFrame->setLineWidth(3);
614 mDateFrame->hide(); 615 mDateFrame->hide();
615 mDateFrame->setCaption( i18n( "Pick a date to display")); 616 mDateFrame->setCaption( i18n( "Pick a date to display"));
616 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); 617 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() );
617 618
618 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); 619 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate)));
619 620
620 mEventEditor = mDialogManager->getEventEditor(); 621 mEventEditor = mDialogManager->getEventEditor();
621 mTodoEditor = mDialogManager->getTodoEditor(); 622 mTodoEditor = mDialogManager->getTodoEditor();
622 623
623 mFlagEditDescription = false; 624 mFlagEditDescription = false;
624 625
625 mSuspendTimer = new QTimer( this ); 626 mSuspendTimer = new QTimer( this );
626 mAlarmTimer = new QTimer( this ); 627 mAlarmTimer = new QTimer( this );
627 mRecheckAlarmTimer = new QTimer( this ); 628 mRecheckAlarmTimer = new QTimer( this );
628 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); 629 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
629 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); 630 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
630 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); 631 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
631 mAlarmDialog = new AlarmDialog( this ); 632 mAlarmDialog = new AlarmDialog( this );
632 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); 633 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
633 mAlarmDialog->setServerNotification( false ); 634 mAlarmDialog->setServerNotification( false );
634 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); 635 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
635 636
636 637
637#ifndef DESKTOP_VERSION 638#ifndef DESKTOP_VERSION
638//US listen for arriving address resultsets 639//US listen for arriving address resultsets
639 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), 640 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)),
640 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&))); 641 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)));
641#endif 642#endif
642 mDateNavigator->setCalendar( mCalendar ); 643 mDateNavigator->setCalendar( mCalendar );
643} 644}
644 645
645 646
646CalendarView::~CalendarView() 647CalendarView::~CalendarView()
647{ 648{
648 // kdDebug() << "~CalendarView()" << endl; 649 // kdDebug() << "~CalendarView()" << endl;
649 //qDebug("CalendarView::~CalendarView() "); 650 //qDebug("CalendarView::~CalendarView() ");
650 delete mDialogManager; 651 delete mDialogManager;
651 delete mViewManager; 652 delete mViewManager;
652 delete mStorage; 653 delete mStorage;
653 delete mDateFrame ; 654 delete mDateFrame ;
654 delete mEventViewerDialog; 655 delete mEventViewerDialog;
655 //kdDebug() << "~CalendarView() done" << endl; 656 //kdDebug() << "~CalendarView() done" << endl;
656} 657}
657void CalendarView::nextConflict( bool all, bool allday ) 658void CalendarView::nextConflict( bool all, bool allday )
658{ 659{
659 660
660 QPtrList<Event> testlist = mCalendar->events(); 661 QPtrList<Event> testlist = mCalendar->events();
661 Event * test = testlist.first(); 662 Event * test = testlist.first();
662 while ( test ) { 663 while ( test ) {
663 test->setTagged( false ); 664 test->setTagged( false );
664 test = testlist.next(); 665 test = testlist.next();
665 } 666 }
666 QDateTime startDT = QDateTime (mNavigator->selectedDates().first().addDays(1), QTime ( 0,0,0)); 667 QTime st ( 0,0,0);
668 if ( mViewManager->currentView() == mViewManager->agendaView() )
669 st = mViewManager->agendaView()->agenda()->getEndTime();
670 //qDebug("time %s ", st.toString().latin1());
671 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st);
667 QDateTime conflict; 672 QDateTime conflict;
668 QDateTime retVal; 673 QDateTime retVal;
669 bool found = false; 674 bool found = false;
670 Event * cE = 0; 675 Event * cE = 0;
671 Event * cE2 = 0; 676 Event * cE2 = 0;
672 QPtrList<Event> testlist2 = testlist; 677 QPtrList<Event> testlist2 = testlist;
673 test = testlist.first(); 678 test = testlist.first();
674 bool skip = false; 679 bool skip = false;
675 while ( test ) { 680 while ( test ) {
676 skip = false; 681 skip = false;
677 if ( !all ) skip = ( allday != test->doesFloat() ); 682 if ( !all ) skip = ( allday != test->doesFloat() );
678 if ( !skip ) { 683 if ( !skip ) {
679 Event * test2 = testlist2.first(); 684 Event * test2 = testlist2.first();
680 while ( test2 ) { 685 while ( test2 ) {
681 skip = false; 686 skip = false;
682 if ( !all ) skip = ( allday != test2->doesFloat() ); 687 if ( !all ) skip = ( allday != test2->doesFloat() );
683 if ( !skip ) { 688 if ( !skip ) {
684 if ( !test2->isTagged() ) { 689 if ( !test2->isTagged() ) {
685 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) { 690 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) {
686 //qDebug("overlap "); 691 //qDebug("overlap ");
687 if ( ! found ) { 692 if ( ! found ) {
688 if ( retVal >= startDT ) { 693 if ( retVal >= startDT ) {
689 conflict = retVal; 694 conflict = retVal;
690 cE = test; 695 cE = test;
691 cE2 = test2; 696 cE2 = test2;
692 found = true; 697 found = true;
693 } 698 }
694 } else { 699 } else {
695 if ( retVal >= startDT && retVal < conflict ) { 700 if ( retVal >= startDT && retVal < conflict ) {
696 conflict = retVal; 701 conflict = retVal;
697 cE = test; 702 cE = test;
698 cE2 = test2; 703 cE2 = test2;
699 } 704 }
700 } 705 }
701 } 706 }
702 } 707 }
703 } 708 }
704 test2 = testlist2.next(); 709 test2 = testlist2.next();
705 } 710 }
706 } 711 }
707 test->setTagged( true ); 712 test->setTagged( true );
708 test = testlist.next(); 713 test = testlist.next();
709 } 714 }
710 if ( found ) { 715 if ( found ) {
711 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 716 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
712 mViewManager->showDayView(); 717 mViewManager->showDayView();
713 mNavigator->slotDaySelect( conflict.date() ); 718 mNavigator->slotDaySelect( conflict.date() );
714 int hour = conflict.time().hour(); 719 int hour = conflict.time().hour();
715 mViewManager->agendaView()->setStartHour( hour ); 720 mViewManager->agendaView()->setStartHour( hour );
716 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) ); 721 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) );
717 return; 722 return;
718 } 723 }
719 724
720 topLevelWidget()->setCaption( i18n("No conflict found") ); 725 topLevelWidget()->setCaption( i18n("No conflict found") );
721 qDebug("No conflict found "); 726 qDebug("No conflict found ");
722 return; 727 return;
723
724
725
726
727
728#if 0
729
730
731 QDate end = start.addDays( 365*2);
732 while ( start < end ) {
733 QPtrList<Event> eventList = calendar()->events( start );
734 Event * ev = eventList.first();
735 QPtrList<Event> test = eventList;
736 while ( ev ) {
737 //qDebug("found %d on %s ", eventList.count(), start.toString().latin1());
738 Event * t_ev = test.first();
739 QDateTime es = ev->dtStart();
740 QDateTime ee = ev->dtEnd();
741 if ( ev->doesFloat() )
742 ee = ee.addDays( 1 );
743 if ( ! all ) {
744 if ( ev->doesFloat() != allday )
745 t_ev = 0;
746 }
747 while ( t_ev ) {
748 bool skip = false;
749 if ( ! all ) {
750 if ( t_ev->doesFloat() != allday )
751 skip = true;
752 }
753 if ( !skip && ev != t_ev ) {
754 QDateTime ets = t_ev->dtStart();
755 QDateTime ete = t_ev->dtEnd();
756 if ( t_ev->doesFloat() )
757 ete = ete.addDays( 1 );
758 //qDebug("test %s -- %s -------- %s -- %s ", es.toString().latin1() , ee.toString().latin1(), ets.toString().latin1() , ete.toString().latin1() );
759 if ( es < ete && ets < ee ) {
760 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
761 mViewManager->showDayView();
762 mNavigator->slotDaySelect( start );
763 int hour = es.time().hour();
764 if ( ets > es )
765 hour = ets.time().hour();
766 mViewManager->agendaView()->setStartHour( hour );
767 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( ev->summary().left( 20 ) ).arg( t_ev->summary().left( 20 ) ) );
768 return;
769 }
770 }
771 t_ev = test.next();
772 }
773 ev = eventList.next();
774 }
775 start = start.addDays( 1 );
776 }
777 topLevelWidget()->setCaption( i18n("No conflict found within the next two years") );
778 qDebug("No conflict found ");
779#endif
780} 728}
781 729
782void CalendarView::conflictAll() 730void CalendarView::conflictAll()
783{ 731{
784 nextConflict ( true, true ); 732 nextConflict ( true, true );
785} 733}
786void CalendarView::conflictAllday() 734void CalendarView::conflictAllday()
787{ 735{
788 nextConflict ( false, true ); 736 nextConflict ( false, true );
789} 737}
790void CalendarView::conflictNotAll() 738void CalendarView::conflictNotAll()
791{ 739{
792 nextConflict ( false, false ); 740 nextConflict ( false, false );
793} 741}
794 742
795void CalendarView::setCalReadOnly( int id, bool readO ) 743void CalendarView::setCalReadOnly( int id, bool readO )
796{ 744{
797 if ( readO ) { 745 if ( readO ) {
798 emit save(); 746 emit save();
799 } 747 }
800 mCalendar->setReadOnly( id, readO ); 748 mCalendar->setReadOnly( id, readO );
801} 749}
802void CalendarView::setScrollBarStep(int val ) 750void CalendarView::setScrollBarStep(int val )
803{ 751{
804#ifdef DESKTOP_VERSION 752#ifdef DESKTOP_VERSION
805 mDateScrollBar->setLineStep ( val ); 753 mDateScrollBar->setLineStep ( val );
806#endif 754#endif
807} 755}
808void CalendarView::scrollBarValue(int val ) 756void CalendarView::scrollBarValue(int val )
809{ 757{
810#ifdef DESKTOP_VERSION 758#ifdef DESKTOP_VERSION
811 if ( QApplication::desktop()->width() < 800 ) return; 759 if ( QApplication::desktop()->width() < 800 ) return;
812 static bool block = false; 760 static bool block = false;
813 if ( block ) return; 761 if ( block ) return;
814 block = true; 762 block = true;
815 int count = mNavigator->selectedDates().count(); 763 int count = mNavigator->selectedDates().count();
816 int day = mNavigator->selectedDates().first().dayOfYear(); 764 int day = mNavigator->selectedDates().first().dayOfYear();
817 int stepdays = val; 765 int stepdays = val;
818 if ( mDateScrollBar->lineStep () <= count ) { 766 if ( mDateScrollBar->lineStep () <= count ) {
819 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 767 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
820 //qDebug("VAL %d ",val ); 768 //qDebug("VAL %d ",val );
821 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 769 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
822 stepdays = day+stepdays; 770 stepdays = day+stepdays;
823 if ( stepdays < 0 ) stepdays = 0; 771 if ( stepdays < 0 ) stepdays = 0;
824 } 772 }
825 if ( stepdays == day ) { 773 if ( stepdays == day ) {
826 block = false; 774 block = false;
827 return; 775 return;
828 } 776 }
829 int year = mNavigator->selectedDates().first().year(); 777 int year = mNavigator->selectedDates().first().year();
830 QDate d ( year,1,1 ); 778 QDate d ( year,1,1 );
831 mNavigator->selectDates( d.addDays( stepdays-1) , count ); 779 mNavigator->selectDates( d.addDays( stepdays-1) , count );
832 block = false; 780 block = false;
833#endif 781#endif
834 782
835} 783}
836void CalendarView::updateView(const QDate &start, const QDate &end) 784void CalendarView::updateView(const QDate &start, const QDate &end)
837{ 785{
838#ifdef DESKTOP_VERSION 786#ifdef DESKTOP_VERSION
839 if ( ! mDateScrollBar->draggingSlider () ) { 787 if ( ! mDateScrollBar->draggingSlider () ) {
840 int dof = start.dayOfYear(); 788 int dof = start.dayOfYear();
841 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() ); 789 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() );
842 if ( dof != mDateScrollBar->value() ) { 790 if ( dof != mDateScrollBar->value() ) {
843 mDateScrollBar->blockSignals( true ); 791 mDateScrollBar->blockSignals( true );
844 mDateScrollBar->setValue( start.dayOfYear()); 792 mDateScrollBar->setValue( start.dayOfYear());
845 mDateScrollBar->blockSignals( false ); 793 mDateScrollBar->blockSignals( false );
846 } 794 }
847 } 795 }
848#endif 796#endif
849 mTodoList->updateView(); 797 mTodoList->updateView();
850 mViewManager->updateView(start, end); 798 mViewManager->updateView(start, end);
851 //mDateNavigator->updateView(); 799 //mDateNavigator->updateView();
852} 800}
853 801
854 802
855 803
856void CalendarView::checkFiles() 804void CalendarView::checkFiles()
857{ 805{
858 QString message; 806 QString message;
859 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 807 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
860 KopiCalendarFile * cal = calendars.first(); 808 KopiCalendarFile * cal = calendars.first();
861 while ( cal ) { 809 while ( cal ) {
862 if ( cal->mErrorOnLoad ) { 810 if ( cal->mErrorOnLoad ) {
863 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n"; 811 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n";
864 } 812 }
865 cal = calendars.next(); 813 cal = calendars.next();
866 } 814 }
867 if ( !message.isEmpty() ) { 815 if ( !message.isEmpty() ) {
868 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0); 816 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0);
869 KMessageBox::error(this,message, i18n("Loding of calendar(s) failed")); 817 KMessageBox::error(this,message, i18n("Loding of calendar(s) failed"));
870 } 818 }
871 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() )); 819 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() ));
872} 820}
873void CalendarView::checkAlarms() 821void CalendarView::checkAlarms()
874{ 822{
875 823
876 824
877 KConfig *config = KOGlobals::config(); 825 KConfig *config = KOGlobals::config();
878 config->setGroup( "AppRun" ); 826 config->setGroup( "AppRun" );
879 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 827 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
880 int daysto = dt.daysTo( QDate::currentDate() ); 828 int daysto = dt.daysTo( QDate::currentDate() );
881 int days = config->readNumEntry( "LatestProgramStopDays" , daysto); 829 int days = config->readNumEntry( "LatestProgramStopDays" , daysto);
882 dt = dt.addDays( days ); 830 dt = dt.addDays( days );
883 int secto = dt.secsTo( QDateTime::currentDateTime() ); 831 int secto = dt.secsTo( QDateTime::currentDateTime() );
884 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30; 832 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30;
885 //qDebug("KO: Reading program stop %d ", secs); 833 //qDebug("KO: Reading program stop %d ", secs);
886 //secs -= ( 3600 * 24*3 ); // debug only 834 //secs -= ( 3600 * 24*3 ); // debug only
887 QDateTime latest = dt.addSecs ( secs ); 835 QDateTime latest = dt.addSecs ( secs );
888 qDebug("KO: Last termination on %s ", latest.toString().latin1()); 836 qDebug("KO: Last termination on %s ", latest.toString().latin1());
889 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 837 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
890 QPtrList<Incidence> el = mCalendar->rawIncidences(); 838 QPtrList<Incidence> el = mCalendar->rawIncidences();
891 QPtrList<Incidence> al; 839 QPtrList<Incidence> al;
892 Incidence* inL = el.first(); 840 Incidence* inL = el.first();
893 QDateTime cur = QDateTime::currentDateTime().addSecs(-59); 841 QDateTime cur = QDateTime::currentDateTime().addSecs(-59);
894 qDebug("KO: Checking alarm until %s ", cur.toString().latin1()); 842 qDebug("KO: Checking alarm until %s ", cur.toString().latin1());
895 while ( inL ) { 843 while ( inL ) {
896 bool ok = false; 844 bool ok = false;
897 int offset = 0; 845 int offset = 0;
898 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ; 846 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ;
899 if ( ok ) { 847 if ( ok ) {
900 //qDebug("OK %s",next.toString().latin1()); 848 //qDebug("OK %s",next.toString().latin1());
901 if ( next < cur ) { 849 if ( next < cur ) {
902 al.append( inL ); 850 al.append( inL );
903 //qDebug("found missed alarm: %s ", inL->summary().latin1() ); 851 //qDebug("found missed alarm: %s ", inL->summary().latin1() );
904 } 852 }
905 } 853 }
906 inL = el.next(); 854 inL = el.next();
907 } 855 }
908 if ( al.count() ) { 856 if ( al.count() ) {
909 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop ); 857 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop );
910 dia->setCaption( i18n("KO/Pi: Missing alarms!") ); 858 dia->setCaption( i18n("KO/Pi: Missing alarms!") );
911 QVBoxLayout* lay = new QVBoxLayout( dia ); 859 QVBoxLayout* lay = new QVBoxLayout( dia );
912 lay->setSpacing( 0 ); 860 lay->setSpacing( 0 );
913 lay->setMargin( 0 ); 861 lay->setMargin( 0 );
914 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest ); 862 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest );
915 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 863 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
916 lay->addWidget( matb ); 864 lay->addWidget( matb );
917 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) { 865 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) {
918 int wid = 210; 866 int wid = 210;
919 int x = QApplication::desktop()->width() - wid - 7; 867 int x = QApplication::desktop()->width() - wid - 7;
920 int y = QApplication::desktop()->height() - wid - 70; 868 int y = QApplication::desktop()->height() - wid - 70;
921 dia->setGeometry ( x,y,wid,wid); 869 dia->setGeometry ( x,y,wid,wid);
922 } else { 870 } else {
923 int si = 220; 871 int si = 220;
924 if ( QApplication::desktop()->width() > 470 ) 872 if ( QApplication::desktop()->width() > 470 )
925 si = 400; 873 si = 400;
926 dia->resize(si,si/2); 874 dia->resize(si,si/2);
927 } 875 }
928 dia->setBackgroundColor( QColor( 255, 255, 255 ) ); 876 dia->setBackgroundColor( QColor( 255, 255, 255 ) );
929 dia->show(); 877 dia->show();
930 878
931 } 879 }
932} 880}
933void CalendarView::showDay( QDate d ) 881void CalendarView::showDay( QDate d )
934{ 882{
935 dateNavigator()->blockSignals( true ); 883 dateNavigator()->blockSignals( true );
936 dateNavigator()->selectDate( d ); 884 dateNavigator()->selectDate( d );
937 dateNavigator()->blockSignals( false ); 885 dateNavigator()->blockSignals( false );
938 mViewManager->showDayView(); 886 mViewManager->showDayView();
939 //dateNavigator()->selectDate( d ); 887 //dateNavigator()->selectDate( d );
940} 888}
941void CalendarView::timerAlarm() 889void CalendarView::timerAlarm()
942{ 890{
943 //qDebug("CalendarView::timerAlarm() "); 891 //qDebug("CalendarView::timerAlarm() ");
944 computeAlarm(mAlarmNotification ); 892 computeAlarm(mAlarmNotification );
945} 893}
946 894
947void CalendarView::suspendAlarm() 895void CalendarView::suspendAlarm()
948{ 896{
949 //qDebug(" CalendarView::suspendAlarm() "); 897 //qDebug(" CalendarView::suspendAlarm() ");
950 computeAlarm(mSuspendAlarmNotification ); 898 computeAlarm(mSuspendAlarmNotification );
951 899
952} 900}
953 901
954void CalendarView::startAlarm( QString mess , QString filename) 902void CalendarView::startAlarm( QString mess , QString filename)
955{ 903{
956 904
957 topLevelWidget()->showNormal(); 905 topLevelWidget()->showNormal();
958 topLevelWidget()->setActiveWindow(); 906 topLevelWidget()->setActiveWindow();
959 topLevelWidget()->raise(); 907 topLevelWidget()->raise();
960 908
961 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 909 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
962 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) ); 910 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) );
963 911
964} 912}
965 913
966void CalendarView::checkNextTimerAlarm() 914void CalendarView::checkNextTimerAlarm()
967{ 915{
968 mCalendar->checkAlarmForIncidence( 0, true ); 916 mCalendar->checkAlarmForIncidence( 0, true );
969} 917}
970 918
971void CalendarView::computeAlarm( QString msg ) 919void CalendarView::computeAlarm( QString msg )
diff --git a/korganizer/koagenda.cpp b/korganizer/koagenda.cpp
index b290020..779f12e 100644
--- a/korganizer/koagenda.cpp
+++ b/korganizer/koagenda.cpp
@@ -1444,384 +1444,388 @@ void KOAgenda::drawContentsToPainter( QPainter* paint, bool backgroundOnly )// i
1444 mHighlightPixmap.resize( mGridSpacingX-1, 5 ); 1444 mHighlightPixmap.resize( mGridSpacingX-1, 5 );
1445 mHighlightPixmap.fill ( KOPrefs::instance()->mHighlightColor ); 1445 mHighlightPixmap.fill ( KOPrefs::instance()->mHighlightColor );
1446 } 1446 }
1447 mPixPainter.begin( &mPaintPixmap) ; 1447 mPixPainter.begin( &mPaintPixmap) ;
1448 //qDebug("wid %d hei %d ",mPaintPixmap.width(),mPaintPixmap.height() ); 1448 //qDebug("wid %d hei %d ",mPaintPixmap.width(),mPaintPixmap.height() );
1449 QPainter * p ; 1449 QPainter * p ;
1450 if (paint == 0) { 1450 if (paint == 0) {
1451 mPaintPixmap.fill(KOPrefs::instance()->mAgendaBgColor); 1451 mPaintPixmap.fill(KOPrefs::instance()->mAgendaBgColor);
1452 p = &mPixPainter; 1452 p = &mPixPainter;
1453 } 1453 }
1454 else 1454 else
1455 p = paint ; 1455 p = paint ;
1456 // qDebug("++++++KOAgenda::drawContentsTo Painter %d %d %d %d ", cx, cy, cw, ch); 1456 // qDebug("++++++KOAgenda::drawContentsTo Painter %d %d %d %d ", cx, cy, cw, ch);
1457 1457
1458 //--cx;++cw; 1458 //--cx;++cw;
1459 int lGridSpacingY = mGridSpacingY*2; 1459 int lGridSpacingY = mGridSpacingY*2;
1460 int selDay; 1460 int selDay;
1461 QDate curDate = QDate::currentDate(); 1461 QDate curDate = QDate::currentDate();
1462 if ( !backgroundOnly ) { 1462 if ( !backgroundOnly ) {
1463 for ( selDay = 0; selDay < mSelectedDates.count(); ++selDay) 1463 for ( selDay = 0; selDay < mSelectedDates.count(); ++selDay)
1464 { 1464 {
1465 if ( mSelectedDates[selDay] == curDate && KOPrefs::instance()->mHighlightCurrentDay) { 1465 if ( mSelectedDates[selDay] == curDate && KOPrefs::instance()->mHighlightCurrentDay) {
1466 int x1 = cx; 1466 int x1 = cx;
1467 int y1 = 0; 1467 int y1 = 0;
1468 if (y1 < cy) y1 = cy; 1468 if (y1 < cy) y1 = cy;
1469 int x2 = cx+cw-1; 1469 int x2 = cx+cw-1;
1470 int y2 = contentsHeight(); 1470 int y2 = contentsHeight();
1471 if (y2 > cy+ch-1) y2=cy+ch-1; 1471 if (y2 > cy+ch-1) y2=cy+ch-1;
1472 if (x2 >= x1 && y2 >= y1) { 1472 if (x2 >= x1 && y2 >= y1) {
1473 int gxStart = selDay; 1473 int gxStart = selDay;
1474 int gxEnd = gxStart ; 1474 int gxEnd = gxStart ;
1475 int xStart = KOGlobals::self()->reverseLayout() ? 1475 int xStart = KOGlobals::self()->reverseLayout() ?
1476 (mColumns - 1 - gxStart)*mGridSpacingX : 1476 (mColumns - 1 - gxStart)*mGridSpacingX :
1477 gxStart*mGridSpacingX; 1477 gxStart*mGridSpacingX;
1478 if (xStart < x1) xStart = x1; 1478 if (xStart < x1) xStart = x1;
1479 int xEnd = KOGlobals::self()->reverseLayout() ? 1479 int xEnd = KOGlobals::self()->reverseLayout() ?
1480 (mColumns - gxStart)*mGridSpacingX-1 : 1480 (mColumns - gxStart)*mGridSpacingX-1 :
1481 (gxStart+1)*mGridSpacingX-1; 1481 (gxStart+1)*mGridSpacingX-1;
1482 if (xEnd > x2) xEnd = x2; 1482 if (xEnd > x2) xEnd = x2;
1483 if ( KOPrefs::instance()->mUseHighlightLightColor ) 1483 if ( KOPrefs::instance()->mUseHighlightLightColor )
1484 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, 1484 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1,
1485 KOPrefs::instance()->mAgendaBgColor.light()); 1485 KOPrefs::instance()->mAgendaBgColor.light());
1486 else 1486 else
1487 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, 1487 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1,
1488 KOPrefs::instance()->mAgendaBgColor.dark()); 1488 KOPrefs::instance()->mAgendaBgColor.dark());
1489 1489
1490 } 1490 }
1491 } 1491 }
1492 } 1492 }
1493 } 1493 }
1494 // Highlight working hours 1494 // Highlight working hours
1495 1495
1496 if ( !backgroundOnly ) 1496 if ( !backgroundOnly )
1497 if (mWorkingHoursEnable) { 1497 if (mWorkingHoursEnable) {
1498 int x1 = cx; 1498 int x1 = cx;
1499 int y1 = mWorkingHoursYTop; 1499 int y1 = mWorkingHoursYTop;
1500 if (y1 < cy) y1 = cy; 1500 if (y1 < cy) y1 = cy;
1501 int x2 = cx+cw-1; 1501 int x2 = cx+cw-1;
1502 // int x2 = mGridSpacingX * 5 - 1; 1502 // int x2 = mGridSpacingX * 5 - 1;
1503 // if (x2 > cx+cw-1) x2 = cx + cw - 1; 1503 // if (x2 > cx+cw-1) x2 = cx + cw - 1;
1504 int y2 = mWorkingHoursYBottom; 1504 int y2 = mWorkingHoursYBottom;
1505 if (y2 > cy+ch-1) y2=cy+ch-1; 1505 if (y2 > cy+ch-1) y2=cy+ch-1;
1506 1506
1507 if (x2 >= x1 && y2 >= y1) { 1507 if (x2 >= x1 && y2 >= y1) {
1508 // qDebug("x1 %d mGridSpacingX %d ", x1, mGridSpacingX ); 1508 // qDebug("x1 %d mGridSpacingX %d ", x1, mGridSpacingX );
1509 int gxStart = x1/mGridSpacingX; 1509 int gxStart = x1/mGridSpacingX;
1510 int gxEnd = x2/mGridSpacingX; 1510 int gxEnd = x2/mGridSpacingX;
1511 while(gxStart <= gxEnd) { 1511 while(gxStart <= gxEnd) {
1512 if (gxStart < int(mHolidayMask->count()) && 1512 if (gxStart < int(mHolidayMask->count()) &&
1513 !mHolidayMask->at(gxStart)) { 1513 !mHolidayMask->at(gxStart)) {
1514 int xStart = KOGlobals::self()->reverseLayout() ? 1514 int xStart = KOGlobals::self()->reverseLayout() ?
1515 (mColumns - 1 - gxStart)*mGridSpacingX : 1515 (mColumns - 1 - gxStart)*mGridSpacingX :
1516 gxStart*mGridSpacingX; 1516 gxStart*mGridSpacingX;
1517 if (xStart < x1) xStart = x1; 1517 if (xStart < x1) xStart = x1;
1518 int xEnd = KOGlobals::self()->reverseLayout() ? 1518 int xEnd = KOGlobals::self()->reverseLayout() ?
1519 (mColumns - gxStart)*mGridSpacingX-1 : 1519 (mColumns - gxStart)*mGridSpacingX-1 :
1520 (gxStart+1)*mGridSpacingX-1; 1520 (gxStart+1)*mGridSpacingX-1;
1521 if (xEnd > x2) xEnd = x2; 1521 if (xEnd > x2) xEnd = x2;
1522 if ( mSelectedDates[gxStart] == curDate && KOPrefs::instance()->mHighlightCurrentDay ) { 1522 if ( mSelectedDates[gxStart] == curDate && KOPrefs::instance()->mHighlightCurrentDay ) {
1523 if ( KOPrefs::instance()->mUseHighlightLightColor ) 1523 if ( KOPrefs::instance()->mUseHighlightLightColor )
1524 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, 1524 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1,
1525 KOPrefs::instance()->mWorkingHoursColor.light()); 1525 KOPrefs::instance()->mWorkingHoursColor.light());
1526 else 1526 else
1527 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, 1527 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1,
1528 KOPrefs::instance()->mWorkingHoursColor.dark()); 1528 KOPrefs::instance()->mWorkingHoursColor.dark());
1529 } else { 1529 } else {
1530 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, 1530 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1,
1531 KOPrefs::instance()->mWorkingHoursColor); 1531 KOPrefs::instance()->mWorkingHoursColor);
1532 } 1532 }
1533 } 1533 }
1534 ++gxStart; 1534 ++gxStart;
1535 } 1535 }
1536 } 1536 }
1537 } 1537 }
1538 /* 1538 /*
1539 int selectionX = KOGlobals::self()->reverseLayout() ? 1539 int selectionX = KOGlobals::self()->reverseLayout() ?
1540 (mColumns - 1 - mSelectionCellX) * mGridSpacingX : 1540 (mColumns - 1 - mSelectionCellX) * mGridSpacingX :
1541 mSelectionCellX * mGridSpacingX; 1541 mSelectionCellX * mGridSpacingX;
1542 1542
1543 // Draw selection 1543 // Draw selection
1544 if ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) && 1544 if ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) &&
1545 ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) { 1545 ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) {
1546 // TODO: paint only part within cx,cy,cw,ch 1546 // TODO: paint only part within cx,cy,cw,ch
1547 p->fillRect( selectionX, mSelectionYTop, mGridSpacingX, 1547 p->fillRect( selectionX, mSelectionYTop, mGridSpacingX,
1548 mSelectionHeight, KOPrefs::instance()->mHighlightColor ); 1548 mSelectionHeight, KOPrefs::instance()->mHighlightColor );
1549 } 1549 }
1550 */ 1550 */
1551 // Draw vertical lines of grid 1551 // Draw vertical lines of grid
1552 1552
1553 int x = ((int)(cx/mGridSpacingX))*mGridSpacingX; 1553 int x = ((int)(cx/mGridSpacingX))*mGridSpacingX;
1554 if ( mGridSpacingX > 0 ) { 1554 if ( mGridSpacingX > 0 ) {
1555 while (x < cx + cw) { 1555 while (x < cx + cw) {
1556 p->drawLine(x,cy,x,cy+ch); 1556 p->drawLine(x,cy,x,cy+ch);
1557 x+=mGridSpacingX; 1557 x+=mGridSpacingX;
1558 } 1558 }
1559 } 1559 }
1560 // Draw horizontal lines of grid 1560 // Draw horizontal lines of grid
1561 int y = ((int)(cy/lGridSpacingY))*lGridSpacingY; 1561 int y = ((int)(cy/lGridSpacingY))*lGridSpacingY;
1562 if ( lGridSpacingY > 0 ) { 1562 if ( lGridSpacingY > 0 ) {
1563 while (y < cy + ch) { 1563 while (y < cy + ch) {
1564 p->setPen( SolidLine ); 1564 p->setPen( SolidLine );
1565 p->drawLine(cx,y,cx+cw,y); 1565 p->drawLine(cx,y,cx+cw,y);
1566 y+=lGridSpacingY; 1566 y+=lGridSpacingY;
1567 p->setPen( DotLine ); 1567 p->setPen( DotLine );
1568 p->drawLine(cx,y,cx+cw,y); 1568 p->drawLine(cx,y,cx+cw,y);
1569 y+=lGridSpacingY; 1569 y+=lGridSpacingY;
1570 } 1570 }
1571 p->setPen( SolidLine ); 1571 p->setPen( SolidLine );
1572 } 1572 }
1573 mPixPainter.end() ; 1573 mPixPainter.end() ;
1574} 1574}
1575 1575
1576/* 1576/*
1577 Convert srcollview contents coordinates to agenda grid coordinates. 1577 Convert srcollview contents coordinates to agenda grid coordinates.
1578*/ 1578*/
1579void KOAgenda::contentsToGrid (int x, int y, int& gx, int& gy) 1579void KOAgenda::contentsToGrid (int x, int y, int& gx, int& gy)
1580{ 1580{
1581 gx = KOGlobals::self()->reverseLayout() ? mColumns - 1 - x/mGridSpacingX : 1581 gx = KOGlobals::self()->reverseLayout() ? mColumns - 1 - x/mGridSpacingX :
1582 x/mGridSpacingX; 1582 x/mGridSpacingX;
1583 gy = y/mGridSpacingY; 1583 gy = y/mGridSpacingY;
1584} 1584}
1585 1585
1586/* 1586/*
1587 Convert agenda grid coordinates to scrollview contents coordinates. 1587 Convert agenda grid coordinates to scrollview contents coordinates.
1588*/ 1588*/
1589void KOAgenda::gridToContents (int gx, int gy, int& x, int& y) 1589void KOAgenda::gridToContents (int gx, int gy, int& x, int& y)
1590{ 1590{
1591 x = KOGlobals::self()->reverseLayout() ? (mColumns - 1 - gx)*mGridSpacingX: 1591 x = KOGlobals::self()->reverseLayout() ? (mColumns - 1 - gx)*mGridSpacingX:
1592 gx*mGridSpacingX; 1592 gx*mGridSpacingX;
1593 y = gy*mGridSpacingY; 1593 y = gy*mGridSpacingY;
1594} 1594}
1595 1595
1596 1596
1597/* 1597/*
1598 Return Y coordinate corresponding to time. Coordinates are rounded to fit into 1598 Return Y coordinate corresponding to time. Coordinates are rounded to fit into
1599 the grid. 1599 the grid.
1600*/ 1600*/
1601int KOAgenda::timeToY(const QTime &time) 1601int KOAgenda::timeToY(const QTime &time)
1602{ 1602{
1603 int minutesPerCell = 24 * 60 / mRows; 1603 int minutesPerCell = 24 * 60 / mRows;
1604 int timeMinutes = time.hour() * 60 + time.minute(); 1604 int timeMinutes = time.hour() * 60 + time.minute();
1605 int Y = (timeMinutes + (minutesPerCell / 2)) / minutesPerCell; 1605 int Y = (timeMinutes + (minutesPerCell / 2)) / minutesPerCell;
1606 return Y; 1606 return Y;
1607} 1607}
1608 1608
1609 1609
1610/* 1610/*
1611 Return time corresponding to cell y coordinate. Coordinates are rounded to 1611 Return time corresponding to cell y coordinate. Coordinates are rounded to
1612 fit into the grid. 1612 fit into the grid.
1613*/ 1613*/
1614QTime KOAgenda::gyToTime(int gy) 1614QTime KOAgenda::gyToTime(int gy)
1615{ 1615{
1616 1616
1617 int secondsPerCell = 24 * 60 * 60/ mRows; 1617 int secondsPerCell = 24 * 60 * 60/ mRows;
1618 1618
1619 int timeSeconds = secondsPerCell * gy; 1619 int timeSeconds = secondsPerCell * gy;
1620 1620
1621 QTime time( 0, 0, 0 ); 1621 QTime time( 0, 0, 0 );
1622 if ( timeSeconds < 24 * 60 * 60 ) { 1622 if ( timeSeconds < 24 * 60 * 60 ) {
1623 time = time.addSecs(timeSeconds); 1623 time = time.addSecs(timeSeconds);
1624 } else { 1624 } else {
1625 time.setHMS( 23, 59, 59 ); 1625 time.setHMS( 23, 59, 59 );
1626 } 1626 }
1627 1627
1628 return time; 1628 return time;
1629} 1629}
1630 1630
1631void KOAgenda::setStartHour(int startHour) 1631void KOAgenda::setStartHour(int startHour)
1632{ 1632{
1633 int startCell = startHour * mRows / 24; 1633 int startCell = startHour * mRows / 24;
1634 setContentsPos(0,startCell * gridSpacingY()); 1634 setContentsPos(0,startCell * gridSpacingY());
1635} 1635}
1636QTime KOAgenda::getEndTime()
1637{
1638 return QTime ( (contentsY ()+viewport()->height())*24/contentsHeight ()+1,0,0);
1639}
1636void KOAgenda::hideUnused() 1640void KOAgenda::hideUnused()
1637{ 1641{
1638 // experimental only 1642 // experimental only
1639 // return; 1643 // return;
1640 KOAgendaItem *item; 1644 KOAgendaItem *item;
1641 for ( item=mUnusedItems.first(); item != 0; item=mUnusedItems.next() ) { 1645 for ( item=mUnusedItems.first(); item != 0; item=mUnusedItems.next() ) {
1642 item->hide(); 1646 item->hide();
1643 } 1647 }
1644} 1648}
1645 1649
1646 1650
1647KOAgendaItem *KOAgenda::getNewItem(Incidence * event,QDate qd, QWidget* view) 1651KOAgendaItem *KOAgenda::getNewItem(Incidence * event,QDate qd, QWidget* view)
1648{ 1652{
1649 1653
1650 KOAgendaItem *fi; 1654 KOAgendaItem *fi;
1651 for ( fi=mUnusedItems.first(); fi != 0; fi=mUnusedItems.next() ) { 1655 for ( fi=mUnusedItems.first(); fi != 0; fi=mUnusedItems.next() ) {
1652 if ( fi->incidence() == event ) { 1656 if ( fi->incidence() == event ) {
1653 mUnusedItems.remove(); 1657 mUnusedItems.remove();
1654 fi->init( event, qd ); 1658 fi->init( event, qd );
1655 return fi; 1659 return fi;
1656 } 1660 }
1657 } 1661 }
1658 fi=mUnusedItems.first(); 1662 fi=mUnusedItems.first();
1659 if ( fi ) { 1663 if ( fi ) {
1660 mUnusedItems.remove(); 1664 mUnusedItems.remove();
1661 fi->init( event, qd ); 1665 fi->init( event, qd );
1662 return fi; 1666 return fi;
1663 } 1667 }
1664 // qDebug("new KOAgendaItem "); 1668 // qDebug("new KOAgendaItem ");
1665 1669
1666 KOAgendaItem* agendaItem = new KOAgendaItem( event, qd, view, mAllDayMode ); 1670 KOAgendaItem* agendaItem = new KOAgendaItem( event, qd, view, mAllDayMode );
1667 agendaItem->installEventFilter(this); 1671 agendaItem->installEventFilter(this);
1668 addChild(agendaItem,0,0); 1672 addChild(agendaItem,0,0);
1669 return agendaItem; 1673 return agendaItem;
1670} 1674}
1671KOAgendaItem * KOAgenda::getItemForTodo ( Todo * todo ) 1675KOAgendaItem * KOAgenda::getItemForTodo ( Todo * todo )
1672{ 1676{
1673 KOAgendaItem *item; 1677 KOAgendaItem *item;
1674 for ( item=mItems.first(); item != 0; item=mItems.next() ) { 1678 for ( item=mItems.first(); item != 0; item=mItems.next() ) {
1675 if ( item->incidence() == todo ) { 1679 if ( item->incidence() == todo ) {
1676 mItems.remove(); 1680 mItems.remove();
1677 return item; 1681 return item;
1678 } 1682 }
1679 } 1683 }
1680 return 0; 1684 return 0;
1681} 1685}
1682 1686
1683 1687
1684void KOAgenda::updateTodo( Todo * todo, int days, bool remove) 1688void KOAgenda::updateTodo( Todo * todo, int days, bool remove)
1685{ 1689{
1686 // ( todo->hasCompletedDate() && todo->completed().date() == currentDate )|| 1690 // ( todo->hasCompletedDate() && todo->completed().date() == currentDate )||
1687 KOAgendaItem *item; 1691 KOAgendaItem *item;
1688 item = getItemForTodo ( todo ); 1692 item = getItemForTodo ( todo );
1689 //qDebug("KOAgenda::updateTodo %d %d %d %d", this, todo, days, remove); 1693 //qDebug("KOAgenda::updateTodo %d %d %d %d", this, todo, days, remove);
1690 if ( item ) { 1694 if ( item ) {
1691 blockSignals( true ); 1695 blockSignals( true );
1692 //qDebug("item found "); 1696 //qDebug("item found ");
1693 item->hide(); 1697 item->hide();
1694 item->setCellX(-2, -1 ); 1698 item->setCellX(-2, -1 );
1695 item->select(false); 1699 item->select(false);
1696 mUnusedItems.append( item ); 1700 mUnusedItems.append( item );
1697 mItems.remove( item ); 1701 mItems.remove( item );
1698 QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems(); 1702 QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems();
1699 KOAgendaItem *itemit; 1703 KOAgendaItem *itemit;
1700 //globalFlagBlockAgendaItemPaint = 1; 1704 //globalFlagBlockAgendaItemPaint = 1;
1701 for ( itemit=oldconflictItems.first(); itemit != 0; 1705 for ( itemit=oldconflictItems.first(); itemit != 0;
1702 itemit=oldconflictItems.next() ) { 1706 itemit=oldconflictItems.next() ) {
1703 if ( itemit != item ) 1707 if ( itemit != item )
1704 placeSubCells(itemit); 1708 placeSubCells(itemit);
1705 } 1709 }
1706 qApp->processEvents(); 1710 qApp->processEvents();
1707 //globalFlagBlockAgendaItemPaint = 0; 1711 //globalFlagBlockAgendaItemPaint = 0;
1708 for ( itemit=oldconflictItems.first(); itemit != 0; 1712 for ( itemit=oldconflictItems.first(); itemit != 0;
1709 itemit=oldconflictItems.next() ) { 1713 itemit=oldconflictItems.next() ) {
1710 globalFlagBlockAgendaItemUpdate = 0; 1714 globalFlagBlockAgendaItemUpdate = 0;
1711 if ( itemit != item ) 1715 if ( itemit != item )
1712 itemit->repaintMe(); 1716 itemit->repaintMe();
1713 globalFlagBlockAgendaItemUpdate = 1; 1717 globalFlagBlockAgendaItemUpdate = 1;
1714 //qDebug("sigleshot "); 1718 //qDebug("sigleshot ");
1715 QTimer::singleShot( 0, itemit, SLOT ( repaintItem() )); 1719 QTimer::singleShot( 0, itemit, SLOT ( repaintItem() ));
1716 //itemit->repaint( false ); repaintItem() 1720 //itemit->repaint( false ); repaintItem()
1717 } 1721 }
1718 blockSignals( false ); 1722 blockSignals( false );
1719 } 1723 }
1720 if ( remove ) { 1724 if ( remove ) {
1721 //qDebug("remove****************************************** "); 1725 //qDebug("remove****************************************** ");
1722 return; 1726 return;
1723 } 1727 }
1724 if ( todo->hasCompletedDate() && !KOPrefs::instance()->mShowCompletedTodoInAgenda ) 1728 if ( todo->hasCompletedDate() && !KOPrefs::instance()->mShowCompletedTodoInAgenda )
1725 return; 1729 return;
1726 //qDebug("updateTodo+++++++++++++++++++++++++++++++++++++ "); 1730 //qDebug("updateTodo+++++++++++++++++++++++++++++++++++++ ");
1727 QDate currentDate = QDate::currentDate(); 1731 QDate currentDate = QDate::currentDate();
1728 bool overdue = (!todo->isCompleted()) && (todo->dtDue() < currentDate)&& ( KOPrefs::instance()->mShowTodoInAgenda ); 1732 bool overdue = (!todo->isCompleted()) && (todo->dtDue() < currentDate)&& ( KOPrefs::instance()->mShowTodoInAgenda );
1729 QDateTime dt; 1733 QDateTime dt;
1730 if ( todo->hasCompletedDate() ) 1734 if ( todo->hasCompletedDate() )
1731 dt = todo->completed(); 1735 dt = todo->completed();
1732 else 1736 else
1733 dt = todo->dtDue(); 1737 dt = todo->dtDue();
1734 if ( overdue ) { 1738 if ( overdue ) {
1735 days += todo->dtDue().date().daysTo( currentDate ); 1739 days += todo->dtDue().date().daysTo( currentDate );
1736 } 1740 }
1737 else 1741 else
1738 currentDate = dt.date(); 1742 currentDate = dt.date();
1739 1743
1740 if (( todo->doesFloat() || overdue) && !todo->hasCompletedDate() ) { 1744 if (( todo->doesFloat() || overdue) && !todo->hasCompletedDate() ) {
1741 if ( ! mAllDayMode ) return; 1745 if ( ! mAllDayMode ) return;
1742 // aldayagenda 1746 // aldayagenda
1743 globalFlagBlockAgendaItemPaint = 1; 1747 globalFlagBlockAgendaItemPaint = 1;
1744 item = insertAllDayItem(todo, currentDate,days, days); 1748 item = insertAllDayItem(todo, currentDate,days, days);
1745 item->show(); 1749 item->show();
1746 1750
1747 } 1751 }
1748 else { 1752 else {
1749 if ( mAllDayMode ) return; 1753 if ( mAllDayMode ) return;
1750 // mAgenda 1754 // mAgenda
1751 globalFlagBlockAgendaItemPaint = 1; 1755 globalFlagBlockAgendaItemPaint = 1;
1752 int endY = timeToY(dt.time()) - 1; 1756 int endY = timeToY(dt.time()) - 1;
1753 int hi = 12/KOPrefs::instance()->mHourSize; 1757 int hi = 12/KOPrefs::instance()->mHourSize;
1754 int startY = endY - 1-hi; 1758 int startY = endY - 1-hi;
1755 item = insertItem(todo,currentDate,days,startY,endY); 1759 item = insertItem(todo,currentDate,days,startY,endY);
1756 item->show(); 1760 item->show();
1757 } 1761 }
1758 qApp->processEvents(); 1762 qApp->processEvents();
1759 globalFlagBlockAgendaItemPaint = 0; 1763 globalFlagBlockAgendaItemPaint = 0;
1760 QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems(); 1764 QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems();
1761 KOAgendaItem *itemit; 1765 KOAgendaItem *itemit;
1762 for ( itemit=oldconflictItems.first(); itemit != 0; 1766 for ( itemit=oldconflictItems.first(); itemit != 0;
1763 itemit=oldconflictItems.next() ) { 1767 itemit=oldconflictItems.next() ) {
1764 globalFlagBlockAgendaItemUpdate = 0; 1768 globalFlagBlockAgendaItemUpdate = 0;
1765 itemit->repaintMe(); 1769 itemit->repaintMe();
1766 globalFlagBlockAgendaItemUpdate = 1; 1770 globalFlagBlockAgendaItemUpdate = 1;
1767 itemit->repaint(); 1771 itemit->repaint();
1768 } 1772 }
1769 globalFlagBlockAgendaItemUpdate = 0; 1773 globalFlagBlockAgendaItemUpdate = 0;
1770 item->repaintMe(); 1774 item->repaintMe();
1771 globalFlagBlockAgendaItemUpdate = 1; 1775 globalFlagBlockAgendaItemUpdate = 1;
1772 item->repaint(); 1776 item->repaint();
1773} 1777}
1774/* 1778/*
1775 Insert KOAgendaItem into agenda. 1779 Insert KOAgendaItem into agenda.
1776*/ 1780*/
1777KOAgendaItem *KOAgenda::insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom) 1781KOAgendaItem *KOAgenda::insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom)
1778{ 1782{
1779 if (mAllDayMode) { 1783 if (mAllDayMode) {
1780 qDebug("KOAgenda: calling insertItem in all-day mode is illegal. "); 1784 qDebug("KOAgenda: calling insertItem in all-day mode is illegal. ");
1781 return 0; 1785 return 0;
1782 } 1786 }
1783 1787
1784 KOAgendaItem *agendaItem = getNewItem(event,qd,viewport()); 1788 KOAgendaItem *agendaItem = getNewItem(event,qd,viewport());
1785 //agendaItem->setFrameStyle(WinPanel|Raised); 1789 //agendaItem->setFrameStyle(WinPanel|Raised);
1786 1790
1787 int YSize = YBottom - YTop + 1; 1791 int YSize = YBottom - YTop + 1;
1788 if (YSize < 0) { 1792 if (YSize < 0) {
1789 YSize = 1; 1793 YSize = 1;
1790 } 1794 }
1791 int iheight = mGridSpacingY * YSize; 1795 int iheight = mGridSpacingY * YSize;
1792 1796
1793 agendaItem->resize(mGridSpacingX,iheight ); 1797 agendaItem->resize(mGridSpacingX,iheight );
1794 agendaItem->setCellXY(X,YTop,YBottom); 1798 agendaItem->setCellXY(X,YTop,YBottom);
1795 agendaItem->setCellXWidth(X); 1799 agendaItem->setCellXWidth(X);
1796 1800
1797 //addChild(agendaItem,X*mGridSpacingX,YTop*mGridSpacingY); 1801 //addChild(agendaItem,X*mGridSpacingX,YTop*mGridSpacingY);
1798 mItems.append(agendaItem); 1802 mItems.append(agendaItem);
1799 1803
1800 placeSubCells(agendaItem); 1804 placeSubCells(agendaItem);
1801 1805
1802 //agendaItem->show(); 1806 //agendaItem->show();
1803 1807
1804 1808
1805 return agendaItem; 1809 return agendaItem;
1806} 1810}
1807 1811
1808 1812
1809/* 1813/*
1810 Insert all-day KOAgendaItem into agenda. 1814 Insert all-day KOAgendaItem into agenda.
1811*/ 1815*/
1812KOAgendaItem *KOAgenda::insertAllDayItem (Incidence *event,QDate qd,int XBegin,int XEnd) 1816KOAgendaItem *KOAgenda::insertAllDayItem (Incidence *event,QDate qd,int XBegin,int XEnd)
1813{ 1817{
1814 if (!mAllDayMode) { 1818 if (!mAllDayMode) {
1815 return 0; 1819 return 0;
1816 } 1820 }
1817 1821
1818 KOAgendaItem *agendaItem = getNewItem(event,qd,viewport()); 1822 KOAgendaItem *agendaItem = getNewItem(event,qd,viewport());
1819 1823
1820 agendaItem->setCellXY(XBegin,0,0); 1824 agendaItem->setCellXY(XBegin,0,0);
1821 agendaItem->setCellXWidth(XEnd); 1825 agendaItem->setCellXWidth(XEnd);
1822 agendaItem->resize(mGridSpacingX * agendaItem->cellWidth(),mGridSpacingY); 1826 agendaItem->resize(mGridSpacingX * agendaItem->cellWidth(),mGridSpacingY);
1823 1827
1824 //addChild(agendaItem,XBegin*mGridSpacingX,0); 1828 //addChild(agendaItem,XBegin*mGridSpacingX,0);
1825 mItems.append(agendaItem); 1829 mItems.append(agendaItem);
1826 1830
1827 placeSubCells(agendaItem); 1831 placeSubCells(agendaItem);
diff --git a/korganizer/koagenda.h b/korganizer/koagenda.h
index 0e3aed8..86cf2f4 100644
--- a/korganizer/koagenda.h
+++ b/korganizer/koagenda.h
@@ -1,306 +1,307 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23#ifndef KOAGENDA_H 23#ifndef KOAGENDA_H
24#define KOAGENDA_H 24#define KOAGENDA_H
25 25
26#include <qscrollview.h> 26#include <qscrollview.h>
27#include <qtimer.h> 27#include <qtimer.h>
28#include <qmemarray.h> 28#include <qmemarray.h>
29#include <qpainter.h> 29#include <qpainter.h>
30#include <qpixmap.h> 30#include <qpixmap.h>
31#include <qguardedptr.h> 31#include <qguardedptr.h>
32 32
33#include "koagendaitem.h" 33#include "koagendaitem.h"
34#include "koeventview.h" 34#include "koeventview.h"
35 35
36class QPopupMenu; 36class QPopupMenu;
37class QTime; 37class QTime;
38class KConfig; 38class KConfig;
39class QFrame; 39class QFrame;
40class KOAgenda; 40class KOAgenda;
41class KCal::Event; 41class KCal::Event;
42class KCal::Todo; 42class KCal::Todo;
43 43
44using namespace KCal; 44using namespace KCal;
45 45
46class MarcusBains : public QFrame { 46class MarcusBains : public QFrame {
47 Q_OBJECT 47 Q_OBJECT
48 public: 48 public:
49 MarcusBains(KOAgenda *agenda=0,const char *name=0); 49 MarcusBains(KOAgenda *agenda=0,const char *name=0);
50 virtual ~MarcusBains(); 50 virtual ~MarcusBains();
51 51
52 public slots: 52 public slots:
53 void updateLocation(bool recalculate=false); 53 void updateLocation(bool recalculate=false);
54 void updateLoc(); 54 void updateLoc();
55 55
56 private: 56 private:
57 int todayColumn(); 57 int todayColumn();
58 QTimer *minutes; 58 QTimer *minutes;
59 QLabel *mTimeBox; 59 QLabel *mTimeBox;
60 KOAgenda *agenda; 60 KOAgenda *agenda;
61 QTime oldTime; 61 QTime oldTime;
62 int oldToday; 62 int oldToday;
63}; 63};
64 64
65 65
66class KOAgenda : public QScrollView 66class KOAgenda : public QScrollView
67{ 67{
68 Q_OBJECT 68 Q_OBJECT
69 public: 69 public:
70 enum MouseActionType { NOP, MOVE, SELECT, 70 enum MouseActionType { NOP, MOVE, SELECT,
71 RESIZETOP, RESIZEBOTTOM, RESIZELEFT, RESIZERIGHT }; 71 RESIZETOP, RESIZEBOTTOM, RESIZELEFT, RESIZERIGHT };
72 72
73 KOAgenda ( int columns, int rows, int columnSize, QWidget * parent=0, 73 KOAgenda ( int columns, int rows, int columnSize, QWidget * parent=0,
74 const char * name=0, WFlags f=0 ); 74 const char * name=0, WFlags f=0 );
75 KOAgenda ( int columns, QWidget * parent=0, 75 KOAgenda ( int columns, QWidget * parent=0,
76 const char * name=0, WFlags f=0 ); 76 const char * name=0, WFlags f=0 );
77 virtual ~KOAgenda(); 77 virtual ~KOAgenda();
78 bool mInvalidPixmap; 78 bool mInvalidPixmap;
79 79
80 Incidence *selectedIncidence() const; 80 Incidence *selectedIncidence() const;
81 QDate selectedIncidenceDate() const; 81 QDate selectedIncidenceDate() const;
82 82
83 virtual bool eventFilter ( QObject *, QEvent * ); 83 virtual bool eventFilter ( QObject *, QEvent * );
84 84
85 void contentsToGrid (int x, int y, int& gx, int& gy); 85 void contentsToGrid (int x, int y, int& gx, int& gy);
86 void gridToContents (int gx, int gy, int& x, int& y); 86 void gridToContents (int gx, int gy, int& x, int& y);
87 87
88 int timeToY (const QTime &time); 88 int timeToY (const QTime &time);
89 QTime gyToTime (int y); 89 QTime gyToTime (int y);
90 90
91 void setStartHour(int startHour); 91 void setStartHour(int startHour);
92 92
93 KOAgendaItem *insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom); 93 KOAgendaItem *insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom);
94 KOAgendaItem *insertAllDayItem (Incidence *event,QDate qd,int XBegin,int XEnd); 94 KOAgendaItem *insertAllDayItem (Incidence *event,QDate qd,int XBegin,int XEnd);
95 void insertMultiItem (Event *event,QDate qd,int XBegin,int XEnd, 95 void insertMultiItem (Event *event,QDate qd,int XBegin,int XEnd,
96 int YTop,int YBottom); 96 int YTop,int YBottom);
97 97
98 void changeColumns(int columns); 98 void changeColumns(int columns);
99 99
100 int columns() { return mColumns; } 100 int columns() { return mColumns; }
101 int rows() { return mRows; } 101 int rows() { return mRows; }
102 102
103 int gridSpacingX() const { return mGridSpacingX; } 103 int gridSpacingX() const { return mGridSpacingX; }
104 int gridSpacingY() const { return mGridSpacingY; } 104 int gridSpacingY() const { return mGridSpacingY; }
105 105
106// virtual QSizePolicy sizePolicy() const; 106// virtual QSizePolicy sizePolicy() const;
107 107
108 void clear(); 108 void clear();
109 109
110 void clearSelection(); 110 void clearSelection();
111 void hideUnused(); 111 void hideUnused();
112 112
113 /** Calculates the minimum width */ 113 /** Calculates the minimum width */
114 virtual int minimumWidth() const; 114 virtual int minimumWidth() const;
115 /** Update configuration from preference settings */ 115 /** Update configuration from preference settings */
116 void updateConfig(); 116 void updateConfig();
117 117
118 void checkScrollBoundaries(); 118 void checkScrollBoundaries();
119 119
120 void setHolidayMask(QMemArray<bool> *); 120 void setHolidayMask(QMemArray<bool> *);
121 void setDateList(const DateList &selectedDates); 121 void setDateList(const DateList &selectedDates);
122 DateList dateList() const; 122 DateList dateList() const;
123 void drawContentsToPainter( QPainter* paint = 0, bool backgroundOnly = false); 123 void drawContentsToPainter( QPainter* paint = 0, bool backgroundOnly = false);
124 void finishUpdate(); 124 void finishUpdate();
125 void printSelection(); 125 void printSelection();
126 void storePosition(); 126 void storePosition();
127 void restorePosition(); 127 void restorePosition();
128 void setPopup( KOEventPopupMenu * p ) { mAllAgendaPopup = p; } 128 void setPopup( KOEventPopupMenu * p ) { mAllAgendaPopup = p; }
129 void shrinkPixmap(); 129 void shrinkPixmap();
130 QTime getEndTime();
130 131
131 public slots: 132 public slots:
132 void slotContentMove(int,int); 133 void slotContentMove(int,int);
133 void categoryChanged(Incidence * inc); 134 void categoryChanged(Incidence * inc);
134 void slotClearSelection(); 135 void slotClearSelection();
135 void popupMenu(); 136 void popupMenu();
136 void newItem( int ); 137 void newItem( int );
137 void moveChild( QWidget *, int, int ); 138 void moveChild( QWidget *, int, int );
138 void scrollUp(); 139 void scrollUp();
139 void scrollDown(); 140 void scrollDown();
140 void updateTodo( Todo * t, int , bool ); 141 void updateTodo( Todo * t, int , bool );
141 void popupAlarm(); 142 void popupAlarm();
142 143
143 void checkScrollBoundaries(int); 144 void checkScrollBoundaries(int);
144 145
145 /** Deselect selected items. This function does not emit any signals. */ 146 /** Deselect selected items. This function does not emit any signals. */
146 void deselectItem(); 147 void deselectItem();
147 /** Select item. If the argument is 0, the currently selected item gets 148 /** Select item. If the argument is 0, the currently selected item gets
148 deselected. This function emits the itemSelected(bool) signal to inform 149 deselected. This function emits the itemSelected(bool) signal to inform
149 about selection/deseelction of events. */ 150 about selection/deseelction of events. */
150 void selectItem(KOAgendaItem *); 151 void selectItem(KOAgendaItem *);
151 void finishResize(); 152 void finishResize();
152 153
153 signals: 154 signals:
154 void signalClearSelection(); 155 void signalClearSelection();
155 void showDateView( int, int); 156 void showDateView( int, int);
156 void newEventSignal(); 157 void newEventSignal();
157 void newEventSignal(int gx,int gy); 158 void newEventSignal(int gx,int gy);
158 void newTodoSignal(int gx,int gy); 159 void newTodoSignal(int gx,int gy);
159 void newEventSignal(int gxStart, int gyStart, int gxEnd, int gyEnd); 160 void newEventSignal(int gxStart, int gyStart, int gxEnd, int gyEnd);
160 void newTimeSpanSignal(int gxStart, int gyStart, int gxEnd, int gyEnd); 161 void newTimeSpanSignal(int gxStart, int gyStart, int gxEnd, int gyEnd);
161 void newStartSelectSignal(); 162 void newStartSelectSignal();
162 void showIncidenceSignal(Incidence *); 163 void showIncidenceSignal(Incidence *);
163 void editIncidenceSignal(Incidence *); 164 void editIncidenceSignal(Incidence *);
164 void deleteIncidenceSignal(Incidence *); 165 void deleteIncidenceSignal(Incidence *);
165 void showIncidencePopupSignal(Incidence *); 166 void showIncidencePopupSignal(Incidence *);
166 167
167 void itemModified(KOAgendaItem *item, int ); 168 void itemModified(KOAgendaItem *item, int );
168 void incidenceSelected(Incidence *); 169 void incidenceSelected(Incidence *);
169 170
170 void lowerYChanged(int); 171 void lowerYChanged(int);
171 void upperYChanged(int); 172 void upperYChanged(int);
172 173
173 void startDragSignal(Incidence *); 174 void startDragSignal(Incidence *);
174 void addToCalSignal(Incidence *, Incidence *); 175 void addToCalSignal(Incidence *, Incidence *);
175 void resizedSignal(); 176 void resizedSignal();
176 void updateViewSignal(); 177 void updateViewSignal();
177 void sendPing(); 178 void sendPing();
178 179
179 protected: 180 protected:
180 KOEventPopupMenu * mAllAgendaPopup; 181 KOEventPopupMenu * mAllAgendaPopup;
181 QPainter mPixPainter; 182 QPainter mPixPainter;
182 QPixmap mPaintPixmap; 183 QPixmap mPaintPixmap;
183 QPixmap mHighlightPixmap; 184 QPixmap mHighlightPixmap;
184 void drawContents(QPainter *p,int cx, int cy, int cw, int ch); 185 void drawContents(QPainter *p,int cx, int cy, int cw, int ch);
185 virtual void resizeEvent ( QResizeEvent * ); 186 virtual void resizeEvent ( QResizeEvent * );
186 187
187 /** Handles mouse events. Called from eventFilter */ 188 /** Handles mouse events. Called from eventFilter */
188 virtual bool eventFilter_mouse ( QObject *, QMouseEvent * ); 189 virtual bool eventFilter_mouse ( QObject *, QMouseEvent * );
189 190
190 /** Start selecting time span. */ 191 /** Start selecting time span. */
191 void startSelectAction(QPoint viewportPos); 192 void startSelectAction(QPoint viewportPos);
192 193
193 /** Select time span. */ 194 /** Select time span. */
194 void performSelectAction(QPoint viewportPos); 195 void performSelectAction(QPoint viewportPos);
195 196
196 /** Emd selecting time span. */ 197 /** Emd selecting time span. */
197 void endSelectAction( bool emitNewEvent = false ); 198 void endSelectAction( bool emitNewEvent = false );
198 199
199 /** Start moving/resizing agenda item */ 200 /** Start moving/resizing agenda item */
200 void startItemAction(QPoint viewportPos); 201 void startItemAction(QPoint viewportPos);
201 202
202 /** Move/resize agenda item */ 203 /** Move/resize agenda item */
203 void performItemAction(QPoint viewportPos); 204 void performItemAction(QPoint viewportPos);
204 205
205 /** End moving/resizing agenda item */ 206 /** End moving/resizing agenda item */
206 void endItemAction(); 207 void endItemAction();
207 208
208 /** Set cursor, when no item action is in progress */ 209 /** Set cursor, when no item action is in progress */
209 void setNoActionCursor(KOAgendaItem *moveItem,QPoint viewportPos); 210 void setNoActionCursor(KOAgendaItem *moveItem,QPoint viewportPos);
210 211
211 /** Place agenda item in agenda and adjust other cells if necessary */ 212 /** Place agenda item in agenda and adjust other cells if necessary */
212 void placeSubCells(KOAgendaItem *placeItem); 213 void placeSubCells(KOAgendaItem *placeItem);
213 214
214 /** Process the keyevent, including the ignored keyevents of eventwidgets. 215 /** Process the keyevent, including the ignored keyevents of eventwidgets.
215 * Implements pgup/pgdn and cursor key navigation in the view. 216 * Implements pgup/pgdn and cursor key navigation in the view.
216 */ 217 */
217 void keyPressEvent( QKeyEvent * ); 218 void keyPressEvent( QKeyEvent * );
218 219
219 void calculateWorkingHours(); 220 void calculateWorkingHours();
220 221
221 virtual void contentsMousePressEvent ( QMouseEvent * ); 222 virtual void contentsMousePressEvent ( QMouseEvent * );
222 223
223 private: 224 private:
224 void init(); 225 void init();
225 void marcus_bains(); 226 void marcus_bains();
226 bool mAllDayMode; 227 bool mAllDayMode;
227 bool blockResize; 228 bool blockResize;
228 bool mLeftMouseDown; 229 bool mLeftMouseDown;
229 KOAgendaItem *mPopupItem; 230 KOAgendaItem *mPopupItem;
230 QTimer* mPopupTimer; 231 QTimer* mPopupTimer;
231 int mPopupKind; 232 int mPopupKind;
232 QPoint mPopupPos; 233 QPoint mPopupPos;
233 QTimer mResizeTimer; 234 QTimer mResizeTimer;
234 double mContentPosition; 235 double mContentPosition;
235 236
236 // Width and height of agenda cells 237 // Width and height of agenda cells
237 int mGridSpacingX; 238 int mGridSpacingX;
238 int mGridSpacingY; 239 int mGridSpacingY;
239 240
240 // size of border, where mouse action will resize the KOAgendaItem 241 // size of border, where mouse action will resize the KOAgendaItem
241 int mResizeBorderWidth; 242 int mResizeBorderWidth;
242 243
243 // size of border, where mouse mve will cause a scroll of the agenda 244 // size of border, where mouse mve will cause a scroll of the agenda
244 int mScrollBorderWidth; 245 int mScrollBorderWidth;
245 int mScrollDelay; 246 int mScrollDelay;
246 int mScrollOffset; 247 int mScrollOffset;
247 248
248 QTimer mScrollUpTimer; 249 QTimer mScrollUpTimer;
249 QTimer mScrollDownTimer; 250 QTimer mScrollDownTimer;
250 251
251 // Number of Columns/Rows of agenda grid 252 // Number of Columns/Rows of agenda grid
252 int mColumns; 253 int mColumns;
253 int mRows; 254 int mRows;
254 255
255 // Cells to store Move and Resize coordiantes 256 // Cells to store Move and Resize coordiantes
256 int mStartCellX; 257 int mStartCellX;
257 int mStartCellY; 258 int mStartCellY;
258 int mCurrentCellX; 259 int mCurrentCellX;
259 int mCurrentCellY; 260 int mCurrentCellY;
260 261
261 // Working Hour coordiantes 262 // Working Hour coordiantes
262 bool mWorkingHoursEnable; 263 bool mWorkingHoursEnable;
263 int mWorkingHoursYTop; 264 int mWorkingHoursYTop;
264 int mWorkingHoursYBottom; 265 int mWorkingHoursYBottom;
265 266
266 // Selection 267 // Selection
267 int mSelectionCellX; 268 int mSelectionCellX;
268 int mSelectionYTop; 269 int mSelectionYTop;
269 int mSelectionHeight; 270 int mSelectionHeight;
270 271
271 // List of dates to be displayed 272 // List of dates to be displayed
272 DateList mSelectedDates; 273 DateList mSelectedDates;
273 274
274 // The KOAgendaItem, which has been right-clicked last 275 // The KOAgendaItem, which has been right-clicked last
275 KOAgendaItem *mClickedItem; 276 KOAgendaItem *mClickedItem;
276 277
277 // The KOAgendaItem, which is being moved/resized 278 // The KOAgendaItem, which is being moved/resized
278 QGuardedPtr<KOAgendaItem> mActionItem; 279 QGuardedPtr<KOAgendaItem> mActionItem;
279 280
280 // Currently selected item 281 // Currently selected item
281 QGuardedPtr<KOAgendaItem> mSelectedItem; 282 QGuardedPtr<KOAgendaItem> mSelectedItem;
282 283
283 // The Marcus Bains Line widget. 284 // The Marcus Bains Line widget.
284 MarcusBains *mMarcusBains; 285 MarcusBains *mMarcusBains;
285 void computeSizes(); 286 void computeSizes();
286 287
287 MouseActionType mActionType; 288 MouseActionType mActionType;
288 289
289 bool mItemMoved; 290 bool mItemMoved;
290 291
291 // List of all Items contained in agenda 292 // List of all Items contained in agenda
292 QPtrList<KOAgendaItem> mItems; 293 QPtrList<KOAgendaItem> mItems;
293 QPtrList<KOAgendaItem> mUnusedItems; 294 QPtrList<KOAgendaItem> mUnusedItems;
294 KOAgendaItem* getNewItem(Incidence * event,QDate qd, QWidget* viewport); 295 KOAgendaItem* getNewItem(Incidence * event,QDate qd, QWidget* viewport);
295 QPopupMenu *mItemPopup; // Right mouse button popup menu for KOAgendaItems 296 QPopupMenu *mItemPopup; // Right mouse button popup menu for KOAgendaItems
296 QPopupMenu *mNewItemPopup; 297 QPopupMenu *mNewItemPopup;
297 298
298 int mOldLowerScrollValue; 299 int mOldLowerScrollValue;
299 int mOldUpperScrollValue; 300 int mOldUpperScrollValue;
300 KOAgendaItem * getItemForTodo ( Todo * todo ); 301 KOAgendaItem * getItemForTodo ( Todo * todo );
301 QMemArray<bool> *mHolidayMask; 302 QMemArray<bool> *mHolidayMask;
302 int mCurPixWid; 303 int mCurPixWid;
303 int mCurPixHei; 304 int mCurPixHei;
304}; 305};
305 306
306#endif // KOAGENDA_H 307#endif // KOAGENDA_H
diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp
index 53bbe28..b5a59af 100644
--- a/korganizer/komonthview.cpp
+++ b/korganizer/komonthview.cpp
@@ -1651,387 +1651,390 @@ void KOMonthView::showEvents(QPtrList<Event>)
1651} 1651}
1652 1652
1653void KOMonthView::changeEventDisplay(Event *, int) 1653void KOMonthView::changeEventDisplay(Event *, int)
1654{ 1654{
1655 // this should be re-written to be much more efficient, but this 1655 // this should be re-written to be much more efficient, but this
1656 // quick-and-dirty-hack gets the job done for right now. 1656 // quick-and-dirty-hack gets the job done for right now.
1657 //qDebug("KOMonthView::changeEventDisplay "); 1657 //qDebug("KOMonthView::changeEventDisplay ");
1658 updateView(); 1658 updateView();
1659} 1659}
1660 1660
1661void KOMonthView::updateView() 1661void KOMonthView::updateView()
1662{ 1662{
1663 1663
1664 if ( !updatePossible ) 1664 if ( !updatePossible )
1665 return; 1665 return;
1666 //qDebug("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU "); 1666 //qDebug("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU ");
1667 //QTime ti; 1667 //QTime ti;
1668 //ti.start(); 1668 //ti.start();
1669 clearSelection(); 1669 clearSelection();
1670 QPtrVector<MonthViewCell> *cells; 1670 QPtrVector<MonthViewCell> *cells;
1671 if ( mShowWeekView ) { 1671 if ( mShowWeekView ) {
1672 cells = &mCellsW; 1672 cells = &mCellsW;
1673 } else { 1673 } else {
1674 cells = &mCells; 1674 cells = &mCells;
1675 } 1675 }
1676#if 1 1676#if 1
1677 int i; 1677 int i;
1678 int timeSpan = (*cells).size()-1; 1678 int timeSpan = (*cells).size()-1;
1679 if ( KOPrefs::instance()->mMonthViewWeek ) 1679 if ( KOPrefs::instance()->mMonthViewWeek )
1680 timeSpan = 6; 1680 timeSpan = 6;
1681 for( i = 0; i < timeSpan + 1; ++i ) { 1681 for( i = 0; i < timeSpan + 1; ++i ) {
1682 (*cells)[i]->startUpdateCell(); 1682 (*cells)[i]->startUpdateCell();
1683 } 1683 }
1684 1684
1685 QPtrList<Event> events = calendar()->events(); 1685 QPtrList<Event> events = calendar()->events();
1686 Event *event; 1686 Event *event;
1687 QDateTime dt; 1687 QDateTime dt;
1688 QDate endDate = mStartDate.addDays( timeSpan ); 1688 QDate endDate = mStartDate.addDays( timeSpan );
1689 for( event = events.first(); event; event = events.next() ) { // for event 1689 for( event = events.first(); event; event = events.next() ) { // for event
1690 if ( event->doesRecur() ) { 1690 if ( event->doesRecur() ) {
1691 bool last; 1691 bool last;
1692 QDateTime incidenceStart = event->recurrence()->getPreviousDateTime( QDateTime( mStartDate ) , &last ); 1692 QDateTime incidenceStart = event->recurrence()->getPreviousDateTime( QDateTime( mStartDate ) , &last );
1693 QDateTime incidenceEnd; 1693 QDateTime incidenceEnd;
1694 int eventlen = event->dtStart().date().daysTo ( event->dtEnd().date() ); 1694 int eventlen = event->dtStart().date().daysTo ( event->dtEnd().date() );
1695 bool invalid = false; 1695 bool invalid = false;
1696 while( true ) { 1696 while( true ) {
1697 if ( incidenceStart.isValid() ) { 1697 if ( incidenceStart.isValid() ) {
1698 incidenceEnd = incidenceStart.addDays( eventlen ); 1698 incidenceEnd = incidenceStart.addDays( eventlen );
1699 int st = incidenceStart.date().daysTo( endDate ); 1699 int st = incidenceStart.date().daysTo( endDate );
1700 if ( st >= 0 ) { // start before timeend 1700 if ( st >= 0 ) { // start before timeend
1701 int end = mStartDate.daysTo( incidenceEnd.date() ); 1701 int end = mStartDate.daysTo( incidenceEnd.date() );
1702 if ( end >= 0 ) { // end after timestart --- got one! 1702 if ( end >= 0 ) { // end after timestart --- got one!
1703 //normalize 1703 //normalize
1704 st = timeSpan - st; 1704 st = timeSpan - st;
1705 if ( st < 0 ) st = 0; 1705 if ( st < 0 ) st = 0;
1706 if ( end > timeSpan ) end = timeSpan; 1706 if ( end > timeSpan ) end = timeSpan;
1707 int iii; 1707 int iii;
1708 //qDebug("found %s %d %d ",event->summary().latin1(), st, end ); 1708 //qDebug("found %s %d %d ",event->summary().latin1(), st, end );
1709 for ( iii = st;iii<= end;++iii) 1709 for ( iii = st;iii<= end;++iii)
1710 (*cells)[iii]->insertEvent( event ); 1710 (*cells)[iii]->insertEvent( event );
1711 } 1711 }
1712 } 1712 }
1713 } else { 1713 } else {
1714 if ( invalid ) 1714 if ( invalid )
1715 break; 1715 break;
1716 invalid = true; 1716 invalid = true;
1717 //qDebug("invalid %s", event->summary().latin1()); 1717 //qDebug("invalid %s", event->summary().latin1());
1718 incidenceStart = QDateTime( mStartDate ).addSecs( -2 );; 1718 incidenceStart = QDateTime( mStartDate ).addSecs( -2 );;
1719 } 1719 }
1720 if ( last ) 1720 if ( last )
1721 break; 1721 break;
1722 bool ok; 1722 bool ok;
1723 incidenceStart = event->getNextOccurence( incidenceStart.addSecs( 1 ) ,&ok ); 1723 incidenceStart = event->getNextOccurence( incidenceStart.addSecs( 1 ) ,&ok );
1724 if ( ! ok ) 1724 if ( ! ok )
1725 break; 1725 break;
1726 if ( incidenceStart.date() > endDate ) 1726 if ( incidenceStart.date() > endDate )
1727 break; 1727 break;
1728 } 1728 }
1729 } else { // no recur 1729 } else { // no recur
1730 if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") ) 1730 if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") )
1731 if ( event->uid().left(15) == QString("last-syncEvent-") ) 1731 if ( event->uid().left(15) == QString("last-syncEvent-") )
1732 continue; 1732 continue;
1733 int st = event->dtStart().date().daysTo( endDate ); 1733 int st = event->dtStart().date().daysTo( endDate );
1734 if ( st >= 0 ) { // start before timeend 1734 if ( st >= 0 ) { // start before timeend
1735 int end = mStartDate.daysTo( event->dtEnd().date() ); 1735 int end = mStartDate.daysTo( event->dtEnd().date() );
1736 if ( end >= 0 ) { // end after timestart --- got one! 1736 if ( end >= 0 ) { // end after timestart --- got one!
1737 //normalize 1737 //normalize
1738 st = timeSpan - st; 1738 st = timeSpan - st;
1739 if ( st < 0 ) st = 0; 1739 if ( st < 0 ) st = 0;
1740 if ( end > timeSpan ) end = timeSpan; 1740 if ( end > timeSpan ) end = timeSpan;
1741 int iii; 1741 int iii;
1742 for ( iii = st;iii<= end;++iii) 1742 for ( iii = st;iii<= end;++iii)
1743 (*cells)[iii]->insertEvent( event ); 1743 (*cells)[iii]->insertEvent( event );
1744 } 1744 }
1745 } 1745 }
1746 } 1746 }
1747 } 1747 }
1748 // insert due todos 1748 // insert due todos
1749 QPtrList<Todo> todos = calendar()->todos( ); 1749 QPtrList<Todo> todos = calendar()->todos( );
1750 Todo *todo; 1750 Todo *todo;
1751 for(todo = todos.first(); todo; todo = todos.next()) { 1751 for(todo = todos.first(); todo; todo = todos.next()) {
1752 //insertTodo( todo ); 1752 //insertTodo( todo );
1753 if ( todo->hasDueDate() ) { 1753 if ( todo->hasDueDate() ) {
1754 int day = mStartDate.daysTo( todo->dtDue().date() ); 1754 int day = mStartDate.daysTo( todo->dtDue().date() );
1755 if ( day >= 0 && day < timeSpan + 1) { 1755 if ( day >= 0 && day < timeSpan + 1) {
1756 (*cells)[day]->insertTodo( todo ); 1756 (*cells)[day]->insertTodo( todo );
1757 } 1757 }
1758 } 1758 }
1759 } 1759 }
1760 1760
1761 for( i = 0; i < timeSpan+1; ++i ) { 1761 for( i = 0; i < timeSpan+1; ++i ) {
1762 (*cells)[i]->finishUpdateCell(); 1762 (*cells)[i]->finishUpdateCell();
1763 } 1763 }
1764 processSelectionChange(); 1764 processSelectionChange();
1765 //qApp->processEvents(); 1765 //qApp->processEvents();
1766 for( i = 0; i < timeSpan+1; ++i ) { 1766 for( i = 0; i < timeSpan+1; ++i ) {
1767 //(*cells)[i]->repaintfinishUpdateCell(); 1767 //(*cells)[i]->repaintfinishUpdateCell();
1768 QTimer::singleShot( 0, (*cells)[i], SLOT ( repaintfinishUpdateCell() ) ); 1768 QTimer::singleShot( 0, (*cells)[i], SLOT ( repaintfinishUpdateCell() ) );
1769 } 1769 }
1770 setKeyBFocus(); 1770 setKeyBFocus();
1771#else 1771#else
1772 // old code 1772 // old code
1773 //qDebug("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ "); 1773 //qDebug("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ");
1774 int i; 1774 int i;
1775 for( i = 0; i < (*cells).count(); ++i ) { 1775 for( i = 0; i < (*cells).count(); ++i ) {
1776 (*cells)[i]->updateCell(); 1776 (*cells)[i]->updateCell();
1777 } 1777 }
1778 1778
1779 //qDebug("KOMonthView::updateView() "); 1779 //qDebug("KOMonthView::updateView() ");
1780 processSelectionChange(); 1780 processSelectionChange();
1781 // qDebug("---------------------------------------------------------------------+ "); 1781 // qDebug("---------------------------------------------------------------------+ ");
1782 (*cells)[0]->setFocus(); 1782 (*cells)[0]->setFocus();
1783#endif 1783#endif
1784 1784
1785 //qDebug("update time %d ", ti.elapsed()); 1785 //qDebug("update time %d ", ti.elapsed());
1786} 1786}
1787 1787
1788void KOMonthView::setKeyBoardFocus() 1788void KOMonthView::setKeyBoardFocus()
1789{ 1789{
1790 //qDebug("KOMonthView::setKeyBoardFocus() "); 1790 //qDebug("KOMonthView::setKeyBoardFocus() ");
1791 bool shootAgain = false; 1791 bool shootAgain = false;
1792 if ( mShowWeekView ) { 1792 if ( mShowWeekView ) {
1793 shootAgain = !mWeekLabelsW[1]->hasFocus(); 1793 shootAgain = !mWeekLabelsW[1]->hasFocus();
1794 mWeekLabelsW[1]->setFocus(); 1794 mWeekLabelsW[1]->setFocus();
1795 } 1795 }
1796 else { 1796 else {
1797 shootAgain = !mWeekLabels[mNumWeeks]->hasFocus(); 1797 shootAgain = !mWeekLabels[mNumWeeks]->hasFocus();
1798 mWeekLabels[mNumWeeks]->setFocus(); 1798 mWeekLabels[mNumWeeks]->setFocus();
1799 } 1799 }
1800 --mKBFcounter; 1800 --mKBFcounter;
1801 if ( shootAgain && mKBFcounter > 0 ) { 1801 if ( shootAgain && mKBFcounter > 0 ) {
1802 QTimer::singleShot( 50, this, SLOT ( setKeyBoardFocus() ) ); 1802 QTimer::singleShot( 50, this, SLOT ( setKeyBoardFocus() ) );
1803 } 1803 }
1804} 1804}
1805void KOMonthView::setKeyBFocus() 1805void KOMonthView::setKeyBFocus()
1806{ 1806{
1807 //qDebug("KOMonthView::setKeyBFocus() "); 1807 //qDebug("KOMonthView::setKeyBFocus() ");
1808 mKBFcounter = 10; 1808 mKBFcounter = 10;
1809 QTimer::singleShot( 0, this, SLOT ( setKeyBoardFocus() ) ); 1809 QTimer::singleShot( 0, this, SLOT ( setKeyBoardFocus() ) );
1810} 1810}
1811void KOMonthView::resizeEvent(QResizeEvent * e) 1811void KOMonthView::resizeEvent(QResizeEvent * e)
1812{ 1812{
1813 //qDebug("KOMonthView::resizeEvent %d %d -- %d %d ", e->size().width(), e->size().height(), e->oldSize().width(), e->oldSize().height()); 1813 //qDebug("KOMonthView::resizeEvent %d %d -- %d %d ", e->size().width(), e->size().height(), e->oldSize().width(), e->oldSize().height());
1814 if ( isVisible() ) { 1814 if ( isVisible() ) {
1815 //qDebug("KOMonthView::isVisible "); 1815 //qDebug("KOMonthView::isVisible ");
1816 slotComputeLayout(); 1816 slotComputeLayout();
1817 } else 1817 } else
1818 mComputeLayoutTimer->start( 100 ); 1818 mComputeLayoutTimer->start( 100 );
1819 if ( e ) 1819 if ( e )
1820 KOEventView::resizeEvent( e ); 1820 KOEventView::resizeEvent( e );
1821} 1821}
1822 1822
1823void KOMonthView::slotComputeLayout() 1823void KOMonthView::slotComputeLayout()
1824{ 1824{
1825 mComputeLayoutTimer->stop(); 1825 mComputeLayoutTimer->stop();
1826 //qDebug("KOMonthView::Post - resizeEvent %d %d ", width(), height() ); 1826 //qDebug("KOMonthView::Post - resizeEvent %d %d ", width(), height() );
1827 computeLayout(); 1827 computeLayout();
1828 clPending = true; 1828 clPending = true;
1829 setKeyBFocus(); 1829 setKeyBFocus();
1830} 1830}
1831 1831
1832void KOMonthView::doComputeLayoutWeek() 1832void KOMonthView::doComputeLayoutWeek()
1833{ 1833{
1834 1834
1835 int daysToShow; 1835 int daysToShow;
1836 bool combinedSatSun = false; 1836 bool combinedSatSun = false;
1837 if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) { 1837 if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) {
1838 daysToShow = 6; 1838 daysToShow = 6;
1839 combinedSatSun = true; 1839 combinedSatSun = true;
1840 } 1840 }
1841 int wid = width();//e 1841 int wid = width();//e
1842 int hei = height()-1-mNavigatorBar->height(); 1842 int hei = height()-1-mNavigatorBar->height();
1843#ifdef DESKTOP_VERSION
1843 if ( !KOPrefs::instance()->mMonthViewWeekRowlayout ) { 1844 if ( !KOPrefs::instance()->mMonthViewWeekRowlayout ) {
1844 daysToShow = 2; 1845 daysToShow = 2;
1845 } else { 1846 } else
1847#endif
1848 {
1846 if ( wid < hei ) 1849 if ( wid < hei )
1847 daysToShow = 2; 1850 daysToShow = 2;
1848 else 1851 else
1849 daysToShow = 3; 1852 daysToShow = 3;
1850 } 1853 }
1851 bool landscape = (daysToShow == 3); 1854 bool landscape = (daysToShow == 3);
1852 mShowSatSunComp = true; 1855 mShowSatSunComp = true;
1853 combinedSatSun = true; 1856 combinedSatSun = true;
1854 1857
1855 //qDebug("KOMonthView::computeLayout() WWW ------------------------------------ "); 1858 //qDebug("KOMonthView::computeLayout() WWW ------------------------------------ ");
1856 QFontMetrics fm ( mWeekLabels[0]->font() ); 1859 QFontMetrics fm ( mWeekLabels[0]->font() );
1857 int weeklabelwid = fm.width( "888" ); 1860 int weeklabelwid = fm.width( "888" );
1858 wid -= weeklabelwid; 1861 wid -= weeklabelwid;
1859 1862
1860 int colWid = wid / daysToShow; 1863 int colWid = wid / daysToShow;
1861 int dayLabelHei = mDayLabelsW[0]->sizeHint().height(); 1864 int dayLabelHei = mDayLabelsW[0]->sizeHint().height();
1862 int cellHei = (hei - (5- daysToShow )*dayLabelHei) /(5- daysToShow ); 1865 int cellHei = (hei - (5- daysToShow )*dayLabelHei) /(5- daysToShow );
1863 int colModulo = wid % daysToShow; 1866 int colModulo = wid % daysToShow;
1864 int rowModulo = (hei- (5- daysToShow )*dayLabelHei) % daysToShow-1; 1867 int rowModulo = (hei- (5- daysToShow )*dayLabelHei) % daysToShow-1;
1865 //qDebug("rowmod %d ", rowModulo); 1868 //qDebug("rowmod %d ", rowModulo);
1866 int i; 1869 int i;
1867 int x,y,w,h; 1870 int x,y,w,h;
1868 x= 0; 1871 x= 0;
1869 y= 0; 1872 y= 0;
1870 w = colWid; 1873 w = colWid;
1871 h = dayLabelHei ; 1874 h = dayLabelHei ;
1872 for ( i = 0; i < 7; i++) { 1875 for ( i = 0; i < 7; i++) {
1873 if ( i && !( i % daysToShow) && i < 6) { 1876 if ( i && !( i % daysToShow) && i < 6) {
1874 y += hei/(5-daysToShow); 1877 y += hei/(5-daysToShow);
1875 x = 0; 1878 x = 0;
1876 w = colWid; 1879 w = colWid;
1877 } 1880 }
1878 if ( ((i) % daysToShow) >= daysToShow-colModulo ) { 1881 if ( ((i) % daysToShow) >= daysToShow-colModulo ) {
1879 ++w; 1882 ++w;
1880 } 1883 }
1881 int xC,yC,wC,hC; 1884 int xC,yC,wC,hC;
1882 if ( i >= 5 ) { 1885 if ( i >= 5 ) {
1883 int wi = width() - x - weeklabelwid; 1886 int wi = width() - x - weeklabelwid;
1884 if ( i == 5 ) { 1887 if ( i == 5 ) {
1885 xC = x+weeklabelwid; 1888 xC = x+weeklabelwid;
1886 yC = y; 1889 yC = y;
1887 wC = wi/2+wi%2; 1890 wC = wi/2+wi%2;
1888 hC = h; 1891 hC = h;
1889 } else { 1892 } else {
1890 xC = x+weeklabelwid; 1893 xC = x+weeklabelwid;
1891 yC = y; 1894 yC = y;
1892 wC = wi; 1895 wC = wi;
1893 hC = h; 1896 hC = h;
1894 } 1897 }
1895 x = x - w + wi - (wi/2 ); 1898 x = x - w + wi - (wi/2 );
1896 } 1899 }
1897 else { 1900 else {
1898 int wi = w; 1901 int wi = w;
1899 if ( !(( i+1) % daysToShow)) { 1902 if ( !(( i+1) % daysToShow)) {
1900 wi = width() - x - weeklabelwid; 1903 wi = width() - x - weeklabelwid;
1901 } 1904 }
1902 xC = x+weeklabelwid; 1905 xC = x+weeklabelwid;
1903 yC = y; 1906 yC = y;
1904 wC = wi; 1907 wC = wi;
1905 hC = h; 1908 hC = h;
1906 } 1909 }
1907 mDayLabelsW[mapWeekLayout(i,landscape)]->setGeometry( xC,yC,wC,hC); 1910 mDayLabelsW[mapWeekLayout(i,landscape)]->setGeometry( xC,yC,wC,hC);
1908 1911
1909 1912
1910 x += w; 1913 x += w;
1911 } 1914 }
1912 x= 0; 1915 x= 0;
1913 y= dayLabelHei; 1916 y= dayLabelHei;
1914 w = colWid; 1917 w = colWid;
1915 h = cellHei; 1918 h = cellHei;
1916 int max = 0; 1919 int max = 0;
1917 int w_count = mCellsW.count(); 1920 int w_count = mCellsW.count();
1918 for ( i = 0; i < w_count; ++i) { 1921 for ( i = 0; i < w_count; ++i) {
1919 if ( i > 6 ) { 1922 if ( i > 6 ) {
1920 mCellsW[i]->hide(); 1923 mCellsW[i]->hide();
1921 continue; 1924 continue;
1922 } 1925 }
1923 1926
1924 w = colWid; 1927 w = colWid;
1925 if ( ((i) % daysToShow) >= daysToShow-colModulo ) { 1928 if ( ((i) % daysToShow) >= daysToShow-colModulo ) {
1926 ++w; 1929 ++w;
1927 } 1930 }
1928 if ( i == (daysToShow-1-rowModulo)*7) 1931 if ( i == (daysToShow-1-rowModulo)*7)
1929 ++h; 1932 ++h;
1930 1933
1931 int xC,yC,wC,hC; 1934 int xC,yC,wC,hC;
1932 if ( i >= 5 ) { 1935 if ( i >= 5 ) {
1933 if ( i ==5 ) { 1936 if ( i ==5 ) {
1934 max = h/2; 1937 max = h/2;
1935 xC = x+weeklabelwid; 1938 xC = x+weeklabelwid;
1936 yC = y; 1939 yC = y;
1937 wC = w; 1940 wC = w;
1938 hC = max; 1941 hC = max;
1939 x -= w ;y += h/2; 1942 x -= w ;y += h/2;
1940 } else { 1943 } else {
1941 if ( ((i-1) % daysToShow) >= daysToShow-colModulo ) { 1944 if ( ((i-1) % daysToShow) >= daysToShow-colModulo ) {
1942 ++w; 1945 ++w;
1943 } 1946 }
1944 max = h-h/2; 1947 max = h-h/2;
1945 xC = x+weeklabelwid; 1948 xC = x+weeklabelwid;
1946 yC = y; 1949 yC = y;
1947 wC = w; 1950 wC = w;
1948 hC = max; 1951 hC = max;
1949 y -= h/2; 1952 y -= h/2;
1950 } 1953 }
1951 } else { 1954 } else {
1952 max = h; 1955 max = h;
1953 xC = x+weeklabelwid; 1956 xC = x+weeklabelwid;
1954 yC = y; 1957 yC = y;
1955 wC = w; 1958 wC = w;
1956 hC = h; 1959 hC = h;
1957 } 1960 }
1958 mCellsW[mapWeekLayout(i,landscape)]->setGeometry ( xC,yC,wC,hC ); 1961 mCellsW[mapWeekLayout(i,landscape)]->setGeometry ( xC,yC,wC,hC );
1959 1962
1960 1963
1961 x += w; 1964 x += w;
1962 if ( x + w/2 > wid ) { 1965 if ( x + w/2 > wid ) {
1963 x = 0; 1966 x = 0;
1964 y += h+dayLabelHei ; 1967 y += h+dayLabelHei ;
1965 } 1968 }
1966 //mCellsW[i]->dateLabel()->setMaximumHeight( max - mCellsW[i]->lineWidth()*2 ); 1969 //mCellsW[i]->dateLabel()->setMaximumHeight( max - mCellsW[i]->lineWidth()*2 );
1967 } 1970 }
1968 y= dayLabelHei; 1971 y= dayLabelHei;
1969 h = cellHei ; 1972 h = cellHei ;
1970 mWeekLabelsW[0]->setGeometry( 0,y,weeklabelwid,hei-dayLabelHei); 1973 mWeekLabelsW[0]->setGeometry( 0,y,weeklabelwid,hei-dayLabelHei);
1971 mWeekLabelsW[1]->setGeometry( 0,0,weeklabelwid,dayLabelHei); 1974 mWeekLabelsW[1]->setGeometry( 0,0,weeklabelwid,dayLabelHei);
1972 // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height()); 1975 // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height());
1973 //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height()); 1976 //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height());
1974 mShortDayLabelsW = mDayLabelsW[0]->width()-2 < mWidthLongDayLabel ; 1977 mShortDayLabelsW = mDayLabelsW[0]->width()-2 < mWidthLongDayLabel ;
1975 updateDayLabels(); 1978 updateDayLabels();
1976 //bool forceUpdate = !updatePossible; 1979 //bool forceUpdate = !updatePossible;
1977 updatePossible = true; 1980 updatePossible = true;
1978 //mWeekLabels[mNumWeeks]->setText( i18n("M")); 1981 //mWeekLabels[mNumWeeks]->setText( i18n("M"));
1979 //if ( forceUpdate ) 1982 //if ( forceUpdate )
1980 // updateView(); 1983 // updateView();
1981} 1984}
1982void KOMonthView::computeLayoutWeek() 1985void KOMonthView::computeLayoutWeek()
1983{ 1986{
1984 static int lastWid = 0; 1987 static int lastWid = 0;
1985 static int lastHei = 0; 1988 static int lastHei = 0;
1986 int tWid = topLevelWidget()->size().width(); 1989 int tWid = topLevelWidget()->size().width();
1987 int tHei = topLevelWidget()->size().height(); 1990 int tHei = topLevelWidget()->size().height();
1988 int wid = width();//e 1991 int wid = width();//e
1989 int hei = height()-1-mNavigatorBar->height(); 1992 int hei = height()-1-mNavigatorBar->height();
1990 if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei ) 1993 if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei )
1991 return; 1994 return;
1992 1995
1993 if ( lastWid == width() && lastHei == height() ) { 1996 if ( lastWid == width() && lastHei == height() ) {
1994 //qDebug("KOListWeekView::No compute layout needed "); 1997 //qDebug("KOListWeekView::No compute layout needed ");
1995 return; 1998 return;
1996 } 1999 }
1997 lastWid = width(); 2000 lastWid = width();
1998 lastHei = height(); 2001 lastHei = height();
1999 doComputeLayoutWeek(); 2002 doComputeLayoutWeek();
2000} 2003}
2001int KOMonthView::mapWeekLayout( int index, bool landscape ) 2004int KOMonthView::mapWeekLayout( int index, bool landscape )
2002{ 2005{
2003 if ( KOPrefs::instance()->mMonthViewWeekRowlayout ) 2006 if ( KOPrefs::instance()->mMonthViewWeekRowlayout )
2004 return index; 2007 return index;
2005 int diff = 0; 2008 int diff = 0;
2006 if ( !landscape ) diff = 1; 2009 if ( !landscape ) diff = 1;
2007 switch( index ) { 2010 switch( index ) {
2008 case 0: 2011 case 0:
2009 case 5: 2012 case 5:
2010 case 6: 2013 case 6:
2011 return index; 2014 return index;
2012 break; 2015 break;
2013 case 1: 2016 case 1:
2014 return 2+diff; 2017 return 2+diff;
2015 break; 2018 break;
2016 case 2: 2019 case 2:
2017 return 4-(3*diff); 2020 return 4-(3*diff);
2018 break; 2021 break;
2019 case 3: 2022 case 3:
2020 return 1+(3*diff); 2023 return 1+(3*diff);
2021 break; 2024 break;
2022 case 4: 2025 case 4:
2023 return 3-diff; 2026 return 3-diff;
2024 break; 2027 break;
2025 default: 2028 default:
2026 qDebug("KO: Error in mapping week layout "); 2029 qDebug("KO: Error in mapping week layout ");
2027 return index; 2030 return index;
2028 break; 2031 break;
2029 } 2032 }
2030 return index; 2033 return index;
2031} 2034}
2032void KOMonthView::computeLayout() 2035void KOMonthView::computeLayout()
2033{ 2036{
2034 2037
2035 2038
2036 static int lastWid = 0; 2039 static int lastWid = 0;
2037 static int lastHei = 0; 2040 static int lastHei = 0;