diff options
Diffstat (limited to 'korganizer/komonthview.cpp')
-rw-r--r-- | korganizer/komonthview.cpp | 255 |
1 files changed, 195 insertions, 60 deletions
diff --git a/korganizer/komonthview.cpp b/korganizer/komonthview.cpp index 85d9049b6..264525418 100644 --- a/korganizer/komonthview.cpp +++ b/korganizer/komonthview.cpp @@ -62,13 +62,15 @@ //-------------------------------------------------------------------------- KOMonthCellToolTip::KOMonthCellToolTip( TQWidget *parent, + Calendar *calendar, + const TQDate &date, KNoScrollListBox *lv ) - : TQToolTip( parent ) + : TQToolTip( parent ), mCalendar( calendar ), mDate( date ) { eventlist = lv; } -void KOMonthCellToolTip::maybeTip( const TQPoint & pos ) +void KOMonthCellToolTip::maybeTip( const TQPoint &pos ) { TQRect r; TQListBoxItem *it = eventlist->itemAt( pos ); @@ -78,7 +80,7 @@ void KOMonthCellToolTip::maybeTip( const TQPoint & pos ) /* Calculate the rectangle. */ r=eventlist->itemRect( it ); /* Show the tip */ - TQString tipText( IncidenceFormatter::toolTipString( i->incidence() ) ); + TQString tipText( IncidenceFormatter::toolTipStr( mCalendar, i->incidence(), mDate ) ); if ( !tipText.isEmpty() ) { tip( r, tipText ); } @@ -199,13 +201,14 @@ MonthViewItem::MonthViewItem( Incidence *incidence, const TQDateTime &qd, mDateTime = qd; mEventPixmap = KOGlobals::self()->smallIcon( "appointment" ); + mBirthdayPixmap = KOGlobals::self()->smallIcon( "calendarbirthday" ); + mAnniversaryPixmap= KOGlobals::self()->smallIcon( "calendaranniversary" ); mTodoPixmap = KOGlobals::self()->smallIcon( "todo" ); mTodoDonePixmap = KOGlobals::self()->smallIcon( "checkedbox" ); mAlarmPixmap = KOGlobals::self()->smallIcon( "bell" ); mRecurPixmap = KOGlobals::self()->smallIcon( "recur" ); mReplyPixmap = KOGlobals::self()->smallIcon( "mail_reply" ); - mResourceColor = TQColor(); mEvent = false; mTodo = false; mTodoDone = false; @@ -214,6 +217,26 @@ MonthViewItem::MonthViewItem( Incidence *incidence, const TQDateTime &qd, mReply = false; } +TQColor MonthViewItem::catColor() const +{ + TQColor retColor; + if ( !mIncidence ) { + return retColor; + } + + TQStringList categories = mIncidence->categories(); + TQString cat; + if ( !categories.isEmpty() ) { + cat = categories.first(); + } + if ( cat.isEmpty() ) { + retColor = KOPrefs::instance()->unsetCategoryColor(); + } else { + retColor = *( KOPrefs::instance()->categoryColor( cat ) ); + } + return retColor; +} + void MonthViewItem::paint( TQPainter *p ) { #if QT_VERSION >= 0x030000 @@ -222,25 +245,86 @@ void MonthViewItem::paint( TQPainter *p ) bool sel = selected(); #endif - TQColor bgColor = palette().color( TQPalette::Normal, - sel ? TQColorGroup::Highlight : TQColorGroup::Background ); - int offset=0; - if ( KOPrefs::instance()->monthViewUsesResourceColor() && - mResourceColor.isValid() ) { - p->setBackgroundColor( mResourceColor ); - p->eraseRect( 0, 0, listBox()->maxItemWidth(), height( listBox() ) ); - offset=2; + TQColor bgColor = TQColor(); // Default invalid color; + if ( mIncidence && mTodo ) { + if ( static_cast<Todo*>( mIncidence )->isOverdue() ) { + bgColor = KOPrefs::instance()->todoOverdueColor(); + } else if ( static_cast<Todo*>( mIncidence )->dtDue().date() == TQDate::currentDate() ) { + bgColor = KOPrefs::instance()->todoDueTodayColor(); + } + } + + if ( !bgColor.isValid() ) { + if ( KOPrefs::instance()->monthItemColors() == KOPrefs::MonthItemResourceOnly || + KOPrefs::instance()->monthItemColors() == KOPrefs::MonthItemResourceInsideCategoryOutside ) { + bgColor = resourceColor(); + } else { + bgColor = catColor(); + } + + if ( !bgColor.isValid() ) { + bgColor = palette().color( TQPalette::Normal, + sel ? TQColorGroup::Highlight : + TQColorGroup::Background ); + } + } + + TQColor frameColor; + if ( KOPrefs::instance()->monthItemColors() == KOPrefs::MonthItemResourceOnly || + KOPrefs::instance()->monthItemColors() == KOPrefs::MonthItemCategoryInsideResourceOutside ) { + frameColor = resourceColor(); + } else { + frameColor = catColor(); + } + + if ( mIncidence ) { + if ( mIncidence->categories().isEmpty() && + KOPrefs::instance()->monthItemColors() == KOPrefs::MonthItemResourceInsideCategoryOutside ) { + frameColor = bgColor; + } + + if ( mIncidence->categories().isEmpty() && + KOPrefs::instance()->monthItemColors() == KOPrefs::MonthItemCategoryInsideResourceOutside ) { + bgColor = frameColor; + } } - if ( KOPrefs::instance()->monthViewUsesCategoryColor() ) { - p->setBackgroundColor( bgColor ); - p->eraseRect( offset, offset, listBox()->maxItemWidth()-2*offset, height( listBox() )-2*offset ); + + if ( !frameColor.isValid() ) { + frameColor = palette().color( TQPalette::Normal, + sel ? TQColorGroup::Highlight : + TQColorGroup::Foreground ); + } else { + frameColor = frameColor.dark( 115 ); } + + // draw the box for the item + p->setBackgroundColor( frameColor ); + p->eraseRect( 0, 0, listBox()->maxItemWidth(), height( listBox() ) ); + int offset = 2; + p->setBackgroundColor( bgColor ); + p->eraseRect( offset, offset, listBox()->maxItemWidth()-2*offset, height( listBox() )-2*offset ); + int x = 3; -// Do NOT put on the event pixmap because it takes up too much space -// if ( mEvent ) { -// p->drawPixmap( x, 0, mEventPixmap ); -// x += mEventPixmap.width() + 2; -// } + + bool specialEvent = false; + if ( mEvent ) { + if ( mIncidence->customProperty( "KABC", "BIRTHDAY" ) == "YES" ) { + specialEvent = true; + if ( mIncidence->customProperty( "KABC", "ANNIVERSARY" ) == "YES" ) { + p->drawPixmap( x, 0, mAnniversaryPixmap ); + x += mAnniversaryPixmap.width() + 2; + } else { + p->drawPixmap( x, 0, mBirthdayPixmap ); + x += mBirthdayPixmap.width() + 2; + } + // Do NOT put on the event pixmap because it takes up too much space + //} else { + // p->drawPixmap( x, 0, mEventPixmap ); + // x += mEventPixmap.width() + 2; + // + } + } + if ( mTodo ) { p->drawPixmap( x, 0, mTodoPixmap ); x += mTodoPixmap.width() + 2; @@ -249,11 +333,11 @@ void MonthViewItem::paint( TQPainter *p ) p->drawPixmap( x, 0, mTodoDonePixmap ); x += mTodoPixmap.width() + 2; } - if ( mRecur ) { + if ( mRecur && !specialEvent ) { p->drawPixmap( x, 0, mRecurPixmap ); x += mRecurPixmap.width() + 2; } - if ( mAlarm ) { + if ( mAlarm && !specialEvent ) { p->drawPixmap( x, 0, mAlarmPixmap ); x += mAlarmPixmap.width() + 2; } @@ -300,7 +384,8 @@ int MonthViewItem::width( const TQListBox *lb ) const MonthViewCell::MonthViewCell( KOMonthView *parent) : TQWidget( parent ), - mMonthView( parent ), mPrimary( false ), mHoliday( false ) + mMonthView( parent ), mPrimary( false ), mHoliday( false ), + isSelected( false ) { TQVBoxLayout *topLayout = new TQVBoxLayout( this ); @@ -314,9 +399,6 @@ MonthViewCell::MonthViewCell( KOMonthView *parent) mItemList->setFrameStyle( TQFrame::Panel | TQFrame::Plain ); mItemList->setLineWidth( 1 ); - new KOMonthCellToolTip( mItemList->viewport(), - static_cast<KNoScrollListBox *>( mItemList ) ); - topLayout->addWidget( mItemList ); mLabel->raise(); @@ -357,6 +439,11 @@ void MonthViewCell::setDate( const TQDate &date ) } mLabel->setText( text ); + new KOMonthCellToolTip( mItemList->viewport(), + monthView()->calendar(), + mDate, + static_cast<KNoScrollListBox *>( mItemList ) ); + resizeEvent( 0 ); } @@ -368,10 +455,11 @@ TQDate MonthViewCell::date() const void MonthViewCell::setFrameWidth() { // show current day with a thicker frame - if ( mDate == TQDate::currentDate() ) + if ( mDate == TQDate::currentDate() ) { mItemList->setLineWidth( 3 ); - else + } else if ( !isSelected ) { mItemList->setLineWidth( 1 ); + } } void MonthViewCell::setPrimary( bool primary ) @@ -490,13 +578,16 @@ class MonthViewCell::CreateItemVisitor : mItem = new MonthViewItem( event, dt, text ); mItem->setEvent( true ); - if (KOPrefs::instance()->monthViewUsesCategoryColor()) { + if ( KOPrefs::instance()->monthItemColors() == KOPrefs::MonthItemCategoryOnly || + KOPrefs::instance()->monthItemColors() == KOPrefs::MonthItemCategoryInsideResourceOutside ) { TQStringList categories = event->categories(); TQString cat = categories.first(); if (cat.isEmpty()) { - mItem->setPalette(TQPalette(KOPrefs::instance()->mEventColor, KOPrefs::instance()->mEventColor)); + mItem->setPalette(TQPalette(KOPrefs::instance()->unsetCategoryColor(), + KOPrefs::instance()->unsetCategoryColor()) ); } else { - mItem->setPalette(TQPalette(*(KOPrefs::instance()->categoryColor(cat)), *(KOPrefs::instance()->categoryColor(cat)))); + mItem->setPalette(TQPalette(*(KOPrefs::instance()->categoryColor(cat)), + *(KOPrefs::instance()->categoryColor(cat)))); } } else { mItem->setPalette( mStandardPalette ); @@ -514,7 +605,8 @@ class MonthViewCell::CreateItemVisitor : if ( !KOPrefs::instance()->showAllDayTodo() ) return false; TQDateTime dt( mDate ); - if ( todo->hasDueDate() && !todo->doesFloat() ) { + if ( todo->hasDueDate() && !todo->doesFloat() && + todo->dtDue().time() != TQTime( 0,0 ) && todo->dtDue().time().isValid() ) { text += KGlobal::locale()->formatTime( todo->dtDue().time() ); text += ' '; dt.setTime( todo->dtDue().time() ); @@ -547,9 +639,9 @@ void MonthViewCell::addIncidence( Incidence *incidence, CreateItemVisitor& v, in item->setAlarm( incidence->isAlarmEnabled() ); item->setRecur( incidence->recurrenceType() ); - TQColor resourceColor = KOHelper::resourceColor( mCalendar, incidence ); + TQColor resourceColor = KOHelper::resourceColor( monthView()->calendar(), incidence ); if ( !resourceColor.isValid() ) - resourceColor = KOPrefs::instance()->mEventColor; + resourceColor = KOPrefs::instance()->unsetCategoryColor(); item->setResourceColor( resourceColor ); // FIXME: Find the correct position (time-wise) to insert the item. @@ -661,6 +753,9 @@ TQDate MonthViewCell::selectedIncidenceDate() void MonthViewCell::select() { + + isSelected = true; + // setSelectedCell will deselect currently selected cells mMonthView->setSelectedCell( this ); @@ -676,6 +771,8 @@ void MonthViewCell::select() void MonthViewCell::deselect() { + isSelected = false; + mItemList->clearSelection(); mItemList->setFrameStyle( TQFrame::Plain | TQFrame::Panel ); setFrameWidth(); @@ -693,7 +790,7 @@ void MonthViewCell::defaultAction( TQListBoxItem *item ) select(); if ( !item ) { - emit newEventSignal( date() ); + emit newEventSignal( 0/*ResourceCalendar*/, TQString()/*subResource*/, date() ); } else { MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); Incidence *incidence = eventItem->incidence(); @@ -708,9 +805,10 @@ void MonthViewCell::contextMenu( TQListBoxItem *item ) if ( item ) { MonthViewItem *eventItem = static_cast<MonthViewItem *>( item ); Incidence *incidence = eventItem->incidence(); - if ( incidence ) mMonthView->showEventContextMenu( incidence, date() ); - } - else { + if ( incidence ) { + mMonthView->showEventContextMenu( monthView()->calendar(), incidence, mDate ); + } + } else { mMonthView->showGeneralContextMenu(); } } @@ -764,14 +862,13 @@ KOMonthView::KOMonthView( Calendar *calendar, TQWidget *parent, const char *name for( row = 0; row < mNumWeeks; ++row ) { for( col = 0; col < mDaysPerWeek; ++col ) { MonthViewCell *cell = new MonthViewCell( this ); - cell->setCalendar(calendar); mCells.insert( row * mDaysPerWeek + col, cell ); dayLayout->addWidget( cell, row + 2, col ); - connect( cell, TQT_SIGNAL( defaultAction( Incidence * ) ), - TQT_SLOT( defaultAction( Incidence * ) ) ); - connect( cell, TQT_SIGNAL( newEventSignal( const TQDate & ) ), - TQT_SIGNAL( newEventSignal( const TQDate & ) ) ); + connect( cell, TQT_SIGNAL(defaultAction(Incidence *)), + TQT_SLOT(defaultAction(Incidence *)) ); + connect( cell, TQT_SIGNAL(newEventSignal(ResourceCalendar *,const TQString &,const TQDate &)), + TQT_SIGNAL(newEventSignal(ResourceCalendar *,const TQString &,const TQDate &)) ); } dayLayout->setRowStretch( row + 2, 1 ); } @@ -780,7 +877,7 @@ KOMonthView::KOMonthView( Calendar *calendar, TQWidget *parent, const char *name updateConfig(); - emit incidenceSelected( 0 ); + emit incidenceSelected( 0, TQDate() ); } KOMonthView::~KOMonthView() @@ -810,7 +907,7 @@ Incidence::List KOMonthView::selectedIncidences() return selected; } -DateList KOMonthView::selectedDates() +DateList KOMonthView::selectedIncidenceDates() { DateList selected; @@ -851,6 +948,8 @@ void KOMonthView::updateConfig() for ( uint i = 0; i < mCells.count(); ++i ) { mCells[i]->updateConfig(); } + + showLabel( !KOPrefs::instance()->fullViewMonth() ); } void KOMonthView::updateDayLabels() @@ -883,11 +982,8 @@ void KOMonthView::showDates( const TQDate &start, const TQDate & ) mLabel->setText( i18n( "monthname year", "%1 %2" ) .arg( calSys->monthName( start ) ) .arg( calSys->year( start ) ) ); - if ( !KOPrefs::instance()->fullViewMonth() ) { - mLabel->show(); - } else { - mLabel->hide(); - } + + showLabel( !KOPrefs::instance()->fullViewMonth() ); bool primary = false; uint i; @@ -899,8 +995,9 @@ void KOMonthView::showDates( const TQDate &start, const TQDate & ) mCells[i]->setDate( date ); mDateToCell[ date ] = mCells[ i ]; - if( date == start ) + if( date == start ) { mCells[i]->select(); + } mCells[i]->setPrimary( primary ); @@ -916,7 +1013,22 @@ void KOMonthView::showDates( const TQDate &start, const TQDate & ) updateView(); } -void KOMonthView::showIncidences( const Incidence::List & ) +TQDateTime KOMonthView::selectionStart() +{ + if ( mSelectedCell) { + return TQDateTime( mSelectedCell->date() ); + } else { + return TQDateTime(); + } +} + +TQDateTime KOMonthView::selectionEnd() +{ + // Only one cell can be selected (for now) + return selectionStart(); +} + +void KOMonthView::showIncidences( const Incidence::List &, const TQDate & ) { kdDebug(5850) << "KOMonthView::showIncidences( const Incidence::List & ) is not implemented yet." << endl; } @@ -941,8 +1053,14 @@ class KOMonthView::GetDateVisitor : public IncidenceBase::Visitor } bool visit( Todo *todo ) { if ( todo->hasDueDate() ) { - mStartDate = todo->dtDue(); - mEndDate = todo->dtDue(); + if ( todo->dtDue().time() != TQTime( 0, 0 ) && + todo->dtDue().time().isValid() ) { + mStartDate = todo->dtDue(); + mEndDate = todo->dtDue(); + } else { + mStartDate = TQDateTime( todo->dtDue().date(), TQTime( 23,59 ) ); + mEndDate = mStartDate; + } }// else // return false; return true; @@ -1048,9 +1166,9 @@ void KOMonthView::resizeEvent( TQResizeEvent * ) } } -void KOMonthView::showEventContextMenu( Incidence *incidence, const TQDate &qd ) +void KOMonthView::showEventContextMenu( Calendar *cal, Incidence *incidence, const TQDate &qd ) { - mEventContextMenu->showIncidencePopup( incidence, qd ); + mEventContextMenu->showIncidencePopup( cal, incidence, qd ); } void KOMonthView::showGeneralContextMenu() @@ -1066,18 +1184,26 @@ void KOMonthView::setSelectedCell( MonthViewCell *cell ) mSelectedCell = cell; if ( !mSelectedCell ) - emit incidenceSelected( 0 ); + emit incidenceSelected( 0, TQDate() ); else - emit incidenceSelected( mSelectedCell->selectedIncidence() ); + if ( selectedIncidenceDates().isEmpty() ) { + emit incidenceSelected( mSelectedCell->selectedIncidence(), TQDate() ); + } else { + emit incidenceSelected( mSelectedCell->selectedIncidence(), selectedIncidenceDates().first() ); + } } void KOMonthView::processSelectionChange() { Incidence::List incidences = selectedIncidences(); if (incidences.count() > 0) { - emit incidenceSelected( incidences.first() ); + if ( selectedIncidenceDates().isEmpty() ) { + emit incidenceSelected( incidences.first(), TQDate() ); + } else { + emit incidenceSelected( incidences.first(), selectedIncidenceDates().first() ); + } } else { - emit incidenceSelected( 0 ); + emit incidenceSelected( 0, TQDate() ); } } @@ -1088,3 +1214,12 @@ void KOMonthView::clearSelection() mSelectedCell = 0; } } + +void KOMonthView::showLabel( bool show ) +{ + if ( show ) { + mLabel->show(); + } else { + mLabel->hide(); + } +} |