-rw-r--r-- | korganizer/mainwindow.cpp | 67 |
1 files changed, 54 insertions, 13 deletions
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp index 2af605f..98d3e35 100644 --- a/korganizer/mainwindow.cpp +++ b/korganizer/mainwindow.cpp | |||
@@ -514,48 +514,67 @@ void MainWindow::toggleBeamReceive() | |||
514 | #endif | 514 | #endif |
515 | } | 515 | } |
516 | void MainWindow::showMaximized () | 516 | void MainWindow::showMaximized () |
517 | { | 517 | { |
518 | #ifndef DESKTOP_VERSION | 518 | #ifndef DESKTOP_VERSION |
519 | if ( ! globalFlagBlockStartup ) | 519 | if ( ! globalFlagBlockStartup ) |
520 | if ( mClosed ) | 520 | if ( mClosed ) |
521 | mView->goToday(); | 521 | mView->goToday(); |
522 | #endif | 522 | #endif |
523 | QWidget::showMaximized () ; | 523 | QWidget::showMaximized () ; |
524 | mClosed = false; | 524 | mClosed = false; |
525 | } | 525 | } |
526 | |||
527 | bool MainWindow::askForQuitOnSaveError() | ||
528 | { | ||
529 | bool retval = false; | ||
530 | switch( QMessageBox::information( this, "KO/Pi", | ||
531 | i18n("Error saving data") + "!\n" + | ||
532 | i18n("You can save all data\nto another file via\nFile->Export->Export All Data") + "!\n" + | ||
533 | i18n("Do you really want\nto close KO/Pi?"), | ||
534 | i18n(" Yes, close "), i18n("No"), | ||
535 | 0, 1 ) ) { | ||
536 | case 0: | ||
537 | retval = true; | ||
538 | break; | ||
539 | default: | ||
540 | break; | ||
541 | } | ||
542 | return retval; | ||
543 | } | ||
544 | |||
526 | void MainWindow::closeEvent( QCloseEvent* ce ) | 545 | void MainWindow::closeEvent( QCloseEvent* ce ) |
527 | { | 546 | { |
528 | 547 | ||
529 | 548 | ||
530 | 549 | ||
531 | if ( ! KOPrefs::instance()->mAskForQuit ) { | 550 | if ( ! KOPrefs::instance()->mAskForQuit ) { |
532 | saveOnClose(); | 551 | saveOnClose(); |
533 | if ( mCalendarModifiedFlag ) { | 552 | if ( mCalendarModifiedFlag && !askForQuitOnSaveError() ) { |
534 | ce->ignore(); | 553 | ce->ignore(); |
535 | return; | 554 | return; |
536 | } | 555 | } |
537 | mClosed = true; | 556 | mClosed = true; |
538 | ce->accept(); | 557 | ce->accept(); |
539 | return; | 558 | return; |
540 | 559 | ||
541 | } | 560 | } |
542 | 561 | ||
543 | switch( QMessageBox::information( this, "KO/Pi", | 562 | switch( QMessageBox::information( this, "KO/Pi", |
544 | i18n("Do you really want\nto close KO/Pi?"), | 563 | i18n("Do you really want\nto close KO/Pi?"), |
545 | i18n("Close"), i18n("No"), | 564 | i18n("Close"), i18n("No"), |
546 | 0, 0 ) ) { | 565 | 0, 0 ) ) { |
547 | case 0: | 566 | case 0: |
548 | saveOnClose(); | 567 | saveOnClose(); |
549 | if ( mCalendarModifiedFlag ) { | 568 | if ( mCalendarModifiedFlag && !askForQuitOnSaveError() ) { |
550 | ce->ignore(); | 569 | ce->ignore(); |
551 | return; | 570 | return; |
552 | } | 571 | } |
553 | mClosed = true; | 572 | mClosed = true; |
554 | ce->accept(); | 573 | ce->accept(); |
555 | break; | 574 | break; |
556 | case 1: | 575 | case 1: |
557 | ce->ignore(); | 576 | ce->ignore(); |
558 | break; | 577 | break; |
559 | case 2: | 578 | case 2: |
560 | 579 | ||
561 | default: | 580 | default: |
@@ -1156,24 +1175,28 @@ void MainWindow::initActions() | |||
1156 | action = new QAction( "load_cal", i18n("Load Calendar Backup"), 0, | 1175 | action = new QAction( "load_cal", i18n("Load Calendar Backup"), 0, |
1157 | this ); | 1176 | this ); |
1158 | action->addTo( importMenu ); | 1177 | action->addTo( importMenu ); |
1159 | connect( action, SIGNAL( activated() ), SLOT( loadCalendar() ) ); | 1178 | connect( action, SIGNAL( activated() ), SLOT( loadCalendar() ) ); |
1160 | #endif | 1179 | #endif |
1161 | action = new QAction( "save_cal", i18n("Save Backup..."), 0, | 1180 | action = new QAction( "save_cal", i18n("Save Backup..."), 0, |
1162 | this ); | 1181 | this ); |
1163 | action->addTo( importMenu ); | 1182 | action->addTo( importMenu ); |
1164 | connect( action, SIGNAL( activated() ), SLOT( saveCalendar() ) ); | 1183 | connect( action, SIGNAL( activated() ), SLOT( saveCalendar() ) ); |
1165 | importMenu->insertSeparator(); | 1184 | importMenu->insertSeparator(); |
1166 | importMenu->insertItem( i18n("Import"), importMenu_X ); | 1185 | importMenu->insertItem( i18n("Import"), importMenu_X ); |
1167 | //importMenu->insertSeparator(); | 1186 | //importMenu->insertSeparator(); |
1187 | action = new QAction( "export ical", i18n("Export All Data"), 0, | ||
1188 | this ); | ||
1189 | action->addTo( exportMenu_X ); | ||
1190 | connect( action, SIGNAL( activated() ), SLOT( exportICalendar() ) ); | ||
1168 | action = new QAction( "import_qtopia", i18n("Export VCalendar"), 0, | 1191 | action = new QAction( "import_qtopia", i18n("Export VCalendar"), 0, |
1169 | this ); | 1192 | this ); |
1170 | action->addTo( exportMenu_X ); | 1193 | action->addTo( exportMenu_X ); |
1171 | connect( action, SIGNAL( activated() ), SLOT( exportVCalendar() ) ); | 1194 | connect( action, SIGNAL( activated() ), SLOT( exportVCalendar() ) ); |
1172 | 1195 | ||
1173 | 1196 | ||
1174 | //LR | 1197 | //LR |
1175 | QPopupMenu *ex2phone = new QPopupMenu( this ); | 1198 | QPopupMenu *ex2phone = new QPopupMenu( this ); |
1176 | ex2phone->insertItem(i18n("Complete calendar..."), 1 ); | 1199 | ex2phone->insertItem(i18n("Complete calendar..."), 1 ); |
1177 | ex2phone->insertItem(i18n("Filtered calendar..."), 2 ); | 1200 | ex2phone->insertItem(i18n("Filtered calendar..."), 2 ); |
1178 | connect( ex2phone, SIGNAL( activated(int) ), this, SLOT( exportToPhone( int)) ); | 1201 | connect( ex2phone, SIGNAL( activated(int) ), this, SLOT( exportToPhone( int)) ); |
1179 | exportMenu_X->insertItem( i18n("Export to phone"), ex2phone ); | 1202 | exportMenu_X->insertItem( i18n("Export to phone"), ex2phone ); |
@@ -1958,25 +1981,25 @@ void MainWindow::slotModifiedChanged( bool ) | |||
1958 | int msec; | 1981 | int msec; |
1959 | if ( mCalendarModifiedFlag ) { | 1982 | if ( mCalendarModifiedFlag ) { |
1960 | //qDebug(" MainWindow timer is running "); | 1983 | //qDebug(" MainWindow timer is running "); |
1961 | return; | 1984 | return; |
1962 | } | 1985 | } |
1963 | // we store the changes after 1 minute, | 1986 | // we store the changes after 1 minute, |
1964 | // and for safety reasons after 10 minutes again | 1987 | // and for safety reasons after 10 minutes again |
1965 | if ( !mSyncManager->blockSave() ) | 1988 | if ( !mSyncManager->blockSave() ) |
1966 | msec = (1000 * 60*KOPrefs::instance()->mAutoSaveInterval) +1000; | 1989 | msec = (1000 * 60*KOPrefs::instance()->mAutoSaveInterval) +1000; |
1967 | else | 1990 | else |
1968 | msec = 1000 * 600; | 1991 | msec = 1000 * 600; |
1969 | mSaveTimer.start( msec, true ); // 1 minute | 1992 | mSaveTimer.start( msec, true ); // 1 minute |
1970 | mSaveTime.restart(); | 1993 | mSaveTimerStart = QDateTime::currentDateTime(); |
1971 | mSaveDelay = msec/1000; | 1994 | mSaveDelay = msec/1000; |
1972 | qDebug("KO: Saving File in %d secs!", msec/1000); | 1995 | qDebug("KO: Saving File in %d secs!", msec/1000); |
1973 | mCalendarModifiedFlag = true; | 1996 | mCalendarModifiedFlag = true; |
1974 | } | 1997 | } |
1975 | void MainWindow::saveStopTimer() | 1998 | void MainWindow::saveStopTimer() |
1976 | { | 1999 | { |
1977 | mSaveTimer.stop(); | 2000 | mSaveTimer.stop(); |
1978 | } | 2001 | } |
1979 | void MainWindow::backupAllFiles() | 2002 | void MainWindow::backupAllFiles() |
1980 | { | 2003 | { |
1981 | QDate reference ( 2000,1,1); | 2004 | QDate reference ( 2000,1,1); |
1982 | int daysTo = reference.daysTo ( QDate::currentDate() ); | 2005 | int daysTo = reference.daysTo ( QDate::currentDate() ); |
@@ -2008,30 +2031,32 @@ void MainWindow::backupAllFiles() | |||
2008 | setCaption(i18n("Backup succesfully finished" )); | 2031 | setCaption(i18n("Backup succesfully finished" )); |
2009 | } else if ( retval == 2 ){ | 2032 | } else if ( retval == 2 ){ |
2010 | setCaption(i18n("Backup globally disabled" )); | 2033 | setCaption(i18n("Backup globally disabled" )); |
2011 | qDebug("KO: Backup globally cancelled."); | 2034 | qDebug("KO: Backup globally cancelled."); |
2012 | // backup globally cancelled | 2035 | // backup globally cancelled |
2013 | KPimGlobalPrefs::instance()->mBackupEnabled = false; | 2036 | KPimGlobalPrefs::instance()->mBackupEnabled = false; |
2014 | } | 2037 | } |
2015 | // retval == 3: do nothing, try again later | 2038 | // retval == 3: do nothing, try again later |
2016 | } | 2039 | } |
2017 | void MainWindow::save() | 2040 | void MainWindow::save() |
2018 | { | 2041 | { |
2019 | if ( mSaveDelay ) { | 2042 | if ( mSaveDelay ) { |
2020 | if ( mSaveDelay + 60 < mSaveTime.elapsed()/1000 ) { | 2043 | int elapsed = mSaveTimerStart.secsTo( QDateTime::currentDateTime() ); |
2021 | qDebug("KO: Save delay %d. Elapsed save time %d ", mSaveDelay, mSaveTime.elapsed()/1000 ); | 2044 | if ( mSaveDelay < elapsed ) { |
2022 | qDebug("KO: Restarting save timer"); | 2045 | qDebug("KO: Pending save after wakeup from suspend detected."); |
2023 | int msec = 10000; | 2046 | qDebug("KO: Save delay %d sec. Elapsed save time %d sec.", mSaveDelay, elapsed ); |
2024 | mSaveTimer.start( msec, true ); // 1 minute | 2047 | qDebug("KO: Restarting save timer to save in 15 sec."); |
2025 | mSaveTime.restart(); | 2048 | int msec = 15000; |
2049 | mSaveTimer.start( msec, true ); | ||
2050 | mSaveTimerStart = QDateTime::currentDateTime(); | ||
2026 | mSaveDelay = msec/1000; | 2051 | mSaveDelay = msec/1000; |
2027 | return; | 2052 | return; |
2028 | } | 2053 | } |
2029 | } | 2054 | } |
2030 | 2055 | ||
2031 | if ( mView->viewManager()->journalView() ) | 2056 | if ( mView->viewManager()->journalView() ) |
2032 | mView->viewManager()->journalView()->checkModified(); | 2057 | mView->viewManager()->journalView()->checkModified(); |
2033 | if ( !mCalendarModifiedFlag ) { | 2058 | if ( !mCalendarModifiedFlag ) { |
2034 | qDebug("KO: Calendar not modified. Nothing saved."); | 2059 | qDebug("KO: Calendar not modified. Nothing saved."); |
2035 | return; | 2060 | return; |
2036 | } | 2061 | } |
2037 | if ( mSyncManager->blockSave() ) { | 2062 | if ( mSyncManager->blockSave() ) { |
@@ -2566,56 +2591,72 @@ void MainWindow::importFile( QString fn, bool quick ) | |||
2566 | 2591 | ||
2567 | void MainWindow::importIcal() | 2592 | void MainWindow::importIcal() |
2568 | { | 2593 | { |
2569 | 2594 | ||
2570 | QString fn =KOPrefs::instance()->mLastImportFile; | 2595 | QString fn =KOPrefs::instance()->mLastImportFile; |
2571 | 2596 | ||
2572 | fn =KFileDialog:: getOpenFileName( fn, i18n("Import filename(*.ics/*.vcs)"), this ); | 2597 | fn =KFileDialog:: getOpenFileName( fn, i18n("Import filename(*.ics/*.vcs)"), this ); |
2573 | if ( fn == "" ) | 2598 | if ( fn == "" ) |
2574 | return; | 2599 | return; |
2575 | importFile( fn, true ); | 2600 | importFile( fn, true ); |
2576 | 2601 | ||
2577 | } | 2602 | } |
2578 | 2603 | void MainWindow::exportCalendar( bool iCalFormat ) | |
2579 | void MainWindow::exportVCalendar() | ||
2580 | { | 2604 | { |
2581 | QString fn = KOPrefs::instance()->mLastVcalFile; | 2605 | QString fn = KOPrefs::instance()->mLastVcalFile; |
2606 | if ( iCalFormat ) { | ||
2607 | fn = QDir::homeDirPath()+"/kopiexport.ics"; | ||
2608 | fn = KFileDialog::getSaveFileName( fn, i18n("Export iCal filename(*.ics)"), this ); | ||
2609 | } | ||
2610 | else | ||
2582 | fn = KFileDialog::getSaveFileName( fn, i18n("Export vcal filename(*.vcs)"), this ); | 2611 | fn = KFileDialog::getSaveFileName( fn, i18n("Export vcal filename(*.vcs)"), this ); |
2583 | if ( fn == "" ) | 2612 | if ( fn == "" ) |
2584 | return; | 2613 | return; |
2585 | QFileInfo info; | 2614 | QFileInfo info; |
2586 | info.setFile( fn ); | 2615 | info.setFile( fn ); |
2587 | QString mes; | 2616 | QString mes; |
2588 | bool createbup = true; | 2617 | bool createbup = true; |
2589 | if ( info. exists() ) { | 2618 | if ( info. exists() ) { |
2590 | mes = i18n("Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); | 2619 | mes = i18n("Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); |
2591 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, | 2620 | int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, |
2592 | i18n("Overwrite!"), i18n("Cancel"), 0, | 2621 | i18n("Overwrite!"), i18n("Cancel"), 0, |
2593 | 0, 1 ); | 2622 | 0, 1 ); |
2594 | if ( result != 0 ) { | 2623 | if ( result != 0 ) { |
2595 | createbup = false; | 2624 | createbup = false; |
2596 | } | 2625 | } |
2597 | } | 2626 | } |
2598 | if ( createbup ) { | 2627 | if ( createbup ) { |
2599 | if ( mView->exportVCalendar( fn ) ) { | 2628 | bool success = false; |
2600 | KOPrefs::instance()->mLastVcalFile = fn; | 2629 | if ( iCalFormat ) |
2630 | success = mView->exportICalendar( fn ); | ||
2631 | else | ||
2632 | success = mView->exportVCalendar( fn ); | ||
2633 | if ( success ) { | ||
2601 | if ( fn.length() > 20 ) | 2634 | if ( fn.length() > 20 ) |
2602 | mes = i18n("KO/Pi:Exported to ...%1").arg(fn.right(20)) ; | 2635 | mes = i18n("KO/Pi:Exported to ...%1").arg(fn.right(20)) ; |
2603 | else | 2636 | else |
2604 | mes = i18n("KO/Pi:Exported to %1").arg(fn ); | 2637 | mes = i18n("KO/Pi:Exported to %1").arg(fn ); |
2605 | setCaption(mes); | 2638 | setCaption(mes); |
2606 | } | 2639 | } |
2607 | } | 2640 | } |
2608 | 2641 | ||
2609 | } | 2642 | } |
2643 | void MainWindow::exportICalendar() | ||
2644 | { | ||
2645 | exportCalendar( true ); | ||
2646 | } | ||
2647 | void MainWindow::exportVCalendar() | ||
2648 | { | ||
2649 | exportCalendar( false ); | ||
2650 | } | ||
2610 | QString MainWindow::sentSyncFile() | 2651 | QString MainWindow::sentSyncFile() |
2611 | { | 2652 | { |
2612 | #ifdef DESKTOP_VERSION | 2653 | #ifdef DESKTOP_VERSION |
2613 | return QDir::convertSeparators( locateLocal( "tmp", "copysynccal.ics" ) ); | 2654 | return QDir::convertSeparators( locateLocal( "tmp", "copysynccal.ics" ) ); |
2614 | #else | 2655 | #else |
2615 | return QString( "/tmp/copysynccal.ics" ); | 2656 | return QString( "/tmp/copysynccal.ics" ); |
2616 | #endif | 2657 | #endif |
2617 | } | 2658 | } |
2618 | 2659 | ||
2619 | void MainWindow::syncFileRequest() | 2660 | void MainWindow::syncFileRequest() |
2620 | { | 2661 | { |
2621 | while ( mSyncManager->blockSave() ) { | 2662 | while ( mSyncManager->blockSave() ) { |