-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 @@ -79,2 +79,8 @@ 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 @@ -212,2 +212,5 @@ class KOPrefs : public KPimPrefs QString mPhoneModel; + QString mEx2PhoneDevice; + QString mEx2PhoneConnection; + QString mEx2PhoneModel; diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp index de94b8c..ef73a78 100644 --- a/korganizer/mainwindow.cpp +++ b/korganizer/mainwindow.cpp @@ -15,2 +15,4 @@ #include <qlabel.h> +#include <qspinbox.h> +#include <qcheckbox.h> #include <qmap.h> @@ -37,2 +39,3 @@ #include <libkcal/todo.h> +#include <libkcal/phoneformat.h> #include <libkdepim/ksyncprofile.h> @@ -68,2 +71,51 @@ using namespace KCal; +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; @@ -655,2 +707,11 @@ void MainWindow::initActions() 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(); @@ -1089,2 +1150,74 @@ void MainWindow::slotSyncMenu( int action ) } +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() @@ -1096,2 +1229,3 @@ void MainWindow::setDefaultPreferences() // 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 @@ -146,2 +146,3 @@ class MainWindow : public QMainWindow void selectFilter( int ); + void exportToPhone( int ); diff --git a/libkcal/phoneformat.cpp b/libkcal/phoneformat.cpp index 29c1ae6..b2a62b1 100644 --- a/libkcal/phoneformat.cpp +++ b/libkcal/phoneformat.cpp @@ -86,4 +86,15 @@ 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 ); @@ -178,6 +189,3 @@ PhoneFormat::PhoneFormat(QString profileName, QString device,QString connection, } -} -PhoneFormat::~PhoneFormat() -{ } @@ -571,2 +579,31 @@ 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) @@ -585,7 +622,2 @@ bool PhoneFormat::save( Calendar *calendar) QString message; -#ifdef _WIN32_ - QString fileName = locateLocal("tmp", "tempfile.vcs"); -#else - QString fileName = "/tmp/kdepimtemp.vcs"; -#endif @@ -616,20 +648,4 @@ 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; - } diff --git a/libkcal/phoneformat.h b/libkcal/phoneformat.h index 2d1ff79..61e8160 100644 --- a/libkcal/phoneformat.h +++ b/libkcal/phoneformat.h @@ -50,2 +50,4 @@ class PhoneFormat : public QObject { static ulong getCsumEvent( Event* ev ); + static void writeConfig( QString device,QString connection, QString model ); + static bool writeToPhone( Calendar * ); private: |