summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp72
-rw-r--r--korganizer/calendarview.h6
-rw-r--r--korganizer/datenavigatorcontainer.cpp218
-rw-r--r--korganizer/datenavigatorcontainer.h90
-rw-r--r--korganizer/kdatenavigator.cpp38
-rw-r--r--korganizer/kdatenavigator.h8
-rw-r--r--korganizer/kodaymatrix.cpp49
-rw-r--r--korganizer/kodaymatrix.h8
-rw-r--r--korganizer/korganizerE.pro4
-rw-r--r--korganizer/navigatorbar.cpp22
-rw-r--r--korganizer/navigatorbar.h1
11 files changed, 464 insertions, 52 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 6eaac1c..00285a5 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -14,553 +14,567 @@
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 "kodialogmanager.h" 107#include "kodialogmanager.h"
108#include "outgoingdialog.h" 108#include "outgoingdialog.h"
109#include "incomingdialog.h" 109#include "incomingdialog.h"
110#include "datenavigatorcontainer.h"
110#include "statusdialog.h" 111#include "statusdialog.h"
111#include "kdatenavigator.h" 112#include "kdatenavigator.h"
112#include "kotodoview.h" 113#include "kotodoview.h"
113#include "datenavigator.h" 114#include "datenavigator.h"
114#include "resourceview.h" 115#include "resourceview.h"
115#include "navigatorbar.h" 116#include "navigatorbar.h"
116#include "searchdialog.h" 117#include "searchdialog.h"
117#include "mainwindow.h" 118#include "mainwindow.h"
118 119
119#include "calendarview.h" 120#include "calendarview.h"
120#ifndef DESKTOP_VERSION 121#ifndef DESKTOP_VERSION
121#include <qtopia/alarmserver.h> 122#include <qtopia/alarmserver.h>
122#endif 123#endif
123#ifndef _WIN32_ 124#ifndef _WIN32_
124#include <stdlib.h> 125#include <stdlib.h>
125#include <stdio.h> 126#include <stdio.h>
126#include <unistd.h> 127#include <unistd.h>
127#else 128#else
128#include <qprocess.h> 129#include <qprocess.h>
129#endif 130#endif
130 131
131#ifdef DESKTOP_VERSION 132#ifdef DESKTOP_VERSION
132#include <kabc/stdaddressbook.h> 133#include <kabc/stdaddressbook.h>
133#endif 134#endif
134using namespace KOrg; 135using namespace KOrg;
135using namespace KCal; 136using namespace KCal;
136extern int globalFlagBlockAgenda; 137extern int globalFlagBlockAgenda;
137extern int globalFlagBlockStartup; 138extern int globalFlagBlockStartup;
138 139
139 140
140 141
141class KOBeamPrefs : public QDialog 142class KOBeamPrefs : public QDialog
142{ 143{
143 public: 144 public:
144 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : 145 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) :
145 QDialog( parent, name, true ) 146 QDialog( parent, name, true )
146 { 147 {
147 setCaption( i18n("Beam Options") ); 148 setCaption( i18n("Beam Options") );
148 QVBoxLayout* lay = new QVBoxLayout( this ); 149 QVBoxLayout* lay = new QVBoxLayout( this );
149 lay->setSpacing( 3 ); 150 lay->setSpacing( 3 );
150 lay->setMargin( 3 ); 151 lay->setMargin( 3 );
151 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); 152 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this );
152 lay->addWidget( format ); 153 lay->addWidget( format );
153 format->setExclusive ( true ) ; 154 format->setExclusive ( true ) ;
154 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); 155 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this );
155 lay->addWidget( time ); time->setExclusive ( true ) ; 156 lay->addWidget( time ); time->setExclusive ( true ) ;
156 vcal = new QRadioButton(" vCalendar ", format ); 157 vcal = new QRadioButton(" vCalendar ", format );
157 ical = new QRadioButton(" iCalendar ", format ); 158 ical = new QRadioButton(" iCalendar ", format );
158 vcal->setChecked( true ); 159 vcal->setChecked( true );
159 tz = new QRadioButton(i18n(" With timezone "), time ); 160 tz = new QRadioButton(i18n(" With timezone "), time );
160 local = new QRadioButton(i18n(" Local time "), time ); 161 local = new QRadioButton(i18n(" Local time "), time );
161 tz->setChecked( true ); 162 tz->setChecked( true );
162 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); 163 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this );
163 lay->addWidget( ok ); 164 lay->addWidget( ok );
164 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 165 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
165 lay->addWidget( cancel ); 166 lay->addWidget( cancel );
166 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 167 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
167 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 168 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
168 resize( 200, 200 ); 169 resize( 200, 200 );
169 } 170 }
170 171
171 bool beamVcal() { return vcal->isChecked(); } 172 bool beamVcal() { return vcal->isChecked(); }
172 bool beamLocal() { return local->isChecked(); } 173 bool beamLocal() { return local->isChecked(); }
173private: 174private:
174 QRadioButton* vcal, *ical, *local, *tz; 175 QRadioButton* vcal, *ical, *local, *tz;
175}; 176};
176class KOCatPrefs : public QDialog 177class KOCatPrefs : public QDialog
177{ 178{
178 public: 179 public:
179 KOCatPrefs( QWidget *parent=0, const char *name=0 ) : 180 KOCatPrefs( QWidget *parent=0, const char *name=0 ) :
180 QDialog( parent, name, true ) 181 QDialog( parent, name, true )
181 { 182 {
182 setCaption( i18n("Manage new Categories") ); 183 setCaption( i18n("Manage new Categories") );
183 QVBoxLayout* lay = new QVBoxLayout( this ); 184 QVBoxLayout* lay = new QVBoxLayout( this );
184 lay->setSpacing( 3 ); 185 lay->setSpacing( 3 );
185 lay->setMargin( 3 ); 186 lay->setMargin( 3 );
186 QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n "), this ); 187 QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n "), this );
187 lay->addWidget( lab ); 188 lay->addWidget( lab );
188 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); 189 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this );
189 lay->addWidget( format ); 190 lay->addWidget( format );
190 format->setExclusive ( true ) ; 191 format->setExclusive ( true ) ;
191 addCatBut = new QRadioButton(i18n("Add to category list"), format ); 192 addCatBut = new QRadioButton(i18n("Add to category list"), format );
192 new QRadioButton(i18n("Remove from Events/Todos"), format ); 193 new QRadioButton(i18n("Remove from Events/Todos"), format );
193 addCatBut->setChecked( true ); 194 addCatBut->setChecked( true );
194 QPushButton * ok = new QPushButton( i18n("OK"), this ); 195 QPushButton * ok = new QPushButton( i18n("OK"), this );
195 lay->addWidget( ok ); 196 lay->addWidget( ok );
196 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 197 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
197 lay->addWidget( cancel ); 198 lay->addWidget( cancel );
198 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 199 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
199 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 200 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
200 resize( 200, 200 ); 201 resize( 200, 200 );
201 } 202 }
202 203
203 bool addCat() { return addCatBut->isChecked(); } 204 bool addCat() { return addCatBut->isChecked(); }
204private: 205private:
205 QRadioButton* addCatBut; 206 QRadioButton* addCatBut;
206}; 207};
207 208
208 209
209 210
210CalendarView::CalendarView( CalendarResources *calendar, 211CalendarView::CalendarView( CalendarResources *calendar,
211 QWidget *parent, const char *name ) 212 QWidget *parent, const char *name )
212 : CalendarViewBase( parent, name ), 213 : CalendarViewBase( parent, name ),
213 mCalendar( calendar ), 214 mCalendar( calendar ),
214 mResourceManager( calendar->resourceManager() ) 215 mResourceManager( calendar->resourceManager() )
215{ 216{
216 217
217 mEventEditor = 0; 218 mEventEditor = 0;
218 mTodoEditor = 0; 219 mTodoEditor = 0;
219 220
220 init(); 221 init();
221} 222}
222 223
223CalendarView::CalendarView( Calendar *calendar, 224CalendarView::CalendarView( Calendar *calendar,
224 QWidget *parent, const char *name ) 225 QWidget *parent, const char *name )
225 : CalendarViewBase( parent, name ), 226 : CalendarViewBase( parent, name ),
226 mCalendar( calendar ), 227 mCalendar( calendar ),
227 mResourceManager( 0 ) 228 mResourceManager( 0 )
228{ 229{
229 230
230 mEventEditor = 0; 231 mEventEditor = 0;
231 mTodoEditor = 0; 232 mTodoEditor = 0;
232 init(); 233 init();
233} 234}
234 235
235void CalendarView::init() 236void CalendarView::init()
236{ 237{
237 238
238 setFocusPolicy ( WheelFocus ); 239 setFocusPolicy ( WheelFocus );
239 mViewerCallerIsSearchDialog = false; 240 mViewerCallerIsSearchDialog = false;
240 mBlockShowDates = false; 241 mBlockShowDates = false;
241 beamDialog = new KOBeamPrefs(); 242 beamDialog = new KOBeamPrefs();
242 mDatePickerMode = 0; 243 mDatePickerMode = 0;
243 mCurrentSyncDevice = ""; 244 mCurrentSyncDevice = "";
244 writeLocale(); 245 writeLocale();
245 mViewManager = new KOViewManager( this ); 246 mViewManager = new KOViewManager( this );
246 mDialogManager = new KODialogManager( this ); 247 mDialogManager = new KODialogManager( this );
247 mEventViewerDialog = 0; 248 mEventViewerDialog = 0;
248 mModified = false; 249 mModified = false;
249 mReadOnly = false; 250 mReadOnly = false;
250 mSelectedIncidence = 0; 251 mSelectedIncidence = 0;
251 mCalPrinter = 0; 252 mCalPrinter = 0;
252 mFilters.setAutoDelete(true); 253 mFilters.setAutoDelete(true);
253 254
254 mCalendar->registerObserver( this ); 255 mCalendar->registerObserver( this );
255 // TODO: Make sure that view is updated, when calendar is changed. 256 // TODO: Make sure that view is updated, when calendar is changed.
256 257
257 mStorage = new FileStorage( mCalendar ); 258 mStorage = new FileStorage( mCalendar );
258 mNavigator = new DateNavigator( this, "datevav", mViewManager ); 259 mNavigator = new DateNavigator( this, "datevav", mViewManager );
259 260
260 QBoxLayout *topLayout = (QBoxLayout*)layout(); 261 QBoxLayout *topLayout = (QBoxLayout*)layout();
261#ifndef KORG_NOSPLITTER 262#ifndef KORG_NOSPLITTER
262 // create the main layout frames. 263 // create the main layout frames.
263 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); 264 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner");
264 topLayout->addWidget(mPanner); 265 topLayout->addWidget(mPanner);
265 266
266 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, 267 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner,
267 "CalendarView::LeftFrame"); 268 "CalendarView::LeftFrame");
268 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); 269 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize);
269 270
270 mDateNavigator = new KDateNavigator(mLeftSplitter, mCalendar, TRUE, 271 mDateNavigator = new DateNavigatorContainer( mLeftSplitter,
271 "CalendarView::DateNavigator", QDate::currentDate() ); 272 "CalendarView::DateNavigator" );
273
272 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); 274 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize);
273 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); 275 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2");
274 mTodoList->setNavigator( mNavigator ); 276 mTodoList->setNavigator( mNavigator );
275 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); 277 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView");
276 278
277#ifdef KORG_NORESOURCEVIEW 279#ifdef KORG_NORESOURCEVIEW
278 mResourceView = 0; 280 mResourceView = 0;
279#else 281#else
280 if ( mResourceManager ) { 282 if ( mResourceManager ) {
281 mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); 283 mResourceView = new ResourceView( mResourceManager, mLeftSplitter );
282 mResourceView->updateView(); 284 mResourceView->updateView();
283 connect( mResourceView, SIGNAL( resourcesChanged() ), 285 connect( mResourceView, SIGNAL( resourcesChanged() ),
284 SLOT( updateView() ) ); 286 SLOT( updateView() ) );
285 } else { 287 } else {
286 mResourceView = 0; 288 mResourceView = 0;
287 } 289 }
288#endif 290#endif
289 QWidget *rightBox = new QWidget( mPanner ); 291 QWidget *rightBox = new QWidget( mPanner );
290 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 292 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
291 293
292 mRightFrame = new QWidgetStack( rightBox ); 294 mRightFrame = new QWidgetStack( rightBox );
293 rightLayout->addWidget( mRightFrame, 1 ); 295 rightLayout->addWidget( mRightFrame, 1 );
294 296
295 mLeftFrame = mLeftSplitter; 297 mLeftFrame = mLeftSplitter;
296#else 298#else
297 QWidget *mainBox = new QWidget( this ); 299 QWidget *mainBox = new QWidget( this );
298 QWidget *leftFrame = new QWidget( mainBox ); 300 //QWidget *leftFrame = new QWidget( mainBox );
299
300 QBoxLayout * mainBoxLayout; 301 QBoxLayout * mainBoxLayout;
301 QBoxLayout * leftFrameLayout;
302 if ( KOPrefs::instance()->mVerticalScreen ) { 302 if ( KOPrefs::instance()->mVerticalScreen ) {
303 mainBoxLayout = new QVBoxLayout(mainBox); 303 mainBoxLayout = new QVBoxLayout(mainBox);
304 leftFrameLayout = new QHBoxLayout(leftFrame ); 304 //leftFrameLayout = new QHBoxLayout(leftFrame );
305 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mainBox);;
306 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left );
305 } else { 307 } else {
306 mainBoxLayout = new QHBoxLayout(mainBox); 308 mainBoxLayout = new QHBoxLayout(mainBox);
307 leftFrameLayout = new QVBoxLayout(leftFrame ); 309 //leftFrameLayout = new QVBoxLayout(leftFrame );
310 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mainBox);;
311 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
308 } 312 }
313 //QBoxLayout * leftFrameLayout;
309 topLayout->addWidget( mainBox ); 314 topLayout->addWidget( mainBox );
310 mainBoxLayout->addWidget (leftFrame); 315 mainBoxLayout->addWidget (mLeftFrame);
311 mDateNavigator = new KDateNavigator(leftFrame, mCalendar, TRUE, 316 mDateNavigator = new DateNavigatorContainer( mLeftFrame,
317 "CalendarView::DateNavigator" );
318#if 0
319 // FIXME
320 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE,
312 "CalendarView::DateNavigator", QDate::currentDate()); 321 "CalendarView::DateNavigator", QDate::currentDate());
322#endif
313 // mDateNavigator->blockSignals( true ); 323 // mDateNavigator->blockSignals( true );
314 leftFrameLayout->addWidget( mDateNavigator ); 324 //leftFrameLayout->addWidget( mDateNavigator );
315 mFilterView = new KOFilterView(&mFilters,leftFrame,"CalendarView::FilterView"); 325 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall");
316 mTodoList = new KOTodoView(mCalendar, leftFrame, "todolistsmall"); 326 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView");
317 mTodoList->setNavigator( mNavigator ); 327 mTodoList->setNavigator( mNavigator );
318 328#if 0
319 if ( QApplication::desktop()->width() < 480 ) { 329 if ( QApplication::desktop()->width() < 480 ) {
320 leftFrameLayout->addWidget(mFilterView); 330 leftFrameLayout->addWidget(mFilterView);
321 leftFrameLayout->addWidget(mTodoList, 2 ); 331 leftFrameLayout->addWidget(mTodoList, 2 );
322 332
323 } else { 333 } else {
324 leftFrameLayout->addWidget(mTodoList,2 ); 334 leftFrameLayout->addWidget(mTodoList,2 );
325 leftFrameLayout->addWidget(mFilterView ); 335 leftFrameLayout->addWidget(mFilterView );
326 } 336 }
337#endif
327 mFilterView->hide(); 338 mFilterView->hide();
328 QWidget *rightBox = new QWidget( mainBox ); 339 QWidget *rightBox = new QWidget( mainBox );
329 mainBoxLayout->addWidget ( rightBox, 10 ); 340 mainBoxLayout->addWidget ( rightBox, 10 );
330 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 341 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
331 mRightFrame = new QWidgetStack( rightBox ); 342 mRightFrame = new QWidgetStack( rightBox );
332 rightLayout->addWidget( mRightFrame, 10 ); 343 rightLayout->addWidget( mRightFrame, 10 );
333 344
334 mLeftFrame = leftFrame; 345 //mLeftFrame = (QWidget *)leftFrame;
335 if ( KOPrefs::instance()->mVerticalScreen ) { 346 if ( KOPrefs::instance()->mVerticalScreen ) {
336 mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); 347 mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() );
337 leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); 348 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() );
349 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() );
350 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() );
338 } else { 351 } else {
339 mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); 352 mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() );
340 leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); 353 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() );
354 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() );
341 } 355 }
342 if ( !KOPrefs::instance()->mShowDateNavigator) 356 if ( !KOPrefs::instance()->mShowDateNavigator)
343 mDateNavigator->hide(); 357 mLeftFrame->toggle();
344 //qDebug("Calendarview Size %d %d ", width(), height()); 358 //qDebug("Calendarview Size %d %d ", width(), height());
345#endif 359#endif
346 360
347 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 361 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
348 SLOT( showDates( const KCal::DateList & ) ) ); 362 SLOT( showDates( const KCal::DateList & ) ) );
349 363
350 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 364 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
351 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 365 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
352 366
353 367
354 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), 368 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ),
355 mNavigator, SLOT( selectWeek( const QDate & ) ) ); 369 mNavigator, SLOT( selectWeek( const QDate & ) ) );
356 370
357 connect( mDateNavigator, SIGNAL( goPrevYear() ), 371 connect( mDateNavigator, SIGNAL( goPrevYear() ),
358 mNavigator, SLOT( selectPreviousYear() ) ); 372 mNavigator, SLOT( selectPreviousYear() ) );
359 connect( mDateNavigator, SIGNAL( goNextYear() ), 373 connect( mDateNavigator, SIGNAL( goNextYear() ),
360 mNavigator, SLOT( selectNextYear() ) ); 374 mNavigator, SLOT( selectNextYear() ) );
361 connect( mDateNavigator, SIGNAL( goPrevMonth() ), 375 connect( mDateNavigator, SIGNAL( goPrevMonth() ),
362 mNavigator, SLOT( selectPreviousMonth() ) ); 376 mNavigator, SLOT( selectPreviousMonth() ) );
363 connect( mDateNavigator, SIGNAL( goNextMonth() ), 377 connect( mDateNavigator, SIGNAL( goNextMonth() ),
364 mNavigator, SLOT( selectNextMonth() ) ); 378 mNavigator, SLOT( selectNextMonth() ) );
365 379
366 connect( mDateNavigator, SIGNAL( goPrevious() ), 380 connect( mDateNavigator, SIGNAL( goPrevious() ),
367 mNavigator, SLOT( selectPrevious() ) ); 381 mNavigator, SLOT( selectPrevious() ) );
368 connect( mDateNavigator, SIGNAL( goNext() ), 382 connect( mDateNavigator, SIGNAL( goNext() ),
369 mNavigator, SLOT( selectNext() ) ); 383 mNavigator, SLOT( selectNext() ) );
370 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), 384 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ),
371 mNavigator, SLOT( slotMonthSelect( int ) ) ); 385 mNavigator, SLOT( slotMonthSelect( int ) ) );
372 386
373 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 387 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
374 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 388 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
375 389#if 0
376 connect( mDateNavigator, SIGNAL( eventDropped( Event * ) ), 390 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ),
377 SLOT( eventAdded( Event *) ) ); 391 SLOT( incidenceAdded( Incidence *) ) );
378 392#endif
379 connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); 393 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView()));
380 394
381 connect( this, SIGNAL( configChanged() ), 395 connect( this, SIGNAL( configChanged() ),
382 mDateNavigator, SLOT( updateConfig() ) ); 396 mDateNavigator, SLOT( updateConfig() ) );
383 397
384 connect( mTodoList, SIGNAL( newTodoSignal() ), 398 connect( mTodoList, SIGNAL( newTodoSignal() ),
385 SLOT( newTodo() ) ); 399 SLOT( newTodo() ) );
386 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), 400 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ),
387 SLOT( newSubTodo( Todo * ) ) ); 401 SLOT( newSubTodo( Todo * ) ) );
388 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), 402 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ),
389 SLOT( editTodo( Todo * ) ) ); 403 SLOT( editTodo( Todo * ) ) );
390 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), 404 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ),
391 SLOT( showTodo( Todo *) ) ); 405 SLOT( showTodo( Todo *) ) );
392 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), 406 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ),
393 SLOT( deleteTodo( Todo *) ) ); 407 SLOT( deleteTodo( Todo *) ) );
394 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); 408 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) );
395 connect( mTodoList, SIGNAL( purgeCompletedSignal() ), 409 connect( mTodoList, SIGNAL( purgeCompletedSignal() ),
396 SLOT( purgeCompleted() ) ); 410 SLOT( purgeCompleted() ) );
397 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), 411 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ),
398 SIGNAL( todoModified( Todo *, int ) ) ); 412 SIGNAL( todoModified( Todo *, int ) ) );
399 413
400 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), 414 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ),
401 this, SLOT ( cloneIncidence( Incidence * ) ) ); 415 this, SLOT ( cloneIncidence( Incidence * ) ) );
402 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), 416 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ),
403 this, SLOT (cancelIncidence( Incidence * ) ) ); 417 this, SLOT (cancelIncidence( Incidence * ) ) );
404 418
405 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), 419 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ),
406 this, SLOT ( moveIncidence( Incidence * ) ) ); 420 this, SLOT ( moveIncidence( Incidence * ) ) );
407 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), 421 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ),
408 this, SLOT ( beamIncidence( Incidence * ) ) ); 422 this, SLOT ( beamIncidence( Incidence * ) ) );
409 423
410 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), 424 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ),
411 this, SLOT ( todo_unsub( Todo * ) ) ); 425 this, SLOT ( todo_unsub( Todo * ) ) );
412 426
413 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ), 427 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ),
414 this, SLOT ( todo_resub( Todo *,Todo * ) ) ); 428 this, SLOT ( todo_resub( Todo *,Todo * ) ) );
415 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, 429 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList,
416 SLOT( updateTodo( Todo *, int ) ) ); 430 SLOT( updateTodo( Todo *, int ) ) );
417 connect( this, SIGNAL( todoModified( Todo *, int )), this, 431 connect( this, SIGNAL( todoModified( Todo *, int )), this,
418 SLOT( changeTodoDisplay( Todo *, int ) ) ); 432 SLOT( changeTodoDisplay( Todo *, int ) ) );
419 433
420 434
421 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); 435 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) );
422 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); 436 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) );
423 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); 437 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) );
424 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); 438 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) );
425 439
426 440
427 441
428 442
429 443
430 connect(QApplication::clipboard(),SIGNAL(dataChanged()), 444 connect(QApplication::clipboard(),SIGNAL(dataChanged()),
431 SLOT(checkClipboard())); 445 SLOT(checkClipboard()));
432 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), 446 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ),
433 SLOT( processTodoListSelection( Incidence * ) ) ); 447 SLOT( processTodoListSelection( Incidence * ) ) );
434 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); 448 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool)));
435 449
436 // kdDebug() << "CalendarView::CalendarView() done" << endl; 450 // kdDebug() << "CalendarView::CalendarView() done" << endl;
437 451
438 mDateFrame = new QVBox(0,0,WType_Popup); 452 mDateFrame = new QVBox(0,0,WType_Popup);
439 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 453 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
440 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 454 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
441 mDateFrame->setLineWidth(3); 455 mDateFrame->setLineWidth(3);
442 mDateFrame->hide(); 456 mDateFrame->hide();
443 mDateFrame->setCaption( i18n( "Pick a date to display")); 457 mDateFrame->setCaption( i18n( "Pick a date to display"));
444 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); 458 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() );
445 459
446 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); 460 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate)));
447 461
448 mEventEditor = mDialogManager->getEventEditor(); 462 mEventEditor = mDialogManager->getEventEditor();
449 mTodoEditor = mDialogManager->getTodoEditor(); 463 mTodoEditor = mDialogManager->getTodoEditor();
450 464
451 mFlagEditDescription = false; 465 mFlagEditDescription = false;
452 466
453 mSuspendTimer = new QTimer( this ); 467 mSuspendTimer = new QTimer( this );
454 mAlarmTimer = new QTimer( this ); 468 mAlarmTimer = new QTimer( this );
455 mRecheckAlarmTimer = new QTimer( this ); 469 mRecheckAlarmTimer = new QTimer( this );
456 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); 470 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
457 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); 471 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
458 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); 472 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
459 mAlarmDialog = new AlarmDialog( this ); 473 mAlarmDialog = new AlarmDialog( this );
460 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); 474 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
461 mAlarmDialog->setServerNotification( false ); 475 mAlarmDialog->setServerNotification( false );
462 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); 476 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
463 477
464 478
465#ifndef DESKTOP_VERSION 479#ifndef DESKTOP_VERSION
466//US listen for arriving address resultsets 480//US listen for arriving address resultsets
467 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), 481 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)),
468 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&))); 482 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)));
469#endif 483#endif
470 484 mDateNavigator->setCalendar( mCalendar );
471} 485}
472 486
473 487
474CalendarView::~CalendarView() 488CalendarView::~CalendarView()
475{ 489{
476 // kdDebug() << "~CalendarView()" << endl; 490 // kdDebug() << "~CalendarView()" << endl;
477 //qDebug("CalendarView::~CalendarView() "); 491 //qDebug("CalendarView::~CalendarView() ");
478 delete mDialogManager; 492 delete mDialogManager;
479 delete mViewManager; 493 delete mViewManager;
480 delete mStorage; 494 delete mStorage;
481 delete mDateFrame ; 495 delete mDateFrame ;
482 delete beamDialog; 496 delete beamDialog;
483 delete mEventViewerDialog; 497 delete mEventViewerDialog;
484 //kdDebug() << "~CalendarView() done" << endl; 498 //kdDebug() << "~CalendarView() done" << endl;
485} 499}
486 500
487void CalendarView::showDay( QDate d ) 501void CalendarView::showDay( QDate d )
488{ 502{
489 dateNavigator()->blockSignals( true ); 503 dateNavigator()->blockSignals( true );
490 dateNavigator()->selectDate( d ); 504 dateNavigator()->selectDate( d );
491 dateNavigator()->blockSignals( false ); 505 dateNavigator()->blockSignals( false );
492 mViewManager->showDayView(); 506 mViewManager->showDayView();
493 //dateNavigator()->selectDate( d ); 507 //dateNavigator()->selectDate( d );
494} 508}
495void CalendarView::timerAlarm() 509void CalendarView::timerAlarm()
496{ 510{
497 //qDebug("CalendarView::timerAlarm() "); 511 //qDebug("CalendarView::timerAlarm() ");
498 computeAlarm(mAlarmNotification ); 512 computeAlarm(mAlarmNotification );
499} 513}
500 514
501void CalendarView::suspendAlarm() 515void CalendarView::suspendAlarm()
502{ 516{
503 //qDebug(" CalendarView::suspendAlarm() "); 517 //qDebug(" CalendarView::suspendAlarm() ");
504 computeAlarm(mSuspendAlarmNotification ); 518 computeAlarm(mSuspendAlarmNotification );
505 519
506} 520}
507 521
508void CalendarView::startAlarm( QString mess , QString filename) 522void CalendarView::startAlarm( QString mess , QString filename)
509{ 523{
510 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 524 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
511 QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) ); 525 QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) );
512 526
513} 527}
514 528
515void CalendarView::checkNextTimerAlarm() 529void CalendarView::checkNextTimerAlarm()
516{ 530{
517 mCalendar->checkAlarmForIncidence( 0, true ); 531 mCalendar->checkAlarmForIncidence( 0, true );
518} 532}
519 533
520void CalendarView::computeAlarm( QString msg ) 534void CalendarView::computeAlarm( QString msg )
521{ 535{
522 536
523 QString mess = msg; 537 QString mess = msg;
524 QString mAlarmMessage = mess.mid( 9 ); 538 QString mAlarmMessage = mess.mid( 9 );
525 QString filename = MainWindow::resourcePath(); 539 QString filename = MainWindow::resourcePath();
526 filename += "koalarm.wav"; 540 filename += "koalarm.wav";
527 QString tempfilename; 541 QString tempfilename;
528 if ( mess.left( 13 ) == "suspend_alarm") { 542 if ( mess.left( 13 ) == "suspend_alarm") {
529 bool error = false; 543 bool error = false;
530 int len = mess.mid( 13 ).find("+++"); 544 int len = mess.mid( 13 ).find("+++");
531 if ( len < 2 ) 545 if ( len < 2 )
532 error = true; 546 error = true;
533 else { 547 else {
534 tempfilename = mess.mid( 13, len ); 548 tempfilename = mess.mid( 13, len );
535 if ( !QFile::exists( tempfilename ) ) 549 if ( !QFile::exists( tempfilename ) )
536 error = true; 550 error = true;
537 } 551 }
538 if ( ! error ) { 552 if ( ! error ) {
539 filename = tempfilename; 553 filename = tempfilename;
540 } 554 }
541 mAlarmMessage = mess.mid( 13+len+3 ); 555 mAlarmMessage = mess.mid( 13+len+3 );
542 //qDebug("suspend file %s ",tempfilename.latin1() ); 556 //qDebug("suspend file %s ",tempfilename.latin1() );
543 startAlarm( mAlarmMessage, filename); 557 startAlarm( mAlarmMessage, filename);
544 return; 558 return;
545 } 559 }
546 if ( mess.left( 11 ) == "timer_alarm") { 560 if ( mess.left( 11 ) == "timer_alarm") {
547 //mTimerTime = 0; 561 //mTimerTime = 0;
548 startAlarm( mess.mid( 11 ), filename ); 562 startAlarm( mess.mid( 11 ), filename );
549 return; 563 return;
550 } 564 }
551 if ( mess.left( 10 ) == "proc_alarm") { 565 if ( mess.left( 10 ) == "proc_alarm") {
552 bool error = false; 566 bool error = false;
553 int len = mess.mid( 10 ).find("+++"); 567 int len = mess.mid( 10 ).find("+++");
554 if ( len < 2 ) 568 if ( len < 2 )
555 error = true; 569 error = true;
556 else { 570 else {
557 tempfilename = mess.mid( 10, len ); 571 tempfilename = mess.mid( 10, len );
558 if ( !QFile::exists( tempfilename ) ) 572 if ( !QFile::exists( tempfilename ) )
559 error = true; 573 error = true;
560 } 574 }
561 if ( error ) { 575 if ( error ) {
562 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 576 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
563 mAlarmMessage += mess.mid( 10+len+3+9 ); 577 mAlarmMessage += mess.mid( 10+len+3+9 );
564 } else { 578 } else {
565 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 579 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
566 //qDebug("-----system command %s ",tempfilename.latin1() ); 580 //qDebug("-----system command %s ",tempfilename.latin1() );
@@ -3592,211 +3606,215 @@ KOFilterView *CalendarView::filterView()
3592} 3606}
3593void CalendarView::selectFilter( int fil ) 3607void CalendarView::selectFilter( int fil )
3594{ 3608{
3595 mFilterView->setSelectedFilter( fil ); 3609 mFilterView->setSelectedFilter( fil );
3596} 3610}
3597void CalendarView::showFilter(bool visible) 3611void CalendarView::showFilter(bool visible)
3598{ 3612{
3599 if (visible) mFilterView->show(); 3613 if (visible) mFilterView->show();
3600 else mFilterView->hide(); 3614 else mFilterView->hide();
3601} 3615}
3602void CalendarView::toggleFilerEnabled( ) 3616void CalendarView::toggleFilerEnabled( )
3603{ 3617{
3604 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); 3618 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() );
3605 if ( !mFilterView->filtersEnabled() ) 3619 if ( !mFilterView->filtersEnabled() )
3606 topLevelWidget()->setCaption( i18n("Filter disabled ") ); 3620 topLevelWidget()->setCaption( i18n("Filter disabled ") );
3607 3621
3608} 3622}
3609void CalendarView::updateFilter() 3623void CalendarView::updateFilter()
3610{ 3624{
3611 CalFilter *filter = mFilterView->selectedFilter(); 3625 CalFilter *filter = mFilterView->selectedFilter();
3612 if (filter) { 3626 if (filter) {
3613 QString mess; 3627 QString mess;
3614 if (mFilterView->filtersEnabled()) { 3628 if (mFilterView->filtersEnabled()) {
3615 mess = i18n("Filter selected: ")+filter->name(); 3629 mess = i18n("Filter selected: ")+filter->name();
3616 filter->setEnabled(true); 3630 filter->setEnabled(true);
3617 } 3631 }
3618 else filter->setEnabled(false); 3632 else filter->setEnabled(false);
3619 mCalendar->setFilter(filter); 3633 mCalendar->setFilter(filter);
3620 updateView(); 3634 updateView();
3621 if ( !mess.isEmpty() ) 3635 if ( !mess.isEmpty() )
3622 topLevelWidget()->setCaption( mess ); 3636 topLevelWidget()->setCaption( mess );
3623 3637
3624 } 3638 }
3625} 3639}
3626 3640
3627void CalendarView::filterEdited() 3641void CalendarView::filterEdited()
3628{ 3642{
3629 mFilterView->updateFilters(); 3643 mFilterView->updateFilters();
3630 updateFilter(); 3644 updateFilter();
3631 writeSettings(); 3645 writeSettings();
3632} 3646}
3633 3647
3634 3648
3635void CalendarView::takeOverEvent() 3649void CalendarView::takeOverEvent()
3636{ 3650{
3637 Incidence *incidence = currentSelection(); 3651 Incidence *incidence = currentSelection();
3638 3652
3639 if (!incidence) return; 3653 if (!incidence) return;
3640 3654
3641 incidence->setOrganizer(KOPrefs::instance()->email()); 3655 incidence->setOrganizer(KOPrefs::instance()->email());
3642 incidence->recreate(); 3656 incidence->recreate();
3643 incidence->setReadOnly(false); 3657 incidence->setReadOnly(false);
3644 3658
3645 updateView(); 3659 updateView();
3646} 3660}
3647 3661
3648void CalendarView::takeOverCalendar() 3662void CalendarView::takeOverCalendar()
3649{ 3663{
3650 // TODO: Create Calendar::allIncidences() function and use it here 3664 // TODO: Create Calendar::allIncidences() function and use it here
3651 3665
3652 QPtrList<Event> events = mCalendar->events(); 3666 QPtrList<Event> events = mCalendar->events();
3653 for(uint i=0; i<events.count(); ++i) { 3667 for(uint i=0; i<events.count(); ++i) {
3654 events.at(i)->setOrganizer(KOPrefs::instance()->email()); 3668 events.at(i)->setOrganizer(KOPrefs::instance()->email());
3655 events.at(i)->recreate(); 3669 events.at(i)->recreate();
3656 events.at(i)->setReadOnly(false); 3670 events.at(i)->setReadOnly(false);
3657 } 3671 }
3658 3672
3659 QPtrList<Todo> todos = mCalendar->todos(); 3673 QPtrList<Todo> todos = mCalendar->todos();
3660 for(uint i=0; i<todos.count(); ++i) { 3674 for(uint i=0; i<todos.count(); ++i) {
3661 todos.at(i)->setOrganizer(KOPrefs::instance()->email()); 3675 todos.at(i)->setOrganizer(KOPrefs::instance()->email());
3662 todos.at(i)->recreate(); 3676 todos.at(i)->recreate();
3663 todos.at(i)->setReadOnly(false); 3677 todos.at(i)->setReadOnly(false);
3664 } 3678 }
3665 3679
3666 QPtrList<Journal> journals = mCalendar->journals(); 3680 QPtrList<Journal> journals = mCalendar->journals();
3667 for(uint i=0; i<journals.count(); ++i) { 3681 for(uint i=0; i<journals.count(); ++i) {
3668 journals.at(i)->setOrganizer(KOPrefs::instance()->email()); 3682 journals.at(i)->setOrganizer(KOPrefs::instance()->email());
3669 journals.at(i)->recreate(); 3683 journals.at(i)->recreate();
3670 journals.at(i)->setReadOnly(false); 3684 journals.at(i)->setReadOnly(false);
3671 } 3685 }
3672 3686
3673 updateView(); 3687 updateView();
3674} 3688}
3675 3689
3676void CalendarView::showIntro() 3690void CalendarView::showIntro()
3677{ 3691{
3678 kdDebug() << "To be implemented." << endl; 3692 kdDebug() << "To be implemented." << endl;
3679} 3693}
3680 3694
3681QWidgetStack *CalendarView::viewStack() 3695QWidgetStack *CalendarView::viewStack()
3682{ 3696{
3683 return mRightFrame; 3697 return mRightFrame;
3684} 3698}
3685 3699
3686QWidget *CalendarView::leftFrame() 3700QWidget *CalendarView::leftFrame()
3687{ 3701{
3688 return mLeftFrame; 3702 return ( QWidget *)mLeftFrame;
3689} 3703}
3690 3704
3691DateNavigator *CalendarView::dateNavigator() 3705DateNavigator *CalendarView::dateNavigator()
3692{ 3706{
3693 return mNavigator; 3707 return mNavigator;
3694} 3708}
3695 3709
3696KDateNavigator* CalendarView::dateNavigatorWidget() 3710KDateNavigator* CalendarView::dateNavigatorWidget()
3697{ 3711{
3698 return mDateNavigator; 3712 return mDateNavigator->navigatorView();
3699} 3713}
3700void CalendarView::toggleDateNavigatorWidget() 3714void CalendarView::toggleDateNavigatorWidget()
3701{ 3715{
3702 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ; 3716 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ;
3717 mLeftFrame->toggle();
3718 // FIXME mShowDateNavigator is not the toggle state of mLeftFrame
3719#if 0
3703 if (!KOPrefs::instance()->mShowDateNavigator ) 3720 if (!KOPrefs::instance()->mShowDateNavigator )
3704 mDateNavigator->hide(); 3721 mDateNavigator->hide();
3705 else 3722 else
3706 mDateNavigator->show(); 3723 mDateNavigator->show();
3724#endif
3707} 3725}
3708void CalendarView::addView(KOrg::BaseView *view) 3726void CalendarView::addView(KOrg::BaseView *view)
3709{ 3727{
3710 mViewManager->addView(view); 3728 mViewManager->addView(view);
3711} 3729}
3712 3730
3713void CalendarView::showView(KOrg::BaseView *view) 3731void CalendarView::showView(KOrg::BaseView *view)
3714{ 3732{
3715 mViewManager->showView(view, mLeftFrame->isVisible()); 3733 mViewManager->showView(view, mLeftFrame->isVisible());
3716} 3734}
3717 3735
3718Incidence *CalendarView::currentSelection() 3736Incidence *CalendarView::currentSelection()
3719{ 3737{
3720 return mViewManager->currentSelection(); 3738 return mViewManager->currentSelection();
3721} 3739}
3722void CalendarView::toggleAllDaySize() 3740void CalendarView::toggleAllDaySize()
3723{ 3741{
3724 /* 3742 /*
3725 if ( KOPrefs::instance()->mAllDaySize > 47 ) 3743 if ( KOPrefs::instance()->mAllDaySize > 47 )
3726 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; 3744 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2;
3727 else 3745 else
3728 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; 3746 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2;
3729 */ 3747 */
3730 viewManager()->agendaView()->toggleAllDay(); 3748 viewManager()->agendaView()->toggleAllDay();
3731} 3749}
3732void CalendarView::toggleExpand() 3750void CalendarView::toggleExpand()
3733{ 3751{
3734 // if ( mLeftFrame->isHidden() ) { 3752 // if ( mLeftFrame->isHidden() ) {
3735 // mLeftFrame->show(); 3753 // mLeftFrame->show();
3736 // emit calendarViewExpanded( false ); 3754 // emit calendarViewExpanded( false );
3737 // } else { 3755 // } else {
3738 // mLeftFrame->hide(); 3756 // mLeftFrame->hide();
3739 // emit calendarViewExpanded( true ); 3757 // emit calendarViewExpanded( true );
3740 // } 3758 // }
3741 //qDebug(" CalendarView::toggleExpand()"); 3759 //qDebug(" CalendarView::toggleExpand()");
3742 globalFlagBlockAgenda = 1; 3760 globalFlagBlockAgenda = 1;
3743 emit calendarViewExpanded( !mLeftFrame->isHidden() ); 3761 emit calendarViewExpanded( !mLeftFrame->isHidden() );
3744 globalFlagBlockAgenda = 5; 3762 globalFlagBlockAgenda = 5;
3745 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); 3763 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() );
3746 //mViewManager->showView( 0, true ); 3764 //mViewManager->showView( 0, true );
3747} 3765}
3748 3766
3749void CalendarView::calendarModified( bool modified, Calendar * ) 3767void CalendarView::calendarModified( bool modified, Calendar * )
3750{ 3768{
3751 setModified( modified ); 3769 setModified( modified );
3752} 3770}
3753 3771
3754Todo *CalendarView::selectedTodo() 3772Todo *CalendarView::selectedTodo()
3755{ 3773{
3756 Incidence *incidence = currentSelection(); 3774 Incidence *incidence = currentSelection();
3757 if ( incidence && incidence->type() == "Todo" ) { 3775 if ( incidence && incidence->type() == "Todo" ) {
3758 return static_cast<Todo *>( incidence ); 3776 return static_cast<Todo *>( incidence );
3759 } 3777 }
3760 3778
3761 incidence = mTodoList->selectedIncidences().first(); 3779 incidence = mTodoList->selectedIncidences().first();
3762 if ( incidence && incidence->type() == "Todo" ) { 3780 if ( incidence && incidence->type() == "Todo" ) {
3763 return static_cast<Todo *>( incidence ); 3781 return static_cast<Todo *>( incidence );
3764 } 3782 }
3765 3783
3766 return 0; 3784 return 0;
3767} 3785}
3768 3786
3769void CalendarView::dialogClosing(Incidence *in) 3787void CalendarView::dialogClosing(Incidence *in)
3770{ 3788{
3771 // mDialogList.remove(in); 3789 // mDialogList.remove(in);
3772} 3790}
3773 3791
3774void CalendarView::showIncidence() 3792void CalendarView::showIncidence()
3775{ 3793{
3776 mViewerCallerIsSearchDialog = false; 3794 mViewerCallerIsSearchDialog = false;
3777 Incidence *incidence = currentSelection(); 3795 Incidence *incidence = currentSelection();
3778 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3796 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3779 if ( incidence ) { 3797 if ( incidence ) {
3780 ShowIncidenceVisitor v; 3798 ShowIncidenceVisitor v;
3781 v.act( incidence, this ); 3799 v.act( incidence, this );
3782 } 3800 }
3783} 3801}
3784void CalendarView::editIncidenceDescription() 3802void CalendarView::editIncidenceDescription()
3785{ 3803{
3786 mFlagEditDescription = true; 3804 mFlagEditDescription = true;
3787 editIncidence(); 3805 editIncidence();
3788 mFlagEditDescription = false; 3806 mFlagEditDescription = false;
3789} 3807}
3790void CalendarView::editIncidence() 3808void CalendarView::editIncidence()
3791{ 3809{
3792 // qDebug("editIncidence() "); 3810 // qDebug("editIncidence() ");
3793 Incidence *incidence = currentSelection(); 3811 Incidence *incidence = currentSelection();
3794 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3812 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3795 if ( incidence ) { 3813 if ( incidence ) {
3796 EditIncidenceVisitor v; 3814 EditIncidenceVisitor v;
3797 v.act( incidence, this ); 3815 v.act( incidence, this );
3798 } 3816 }
3799} 3817}
3800 3818
3801void CalendarView::deleteIncidence() 3819void CalendarView::deleteIncidence()
3802{ 3820{
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index 664d700..fac9a9e 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -1,151 +1,153 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000, 2001 3 Copyright (c) 2000, 2001
4 Cornelius Schumacher <schumacher@kde.org> 4 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24#ifndef CALENDARVIEW_H 24#ifndef CALENDARVIEW_H
25#define CALENDARVIEW_H 25#define CALENDARVIEW_H
26 26
27#include <qframe.h> 27#include <qframe.h>
28#include <qlayout.h> 28#include <qlayout.h>
29#include <qwidget.h> 29#include <qwidget.h>
30#include <qptrlist.h> 30#include <qptrlist.h>
31#include <qvbox.h> 31#include <qvbox.h>
32#include <qmap.h> 32#include <qmap.h>
33#ifndef DESKTOP_VERSION 33#ifndef DESKTOP_VERSION
34#include <qtopia/ir.h> 34#include <qtopia/ir.h>
35#else 35#else
36#define Ir char 36#define Ir char
37#endif 37#endif
38#include <libkcal/calendar.h> 38#include <libkcal/calendar.h>
39#include <libkcal/scheduler.h> 39#include <libkcal/scheduler.h>
40#include <libkcal/calendarresources.h> 40#include <libkcal/calendarresources.h>
41#include <libkcal/resourcecalendar.h> 41#include <libkcal/resourcecalendar.h>
42#include <KDGanttMinimizeSplitter.h>
42 43
43#include <korganizer/calendarviewbase.h> 44#include <korganizer/calendarviewbase.h>
44 45
45#include <ksyncmanager.h> 46#include <ksyncmanager.h>
46 47
47class QWidgetStack; 48class QWidgetStack;
48class QSplitter; 49class QSplitter;
49 50
50class CalPrinter; 51class CalPrinter;
51class KOFilterView; 52class KOFilterView;
52class KOViewManager; 53class KOViewManager;
53class KODialogManager; 54class KODialogManager;
54class KOTodoView; 55class KOTodoView;
55class KDateNavigator; 56class KDateNavigator;
57class DateNavigatorContainer;
56class DateNavigator; 58class DateNavigator;
57class KOIncidenceEditor; 59class KOIncidenceEditor;
58class KDatePicker; 60class KDatePicker;
59class ResourceView; 61class ResourceView;
60class KOEventEditor; 62class KOEventEditor;
61class KOTodoEditor ; 63class KOTodoEditor ;
62class KOEventViewerDialog; 64class KOEventViewerDialog;
63class KOBeamPrefs; 65class KOBeamPrefs;
64class KSyncProfile; 66class KSyncProfile;
65class AlarmDialog; 67class AlarmDialog;
66class KCal::Attendee; 68class KCal::Attendee;
67 69
68namespace KCal { class FileStorage; } 70namespace KCal { class FileStorage; }
69 71
70using namespace KCal; 72using namespace KCal;
71 73
72/** 74/**
73 This is the main calendar widget. It provides the different vies on t he 75 This is the main calendar widget. It provides the different vies on t he
74 calendar data as well as the date navigator. It also handles synchronisation 76 calendar data as well as the date navigator. It also handles synchronisation
75 of the different views and controls the different dialogs like preferences, 77 of the different views and controls the different dialogs like preferences,
76 event editor, search dialog etc. 78 event editor, search dialog etc.
77 79
78 @short main calendar view widget 80 @short main calendar view widget
79 @author Cornelius Schumacher 81 @author Cornelius Schumacher
80*/ 82*/
81class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface 83class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface
82{ 84{
83 Q_OBJECT 85 Q_OBJECT
84 public: 86 public:
85 /** 87 /**
86 Constructs a new calendar view widget. 88 Constructs a new calendar view widget.
87 89
88 @param calendar calendar document 90 @param calendar calendar document
89 @param parent parent window 91 @param parent parent window
90 @param name Qt internal widget object name 92 @param name Qt internal widget object name
91 */ 93 */
92 CalendarView( CalendarResources *calendar, QWidget *parent = 0, 94 CalendarView( CalendarResources *calendar, QWidget *parent = 0,
93 const char *name = 0 ); 95 const char *name = 0 );
94 CalendarView( Calendar *calendar, QWidget *parent = 0, 96 CalendarView( Calendar *calendar, QWidget *parent = 0,
95 const char *name = 0 ); 97 const char *name = 0 );
96 virtual ~CalendarView(); 98 virtual ~CalendarView();
97 99
98 Calendar *calendar() { return mCalendar; } 100 Calendar *calendar() { return mCalendar; }
99 101
100 KOViewManager *viewManager(); 102 KOViewManager *viewManager();
101 KODialogManager *dialogManager(); 103 KODialogManager *dialogManager();
102 104
103 QDate startDate(); 105 QDate startDate();
104 QDate endDate(); 106 QDate endDate();
105 107
106 QWidgetStack *viewStack(); 108 QWidgetStack *viewStack();
107 QWidget *leftFrame(); 109 QWidget *leftFrame();
108 110
109 DateNavigator *dateNavigator(); 111 DateNavigator *dateNavigator();
110 KDateNavigator *dateNavigatorWidget(); 112 KDateNavigator *dateNavigatorWidget();
111 113
112 void addView(KOrg::BaseView *); 114 void addView(KOrg::BaseView *);
113 void showView(KOrg::BaseView *); 115 void showView(KOrg::BaseView *);
114 KOEventViewerDialog* getEventViewerDialog(); 116 KOEventViewerDialog* getEventViewerDialog();
115 Incidence *currentSelection(); 117 Incidence *currentSelection();
116 118
117 signals: 119 signals:
118 void save (); 120 void save ();
119 void saveStopTimer (); 121 void saveStopTimer ();
120 void tempDisableBR(bool); 122 void tempDisableBR(bool);
121 /** This todo has been modified */ 123 /** This todo has been modified */
122 void todoModified(Todo *, int); 124 void todoModified(Todo *, int);
123 125
124 /** when change is made to options dialog, the topwidget will catch this 126 /** when change is made to options dialog, the topwidget will catch this
125 * and emit this signal which notifies all widgets which have registered 127 * and emit this signal which notifies all widgets which have registered
126 * for notification to update their settings. */ 128 * for notification to update their settings. */
127 void configChanged(); 129 void configChanged();
128 /** emitted when the topwidget is closing down, so that any attached 130 /** emitted when the topwidget is closing down, so that any attached
129 child windows can also close. */ 131 child windows can also close. */
130 void closingDown(); 132 void closingDown();
131 /** emitted right before we die */ 133 /** emitted right before we die */
132 void closed(QWidget *); 134 void closed(QWidget *);
133 135
134 /** Emitted when state of modified flag changes */ 136 /** Emitted when state of modified flag changes */
135 void modifiedChanged(bool); 137 void modifiedChanged(bool);
136 void signalmodified(); 138 void signalmodified();
137 139
138 /** Emitted when state of read-only flag changes */ 140 /** Emitted when state of read-only flag changes */
139 void readOnlyChanged(bool); 141 void readOnlyChanged(bool);
140 142
141 /** Emitted when the unit of navigation changes */ 143 /** Emitted when the unit of navigation changes */
142 void changeNavStringPrev(const QString &); 144 void changeNavStringPrev(const QString &);
143 void changeNavStringNext(const QString &); 145 void changeNavStringNext(const QString &);
144 146
145 /** Emitted when state of events selection has changed and user is organizer*/ 147 /** Emitted when state of events selection has changed and user is organizer*/
146 void organizerEventsSelected(bool); 148 void organizerEventsSelected(bool);
147 /** Emitted when state of events selection has changed and user is attendee*/ 149 /** Emitted when state of events selection has changed and user is attendee*/
148 void groupEventsSelected(bool); 150 void groupEventsSelected(bool);
149 /** 151 /**
150 Emitted when an incidence gets selected. If the selection is cleared the 152 Emitted when an incidence gets selected. If the selection is cleared the
151 signal is emitted with 0 as argument. 153 signal is emitted with 0 as argument.
@@ -436,180 +438,180 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser
436 void slotCalendarChanged(); 438 void slotCalendarChanged();
437 bool importBday(); 439 bool importBday();
438 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday ); 440 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday );
439 bool importQtopia( const QString &categoriesFile, 441 bool importQtopia( const QString &categoriesFile,
440 const QString &datebookFile, 442 const QString &datebookFile,
441 const QString &tasklistFile ); 443 const QString &tasklistFile );
442 void syncExternal( int mode ); 444 void syncExternal( int mode );
443 void slotSelectPickerDate( QDate ) ; 445 void slotSelectPickerDate( QDate ) ;
444 void showDatePicker() ; 446 void showDatePicker() ;
445 void showDatePickerPopup() ; 447 void showDatePickerPopup() ;
446 void moveIncidence(Incidence *) ; 448 void moveIncidence(Incidence *) ;
447 void beamIncidence(Incidence *) ; 449 void beamIncidence(Incidence *) ;
448 void beamCalendar() ; 450 void beamCalendar() ;
449 void beamFilteredCalendar() ; 451 void beamFilteredCalendar() ;
450 void beamIncidenceList(QPtrList<Incidence>) ; 452 void beamIncidenceList(QPtrList<Incidence>) ;
451 void manageCategories(); 453 void manageCategories();
452 int addCategories(); 454 int addCategories();
453 void removeCategories(); 455 void removeCategories();
454 void setSyncDevice( QString ); 456 void setSyncDevice( QString );
455 void setSyncName( QString ); 457 void setSyncName( QString );
456 void showDay( QDate ); 458 void showDay( QDate );
457 void undo_delete(); 459 void undo_delete();
458 protected slots: 460 protected slots:
459 void resetFocus(); 461 void resetFocus();
460 void slotViewerClosed(); 462 void slotViewerClosed();
461 void timerAlarm(); 463 void timerAlarm();
462 void suspendAlarm(); 464 void suspendAlarm();
463 void beamDone( Ir *ir ); 465 void beamDone( Ir *ir );
464 /** Select a view or adapt the current view to display the specified dates. */ 466 /** Select a view or adapt the current view to display the specified dates. */
465 void showDates( const KCal::DateList & ); 467 void showDates( const KCal::DateList & );
466 void selectWeekNum ( int ); 468 void selectWeekNum ( int );
467 469
468 public: 470 public:
469 // show a standard warning 471 // show a standard warning
470 // returns KMsgBox::yesNoCancel() 472 // returns KMsgBox::yesNoCancel()
471 int msgCalModified(); 473 int msgCalModified();
472 virtual bool sync(KSyncManager* manager, QString filename, int mode); 474 virtual bool sync(KSyncManager* manager, QString filename, int mode);
473 475
474 virtual bool syncExternal(KSyncManager* manager, QString resource); 476 virtual bool syncExternal(KSyncManager* manager, QString resource);
475 virtual void removeSyncInfo( QString syncProfile); 477 virtual void removeSyncInfo( QString syncProfile);
476 void setSyncManager(KSyncManager* manager); 478 void setSyncManager(KSyncManager* manager);
477 void setLoadedFileVersion(QDateTime); 479 void setLoadedFileVersion(QDateTime);
478 bool checkFileVersion(QString fn); 480 bool checkFileVersion(QString fn);
479 bool checkFileChanged(QString fn); 481 bool checkFileChanged(QString fn);
480 Event* getLastSyncEvent(); 482 Event* getLastSyncEvent();
481 /** Adapt navigation units correpsonding to step size of navigation of the 483 /** Adapt navigation units correpsonding to step size of navigation of the
482 * current view. 484 * current view.
483 */ 485 */
484 void adaptNavigationUnits(); 486 void adaptNavigationUnits();
485 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode ); 487 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode );
486 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false ); 488 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false );
487 //Attendee* getYourAttendee(Event *event); 489 //Attendee* getYourAttendee(Event *event);
488 void setBlockShowDates( bool b ) { mBlockShowDates = b ;} 490 void setBlockShowDates( bool b ) { mBlockShowDates = b ;}
489 protected: 491 protected:
490 void schedule(Scheduler::Method, Incidence *incidence = 0); 492 void schedule(Scheduler::Method, Incidence *incidence = 0);
491 493
492 // returns KMsgBox::OKCandel() 494 // returns KMsgBox::OKCandel()
493 int msgItemDelete(const QString name); 495 int msgItemDelete(const QString name);
494 void showEventEditor(); 496 void showEventEditor();
495 void showTodoEditor(); 497 void showTodoEditor();
496 void writeLocale(); 498 void writeLocale();
497 Todo *selectedTodo(); 499 Todo *selectedTodo();
498 500
499 private: 501 private:
500 bool mViewerCallerIsSearchDialog; 502 bool mViewerCallerIsSearchDialog;
501 bool mBlockShowDates; 503 bool mBlockShowDates;
502 KSyncManager* mSyncManager; 504 KSyncManager* mSyncManager;
503 AlarmDialog * mAlarmDialog; 505 AlarmDialog * mAlarmDialog;
504 QString mAlarmNotification; 506 QString mAlarmNotification;
505 QString mSuspendAlarmNotification; 507 QString mSuspendAlarmNotification;
506 QTimer* mSuspendTimer; 508 QTimer* mSuspendTimer;
507 QTimer* mAlarmTimer; 509 QTimer* mAlarmTimer;
508 QTimer* mRecheckAlarmTimer; 510 QTimer* mRecheckAlarmTimer;
509 void computeAlarm( QString ); 511 void computeAlarm( QString );
510 void startAlarm( QString, QString ); 512 void startAlarm( QString, QString );
511 void setSyncEventsReadOnly(); 513 void setSyncEventsReadOnly();
512 514
513 QDateTime loadedFileVersion; 515 QDateTime loadedFileVersion;
514 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ); 516 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete );
515 void checkExternalId( Incidence * inc ); 517 void checkExternalId( Incidence * inc );
516 int mGlobalSyncMode; 518 int mGlobalSyncMode;
517 QString mCurrentSyncDevice; 519 QString mCurrentSyncDevice;
518 QString mCurrentSyncName; 520 QString mCurrentSyncName;
519 KOBeamPrefs* beamDialog; 521 KOBeamPrefs* beamDialog;
520 void init(); 522 void init();
521 int mDatePickerMode; 523 int mDatePickerMode;
522 bool mFlagEditDescription; 524 bool mFlagEditDescription;
523 QDateTime mLastCalendarSync; 525 QDateTime mLastCalendarSync;
524 void createPrinter(); 526 void createPrinter();
525 527
526 void calendarModified( bool, Calendar * ); 528 void calendarModified( bool, Calendar * );
527 529
528 CalPrinter *mCalPrinter; 530 CalPrinter *mCalPrinter;
529 531
530 QSplitter *mPanner; 532 QSplitter *mPanner;
531 QSplitter *mLeftSplitter; 533 QSplitter *mLeftSplitter;
532 QWidget *mLeftFrame; 534 KDGanttMinimizeSplitter *mLeftFrame;
533 QWidgetStack *mRightFrame; 535 QWidgetStack *mRightFrame;
534 536
535 KDatePicker* mDatePicker; 537 KDatePicker* mDatePicker;
536 QVBox* mDateFrame; 538 QVBox* mDateFrame;
537 539
538 KDateNavigator *mDateNavigator; // widget showing small month view. 540 DateNavigatorContainer *mDateNavigator; // widget showing small month view.
539 541
540 KOFilterView *mFilterView; 542 KOFilterView *mFilterView;
541 543
542 ResourceView *mResourceView; 544 ResourceView *mResourceView;
543 545
544 // calendar object for this viewing instance 546 // calendar object for this viewing instance
545 Calendar *mCalendar; 547 Calendar *mCalendar;
546 548
547 CalendarResourceManager *mResourceManager; 549 CalendarResourceManager *mResourceManager;
548 550
549 FileStorage *mStorage; 551 FileStorage *mStorage;
550 552
551 DateNavigator *mNavigator; 553 DateNavigator *mNavigator;
552 554
553 KOViewManager *mViewManager; 555 KOViewManager *mViewManager;
554 KODialogManager *mDialogManager; 556 KODialogManager *mDialogManager;
555 557
556 // Calendar filters 558 // Calendar filters
557 QPtrList<CalFilter> mFilters; 559 QPtrList<CalFilter> mFilters;
558 560
559 // various housekeeping variables. 561 // various housekeeping variables.
560 bool mModified; // flag indicating if calendar is modified 562 bool mModified; // flag indicating if calendar is modified
561 bool mReadOnly; // flag indicating if calendar is read-only 563 bool mReadOnly; // flag indicating if calendar is read-only
562 QDate mSaveSingleDate; 564 QDate mSaveSingleDate;
563 565
564 Incidence *mSelectedIncidence; 566 Incidence *mSelectedIncidence;
565 Incidence *mMoveIncidence; 567 Incidence *mMoveIncidence;
566 QDate mMoveIncidenceOldDate; 568 QDate mMoveIncidenceOldDate;
567 KOTodoView *mTodoList; 569 KOTodoView *mTodoList;
568 KOEventEditor * mEventEditor; 570 KOEventEditor * mEventEditor;
569 KOTodoEditor * mTodoEditor; 571 KOTodoEditor * mTodoEditor;
570 KOEventViewerDialog * mEventViewerDialog; 572 KOEventViewerDialog * mEventViewerDialog;
571 void keyPressEvent ( QKeyEvent *e) ; 573 void keyPressEvent ( QKeyEvent *e) ;
572 //QMap<Incidence*,KOIncidenceEditor*> mDialogList; 574 //QMap<Incidence*,KOIncidenceEditor*> mDialogList;
573}; 575};
574 576
575 577
576class CalendarViewVisitor : public Incidence::Visitor 578class CalendarViewVisitor : public Incidence::Visitor
577{ 579{
578 public: 580 public:
579 CalendarViewVisitor() : mView( 0 ) {} 581 CalendarViewVisitor() : mView( 0 ) {}
580 582
581 bool act( Incidence *incidence, CalendarView *view ) 583 bool act( Incidence *incidence, CalendarView *view )
582 { 584 {
583 mView = view; 585 mView = view;
584 return incidence->accept( *this ); 586 return incidence->accept( *this );
585 } 587 }
586 588
587 protected: 589 protected:
588 CalendarView *mView; 590 CalendarView *mView;
589}; 591};
590 592
591class ShowIncidenceVisitor : public CalendarViewVisitor 593class ShowIncidenceVisitor : public CalendarViewVisitor
592{ 594{
593 protected: 595 protected:
594 bool visit( Event *event ) { mView->showEvent( event ); return true; } 596 bool visit( Event *event ) { mView->showEvent( event ); return true; }
595 bool visit( Todo *todo ) { mView->showTodo( todo ); return true; } 597 bool visit( Todo *todo ) { mView->showTodo( todo ); return true; }
596 bool visit( Journal * j ) { mView->showJournal( j );return true; } 598 bool visit( Journal * j ) { mView->showJournal( j );return true; }
597}; 599};
598 600
599class EditIncidenceVisitor : public CalendarViewVisitor 601class EditIncidenceVisitor : public CalendarViewVisitor
600{ 602{
601 protected: 603 protected:
602 bool visit( Event *event ) { mView->editEvent( event ); return true; } 604 bool visit( Event *event ) { mView->editEvent( event ); return true; }
603 bool visit( Todo *todo ) { mView->editTodo( todo ); return true; } 605 bool visit( Todo *todo ) { mView->editTodo( todo ); return true; }
604 bool visit( Journal *j ) { mView->editJournal( j); return true; } 606 bool visit( Journal *j ) { mView->editJournal( j); return true; }
605}; 607};
606 608
607class DeleteIncidenceVisitor : public CalendarViewVisitor 609class DeleteIncidenceVisitor : public CalendarViewVisitor
608{ 610{
609 protected: 611 protected:
610 bool visit( Event *event ) { mView->deleteEvent( event ); return true; } 612 bool visit( Event *event ) { mView->deleteEvent( event ); return true; }
611 bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; } 613 bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; }
612 bool visit( Journal * j) {mView->deleteJournal( j ); return true; } 614 bool visit( Journal * j) {mView->deleteJournal( j ); return true; }
613}; 615};
614 616
615#endif 617#endif
diff --git a/korganizer/datenavigatorcontainer.cpp b/korganizer/datenavigatorcontainer.cpp
new file mode 100644
index 0000000..cbfc5b2
--- a/dev/null
+++ b/korganizer/datenavigatorcontainer.cpp
@@ -0,0 +1,218 @@
1/*
2 This file is part of KOrganizer.
3
4 Copyright (c) 2001,2002,2003 Cornelius Schumacher <schumacher@kde.org>
5 Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20
21 As a special exception, permission is given to link this program
22 with any edition of Qt, and distribute the resulting executable,
23 without including the source code for Qt in the source distribution.
24*/
25
26#include <kdebug.h>
27#include <klocale.h>
28
29//#include "koglobals.h"
30#include "navigatorbar.h"
31#include "kdatenavigator.h"
32
33#include <kcalendarsystem.h>
34
35#include "datenavigatorcontainer.h"
36
37DateNavigatorContainer::DateNavigatorContainer( QWidget *parent,
38 const char *name )
39 : QWidget( parent, name ), mCalendar( 0 ),
40 mHorizontalCount( 1 ), mVerticalCount( 1 )
41{
42 mExtraViews.setAutoDelete( true );
43
44 mNavigatorView = new KDateNavigator( this, name );
45
46 connectNavigatorView( mNavigatorView );
47}
48
49DateNavigatorContainer::~DateNavigatorContainer()
50{
51}
52
53void DateNavigatorContainer::connectNavigatorView( KDateNavigator *v )
54{
55 connect( v, SIGNAL( datesSelected( const KCal::DateList & ) ),
56 SIGNAL( datesSelected( const KCal::DateList & ) ) );
57#if 0
58 connect( v, SIGNAL( incidenceDropped( Incidence *, const QDate & ) ),
59 SIGNAL( incidenceDropped( Incidence *, const QDate & ) ) );
60 connect( v, SIGNAL( incidenceDroppedMove( Incidence *, const QDate & ) ),
61 SIGNAL( incidenceDroppedMove( Incidence *, const QDate & ) ) );
62#endif
63 connect( v, SIGNAL( weekClicked( const QDate & ) ),
64 SIGNAL( weekClicked( const QDate & ) ) );
65
66 connect( v, SIGNAL( goPrevious() ), SIGNAL( goPrevious() ) );
67 connect( v, SIGNAL( goNext() ), SIGNAL( goNext() ) );
68
69 connect( v, SIGNAL( goNextMonth() ), SIGNAL( goNextMonth() ) );
70 connect( v, SIGNAL( goPrevMonth() ), SIGNAL( goPrevMonth() ) );
71 connect( v, SIGNAL( goNextYear() ), SIGNAL( goNextYear() ) );
72 connect( v, SIGNAL( goPrevYear() ), SIGNAL( goPrevYear() ) );
73
74 connect( v, SIGNAL( monthSelected( int ) ), SIGNAL( monthSelected( int ) ) );
75}
76
77void DateNavigatorContainer::setCalendar( Calendar *cal )
78{
79 mCalendar = cal;
80 mNavigatorView->setCalendar( cal );
81 KDateNavigator *n;
82 for( n = mExtraViews.first(); n; n = mExtraViews.next() ) {
83 n->setCalendar( cal );
84 }
85}
86
87void DateNavigatorContainer::updateDayMatrix()
88{
89 mNavigatorView->updateDayMatrix();
90 KDateNavigator *n;
91 for( n = mExtraViews.first(); n; n = mExtraViews.next() ) {
92 n->updateDayMatrix();
93 }
94}
95
96void DateNavigatorContainer::updateToday()
97{
98 qDebug("DateNavigatorContainer::updateToday() NOT IMPL ");
99#if 0
100 mNavigatorView->updateToday();
101 KDateNavigator *n;
102 for( n = mExtraViews.first(); n; n = mExtraViews.next() ) {
103 n->updateToday();
104 }
105#endif
106}
107
108void DateNavigatorContainer::updateView()
109{
110 mNavigatorView->updateView();
111 KDateNavigator *n;
112 for( n = mExtraViews.first(); n; n = mExtraViews.next() ) {
113 n->updateView();
114 }
115}
116
117void DateNavigatorContainer::updateConfig()
118{
119 mNavigatorView->updateConfig();
120 KDateNavigator *n;
121 for( n = mExtraViews.first(); n; n = mExtraViews.next() ) {
122 n->updateConfig();
123 }
124}
125
126void DateNavigatorContainer::selectDates( const DateList &dateList )
127{
128 mNavigatorView->selectDates( dateList );
129 setBaseDates();
130}
131
132void DateNavigatorContainer::setBaseDates()
133{
134 KCal::DateList dateList = mNavigatorView->selectedDates();
135 if ( dateList.isEmpty() ) {
136 kdError() << "DateNavigatorContainer::selectDates() empty list." << endl;
137 }
138 QDate baseDate = dateList.first();
139 KDateNavigator *n;
140 for( n = mExtraViews.first(); n; n = mExtraViews.next() ) {
141 baseDate = baseDate.addDays( baseDate.daysInMonth () );
142 n->setBaseDate( baseDate );
143 }
144}
145
146void DateNavigatorContainer::resizeEvent( QResizeEvent * )
147{
148#if 0
149 kdDebug(5850) << "DateNavigatorContainer::resizeEvent()" << endl;
150 kdDebug(5850) << " CURRENT SIZE: " << size() << endl;
151 kdDebug(5850) << " MINIMUM SIZEHINT: " << minimumSizeHint() << endl;
152 kdDebug(5850) << " SIZEHINT: " << sizeHint() << endl;
153 kdDebug(5850) << " MINIMUM SIZE: " << minimumSize() << endl;
154#endif
155
156 QSize minSize = mNavigatorView->minimumSizeHint();
157
158// kdDebug(5850) << " NAVIGATORVIEW minimumSizeHint: " << minSize << endl;
159
160 int verticalCount = size().height() / minSize.height();
161 int horizontalCount = size().width() / minSize.width();
162 //qDebug("COUNT %d %d %d %d ", verticalCount, horizontalCount , mVerticalCount, mHorizontalCount );
163 if ( horizontalCount != mHorizontalCount ||
164 verticalCount != mVerticalCount ) {
165 uint count = horizontalCount * verticalCount;
166 if ( count == 0 ) return;
167
168 while ( count > ( mExtraViews.count() + 1 ) ) {
169 KDateNavigator *n = new KDateNavigator( this );
170 mExtraViews.append( n );
171 n->setCalendar( mCalendar );
172 setBaseDates();
173 connectNavigatorView( n );
174 n->show();
175 }
176
177 while ( count < ( mExtraViews.count() + 1 ) ) {
178 mExtraViews.removeLast();
179 }
180
181 mHorizontalCount = horizontalCount;
182 mVerticalCount = verticalCount;
183 }
184
185 int height = size().height() / verticalCount;
186 int width = size().width() / horizontalCount;
187
188 NavigatorBar *bar = mNavigatorView->navigatorBar();
189 if ( horizontalCount > 1 ) bar->showButtons( true, false );
190 else bar->showButtons( true, true );
191
192 mNavigatorView->setGeometry(0,
193 0, width, height );
194 for( uint i = 0; i < mExtraViews.count(); ++i ) {
195 int x = ( i + 1 ) % horizontalCount;
196 int y = ( i + 1 ) / horizontalCount;
197
198 KDateNavigator *view = mExtraViews.at( i );
199 bar = view->navigatorBar();
200 if ( y > 0 ) bar->showButtons( false, false );
201 else {
202 if ( x + 1 == horizontalCount ) bar->showButtons( false, true );
203 else bar->showButtons( false, false );
204 }
205 view->setGeometry( x * width,
206 y * height, width, height );
207 }
208}
209
210QSize DateNavigatorContainer::minimumSizeHint() const
211{
212 return mNavigatorView->minimumSizeHint();
213}
214
215QSize DateNavigatorContainer::sizeHint() const
216{
217 return mNavigatorView->sizeHint();
218}
diff --git a/korganizer/datenavigatorcontainer.h b/korganizer/datenavigatorcontainer.h
new file mode 100644
index 0000000..affa8e1
--- a/dev/null
+++ b/korganizer/datenavigatorcontainer.h
@@ -0,0 +1,90 @@
1/*
2 This file is part of KOrganizer.
3
4 Copyright (c) 2004 Cornelius Schumacher <schumacher@kde.org>
5 Copyright (C) 2004 Reinhold Kainhofer <reinhold@kainhofer.com>
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20
21 As a special exception, permission is given to link this program
22 with any edition of Qt, and distribute the resulting executable,
23 without including the source code for Qt in the source distribution.
24*/
25#ifndef DATENAVIGATORCONTAINER_H
26#define DATENAVIGATORCONTAINER_H
27
28class KDateNavigator;
29
30#include <qwidget.h>
31#include <libkcal/calendar.h>
32using namespace KCal;
33
34class DateNavigatorContainer: public QWidget
35{
36 Q_OBJECT
37 public:
38 DateNavigatorContainer( QWidget *parent = 0, const char *name = 0 );
39 ~DateNavigatorContainer();
40
41 /**
42 Associate date navigator with a calendar. It is used by KODayMatrix.
43 */
44 void setCalendar( Calendar * );
45
46 QSize minimumSizeHint() const;
47 QSize sizeHint() const;
48 KDateNavigator * navigatorView() { return mNavigatorView;}
49
50 public slots:
51 void selectDates( const KCal::DateList & );
52 void updateView();
53 void updateConfig();
54 void updateDayMatrix();
55 void updateToday();
56
57 signals:
58 void datesSelected( const KCal::DateList & );
59 void incidenceDropped( Incidence *, const QDate & );
60 void incidenceDroppedMove( Incidence *, const QDate & );
61 void weekClicked( const QDate &);
62
63 void goPrevious();
64 void goNext();
65
66 void goNextMonth();
67 void goPrevMonth();
68 void goNextYear();
69 void goPrevYear();
70
71 void monthSelected( int month );
72
73 protected:
74 void resizeEvent( QResizeEvent * );
75
76 void setBaseDates();
77 void connectNavigatorView( KDateNavigator *v );
78
79 private:
80 KDateNavigator *mNavigatorView;
81
82 KCal::Calendar *mCalendar;
83
84 QPtrList<KDateNavigator> mExtraViews;
85
86 int mHorizontalCount;
87 int mVerticalCount;
88};
89
90#endif
diff --git a/korganizer/kdatenavigator.cpp b/korganizer/kdatenavigator.cpp
index c08f44f..e76a85a 100644
--- a/korganizer/kdatenavigator.cpp
+++ b/korganizer/kdatenavigator.cpp
@@ -1,219 +1,233 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001,2002 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001,2002 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qstring.h> 24#include <qstring.h>
25#include <qkeycode.h> 25#include <qkeycode.h>
26#include <qlayout.h> 26#include <qlayout.h>
27#include <qtimer.h> 27#include <qtimer.h>
28#include <qframe.h> 28#include <qframe.h>
29#include <qlabel.h> 29#include <qlabel.h>
30#include <qapplication.h> 30#include <qapplication.h>
31 31
32#include <kdebug.h> 32#include <kdebug.h>
33#include <klocale.h> 33#include <klocale.h>
34#include <kglobal.h> 34#include <kglobal.h>
35 35
36#include "koglobals.h" 36#include "koglobals.h"
37#include "koprefs.h" 37#include "koprefs.h"
38#ifndef KORG_NOPLUGINS 38#ifndef KORG_NOPLUGINS
39#include "kocore.h" 39#include "kocore.h"
40#endif 40#endif
41 41
42#include <kcalendarsystem.h> 42#include <kcalendarsystem.h>
43 43
44#include "navigatorbar.h" 44#include "navigatorbar.h"
45 45
46#include "kdatenavigator.h" 46#include "kdatenavigator.h"
47 47
48KDateNavigator::KDateNavigator( QWidget *parent, Calendar *calendar, 48KDateNavigator::KDateNavigator( QWidget *parent, const char *name )
49 bool show_week_nums, const char *name,
50 QDate startDate )
51 : QFrame(parent, name), 49 : QFrame(parent, name),
52 updateTimer(0L) 50 updateTimer(0L)
53{ 51{
54 mCalendar = calendar; 52 setFrameStyle(QFrame::NoFrame);
55 53 QDate startDate = QDate::currentDate();
56 setFrameStyle(QFrame::NoFrame);
57
58 QGridLayout *topLayout = new QGridLayout(this,8,8); 54 QGridLayout *topLayout = new QGridLayout(this,8,8);
59 55
60 if (! startDate.isValid()) { 56 if (! startDate.isValid()) {
61 qDebug("KDateNavigator::invalid startdate "); 57 qDebug("KDateNavigator::invalid startdate ");
62 startDate = QDate::currentDate(); 58 startDate = QDate::currentDate();
63 } 59 }
64 60
65 mSelectedDates.append(startDate); 61 mSelectedDates.append(startDate);
66 m_MthYr = startDate; 62 m_MthYr = startDate;
67 m_bShowWeekNums = show_week_nums; 63 m_bShowWeekNums = true;
68 64
69 setFont( KOPrefs::instance()->mDateNavigatorFont ); 65 setFont( KOPrefs::instance()->mDateNavigatorFont );
70 mNavigatorBar = new NavigatorBar( startDate, this ); 66 mNavigatorBar = new NavigatorBar( startDate, this );
71 topLayout->addMultiCellWidget( mNavigatorBar, 0, 0, 0, 7 ); 67 topLayout->addMultiCellWidget( mNavigatorBar, 0, 0, 0, 7 );
72 //mNavigatorBar->resize( 1,1); 68 //mNavigatorBar->resize( 1,1);
73 connect( mNavigatorBar, SIGNAL( goPrevYear() ), SIGNAL( goPrevYear() ) ); 69 connect( mNavigatorBar, SIGNAL( goPrevYear() ), SIGNAL( goPrevYear() ) );
74 connect( mNavigatorBar, SIGNAL( goPrevMonth() ), SIGNAL( goPrevMonth() ) ); 70 connect( mNavigatorBar, SIGNAL( goPrevMonth() ), SIGNAL( goPrevMonth() ) );
75 connect( mNavigatorBar, SIGNAL( goNextMonth() ), SIGNAL( goNextMonth() ) ); 71 connect( mNavigatorBar, SIGNAL( goNextMonth() ), SIGNAL( goNextMonth() ) );
76 connect( mNavigatorBar, SIGNAL( goNextYear() ), SIGNAL( goNextYear() ) ); 72 connect( mNavigatorBar, SIGNAL( goNextYear() ), SIGNAL( goNextYear() ) );
77 connect( mNavigatorBar, SIGNAL( monthSelected( int ) ), SIGNAL( monthSelected( int ) ) ); 73 connect( mNavigatorBar, SIGNAL( monthSelected( int ) ), SIGNAL( monthSelected( int ) ) );
78 74
79 // get the day of the week on the first day 75 // get the day of the week on the first day
80 QDate dayone(m_MthYr.year(), m_MthYr.month(), 1); 76 QDate dayone(m_MthYr.year(), m_MthYr.month(), 1);
81 m_fstDayOfWk = dayone.dayOfWeek(); 77 m_fstDayOfWk = dayone.dayOfWeek();
82 78
83 int i; 79 int i;
84 80
85 // Set up the heading fields. 81 // Set up the heading fields.
86 for( i = 0; i < 7; i++ ) { 82 for( i = 0; i < 7; i++ ) {
87 headings[i] = new QLabel("",this); 83 headings[i] = new QLabel("",this);
88 //headings[i]->setFont(QFont("Arial", 10, QFont::Bold)); 84 //headings[i]->setFont(QFont("Arial", 10, QFont::Bold));
89 headings[i]->setAlignment(AlignCenter); 85 headings[i]->setAlignment(AlignCenter);
90 86
91 topLayout->addWidget(headings[i],1,i+1); 87 topLayout->addWidget(headings[i],1,i+1);
92 } 88 }
93 89
94 // Create the weeknumber labels 90 // Create the weeknumber labels
95 for( i = 0; i < 6; i++ ) { 91 for( i = 0; i < 6; i++ ) {
96 weeknos[i] = new QLabel(this); 92 weeknos[i] = new QLabel(this);
97 weeknos[i]->setAlignment(AlignCenter); 93 weeknos[i]->setAlignment(AlignCenter);
98 //weeknos[i]->setFont(QFont("Arial", 10)); 94 //weeknos[i]->setFont(QFont("Arial", 10));
99 if(!show_week_nums) { 95 if(!m_bShowWeekNums) {
100 weeknos[i]->hide(); 96 weeknos[i]->hide();
101 } 97 }
102 weeknos[i]->installEventFilter(this); 98 weeknos[i]->installEventFilter(this);
103 99
104 topLayout->addWidget(weeknos[i],i+2,0); 100 topLayout->addWidget(weeknos[i],i+2,0);
105 } 101 }
106 102
107 daymatrix = new KODayMatrix( this, mCalendar, dayone, 103 daymatrix = new KODayMatrix( this, "KDateNavigator::DayMatrix");
108 "KDateNavigator::DayMatrix");
109 daymatrix->setFrameStyle(QFrame::Panel|QFrame::Sunken); 104 daymatrix->setFrameStyle(QFrame::Panel|QFrame::Sunken);
110 daymatrix->setLineWidth(1); 105 daymatrix->setLineWidth(1);
111 106
112 connect( daymatrix, SIGNAL( selected( const KCal::DateList & ) ), 107 connect( daymatrix, SIGNAL( selected( const KCal::DateList & ) ),
113 SIGNAL( datesSelected( const KCal::DateList & ) ) ); 108 SIGNAL( datesSelected( const KCal::DateList & ) ) );
114 109
115 connect( daymatrix, SIGNAL( eventDropped( Event * ) ), 110 connect( daymatrix, SIGNAL( eventDropped( Event * ) ),
116 SIGNAL( eventDropped( Event * ) ) ); 111 SIGNAL( eventDropped( Event * ) ) );
117 112
118 topLayout->addMultiCellWidget(daymatrix,2,7,1,7); 113 topLayout->addMultiCellWidget(daymatrix,2,7,1,7);
119 114
120 // read settings from configuration file. 115 // read settings from configuration file.
121 updateConfig(); 116 updateConfig();
122 enableRollover(FollowMonth); 117 enableRollover(FollowMonth);
123 setFixedSize ( sizeHint() ); 118 //setFixedSize ( sizeHint() );
119}
120void KDateNavigator::setCalendar( Calendar *cal )
121{
122 daymatrix->setCalendar( cal );
123}
124
125void KDateNavigator::setBaseDate( const QDate &date )
126{
127 m_MthYr = date;
128
129 updateDates();
130 updateView();
131
132 KCal::DateList dates;
133 dates.append( date );
134 mNavigatorBar->selectDates( dates );
135
136 daymatrix->clearSelection();
137 daymatrix->repaint();
124} 138}
125 139
126void KDateNavigator::enableRollover(RolloverType r) 140void KDateNavigator::enableRollover(RolloverType r)
127{ 141{
128 switch(r) 142 switch(r)
129 { 143 {
130 case None : 144 case None :
131 if (updateTimer) 145 if (updateTimer)
132 { 146 {
133 updateTimer->stop(); 147 updateTimer->stop();
134 delete updateTimer; 148 delete updateTimer;
135 updateTimer=0L; 149 updateTimer=0L;
136 } 150 }
137 break; 151 break;
138 case FollowDay : 152 case FollowDay :
139 case FollowMonth : 153 case FollowMonth :
140 if (!updateTimer) 154 if (!updateTimer)
141 { 155 {
142 updateTimer = new QTimer(this); 156 updateTimer = new QTimer(this);
143 QObject::connect(updateTimer,SIGNAL(timeout()), 157 QObject::connect(updateTimer,SIGNAL(timeout()),
144 this,SLOT(possiblyPastMidnight())); 158 this,SLOT(possiblyPastMidnight()));
145 } 159 }
146 updateTimer->start(0,true); 160 updateTimer->start(0,true);
147 lastDayChecked = QDate::currentDate(); 161 lastDayChecked = QDate::currentDate();
148 } 162 }
149 updateRollover=r; 163 updateRollover=r;
150} 164}
151 165
152 166
153KDateNavigator::~KDateNavigator() 167KDateNavigator::~KDateNavigator()
154{ 168{
155} 169}
156 170
157 171
158void KDateNavigator::passedMidnight() 172void KDateNavigator::passedMidnight()
159{ 173{
160 QDate today = QDate::currentDate(); 174 QDate today = QDate::currentDate();
161 bool emitMonth = false; 175 bool emitMonth = false;
162 176
163 if (today.month() != lastDayChecked.month()) 177 if (today.month() != lastDayChecked.month())
164 { 178 {
165 if (updateRollover==FollowMonth && 179 if (updateRollover==FollowMonth &&
166 daymatrix->isEndOfMonth()) { 180 daymatrix->isEndOfMonth()) {
167 goNextMonth(); 181 goNextMonth();
168 emitMonth=true; 182 emitMonth=true;
169 } 183 }
170 } 184 }
171 daymatrix->recalculateToday(); 185 daymatrix->recalculateToday();
172 daymatrix->repaint(); 186 daymatrix->repaint();
173 emit dayPassed(today); 187 emit dayPassed(today);
174 if (emitMonth) { emit monthPassed(today); } 188 if (emitMonth) { emit monthPassed(today); }
175} 189}
176 190
177/* slot */ void KDateNavigator::possiblyPastMidnight() 191/* slot */ void KDateNavigator::possiblyPastMidnight()
178{ 192{
179 if (lastDayChecked!=QDate::currentDate()) 193 if (lastDayChecked!=QDate::currentDate())
180 { 194 {
181 passedMidnight(); 195 passedMidnight();
182 lastDayChecked=QDate::currentDate(); 196 lastDayChecked=QDate::currentDate();
183 } 197 }
184 // Set the timer to go off 1 second after midnight 198 // Set the timer to go off 1 second after midnight
185 // or after 8 minutes, whichever comes first. 199 // or after 8 minutes, whichever comes first.
186 if (updateTimer) 200 if (updateTimer)
187 { 201 {
188 QTime now = QTime::currentTime(); 202 QTime now = QTime::currentTime();
189 QTime midnight = QTime(23,59,59); 203 QTime midnight = QTime(23,59,59);
190 int msecsWait = QMIN(480000,now.msecsTo(midnight)+2000); 204 int msecsWait = QMIN(480000,now.msecsTo(midnight)+2000);
191 205
192 // qDebug(QString("Waiting %1 msec from %2 to %3.").arg(msecsWait)) 206 // qDebug(QString("Waiting %1 msec from %2 to %3.").arg(msecsWait))
193 //.arg(now.toString()).arg(midnight.toString())); 207 //.arg(now.toString()).arg(midnight.toString()));
194 208
195 updateTimer->stop(); 209 updateTimer->stop();
196 updateTimer->start(msecsWait,true); 210 updateTimer->start(msecsWait,true);
197 } 211 }
198} 212}
199 213
200void KDateNavigator::updateDates() 214void KDateNavigator::updateDates()
201{ 215{
202 // Find the first day of the week of the current month. 216 // Find the first day of the week of the current month.
203 //int d1 = KOGlobals::self()->calendarSystem()->day( m_MthYr ); 217 //int d1 = KOGlobals::self()->calendarSystem()->day( m_MthYr );
204 QDate dayone( m_MthYr.year(), m_MthYr.month(), m_MthYr.day() ); 218 QDate dayone( m_MthYr.year(), m_MthYr.month(), m_MthYr.day() );
205 int d2 = KOGlobals::self()->calendarSystem()->day( dayone ); 219 int d2 = KOGlobals::self()->calendarSystem()->day( dayone );
206 //int di = d1 - d2 + 1; 220 //int di = d1 - d2 + 1;
207 dayone = dayone.addDays( -d2 + 1 ); 221 dayone = dayone.addDays( -d2 + 1 );
208 222
209 int m_fstDayOfWkCalsys = KOGlobals::self()->calendarSystem()->dayOfWeek( dayone ); 223 int m_fstDayOfWkCalsys = KOGlobals::self()->calendarSystem()->dayOfWeek( dayone );
210 224
211 // If month begins on Monday and Monday is first day of week, 225 // If month begins on Monday and Monday is first day of week,
212 // month should begin on second line. Sunday doesn't have this problem. 226 // month should begin on second line. Sunday doesn't have this problem.
213 int nextLine = ( ( m_fstDayOfWkCalsys == 1) && 227 int nextLine = ( ( m_fstDayOfWkCalsys == 1) &&
214 ( KGlobal::locale()->weekStartsMonday() == 1 ) ) ? 7 : 0; 228 ( KGlobal::locale()->weekStartsMonday() == 1 ) ) ? 7 : 0;
215 229
216 // update the matrix dates 230 // update the matrix dates
217 int index = (KGlobal::locale()->weekStartsMonday() ? 1 : 0) - m_fstDayOfWkCalsys - nextLine; 231 int index = (KGlobal::locale()->weekStartsMonday() ? 1 : 0) - m_fstDayOfWkCalsys - nextLine;
218 232
219 233
diff --git a/korganizer/kdatenavigator.h b/korganizer/kdatenavigator.h
index 3ae1648..0aeb77a 100644
--- a/korganizer/kdatenavigator.h
+++ b/korganizer/kdatenavigator.h
@@ -1,148 +1,150 @@
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 KDATENAVIGATOR_H 23#ifndef KDATENAVIGATOR_H
24#define KDATENAVIGATOR_H 24#define KDATENAVIGATOR_H
25 25
26#include <qframe.h> 26#include <qframe.h>
27#include <qdatetime.h> 27#include <qdatetime.h>
28#include <qlabel.h> 28#include <qlabel.h>
29 29
30#include <libkcal/calendar.h> 30#include <libkcal/calendar.h>
31 31
32#include "kodaymatrix.h" 32#include "kodaymatrix.h"
33 33
34class QPushButton; 34class QPushButton;
35class QTimer; 35class QTimer;
36 36
37class KCalendarSystem; 37class KCalendarSystem;
38 38
39class NavigatorBar; 39class NavigatorBar;
40 40
41class KDateNavigator: public QFrame 41class KDateNavigator: public QFrame
42{ 42{
43 Q_OBJECT 43 Q_OBJECT
44 public: 44 public:
45 KDateNavigator( QWidget *parent = 0, Calendar *calendar = 0, 45 KDateNavigator( QWidget *parent = 0,const char *name = 0 );
46 bool show_week_numbers = false, const char *name = 0,
47 QDate date = QDate::currentDate() );
48 ~KDateNavigator(); 46 ~KDateNavigator();
49 47
50 /** The DateNavigator automatically checks for 48 /** The DateNavigator automatically checks for
51 * the passage of midnight. If rollover type is 49 * the passage of midnight. If rollover type is
52 * set to None, no signals are emitted and no 50 * set to None, no signals are emitted and no
53 * processing is done. With rollover set to 51 * processing is done. With rollover set to
54 * FollowDay, the day highlighter changes at 52 * FollowDay, the day highlighter changes at
55 * midnight and dayPassed() is emitted. 53 * midnight and dayPassed() is emitted.
56 * With FollowMonth, it has the same effect 54 * With FollowMonth, it has the same effect
57 * as FollowDay but also adjusts the month that is 55 * as FollowDay but also adjusts the month that is
58 * visible and emits monthPassed() when the month changes. 56 * visible and emits monthPassed() when the month changes.
59 */ 57 */
60 enum RolloverType { None, FollowDay, FollowMonth } ; 58 enum RolloverType { None, FollowDay, FollowMonth } ;
61 void enableRollover( RolloverType ); 59 void enableRollover( RolloverType );
62 60
63 void setShowWeekNums( bool enabled ); 61 void setShowWeekNums( bool enabled );
62 void setCalendar( Calendar * );
63 void setBaseDate( const QDate & );
64 KCal::DateList selectedDates() const { return mSelectedDates; }
65 NavigatorBar *navigatorBar() const { return mNavigatorBar; }
64 66
65 public slots: 67 public slots:
66 void selectDates( const KCal::DateList & ); 68 void selectDates( const KCal::DateList & );
67 void updateView(); 69 void updateView();
68 void updateConfig(); 70 void updateConfig();
69 void updateDayMatrix(); 71 void updateDayMatrix();
70 72
71 signals: 73 signals:
72 void datesSelected( const KCal::DateList & ); 74 void datesSelected( const KCal::DateList & );
73 void eventDropped( Event * ); 75 void eventDropped( Event * );
74 void weekClicked( const QDate &); 76 void weekClicked( const QDate &);
75 77
76 void goPrevious(); 78 void goPrevious();
77 void goNext(); 79 void goNext();
78 80
79 void goNextMonth(); 81 void goNextMonth();
80 void goPrevMonth(); 82 void goPrevMonth();
81 void goNextYear(); 83 void goNextYear();
82 void goPrevYear(); 84 void goPrevYear();
83 void monthSelected( int ); 85 void monthSelected( int );
84 86
85 // Signals emitted at midnight carrying the new date. 87 // Signals emitted at midnight carrying the new date.
86 void dayPassed( QDate ); 88 void dayPassed( QDate );
87 void monthPassed( QDate ); 89 void monthPassed( QDate );
88 90
89 protected slots: 91 protected slots:
90 92
91 /** 93 /**
92 * Called regularly to see if we need to update the view 94 * Called regularly to see if we need to update the view
93 * wrt. the today box and the month box. Only important 95 * wrt. the today box and the month box. Only important
94 * if you leave KOrganizer idle for long periods of time. 96 * if you leave KOrganizer idle for long periods of time.
95 * 97 *
96 * Until we have a reliable way of setting QTimers to go 98 * Until we have a reliable way of setting QTimers to go
97 * off at a particular wall-clock time, we need this, 99 * off at a particular wall-clock time, we need this,
98 * which calls passedMidnight() at the right moments. 100 * which calls passedMidnight() at the right moments.
99 */ 101 */
100 void possiblyPastMidnight(); 102 void possiblyPastMidnight();
101 103
102 /** handles updating the view when midnight has come by due to idle time. 104 /** handles updating the view when midnight has come by due to idle time.
103 * 105 *
104 */ 106 */
105 void passedMidnight(); 107 void passedMidnight();
106 108
107 protected: 109 protected:
108 void updateDates(); 110 void updateDates();
109 111
110 void wheelEvent (QWheelEvent *); 112 void wheelEvent (QWheelEvent *);
111 113
112 bool eventFilter (QObject *,QEvent *); 114 bool eventFilter (QObject *,QEvent *);
113 115
114 private: 116 private:
115 NavigatorBar *mNavigatorBar; 117 NavigatorBar *mNavigatorBar;
116 118
117 QFrame *headingSep; 119 QFrame *headingSep;
118 QFrame *weeknumSep; 120 QFrame *weeknumSep;
119 QLabel *headings[7]; 121 QLabel *headings[7];
120 QLabel *weeknos[7]; 122 QLabel *weeknos[7];
121 KODayMatrix *daymatrix; 123 KODayMatrix *daymatrix;
122 124
123 KCal::DateList mSelectedDates; 125 KCal::DateList mSelectedDates;
124 QDate m_MthYr; 126 QDate m_MthYr;
125 int m_fstDayOfWk; 127 int m_fstDayOfWk;
126 bool m_bShowWeekNums; 128 bool m_bShowWeekNums;
127 129
128 int dayNum(int row, int col); 130 int dayNum(int row, int col);
129 int dayToIndex(int dayNum); 131 int dayToIndex(int dayNum);
130 132
131 Calendar *mCalendar; 133 Calendar *mCalendar;
132 KCalendarSystem *mCalendarSystem; 134 KCalendarSystem *mCalendarSystem;
133 135
134 const QString *curHeaders; 136 const QString *curHeaders;
135 137
136 /** used to update the day view periodically, in particular every 138 /** used to update the day view periodically, in particular every
137 * midnight to move the "today" rectangle. 139 * midnight to move the "today" rectangle.
138 */ 140 */
139 QTimer *updateTimer; 141 QTimer *updateTimer;
140 QDate lastDayChecked; 142 QDate lastDayChecked;
141 RolloverType updateRollover; 143 RolloverType updateRollover;
142 144
143 // Disabling copy constructor and assignment operator 145 // Disabling copy constructor and assignment operator
144 KDateNavigator(const KDateNavigator & ); 146 KDateNavigator(const KDateNavigator & );
145 KDateNavigator &operator=(const KDateNavigator &); 147 KDateNavigator &operator=(const KDateNavigator &);
146}; 148};
147 149
148#endif 150#endif
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp
index 989f758..a886f4a 100644
--- a/korganizer/kodaymatrix.cpp
+++ b/korganizer/kodaymatrix.cpp
@@ -1,527 +1,570 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Eitzenberger Thomas <thomas.eitzenberger@siemens.at> 3 Copyright (c) 2001 Eitzenberger Thomas <thomas.eitzenberger@siemens.at>
4 Parts of the source code have been copied from kdpdatebutton.cpp 4 Parts of the source code have been copied from kdpdatebutton.cpp
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source ode for Qt in the source distribution. 22 without including the source ode for Qt in the source distribution.
23*/ 23*/
24 24
25#include <qevent.h> 25#include <qevent.h>
26#include <qpainter.h> 26#include <qpainter.h>
27#include <qptrlist.h> 27#include <qptrlist.h>
28#include <qtimer.h> 28#include <qtimer.h>
29 29
30#include <kglobal.h> 30#include <kglobal.h>
31#include <kdebug.h> 31#include <kdebug.h>
32#include <klocale.h> 32#include <klocale.h>
33 33
34#include <libkcal/vcaldrag.h> 34#include <libkcal/vcaldrag.h>
35#include <libkcal/icaldrag.h> 35#include <libkcal/icaldrag.h>
36#include <libkcal/dndfactory.h> 36#include <libkcal/dndfactory.h>
37#include <libkcal/calendarresources.h> 37#include <libkcal/calendarresources.h>
38#include <libkcal/resourcecalendar.h> 38#include <libkcal/resourcecalendar.h>
39#include <kresources/resourceselectdialog.h> 39#include <kresources/resourceselectdialog.h>
40 40
41#include <kcalendarsystem.h> 41#include <kcalendarsystem.h>
42 42
43#ifndef KORG_NOPLUGINS 43#ifndef KORG_NOPLUGINS
44#include "kocore.h" 44#include "kocore.h"
45#endif 45#endif
46#include "koprefs.h" 46#include "koprefs.h"
47#include "koglobals.h" 47#include "koglobals.h"
48 48
49#include "kodaymatrix.h" 49#include "kodaymatrix.h"
50 50
51// ============================================================================ 51// ============================================================================
52// D Y N A M I C T I P 52// D Y N A M I C T I P
53// ============================================================================ 53// ============================================================================
54 54
55DynamicTip::DynamicTip( QWidget * parent ) 55DynamicTip::DynamicTip( QWidget * parent )
56 : QToolTip( parent ) 56 : QToolTip( parent )
57{ 57{
58 matrix = (KODayMatrix*)parent; 58 matrix = (KODayMatrix*)parent;
59} 59}
60 60
61 61
62void DynamicTip::maybeTip( const QPoint &pos ) 62void DynamicTip::maybeTip( const QPoint &pos )
63{ 63{
64 //calculate which cell of the matrix the mouse is in 64 //calculate which cell of the matrix the mouse is in
65 QRect sz = matrix->frameRect(); 65 QRect sz = matrix->frameRect();
66 int dheight = sz.height()*7 / 42; 66 int dheight = sz.height()*7 / 42;
67 int dwidth = sz.width() / 7; 67 int dwidth = sz.width() / 7;
68 int row = pos.y()/dheight; 68 int row = pos.y()/dheight;
69 int col = pos.x()/dwidth; 69 int col = pos.x()/dwidth;
70 70
71 QRect rct(col*dwidth, row*dheight, dwidth, dheight); 71 QRect rct(col*dwidth, row*dheight, dwidth, dheight);
72 72
73// kdDebug() << "DynamicTip::maybeTip matrix cell index [" << 73// kdDebug() << "DynamicTip::maybeTip matrix cell index [" <<
74// col << "][" << row << "] => " <<(col+row*7) << endl; 74// col << "][" << row << "] => " <<(col+row*7) << endl;
75 75
76 //show holiday names only 76 //show holiday names only
77 QString str = matrix->getHolidayLabel(col+row*7); 77 QString str = matrix->getHolidayLabel(col+row*7);
78 if (str.isEmpty()) return; 78 if (str.isEmpty()) return;
79 tip(rct, str); 79 tip(rct, str);
80} 80}
81 81
82 82
83// ============================================================================ 83// ============================================================================
84// K O D A Y M A T R I X 84// K O D A Y M A T R I X
85// ============================================================================ 85// ============================================================================
86 86
87const int KODayMatrix::NOSELECTION = -1000; 87const int KODayMatrix::NOSELECTION = -1000;
88const int KODayMatrix::NUMDAYS = 42; 88const int KODayMatrix::NUMDAYS = 42;
89 89
90KODayMatrix::KODayMatrix( QWidget *parent, const char *name )
91 : QFrame( parent, name ), mCalendar( 0 )
92
93#if 0
90KODayMatrix::KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const char *name) : 94KODayMatrix::KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const char *name) :
91 QFrame(parent, name) 95 QFrame(parent, name)
96#endif
92{ 97{
93 mCalendar = calendar; 98
94 mPendingUpdateBeforeRepaint = false; 99 mPendingUpdateBeforeRepaint = false;
95 100
96 // initialize dynamic arrays 101 // initialize dynamic arrays
97 days = new QDate[NUMDAYS]; 102 days = new QDate[NUMDAYS];
98 daylbls = new QString[NUMDAYS]; 103 daylbls = new QString[NUMDAYS];
99 events = new int[NUMDAYS]; 104 events = new int[NUMDAYS];
100 mToolTip = new DynamicTip(this); 105 mToolTip = new DynamicTip(this);
101 106
102 // set default values used for drawing the matrix 107 // set default values used for drawing the matrix
103 mDefaultBackColor = palette().active().base(); 108 mDefaultBackColor = palette().active().base();
104 mDefaultTextColor = palette().active().foreground(); 109 mDefaultTextColor = palette().active().foreground();
105 mDefaultTextColorShaded = getShadedColor(mDefaultTextColor); 110 mDefaultTextColorShaded = getShadedColor(mDefaultTextColor);
106 mHolidayColorShaded = getShadedColor(KOPrefs::instance()->mHolidayColor); 111 mHolidayColorShaded = getShadedColor(KOPrefs::instance()->mHolidayColor);
107 mSelectedDaysColor = QColor("white"); 112 mSelectedDaysColor = QColor("white");
108 mTodayMarginWidth = 2; 113 mTodayMarginWidth = 2;
109 mSelEnd = mSelStart = NOSELECTION; 114 mSelEnd = mSelStart = NOSELECTION;
110 115
111 setAcceptDrops(true); 116 setAcceptDrops(true);
112 //setFont( QFont("Arial", 10) ); 117 //setFont( QFont("Arial", 10) );
113 118
114 mUpdateTimer = new QTimer( this ); 119 mUpdateTimer = new QTimer( this );
115 connect (mUpdateTimer ,SIGNAL(timeout()), this, SLOT ( updateViewTimed() )); 120 connect (mUpdateTimer ,SIGNAL(timeout()), this, SLOT ( updateViewTimed() ));
116 mRepaintTimer = new QTimer( this ); 121 mRepaintTimer = new QTimer( this );
117 connect (mRepaintTimer ,SIGNAL(timeout()), this, SLOT ( repaintViewTimed() )); 122 connect (mRepaintTimer ,SIGNAL(timeout()), this, SLOT ( repaintViewTimed() ));
118 mDayChanged = false; 123 mDayChanged = false;
119 updateView(); 124 updateView();
120} 125}
126void KODayMatrix::setCalendar( Calendar *cal )
127{
128 mCalendar = cal;
129
130 setAcceptDrops( mCalendar );
131
132 updateEvents();
133}
121 134
122QColor KODayMatrix::getShadedColor(QColor color) 135QColor KODayMatrix::getShadedColor(QColor color)
123{ 136{
124 QColor shaded; 137 QColor shaded;
125 int h=0; 138 int h=0;
126 int s=0; 139 int s=0;
127 int v=0; 140 int v=0;
128 color.hsv(&h,&s,&v); 141 color.hsv(&h,&s,&v);
129 s = s/4; 142 s = s/4;
130 v = 192+v/4; 143 v = 192+v/4;
131 shaded.setHsv(h,s,v); 144 shaded.setHsv(h,s,v);
132 145
133 return shaded; 146 return shaded;
134} 147}
135 148
136KODayMatrix::~KODayMatrix() 149KODayMatrix::~KODayMatrix()
137{ 150{
138 delete [] days; 151 delete [] days;
139 delete [] daylbls; 152 delete [] daylbls;
140 delete [] events; 153 delete [] events;
141 delete mToolTip; 154 delete mToolTip;
142} 155}
143 156
144/* 157/*
145void KODayMatrix::setStartDate(QDate start) 158void KODayMatrix::setStartDate(QDate start)
146{ 159{
147 updateView(start); 160 updateView(start);
148} 161}
149*/ 162*/
150 163
151void KODayMatrix::addSelectedDaysTo(DateList& selDays) 164void KODayMatrix::addSelectedDaysTo(DateList& selDays)
152{ 165{
153 166
154 if (mSelStart == NOSELECTION) { 167 if (mSelStart == NOSELECTION) {
155 return; 168 return;
156 } 169 }
157 170
158 //cope with selection being out of matrix limits at top (< 0) 171 //cope with selection being out of matrix limits at top (< 0)
159 int i0 = mSelStart; 172 int i0 = mSelStart;
160 if (i0 < 0) { 173 if (i0 < 0) {
161 for (int i = i0; i < 0; i++) { 174 for (int i = i0; i < 0; i++) {
162 selDays.append(days[0].addDays(i)); 175 selDays.append(days[0].addDays(i));
163 } 176 }
164 i0 = 0; 177 i0 = 0;
165 } 178 }
166 179
167 //cope with selection being out of matrix limits at bottom (> NUMDAYS-1) 180 //cope with selection being out of matrix limits at bottom (> NUMDAYS-1)
168 if (mSelEnd > NUMDAYS-1) { 181 if (mSelEnd > NUMDAYS-1) {
169 for (int i = i0; i <= NUMDAYS-1; i++) { 182 for (int i = i0; i <= NUMDAYS-1; i++) {
170 selDays.append(days[i]); 183 selDays.append(days[i]);
171 } 184 }
172 for (int i = NUMDAYS; i < mSelEnd; i++) { 185 for (int i = NUMDAYS; i < mSelEnd; i++) {
173 selDays.append(days[0].addDays(i)); 186 selDays.append(days[0].addDays(i));
174 } 187 }
175 188
176 // apply normal routine to selection being entirely within matrix limits 189 // apply normal routine to selection being entirely within matrix limits
177 } else { 190 } else {
178 for (int i = i0; i <= mSelEnd; i++) { 191 for (int i = i0; i <= mSelEnd; i++) {
179 selDays.append(days[i]); 192 selDays.append(days[i]);
180 } 193 }
181 } 194 }
182} 195}
183 196
184void KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end) 197void KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end)
185{ 198{
186 mSelStart = startdate.daysTo(start); 199 mSelStart = startdate.daysTo(start);
187 mSelEnd = startdate.daysTo(end); 200 mSelEnd = startdate.daysTo(end);
188} 201}
202void KODayMatrix::clearSelection()
203{
204 mSelEnd = mSelStart = NOSELECTION;
205}
189 206
190 207
191void KODayMatrix::recalculateToday() 208void KODayMatrix::recalculateToday()
192{ 209{
193 today = -1; 210 today = -1;
194 for (int i=0; i<NUMDAYS; i++) { 211 for (int i=0; i<NUMDAYS; i++) {
195 events[i] = 0; 212 events[i] = 0;
196 days[i] = startdate.addDays(i); 213 days[i] = startdate.addDays(i);
197 daylbls[i] = QString::number( KOGlobals::self()->calendarSystem()->day( days[i] )); 214 daylbls[i] = QString::number( KOGlobals::self()->calendarSystem()->day( days[i] ));
198 215
199 // if today is in the currently displayed month, hilight today 216 // if today is in the currently displayed month, hilight today
200 if (days[i].year() == QDate::currentDate().year() && 217 if (days[i].year() == QDate::currentDate().year() &&
201 days[i].month() == QDate::currentDate().month() && 218 days[i].month() == QDate::currentDate().month() &&
202 days[i].day() == QDate::currentDate().day()) { 219 days[i].day() == QDate::currentDate().day()) {
203 today = i; 220 today = i;
204 } 221 }
205 } 222 }
206 // qDebug(QString("Today is visible at %1.").arg(today)); 223 // qDebug(QString("Today is visible at %1.").arg(today));
207} 224}
208 225
209void KODayMatrix::updateView() 226void KODayMatrix::updateView()
210{ 227{
211 updateView(startdate); 228 updateView(startdate);
212} 229}
213void KODayMatrix::repaintViewTimed() 230void KODayMatrix::repaintViewTimed()
214{ 231{
215 mRepaintTimer->stop(); 232 mRepaintTimer->stop();
216 repaint(false); 233 repaint(false);
217} 234}
218void KODayMatrix::updateViewTimed() 235void KODayMatrix::updateViewTimed()
219{ 236{
220
221 mUpdateTimer->stop(); 237 mUpdateTimer->stop();
238 if ( !mCalendar ) {
239 qDebug("NOT CAL ");
240 return;
241 }
242 //qDebug("KODayMatrix::updateViewTimed ");
222 for(int i = 0; i < NUMDAYS; i++) { 243 for(int i = 0; i < NUMDAYS; i++) {
223 // if events are set for the day then remember to draw it bold 244 // if events are set for the day then remember to draw it bold
224 QPtrList<Event> eventlist = mCalendar->events(days[i]); 245 QPtrList<Event> eventlist = mCalendar->events(days[i]);
225 Event *event; 246 Event *event;
226 int numEvents = eventlist.count(); 247 int numEvents = eventlist.count();
227 QString holiStr = ""; 248 QString holiStr = "";
228 for(event=eventlist.first();event != 0;event=eventlist.next()) { 249 for(event=eventlist.first();event != 0;event=eventlist.next()) {
229 ushort recurType = event->recurrence()->doesRecur(); 250 ushort recurType = event->recurrence()->doesRecur();
230 if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) || 251 if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) ||
231 (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) { 252 (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) {
232 numEvents--; 253 numEvents--;
233 } 254 }
234 if ( event->categories().contains( i18n("Holiday") ) || event->categories().contains( "Holiday" )) { 255 if ( event->categories().contains( i18n("Holiday") ) || event->categories().contains( "Holiday" )) {
235 if ( !holiStr.isEmpty() ) 256 if ( !holiStr.isEmpty() )
236 holiStr += "\n"; 257 holiStr += "\n";
237 holiStr += event->summary(); 258 holiStr += event->summary();
238 } 259 }
239 } 260 }
240 events[i] = numEvents; 261 events[i] = numEvents;
241 //if it is a holy day then draw it red. Sundays are consider holidays, too 262 //if it is a holy day then draw it red. Sundays are consider holidays, too
242 if ( (KOGlobals::self()->calendarSystem()->dayOfWeek(days[i]) == KOGlobals::self()->calendarSystem()->weekDayOfPray()) || 263 if ( (KOGlobals::self()->calendarSystem()->dayOfWeek(days[i]) == KOGlobals::self()->calendarSystem()->weekDayOfPray()) ||
243 !holiStr.isEmpty()) { 264 !holiStr.isEmpty()) {
244 mHolidays[i] = holiStr; 265 mHolidays[i] = holiStr;
245 } else { 266 } else {
246 mHolidays[i] = QString::null; 267 mHolidays[i] = QString::null;
247 } 268 }
248 } 269 }
249 if ( ! mPendingUpdateBeforeRepaint ) 270 if ( ! mPendingUpdateBeforeRepaint )
250 repaint(false); 271 repaint(false);
251} 272}
252void KODayMatrix::updateView(QDate actdate) 273void KODayMatrix::updateView(QDate actdate)
253{ 274{
254 275
255 if ( ! actdate.isValid() ) { 276 if ( ! actdate.isValid() ) {
256 //qDebug("date not valid "); 277 //qDebug("date not valid ");
257 return; 278 return;
258 } 279 }
259 mDayChanged = false; 280 mDayChanged = false;
260 //flag to indicate if the starting day of the matrix has changed by this call 281 //flag to indicate if the starting day of the matrix has changed by this call
261 //mDayChanged = false; 282 //mDayChanged = false;
262 // if a new startdate is to be set then apply Cornelius's calculation 283 // if a new startdate is to be set then apply Cornelius's calculation
263 // of the first day to be shown 284 // of the first day to be shown
264 if (actdate != startdate) { 285 if (actdate != startdate) {
265 // reset index of selection according to shift of starting date from startdate to actdate 286 // reset index of selection according to shift of starting date from startdate to actdate
266 if (mSelStart != NOSELECTION) { 287 if (mSelStart != NOSELECTION) {
267 int tmp = actdate.daysTo(startdate); 288 int tmp = actdate.daysTo(startdate);
268 //kdDebug() << "Shift of Selection1: " << mSelStart << " - " << mSelEnd << " -> " << tmp << "(" << offset << ")" << endl; 289 //kdDebug() << "Shift of Selection1: " << mSelStart << " - " << mSelEnd << " -> " << tmp << "(" << offset << ")" << endl;
269 // shift selection if new one would be visible at least partly ! 290 // shift selection if new one would be visible at least partly !
270 291
271 if (mSelStart+tmp < NUMDAYS && mSelEnd+tmp >= 0) { 292 if (mSelStart+tmp < NUMDAYS && mSelEnd+tmp >= 0) {
272 // nested if is required for next X display pushed from a different month - correction required 293 // nested if is required for next X display pushed from a different month - correction required
273 // otherwise, for month forward and backward, it must be avoided 294 // otherwise, for month forward and backward, it must be avoided
274 if( mSelStart > NUMDAYS || mSelStart < 0 ) 295 if( mSelStart > NUMDAYS || mSelStart < 0 )
275 mSelStart = mSelStart + tmp; 296 mSelStart = mSelStart + tmp;
276 if( mSelEnd > NUMDAYS || mSelEnd < 0 ) 297 if( mSelEnd > NUMDAYS || mSelEnd < 0 )
277 mSelEnd = mSelEnd + tmp; 298 mSelEnd = mSelEnd + tmp;
278 } 299 }
279 } 300 }
280 startdate = actdate; 301 startdate = actdate;
281 mDayChanged = true; 302 mDayChanged = true;
282 recalculateToday(); 303 recalculateToday();
283 } 304 }
284 //qDebug("restart Timer %d vis: %d", mDayChanged, isVisible() ); 305 //qDebug("restart Timer %d vis: %d", mDayChanged, isVisible() );
285 if ( !isVisible() ) { 306 if ( !isVisible() ) {
286 mPendingUpdateBeforeRepaint = true; 307 mPendingUpdateBeforeRepaint = true;
287 } else { 308 } else {
288#ifdef DESKTOP_VERSION 309#ifdef DESKTOP_VERSION
289 //mRepaintTimer->start( 250 ); 310 //mRepaintTimer->start( 250 );
290 mUpdateTimer->start( 250 ); 311 mUpdateTimer->start( 250 );
291#else 312#else
292 mRepaintTimer->start( 350 ); 313 mRepaintTimer->start( 350 );
293 mUpdateTimer->start( 2000 ); 314 mUpdateTimer->start( 2000 );
294#endif 315#endif
295 } 316 }
296} 317}
318void KODayMatrix::updateEvents()
319{
320 if ( !mCalendar ) return;
321
322 for( int i = 0; i < NUMDAYS; i++ ) {
323 // if events are set for the day then remember to draw it bold
324 QPtrList<Event> eventlist = mCalendar->events( days[ i ] );
325 int numEvents = eventlist.count();
326 Event *event;
327 for( event = eventlist.first(); event != 0;event=eventlist.next()) {
328 ushort recurType = event->doesRecur();
329
330 if ( ( recurType == Recurrence::rDaily &&
331 !KOPrefs::instance()->mDailyRecur ) ||
332 ( recurType == Recurrence::rWeekly &&
333 !KOPrefs::instance()->mWeeklyRecur ) ) {
334 numEvents--;
335 }
336 }
337 events[ i ] = numEvents;
338 }
339}
297 340
298const QDate& KODayMatrix::getDate(int offset) 341const QDate& KODayMatrix::getDate(int offset)
299{ 342{
300 if (offset < 0 || offset > NUMDAYS-1) { 343 if (offset < 0 || offset > NUMDAYS-1) {
301 qDebug("Wrong offset2 "); 344 qDebug("Wrong offset2 ");
302 return days[0]; 345 return days[0];
303 } 346 }
304 return days[offset]; 347 return days[offset];
305} 348}
306 349
307QString KODayMatrix::getHolidayLabel(int offset) 350QString KODayMatrix::getHolidayLabel(int offset)
308{ 351{
309 if (offset < 0 || offset > NUMDAYS-1) { 352 if (offset < 0 || offset > NUMDAYS-1) {
310 qDebug("Wrong offset1 "); 353 qDebug("Wrong offset1 ");
311 return 0; 354 return 0;
312 } 355 }
313 return mHolidays[offset]; 356 return mHolidays[offset];
314} 357}
315 358
316int KODayMatrix::getDayIndexFrom(int x, int y) 359int KODayMatrix::getDayIndexFrom(int x, int y)
317{ 360{
318 return 7*(y/daysize.height()) + (KOGlobals::self()->reverseLayout() ? 361 return 7*(y/daysize.height()) + (KOGlobals::self()->reverseLayout() ?
319 6 - x/daysize.width() : x/daysize.width()); 362 6 - x/daysize.width() : x/daysize.width());
320} 363}
321 364
322// ---------------------------------------------------------------------------- 365// ----------------------------------------------------------------------------
323// M O U S E E V E N T H A N D L I N G 366// M O U S E E V E N T H A N D L I N G
324// ---------------------------------------------------------------------------- 367// ----------------------------------------------------------------------------
325 368
326void KODayMatrix::mousePressEvent (QMouseEvent* e) 369void KODayMatrix::mousePressEvent (QMouseEvent* e)
327{ 370{
328 mSelStart = getDayIndexFrom(e->x(), e->y()); 371 mSelStart = getDayIndexFrom(e->x(), e->y());
329 if (mSelStart > NUMDAYS-1) mSelStart=NUMDAYS-1; 372 if (mSelStart > NUMDAYS-1) mSelStart=NUMDAYS-1;
330 mSelInit = mSelStart; 373 mSelInit = mSelStart;
331} 374}
332 375
333void KODayMatrix::mouseReleaseEvent (QMouseEvent* e) 376void KODayMatrix::mouseReleaseEvent (QMouseEvent* e)
334{ 377{
335 378
336 int tmp = getDayIndexFrom(e->x(), e->y()); 379 int tmp = getDayIndexFrom(e->x(), e->y());
337 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1; 380 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1;
338 381
339 if (mSelInit > tmp) { 382 if (mSelInit > tmp) {
340 mSelEnd = mSelInit; 383 mSelEnd = mSelInit;
341 if (tmp != mSelStart) { 384 if (tmp != mSelStart) {
342 mSelStart = tmp; 385 mSelStart = tmp;
343 repaint(false); 386 repaint(false);
344 } 387 }
345 } else { 388 } else {
346 mSelStart = mSelInit; 389 mSelStart = mSelInit;
347 390
348 //repaint only if selection has changed 391 //repaint only if selection has changed
349 if (tmp != mSelEnd) { 392 if (tmp != mSelEnd) {
350 mSelEnd = tmp; 393 mSelEnd = tmp;
351 repaint(false); 394 repaint(false);
352 } 395 }
353 } 396 }
354 397
355 DateList daylist; 398 DateList daylist;
356 if ( mSelStart < 0 ) 399 if ( mSelStart < 0 )
357 mSelStart = 0; 400 mSelStart = 0;
358 for (int i = mSelStart; i <= mSelEnd; i++) { 401 for (int i = mSelStart; i <= mSelEnd; i++) {
359 daylist.append(days[i]); 402 daylist.append(days[i]);
360 } 403 }
361 emit selected((const DateList)daylist); 404 emit selected((const DateList)daylist);
362 405
363} 406}
364 407
365void KODayMatrix::mouseMoveEvent (QMouseEvent* e) 408void KODayMatrix::mouseMoveEvent (QMouseEvent* e)
366{ 409{
367 int tmp = getDayIndexFrom(e->x(), e->y()); 410 int tmp = getDayIndexFrom(e->x(), e->y());
368 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1; 411 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1;
369 412
370 if (mSelInit > tmp) { 413 if (mSelInit > tmp) {
371 mSelEnd = mSelInit; 414 mSelEnd = mSelInit;
372 if (tmp != mSelStart) { 415 if (tmp != mSelStart) {
373 mSelStart = tmp; 416 mSelStart = tmp;
374 repaint(false); 417 repaint(false);
375 } 418 }
376 } else { 419 } else {
377 mSelStart = mSelInit; 420 mSelStart = mSelInit;
378 421
379 //repaint only if selection has changed 422 //repaint only if selection has changed
380 if (tmp != mSelEnd) { 423 if (tmp != mSelEnd) {
381 mSelEnd = tmp; 424 mSelEnd = tmp;
382 repaint(false); 425 repaint(false);
383 } 426 }
384 } 427 }
385} 428}
386 429
387// ---------------------------------------------------------------------------- 430// ----------------------------------------------------------------------------
388// D R A G ' N D R O P H A N D L I N G 431// D R A G ' N D R O P H A N D L I N G
389// ---------------------------------------------------------------------------- 432// ----------------------------------------------------------------------------
390 433
391void KODayMatrix::dragEnterEvent(QDragEnterEvent *e) 434void KODayMatrix::dragEnterEvent(QDragEnterEvent *e)
392{ 435{
393#ifndef KORG_NODND 436#ifndef KORG_NODND
394 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { 437 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) {
395 e->ignore(); 438 e->ignore();
396 return; 439 return;
397 } 440 }
398 441
399 // some visual feedback 442 // some visual feedback
400// oldPalette = palette(); 443// oldPalette = palette();
401// setPalette(my_HilitePalette); 444// setPalette(my_HilitePalette);
402// update(); 445// update();
403#endif 446#endif
404} 447}
405 448
406void KODayMatrix::dragMoveEvent(QDragMoveEvent *e) 449void KODayMatrix::dragMoveEvent(QDragMoveEvent *e)
407{ 450{
408#ifndef KORG_NODND 451#ifndef KORG_NODND
409 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { 452 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) {
410 e->ignore(); 453 e->ignore();
411 return; 454 return;
412 } 455 }
413 456
414 e->accept(); 457 e->accept();
415#endif 458#endif
416} 459}
417 460
418void KODayMatrix::dragLeaveEvent(QDragLeaveEvent */*dl*/) 461void KODayMatrix::dragLeaveEvent(QDragLeaveEvent */*dl*/)
419{ 462{
420#ifndef KORG_NODND 463#ifndef KORG_NODND
421// setPalette(oldPalette); 464// setPalette(oldPalette);
422// update(); 465// update();
423#endif 466#endif
424} 467}
425 468
426void KODayMatrix::dropEvent(QDropEvent *e) 469void KODayMatrix::dropEvent(QDropEvent *e)
427{ 470{
428#ifndef KORG_NODND 471#ifndef KORG_NODND
429// kdDebug() << "KODayMatrix::dropEvent(e) begin" << endl; 472// kdDebug() << "KODayMatrix::dropEvent(e) begin" << endl;
430 473
431 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { 474 if (!mCalendar || !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) {
432 e->ignore(); 475 e->ignore();
433 return; 476 return;
434 } 477 }
435 478
436 DndFactory factory( mCalendar ); 479 DndFactory factory( mCalendar );
437 Event *event = factory.createDrop(e); 480 Event *event = factory.createDrop(e);
438 481
439 if (event) { 482 if (event) {
440 e->acceptAction(); 483 e->acceptAction();
441 484
442 Event *existingEvent = mCalendar->event(event->uid()); 485 Event *existingEvent = mCalendar->event(event->uid());
443 486
444 if(existingEvent) { 487 if(existingEvent) {
445 // uniquify event 488 // uniquify event
446 event->recreate(); 489 event->recreate();
447/* 490/*
448 KMessageBox::sorry(this, 491 KMessageBox::sorry(this,
449 i18n("Event already exists in this calendar."), 492 i18n("Event already exists in this calendar."),
450 i18n("Drop Event")); 493 i18n("Drop Event"));
451 delete event; 494 delete event;
452 return; 495 return;
453*/ 496*/
454 } 497 }
455// kdDebug() << "Drop new Event" << endl; 498// kdDebug() << "Drop new Event" << endl;
456 // Adjust date 499 // Adjust date
457 QDateTime start = event->dtStart(); 500 QDateTime start = event->dtStart();
458 QDateTime end = event->dtEnd(); 501 QDateTime end = event->dtEnd();
459 int duration = start.daysTo(end); 502 int duration = start.daysTo(end);
460 int idx = getDayIndexFrom(e->pos().x(), e->pos().y()); 503 int idx = getDayIndexFrom(e->pos().x(), e->pos().y());
461 504
462 start.setDate(days[idx]); 505 start.setDate(days[idx]);
463 end.setDate(days[idx].addDays(duration)); 506 end.setDate(days[idx].addDays(duration));
464 507
465 event->setDtStart(start); 508 event->setDtStart(start);
466 event->setDtEnd(end); 509 event->setDtEnd(end);
467 mCalendar->addEvent(event); 510 mCalendar->addEvent(event);
468 511
469 emit eventDropped(event); 512 emit eventDropped(event);
470 } else { 513 } else {
471// kdDebug() << "KODayMatrix::dropEvent(): Event from drop not decodable" << endl; 514// kdDebug() << "KODayMatrix::dropEvent(): Event from drop not decodable" << endl;
472 e->ignore(); 515 e->ignore();
473 } 516 }
474#endif 517#endif
475} 518}
476 519
477// ---------------------------------------------------------------------------- 520// ----------------------------------------------------------------------------
478// P A I N T E V E N T H A N D L I N G 521// P A I N T E V E N T H A N D L I N G
479// ---------------------------------------------------------------------------- 522// ----------------------------------------------------------------------------
480 523
481void KODayMatrix::paintEvent(QPaintEvent * pevent) 524void KODayMatrix::paintEvent(QPaintEvent * pevent)
482{ 525{
483 if ( width() <= 0 || height() <= 0 ) 526 if ( width() <= 0 || height() <= 0 )
484 return; 527 return;
485 if ( mPendingUpdateBeforeRepaint ) { 528 if ( mPendingUpdateBeforeRepaint ) {
486 updateViewTimed(); 529 updateViewTimed();
487 mPendingUpdateBeforeRepaint = false; 530 mPendingUpdateBeforeRepaint = false;
488 } 531 }
489 if ( myPix.width() != width() || myPix.height()!=height() ) { 532 if ( myPix.width() != width() || myPix.height()!=height() ) {
490 myPix.resize(size() ); 533 myPix.resize(size() );
491 } 534 }
492 QPainter p(&myPix); 535 QPainter p(&myPix);
493 p.setFont(font()); 536 p.setFont(font());
494 537
495 QRect sz = frameRect(); 538 QRect sz = frameRect();
496 int dheight = daysize.height(); 539 int dheight = daysize.height();
497 int dwidth = daysize.width(); 540 int dwidth = daysize.width();
498 int row,col; 541 int row,col;
499 int selw, selh; 542 int selw, selh;
500 bool isRTL = KOGlobals::self()->reverseLayout(); 543 bool isRTL = KOGlobals::self()->reverseLayout();
501 544
502 // draw background and topleft frame 545 // draw background and topleft frame
503 p.fillRect(pevent->rect(), mDefaultBackColor); 546 p.fillRect(pevent->rect(), mDefaultBackColor);
504 p.setPen(mDefaultTextColor); 547 p.setPen(mDefaultTextColor);
505 p.drawRect(0, 0, sz.width()+1, sz.height()+1); 548 p.drawRect(0, 0, sz.width()+1, sz.height()+1);
506 549
507 // draw selected days with highlighted background color 550 // draw selected days with highlighted background color
508 if (mSelStart != NOSELECTION) { 551 if (mSelStart != NOSELECTION) {
509 552
510 row = mSelStart/7; 553 row = mSelStart/7;
511 col = mSelStart -row*7; 554 col = mSelStart -row*7;
512 QColor selcol = KOPrefs::instance()->mHighlightColor; 555 QColor selcol = KOPrefs::instance()->mHighlightColor;
513 556
514 if (row == mSelEnd/7) { 557 if (row == mSelEnd/7) {
515 // Single row selection 558 // Single row selection
516 p.fillRect(isRTL ? (7 - (mSelEnd-mSelStart+1) - col)*dwidth : col*dwidth, 559 p.fillRect(isRTL ? (7 - (mSelEnd-mSelStart+1) - col)*dwidth : col*dwidth,
517 row*dheight, (mSelEnd-mSelStart+1)*dwidth, dheight, selcol); 560 row*dheight, (mSelEnd-mSelStart+1)*dwidth, dheight, selcol);
518 } else { 561 } else {
519 // draw first row to the right 562 // draw first row to the right
520 p.fillRect(isRTL ? 0 : col*dwidth, row*dheight, (7-col)*dwidth, 563 p.fillRect(isRTL ? 0 : col*dwidth, row*dheight, (7-col)*dwidth,
521 dheight, selcol); 564 dheight, selcol);
522 // draw full block till last line 565 // draw full block till last line
523 selh = mSelEnd/7-row; 566 selh = mSelEnd/7-row;
524 if (selh > 1) { 567 if (selh > 1) {
525 p.fillRect(0, (row+1)*dheight, 7*dwidth, (selh-1)*dheight,selcol); 568 p.fillRect(0, (row+1)*dheight, 7*dwidth, (selh-1)*dheight,selcol);
526 } 569 }
527 // draw last block from left to mSelEnd 570 // draw last block from left to mSelEnd
diff --git a/korganizer/kodaymatrix.h b/korganizer/kodaymatrix.h
index 2dd112a..ba4853f 100644
--- a/korganizer/kodaymatrix.h
+++ b/korganizer/kodaymatrix.h
@@ -24,228 +24,230 @@
24#define _KODAYMAT_H 24#define _KODAYMAT_H
25 25
26#include <libkcal/calendar.h> 26#include <libkcal/calendar.h>
27 27
28#include <qstring.h> 28#include <qstring.h>
29#include <qframe.h> 29#include <qframe.h>
30#include <qcolor.h> 30#include <qcolor.h>
31#include <qpen.h> 31#include <qpen.h>
32#include <qdatetime.h> 32#include <qdatetime.h>
33#include <qtooltip.h> 33#include <qtooltip.h>
34#include <qpixmap.h> 34#include <qpixmap.h>
35 35
36#include <qmap.h> 36#include <qmap.h>
37 37
38class QDragEnterEvent; 38class QDragEnterEvent;
39class QDragMoveEvent; 39class QDragMoveEvent;
40class QDragLeaveEvent; 40class QDragLeaveEvent;
41class QDropEvent; 41class QDropEvent;
42 42
43class KODayMatrix; 43class KODayMatrix;
44 44
45using namespace KCal; 45using namespace KCal;
46 46
47 47
48/** 48/**
49 * small helper class to dynamically show tooltips inside the day matrix. 49 * small helper class to dynamically show tooltips inside the day matrix.
50 * This class asks the day matrix object for a appropriate label which 50 * This class asks the day matrix object for a appropriate label which
51 * is in our special case the name of the holiday or null if this day is no holiday. 51 * is in our special case the name of the holiday or null if this day is no holiday.
52 */ 52 */
53class DynamicTip : public QToolTip 53class DynamicTip : public QToolTip
54{ 54{
55public: 55public:
56 56
57 /** 57 /**
58 * Constructor that expects a KODayMatrix object as parent. 58 * Constructor that expects a KODayMatrix object as parent.
59 * 59 *
60 * @param parent the parent KODayMatrix control. 60 * @param parent the parent KODayMatrix control.
61 */ 61 */
62 DynamicTip(QWidget* parent ); 62 DynamicTip(QWidget* parent );
63 63
64protected: 64protected:
65 65
66 /** 66 /**
67 * Qt's callback to ask the object to provide an approrpiate text for the 67 * Qt's callback to ask the object to provide an approrpiate text for the
68 * tooltip to be shown. 68 * tooltip to be shown.
69 * 69 *
70 * @param pos coordinates of the mouse. 70 * @param pos coordinates of the mouse.
71 */ 71 */
72 void maybeTip( const QPoint & pos); 72 void maybeTip( const QPoint & pos);
73 73
74private: 74private:
75 75
76 /** the parent control this tooltip is designed for. */ 76 /** the parent control this tooltip is designed for. */
77 KODayMatrix* matrix; 77 KODayMatrix* matrix;
78}; 78};
79 79
80/** 80/**
81 * replacement for kdpdatebuton.cpp that used 42 widgets for the day matrix to be displayed. 81 * replacement for kdpdatebuton.cpp that used 42 widgets for the day matrix to be displayed.
82 * Cornelius thought this was a waste of memory and a lot of overhead. 82 * Cornelius thought this was a waste of memory and a lot of overhead.
83 * In addition the selection was not very intuitive so I decided to rewrite it using a QFrame 83 * In addition the selection was not very intuitive so I decided to rewrite it using a QFrame
84 * that draws the labels and allows for dragging selection while maintaining nearly full 84 * that draws the labels and allows for dragging selection while maintaining nearly full
85 * compatibility in behaviour with its predecessor. 85 * compatibility in behaviour with its predecessor.
86 * 86 *
87 * The following functionality has been changed: 87 * The following functionality has been changed:
88 * 88 *
89 * o when shifting events in the agenda view from one day to another the day matrix is updated now 89 * o when shifting events in the agenda view from one day to another the day matrix is updated now
90 * o TODO ET dragging an event to the matrix will MOVE not COPY the event to the new date. 90 * o TODO ET dragging an event to the matrix will MOVE not COPY the event to the new date.
91 * o no support for Ctrl+click to create groups of dates 91 * o no support for Ctrl+click to create groups of dates
92 * (This has not really been supported in the predecessor. It was not very intuitive nor was it 92 * (This has not really been supported in the predecessor. It was not very intuitive nor was it
93 * user friendly.) 93 * user friendly.)
94 * This feature has been replaced with dragging a selection on the matrix. The matrix will 94 * This feature has been replaced with dragging a selection on the matrix. The matrix will
95 * automatically choose the appropriate selection (e.g. you are not any longer able to select 95 * automatically choose the appropriate selection (e.g. you are not any longer able to select
96 * two distinct groups of date selections as in the old class) 96 * two distinct groups of date selections as in the old class)
97 * o now that you can select more then a week it can happen that not all selected days are 97 * o now that you can select more then a week it can happen that not all selected days are
98 * displayed in the matrix. However this is preferred to the alternative which would mean to 98 * displayed in the matrix. However this is preferred to the alternative which would mean to
99 * adjust the selection and leave some days undisplayed while scrolling through the months 99 * adjust the selection and leave some days undisplayed while scrolling through the months
100 * 100 *
101 * @short day matrix widget of the KDateNavigator 101 * @short day matrix widget of the KDateNavigator
102 * 102 *
103 * @author Eitzenberger Thomas 103 * @author Eitzenberger Thomas
104 */ 104 */
105class KODayMatrix: public QFrame { 105class KODayMatrix: public QFrame {
106 106
107 Q_OBJECT 107 Q_OBJECT
108 108
109public: 109public:
110 110
111 /** constructor to create a day matrix widget. 111 /** constructor to create a day matrix widget.
112 * 112 *
113 * @param parent widget that is the parent of the day matrix. Normally this should 113 * @param parent widget that is the parent of the day matrix. Normally this should
114 * be a KDateNavigator 114 * be a KDateNavigator
115 * @param calendar instance of a calendar on which all calculations are based 115 * @param calendar instance of a calendar on which all calculations are based
116 * @param date start date of the matrix (is expected to be already fixed). It is 116 * @param date start date of the matrix (is expected to be already fixed). It is
117 * assumed that this date is the first week day to be shown in the matrix. 117 * assumed that this date is the first week day to be shown in the matrix.
118 * @param name name of the widget 118 * @param name name of the widget
119 */ 119 */
120 KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const char *name ); 120 KODayMatrix( QWidget *parent, const char *name );
121 //KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const char *name );
121 122
122 /** destructor that deallocates all dynamically allocated private members. 123 /** destructor that deallocates all dynamically allocated private members.
123 */ 124 */
124 ~KODayMatrix(); 125 ~KODayMatrix();
125 126
126 /** updates the day matrix to start with the given date. Does all the necessary 127 /** updates the day matrix to start with the given date. Does all the necessary
127 * checks for holidays or events on a day and stores them for display later on. 128 * checks for holidays or events on a day and stores them for display later on.
128 * Does NOT update the view visually. Call repaint() for this. 129 * Does NOT update the view visually. Call repaint() for this.
129 * 130 *
130 * @param actdate recalculates the day matrix to show NUMDAYS starting from this 131 * @param actdate recalculates the day matrix to show NUMDAYS starting from this
131 * date. 132 * date.
132 */ 133 */
133 void updateView(QDate actdate); 134 void updateView(QDate actdate);
135 void updateEvents();
134 136
135 /** returns the QDate object associated with day indexed by the 137 /** returns the QDate object associated with day indexed by the
136 * supplied offset. 138 * supplied offset.
137 */ 139 */
138 const QDate& getDate(int offset); 140 const QDate& getDate(int offset);
139 141 void setCalendar( Calendar * );
140 /** returns the official name of this holy day or 0 if there is no label 142 /** returns the official name of this holy day or 0 if there is no label
141 * for this day. 143 * for this day.
142 */ 144 */
143 QString getHolidayLabel(int offset); 145 QString getHolidayLabel(int offset);
144 146
145 /** adds all actual selected days from mSelStart to mSelEnd to the supplied 147 /** adds all actual selected days from mSelStart to mSelEnd to the supplied
146 * DateList. 148 * DateList.
147 */ 149 */
148 void addSelectedDaysTo(DateList&); 150 void addSelectedDaysTo(DateList&);
149 151
150 /** sets the actual to be displayed selection in the day matrix starting from 152 /** sets the actual to be displayed selection in the day matrix starting from
151 * start and ending with end. Theview must be manually updated by calling 153 * start and ending with end. Theview must be manually updated by calling
152 * repaint. (?) 154 * repaint. (?)
153 */ 155 */
154 void setSelectedDaysFrom(const QDate& start, const QDate& end); 156 void setSelectedDaysFrom(const QDate& start, const QDate& end);
155 157 void clearSelection();
156 158
157 /** Is today visible in the view? Keep this in sync with 159 /** Is today visible in the view? Keep this in sync with
158 * the values today (below) can take. 160 * the values today (below) can take.
159 */ 161 */
160 bool isTodayVisible() const { return today>=0; } ; 162 bool isTodayVisible() const { return today>=0; } ;
161 163
162 /** If today is visible, then we can find out if today is 164 /** If today is visible, then we can find out if today is
163 * near the beginning or the end of the month. 165 * near the beginning or the end of the month.
164 * This is dependent on today remaining the index 166 * This is dependent on today remaining the index
165 * in the array of visible dates and going from 167 * in the array of visible dates and going from
166 * top left (0) to bottom right (41). 168 * top left (0) to bottom right (41).
167 */ 169 */
168 bool isBeginningOfMonth() const { return today<=8; } ; 170 bool isBeginningOfMonth() const { return today<=8; } ;
169 bool isEndOfMonth() const { return today>=27; } ; 171 bool isEndOfMonth() const { return today>=27; } ;
170 172
171public slots: 173public slots:
172 /** Recalculates all the flags of the days in the matrix like holidays or events 174 /** Recalculates all the flags of the days in the matrix like holidays or events
173 * on a day (Actually calls above method with the actual startdate). 175 * on a day (Actually calls above method with the actual startdate).
174 */ 176 */
175 void updateView(); 177 void updateView();
176 void updateViewTimed(); 178 void updateViewTimed();
177 void repaintViewTimed(); 179 void repaintViewTimed();
178 180
179 /** 181 /**
180 * Calculate which square in the matrix should be 182 * Calculate which square in the matrix should be
181 * hilighted to indicate it's today. 183 * hilighted to indicate it's today.
182 */ 184 */
183 void recalculateToday(); 185 void recalculateToday();
184 186
185/* 187/*
186 void setStartDate(QDate); 188 void setStartDate(QDate);
187*/ 189*/
188 190
189signals: 191signals:
190 192
191 /** emitted if the user selects a block of days with the mouse by dragging a rectangle 193 /** emitted if the user selects a block of days with the mouse by dragging a rectangle
192 * inside the matrix 194 * inside the matrix
193 * 195 *
194 * @param daylist list of days that have been selected by the user 196 * @param daylist list of days that have been selected by the user
195 */ 197 */
196 void selected( const KCal::DateList &daylist ); 198 void selected( const KCal::DateList &daylist );
197 199
198 /** emitted if the user has dropped an event inside the matrix 200 /** emitted if the user has dropped an event inside the matrix
199 * 201 *
200 * @param event the dropped calendar event 202 * @param event the dropped calendar event
201 */ 203 */
202 void eventDropped(Event *event); 204 void eventDropped(Event *event);
203 205
204protected: 206protected:
205 207
206 void paintEvent(QPaintEvent *ev); 208 void paintEvent(QPaintEvent *ev);
207 209
208 void mousePressEvent (QMouseEvent* e); 210 void mousePressEvent (QMouseEvent* e);
209 211
210 void mouseReleaseEvent (QMouseEvent* e); 212 void mouseReleaseEvent (QMouseEvent* e);
211 213
212 void mouseMoveEvent (QMouseEvent* e); 214 void mouseMoveEvent (QMouseEvent* e);
213 215
214 void dragEnterEvent(QDragEnterEvent *); 216 void dragEnterEvent(QDragEnterEvent *);
215 217
216 void dragMoveEvent(QDragMoveEvent *); 218 void dragMoveEvent(QDragMoveEvent *);
217 219
218 void dragLeaveEvent(QDragLeaveEvent *); 220 void dragLeaveEvent(QDragLeaveEvent *);
219 221
220 void dropEvent(QDropEvent *); 222 void dropEvent(QDropEvent *);
221 223
222 void resizeEvent(QResizeEvent *); 224 void resizeEvent(QResizeEvent *);
223 225
224private: 226private:
225 QPixmap myPix; 227 QPixmap myPix;
226 QTimer* mUpdateTimer; 228 QTimer* mUpdateTimer;
227 QTimer* mRepaintTimer; 229 QTimer* mRepaintTimer;
228 bool mDayChanged; 230 bool mDayChanged;
229 bool mPendingUpdateBeforeRepaint; 231 bool mPendingUpdateBeforeRepaint;
230 232
231 /** returns the index of the day located at the matrix's widget (x,y) position. 233 /** returns the index of the day located at the matrix's widget (x,y) position.
232 * 234 *
233 * @param x horizontal coordinate 235 * @param x horizontal coordinate
234 * @param y vertical coordinate 236 * @param y vertical coordinate
235 */ 237 */
236 int getDayIndexFrom(int x, int y); 238 int getDayIndexFrom(int x, int y);
237 239
238 /** calculates a "shaded" color from the supplied color object. 240 /** calculates a "shaded" color from the supplied color object.
239 * (Copied from Cornelius's kdpdatebutton.cpp) 241 * (Copied from Cornelius's kdpdatebutton.cpp)
240 * 242 *
241 * @param color source based on which a shaded color should be calculated. 243 * @param color source based on which a shaded color should be calculated.
242 */ 244 */
243 QColor getShadedColor(QColor color); 245 QColor getShadedColor(QColor color);
244 246
245 /** number of days to be displayed. For now there is no support for any other number then 42. 247 /** number of days to be displayed. For now there is no support for any other number then 42.
246 so change it at your own risk :o) */ 248 so change it at your own risk :o) */
247 static const int NUMDAYS; 249 static const int NUMDAYS;
248 250
249 /** calendar instance to be queried for holidays, events, ... */ 251 /** calendar instance to be queried for holidays, events, ... */
250 Calendar *mCalendar; 252 Calendar *mCalendar;
251 253
diff --git a/korganizer/korganizerE.pro b/korganizer/korganizerE.pro
index e6c3f8d..91b5a01 100644
--- a/korganizer/korganizerE.pro
+++ b/korganizer/korganizerE.pro
@@ -1,152 +1,152 @@
1 TEMPLATE= app 1 TEMPLATE= app
2 CONFIG += qt warn_on 2 CONFIG += qt warn_on
3 TARGET = kopi 3 TARGET = kopi
4OBJECTS_DIR = obj/$(PLATFORM) 4OBJECTS_DIR = obj/$(PLATFORM)
5MOC_DIR = moc/$(PLATFORM) 5MOC_DIR = moc/$(PLATFORM)
6DESTDIR=$(QPEDIR)/bin 6DESTDIR=$(QPEDIR)/bin
7 7
8INCLUDEPATH += $(KDEPIMDIR) $(KDEPIMDIR)/microkde $(KDEPIMDIR)/microkde/kdecore $(KDEPIMDIR)/microkde/kio/kfile $(KDEPIMDIR)/microkde/kio/kio $(KDEPIMDIR)/microkde/kdeui $(KDEPIMDIR)/qtcompat $(KDEPIMDIR)/libkdepim interfaces $(KDEPIMDIR)/kabc $(QPEDIR)/include 8INCLUDEPATH += $(KDEPIMDIR) $(KDEPIMDIR)/microkde $(KDEPIMDIR)/microkde/kdecore $(KDEPIMDIR)/microkde/kio/kfile $(KDEPIMDIR)/microkde/kio/kio $(KDEPIMDIR)/microkde/kdeui $(KDEPIMDIR)/qtcompat $(KDEPIMDIR)/libkdepim interfaces $(KDEPIMDIR)/kabc $(QPEDIR)/include
9 9
10DEFINES += KORG_NODND KORG_NOPLUGINS KORG_NOARCHIVE KORG_NOMAIL 10DEFINES += KORG_NODND KORG_NOPLUGINS KORG_NOARCHIVE KORG_NOMAIL
11DEFINES += KORG_NOPRINTER KORG_NODCOP KORG_NOKALARMD KORG_NORESOURCEVIEW KORG_NOSPLITTER 11DEFINES += KORG_NOPRINTER KORG_NODCOP KORG_NOKALARMD KORG_NORESOURCEVIEW KORG_NOSPLITTER
12DEFINES += KORG_NOLVALTERNATION 12DEFINES += KORG_NOLVALTERNATION
13#KORG_NOKABC 13#KORG_NOKABC
14LIBS += -lmicrokdepim 14LIBS += -lmicrokdepim
15LIBS += -lmicrokcal 15LIBS += -lmicrokcal
16LIBS += -lmicrokde 16LIBS += -lmicrokde
17LIBS += -lmicroqtcompat 17LIBS += -lmicroqtcompat
18 18
19LIBS += $(GCC3EXTRALIB1) 19LIBS += $(GCC3EXTRALIB1)
20LIBS += $(GCC3EXTRALIB2) 20LIBS += $(GCC3EXTRALIB2)
21 21
22 22
23LIBS += -lqpe 23LIBS += -lqpe
24LIBS += -ljpeg 24LIBS += -ljpeg
25LIBS += $(QTOPIALIB) 25LIBS += $(QTOPIALIB)
26LIBS += -L$(QPEDIR)/lib 26LIBS += -L$(QPEDIR)/lib
27 27
28INTERFACES = kofilterview_base.ui 28INTERFACES = kofilterview_base.ui
29#filteredit_base.ui 29#filteredit_base.ui
30 30
31HEADERS = \ 31HEADERS = datenavigatorcontainer.h \
32 wordsgerman.h \ 32 wordsgerman.h \
33 filteredit_base.h \ 33 filteredit_base.h \
34 alarmclient.h \ 34 alarmclient.h \
35 calendarview.h \ 35 calendarview.h \
36 customlistviewitem.h \ 36 customlistviewitem.h \
37 datenavigator.h \ 37 datenavigator.h \
38 docprefs.h \ 38 docprefs.h \
39 filtereditdialog.h \ 39 filtereditdialog.h \
40 incomingdialog.h \ 40 incomingdialog.h \
41 incomingdialog_base.h \ 41 incomingdialog_base.h \
42 interfaces/korganizer/baseview.h \ 42 interfaces/korganizer/baseview.h \
43 interfaces/korganizer/calendarviewbase.h \ 43 interfaces/korganizer/calendarviewbase.h \
44 journalentry.h \ 44 journalentry.h \
45 kdateedit.h \ 45 kdateedit.h \
46 kdatenavigator.h \ 46 kdatenavigator.h \
47 koagenda.h \ 47 koagenda.h \
48 koagendaitem.h \ 48 koagendaitem.h \
49 koagendaview.h \ 49 koagendaview.h \
50 kocounterdialog.h \ 50 kocounterdialog.h \
51 kodaymatrix.h \ 51 kodaymatrix.h \
52 kodialogmanager.h \ 52 kodialogmanager.h \
53 koeditordetails.h \ 53 koeditordetails.h \
54 koeditorgeneral.h \ 54 koeditorgeneral.h \
55 koeditorgeneralevent.h \ 55 koeditorgeneralevent.h \
56 koeditorgeneraltodo.h \ 56 koeditorgeneraltodo.h \
57 koeditorrecurrence.h \ 57 koeditorrecurrence.h \
58 koeventeditor.h \ 58 koeventeditor.h \
59 koeventpopupmenu.h \ 59 koeventpopupmenu.h \
60 koeventview.h \ 60 koeventview.h \
61 koeventviewer.h \ 61 koeventviewer.h \
62 koeventviewerdialog.h \ 62 koeventviewerdialog.h \
63 kofilterview.h \ 63 kofilterview.h \
64 koglobals.h \ 64 koglobals.h \
65 koincidenceeditor.h \ 65 koincidenceeditor.h \
66 kojournalview.h \ 66 kojournalview.h \
67 kolistview.h \ 67 kolistview.h \
68 kolocationbox.h \ 68 kolocationbox.h \
69 komonthview.h \ 69 komonthview.h \
70 koprefs.h \ 70 koprefs.h \
71 koprefsdialog.h \ 71 koprefsdialog.h \
72 kotimespanview.h \ 72 kotimespanview.h \
73 kotodoeditor.h \ 73 kotodoeditor.h \
74 kotodoview.h \ 74 kotodoview.h \
75 kotodoviewitem.h \ 75 kotodoviewitem.h \
76 koviewmanager.h \ 76 koviewmanager.h \
77 kowhatsnextview.h \ 77 kowhatsnextview.h \
78 ktimeedit.h \ 78 ktimeedit.h \
79 lineview.h \ 79 lineview.h \
80 mainwindow.h \ 80 mainwindow.h \
81 navigatorbar.h \ 81 navigatorbar.h \
82 outgoingdialog.h \ 82 outgoingdialog.h \
83 outgoingdialog_base.h \ 83 outgoingdialog_base.h \
84 publishdialog.h \ 84 publishdialog.h \
85 publishdialog_base.h \ 85 publishdialog_base.h \
86 savetemplatedialog.h \ 86 savetemplatedialog.h \
87 searchdialog.h \ 87 searchdialog.h \
88 simplealarmclient.h \ 88 simplealarmclient.h \
89 statusdialog.h \ 89 statusdialog.h \
90 timeline.h \ 90 timeline.h \
91 timespanview.h \ 91 timespanview.h \
92 version.h \ 92 version.h \
93 ../kalarmd/alarmdialog.h 93 ../kalarmd/alarmdialog.h
94 94
95SOURCES = \ 95SOURCES = datenavigatorcontainer.cpp \
96 filteredit_base.cpp \ 96 filteredit_base.cpp \
97 calendarview.cpp \ 97 calendarview.cpp \
98 datenavigator.cpp \ 98 datenavigator.cpp \
99 docprefs.cpp \ 99 docprefs.cpp \
100 filtereditdialog.cpp \ 100 filtereditdialog.cpp \
101 incomingdialog.cpp \ 101 incomingdialog.cpp \
102 incomingdialog_base.cpp \ 102 incomingdialog_base.cpp \
103 journalentry.cpp \ 103 journalentry.cpp \
104 kdatenavigator.cpp \ 104 kdatenavigator.cpp \
105 koagenda.cpp \ 105 koagenda.cpp \
106 koagendaitem.cpp \ 106 koagendaitem.cpp \
107 koagendaview.cpp \ 107 koagendaview.cpp \
108 kocounterdialog.cpp \ 108 kocounterdialog.cpp \
109 kodaymatrix.cpp \ 109 kodaymatrix.cpp \
110 kodialogmanager.cpp \ 110 kodialogmanager.cpp \
111 koeditordetails.cpp \ 111 koeditordetails.cpp \
112 koeditorgeneral.cpp \ 112 koeditorgeneral.cpp \
113 koeditorgeneralevent.cpp \ 113 koeditorgeneralevent.cpp \
114 koeditorgeneraltodo.cpp \ 114 koeditorgeneraltodo.cpp \
115 koeditorrecurrence.cpp \ 115 koeditorrecurrence.cpp \
116 koeventeditor.cpp \ 116 koeventeditor.cpp \
117 koeventpopupmenu.cpp \ 117 koeventpopupmenu.cpp \
118 koeventview.cpp \ 118 koeventview.cpp \
119 koeventviewer.cpp \ 119 koeventviewer.cpp \
120 koeventviewerdialog.cpp \ 120 koeventviewerdialog.cpp \
121 kofilterview.cpp \ 121 kofilterview.cpp \
122 koglobals.cpp \ 122 koglobals.cpp \
123 koincidenceeditor.cpp \ 123 koincidenceeditor.cpp \
124 kojournalview.cpp \ 124 kojournalview.cpp \
125 kolistview.cpp \ 125 kolistview.cpp \
126 kolocationbox.cpp \ 126 kolocationbox.cpp \
127 komonthview.cpp \ 127 komonthview.cpp \
128 koprefs.cpp \ 128 koprefs.cpp \
129 koprefsdialog.cpp \ 129 koprefsdialog.cpp \
130 kotimespanview.cpp \ 130 kotimespanview.cpp \
131 kotodoeditor.cpp \ 131 kotodoeditor.cpp \
132 kotodoview.cpp \ 132 kotodoview.cpp \
133 kotodoviewitem.cpp \ 133 kotodoviewitem.cpp \
134 koviewmanager.cpp \ 134 koviewmanager.cpp \
135 kowhatsnextview.cpp \ 135 kowhatsnextview.cpp \
136 ktimeedit.cpp \ 136 ktimeedit.cpp \
137 lineview.cpp \ 137 lineview.cpp \
138 main.cpp \ 138 main.cpp \
139 mainwindow.cpp \ 139 mainwindow.cpp \
140 navigatorbar.cpp \ 140 navigatorbar.cpp \
141 outgoingdialog.cpp \ 141 outgoingdialog.cpp \
142 outgoingdialog_base.cpp \ 142 outgoingdialog_base.cpp \
143 publishdialog.cpp \ 143 publishdialog.cpp \
144 publishdialog_base.cpp \ 144 publishdialog_base.cpp \
145 savetemplatedialog.cpp \ 145 savetemplatedialog.cpp \
146 searchdialog.cpp \ 146 searchdialog.cpp \
147 simplealarmclient.cpp \ 147 simplealarmclient.cpp \
148 statusdialog.cpp \ 148 statusdialog.cpp \
149 timeline.cpp \ 149 timeline.cpp \
150 timespanview.cpp \ 150 timespanview.cpp \
151 ../kalarmd/alarmdialog.cpp 151 ../kalarmd/alarmdialog.cpp
152 152
diff --git a/korganizer/navigatorbar.cpp b/korganizer/navigatorbar.cpp
index 934e153..27d4d17 100644
--- a/korganizer/navigatorbar.cpp
+++ b/korganizer/navigatorbar.cpp
@@ -91,132 +91,154 @@ NavigatorBar::NavigatorBar( const QDate & date, QWidget *parent, const char *nam
91 91
92 mPrevWeek = new QPushButton( mCtrlFrame ); 92 mPrevWeek = new QPushButton( mCtrlFrame );
93 mPrevWeek->setPixmap( SmallIcon( isDesktop ? "1leftarrowB" : "1leftarrow") ); 93 mPrevWeek->setPixmap( SmallIcon( isDesktop ? "1leftarrowB" : "1leftarrow") );
94 QToolTip::add( mPrevWeek, i18n("Previous Week") ); 94 QToolTip::add( mPrevWeek, i18n("Previous Week") );
95 95
96 // Create forward navigation buttons 96 // Create forward navigation buttons
97 mNextWeek = new QPushButton( mCtrlFrame ); 97 mNextWeek = new QPushButton( mCtrlFrame );
98 mNextWeek->setPixmap( SmallIcon( isDesktop ? "1rightarrowB" : "1rightarrow") ); 98 mNextWeek->setPixmap( SmallIcon( isDesktop ? "1rightarrowB" : "1rightarrow") );
99 QToolTip::add( mNextWeek, i18n("Next Week") ); 99 QToolTip::add( mNextWeek, i18n("Next Week") );
100 100
101 mNextYear = new QPushButton( mCtrlFrame ); 101 mNextYear = new QPushButton( mCtrlFrame );
102 mNextYear->setPixmap( SmallIcon( isDesktop ? "2rightarrowB": "2rightarrow") ); 102 mNextYear->setPixmap( SmallIcon( isDesktop ? "2rightarrowB": "2rightarrow") );
103 QToolTip::add( mNextYear, i18n("Next Year") ); 103 QToolTip::add( mNextYear, i18n("Next Year") );
104 mSelectMonth = new QPushButton( mCtrlFrame ); 104 mSelectMonth = new QPushButton( mCtrlFrame );
105 // Create month name label 105 // Create month name label
106 //selectMonth->setFont( tfont ); 106 //selectMonth->setFont( tfont );
107 // selectMonth->setAlignment( AlignCenter ); 107 // selectMonth->setAlignment( AlignCenter );
108 //mDateLabel = new QLabel( selectMonth ); 108 //mDateLabel = new QLabel( selectMonth );
109 //mDateLabel->setFont( tfont ); 109 //mDateLabel->setFont( tfont );
110 //mDateLabel->setAlignment( AlignCenter ); 110 //mDateLabel->setAlignment( AlignCenter );
111 if ( QString ( name ) == QString("useBigPixmaps") ) { 111 if ( QString ( name ) == QString("useBigPixmaps") ) {
112 mNextMonth->setFlat( true); 112 mNextMonth->setFlat( true);
113 mNextWeek->setFlat( true); 113 mNextWeek->setFlat( true);
114 mNextYear->setFlat( true); 114 mNextYear->setFlat( true);
115 mSelectMonth->setFlat( true); 115 mSelectMonth->setFlat( true);
116 mPrevYear->setFlat( true); 116 mPrevYear->setFlat( true);
117 mPrevMonth->setFlat( true); 117 mPrevMonth->setFlat( true);
118 mPrevWeek->setFlat( true); 118 mPrevWeek->setFlat( true);
119 } else { 119 } else {
120 mPrevWeek->hide(); 120 mPrevWeek->hide();
121 mNextWeek->hide(); 121 mNextWeek->hide();
122 } 122 }
123 mSelectMonth->setFont( tfont ); 123 mSelectMonth->setFont( tfont );
124 // Set minimum width to width of widest month name label 124 // Set minimum width to width of widest month name label
125 int i; 125 int i;
126 int maxwidth = 0; 126 int maxwidth = 0;
127 QFontMetrics fm ( mSelectMonth->font() ); 127 QFontMetrics fm ( mSelectMonth->font() );
128 int width = fm.width("September '00" ); 128 int width = fm.width("September '00" );
129// for( i = 1; i <= KOGlobals::self()->calendarSystem()->monthsInYear(date); 129// for( i = 1; i <= KOGlobals::self()->calendarSystem()->monthsInYear(date);
130// ++i ) { 130// ++i ) {
131// //int width = fm.width( KOGlobals::self()->calendarSystem()->monthName(i, 131// //int width = fm.width( KOGlobals::self()->calendarSystem()->monthName(i,
132// // KOGlobals::self()->calendarSystem()->year(date) ) + " 2000" ); 132// // KOGlobals::self()->calendarSystem()->year(date) ) + " 2000" );
133// int width = fm.width("September 2000" ); 133// int width = fm.width("September 2000" );
134// if ( width > maxwidth ) maxwidth = width; 134// if ( width > maxwidth ) maxwidth = width;
135// } 135// }
136 maxwidth = width+2; 136 maxwidth = width+2;
137 int size = fm.height()+2; 137 int size = fm.height()+2;
138 if ( QApplication::desktop()->width() >= 480 ) { 138 if ( QApplication::desktop()->width() >= 480 ) {
139 size += 6; 139 size += 6;
140 maxwidth+= 6; 140 maxwidth+= 6;
141 } 141 }
142 142
143 mSelectMonth->setFixedWidth( maxwidth ); 143 mSelectMonth->setFixedWidth( maxwidth );
144 mSelectMonth->setFixedHeight( size ); 144 mSelectMonth->setFixedHeight( size );
145 mPrevYear->setFixedHeight( size ); 145 mPrevYear->setFixedHeight( size );
146 mPrevMonth->setFixedHeight( size ); 146 mPrevMonth->setFixedHeight( size );
147 mPrevWeek->setFixedHeight( size ); 147 mPrevWeek->setFixedHeight( size );
148 mNextMonth->setFixedHeight( size ); 148 mNextMonth->setFixedHeight( size );
149 mNextWeek->setFixedHeight( size ); 149 mNextWeek->setFixedHeight( size );
150 mNextYear->setFixedHeight ( size ); 150 mNextYear->setFixedHeight ( size );
151 // set up control frame layout 151 // set up control frame layout
152 QBoxLayout *ctrlLayout = new QHBoxLayout( mCtrlFrame, 1 ); 152 QBoxLayout *ctrlLayout = new QHBoxLayout( mCtrlFrame, 1 );
153 ctrlLayout->addWidget( mPrevYear, 3 ); 153 ctrlLayout->addWidget( mPrevYear, 3 );
154 ctrlLayout->addWidget( mPrevMonth, 3 ); 154 ctrlLayout->addWidget( mPrevMonth, 3 );
155 ctrlLayout->addWidget( mPrevWeek, 3 ); 155 ctrlLayout->addWidget( mPrevWeek, 3 );
156 //ctrlLayout->addStretch( 1 ); 156 //ctrlLayout->addStretch( 1 );
157 // ctrlLayout->addSpacing( 1 ); 157 // ctrlLayout->addSpacing( 1 );
158 // ctrlLayout->addWidget( mDateLabel ); 158 // ctrlLayout->addWidget( mDateLabel );
159 ctrlLayout->addWidget( mSelectMonth ); 159 ctrlLayout->addWidget( mSelectMonth );
160 // ctrlLayout->addSpacing( 1 ); 160 // ctrlLayout->addSpacing( 1 );
161 // ctrlLayout->addStretch( 1 ); 161 // ctrlLayout->addStretch( 1 );
162 ctrlLayout->addWidget( mNextWeek, 3 ); 162 ctrlLayout->addWidget( mNextWeek, 3 );
163 ctrlLayout->addWidget( mNextMonth, 3 ); 163 ctrlLayout->addWidget( mNextMonth, 3 );
164 ctrlLayout->addWidget( mNextYear, 3 ); 164 ctrlLayout->addWidget( mNextYear, 3 );
165 165
166 connect( mPrevYear, SIGNAL( clicked() ), SIGNAL( goPrevYear() ) ); 166 connect( mPrevYear, SIGNAL( clicked() ), SIGNAL( goPrevYear() ) );
167 connect( mPrevMonth, SIGNAL( clicked() ), SIGNAL( goPrevMonth() ) ); 167 connect( mPrevMonth, SIGNAL( clicked() ), SIGNAL( goPrevMonth() ) );
168 connect( mNextMonth, SIGNAL( clicked() ), SIGNAL( goNextMonth() ) ); 168 connect( mNextMonth, SIGNAL( clicked() ), SIGNAL( goNextMonth() ) );
169 connect( mPrevWeek, SIGNAL( clicked() ), SIGNAL( goPrevWeek() ) ); 169 connect( mPrevWeek, SIGNAL( clicked() ), SIGNAL( goPrevWeek() ) );
170 connect( mNextWeek, SIGNAL( clicked() ), SIGNAL( goNextWeek() ) ); 170 connect( mNextWeek, SIGNAL( clicked() ), SIGNAL( goNextWeek() ) );
171 connect( mNextYear, SIGNAL( clicked() ), SIGNAL( goNextYear() ) ); 171 connect( mNextYear, SIGNAL( clicked() ), SIGNAL( goNextYear() ) );
172 connect( mSelectMonth, SIGNAL( clicked() ),SLOT( selectMonth() ) ); 172 connect( mSelectMonth, SIGNAL( clicked() ),SLOT( selectMonth() ) );
173 mPrevYear->setFocusPolicy(NoFocus); 173 mPrevYear->setFocusPolicy(NoFocus);
174 mPrevMonth->setFocusPolicy(NoFocus); 174 mPrevMonth->setFocusPolicy(NoFocus);
175 mNextMonth->setFocusPolicy(NoFocus); 175 mNextMonth->setFocusPolicy(NoFocus);
176 mPrevWeek->setFocusPolicy(NoFocus); 176 mPrevWeek->setFocusPolicy(NoFocus);
177 mNextWeek->setFocusPolicy(NoFocus); 177 mNextWeek->setFocusPolicy(NoFocus);
178 mNextYear->setFocusPolicy(NoFocus); 178 mNextYear->setFocusPolicy(NoFocus);
179 mSelectMonth->setFocusPolicy(NoFocus); 179 mSelectMonth->setFocusPolicy(NoFocus);
180 setSizePolicy( QSizePolicy ( QSizePolicy::Expanding ,QSizePolicy::Fixed ) ); 180 setSizePolicy( QSizePolicy ( QSizePolicy::Expanding ,QSizePolicy::Fixed ) );
181 181
182} 182}
183 183
184NavigatorBar::~NavigatorBar() 184NavigatorBar::~NavigatorBar()
185{ 185{
186} 186}
187void NavigatorBar::showButtons( bool left, bool right )
188{
189 if ( left ) {
190 mPrevYear->show();
191 mPrevMonth->show();
192 } else {
193 mPrevYear->hide();
194 mPrevMonth->hide();
195 }
196
197 if ( right ) {
198 mNextYear->show();
199 mNextMonth->show();
200 } else {
201 mNextYear->hide();
202 mNextMonth->hide();
203 }
204 if ( !left && !right ) {
205 mSelectMonth->setMaximumWidth( 1024 );
206 mSelectMonth->setSizePolicy( QSizePolicy ( QSizePolicy::Expanding ,QSizePolicy::Fixed ) );
207 }
208}
187 209
188void NavigatorBar::selectMonth() 210void NavigatorBar::selectMonth()
189{ 211{
190 212
191 int month; 213 int month;
192 KPopupFrame* popup = new KPopupFrame(this); 214 KPopupFrame* popup = new KPopupFrame(this);
193 KDateInternalMonthPicker* picker = new KDateInternalMonthPicker(popup); 215 KDateInternalMonthPicker* picker = new KDateInternalMonthPicker(popup);
194 // ----- 216 // -----
195 picker->resize(picker->sizeHint()); 217 picker->resize(picker->sizeHint());
196 popup->setMainWidget(picker); 218 popup->setMainWidget(picker);
197 picker->setFocus(); 219 picker->setFocus();
198 connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int))); 220 connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int)));
199 if(popup->exec(mSelectMonth->mapToGlobal(QPoint(0, mSelectMonth->height())))) 221 if(popup->exec(mSelectMonth->mapToGlobal(QPoint(0, mSelectMonth->height()))))
200 { 222 {
201 month = picker->getResult(); 223 month = picker->getResult();
202 emit monthSelected ( month ); 224 emit monthSelected ( month );
203 } else { 225 } else {
204 KNotifyClient::beep(); 226 KNotifyClient::beep();
205 } 227 }
206 delete popup; 228 delete popup;
207} 229}
208void NavigatorBar::selectDates( const KCal::DateList &dateList ) 230void NavigatorBar::selectDates( const KCal::DateList &dateList )
209{ 231{
210 if (dateList.count() > 0) { 232 if (dateList.count() > 0) {
211 QDate date = dateList.first(); 233 QDate date = dateList.first();
212 234
213 const KCalendarSystem *calSys = KOGlobals::self()->calendarSystem(); 235 const KCalendarSystem *calSys = KOGlobals::self()->calendarSystem();
214 236
215 // compute the label at the top of the navigator 237 // compute the label at the top of the navigator
216 QString dtstr = i18n(calSys->monthName( date )) + " '" + 238 QString dtstr = i18n(calSys->monthName( date )) + " '" +
217 QString::number( calSys->year( date ) ).right(2); 239 QString::number( calSys->year( date ) ).right(2);
218 240
219 mSelectMonth->setText( dtstr ); 241 mSelectMonth->setText( dtstr );
220 } 242 }
221} 243}
222 244
diff --git a/korganizer/navigatorbar.h b/korganizer/navigatorbar.h
index 803c817..4442caa 100644
--- a/korganizer/navigatorbar.h
+++ b/korganizer/navigatorbar.h
@@ -1,69 +1,70 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 3
4 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24#ifndef NAVIGATORBAR_H 24#ifndef NAVIGATORBAR_H
25#define NAVIGATORBAR_H 25#define NAVIGATORBAR_H
26 26
27#include <libkcal/incidencebase.h> 27#include <libkcal/incidencebase.h>
28 28
29#include <qwidget.h> 29#include <qwidget.h>
30 30
31class QPushButton; 31class QPushButton;
32class QFrame; 32class QFrame;
33class QLabel; 33class QLabel;
34 34
35class NavigatorBar: public QWidget 35class NavigatorBar: public QWidget
36{ 36{
37 Q_OBJECT 37 Q_OBJECT
38 public: 38 public:
39 NavigatorBar( const QDate & date, QWidget *parent = 0, const char *name = 0 ); 39 NavigatorBar( const QDate & date, QWidget *parent = 0, const char *name = 0 );
40 ~NavigatorBar(); 40 ~NavigatorBar();
41 void showButtons( bool left, bool right );
41 42
42 public slots: 43 public slots:
43 void selectDates( const KCal::DateList & ); 44 void selectDates( const KCal::DateList & );
44 void selectMonth(); 45 void selectMonth();
45 46
46 signals: 47 signals:
47 void goNextMonth(); 48 void goNextMonth();
48 void goPrevMonth(); 49 void goPrevMonth();
49 void goNextWeek(); 50 void goNextWeek();
50 void goPrevWeek(); 51 void goPrevWeek();
51 void goNextYear(); 52 void goNextYear();
52 void goPrevYear(); 53 void goPrevYear();
53 void monthSelected( int ); 54 void monthSelected( int );
54 55
55 private: 56 private:
56 QFrame *mCtrlFrame; 57 QFrame *mCtrlFrame;
57 58
58 QPushButton *mPrevYear; 59 QPushButton *mPrevYear;
59 QPushButton *mPrevMonth; 60 QPushButton *mPrevMonth;
60 QPushButton *mNextMonth; 61 QPushButton *mNextMonth;
61 QPushButton *mPrevWeek; 62 QPushButton *mPrevWeek;
62 QPushButton *mNextWeek; 63 QPushButton *mNextWeek;
63 QPushButton *mNextYear; 64 QPushButton *mNextYear;
64 QPushButton *mSelectMonth; 65 QPushButton *mSelectMonth;
65 66
66 //QLabel *mDateLabel; 67 //QLabel *mDateLabel;
67}; 68};
68 69
69#endif 70#endif