summaryrefslogtreecommitdiffabout
path: root/korganizer/datenavigatorcontainer.cpp
Unidiff
Diffstat (limited to 'korganizer/datenavigatorcontainer.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/datenavigatorcontainer.cpp83
1 files changed, 63 insertions, 20 deletions
diff --git a/korganizer/datenavigatorcontainer.cpp b/korganizer/datenavigatorcontainer.cpp
index 18756f0..bb27bce 100644
--- a/korganizer/datenavigatorcontainer.cpp
+++ b/korganizer/datenavigatorcontainer.cpp
@@ -25,153 +25,191 @@
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 );
@@ -190,87 +228,92 @@ void DateNavigatorContainer::resizeEvent( QResizeEvent * e )
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}