-rw-r--r-- | korganizer/kofilterview.cpp | 95 | ||||
-rw-r--r-- | korganizer/kofilterview.h | 14 |
2 files changed, 63 insertions, 46 deletions
diff --git a/korganizer/kofilterview.cpp b/korganizer/kofilterview.cpp index 20118aa..1335d7e 100644 --- a/korganizer/kofilterview.cpp +++ b/korganizer/kofilterview.cpp @@ -132,38 +132,20 @@ void KOCalEditView::selectCal(int id ,bool 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 ); } @@ -177,17 +159,43 @@ 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; @@ -199,10 +207,10 @@ void KOCalEditView::deleteCal( int 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() ) ); } @@ -284,18 +292,21 @@ 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 ); @@ -309,7 +320,7 @@ void KOCalEditView::readConfig() //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 ) @@ -338,13 +349,14 @@ 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.") ); @@ -431,22 +443,23 @@ void KOCalEditView::enableAlarm() } 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(); } } diff --git a/korganizer/kofilterview.h b/korganizer/kofilterview.h index 02107cf..874fc6a 100644 --- a/korganizer/kofilterview.h +++ b/korganizer/kofilterview.h @@ -70,7 +70,9 @@ class KONewCalPrefs : public QDialog lay->addWidget( cancel ); connect ( ok,SIGNAL(clicked() ),this , SLOT ( checkValid() ) ); connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); - setMinimumWidth( 220 ); + int minwid = 220; + if ( QApplication::desktop()->width() >= 320 ) minwid = 300; + setMinimumWidth( minwid ); resize(sizeHint() ); } @@ -163,9 +165,10 @@ class KOCalRadioButton : public QRadioButton //setMaximumWidth( 10 ); } + int num() { return mNumber;} void setNum ( int num ) {mNumber = num; } signals: - void selectNum ( int, bool ); + void selectNum ( int ); private: int mNumber; void keyPressEvent ( QKeyEvent * e ) @@ -174,7 +177,7 @@ private: } private slots : - void bottonClicked( bool b) { if ( mNumber > 0 ) emit selectNum ( mNumber , b); } + void bottonClicked( bool b) { if ( mNumber > 0 ) emit selectNum ( mNumber); } }; @@ -216,7 +219,7 @@ class KOCalEditView : public QScrollView void enableAlarm(); void disableRO(); void deleteAll(); - void selectStdCal(int,bool ); + void selectStdCal(int); void selectCal(int,bool ); void selectCalAlarm(int,bool ); void selectReadOnly(int,bool ); @@ -225,6 +228,7 @@ class KOCalEditView : public QScrollView void infoCal(int) ; void readConfig(); void defaultInfo(); + void findNewStandard(); signals: void alarmEnabled ( int cal, bool enable ); void calendarEnabled ( int cal, bool enable ); @@ -237,7 +241,7 @@ class KOCalEditView : public QScrollView private: QWidget *mw; - void toggleList ( QPtrList<KOCalCheckButton> ); + void toggleList ( QPtrList<KOCalCheckButton> , bool b = true ); QPtrList<KOCalRadioButton> mStdandardB; QPtrList<KOCalCheckButton> mEnabledB; QPtrList<KOCalCheckButton> mAlarmB; |