00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
#include <qstring.h>
00026
#include <qkeycode.h>
00027
#include <qlayout.h>
00028
#include <qtimer.h>
00029
#include <qframe.h>
00030
#include <qlabel.h>
00031
00032
#include <kdebug.h>
00033
#include <klocale.h>
00034
#include <kglobal.h>
00035
#include <kglobalsettings.h>
00036
00037
#include "koglobals.h"
00038
#include "koprefs.h"
00039
#ifndef KORG_NOPLUGINS
00040
#include "kocore.h"
00041
#endif
00042
#include "kodaymatrix.h"
00043
00044
#include <kcalendarsystem.h>
00045
00046
#include "navigatorbar.h"
00047
00048
#include "kdatenavigator.h"
00049
00050 KDateNavigator::KDateNavigator(
QWidget *parent,
const char *name )
00051 :
QFrame( parent, name )
00052 {
00053 setFrameStyle( QFrame::NoFrame );
00054
00055
QGridLayout *topLayout =
new QGridLayout(
this, 8, 8 );
00056
00057 mNavigatorBar =
new NavigatorBar(
this );
00058 topLayout->addMultiCellWidget( mNavigatorBar, 0, 0, 0, 7 );
00059
00060 connect( mNavigatorBar, SIGNAL( goPrevYear() ), SIGNAL( goPrevYear() ) );
00061 connect( mNavigatorBar, SIGNAL( goPrevMonth() ), SIGNAL( goPrevMonth() ) );
00062 connect( mNavigatorBar, SIGNAL( goNextMonth() ), SIGNAL( goNextMonth() ) );
00063 connect( mNavigatorBar, SIGNAL( goNextYear() ), SIGNAL( goNextYear() ) );
00064 connect( mNavigatorBar, SIGNAL( goMonth(
int ) ), SIGNAL( goMonth(
int ) ) );
00065
00066
int i;
00067
QString generalFont = KGlobalSettings::generalFont().family();
00068
00069
00070
for( i = 0; i < 7; i++ ) {
00071 headings[i] =
new QLabel(
this );
00072 headings[i]->setFont(
QFont( generalFont, 10, QFont::Bold ) );
00073 headings[i]->setAlignment( AlignCenter );
00074
00075 topLayout->addWidget( headings[i], 1, i + 1 );
00076 }
00077
00078
00079
for( i = 0; i < 6; i++ ) {
00080 weeknos[i] =
new QLabel(
this );
00081 weeknos[i]->setAlignment( AlignCenter );
00082 weeknos[i]->setFont(
QFont( generalFont, 10 ) );
00083 weeknos[i]->installEventFilter(
this );
00084
00085 topLayout->addWidget( weeknos[i], i + 2, 0 );
00086 }
00087
00088 mDayMatrix =
new KODayMatrix(
this,
"KDateNavigator::dayMatrix" );
00089 mDayMatrix->setFrameStyle( QFrame::Panel | QFrame::Sunken );
00090 mDayMatrix->setLineWidth( 1 );
00091
00092 connect( mDayMatrix, SIGNAL( selected(
const KCal::DateList & ) ),
00093 SIGNAL( datesSelected(
const KCal::DateList & ) ) );
00094
00095 connect( mDayMatrix, SIGNAL( incidenceDropped( Incidence * ) ),
00096 SIGNAL( incidenceDropped( Incidence * ) ) );
00097 connect( mDayMatrix, SIGNAL( incidenceDroppedMove( Incidence * , Incidence * ) ),
00098 SIGNAL( incidenceDroppedMove( Incidence *, Incidence * ) ) );
00099
00100
00101 topLayout->addMultiCellWidget( mDayMatrix, 2, 7, 1, 7 );
00102
00103
00104 updateConfig();
00105 }
00106
00107 KDateNavigator::~KDateNavigator()
00108 {
00109 }
00110
00111
void KDateNavigator::setCalendar( Calendar *cal )
00112 {
00113 mDayMatrix->setCalendar( cal );
00114 }
00115
00116
void KDateNavigator::setBaseDate(
const QDate &date )
00117 {
00118 mBaseDate = date;
00119
00120 updateDates();
00121 updateView();
00122
00123 KCal::DateList dates;
00124 dates.append( date );
00125 mNavigatorBar->selectDates( dates );
00126
00127 mDayMatrix->clearSelection();
00128 mDayMatrix->repaint();
00129 }
00130
00131
QSizePolicy KDateNavigator::sizePolicy ()
const
00132
{
00133
return QSizePolicy( QSizePolicy::MinimumExpanding,
00134 QSizePolicy::MinimumExpanding );
00135 }
00136
00137
void KDateNavigator::updateToday()
00138 {
00139
if ( mDayMatrix->isEndOfMonth() ) {
00140 goNextMonth();
00141 }
00142 mDayMatrix->recalculateToday();
00143 mDayMatrix->repaint();
00144 }
00145
00146
void KDateNavigator::updateDates()
00147 {
00148
00149
00150
QDate dayone( mBaseDate.year(), mBaseDate.month(), mBaseDate.day() );
00151
int d2 = KOGlobals::self()->calendarSystem()->day( dayone );
00152
00153 dayone = dayone.addDays( -d2 + 1 );
00154
00155
int m_fstDayOfWkCalsys = KOGlobals::self()->calendarSystem()->dayOfWeek(
00156 dayone );
00157
00158
00159
00160
int nextLine = ( ( m_fstDayOfWkCalsys == 1) &&
00161 ( KGlobal::locale()->weekStartDay() == 1 ) ) ? 7 : 0;
00162
00163
00164
int index = ( KGlobal::locale()->weekStartDay() == 1 ? 1 : 0 ) -
00165 m_fstDayOfWkCalsys - nextLine;
00166
00167 mDayMatrix->updateView( dayone.addDays( index ) );
00168
00169
00170
00171 }
00172
00173
void KDateNavigator::updateDayMatrix()
00174 {
00175 mDayMatrix->updateView();
00176 mDayMatrix->repaint();
00177 }
00178
00179
00180
void KDateNavigator::updateView()
00181 {
00182
00183
00184 setUpdatesEnabled(
false );
00185
00186
int i;
00187
00188
00189 mDayMatrix->updateView();
00190
00191
00192
for( i = 0; i < 6; i++ ) {
00193
QString weeknum;
00194
00195
00196
00197
00198
00199
int dayOfYear = KOGlobals::self()->calendarSystem()->dayOfYear(
00200 ( mDayMatrix->getDate( ( i + 1 ) * 7 - 4 ) ) );
00201
00202
if ( dayOfYear % 7 != 0 )
00203 weeknum.setNum( dayOfYear / 7 + 1 );
00204
else
00205 weeknum.setNum( dayOfYear / 7 );
00206 weeknos[i]->setText( weeknum );
00207 }
00208
00209 setUpdatesEnabled(
true );
00210
00211
00212 repaint();
00213 mDayMatrix->repaint();
00214 }
00215
00216
void KDateNavigator::updateConfig()
00217 {
00218
int day;
00219
for(
int i = 0; i < 7; i++ ) {
00220
00221
if ( KGlobal::locale()->weekStartDay() == 1 ) {
00222 day = i + 1;
00223 }
else {
00224
if ( i == 0 ) day = 7;
00225
else day = i;
00226 }
00227
QString dayName = KOGlobals::self()->calendarSystem()->weekDayName( day,
00228
true );
00229
if ( KOPrefs::instance()->mCompactDialogs ) dayName = dayName.left( 1 );
00230 headings[i]->setText( dayName );
00231 }
00232
00233
00234
00235 }
00236
00237
void KDateNavigator::setShowWeekNums(
bool enabled )
00238 {
00239
for(
int i = 0; i < 6; i++ ) {
00240
if( enabled )
00241 weeknos[i]->show();
00242
else
00243 weeknos[i]->hide();
00244 }
00245 }
00246
00247
void KDateNavigator::selectDates(
const DateList &dateList )
00248 {
00249
if ( dateList.count() > 0 ) {
00250 mNavigatorBar->selectDates( dateList );
00251
00252 mSelectedDates = dateList;
00253
00254
00255
00256 mBaseDate = mSelectedDates.first();
00257
00258 updateDates();
00259
00260 mDayMatrix->setSelectedDaysFrom( *( dateList.begin() ),
00261 *( --dateList.end() ) );
00262
00263 updateView();
00264 }
00265 }
00266
00267
void KDateNavigator::wheelEvent (
QWheelEvent *e )
00268 {
00269
if( e->delta() > 0 ) emit goPrevious();
00270
else emit goNext();
00271
00272 e->accept();
00273 }
00274
00275
bool KDateNavigator::eventFilter (
QObject *o,
QEvent *e )
00276 {
00277
if ( e->type() == QEvent::MouseButtonPress ) {
00278
int i;
00279
for( i = 0; i < 6; ++i ) {
00280
if ( o == weeknos[ i ] ) {
00281
QDate weekstart = mDayMatrix->getDate( i * 7 );
00282 emit weekClicked( weekstart );
00283
break;
00284 }
00285 }
00286
return true;
00287 }
else {
00288
return false;
00289 }
00290 }
00291
00292
#include "kdatenavigator.moc"