summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/datenavigatorcontainer.cpp83
-rw-r--r--korganizer/datenavigatorcontainer.h2
-rw-r--r--korganizer/kdatenavigator.h3
-rw-r--r--korganizer/kodaymatrix.cpp16
-rw-r--r--korganizer/kodaymatrix.h2
5 files changed, 82 insertions, 24 deletions
diff --git a/korganizer/datenavigatorcontainer.cpp b/korganizer/datenavigatorcontainer.cpp
index 18756f0..bb27bce 100644
--- a/korganizer/datenavigatorcontainer.cpp
+++ b/korganizer/datenavigatorcontainer.cpp
@@ -17,260 +17,303 @@
17 You should have received a copy of the GNU General Public License 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 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. 19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 20
21 As a special exception, permission is given to link this program 21 As a special exception, permission is given to link this program
22 with any edition of Qt, and distribute the resulting executable, 22 with any edition of Qt, and distribute the resulting executable,
23 without including the source code for Qt in the source distribution. 23 without including the source code for Qt in the source distribution.
24*/ 24*/
25 25
26#include <kdebug.h> 26#include <kdebug.h>
27#include <klocale.h> 27#include <klocale.h>
28 28
29//#include "koglobals.h" 29//#include "koglobals.h"
30#include "navigatorbar.h" 30#include "navigatorbar.h"
31#include "kdatenavigator.h" 31#include "kdatenavigator.h"
32 32
33#include <kcalendarsystem.h> 33#include <kcalendarsystem.h>
34 34
35#include "datenavigatorcontainer.h" 35#include "datenavigatorcontainer.h"
36#include "koprefs.h" 36#include "koprefs.h"
37 37
38DateNavigatorContainer::DateNavigatorContainer( QWidget *parent, 38DateNavigatorContainer::DateNavigatorContainer( QWidget *parent,
39 const char *name ) 39 const char *name )
40 : QWidget( parent, name ), mCalendar( 0 ), 40 : QWidget( parent, name ), mCalendar( 0 ),
41 mHorizontalCount( 1 ), mVerticalCount( 1 ) 41 mHorizontalCount( 1 ), mVerticalCount( 1 )
42{ 42{
43 mExtraViews.setAutoDelete( true ); 43 mExtraViews.setAutoDelete( true );
44 44
45 mNavigatorView = new KDateNavigator( this, name ); 45 mNavigatorView = new KDateNavigator( this, name );
46 46
47 connectNavigatorView( mNavigatorView ); 47 connectNavigatorView( mNavigatorView );
48 //setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) ); 48 //setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) );
49 mDisplayedEndDate = QDate::currentDate();
50 mLastDisplayedDN = 0;
49} 51}
50 52
51DateNavigatorContainer::~DateNavigatorContainer() 53DateNavigatorContainer::~DateNavigatorContainer()
52{ 54{
53} 55}
54 56
55void DateNavigatorContainer::connectNavigatorView( KDateNavigator *v ) 57void DateNavigatorContainer::connectNavigatorView( KDateNavigator *v )
56{ 58{
57 connect( v, SIGNAL( datesSelected( const KCal::DateList & ) ), 59 connect( v, SIGNAL( datesSelected( const KCal::DateList & ) ),
58 SIGNAL( datesSelected( const KCal::DateList & ) ) ); 60 SIGNAL( datesSelected( const KCal::DateList & ) ) );
59#if 0 61#if 0
60 connect( v, SIGNAL( incidenceDropped( Incidence *, const QDate & ) ), 62 connect( v, SIGNAL( incidenceDropped( Incidence *, const QDate & ) ),
61 SIGNAL( incidenceDropped( Incidence *, const QDate & ) ) ); 63 SIGNAL( incidenceDropped( Incidence *, const QDate & ) ) );
62 connect( v, SIGNAL( incidenceDroppedMove( Incidence *, const QDate & ) ), 64 connect( v, SIGNAL( incidenceDroppedMove( Incidence *, const QDate & ) ),
63 SIGNAL( incidenceDroppedMove( Incidence *, const QDate & ) ) ); 65 SIGNAL( incidenceDroppedMove( Incidence *, const QDate & ) ) );
64#endif 66#endif
65 connect( v, SIGNAL( weekClicked( const QDate & ) ), 67 connect( v, SIGNAL( weekClicked( const QDate & ) ),
66 SIGNAL( weekClicked( const QDate & ) ) ); 68 SIGNAL( weekClicked( const QDate & ) ) );
67 69
68 connect( v, SIGNAL( goPrevious() ), SIGNAL( goPrevious() ) ); 70 connect( v, SIGNAL( goPrevious() ), SIGNAL( goPrevious() ) );
69 connect( v, SIGNAL( goNext() ), SIGNAL( goNext() ) ); 71 connect( v, SIGNAL( goNext() ), SIGNAL( goNext() ) );
70 72
71 connect( v, SIGNAL( goNextMonth() ), SIGNAL( goNextMonth() ) ); 73 connect( v, SIGNAL( goNextMonth() ), SIGNAL( goNextMonth() ) );
72 connect( v, SIGNAL( goPrevMonth() ), SIGNAL( goPrevMonth() ) ); 74 connect( v, SIGNAL( goPrevMonth() ), SIGNAL( goPrevMonth() ) );
73 connect( v, SIGNAL( goNextYear() ), SIGNAL( goNextYear() ) ); 75 connect( v, SIGNAL( goNextYear() ), SIGNAL( goNextYear() ) );
74 connect( v, SIGNAL( goPrevYear() ), SIGNAL( goPrevYear() ) ); 76 connect( v, SIGNAL( goPrevYear() ), SIGNAL( goPrevYear() ) );
75 77
76 connect( v, SIGNAL( monthSelected( int ) ), SIGNAL( monthSelected( int ) ) ); 78 connect( v, SIGNAL( monthSelected( int ) ), SIGNAL( monthSelected( int ) ) );
77} 79}
78 80
79void DateNavigatorContainer::setCalendar( Calendar *cal ) 81void DateNavigatorContainer::setCalendar( Calendar *cal )
80{ 82{
81 mCalendar = cal; 83 mCalendar = cal;
82 mNavigatorView->setCalendar( cal ); 84 mNavigatorView->setCalendar( cal );
83 KDateNavigator *n; 85 for( uint i = 0; i < mLastDisplayedDN; ++i ) {
84 for( n = mExtraViews.first(); n; n = mExtraViews.next() ) { 86 KDateNavigator *n = mExtraViews.at( i );
85 n->setCalendar( cal ); 87 n->setCalendar( cal );
86 } 88 }
87} 89}
88 90
89void DateNavigatorContainer::updateDayMatrix() 91void DateNavigatorContainer::updateDayMatrix()
90{ 92{
91 mNavigatorView->updateDayMatrix(); 93 mNavigatorView->updateDayMatrix();
92 KDateNavigator *n; 94 for( uint i = 0; i < mLastDisplayedDN; ++i ) {
93 for( n = mExtraViews.first(); n; n = mExtraViews.next() ) { 95 KDateNavigator *n = mExtraViews.at( i );
94 n->updateDayMatrix(); 96 n->updateDayMatrix();
95 } 97 }
96} 98}
97 99
98void DateNavigatorContainer::updateToday() 100void DateNavigatorContainer::updateToday()
99{ 101{
100 qDebug("DateNavigatorContainer::updateToday() NOT IMPL "); 102 qDebug("DateNavigatorContainer::updateToday() NOT IMPL ");
101#if 0 103#if 0
102 mNavigatorView->updateToday(); 104 mNavigatorView->updateToday();
103 KDateNavigator *n; 105 KDateNavigator *n;
104 for( n = mExtraViews.first(); n; n = mExtraViews.next() ) { 106 for( n = mExtraViews.first(); n; n = mExtraViews.next() ) {
105 n->updateToday(); 107 n->updateToday();
106 } 108 }
107#endif 109#endif
108} 110}
109 111
110void DateNavigatorContainer::updateView() 112void DateNavigatorContainer::updateView()
111{ 113{
112 mNavigatorView->updateView(); 114 mNavigatorView->updateView();
113 KDateNavigator *n; 115 for( uint i = 0; i < mLastDisplayedDN; ++i ) {
114 for( n = mExtraViews.first(); n; n = mExtraViews.next() ) { 116 KDateNavigator *n = mExtraViews.at( i );
115 n->updateView(); 117 n->updateView();
116 } 118 }
117} 119}
118 120
119void DateNavigatorContainer::updateConfig() 121void DateNavigatorContainer::updateConfig()
120{ 122{
121 mNavigatorView->updateConfig(); 123 mNavigatorView->updateConfig();
122 KDateNavigator *n; 124 for( uint i = 0; i < mLastDisplayedDN; ++i ) {
123 for( n = mExtraViews.first(); n; n = mExtraViews.next() ) { 125 KDateNavigator *n = mExtraViews.at( i );
124 n->updateConfig(); 126 n->updateConfig();
125 } 127 }
126} 128}
127 129
128void DateNavigatorContainer::selectDates( const DateList &dateList ) 130void DateNavigatorContainer::selectDates( const DateList &dateList )
129{ 131{
130 mNavigatorView->selectDates( dateList ); 132 if ( !mLastDisplayedDN ) {
131 setBaseDates(); 133 mNavigatorView->selectDates( dateList );
132 if ( mExtraViews.count() ) { 134 return;
135 }
136 QDate fDate = dateList.first();
137 QDate lDate = dateList.last();
138 if ( mLastDisplayedDN <= 2 ) {
139 mNavigatorView->selectDates( dateList );
140 KDateNavigator *view = mExtraViews.at( 0 );
141 QDate bDate = fDate.addDays( fDate.daysInMonth () - fDate.day() +1 );
142 view->setBaseDate( bDate, false );
143 view->dayMatrix()->setSelectedDaysFrom(fDate , lDate);
144 if ( mLastDisplayedDN == 2 ) {
145 view = mExtraViews.at( 1 );
146 bDate = bDate.addDays( bDate.daysInMonth () - bDate.day() +1 );
147 view->setBaseDate( bDate, false );
148 view->dayMatrix()->setSelectedDaysFrom(fDate , lDate);
149 }
150 return;
151 }
152 KDateNavigator *view = mExtraViews.at( 0 );
153 QDate date = view->baseDate();
154
155 QDate curEnd = date.addDays( (mLastDisplayedDN)*30 +7);
156 //qDebug("End %s %s ",lDate.toString().latin1(),curEnd.toString().latin1() );
157 if ( lDate < curEnd && date.addDays( -30 ) < fDate) {
158 mNavigatorView->dayMatrix()->setSelectedDaysFrom( fDate , lDate );
159 mNavigatorView->dayMatrix()->repaint( false );
160 for( uint i = 0; i < mLastDisplayedDN; ++i ) {
161 KDateNavigator *n = mExtraViews.at( i );
162 if ( n->dayMatrix()->setSelectedDaysFrom( fDate , lDate ) ) {
163 n->dayMatrix()->repaint( false );
164 }
165 }
166 return;
167 }
168 mNavigatorView->selectDates( dateList );
169 setBaseDates();
170 if ( mLastDisplayedDN ) {
133 KDateNavigator *view = mExtraViews.at( 0 ); 171 KDateNavigator *view = mExtraViews.at( 0 );
134 view->dayMatrix()->setSelectedDaysFrom(*(dateList.begin()), *(--dateList.end())); 172 view->dayMatrix()->setSelectedDaysFrom(*(dateList.begin()), *(--dateList.end()));
135 view->dayMatrix()->repaint( false ); 173 view->dayMatrix()->repaint( false );
136 if ( mExtraViews.count() > 1 ) { 174 if ( mLastDisplayedDN > 1 ) {
137 KDateNavigator *view = mExtraViews.at( 1 ); 175 KDateNavigator *view = mExtraViews.at( 1 );
138 view->dayMatrix()->setSelectedDaysFrom(*(dateList.begin()), *(--dateList.end())); 176 view->dayMatrix()->setSelectedDaysFrom(*(dateList.begin()), *(--dateList.end()));
139 view->dayMatrix()->repaint( false ); 177 view->dayMatrix()->repaint( false );
140 } 178 }
141 } 179 }
142} 180}
143 181
144void DateNavigatorContainer::setBaseDates() 182void DateNavigatorContainer::setBaseDates()
145{ 183{
146 KCal::DateList dateList = mNavigatorView->selectedDates(); 184 KCal::DateList dateList = mNavigatorView->selectedDates();
147 if ( dateList.isEmpty() ) { 185 if ( dateList.isEmpty() ) {
148 kdError() << "DateNavigatorContainer::selectDates() empty list." << endl; 186 kdError() << "DateNavigatorContainer::selectDates() empty list." << endl;
149 } 187 }
150 QDate baseDate = dateList.first(); 188 QDate baseDate = dateList.first();
151 KDateNavigator *n;
152 bool doRepaint = false; // skip first repaint 189 bool doRepaint = false; // skip first repaint
153 for( n = mExtraViews.first(); n; n = mExtraViews.next() ) { 190 for( uint i = 0; i < mLastDisplayedDN; ++i ) {
191 KDateNavigator *n = mExtraViews.at( i );
154 baseDate = baseDate.addDays( baseDate.daysInMonth () - baseDate.day() +1 ); 192 baseDate = baseDate.addDays( baseDate.daysInMonth () - baseDate.day() +1 );
155 n->setBaseDate( baseDate, doRepaint ); 193 n->setBaseDate( baseDate, doRepaint );
156 doRepaint = true; 194 doRepaint = true;
157 } 195 }
158} 196}
159 197
160void DateNavigatorContainer::resizeEvent( QResizeEvent * e ) 198void DateNavigatorContainer::resizeEvent( QResizeEvent * e )
161{ 199{
162#if 0 200#if 0
163 kdDebug(5850) << "DateNavigatorContainer::resizeEvent()" << endl; 201 kdDebug(5850) << "DateNavigatorContainer::resizeEvent()" << endl;
164 kdDebug(5850) << " CURRENT SIZE: " << size() << endl; 202 kdDebug(5850) << " CURRENT SIZE: " << size() << endl;
165 kdDebug(5850) << " MINIMUM SIZEHINT: " << minimumSizeHint() << endl; 203 kdDebug(5850) << " MINIMUM SIZEHINT: " << minimumSizeHint() << endl;
166 kdDebug(5850) << " SIZEHINT: " << sizeHint() << endl; 204 kdDebug(5850) << " SIZEHINT: " << sizeHint() << endl;
167 kdDebug(5850) << " MINIMUM SIZE: " << minimumSize() << endl; 205 kdDebug(5850) << " MINIMUM SIZE: " << minimumSize() << endl;
168#endif 206#endif
169 //QSize minSize = mNavigatorView->sizeHintTwoButtons(); 207 //QSize minSize = mNavigatorView->sizeHintTwoButtons();
170 QSize minSize = mNavigatorView->yourSizeHint(); 208 QSize minSize = mNavigatorView->yourSizeHint();
171 209
172// kdDebug(5850) << " NAVIGATORVIEW minimumSizeHint: " << minSize << endl; 210// kdDebug(5850) << " NAVIGATORVIEW minimumSizeHint: " << minSize << endl;
173 211
174 int verticalCount = size().height() / minSize.height(); 212 int verticalCount = size().height() / minSize.height();
175 int horizontalCount = size().width() / minSize.width(); 213 int horizontalCount = size().width() / minSize.width();
176 //qDebug(" wattdatt %d new %d %d ", size().width() ,e->size().width() , minSize.width() ); 214 //qDebug(" wattdatt %d new %d %d ", size().width() ,e->size().width() , minSize.width() );
177 //qDebug("COUNT %d %d %d %d ", verticalCount, horizontalCount , mVerticalCount, mHorizontalCount ); 215 //qDebug("COUNT %d %d %d %d ", verticalCount, horizontalCount , mVerticalCount, mHorizontalCount );
178 bool fontchange = false; 216 bool fontchange = false;
179 if ( horizontalCount == 1) 217 if ( horizontalCount == 1)
180 horizontalCount = size().width() / mNavigatorView->yourFullSizeHint().width(); 218 horizontalCount = size().width() / mNavigatorView->yourFullSizeHint().width();
181 QFont fo; 219 QFont fo;
182 if ( horizontalCount != mHorizontalCount || 220 if ( horizontalCount != mHorizontalCount ||
183 verticalCount != mVerticalCount ) { 221 verticalCount != mVerticalCount ) {
184 uint count = horizontalCount * verticalCount; 222 uint count = horizontalCount * verticalCount;
185 if ( count == 0 ) { 223 if ( count == 0 ) {
186 bool ok; 224 bool ok;
187 fo = mNavigatorView->yourFontHint( size() , &ok ); 225 fo = mNavigatorView->yourFontHint( size() , &ok );
188 //mNavigatorView->resize( size() ); 226 //mNavigatorView->resize( size() );
189 //if ( ! ok ) 227 //if ( ! ok )
190 // return; 228 // return;
191 int butt = 2; 229 int butt = 2;
192 horizontalCount = size().width() / mNavigatorView->sizeHintTwoButtons( ).width(); 230 horizontalCount = size().width() / mNavigatorView->sizeHintTwoButtons( ).width();
193 if ( horizontalCount <= 1 ) 231 if ( horizontalCount <= 1 )
194 minSize = mNavigatorView->sizeHintTwoButtons( 4 ); 232 minSize = mNavigatorView->sizeHintTwoButtons( 4 );
195 else 233 else
196 minSize = mNavigatorView->sizeHintTwoButtons(); 234 minSize = mNavigatorView->sizeHintTwoButtons();
197 verticalCount = size().height() / minSize.height(); 235 verticalCount = size().height() / minSize.height();
198 horizontalCount = size().width() / minSize.width(); 236 horizontalCount = size().width() / minSize.width();
199 if ( horizontalCount == 0 ) 237 if ( horizontalCount == 0 )
200 horizontalCount = 1; 238 horizontalCount = 1;
201 if ( verticalCount == 0 ) 239 if ( verticalCount == 0 )
202 verticalCount = 1; 240 verticalCount = 1;
203 fontchange = true; 241 fontchange = true;
204 count = horizontalCount * verticalCount; 242 count = horizontalCount * verticalCount;
205 } else { 243 } else {
206 if ( mNavigatorView->fontChanged() ) { 244 if ( mNavigatorView->fontChanged() ) {
207 fontchange = true; 245 fontchange = true;
208 fo = KOPrefs::instance()->mDateNavigatorFont; 246 fo = KOPrefs::instance()->mDateNavigatorFont;
209 mNavigatorView->changeFont( fo ); 247 mNavigatorView->changeFont( fo );
210 mNavigatorView->unsetFontChanged(); 248 mNavigatorView->unsetFontChanged();
211 } 249 }
212 } 250 }
213 251
252 mLastDisplayedDN = horizontalCount*verticalCount-1;
253 bool setBaseD = false;
214 while ( count > ( mExtraViews.count() + 1 ) ) { 254 while ( count > ( mExtraViews.count() + 1 ) ) {
215 KDateNavigator *n = new KDateNavigator( this ); 255 KDateNavigator *n = new KDateNavigator( this );
216 n->setMonthSignalOffset ( mExtraViews.count()+1 ); 256 n->setMonthSignalOffset ( mExtraViews.count()+1 );
217 mExtraViews.append( n ); 257 mExtraViews.append( n );
218 n->setCalendar( mCalendar ); 258 n->setCalendar( mCalendar );
219 setBaseDates(); 259 setBaseD = true;
220 connectNavigatorView( n ); 260 connectNavigatorView( n );
221 n->show(); 261 n->show();
222 } 262 }
223 int iii = 0; 263 int iii = 0;
224 while ( iii < ( mExtraViews.count() ) ) { 264 while ( iii < ( mExtraViews.count() ) ) {
225 if ( iii < count-1 ) 265 if ( iii < count-1 )
226 mExtraViews.at( iii )->show(); 266 mExtraViews.at( iii )->show();
227 else 267 else
228 mExtraViews.at( iii )->hide(); 268 mExtraViews.at( iii )->hide();
229 ++iii; 269 ++iii;
230 } 270 }
271 if ( setBaseD )
272 setBaseDates();
231 if ( fontchange ) { 273 if ( fontchange ) {
232 //mNavigatorView->changeFont( fo ); 274 //mNavigatorView->changeFont( fo );
233 uint i; 275 uint i;
234 for( i = 0; i < mExtraViews.count(); ++i ) { 276 for( i = 0; i < mExtraViews.count(); ++i ) {
235 KDateNavigator *view = mExtraViews.at( i ); 277 KDateNavigator *view = mExtraViews.at( i );
236 view->changeFont( fo ); 278 view->changeFont( fo );
237 } 279 }
238 } 280 }
239 mHorizontalCount = horizontalCount; 281 mHorizontalCount = horizontalCount;
240 mVerticalCount = verticalCount; 282 mVerticalCount = verticalCount;
283
241 } 284 }
242 //qDebug("COUNT %d ", mExtraViews.count()); 285 //qDebug("COUNT %d ", mExtraViews.count());
243 int height = size().height() / verticalCount; 286 int height = size().height() / verticalCount;
244 int width = size().width() / horizontalCount; 287 int width = size().width() / horizontalCount;
245 288
246 NavigatorBar *bar = mNavigatorView->navigatorBar(); 289 NavigatorBar *bar = mNavigatorView->navigatorBar();
247 if ( horizontalCount > 1 ) bar->showButtons( true, false ); 290 if ( horizontalCount > 1 ) bar->showButtons( true, false );
248 else bar->showButtons( true, true ); 291 else bar->showButtons( true, true );
249 292
250 mNavigatorView->setGeometry(0, 293 mNavigatorView->setGeometry(0,
251 0, width, height ); 294 0, width, height );
252 for( uint i = 0; i < mExtraViews.count(); ++i ) { 295 for( uint i = 0; i < mLastDisplayedDN; ++i ) {
253 int x = ( i + 1 ) % horizontalCount; 296 int x = ( i + 1 ) % horizontalCount;
254 int y = ( i + 1 ) / horizontalCount; 297 int y = ( i + 1 ) / horizontalCount;
255 298
256 KDateNavigator *view = mExtraViews.at( i ); 299 KDateNavigator *view = mExtraViews.at( i );
257 bar = view->navigatorBar(); 300 bar = view->navigatorBar();
258 if ( y > 0 ) bar->showButtons( false, false ); 301 if ( y > 0 ) bar->showButtons( false, false );
259 else { 302 else {
260 if ( x + 1 == horizontalCount ) bar->showButtons( false, true ); 303 if ( x + 1 == horizontalCount ) bar->showButtons( false, true );
261 else bar->showButtons( false, false ); 304 else bar->showButtons( false, false );
262 } 305 }
263 view->setGeometry( x * width, 306 view->setGeometry( x * width,
264 y * height, width, height ); 307 y * height, width, height );
265 } 308 }
266} 309}
267 310
268QSize DateNavigatorContainer::minimumSizeHint() const 311QSize DateNavigatorContainer::minimumSizeHint() const
269{ 312{
270 return mNavigatorView->minimumSizeHint(); 313 return mNavigatorView->minimumSizeHint();
271} 314}
272 315
273QSize DateNavigatorContainer::sizeHint() const 316QSize DateNavigatorContainer::sizeHint() const
274{ 317{
275 return mNavigatorView->yourSizeHint(); 318 return mNavigatorView->yourSizeHint();
276} 319}
diff --git a/korganizer/datenavigatorcontainer.h b/korganizer/datenavigatorcontainer.h
index affa8e1..f45af20 100644
--- a/korganizer/datenavigatorcontainer.h
+++ b/korganizer/datenavigatorcontainer.h
@@ -48,43 +48,45 @@ class DateNavigatorContainer: public QWidget
48 KDateNavigator * navigatorView() { return mNavigatorView;} 48 KDateNavigator * navigatorView() { return mNavigatorView;}
49 49
50 public slots: 50 public slots:
51 void selectDates( const KCal::DateList & ); 51 void selectDates( const KCal::DateList & );
52 void updateView(); 52 void updateView();
53 void updateConfig(); 53 void updateConfig();
54 void updateDayMatrix(); 54 void updateDayMatrix();
55 void updateToday(); 55 void updateToday();
56 56
57 signals: 57 signals:
58 void datesSelected( const KCal::DateList & ); 58 void datesSelected( const KCal::DateList & );
59 void incidenceDropped( Incidence *, const QDate & ); 59 void incidenceDropped( Incidence *, const QDate & );
60 void incidenceDroppedMove( Incidence *, const QDate & ); 60 void incidenceDroppedMove( Incidence *, const QDate & );
61 void weekClicked( const QDate &); 61 void weekClicked( const QDate &);
62 62
63 void goPrevious(); 63 void goPrevious();
64 void goNext(); 64 void goNext();
65 65
66 void goNextMonth(); 66 void goNextMonth();
67 void goPrevMonth(); 67 void goPrevMonth();
68 void goNextYear(); 68 void goNextYear();
69 void goPrevYear(); 69 void goPrevYear();
70 70
71 void monthSelected( int month ); 71 void monthSelected( int month );
72 72
73 protected: 73 protected:
74 void resizeEvent( QResizeEvent * ); 74 void resizeEvent( QResizeEvent * );
75 75
76 void setBaseDates(); 76 void setBaseDates();
77 void connectNavigatorView( KDateNavigator *v ); 77 void connectNavigatorView( KDateNavigator *v );
78 78
79 private: 79 private:
80 int mLastDisplayedDN;
81 QDate mDisplayedEndDate;
80 KDateNavigator *mNavigatorView; 82 KDateNavigator *mNavigatorView;
81 83
82 KCal::Calendar *mCalendar; 84 KCal::Calendar *mCalendar;
83 85
84 QPtrList<KDateNavigator> mExtraViews; 86 QPtrList<KDateNavigator> mExtraViews;
85 87
86 int mHorizontalCount; 88 int mHorizontalCount;
87 int mVerticalCount; 89 int mVerticalCount;
88}; 90};
89 91
90#endif 92#endif
diff --git a/korganizer/kdatenavigator.h b/korganizer/kdatenavigator.h
index 10bc1be..93bbceb 100644
--- a/korganizer/kdatenavigator.h
+++ b/korganizer/kdatenavigator.h
@@ -32,64 +32,67 @@
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,const char *name = 0 ); 45 KDateNavigator( QWidget *parent = 0,const char *name = 0 );
46 ~KDateNavigator(); 46 ~KDateNavigator();
47 47
48 /** The DateNavigator automatically checks for 48 /** The DateNavigator automatically checks for
49 * the passage of midnight. If rollover type is 49 * the passage of midnight. If rollover type is
50 * set to None, no signals are emitted and no 50 * set to None, no signals are emitted and no
51 * processing is done. With rollover set to 51 * processing is done. With rollover set to
52 * FollowDay, the day highlighter changes at 52 * FollowDay, the day highlighter changes at
53 * midnight and dayPassed() is emitted. 53 * midnight and dayPassed() is emitted.
54 * With FollowMonth, it has the same effect 54 * With FollowMonth, it has the same effect
55 * as FollowDay but also adjusts the month that is 55 * as FollowDay but also adjusts the month that is
56 * visible and emits monthPassed() when the month changes. 56 * visible and emits monthPassed() when the month changes.
57 */ 57 */
58 enum RolloverType { None, FollowDay, FollowMonth } ; 58 enum RolloverType { None, FollowDay, FollowMonth } ;
59 void enableRollover( RolloverType ); 59 void enableRollover( RolloverType );
60 60
61 void setShowWeekNums( bool enabled ); 61 void setShowWeekNums( bool enabled );
62 void setCalendar( Calendar * ); 62 void setCalendar( Calendar * );
63 void setBaseDate( const QDate & , bool doRepaint = true ); 63 void setBaseDate( const QDate & , bool doRepaint = true );
64
65 QDate baseDate() const { return m_MthYr;}
66
64 KCal::DateList selectedDates() const { return mSelectedDates; } 67 KCal::DateList selectedDates() const { return mSelectedDates; }
65 NavigatorBar *navigatorBar() const { return mNavigatorBar; } 68 NavigatorBar *navigatorBar() const { return mNavigatorBar; }
66 void setMonthSignalOffset ( int off ) { mMonthSignalOffset = off%12;} 69 void setMonthSignalOffset ( int off ) { mMonthSignalOffset = off%12;}
67 QSize yourSizeHint()const { return mySizeHint; }; 70 QSize yourSizeHint()const { return mySizeHint; };
68 QSize yourFullSizeHint() const { return myFullSizeHint;}; 71 QSize yourFullSizeHint() const { return myFullSizeHint;};
69 QFont yourFontHint( QSize , bool * b); 72 QFont yourFontHint( QSize , bool * b);
70 bool fontChanged() {return mFontChanged; } 73 bool fontChanged() {return mFontChanged; }
71 void unsetFontChanged() { mFontChanged = false; } 74 void unsetFontChanged() { mFontChanged = false; }
72 KODayMatrix *dayMatrix() { return daymatrix ;} 75 KODayMatrix *dayMatrix() { return daymatrix ;}
73 QSize sizeHint() const; 76 QSize sizeHint() const;
74 QSize sizeHintTwoButtons( int butnum = 2 ) const; 77 QSize sizeHintTwoButtons( int butnum = 2 ) const;
75 void changeFont ( QFont fo ); 78 void changeFont ( QFont fo );
76 public slots: 79 public slots:
77 void selectDates( const KCal::DateList & ); 80 void selectDates( const KCal::DateList & );
78 void updateView(); 81 void updateView();
79 void updateConfig(); 82 void updateConfig();
80 void updateDayMatrix(); 83 void updateDayMatrix();
81 84
82 signals: 85 signals:
83 void datesSelected( const KCal::DateList & ); 86 void datesSelected( const KCal::DateList & );
84 void eventDropped( Event * ); 87 void eventDropped( Event * );
85 void weekClicked( const QDate &); 88 void weekClicked( const QDate &);
86 89
87 void goPrevious(); 90 void goPrevious();
88 void goNext(); 91 void goNext();
89 92
90 void goNextMonth(); 93 void goNextMonth();
91 void goPrevMonth(); 94 void goPrevMonth();
92 void goNextYear(); 95 void goNextYear();
93 void goPrevYear(); 96 void goPrevYear();
94 void monthSelected( int ); 97 void monthSelected( int );
95 98
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp
index a2e0ae0..3ee1fa7 100644
--- a/korganizer/kodaymatrix.cpp
+++ b/korganizer/kodaymatrix.cpp
@@ -255,73 +255,80 @@ void KODayMatrix::addSelectedDaysTo(DateList& selDays)
255{ 255{
256 256
257 if (mSelStart == NOSELECTION) { 257 if (mSelStart == NOSELECTION) {
258 return; 258 return;
259 } 259 }
260 260
261 //cope with selection being out of matrix limits at top (< 0) 261 //cope with selection being out of matrix limits at top (< 0)
262 int i0 = mSelStart; 262 int i0 = mSelStart;
263 if (i0 < 0) { 263 if (i0 < 0) {
264 for (int i = i0; i < 0; i++) { 264 for (int i = i0; i < 0; i++) {
265 selDays.append(days[0].addDays(i)); 265 selDays.append(days[0].addDays(i));
266 } 266 }
267 i0 = 0; 267 i0 = 0;
268 } 268 }
269 269
270 //cope with selection being out of matrix limits at bottom (> NUMDAYS-1) 270 //cope with selection being out of matrix limits at bottom (> NUMDAYS-1)
271 if (mSelEnd > NUMDAYS-1) { 271 if (mSelEnd > NUMDAYS-1) {
272 for (int i = i0; i <= NUMDAYS-1; i++) { 272 for (int i = i0; i <= NUMDAYS-1; i++) {
273 selDays.append(days[i]); 273 selDays.append(days[i]);
274 } 274 }
275 for (int i = NUMDAYS; i < mSelEnd; i++) { 275 for (int i = NUMDAYS; i < mSelEnd; i++) {
276 selDays.append(days[0].addDays(i)); 276 selDays.append(days[0].addDays(i));
277 } 277 }
278 278
279 // apply normal routine to selection being entirely within matrix limits 279 // apply normal routine to selection being entirely within matrix limits
280 } else { 280 } else {
281 for (int i = i0; i <= mSelEnd; i++) { 281 for (int i = i0; i <= mSelEnd; i++) {
282 selDays.append(days[i]); 282 selDays.append(days[i]);
283 } 283 }
284 } 284 }
285} 285}
286 286
287void KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end) 287bool KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end)
288{ 288{
289 bool noSel = (mSelEnd == NOSELECTION && mSelStart == NOSELECTION );
289 mSelStart = startdate.daysTo(start); 290 mSelStart = startdate.daysTo(start);
290 if ( mSelStart < 0 ) 291 if ( mSelStart < 0 )
291 mSelStart = 0; 292 mSelStart = 0;
292 mSelEnd = startdate.daysTo(end); 293 mSelEnd = startdate.daysTo(end);
293 //qDebug("SELECTION %d %d ", mSelStart ,mSelEnd ); 294 if ( mSelEnd > NUMDAYS-1 )
294 if ( mSelEnd < 0 ) 295 mSelEnd = NUMDAYS-1;
296 if ( mSelEnd < 0 || mSelStart > NUMDAYS-1 ) {
295 clearSelection(); 297 clearSelection();
298 if ( noSel )
299 return false;
300 }
301
302 return true;
296} 303}
297void KODayMatrix::clearSelection() 304void KODayMatrix::clearSelection()
298{ 305{
299 mSelEnd = mSelStart = NOSELECTION; 306 mSelEnd = mSelStart = NOSELECTION;
300} 307}
301 308
302 309
303void KODayMatrix::recalculateToday() 310void KODayMatrix::recalculateToday()
304{ 311{
305 today = -1; 312 today = -1;
306 for (int i=0; i<NUMDAYS; i++) { 313 for (int i=0; i<NUMDAYS; i++) {
307 events[i] = 0; 314 events[i] = 0;
308 days[i] = startdate.addDays(i); 315 days[i] = startdate.addDays(i);
309 daylbls[i] = QString::number( KOGlobals::self()->calendarSystem()->day( days[i] )); 316 daylbls[i] = QString::number( KOGlobals::self()->calendarSystem()->day( days[i] ));
310 317
311 // if today is in the currently displayed month, hilight today 318 // if today is in the currently displayed month, hilight today
312 if (days[i].year() == QDate::currentDate().year() && 319 if (days[i].year() == QDate::currentDate().year() &&
313 days[i].month() == QDate::currentDate().month() && 320 days[i].month() == QDate::currentDate().month() &&
314 days[i].day() == QDate::currentDate().day()) { 321 days[i].day() == QDate::currentDate().day()) {
315 today = i; 322 today = i;
316 } 323 }
317 } 324 }
318 // qDebug(QString("Today is visible at %1.").arg(today)); 325 // qDebug(QString("Today is visible at %1.").arg(today));
319} 326}
320 327
321void KODayMatrix::updateView() 328void KODayMatrix::updateView()
322{ 329{
323 updateView(startdate); 330 updateView(startdate);
324} 331}
325void KODayMatrix::repaintViewTimed() 332void KODayMatrix::repaintViewTimed()
326{ 333{
327 mRepaintTimer->stop(); 334 mRepaintTimer->stop();
@@ -670,77 +677,80 @@ void KODayMatrix::paintEvent(QPaintEvent * pevent)
670 int dheight = daysize.height(); 677 int dheight = daysize.height();
671 int dwidth = daysize.width(); 678 int dwidth = daysize.width();
672 int row,col; 679 int row,col;
673 int selw, selh; 680 int selw, selh;
674 int xyOff = frameWidth(); 681 int xyOff = frameWidth();
675 int colModulo = sz.width() % 7; 682 int colModulo = sz.width() % 7;
676 int rowModulo = sz.height() % 6; 683 int rowModulo = sz.height() % 6;
677 //qDebug("col %d row %d ",colModulo,rowModulo ); 684 //qDebug("col %d row %d ",colModulo,rowModulo );
678 685
679 bool isRTL = KOGlobals::self()->reverseLayout(); 686 bool isRTL = KOGlobals::self()->reverseLayout();
680 687
681 // draw background and topleft frame 688 // draw background and topleft frame
682 p.fillRect(pevent->rect(), mDefaultBackColor); 689 p.fillRect(pevent->rect(), mDefaultBackColor);
683 p.setPen(mDefaultTextColor); 690 p.setPen(mDefaultTextColor);
684 p.drawRect(0, 0, sz.width()+1, sz.height()+1); 691 p.drawRect(0, 0, sz.width()+1, sz.height()+1);
685 int mSelStartT = mSelStart; 692 int mSelStartT = mSelStart;
686 int mSelEndT = mSelEnd; 693 int mSelEndT = mSelEnd;
687 if ( mSelEndT >= NUMDAYS ) 694 if ( mSelEndT >= NUMDAYS )
688 mSelEndT = NUMDAYS-1; 695 mSelEndT = NUMDAYS-1;
689 // draw selected days with highlighted background color 696 // draw selected days with highlighted background color
690 if (mSelStart != NOSELECTION) { 697 if (mSelStart != NOSELECTION) {
691 bool skip = false; 698 bool skip = false;
692 if ( ! mouseDown ) { 699 if ( ! mouseDown ) {
693 int mo = days[20].month(); 700 int mo = days[20].month();
694 //qDebug("-- %d %d ", mSelStartT, mSelEndT); 701 //qDebug("-- %d %d ", mSelStartT, mSelEndT);
695 //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() ); 702 //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() );
696 int startMo = days[mSelStartT].month(); 703 int startMo = days[mSelStartT].month();
697 int endMo = days[mSelEndT].month(); 704 int endMo = days[mSelEndT].month();
698 if ( startMo == 12 && mo == 1 && endMo <= 2 ) 705 if ( startMo == 12 && mo == 1 && endMo <= 2 )
699 startMo = 1; 706 startMo = 1;
700 if ( endMo == 1 && mo == 12 ) 707 if ( endMo == 1 && mo == 12 )
701 endMo = 12; 708 endMo = 12;
709 if ( mo == 12 && startMo == 1 )
710 startMo = 13;
702 if ( (startMo > mo || endMo < mo) ) { 711 if ( (startMo > mo || endMo < mo) ) {
703 skip = true; 712 skip = true;
704 } else { 713 } else {
705 if ( days[mSelStartT].month() != mo ) { 714 if ( days[mSelStartT].month() != mo ) {
706 int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day(); 715 int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day();
707 mSelStartT += add +1; 716 mSelStartT += add +1;
708 } 717 }
709 if ( days[mSelEndT].month() != mo ) { 718 if ( days[mSelEndT].month() != mo ) {
710 int sub = days[mSelEndT].day(); 719 int sub = days[mSelEndT].day();
711 mSelEndT -= sub ; 720 mSelEndT -= sub ;
712 } 721 }
713 } 722 }
714 } 723 }
724 //qDebug("SKIP %d ", skip);
715 if ( ! skip ) { 725 if ( ! skip ) {
716 row = mSelStartT/7; 726 row = mSelStartT/7;
717 col = mSelStartT -row*7; 727 col = mSelStartT -row*7;
718 QColor selcol = KOPrefs::instance()->mHighlightColor; 728 QColor selcol = KOPrefs::instance()->mHighlightColor;
719 int addCol = 0; 729 int addCol = 0;
720 int addRow = 0; 730 int addRow = 0;
721 int addRow2 = 0; 731 int addRow2 = 0;
722 int addCol2 = 0; 732 int addCol2 = 0;
723 if (row == mSelEndT/7) { 733 if (row == mSelEndT/7) {
724 if ( rowModulo ) { 734 if ( rowModulo ) {
725 if ( row >= 6 - rowModulo ) 735 if ( row >= 6 - rowModulo )
726 addRow = row - 5 + rowModulo; 736 addRow = row - 5 + rowModulo;
727 } 737 }
728 if ( colModulo ) { 738 if ( colModulo ) {
729 int colt1 = mSelEndT%7; 739 int colt1 = mSelEndT%7;
730 //qDebug("colt1 %d ", colt1 ); 740 //qDebug("colt1 %d ", colt1 );
731 if ( colt1 >= 7 - colModulo ) 741 if ( colt1 >= 7 - colModulo )
732 addCol = colt1 - 7 + colModulo+1; 742 addCol = colt1 - 7 + colModulo+1;
733 int colt = mSelStartT%7; 743 int colt = mSelStartT%7;
734 if ( colt >= 7 - colModulo ) 744 if ( colt >= 7 - colModulo )
735 addCol2 = colt - 7 + colModulo; 745 addCol2 = colt - 7 + colModulo;
736 addCol -= addCol2; 746 addCol -= addCol2;
737 //qDebug("COL %d %d %d %d ",col , colt1 ,addCol ,addCol2 ); 747 //qDebug("COL %d %d %d %d ",col , colt1 ,addCol ,addCol2 );
738 } 748 }
739 // Single row selection 749 // Single row selection
740 if ( row == 0) 750 if ( row == 0)
741 addRow = 1; 751 addRow = 1;
742 p.fillRect(isRTL ? (7 - (mSelEndT-mSelStartT+1) - col)*dwidth : col*dwidth+1+addCol2, 752 p.fillRect(isRTL ? (7 - (mSelEndT-mSelStartT+1) - col)*dwidth : col*dwidth+1+addCol2,
743 row*dheight+addRow, (mSelEndT-mSelStartT+1)*dwidth+addCol, dheight+1, selcol); 753 row*dheight+addRow, (mSelEndT-mSelStartT+1)*dwidth+addCol, dheight+1, selcol);
744 } else { 754 } else {
745 // draw first row to the right 755 // draw first row to the right
746 if ( colModulo ) { 756 if ( colModulo ) {
diff --git a/korganizer/kodaymatrix.h b/korganizer/kodaymatrix.h
index 10f4b05..2a1959c 100644
--- a/korganizer/kodaymatrix.h
+++ b/korganizer/kodaymatrix.h
@@ -125,65 +125,65 @@ public:
125 */ 125 */
126 ~KODayMatrix(); 126 ~KODayMatrix();
127 127
128 /** updates the day matrix to start with the given date. Does all the necessary 128 /** updates the day matrix to start with the given date. Does all the necessary
129 * checks for holidays or events on a day and stores them for display later on. 129 * checks for holidays or events on a day and stores them for display later on.
130 * Does NOT update the view visually. Call repaint() for this. 130 * Does NOT update the view visually. Call repaint() for this.
131 * 131 *
132 * @param actdate recalculates the day matrix to show NUMDAYS starting from this 132 * @param actdate recalculates the day matrix to show NUMDAYS starting from this
133 * date. 133 * date.
134 */ 134 */
135 void updateView(QDate actdate); 135 void updateView(QDate actdate);
136 void updateEvents(); 136 void updateEvents();
137 137
138 /** returns the QDate object associated with day indexed by the 138 /** returns the QDate object associated with day indexed by the
139 * supplied offset. 139 * supplied offset.
140 */ 140 */
141 const QDate& getDate(int offset); 141 const QDate& getDate(int offset);
142 void setCalendar( Calendar * ); 142 void setCalendar( Calendar * );
143 /** returns the official name of this holy day or 0 if there is no label 143 /** returns the official name of this holy day or 0 if there is no label
144 * for this day. 144 * for this day.
145 */ 145 */
146 QString getHolidayLabel(int offset); 146 QString getHolidayLabel(int offset);
147 147
148 /** adds all actual selected days from mSelStart to mSelEnd to the supplied 148 /** adds all actual selected days from mSelStart to mSelEnd to the supplied
149 * DateList. 149 * DateList.
150 */ 150 */
151 void addSelectedDaysTo(DateList&); 151 void addSelectedDaysTo(DateList&);
152 152
153 /** sets the actual to be displayed selection in the day matrix starting from 153 /** sets the actual to be displayed selection in the day matrix starting from
154 * start and ending with end. Theview must be manually updated by calling 154 * start and ending with end. Theview must be manually updated by calling
155 * repaint. (?) 155 * repaint. (?)
156 */ 156 */
157 void setSelectedDaysFrom(const QDate& start, const QDate& end); 157 bool setSelectedDaysFrom(const QDate& start, const QDate& end);
158 void clearSelection(); 158 void clearSelection();
159 159
160 /** Is today visible in the view? Keep this in sync with 160 /** Is today visible in the view? Keep this in sync with
161 * the values today (below) can take. 161 * the values today (below) can take.
162 */ 162 */
163 bool isTodayVisible() const { return today>=0; } ; 163 bool isTodayVisible() const { return today>=0; } ;
164 164
165 /** If today is visible, then we can find out if today is 165 /** If today is visible, then we can find out if today is
166 * near the beginning or the end of the month. 166 * near the beginning or the end of the month.
167 * This is dependent on today remaining the index 167 * This is dependent on today remaining the index
168 * in the array of visible dates and going from 168 * in the array of visible dates and going from
169 * top left (0) to bottom right (41). 169 * top left (0) to bottom right (41).
170 */ 170 */
171 bool isBeginningOfMonth() const { return today<=8; } ; 171 bool isBeginningOfMonth() const { return today<=8; } ;
172 bool isEndOfMonth() const { return today>=27; } ; 172 bool isEndOfMonth() const { return today>=27; } ;
173 QString getWhatsThisText( QPoint ) ; 173 QString getWhatsThisText( QPoint ) ;
174 QSize sizeHint() const; 174 QSize sizeHint() const;
175 QRect frameRect () const { int wid = frameWidth(); return QRect(0+wid,0+wid,width()-wid-wid,height()-wid-wid);} 175 QRect frameRect () const { int wid = frameWidth(); return QRect(0+wid,0+wid,width()-wid-wid,height()-wid-wid);}
176public slots: 176public slots:
177 /** Recalculates all the flags of the days in the matrix like holidays or events 177 /** Recalculates all the flags of the days in the matrix like holidays or events
178 * on a day (Actually calls above method with the actual startdate). 178 * on a day (Actually calls above method with the actual startdate).
179 */ 179 */
180 void updateView(); 180 void updateView();
181 void updateViewTimed(); 181 void updateViewTimed();
182 void repaintViewTimed(); 182 void repaintViewTimed();
183 183
184 /** 184 /**
185 * Calculate which square in the matrix should be 185 * Calculate which square in the matrix should be
186 * hilighted to indicate it's today. 186 * hilighted to indicate it's today.
187 */ 187 */
188 void recalculateToday(); 188 void recalculateToday();
189 189