-rw-r--r-- | korganizer/koprefs.cpp | 6 | ||||
-rw-r--r-- | korganizer/koprefs.h | 3 | ||||
-rw-r--r-- | korganizer/mainwindow.cpp | 134 | ||||
-rw-r--r-- | korganizer/mainwindow.h | 1 | ||||
-rw-r--r-- | libkcal/phoneformat.cpp | 68 | ||||
-rw-r--r-- | libkcal/phoneformat.h | 2 |
6 files changed, 188 insertions, 26 deletions
diff --git a/korganizer/koprefs.cpp b/korganizer/koprefs.cpp index c28da9a..716a125 100644 --- a/korganizer/koprefs.cpp +++ b/korganizer/koprefs.cpp @@ -78,4 +78,10 @@ KOPrefs::KOPrefs() : KPrefs::setCurrentGroup("General"); + + + addItemString("Ex2PhoneDevice",&mEx2PhoneDevice,"/dev/ircomm"); + addItemString("Ex2PhoneConnection",&mEx2PhoneConnection,"irda"); + addItemString("Ex2PhoneModel",&mEx2PhoneModel,"6310i"); + addItemBool("Enable Group Scheduling",&mEnableGroupScheduling,false); diff --git a/korganizer/koprefs.h b/korganizer/koprefs.h index d9ac851..a1ba8b3 100644 --- a/korganizer/koprefs.h +++ b/korganizer/koprefs.h @@ -211,4 +211,7 @@ class KOPrefs : public KPimPrefs QString mPhoneConnection; QString mPhoneModel; + QString mEx2PhoneDevice; + QString mEx2PhoneConnection; + QString mEx2PhoneModel; int mLastSyncTime; diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp index de94b8c..ef73a78 100644 --- a/korganizer/mainwindow.cpp +++ b/korganizer/mainwindow.cpp @@ -14,4 +14,6 @@ #include <qfileinfo.h> #include <qlabel.h> +#include <qspinbox.h> +#include <qcheckbox.h> #include <qmap.h> #include <qwmatrix.h> @@ -36,4 +38,5 @@ #include <libkcal/calendarlocal.h> #include <libkcal/todo.h> +#include <libkcal/phoneformat.h> #include <libkdepim/ksyncprofile.h> #include <libkcal/kincidenceformatter.h> @@ -67,4 +70,53 @@ using namespace KCal; #include "mainwindow.h" +class KOex2phonePrefs : public QDialog +{ + public: + KOex2phonePrefs( QWidget *parent=0, const char *name=0 ) : + QDialog( parent, name, true ) + { + setCaption( i18n("Export to phone options") ); + QVBoxLayout* lay = new QVBoxLayout( this ); + lay->setSpacing( 3 ); + lay->setMargin( 3 ); + + lay->addWidget(new QLabel( i18n("Please read phone sync howto to\nknow more about the connection settings."), this ) ); + QHBox* temphb; + temphb = new QHBox( this ); + new QLabel( i18n("I/O device: "), temphb ); + mPhoneDevice = new QLineEdit( temphb); + lay->addWidget( temphb ); + temphb = new QHBox( this ); + new QLabel( i18n("Connection: "), temphb ); + mPhoneConnection = new QLineEdit( temphb); + lay->addWidget( temphb ); + temphb = new QHBox( this ); + new QLabel( i18n("Model(opt.): "), temphb ); + mPhoneModel = new QLineEdit( temphb); + lay->addWidget( temphb ); + mWriteBackFuture= new QCheckBox( i18n("Write back events in future only"), this ); + mWriteBackFuture->setChecked( true ); + lay->addWidget( mWriteBackFuture ); + temphb = new QHBox( this ); + new QLabel( i18n("Max. weeks in future: ") , temphb ); + mWriteBackFutureWeeks= new QSpinBox(1,104, 1, temphb); + mWriteBackFutureWeeks->setValue( 8 ); + lay->addWidget( temphb ); + QPushButton * ok = new QPushButton( i18n("Export!"), this ); + lay->addWidget( ok ); + QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); + lay->addWidget( cancel ); + connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); + connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); + resize( 220, 220 ); + + } + +public: + QLineEdit* mPhoneConnection, *mPhoneDevice, *mPhoneModel; + QCheckBox* mWriteBackFuture; + QSpinBox* mWriteBackFutureWeeks; +}; + int globalFlagBlockStartup; MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) : @@ -654,4 +706,13 @@ void MainWindow::initActions() this ); action->addTo( importMenu ); 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)) ); + importMenu->insertItem( i18n("Export to phone"), ex2phone ); + importMenu->insertSeparator(); action = new QAction( "manage cat", i18n("Manage new categories..."), 0, @@ -1088,4 +1149,76 @@ void MainWindow::slotSyncMenu( int action ) mBlockSaveFlag = false; } +void MainWindow::exportToPhone( int mode ) +{ + + //ex2phone->insertItem(i18n("Complete calendar..."), 1 ); + //ex2phone->insertItem(i18n("Filtered calendar..."), 2 ); + KOex2phonePrefs ex2phone; + ex2phone.mPhoneConnection->setText( KOPrefs::instance()->mEx2PhoneConnection ); + ex2phone.mPhoneDevice->setText( KOPrefs::instance()->mEx2PhoneDevice ); + ex2phone.mPhoneModel->setText( KOPrefs::instance()->mEx2PhoneModel ); + + if ( !ex2phone.exec() ) { + return; + } + KOPrefs::instance()->mEx2PhoneConnection = ex2phone.mPhoneConnection->text(); + KOPrefs::instance()->mEx2PhoneDevice = ex2phone.mPhoneDevice->text(); + KOPrefs::instance()->mEx2PhoneModel = ex2phone.mPhoneModel->text(); + + int inFuture = 0; + if ( ex2phone.mWriteBackFuture->isChecked() ) + inFuture = ex2phone.mWriteBackFutureWeeks->value(); + QPtrList<Incidence> delSel; + if ( mode == 1 ) + delSel = mCalendar->rawIncidences(); + if ( mode == 2 ) + delSel = mCalendar->incidences(); + CalendarLocal* cal = new CalendarLocal(); + cal->setLocalTime(); + Incidence *incidence = delSel.first(); + QDateTime cur = QDateTime::currentDateTime().addDays( -7 ); + QDateTime end = cur.addDays( ( inFuture +1 ) *7 ); + while ( incidence ) { + if ( incidence->type() != "journal" ) { + bool add = true; + if ( inFuture ) { + QDateTime dt; + if ( incidence->type() == "Todo" ) { + Todo * t = (Todo*)incidence; + if ( t->hasDueDate() ) + dt = t->dtDue(); + else + dt = cur.addSecs( 62 ); + } + else { + bool ok; + dt = incidence->getNextOccurence( cur, &ok ); + if ( !ok ) + dt = cur.addSecs( -62 ); + } + if ( dt < cur || dt > end ) { + add = false; + } + } + if ( add ) { + Incidence *in = incidence->clone(); + cal->addIncidence( in ); + } + } + incidence = delSel.next(); + } + PhoneFormat::writeConfig( KOPrefs::instance()->mEx2PhoneDevice, + KOPrefs::instance()->mEx2PhoneConnection, + KOPrefs::instance()->mEx2PhoneModel ); + + setCaption( i18n("Writing to phone...")); + if ( PhoneFormat::writeToPhone( cal ) ) + setCaption( i18n("Export to phone successful!")); + else + setCaption( i18n("Error exporting to phone!")); + delete cal; +} + + void MainWindow::setDefaultPreferences() { @@ -1095,4 +1228,5 @@ void MainWindow::setDefaultPreferences() p->mConfirm = true; // p->mEnableQuickTodo = false; + } diff --git a/korganizer/mainwindow.h b/korganizer/mainwindow.h index 7b24b88..74c7f45 100644 --- a/korganizer/mainwindow.h +++ b/korganizer/mainwindow.h @@ -145,4 +145,5 @@ class MainWindow : public QMainWindow void fillFilterMenu(); void selectFilter( int ); + void exportToPhone( int ); void slotSyncMenu( int ); diff --git a/libkcal/phoneformat.cpp b/libkcal/phoneformat.cpp index 29c1ae6..b2a62b1 100644 --- a/libkcal/phoneformat.cpp +++ b/libkcal/phoneformat.cpp @@ -85,6 +85,17 @@ PhoneFormat::PhoneFormat(QString profileName, QString device,QString connection, { mProfileName = profileName; - + writeConfig( device, connection, model ); +} + +PhoneFormat::~PhoneFormat() +{ +} +void PhoneFormat::writeConfig( QString device, QString connection, QString model ) +{ +#ifdef _WIN32_ + QString fileName = qApp->applicationDirPath () +"\\gammurc"; +#else QString fileName = QDir::homeDirPath() +"/.gammurc"; +#endif //qDebug("save %d ", load ); QString content; @@ -177,8 +188,5 @@ PhoneFormat::PhoneFormat(QString profileName, QString device,QString connection, file.close(); } -} -PhoneFormat::~PhoneFormat() -{ } #if 0 @@ -570,4 +578,33 @@ void PhoneFormat::afterSave( Incidence* inc) } + +bool PhoneFormat::writeToPhone( Calendar * calendar) +{ +#ifdef _WIN32_ + QString fileName = locateLocal("tmp", "tempfile.vcs"); +#else + QString fileName = "/tmp/kdepimtemp.vcs"; +#endif + + VCalFormat vfsave; + vfsave.setLocalTime ( true ); + if ( ! vfsave.save( calendar, fileName ) ) + return false; + // 4 call kammu +#ifdef DESKTOP_VERSION + QString command ="./kammu --restore " + fileName ; +#else + QString command ="kammu --restore " + fileName ; +#endif + int ret; + while ( (ret = system ( command.latin1())) != 0 ) { + qDebug("Error S::command returned %d. asking users", ret); + int retval = KMessageBox::warningContinueCancel(0, + i18n("Error accessing device!\nPlease turn on connection\nand retry!"),i18n("KO/Pi phone access"),i18n("Retry"),i18n("Cancel")); + if ( retval != KMessageBox::Continue ) + return false; + } + return true; +} bool PhoneFormat::save( Calendar *calendar) { @@ -584,9 +621,4 @@ bool PhoneFormat::save( Calendar *calendar) qApp->processEvents(); QString message; -#ifdef _WIN32_ - QString fileName = locateLocal("tmp", "tempfile.vcs"); -#else - QString fileName = "/tmp/kdepimtemp.vcs"; -#endif // 1 remove events which should be deleted @@ -615,22 +647,6 @@ bool PhoneFormat::save( Calendar *calendar) } // 3 save file - VCalFormat vfsave; - vfsave.setLocalTime ( true ); - if ( ! vfsave.save( calendar, fileName ) ) + if ( !writeToPhone( calendar ) ) return false; - // 4 call kammu -#ifdef DESKTOP_VERSION - QString command ="./kammu --restore " + fileName ; -#else - QString command ="kammu --restore " + fileName ; -#endif - int ret; - while ( (ret = system ( command.latin1())) != 0 ) { - qDebug("Error S::command returned %d. asking users", ret); - int retval = KMessageBox::warningContinueCancel(0, - i18n("Error accessing device!\nPlease turn on connection\nand retry!"),i18n("KO/Pi phone sync"),i18n("Retry"),i18n("Cancel")); - if ( retval != KMessageBox::Continue ) - return false; - } // 5 reread data diff --git a/libkcal/phoneformat.h b/libkcal/phoneformat.h index 2d1ff79..61e8160 100644 --- a/libkcal/phoneformat.h +++ b/libkcal/phoneformat.h @@ -49,4 +49,6 @@ class PhoneFormat : public QObject { static ulong getCsumTodo( Todo* to ); static ulong getCsumEvent( Event* ev ); + static void writeConfig( QString device,QString connection, QString model ); + static bool writeToPhone( Calendar * ); private: void copyEvent( Event* to, Event* from ); |