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 <tdelocale.h> 00041 #include <tdefile.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"