-rw-r--r-- | korganizer/kofilterview.cpp | 95 |
1 files changed, 54 insertions, 41 deletions
diff --git a/korganizer/kofilterview.cpp b/korganizer/kofilterview.cpp index 20118aa..1335d7e 100644 --- a/korganizer/kofilterview.cpp +++ b/korganizer/kofilterview.cpp @@ -131,40 +131,22 @@ void KOCalEditView::selectCal(int id ,bool b) emit calendarEnabled ( id, b ); emit needsUpdate(); } -void KOCalEditView::selectStdCal( int id, bool b ) +void KOCalEditView::selectStdCal( int id ) { - - if ( !b ) { - KOCalCheckButton* it = (KOCalCheckButton*) sender(); - if ( it ) { - it->blockSignals( true ); - it->setChecked( true ); - it->blockSignals( false ); - return; - } - return; - } - KOCalRadioButton* sen = (KOCalRadioButton*) sender(); KOCalRadioButton* it = mStdandardB.first(); while ( it ) { - if ( it->isChecked() ) { - if ( it != sen ) { - it->blockSignals( true ); - it->setChecked( false ); - it->blockSignals( false ); - break; - } - } + it->blockSignals( true ); + it->setChecked( it->num() == id ); + it->blockSignals( false ); it = mStdandardB.next(); } KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); while ( kkf ) { - kkf->isStandard = false; + kkf->isStandard = (kkf->mCalNumber == id ); kkf = KOPrefs::instance()->mCalendars.next(); } - KOPrefs::instance()->getCalendar( id )->isStandard = true; emit setCalendarDefault ( id ); } void KOCalEditView::selectCalAlarm(int id ,bool b ) @@ -176,19 +158,45 @@ void KOCalEditView::selectCalAlarm(int id ,bool b ) void KOCalEditView::selectReadOnly(int id ,bool b ) { KOPrefs::instance()->getCalendar( id )->isReadOnly = b; emit calendarReadonly ( id , b ); - if ( KOPrefs::instance()->getCalendar( id )->isStandard && b && id > 1 ) { - KOPrefs::instance()->getCalendar( id )->isStandard = false; - KOPrefs::instance()->getCalendar( 1 )->isStandard = true; - mStdandardB.at(0)->setChecked( true ); - mStdandardB.at(id-1)->setChecked( false ); - emit setCalendarDefault ( 1 ); + if ( KOPrefs::instance()->getCalendar( id )->isStandard && b ) { + findNewStandard(); + } else { + if ( !b ){ + KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); + while ( kkf ) { + if (kkf->isReadOnly && kkf->isStandard ) { + selectStdCal( id ); + break; + } + kkf = KOPrefs::instance()->mCalendars.next(); + } + } } mStdandardB.at(id-1)->setEnabled( !b ); emit needsUpdate(); } +void KOCalEditView::findNewStandard() +{ + bool found = false; + KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); + while ( kkf ) { + if (!kkf->isReadOnly && !kkf->mErrorOnLoad ) { + found = true; + selectStdCal( kkf->mCalNumber ); + break; + } + kkf = KOPrefs::instance()->mCalendars.next(); + } + if ( !found ) { + KMessageBox::error( this,i18n("\nNO\n WRITEABLE\n CALENDAR\n FOUND!\n\nPlease fix your calendar settings!\n"), + i18n("Houston, we have a problem!") ); + + } +} + void KOCalEditView::setColor( const QColor& c, int id ) { KOPrefs::instance()->getCalendar( id )->mDefaultColor = c; emit needsUpdate(); @@ -198,12 +206,12 @@ void KOCalEditView::deleteCal( int id ) KopiCalendarFile * kkf = KOPrefs::instance()->getCalendar( id ); QString name = kkf->mName; QString file = KGlobal::formatMessage ( kkf->mFileName ,0 ); if ( KMessageBox::warningContinueCancel( this, i18n("The calendar <b>%1</b> is displaying file <b>%2</b>. Do you want to remove this calendar from KO/Pi? (The file is not removed!)").arg(name).arg(file) ) != KMessageBox::Continue ) return; - if ( kkf->isStandard ) - selectStdCal( 1, true ); + bool findnewstd = kkf->isStandard; emit removeCalendar ( id ); KOPrefs::instance()->mCalendars.remove ( kkf ); + if ( findnewstd ) findNewStandard(); emit needsUpdate(); QTimer::singleShot( 0, this, SLOT ( readConfig() ) ); } void KOCalEditView::infoCal( int id ) @@ -283,20 +291,23 @@ void KOCalEditView::readConfig() KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); int row = 1; + bool errorLoadStandard = false; while ( kkf ) { int iii = 0; KOCalRadioButton* rb = new KOCalRadioButton( mw ); mainLayout->addWidget( rb,row,0 );mStdandardB.append( rb ); rb->setChecked( kkf->isStandard ); + if ( kkf->isStandard && ( kkf->mErrorOnLoad || kkf->isReadOnly ) ) + errorLoadStandard = true; rb->setNum( kkf->mCalNumber ); - connect (rb, SIGNAL (selectNum(int,bool)), SLOT ( selectStdCal(int,bool) ) ); + connect (rb, SIGNAL (selectNum(int)), SLOT ( selectStdCal(int) ) ); if ( kkf->mErrorOnLoad || kkf->isReadOnly ) rb->setEnabled( false ); KOCalCheckButton* cb = new KOCalCheckButton( mw ); mainLayout->addWidget( cb,row,++iii );mEnabledB.append( cb ); - cb->setChecked( kkf->isEnabled ); + cb->setChecked( kkf->isEnabled && !kkf->mErrorOnLoad ); cb->setNum( kkf->mCalNumber ); if ( kkf->mErrorOnLoad ) cb->setEnabled( false ); connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectCal(int,bool) ) ); @@ -308,9 +319,9 @@ void KOCalEditView::readConfig() //lab = new QLabel (" ", mw ); //mainLayout->addWidget( lab,row,++iii ); cb = new KOCalCheckButton( mw ); mainLayout->addWidget( cb,row,++iii );mAlarmB.append( cb ); - cb->setChecked( kkf->isAlarmEnabled ); + cb->setChecked( kkf->isAlarmEnabled && !kkf->mErrorOnLoad); cb->setNum( kkf->mCalNumber ); connect (cb, SIGNAL (selectNum(int,bool)), SLOT ( selectCalAlarm(int,bool) ) ); if ( kkf->mErrorOnLoad ) cb->setEnabled( false ); @@ -337,15 +348,16 @@ void KOCalEditView::readConfig() } ++row; kkf = KOPrefs::instance()->mCalendars.next(); } + if ( errorLoadStandard ) + findNewStandard(); lab = new QLabel ( "", mw ); mainLayout->addWidget( lab,row,0 ); mw->show(); } - void KOCalEditView::defaultInfo() { KMessageBox::information( this, i18n("Please choose the <b>default calendar</b> in this column. Newly created or imported items are added to the default calendar.") ); } @@ -430,24 +442,25 @@ void KOCalEditView::enableAlarm() toggleList( mAlarmB ); } void KOCalEditView::disableRO() { - toggleList( mROB ); + toggleList( mROB, false ); } -void KOCalEditView::toggleList ( QPtrList<KOCalCheckButton> list ) +void KOCalEditView::toggleList ( QPtrList<KOCalCheckButton> list , bool enable ) { - bool dis = false; + bool dis = !enable; KOCalCheckButton* it = list.first(); while ( it ) { - if ( !it->isChecked() ) { - dis = true; + if ( !it->isChecked() == enable && it->isEnabled() ) { + dis = !dis; break; } it = list.next(); } it = list.first(); while ( it ) { - it->setChecked(dis); + if ( it->isEnabled() ) + it->setChecked(dis); it = list.next(); } } void KOCalEditView::deleteAll() |