00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
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"