-rw-r--r-- | korganizer/calendarview.cpp | 72 | ||||
-rw-r--r-- | korganizer/calendarview.h | 6 | ||||
-rw-r--r-- | korganizer/datenavigatorcontainer.cpp | 218 | ||||
-rw-r--r-- | korganizer/datenavigatorcontainer.h | 90 | ||||
-rw-r--r-- | korganizer/kdatenavigator.cpp | 38 | ||||
-rw-r--r-- | korganizer/kdatenavigator.h | 8 | ||||
-rw-r--r-- | korganizer/kodaymatrix.cpp | 49 | ||||
-rw-r--r-- | korganizer/kodaymatrix.h | 8 | ||||
-rw-r--r-- | korganizer/korganizerE.pro | 4 | ||||
-rw-r--r-- | korganizer/navigatorbar.cpp | 22 | ||||
-rw-r--r-- | korganizer/navigatorbar.h | 1 |
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 @@ -106,8 +106,9 @@ #include "koagendaview.h" #include "kodialogmanager.h" #include "outgoingdialog.h" #include "incomingdialog.h" +#include "datenavigatorcontainer.h" #include "statusdialog.h" #include "kdatenavigator.h" #include "kotodoview.h" #include "datenavigator.h" @@ -266,10 +267,11 @@ void CalendarView::init() mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, "CalendarView::LeftFrame"); mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); - mDateNavigator = new KDateNavigator(mLeftSplitter, mCalendar, TRUE, - "CalendarView::DateNavigator", QDate::currentDate() ); + mDateNavigator = new DateNavigatorContainer( mLeftSplitter, + "CalendarView::DateNavigator" ); + mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); mTodoList->setNavigator( mNavigator ); mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); @@ -294,54 +296,66 @@ void CalendarView::init() mLeftFrame = mLeftSplitter; #else QWidget *mainBox = new QWidget( this ); - QWidget *leftFrame = new QWidget( mainBox ); - + //QWidget *leftFrame = new QWidget( mainBox ); QBoxLayout * mainBoxLayout; - QBoxLayout * leftFrameLayout; if ( KOPrefs::instance()->mVerticalScreen ) { mainBoxLayout = new QVBoxLayout(mainBox); - leftFrameLayout = new QHBoxLayout(leftFrame ); + //leftFrameLayout = new QHBoxLayout(leftFrame ); + mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mainBox);; + mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left ); } else { mainBoxLayout = new QHBoxLayout(mainBox); - leftFrameLayout = new QVBoxLayout(leftFrame ); + //leftFrameLayout = new QVBoxLayout(leftFrame ); + mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mainBox);; + mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); } + //QBoxLayout * leftFrameLayout; topLayout->addWidget( mainBox ); - mainBoxLayout->addWidget (leftFrame); - mDateNavigator = new KDateNavigator(leftFrame, mCalendar, TRUE, + mainBoxLayout->addWidget (mLeftFrame); + mDateNavigator = new DateNavigatorContainer( mLeftFrame, + "CalendarView::DateNavigator" ); +#if 0 + // FIXME + mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE, "CalendarView::DateNavigator", QDate::currentDate()); +#endif // mDateNavigator->blockSignals( true ); - leftFrameLayout->addWidget( mDateNavigator ); - mFilterView = new KOFilterView(&mFilters,leftFrame,"CalendarView::FilterView"); - mTodoList = new KOTodoView(mCalendar, leftFrame, "todolistsmall"); + //leftFrameLayout->addWidget( mDateNavigator ); + mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall"); + mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView"); mTodoList->setNavigator( mNavigator ); - +#if 0 if ( QApplication::desktop()->width() < 480 ) { leftFrameLayout->addWidget(mFilterView); leftFrameLayout->addWidget(mTodoList, 2 ); } else { leftFrameLayout->addWidget(mTodoList,2 ); leftFrameLayout->addWidget(mFilterView ); } +#endif mFilterView->hide(); QWidget *rightBox = new QWidget( mainBox ); mainBoxLayout->addWidget ( rightBox, 10 ); QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); mRightFrame = new QWidgetStack( rightBox ); rightLayout->addWidget( mRightFrame, 10 ); - mLeftFrame = leftFrame; + //mLeftFrame = (QWidget *)leftFrame; if ( KOPrefs::instance()->mVerticalScreen ) { - mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); - leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); + mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() ); + //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() ); + //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); + //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); } else { - mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); - leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); + mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() ); + //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); + //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); } if ( !KOPrefs::instance()->mShowDateNavigator) - mDateNavigator->hide(); + mLeftFrame->toggle(); //qDebug("Calendarview Size %d %d ", width(), height()); #endif connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), @@ -371,13 +385,13 @@ void CalendarView::init() mNavigator, SLOT( slotMonthSelect( int ) ) ); connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); - - connect( mDateNavigator, SIGNAL( eventDropped( Event * ) ), - SLOT( eventAdded( Event *) ) ); - - connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); +#if 0 + connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ), + SLOT( incidenceAdded( Incidence *) ) ); +#endif + // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); connect( this, SIGNAL( configChanged() ), mDateNavigator, SLOT( updateConfig() ) ); @@ -466,9 +480,9 @@ void CalendarView::init() //US listen for arriving address resultsets connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&))); #endif - + mDateNavigator->setCalendar( mCalendar ); } CalendarView::~CalendarView() @@ -3684,9 +3698,9 @@ QWidgetStack *CalendarView::viewStack() } QWidget *CalendarView::leftFrame() { - return mLeftFrame; + return ( QWidget *)mLeftFrame; } DateNavigator *CalendarView::dateNavigator() { @@ -3694,17 +3708,21 @@ DateNavigator *CalendarView::dateNavigator() } KDateNavigator* CalendarView::dateNavigatorWidget() { - return mDateNavigator; + return mDateNavigator->navigatorView(); } void CalendarView::toggleDateNavigatorWidget() { KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ; + mLeftFrame->toggle(); + // FIXME mShowDateNavigator is not the toggle state of mLeftFrame +#if 0 if (!KOPrefs::instance()->mShowDateNavigator ) mDateNavigator->hide(); else mDateNavigator->show(); +#endif } void CalendarView::addView(KOrg::BaseView *view) { mViewManager->addView(view); diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h index 664d700..fac9a9e 100644 --- a/korganizer/calendarview.h +++ b/korganizer/calendarview.h @@ -38,8 +38,9 @@ #include <libkcal/calendar.h> #include <libkcal/scheduler.h> #include <libkcal/calendarresources.h> #include <libkcal/resourcecalendar.h> +#include <KDGanttMinimizeSplitter.h> #include <korganizer/calendarviewbase.h> #include <ksyncmanager.h> @@ -52,8 +53,9 @@ class KOFilterView; class KOViewManager; class KODialogManager; class KOTodoView; class KDateNavigator; +class DateNavigatorContainer; class DateNavigator; class KOIncidenceEditor; class KDatePicker; class ResourceView; @@ -528,15 +530,15 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser CalPrinter *mCalPrinter; QSplitter *mPanner; QSplitter *mLeftSplitter; - QWidget *mLeftFrame; + KDGanttMinimizeSplitter *mLeftFrame; QWidgetStack *mRightFrame; KDatePicker* mDatePicker; QVBox* mDateFrame; - KDateNavigator *mDateNavigator; // widget showing small month view. + DateNavigatorContainer *mDateNavigator; // widget showing small month view. KOFilterView *mFilterView; ResourceView *mResourceView; 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 @@ +/* + This file is part of KOrganizer. + + Copyright (c) 2001,2002,2003 Cornelius Schumacher <schumacher@kde.org> + Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include <kdebug.h> +#include <klocale.h> + +//#include "koglobals.h" +#include "navigatorbar.h" +#include "kdatenavigator.h" + +#include <kcalendarsystem.h> + +#include "datenavigatorcontainer.h" + +DateNavigatorContainer::DateNavigatorContainer( QWidget *parent, + const char *name ) + : QWidget( parent, name ), mCalendar( 0 ), + mHorizontalCount( 1 ), mVerticalCount( 1 ) +{ + mExtraViews.setAutoDelete( true ); + + mNavigatorView = new KDateNavigator( this, name ); + + connectNavigatorView( mNavigatorView ); +} + +DateNavigatorContainer::~DateNavigatorContainer() +{ +} + +void DateNavigatorContainer::connectNavigatorView( KDateNavigator *v ) +{ + connect( v, SIGNAL( datesSelected( const KCal::DateList & ) ), + SIGNAL( datesSelected( const KCal::DateList & ) ) ); +#if 0 + connect( v, SIGNAL( incidenceDropped( Incidence *, const QDate & ) ), + SIGNAL( incidenceDropped( Incidence *, const QDate & ) ) ); + connect( v, SIGNAL( incidenceDroppedMove( Incidence *, const QDate & ) ), + SIGNAL( incidenceDroppedMove( Incidence *, const QDate & ) ) ); +#endif + connect( v, SIGNAL( weekClicked( const QDate & ) ), + SIGNAL( weekClicked( const QDate & ) ) ); + + connect( v, SIGNAL( goPrevious() ), SIGNAL( goPrevious() ) ); + connect( v, SIGNAL( goNext() ), SIGNAL( goNext() ) ); + + connect( v, SIGNAL( goNextMonth() ), SIGNAL( goNextMonth() ) ); + connect( v, SIGNAL( goPrevMonth() ), SIGNAL( goPrevMonth() ) ); + connect( v, SIGNAL( goNextYear() ), SIGNAL( goNextYear() ) ); + connect( v, SIGNAL( goPrevYear() ), SIGNAL( goPrevYear() ) ); + + connect( v, SIGNAL( monthSelected( int ) ), SIGNAL( monthSelected( int ) ) ); +} + +void DateNavigatorContainer::setCalendar( Calendar *cal ) +{ + mCalendar = cal; + mNavigatorView->setCalendar( cal ); + KDateNavigator *n; + for( n = mExtraViews.first(); n; n = mExtraViews.next() ) { + n->setCalendar( cal ); + } +} + +void DateNavigatorContainer::updateDayMatrix() +{ + mNavigatorView->updateDayMatrix(); + KDateNavigator *n; + for( n = mExtraViews.first(); n; n = mExtraViews.next() ) { + n->updateDayMatrix(); + } +} + +void DateNavigatorContainer::updateToday() +{ + qDebug("DateNavigatorContainer::updateToday() NOT IMPL "); +#if 0 + mNavigatorView->updateToday(); + KDateNavigator *n; + for( n = mExtraViews.first(); n; n = mExtraViews.next() ) { + n->updateToday(); + } +#endif +} + +void DateNavigatorContainer::updateView() +{ + mNavigatorView->updateView(); + KDateNavigator *n; + for( n = mExtraViews.first(); n; n = mExtraViews.next() ) { + n->updateView(); + } +} + +void DateNavigatorContainer::updateConfig() +{ + mNavigatorView->updateConfig(); + KDateNavigator *n; + for( n = mExtraViews.first(); n; n = mExtraViews.next() ) { + n->updateConfig(); + } +} + +void DateNavigatorContainer::selectDates( const DateList &dateList ) +{ + mNavigatorView->selectDates( dateList ); + setBaseDates(); +} + +void DateNavigatorContainer::setBaseDates() +{ + KCal::DateList dateList = mNavigatorView->selectedDates(); + if ( dateList.isEmpty() ) { + kdError() << "DateNavigatorContainer::selectDates() empty list." << endl; + } + QDate baseDate = dateList.first(); + KDateNavigator *n; + for( n = mExtraViews.first(); n; n = mExtraViews.next() ) { + baseDate = baseDate.addDays( baseDate.daysInMonth () ); + n->setBaseDate( baseDate ); + } +} + +void DateNavigatorContainer::resizeEvent( QResizeEvent * ) +{ +#if 0 + kdDebug(5850) << "DateNavigatorContainer::resizeEvent()" << endl; + kdDebug(5850) << " CURRENT SIZE: " << size() << endl; + kdDebug(5850) << " MINIMUM SIZEHINT: " << minimumSizeHint() << endl; + kdDebug(5850) << " SIZEHINT: " << sizeHint() << endl; + kdDebug(5850) << " MINIMUM SIZE: " << minimumSize() << endl; +#endif + + QSize minSize = mNavigatorView->minimumSizeHint(); + +// kdDebug(5850) << " NAVIGATORVIEW minimumSizeHint: " << minSize << endl; + + int verticalCount = size().height() / minSize.height(); + int horizontalCount = size().width() / minSize.width(); + //qDebug("COUNT %d %d %d %d ", verticalCount, horizontalCount , mVerticalCount, mHorizontalCount ); + if ( horizontalCount != mHorizontalCount || + verticalCount != mVerticalCount ) { + uint count = horizontalCount * verticalCount; + if ( count == 0 ) return; + + while ( count > ( mExtraViews.count() + 1 ) ) { + KDateNavigator *n = new KDateNavigator( this ); + mExtraViews.append( n ); + n->setCalendar( mCalendar ); + setBaseDates(); + connectNavigatorView( n ); + n->show(); + } + + while ( count < ( mExtraViews.count() + 1 ) ) { + mExtraViews.removeLast(); + } + + mHorizontalCount = horizontalCount; + mVerticalCount = verticalCount; + } + + int height = size().height() / verticalCount; + int width = size().width() / horizontalCount; + + NavigatorBar *bar = mNavigatorView->navigatorBar(); + if ( horizontalCount > 1 ) bar->showButtons( true, false ); + else bar->showButtons( true, true ); + + mNavigatorView->setGeometry(0, + 0, width, height ); + for( uint i = 0; i < mExtraViews.count(); ++i ) { + int x = ( i + 1 ) % horizontalCount; + int y = ( i + 1 ) / horizontalCount; + + KDateNavigator *view = mExtraViews.at( i ); + bar = view->navigatorBar(); + if ( y > 0 ) bar->showButtons( false, false ); + else { + if ( x + 1 == horizontalCount ) bar->showButtons( false, true ); + else bar->showButtons( false, false ); + } + view->setGeometry( x * width, + y * height, width, height ); + } +} + +QSize DateNavigatorContainer::minimumSizeHint() const +{ + return mNavigatorView->minimumSizeHint(); +} + +QSize DateNavigatorContainer::sizeHint() const +{ + return mNavigatorView->sizeHint(); +} 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 @@ +/* + This file is part of KOrganizer. + + Copyright (c) 2004 Cornelius Schumacher <schumacher@kde.org> + Copyright (C) 2004 Reinhold Kainhofer <reinhold@kainhofer.com> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ +#ifndef DATENAVIGATORCONTAINER_H +#define DATENAVIGATORCONTAINER_H + +class KDateNavigator; + +#include <qwidget.h> +#include <libkcal/calendar.h> +using namespace KCal; + +class DateNavigatorContainer: public QWidget +{ + Q_OBJECT + public: + DateNavigatorContainer( QWidget *parent = 0, const char *name = 0 ); + ~DateNavigatorContainer(); + + /** + Associate date navigator with a calendar. It is used by KODayMatrix. + */ + void setCalendar( Calendar * ); + + QSize minimumSizeHint() const; + QSize sizeHint() const; + KDateNavigator * navigatorView() { return mNavigatorView;} + + public slots: + void selectDates( const KCal::DateList & ); + void updateView(); + void updateConfig(); + void updateDayMatrix(); + void updateToday(); + + signals: + void datesSelected( const KCal::DateList & ); + void incidenceDropped( Incidence *, const QDate & ); + void incidenceDroppedMove( Incidence *, const QDate & ); + void weekClicked( const QDate &); + + void goPrevious(); + void goNext(); + + void goNextMonth(); + void goPrevMonth(); + void goNextYear(); + void goPrevYear(); + + void monthSelected( int month ); + + protected: + void resizeEvent( QResizeEvent * ); + + void setBaseDates(); + void connectNavigatorView( KDateNavigator *v ); + + private: + KDateNavigator *mNavigatorView; + + KCal::Calendar *mCalendar; + + QPtrList<KDateNavigator> mExtraViews; + + int mHorizontalCount; + int mVerticalCount; +}; + +#endif diff --git a/korganizer/kdatenavigator.cpp b/korganizer/kdatenavigator.cpp index c08f44f..e76a85a 100644 --- a/korganizer/kdatenavigator.cpp +++ b/korganizer/kdatenavigator.cpp @@ -44,18 +44,14 @@ #include "navigatorbar.h" #include "kdatenavigator.h" -KDateNavigator::KDateNavigator( QWidget *parent, Calendar *calendar, - bool show_week_nums, const char *name, - QDate startDate ) +KDateNavigator::KDateNavigator( QWidget *parent, const char *name ) : QFrame(parent, name), updateTimer(0L) { - mCalendar = calendar; - - setFrameStyle(QFrame::NoFrame); - + setFrameStyle(QFrame::NoFrame); + QDate startDate = QDate::currentDate(); QGridLayout *topLayout = new QGridLayout(this,8,8); if (! startDate.isValid()) { qDebug("KDateNavigator::invalid startdate "); @@ -63,9 +59,9 @@ KDateNavigator::KDateNavigator( QWidget *parent, Calendar *calendar, } mSelectedDates.append(startDate); m_MthYr = startDate; - m_bShowWeekNums = show_week_nums; + m_bShowWeekNums = true; setFont( KOPrefs::instance()->mDateNavigatorFont ); mNavigatorBar = new NavigatorBar( startDate, this ); topLayout->addMultiCellWidget( mNavigatorBar, 0, 0, 0, 7 ); @@ -95,18 +91,17 @@ KDateNavigator::KDateNavigator( QWidget *parent, Calendar *calendar, for( i = 0; i < 6; i++ ) { weeknos[i] = new QLabel(this); weeknos[i]->setAlignment(AlignCenter); //weeknos[i]->setFont(QFont("Arial", 10)); - if(!show_week_nums) { + if(!m_bShowWeekNums) { weeknos[i]->hide(); } weeknos[i]->installEventFilter(this); topLayout->addWidget(weeknos[i],i+2,0); } - daymatrix = new KODayMatrix( this, mCalendar, dayone, - "KDateNavigator::DayMatrix"); + daymatrix = new KODayMatrix( this, "KDateNavigator::DayMatrix"); daymatrix->setFrameStyle(QFrame::Panel|QFrame::Sunken); daymatrix->setLineWidth(1); connect( daymatrix, SIGNAL( selected( const KCal::DateList & ) ), @@ -119,9 +114,28 @@ KDateNavigator::KDateNavigator( QWidget *parent, Calendar *calendar, // read settings from configuration file. updateConfig(); enableRollover(FollowMonth); - setFixedSize ( sizeHint() ); + //setFixedSize ( sizeHint() ); +} +void KDateNavigator::setCalendar( Calendar *cal ) +{ + daymatrix->setCalendar( cal ); +} + +void KDateNavigator::setBaseDate( const QDate &date ) +{ + m_MthYr = date; + + updateDates(); + updateView(); + + KCal::DateList dates; + dates.append( date ); + mNavigatorBar->selectDates( dates ); + + daymatrix->clearSelection(); + daymatrix->repaint(); } void KDateNavigator::enableRollover(RolloverType r) { diff --git a/korganizer/kdatenavigator.h b/korganizer/kdatenavigator.h index 3ae1648..0aeb77a 100644 --- a/korganizer/kdatenavigator.h +++ b/korganizer/kdatenavigator.h @@ -41,11 +41,9 @@ class NavigatorBar; class KDateNavigator: public QFrame { Q_OBJECT public: - KDateNavigator( QWidget *parent = 0, Calendar *calendar = 0, - bool show_week_numbers = false, const char *name = 0, - QDate date = QDate::currentDate() ); + KDateNavigator( QWidget *parent = 0,const char *name = 0 ); ~KDateNavigator(); /** The DateNavigator automatically checks for * the passage of midnight. If rollover type is @@ -60,8 +58,12 @@ class KDateNavigator: public QFrame enum RolloverType { None, FollowDay, FollowMonth } ; void enableRollover( RolloverType ); void setShowWeekNums( bool enabled ); + void setCalendar( Calendar * ); + void setBaseDate( const QDate & ); + KCal::DateList selectedDates() const { return mSelectedDates; } + NavigatorBar *navigatorBar() const { return mNavigatorBar; } public slots: void selectDates( const KCal::DateList & ); void updateView(); diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp index 989f758..a886f4a 100644 --- a/korganizer/kodaymatrix.cpp +++ b/korganizer/kodaymatrix.cpp @@ -86,12 +86,17 @@ void DynamicTip::maybeTip( const QPoint &pos ) const int KODayMatrix::NOSELECTION = -1000; const int KODayMatrix::NUMDAYS = 42; +KODayMatrix::KODayMatrix( QWidget *parent, const char *name ) + : QFrame( parent, name ), mCalendar( 0 ) + +#if 0 KODayMatrix::KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const char *name) : QFrame(parent, name) +#endif { - mCalendar = calendar; + mPendingUpdateBeforeRepaint = false; // initialize dynamic arrays days = new QDate[NUMDAYS]; @@ -117,8 +122,16 @@ KODayMatrix::KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const connect (mRepaintTimer ,SIGNAL(timeout()), this, SLOT ( repaintViewTimed() )); mDayChanged = false; updateView(); } +void KODayMatrix::setCalendar( Calendar *cal ) +{ + mCalendar = cal; + + setAcceptDrops( mCalendar ); + + updateEvents(); +} QColor KODayMatrix::getShadedColor(QColor color) { QColor shaded; @@ -185,8 +198,12 @@ void KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end) { mSelStart = startdate.daysTo(start); mSelEnd = startdate.daysTo(end); } +void KODayMatrix::clearSelection() +{ + mSelEnd = mSelStart = NOSELECTION; +} void KODayMatrix::recalculateToday() { @@ -216,10 +233,14 @@ void KODayMatrix::repaintViewTimed() repaint(false); } void KODayMatrix::updateViewTimed() { - mUpdateTimer->stop(); + if ( !mCalendar ) { + qDebug("NOT CAL "); + return; + } + //qDebug("KODayMatrix::updateViewTimed "); for(int i = 0; i < NUMDAYS; i++) { // if events are set for the day then remember to draw it bold QPtrList<Event> eventlist = mCalendar->events(days[i]); Event *event; @@ -293,8 +314,30 @@ void KODayMatrix::updateView(QDate actdate) mUpdateTimer->start( 2000 ); #endif } } +void KODayMatrix::updateEvents() +{ + if ( !mCalendar ) return; + + for( int i = 0; i < NUMDAYS; i++ ) { + // if events are set for the day then remember to draw it bold + QPtrList<Event> eventlist = mCalendar->events( days[ i ] ); + int numEvents = eventlist.count(); + Event *event; + for( event = eventlist.first(); event != 0;event=eventlist.next()) { + ushort recurType = event->doesRecur(); + + if ( ( recurType == Recurrence::rDaily && + !KOPrefs::instance()->mDailyRecur ) || + ( recurType == Recurrence::rWeekly && + !KOPrefs::instance()->mWeeklyRecur ) ) { + numEvents--; + } + } + events[ i ] = numEvents; + } +} const QDate& KODayMatrix::getDate(int offset) { if (offset < 0 || offset > NUMDAYS-1) { @@ -427,9 +470,9 @@ void KODayMatrix::dropEvent(QDropEvent *e) { #ifndef KORG_NODND // kdDebug() << "KODayMatrix::dropEvent(e) begin" << endl; - if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { + if (!mCalendar || !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { e->ignore(); return; } diff --git a/korganizer/kodaymatrix.h b/korganizer/kodaymatrix.h index 2dd112a..ba4853f 100644 --- a/korganizer/kodaymatrix.h +++ b/korganizer/kodaymatrix.h @@ -116,9 +116,10 @@ public: * @param date start date of the matrix (is expected to be already fixed). It is * assumed that this date is the first week day to be shown in the matrix. * @param name name of the widget */ - KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const char *name ); + KODayMatrix( QWidget *parent, const char *name ); + //KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const char *name ); /** destructor that deallocates all dynamically allocated private members. */ ~KODayMatrix(); @@ -130,14 +131,15 @@ public: * @param actdate recalculates the day matrix to show NUMDAYS starting from this * date. */ void updateView(QDate actdate); + void updateEvents(); /** returns the QDate object associated with day indexed by the * supplied offset. */ const QDate& getDate(int offset); - + void setCalendar( Calendar * ); /** returns the official name of this holy day or 0 if there is no label * for this day. */ QString getHolidayLabel(int offset); @@ -151,9 +153,9 @@ public: * start and ending with end. Theview must be manually updated by calling * repaint. (?) */ void setSelectedDaysFrom(const QDate& start, const QDate& end); - + void clearSelection(); /** Is today visible in the view? Keep this in sync with * the values today (below) can take. */ diff --git a/korganizer/korganizerE.pro b/korganizer/korganizerE.pro index e6c3f8d..91b5a01 100644 --- a/korganizer/korganizerE.pro +++ b/korganizer/korganizerE.pro @@ -27,9 +27,9 @@ LIBS += -L$(QPEDIR)/lib INTERFACES = kofilterview_base.ui #filteredit_base.ui -HEADERS = \ +HEADERS = datenavigatorcontainer.h \ wordsgerman.h \ filteredit_base.h \ alarmclient.h \ calendarview.h \ @@ -91,9 +91,9 @@ HEADERS = \ timespanview.h \ version.h \ ../kalarmd/alarmdialog.h -SOURCES = \ +SOURCES = datenavigatorcontainer.cpp \ filteredit_base.cpp \ calendarview.cpp \ datenavigator.cpp \ docprefs.cpp \ diff --git a/korganizer/navigatorbar.cpp b/korganizer/navigatorbar.cpp index 934e153..27d4d17 100644 --- a/korganizer/navigatorbar.cpp +++ b/korganizer/navigatorbar.cpp @@ -183,8 +183,30 @@ NavigatorBar::NavigatorBar( const QDate & date, QWidget *parent, const char *nam NavigatorBar::~NavigatorBar() { } +void NavigatorBar::showButtons( bool left, bool right ) +{ + if ( left ) { + mPrevYear->show(); + mPrevMonth->show(); + } else { + mPrevYear->hide(); + mPrevMonth->hide(); + } + + if ( right ) { + mNextYear->show(); + mNextMonth->show(); + } else { + mNextYear->hide(); + mNextMonth->hide(); + } + if ( !left && !right ) { + mSelectMonth->setMaximumWidth( 1024 ); + mSelectMonth->setSizePolicy( QSizePolicy ( QSizePolicy::Expanding ,QSizePolicy::Fixed ) ); + } +} void NavigatorBar::selectMonth() { diff --git a/korganizer/navigatorbar.h b/korganizer/navigatorbar.h index 803c817..4442caa 100644 --- a/korganizer/navigatorbar.h +++ b/korganizer/navigatorbar.h @@ -37,8 +37,9 @@ class NavigatorBar: public QWidget Q_OBJECT public: NavigatorBar( const QDate & date, QWidget *parent = 0, const char *name = 0 ); ~NavigatorBar(); + void showButtons( bool left, bool right ); public slots: void selectDates( const KCal::DateList & ); void selectMonth(); |