kitchensync

configguisunbird.cpp
00001 /*
00002     This file is part of KitchenSync.
00003 
00004     Copyright (c) 2007 Tobias Koenig <tokoe@kde.org>
00005     Copyright (c) 2007 Anirudh Ramesh <abattoir@abattoir.in>
00006 
00007     This program is free software; you can redistribute it and/or modify
00008     it under the terms of the GNU General Public License as published by
00009     the Free Software Foundation; either version 2 of the License, or
00010     (at your option) any later version.
00011 
00012     This program is distributed in the hope that it will be useful,
00013     but WITHOUT ANY WARRANTY; without even the implied warranty of
00014     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00015     GNU General Public License for more details.
00016 
00017     You should have received a copy of the GNU General Public License
00018     along with this program; if not, write to the Free Software
00019     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
00020     USA.
00021 */
00022 
00023 #include "configguisunbird.h"
00024 
00025 #include <tqdom.h>
00026 #include <tqtabwidget.h>
00027 #include <tqlabel.h>
00028 #include <tqlayout.h>
00029 #include <tqbuttongroup.h>
00030 #include <tqcheckbox.h>
00031 #include <tqsizepolicy.h>
00032 #include <tqptrlist.h>
00033 #include <tqspinbox.h>
00034 #include <tqwidget.h>
00035 
00036 #include <kurlrequester.h>
00037 #include <klineedit.h>
00038 #include <kpushbutton.h>
00039 #include <kdialog.h>
00040 #include <klocale.h>
00041 #include <kfile.h>
00042 
00043 ConfigGuiSunbird::ConfigGuiSunbird( const QSync::Member &member, TQWidget *parent )
00044   : ConfigGui( member, parent )
00045 {
00046   TQTabWidget *tabWidget = new TQTabWidget( this );
00047   topLayout()->addWidget( tabWidget );
00048 
00049   mLocalWidget = new TQWidget( tabWidget );
00050   mLocalLayout = new TQVBoxLayout( mLocalWidget, KDialog::spacingHint() );
00051 
00052   mWebdavWidget = new TQWidget( tabWidget );
00053   mWebdavLayout = new TQVBoxLayout( mWebdavWidget, KDialog::spacingHint() );
00054 
00055   tabWidget->addTab( mLocalWidget, i18n( "Local Calendars" ) );
00056   tabWidget->addTab( mWebdavWidget, i18n( "WebDAV Calendars" ) );
00057 
00058   KPushButton *mLocalAddButton = new KPushButton( mLocalWidget );
00059   mLocalAddButton->setText( i18n( "Add new calendar" ) );
00060   mLocalAddButton->setSizePolicy( TQSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Fixed ) );
00061   mLocalLayout->addWidget( mLocalAddButton );
00062   connect( mLocalAddButton, TQT_SIGNAL( clicked() ),
00063            this, TQT_SLOT( addLocalCalendar() ) );
00064 
00065   KPushButton *mWebdavAddButton = new KPushButton( mWebdavWidget );
00066   mWebdavAddButton->setText( i18n( "Add new calendar" ) );
00067   mWebdavAddButton->setSizePolicy( TQSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Fixed ) );
00068   mWebdavLayout->addWidget( mWebdavAddButton );
00069   connect( mWebdavAddButton, TQT_SIGNAL( clicked() ),
00070            this, TQT_SLOT( addWebdavCalendar() ) );
00071 
00072   mLocalSpacer = new TQSpacerItem( 20, 40, TQSizePolicy::Expanding );
00073   mLocalLayout->addItem( mLocalSpacer );
00074   mWebdavSpacer = new TQSpacerItem( 20, 40, TQSizePolicy::Expanding );
00075   mWebdavLayout->addItem( mWebdavSpacer );
00076 }
00077 
00078 void ConfigGuiSunbird::load( const TQString &xml )
00079 {
00080   TQString path;
00081   TQString url;
00082   TQString username;
00083   TQString password;
00084   TQString defaultcal;
00085   TQString days;
00086 
00087   TQDomDocument doc;
00088   doc.setContent( xml );
00089   TQDomElement docElement = doc.documentElement();
00090   TQDomNode node;
00091   for( node = docElement.firstChild(); !node.isNull(); node = node.nextSibling() ) {
00092     TQDomElement element = node.toElement();
00093     if ( element.tagName() == "file" ) {
00094       TQDomAttr pathAttr = element.attributeNode( "path" );
00095       path = pathAttr.value();
00096       TQDomAttr defaultAttr = element.attributeNode( "default" );
00097       defaultcal = defaultAttr.value();
00098       TQDomAttr daysAttr = element.attributeNode( "deletedaysold" );
00099       days = daysAttr.value();
00100 
00101       LocalCalendar *cal = new LocalCalendar( path, defaultcal, days, mLocalWidget );
00102       mLocalLayout->removeItem( mLocalSpacer );
00103       cal->setSizePolicy( TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Fixed ) );
00104       mLocalLayout->addWidget( cal );
00105       mLocalLayout->addItem( mLocalSpacer );
00106       mLocalList.append( cal );
00107 
00108       connect( cal, TQT_SIGNAL( deleteRequest( LocalCalendar* ) ), TQT_SLOT( delLocalCalendar( LocalCalendar* ) ) );
00109       cal->show();
00110     } else if ( element.tagName() == "webdav" ) {
00111       TQDomAttr urlAttr = element.attributeNode( "url" );
00112       url = urlAttr.value();
00113       TQDomAttr unameAttr = element.attributeNode( "username" );
00114       username = unameAttr.value();
00115       TQDomAttr pwordAttr = element.attributeNode( "password" );
00116       password = pwordAttr.value();
00117       TQDomAttr defaultAttr = element.attributeNode( "default" );
00118       defaultcal = defaultAttr.value();
00119       TQDomAttr daysAttr = element.attributeNode( "deletedaysold" );
00120       days = daysAttr.value();
00121 
00122       WebdavCalendar *cal = new WebdavCalendar( username, password,
00123                                                 url, defaultcal, days, mWebdavWidget );
00124       mWebdavLayout->removeItem( mWebdavSpacer );
00125       cal->setSizePolicy( TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Fixed ) );
00126       mWebdavLayout->addWidget( cal );
00127       mWebdavLayout->addItem( mWebdavSpacer );
00128       mWebdavList.append( cal );
00129 
00130       connect( cal, TQT_SIGNAL( deleteRequest( WebdavCalendar* ) ), TQT_SLOT( delWebdavCalendar( WebdavCalendar* ) ) );
00131       cal->show();
00132     }
00133   }
00134 }
00135 
00136 TQString ConfigGuiSunbird::save() const
00137 {
00138   TQString config = "<config>\n";
00139 
00140   for ( uint i = 0; i < mLocalList.count(); ++i ) {
00141     LocalCalendar *lcal = mLocalList[ i ];
00142     config += TQString( "<file " );
00143     config += TQString( "path=\"%1\" " ).arg( lcal->mPathRequester->url() );
00144 
00145     if ( lcal->mDaysCheckBox->isChecked() ) {
00146       config += TQString( "deletedaysold=\"%1\" " ).arg( lcal->mDaysSpinBox->value() );
00147     }
00148     if ( lcal->mDefaultCheckBox->isChecked() ) {
00149       config += TQString( "default=\"1\" " );
00150     }
00151     config += TQString( "/>\n" );
00152   }
00153 
00154   for ( uint i = 0; i < mWebdavList.count(); ++i ) {
00155     WebdavCalendar *wcal = mWebdavList[ i ];
00156     config += TQString( "<webdav " );
00157     config += TQString( "username=\"%1\" " ).arg( wcal->mUsername->text() );
00158     config += TQString( "password=\"%1\" " ).arg( wcal->mPassword->text() );
00159     config += TQString( "url=\"%1\" " ).arg( wcal->mUrl->text() );
00160 
00161     if ( wcal->mDaysCheckBox->isChecked() ) {
00162       config += TQString( "deletedaysold=\"%1\" " ).arg( wcal->mDaysSpinBox->value() );
00163     }
00164     if ( wcal->mDefaultCheckBox->isChecked() ) {
00165       config += TQString( "default=\"1\" " );
00166     }
00167     config += TQString( "/>\n" );
00168   }
00169   config += "</config>";
00170 
00171   return config;
00172 }
00173 
00174 void ConfigGuiSunbird::addLocalCalendar()
00175 {
00176   LocalCalendar *cal = new LocalCalendar( mLocalWidget );
00177   mLocalLayout->removeItem( mLocalSpacer );
00178   cal->setSizePolicy( TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Fixed ) );
00179   mLocalLayout->addWidget( cal );
00180   mLocalLayout->addItem( mLocalSpacer );
00181   mLocalList.append( cal );
00182 
00183   connect( cal, TQT_SIGNAL( deleteRequest( LocalCalendar* ) ), TQT_SLOT( delLocalCalendar( LocalCalendar* ) ) );
00184   cal->show();
00185 }
00186 
00187 void ConfigGuiSunbird::delLocalCalendar( LocalCalendar *calendar )
00188 {
00189   mLocalList.remove( calendar );
00190   calendar->deleteLater();
00191 }
00192 
00193 void ConfigGuiSunbird::addWebdavCalendar()
00194 {
00195   WebdavCalendar *cal = new WebdavCalendar( mWebdavWidget );
00196   mWebdavLayout->removeItem( mWebdavSpacer );
00197   cal->setSizePolicy( TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Fixed ) );
00198   mWebdavLayout->addWidget( cal );
00199   mWebdavLayout->addItem( mWebdavSpacer );
00200   mWebdavList.append( cal );
00201 
00202   connect( cal, TQT_SIGNAL( deleteRequest( WebdavCalendar* ) ), TQT_SLOT( delWebdavCalendar( WebdavCalendar* ) ) );
00203   cal->show();
00204 }
00205 
00206 void ConfigGuiSunbird::delWebdavCalendar( WebdavCalendar *calendar )
00207 {
00208   mWebdavList.remove( calendar );
00209   calendar->deleteLater();
00210 }
00211 
00212 LocalCalendar::LocalCalendar( TQWidget *parent )
00213   : TQWidget( parent )
00214 {
00215   initGui();
00216 }
00217 
00218 LocalCalendar::LocalCalendar( const TQString &path, const TQString &defaultcal, const TQString &days, TQWidget *parent )
00219   : TQWidget( parent )
00220 {
00221   initGui();
00222 
00223   mPathRequester->setURL( path );
00224   mDefaultCheckBox->setChecked( defaultcal.toInt() == 1 );
00225 
00226   if ( !days.isEmpty() ) {
00227     mDaysCheckBox->setChecked( true );
00228     mDaysSpinBox->setEnabled( true );
00229     mDaysSpinBox->setValue( days.toInt() );
00230   }
00231 }
00232 
00233 void LocalCalendar::initGui()
00234 {
00235   TQBoxLayout *bottomLayout = new TQHBoxLayout();
00236 
00237   mDaysCheckBox = new TQCheckBox( this );
00238   mDaysCheckBox->setText( i18n( "Sync only events newer than" ) );
00239 
00240   mDaysSpinBox = new TQSpinBox( this );
00241   mDaysSpinBox->setDisabled( true );
00242   mDaysSpinBox->setSizePolicy( TQSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Fixed ) );
00243 
00244   connect( mDaysCheckBox, TQT_SIGNAL( toggled( bool ) ),
00245            this, TQT_SLOT( toggleDays( bool ) ) );
00246 
00247   bottomLayout->addWidget( mDaysCheckBox );
00248   bottomLayout->addWidget( mDaysSpinBox );
00249   bottomLayout->addWidget( new TQLabel( i18n( "day(s)" ), this ) );
00250 
00251   TQGridLayout *localLayout = new TQGridLayout( this );
00252 
00253   mPathRequester = new KURLRequester( this );
00254 
00255   KPushButton *removeButton = new KPushButton( this );
00256   removeButton->setSizePolicy( TQSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Fixed ) );
00257   removeButton->setText( i18n( "Remove" ) );
00258   connect( removeButton, TQT_SIGNAL( clicked() ),
00259            this, TQT_SLOT( deleteWidget() ) );
00260 
00261   mDefaultCheckBox = new TQCheckBox( this );
00262   mDefaultCheckBox->setText( i18n( "Set as Default" ) );
00263 
00264   localLayout->addItem( new TQSpacerItem( 40, 20, TQSizePolicy::Expanding ), 0, 0 );
00265   localLayout->addWidget( new TQLabel( i18n( "Location:" ), this ), 1, 0 );
00266   localLayout->addWidget( mPathRequester, 1, 1 );
00267   localLayout->addItem( new TQSpacerItem( 40, 20, TQSizePolicy::Fixed ), 1, 2 );
00268   localLayout->addWidget( removeButton, 1, 3 );
00269   localLayout->addMultiCellLayout( bottomLayout, 2, 2, 0, 2 );
00270   localLayout->addWidget( mDefaultCheckBox, 2, 3 ); 
00271 }
00272 
00273 void LocalCalendar::deleteWidget()
00274 {
00275   emit deleteRequest( this );
00276 }
00277 
00278 WebdavCalendar::WebdavCalendar( TQWidget *parent )
00279   : TQWidget( parent )
00280 {
00281   initGui();
00282 };
00283 
00284 WebdavCalendar::WebdavCalendar( const TQString &username, const TQString &password, const TQString &url,
00285                                 const TQString &defaultcal, const TQString &days, TQWidget *parent )
00286   : TQWidget( parent )
00287 {
00288   initGui();
00289 
00290   mUsername->setText( username );
00291   mPassword->setText( password );
00292   mUrl->setText( url );
00293   mDefaultCheckBox->setChecked( defaultcal.toInt() == 1 );
00294 
00295   if ( !days.isEmpty() ) {
00296     mDaysCheckBox->setChecked( true );
00297     mDaysSpinBox->setEnabled( true );
00298     mDaysSpinBox->setValue( days.toInt() );
00299   }
00300 }
00301 
00302 void WebdavCalendar::initGui()
00303 {
00304   TQBoxLayout *bottomLayout = new TQHBoxLayout();
00305 
00306   mDaysCheckBox = new TQCheckBox( this );
00307   mDaysCheckBox->setText( i18n( "Sync only events newer than" ) );
00308 
00309   mDaysSpinBox = new TQSpinBox( this );
00310   mDaysSpinBox->setDisabled( true );
00311   mDaysSpinBox->setSizePolicy( TQSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Fixed ) );
00312 
00313   connect( mDaysCheckBox, TQT_SIGNAL( toggled( bool ) ),
00314            this, TQT_SLOT( toggleDays( bool ) ) );
00315 
00316   bottomLayout->addWidget( mDaysCheckBox );
00317   bottomLayout->addWidget( mDaysSpinBox );
00318   bottomLayout->addWidget( new TQLabel( i18n( "day(s)" ), this ) );
00319 
00320   TQGridLayout *webdavLayout = new TQGridLayout();
00321 
00322   mUrl = new KLineEdit( this );
00323   mUsername = new KLineEdit( this );
00324   mPassword = new KLineEdit( this );
00325   mPassword->setEchoMode( KLineEdit::Password );
00326 
00327   KPushButton *removeButton = new KPushButton( this );
00328   removeButton->setText( i18n( "Remove" ) );
00329   connect( removeButton, TQT_SIGNAL( clicked() ),
00330            this, TQT_SLOT( deleteWidget() ) );
00331 
00332   mDefaultCheckBox = new TQCheckBox( this );
00333   mDefaultCheckBox->setText( i18n( "Set as Default" ) );
00334 
00335   webdavLayout->addWidget( new TQLabel( i18n( "Location:" ), this ), 0, 0 );
00336   webdavLayout->addWidget( mUrl, 0, 1 );
00337   webdavLayout->addItem( new TQSpacerItem( 40, 20, TQSizePolicy::Fixed ), 0, 2 );
00338   webdavLayout->addWidget( removeButton, 0, 3 );
00339   webdavLayout->addMultiCellLayout( bottomLayout, 1, 1, 0, 1 );
00340   webdavLayout->addWidget( mDefaultCheckBox, 1, 3 );
00341 
00342   TQGridLayout *mainLayout = new TQGridLayout( this );
00343   mainLayout->addItem( new TQSpacerItem( 40, 20, TQSizePolicy::Fixed ), 0, 0 );
00344   mainLayout->addMultiCellLayout( webdavLayout, 1, 1, 0, 4 );
00345   mainLayout->addWidget( new TQLabel( i18n( "Username:" ), this ), 2, 0 );
00346   mainLayout->addWidget( mUsername, 2, 1 );
00347   mainLayout->addItem( new TQSpacerItem( 40, 20, TQSizePolicy::Fixed ), 2, 2 );
00348   mainLayout->addWidget( new TQLabel( i18n( "Password:" ), this ), 2, 3 );
00349   mainLayout->addWidget( mPassword, 2, 4 );
00350 }
00351 
00352 void WebdavCalendar::deleteWidget()
00353 {
00354   emit deleteRequest( this );
00355 }
00356 
00357 void LocalCalendar::toggleDays( bool state )
00358 {
00359   mDaysSpinBox->setEnabled( state );
00360 }
00361 
00362 void WebdavCalendar::toggleDays( bool state )
00363 {
00364   mDaysSpinBox->setEnabled( state );
00365 }
00366 
00367 #include "configguisunbird.moc"