-rw-r--r-- | korganizer/calendarview.cpp | 5 | ||||
-rw-r--r-- | korganizer/calendarview.h | 1 | ||||
-rw-r--r-- | korganizer/komonthview.cpp | 163 | ||||
-rw-r--r-- | korganizer/komonthview.h | 4 | ||||
-rw-r--r-- | korganizer/koprefs.cpp | 1 | ||||
-rw-r--r-- | korganizer/koprefs.h | 1 | ||||
-rw-r--r-- | korganizer/koviewmanager.cpp | 8 |
7 files changed, 170 insertions, 13 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp index cca73f2..be78057 100644 --- a/korganizer/calendarview.cpp +++ b/korganizer/calendarview.cpp @@ -3853,8 +3853,13 @@ void CalendarView::slotCalendarChanged() NavigatorBar *CalendarView::navigatorBar() { return mNavigatorBar; } +void CalendarView::showNavigatorBar( bool b) +{ + if ( b ) mNavigatorBar->show(); + else mNavigatorBar->hide(); +} void CalendarView::keyPressEvent ( QKeyEvent *e) diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h index 7c59a8d..6ea8287 100644 --- a/korganizer/calendarview.h +++ b/korganizer/calendarview.h @@ -173,8 +173,9 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser void updateSearchDialog(); public slots: + void showNavigatorBar(bool); void showOpenError(); void watchSavedFile(); void recheckTimerAlarm(); void checkNextTimerAlarm(); diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp index 6411156..9888566 100644 --- a/korganizer/komonthview.cpp +++ b/korganizer/komonthview.cpp @@ -464,8 +464,15 @@ void MonthViewCell::insertEvent(Event *event) } else if (mDate == event->dtEnd().date()) { prefix ="<-" ; } } + if ( !event->doesFloat() ) { + if ( mDate == event->dtStart().date () ) + prefix += KGlobal::locale()->formatTime(event->dtStart().time())+" "; + else if ( mDate == event->dtEnd().date () ) + prefix += KGlobal::locale()->formatTime(event->dtEnd().time())+" "; + + } text = prefix + event->summary(); mToolTip += text; } else { if (event->doesFloat()) { @@ -566,14 +573,14 @@ void MonthViewCell::finishUpdateCell() #ifdef DESKTOP_VERSION if (mToolTip != "") QToolTip::add(this,mToolTip,toolTipGroup(),""); #endif - + mItemList->sort(); //setMyPalette(); setMyPalette(); QString text; bool smallDisplay = QApplication::desktop()->width() < 320 && KOPrefs::instance()->mMonthViewSatSunTog; - if ( KOGlobals::self()->calendarSystem()->day( mDate ) == 1 || (mDate.dayOfWeek() == 7 && !smallDisplay ) || KOPrefs::instance()->mMonthShowShort) { + if ( KOPrefs::instance()->mMonthViewWeek || KOGlobals::self()->calendarSystem()->day( mDate ) == 1 || (mDate.dayOfWeek() == 7 && !smallDisplay ) || KOPrefs::instance()->mMonthShowShort) { text = KOGlobals::self()->calendarSystem()->monthName( mDate, true ) + " "; mLabel->resize( mLabelBigSize ); text += QString::number( KOGlobals::self()->calendarSystem()->day(mDate) ); } else { @@ -687,12 +694,12 @@ void MonthViewCell::resizeEvent ( QResizeEvent * ) if ( !isVisible() ){ return; } #endif - int size = height() - mLabel->height(); + int size = height() - mLabel->height() - 2; if ( size > 0 ) mItemList->verticalScrollBar()->setMaximumHeight( size ); - size = width() - mLabel->width(); + size = width() - mLabel->width() -2; if ( size > 0 ) mItemList->horizontalScrollBar()->setMaximumWidth( size ); mLabel->move( width()-mItemList->lineWidth() - mLabel->width(), height()-mItemList->lineWidth() - mLabel->height() ); //mLabel->setMaximumWidth( width() - mItemList->lineWidth()*2); @@ -731,9 +738,9 @@ void MonthViewCell::cellClicked( QListBoxItem *item ) } */ mMonthView->setSelectedCell( this ); - if( KOPrefs::instance()->mEnableMonthScroll ) enableScrollBars( true ); + if( KOPrefs::instance()->mEnableMonthScroll || KOPrefs::instance()->mMonthViewWeek ) enableScrollBars( true ); select(); } void MonthViewCell::contextMenu( QListBoxItem *item ) @@ -762,9 +769,12 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) : KOEventView( calendar, parent, name ), mDaysPerWeek( 7 ), mNumWeeks( 6 ), mNumCells( mDaysPerWeek * mNumWeeks ), mShortDayLabels( false ), mWidthLongDayLabel( 0 ), mSelectedCell( 0 ) { - + mWeekStartsMonday = KGlobal::locale()->weekStartsMonday(); + mShowWeekView = KOPrefs::instance()->mMonthViewWeek; + if ( mShowWeekView ) + mWeekStartsMonday = true; updatePossible = false; mCells.setAutoDelete( true ); mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ; // mDayLayout = new QGridLayout( this ); @@ -816,8 +826,10 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) SIGNAL( showDaySignal( QDate ) ) ); } } + connect( mWeekLabels[mNumWeeks], SIGNAL( clicked() ), + SLOT( switchView() ) ); mContextMenu = eventPopup(); // updateConfig(); //useless here emit incidenceSelected( 0 ); @@ -826,8 +838,16 @@ KOMonthView::KOMonthView(Calendar *calendar, QWidget *parent, const char *name) KOMonthView::~KOMonthView() { delete mContextMenu; } +void KOMonthView::switchView() +{ + mShowWeekView = !mShowWeekView; + KOPrefs::instance()->mMonthViewWeek = mShowWeekView; + emit showNavigator( !mShowWeekView ); + computeLayout(); + updateConfig(); +} int KOMonthView::maxDatesHint() { return mNumCells; @@ -874,8 +894,10 @@ void KOMonthView::updateConfig() { mWeekStartsMonday = KGlobal::locale()->weekStartsMonday(); + if ( mShowWeekView ) + mWeekStartsMonday = true; QFontMetrics fontmetric(mDayLabels[0]->font()); mWidthLongDayLabel = 0; for (int i = 0; i < 7; i++) { @@ -979,17 +1001,19 @@ void KOMonthView::updateView() //QTime ti; //ti.start(); #if 1 int i; - for( i = 0; i < mCells.count(); ++i ) { + int timeSpan = mCells.size()-1; + if ( KOPrefs::instance()->mMonthViewWeek ) + timeSpan = 6; + for( i = 0; i < timeSpan + 1; ++i ) { mCells[i]->startUpdateCell(); } QPtrList<Event> events = calendar()->events(); Event *event; QDateTime dt; bool ok; - int timeSpan = mCells.size()-1; QDate endDate = mStartDate.addDays( timeSpan ); for( event = events.first(); event; event = events.next() ) { // for event if ( event->doesRecur() ) { bool last; @@ -1052,15 +1076,15 @@ void KOMonthView::updateView() for(todo = todos.first(); todo; todo = todos.next()) { //insertTodo( todo ); if ( todo->hasDueDate() ) { int day = mStartDate.daysTo( todo->dtDue().date() ); - if ( day >= 0 && day < mCells.size() ) { + if ( day >= 0 && day < timeSpan + 1) { mCells[day]->insertTodo( todo ); } } } - for( i = 0; i < mCells.count(); ++i ) { + for( i = 0; i < timeSpan+1; ++i ) { mCells[i]->finishUpdateCell(); } processSelectionChange(); mCells[0]->setFocus(); @@ -1087,15 +1111,128 @@ void KOMonthView::resizeEvent(QResizeEvent * e) { computeLayout(); mCells[0]->setFocus(); } +void KOMonthView::computeLayoutWeek() +{ + + int daysToShow; + bool combinedSatSun = false; + if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) { + daysToShow = 6; + combinedSatSun = true; + } + int tWid = topLevelWidget()->size().width(); + int tHei = topLevelWidget()->size().height(); + + int wid = size().width();//e + int hei = size().height()-1; + + if ( ((wid *3)/2) < tWid && (( hei *3) /2) < tHei ) + return; + + if ( wid < hei ) + daysToShow = 2; + else + daysToShow = 3; + mShowSatSunComp = true; + combinedSatSun = true; + + //qDebug("KOMonthView::computeLayout()------------------------------------ "); + QFontMetrics fm ( mWeekLabels[0]->font() ); + int weeklabelwid = fm.width( "888" ); + wid -= weeklabelwid; + + int colWid = wid / daysToShow; + int lastCol = wid - ( colWid*6 ); + int dayLabelHei = mDayLabels[0]->sizeHint().height(); + int cellHei = (hei - (5- daysToShow )*dayLabelHei) /(5- daysToShow ); + int colModulo = wid % daysToShow; + int rowModulo = (hei- (5- daysToShow )*dayLabelHei) % daysToShow-1; + //qDebug("rowmod %d ", rowModulo); + int i; + int x,y,w,h; + x= 0; + y= 0; + w = colWid; + h = dayLabelHei ; + for ( i = 0; i < 7; i++) { + if ( i && !( i % daysToShow) && i < 6) { + y += hei/(5-daysToShow); + x = 0; + } + if ( i == daysToShow-colModulo ) + ++w; + if ( i >= 5 ) { + mDayLabels[i]->setGeometry( x+weeklabelwid,y,w/2,h); + x -= w/2 ; + } + else + mDayLabels[i]->setGeometry( x+weeklabelwid,y,w,h); + x += w; + } + x= 0; + y= dayLabelHei; + w = colWid; + h = cellHei; + for ( i = 0; i < mCells.count(); ++i) { + if ( i > 6 ) { + mCells[i]->hide(); + continue; + } + + w = colWid; + if ( ((i) % daysToShow) >= daysToShow-colModulo ) { + ++w; + } + if ( i == (daysToShow-1-rowModulo)*7) + ++h; + + if ( i >= 5 ) { + if ( i ==5 ) { + mCells[i]->setGeometry ( x+weeklabelwid,y,w,h/2 ); + x -= w ;y += h/2; + } else { + mCells[i]->setGeometry ( x+weeklabelwid,y,w,h-h/2 ); + y -= h/2; + } + } else + mCells[i]->setGeometry ( x+weeklabelwid,y,w,h ); + + + x += w; + if ( x + w/2 > wid ) { + x = 0; + y += h+dayLabelHei ; + } + } + y= dayLabelHei; + h = cellHei ; + mWeekLabels[0]->setGeometry( 0,y,weeklabelwid,hei-dayLabelHei); + for ( i = 1; i < 6; i++) { + mWeekLabels[i]->hide(); + } + mWeekLabels[6]->setGeometry( 0,0,weeklabelwid,dayLabelHei); + // qDebug("RRRRRRRRRRRRR %d %d old %d %d", e->size().width(),e->size().height() , e->oldSize().width(),e->oldSize().height()); + //qDebug("parent %d %d ", topLevelWidget()->size().width(), topLevelWidget()->size().height()); + mShortDayLabels = mDayLabels[0]->width() < mWidthLongDayLabel ; + updateDayLabels(); + bool forceUpdate = !updatePossible; + updatePossible = true; + mWeekLabels[mNumWeeks]->setText( i18n("M")); + if ( forceUpdate ) + updateView(); +} void KOMonthView::computeLayout() { // select the appropriate heading string size. E.g. "Wednesday" or "Wed". // note this only changes the text if the requested size crosses the // threshold between big enough to support the full name and not big // enough. - + if ( mShowWeekView ){ + computeLayoutWeek(); + return; + } int daysToShow = 7; bool combinedSatSun = false; if (mShowSatSunComp = KOPrefs::instance()->mMonthViewSatSunTog ) { daysToShow = 6; @@ -1145,9 +1282,9 @@ void KOMonthView::computeLayout() y= dayLabelHei; w = colWid; h = cellHei ; for ( i = 0; i < mCells.count(); ++i) { - + mCells[i]->show(); w = colWid; if ( ((i) % 7) >= 7-colModulo ) { ++w; } @@ -1176,8 +1313,9 @@ void KOMonthView::computeLayout() } y= dayLabelHei; h = cellHei ; for ( i = 0; i < 6; i++) { + mWeekLabels[i]->show(); if ( i == (6-rowModulo)) ++h; mWeekLabels[i]->setGeometry( 0,y,weeklabelwid,h); y += h; @@ -1188,8 +1326,9 @@ void KOMonthView::computeLayout() mShortDayLabels = mDayLabels[0]->width() < mWidthLongDayLabel ; updateDayLabels(); bool forceUpdate = !updatePossible; updatePossible = true; + mWeekLabels[mNumWeeks]->setText( i18n("W")); if ( forceUpdate ) updateView(); } diff --git a/korganizer/komonthview.h b/korganizer/komonthview.h index b84065e..0bc3743 100644 --- a/korganizer/komonthview.h +++ b/korganizer/komonthview.h @@ -239,27 +239,31 @@ class KOMonthView: public KOEventView void setSelectedCell( MonthViewCell * ); protected slots: + void switchView(); void processSelectionChange(); signals: void nextMonth(); void prevMonth(); + void showNavigator( bool ); void selectWeekNum ( int ); void showDaySignal( QDate ); protected: void resizeEvent(QResizeEvent *); void viewChanged(); void updateDayLabels(); private: + bool mShowWeekView; bool updatePossible; int mDaysPerWeek; int mNumWeeks; int mNumCells; bool mWeekStartsMonday; bool mShowSatSunComp; void computeLayout(); + void computeLayoutWeek(); QPtrVector<MonthViewCell> mCells; QPtrVector<QLabel> mDayLabels; QPtrVector<KOWeekButton> mWeekLabels; diff --git a/korganizer/koprefs.cpp b/korganizer/koprefs.cpp index 0548f14..2fb7c36 100644 --- a/korganizer/koprefs.cpp +++ b/korganizer/koprefs.cpp @@ -206,8 +206,9 @@ KOPrefs::KOPrefs() : addItemColor("MonthViewOddColor",&mMonthViewOddColor,QColor( 160,255,160 )); addItemColor("MonthViewHolidayColor",&mMonthViewHolidayColor,QColor( 255,160,160 )); addItemBool("MonthViewUsesDayColors",&mMonthViewUsesDayColors,true); addItemBool("MonthViewSatSunTog",&mMonthViewSatSunTog,true); + addItemBool("MonthViewWeek",&mMonthViewWeek,false); addItemBool("HightlightDateTimeEdit",&mHightlightDateTimeEdit,false); addItemColor("AppColor1",&mAppColor1,QColor( 130,170,255 )); addItemColor("AppColor2",&mAppColor2,QColor( 174,216,255 )); addItemBool("UseAppColors",&mUseAppColors,false); diff --git a/korganizer/koprefs.h b/korganizer/koprefs.h index 8b849fa..6541af2 100644 --- a/korganizer/koprefs.h +++ b/korganizer/koprefs.h @@ -132,8 +132,9 @@ class KOPrefs : public KPimPrefs QColor mMonthViewOddColor; QColor mMonthViewHolidayColor; bool mMonthViewUsesDayColors; bool mMonthViewSatSunTog; + bool mMonthViewWeek; QColor mAppColor1; QColor mAppColor2; bool mUseAppColors; diff --git a/korganizer/koviewmanager.cpp b/korganizer/koviewmanager.cpp index 7e126d9..6afd203 100644 --- a/korganizer/koviewmanager.cpp +++ b/korganizer/koviewmanager.cpp @@ -224,10 +224,12 @@ void KOViewManager::raiseCurrentView( bool fullScreen, bool callUpdateView ) mCurrentAgendaView = 0; int wid = mMainView->width() ; int hei = mMainView->height(); if ( mCurrentView == mMonthView ) { + if ( !KOPrefs::instance()->mMonthViewWeek ) { mMainView->navigatorBar()->show(); hei -= mMainView->navigatorBar()->sizeHint().height(); + } //mMainView->navigatorBar()->hide(); } else { mMainView->navigatorBar()->hide(); } @@ -526,14 +528,18 @@ void KOViewManager::showMonthView() connect( mMonthView, SIGNAL(nextMonth() ), mMainView->navigatorBar(), SIGNAL(goNextMonth() ) ); connect( mMonthView, SIGNAL(prevMonth() ), mMainView->navigatorBar(), SIGNAL(goPrevMonth() ) ); - mMonthView->updateConfig(); + connect( mMonthView, SIGNAL( showNavigator(bool) ), + mMainView, SLOT ( showNavigatorBar(bool) ) ); } globalFlagBlockAgenda = 1; //mFlagShowNextxDays = false; // if(mMonthView == mCurrentView) return; + if ( KOPrefs::instance()->mMonthViewWeek ) + mMainView->dateNavigator()->selectWeek(); + else mMainView->dateNavigator()->selectMonth(); showView(mMonthView, true ); |