-rw-r--r-- | bin/kdepim/korganizer/germantranslation.txt | 9 | ||||
-rw-r--r-- | kalarmd/simplealarmdaemonimpl.cpp | 8 | ||||
-rw-r--r-- | korganizer/calendarview.cpp | 13 | ||||
-rw-r--r-- | korganizer/calendarview.h | 3 | ||||
-rw-r--r-- | korganizer/mainwindow.cpp | 69 | ||||
-rw-r--r-- | korganizer/mainwindow.h | 5 |
6 files changed, 74 insertions, 33 deletions
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt index 2c0d626..6f76c7e 100644 --- a/bin/kdepim/korganizer/germantranslation.txt +++ b/bin/kdepim/korganizer/germantranslation.txt @@ -130,25 +130,25 @@ { "Delete Event...","Lösche Termin..." }, { "Delete Event","Lösche Termin" }, { "&Delete...","Lösche..." }, { "Delete...","Lösche..." }, { "Delete","Lösche" }, { "Delete Todo...","Lösche Todo..." }, { "Delete To-Do","Lösche Todo" }, { "Deleting item %d ...","Lösche Eintrag %d..." }, { "Descriptions","Beschreibungen" }, { "Deselect all","Deselektiere Alle" }, { "Details","Details" }, { "Dinner","Abendessen" }, -{ "Do you really want\nto close KO/Pi?","Möchten Sie wirklich\nKO/PI verlassen?" }, +{ "Do you really want\nto close KO/Pi?","Möchten Sie wirklich\nKO/PI beenden?" }, { "Due Date","Fällig am" }, { "Due: ","Fällig: "}, { "Due Time","Fällig um" }, { "Due:","Fällig:"}, { "Duration: ","Dauer: " }, { "Edit...","Bearbeite..." }, { "Edit Event...","Bearbeite Termin..." }, { "Edit Event","Bearbeite Termin" }, { "Edit exceptions","Bearbeite Ausnahmen" }, { "EditorBox:","Editor Fenster:" }, { "Edit Recurrence Range","Bearbeite Wiederholung" }, { "Edit Todo...","Berabeite Todo..." }, @@ -760,24 +760,25 @@ { "Filter selected: ","Gewählter Filter: " }, { "Toggle Cancel","Gecancelt ändern" }, { "&Toggle Cancel","Gecancel&t ändern" }, { "Configure Toolbar","Konfiguriere Toolbar" }, { "Stretched TB","Gedehnte TB" }, { "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" }, { "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" }, { "When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing","Wenn ein Kalender doppelt importiert\nwird, werden doppelte Einträge ignoriert!\nSie können eine Backup Datei anlegen unter\nDatei - Speichere Kalender Backup\num den Import rückgängig machen zu können.\n" }, { "Not supported \non desktop!\n","Nur verfügbar auf PDA!" }, { "Imported file successfully","Datei erfolgreich importiert" }, { "Error importing file","Fehler beim Importieren der Datei" }, { "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" }, +{ "Export iCal filename(*.ics)","Export iCal Dateiname(*.ics)" }, { "Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n","Zu speichernde Datei\existiert bereits!\nExist. Datei vom:\n%1\nÜberschreiben?\n" }, { "Overwrite!","Überschreiben!" }, { "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n","Import Datei \n...%1\nvom:\n%2\nDuplizierte Einträge\nwerden nicht importiert!\n" }, { "Load backup filename","Lade Backup Dateiname" }, { "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" }, { "KO/Pi:Loaded %1","KO/Pi:Geladen %1" }, { "Save backup filename","Speichere Backup Dateiname" }, { "Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n","Backup Datei\nexistiert bereits!\nAlte Backup Datei vom:\n%1\nÜberschreiben?\n" }, { "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" }, { "Details of attendee","Teilnehmerdetails" }, { "Work phone:\n","Telefon Arbeit:\n" }, { "Work mobile phone:\n","Mobiltelefon Arbeit:\n" }, @@ -1549,24 +1550,24 @@ { "Enable conflict detection","Schalte Konflikterkennung an" }, { "Filter for the edited event","Filter für den bearbeiteten Termin" }, { "Filter for other events","Filter für die anderen Termine" }, { "Check Allday with Allday","Prüfe GanzTag mit GanzTag" }, { "Check Allday with NonAllday","Prüfe GanzTag mit NichtGanzTag" }, { "Check NonAllday with Allday","Prüfe NichtGanzTag mit GanzTag" }, { "Check NonAllday with NonAllday","Prüfe NichtGanzTag mit NichtGanzTag" }, { "Conflict detection","Konflikterkennung" }, { "Loading calendar files ... please wait","Lade Kalenderdateien ... bitte warten" }, { "Show multiday allday ev. in date nav.","Zeige Multi-Ganzt.Term.in Datums Nav." }, { "Include events which "show as free"","Inklusive Termine mit "Zeige Zeit als frei"" }, { "Conflict detection checks an <b>edited event</b> with <b>other events</b> for overlapping.","Konflikterkennung prüft einen <b>bearbeiteten Termin</b> auf Überschneidungen mit <b>anderen Terminen</b>." }, -{ "","" }, -{ "","" }, -{ "","" }, +{ " Yes, close "," Ja, beenden " }, +{ "Export All Data","Exportiere alle Daten" }, +{ "You can save all data\nto another file via\nFile->Export->Export All Data","Sie können alle Daten in\neine andere Datei speichern unter\nDatei->Exportiere->Exportiere alle Daten" }, { "","" }, { "","" }, { "","" }, { "","" }, { "","" }, { "","" }, { "","" }, { "","" }, { "","" }, diff --git a/kalarmd/simplealarmdaemonimpl.cpp b/kalarmd/simplealarmdaemonimpl.cpp index 2acfacf..a0ac232 100644 --- a/kalarmd/simplealarmdaemonimpl.cpp +++ b/kalarmd/simplealarmdaemonimpl.cpp @@ -58,32 +58,24 @@ SimpleAlarmDaemonImpl::SimpleAlarmDaemonImpl( QWidget *parent ) mPopUp->insertSeparator(); mPopUp->insertItem( "Todo List", this, SLOT ( showTodo() ) ); mPopUp->insertSeparator(); mPopUp->insertItem( "Addresses", this, SLOT ( showAdd() ) ); mPopUp->insertSeparator(); mPopUp->insertItem( "Edit Journal", this, SLOT ( writeJournal() ) ); mPopUp->insertItem( "New Event", this, SLOT ( newEvent() ) ); mPopUp->insertItem( "New Todo", this, SLOT ( newTodo() ) ); mPopUp->insertItem( "New Mail", this, SLOT ( newMail() ) ); mPopUp->insertSeparator(); mPopUp->insertItem( "Multi Sync", this, SLOT ( ringSync() ) ); mTimerPopUp = new QPopupMenu( this ); - QFont fon = mTimerPopUp->font(); - int points = 16; - if ( QApplication::desktop()->width() < 480 ) - points = 12; - fon.setPointSize( points ); - //qDebug("point s %d ", fon.pointSize()); - mTimerPopUp->setFont( fon ); - mPopUp->setFont( fon ); mBeepPopUp = new QPopupMenu( this ); mSoundPopUp = new QPopupMenu( this ); mPausePopUp = new QPopupMenu( this ); QPopupMenu* savePopUp = new QPopupMenu( this ); savePopUp->insertItem( "Save", 0 ); savePopUp->insertItem( "Load", 1 ); mSoundPopUp->insertItem( "Buzzer", 0 ); mSoundPopUp->insertItem( "Wav file", 1 ); mPausePopUp->insertItem( " 1 sec", 1 ); mPausePopUp->insertItem( " 2 sec", 2 ); mPausePopUp->insertItem( " 3 sec", 3 ); mPausePopUp->insertItem( " 5 sec", 5 ); diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp index 79fb727..2ba8528 100644 --- a/korganizer/calendarview.cpp +++ b/korganizer/calendarview.cpp @@ -2538,24 +2538,25 @@ bool CalendarView::saveCalendars() while ( cal ) { if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { mCalendar->setDefaultCalendar( cal->mCalNumber ); mCalendar->setDefaultCalendarEnabledOnly(); if ( saveCalendar( cal->mFileName ) ) cal->mLoadDt = QDateTime::currentDateTime(); else saveError += cal->mName + "\n"; } cal = calendars.next(); } restoreCalendarSettings(); + //saveError = "test error"; if ( !saveError.isEmpty() ) { saveError = KGlobal::formatMessage( i18n("Calendar(s) not saved:"),0 )+"\n" + saveError; KMessageBox::error(this, saveError, i18n("Error saving data")); return false; } return true; } bool CalendarView::saveCalendar( QString filename ) { // Store back all unsaved data into calendar object // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); @@ -4454,34 +4455,36 @@ void CalendarView::printPreview() { #ifndef KORG_NOPRINTER kdDebug() << "CalendarView::printPreview()" << endl; createPrinter(); DateList tmpDateList = mNavigator->selectedDates(); mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(), tmpDateList.last()); #endif } - -void CalendarView::exportICalendar() +bool CalendarView::exportICalendar( QString filename ) { - QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this); - // Force correct extension if (filename.right(4) != ".ics") filename += ".ics"; FileStorage storage( mCalendar, filename, new ICalFormat() ); - storage.save(); + return storage.save(); +} + +bool CalendarView::exportICalendar() +{ + return exportICalendar( KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this) ); } bool CalendarView::exportVCalendar( QString filename ) { if (mCalendar->journals().count() > 0) { int result = KMessageBox::warningContinueCancel(this, i18n("The journal entries can not be\nexported to a vCalendar file."), i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), true); if (result != KMessageBox::Continue) return false; } diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h index b223315..8670832 100644 --- a/korganizer/calendarview.h +++ b/korganizer/calendarview.h @@ -367,25 +367,26 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser /** edit viewing and configuration options. */ void edit_options(); void edit_global_options(); /** Functions for printing, previewing a print, and setting up printing parameters. */ void print(); void printSetup(); void printPreview(); /** Export as iCalendar file */ - void exportICalendar(); + bool exportICalendar(); + bool exportICalendar( QString fn ); /** Export as vCalendar file */ bool exportVCalendar( QString fn); /** pop up a dialog to show an existing appointment. */ void appointment_show(); /** * pop up an Appointment Dialog to edit an existing appointment. Get * information on the appointment from the list of unique IDs that is * currently in the View, called currIds. */ void appointment_edit(); 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() #endif } void MainWindow::showMaximized () { #ifndef DESKTOP_VERSION if ( ! globalFlagBlockStartup ) if ( mClosed ) mView->goToday(); #endif QWidget::showMaximized () ; mClosed = false; } + +bool MainWindow::askForQuitOnSaveError() +{ + bool retval = false; + switch( QMessageBox::information( this, "KO/Pi", + i18n("Error saving data") + "!\n" + + i18n("You can save all data\nto another file via\nFile->Export->Export All Data") + "!\n" + + i18n("Do you really want\nto close KO/Pi?"), + i18n(" Yes, close "), i18n("No"), + 0, 1 ) ) { + case 0: + retval = true; + break; + default: + break; + } + return retval; +} + void MainWindow::closeEvent( QCloseEvent* ce ) { if ( ! KOPrefs::instance()->mAskForQuit ) { saveOnClose(); - if ( mCalendarModifiedFlag ) { + if ( mCalendarModifiedFlag && !askForQuitOnSaveError() ) { ce->ignore(); return; } mClosed = true; ce->accept(); return; } switch( QMessageBox::information( this, "KO/Pi", i18n("Do you really want\nto close KO/Pi?"), i18n("Close"), i18n("No"), 0, 0 ) ) { case 0: saveOnClose(); - if ( mCalendarModifiedFlag ) { + if ( mCalendarModifiedFlag && !askForQuitOnSaveError() ) { ce->ignore(); return; } mClosed = true; ce->accept(); break; case 1: ce->ignore(); break; case 2: default: @@ -1156,24 +1175,28 @@ void MainWindow::initActions() action = new QAction( "load_cal", i18n("Load Calendar Backup"), 0, this ); action->addTo( importMenu ); connect( action, SIGNAL( activated() ), SLOT( loadCalendar() ) ); #endif action = new QAction( "save_cal", i18n("Save Backup..."), 0, this ); action->addTo( importMenu ); connect( action, SIGNAL( activated() ), SLOT( saveCalendar() ) ); importMenu->insertSeparator(); importMenu->insertItem( i18n("Import"), importMenu_X ); //importMenu->insertSeparator(); + action = new QAction( "export ical", i18n("Export All Data"), 0, + this ); + action->addTo( exportMenu_X ); + connect( action, SIGNAL( activated() ), SLOT( exportICalendar() ) ); action = new QAction( "import_qtopia", i18n("Export VCalendar"), 0, this ); action->addTo( exportMenu_X ); connect( action, SIGNAL( activated() ), SLOT( exportVCalendar() ) ); //LR QPopupMenu *ex2phone = new QPopupMenu( this ); ex2phone->insertItem(i18n("Complete calendar..."), 1 ); ex2phone->insertItem(i18n("Filtered calendar..."), 2 ); connect( ex2phone, SIGNAL( activated(int) ), this, SLOT( exportToPhone( int)) ); exportMenu_X->insertItem( i18n("Export to phone"), ex2phone ); @@ -1958,25 +1981,25 @@ void MainWindow::slotModifiedChanged( bool ) int msec; if ( mCalendarModifiedFlag ) { //qDebug(" MainWindow timer is running "); return; } // we store the changes after 1 minute, // and for safety reasons after 10 minutes again if ( !mSyncManager->blockSave() ) msec = (1000 * 60*KOPrefs::instance()->mAutoSaveInterval) +1000; else msec = 1000 * 600; mSaveTimer.start( msec, true ); // 1 minute - mSaveTime.restart(); + mSaveTimerStart = QDateTime::currentDateTime(); mSaveDelay = msec/1000; qDebug("KO: Saving File in %d secs!", msec/1000); mCalendarModifiedFlag = true; } void MainWindow::saveStopTimer() { mSaveTimer.stop(); } void MainWindow::backupAllFiles() { QDate reference ( 2000,1,1); int daysTo = reference.daysTo ( QDate::currentDate() ); @@ -2008,30 +2031,32 @@ void MainWindow::backupAllFiles() setCaption(i18n("Backup succesfully finished" )); } else if ( retval == 2 ){ setCaption(i18n("Backup globally disabled" )); qDebug("KO: Backup globally cancelled."); // backup globally cancelled KPimGlobalPrefs::instance()->mBackupEnabled = false; } // retval == 3: do nothing, try again later } void MainWindow::save() { if ( mSaveDelay ) { - if ( mSaveDelay + 60 < mSaveTime.elapsed()/1000 ) { - qDebug("KO: Save delay %d. Elapsed save time %d ", mSaveDelay, mSaveTime.elapsed()/1000 ); - qDebug("KO: Restarting save timer"); - int msec = 10000; - mSaveTimer.start( msec, true ); // 1 minute - mSaveTime.restart(); + int elapsed = mSaveTimerStart.secsTo( QDateTime::currentDateTime() ); + if ( mSaveDelay < elapsed ) { + qDebug("KO: Pending save after wakeup from suspend detected."); + qDebug("KO: Save delay %d sec. Elapsed save time %d sec.", mSaveDelay, elapsed ); + qDebug("KO: Restarting save timer to save in 15 sec."); + int msec = 15000; + mSaveTimer.start( msec, true ); + mSaveTimerStart = QDateTime::currentDateTime(); mSaveDelay = msec/1000; return; } } if ( mView->viewManager()->journalView() ) mView->viewManager()->journalView()->checkModified(); if ( !mCalendarModifiedFlag ) { qDebug("KO: Calendar not modified. Nothing saved."); return; } if ( mSyncManager->blockSave() ) { @@ -2566,56 +2591,72 @@ void MainWindow::importFile( QString fn, bool quick ) void MainWindow::importIcal() { QString fn =KOPrefs::instance()->mLastImportFile; fn =KFileDialog:: getOpenFileName( fn, i18n("Import filename(*.ics/*.vcs)"), this ); if ( fn == "" ) return; importFile( fn, true ); } - -void MainWindow::exportVCalendar() +void MainWindow::exportCalendar( bool iCalFormat ) { QString fn = KOPrefs::instance()->mLastVcalFile; - fn = KFileDialog::getSaveFileName( fn, i18n("Export vcal filename(*.vcs)"), this ); + if ( iCalFormat ) { + fn = QDir::homeDirPath()+"/kopiexport.ics"; + fn = KFileDialog::getSaveFileName( fn, i18n("Export iCal filename(*.ics)"), this ); + } + else + fn = KFileDialog::getSaveFileName( fn, i18n("Export vcal filename(*.vcs)"), this ); if ( fn == "" ) return; QFileInfo info; info.setFile( fn ); QString mes; bool createbup = true; if ( info. exists() ) { mes = i18n("Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, i18n("Overwrite!"), i18n("Cancel"), 0, 0, 1 ); if ( result != 0 ) { createbup = false; } } if ( createbup ) { - if ( mView->exportVCalendar( fn ) ) { - KOPrefs::instance()->mLastVcalFile = fn; + bool success = false; + if ( iCalFormat ) + success = mView->exportICalendar( fn ); + else + success = mView->exportVCalendar( fn ); + if ( success ) { if ( fn.length() > 20 ) mes = i18n("KO/Pi:Exported to ...%1").arg(fn.right(20)) ; else mes = i18n("KO/Pi:Exported to %1").arg(fn ); setCaption(mes); } } } +void MainWindow::exportICalendar() +{ + exportCalendar( true ); +} +void MainWindow::exportVCalendar() +{ + exportCalendar( false ); +} QString MainWindow::sentSyncFile() { #ifdef DESKTOP_VERSION return QDir::convertSeparators( locateLocal( "tmp", "copysynccal.ics" ) ); #else return QString( "/tmp/copysynccal.ics" ); #endif } void MainWindow::syncFileRequest() { while ( mSyncManager->blockSave() ) { diff --git a/korganizer/mainwindow.h b/korganizer/mainwindow.h index 657c0a8..71c069b 100644 --- a/korganizer/mainwindow.h +++ b/korganizer/mainwindow.h @@ -84,47 +84,50 @@ class MainWindow : public QMainWindow void slotModifiedChanged( bool ); void save(); void backupAllFiles(); void saveStopTimer(); void configureToolBar( int ); void printSel(); void printCal(); void printListView(); void saveCalendar(); void loadCalendar(); void exportVCalendar(); + void exportICalendar(); + void exportCalendar( bool ); void fillFilterMenu(); void fillFilterMenuTB(); void selectFilter( int ); void fillFilterMenuPopup(); void selectFilterPopup( int ); void exportToPhone( int ); void toggleBeamReceive(); void disableBR(bool); signals: void selectWeek ( int ); private slots: void slotResetFocus(); void slotResetFocusLoop(); void showConfigureAgenda(); void getFile( bool ); void syncFileRequest(); protected: int mFocusLoop; void hideEvent ( QHideEvent * ); QString sentSyncFile(); void displayText( QString, QString); void enableIncidenceActions( bool ); + bool askForQuitOnSaveError(); private: QCString mCStringMess; QByteArray mByteData; //void setMenuBar( QMenuBar * ); bool mBRdisabled; #ifndef DESKTOP_VERSION QCopChannel* infrared; #endif QAction* brAction; @@ -165,22 +168,22 @@ class MainWindow : public QMainWindow QAction *mMoveAction; QAction *mBeamAction; QAction *mCancelAction; QAction *mPrintSelAction; QAction *mToggleNav; QAction *mToggleFilter; QAction *mToggleAllday; QAction *actionFilterMenuTB; void closeEvent( QCloseEvent* ce ); QTimer mSaveTimer; - QTime mSaveTime; + QDateTime mSaveTimerStart; int mSaveDelay; //bool mBlockSaveFlag; bool mCalendarModifiedFlag; QPixmap loadPixmap( QString ); QPixmap listviewPix, listviewPix0, listviewPix20, listviewPix40, listviewPix60, listviewPix80, journalPix; }; #endif |