kitchensync

configguisunbird.cpp
1/*
2 This file is part of KitchenSync.
3
4 Copyright (c) 2007 Tobias Koenig <tokoe@kde.org>
5 Copyright (c) 2007 Anirudh Ramesh <abattoir@abattoir.in>
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
20 USA.
21*/
22
23#include "configguisunbird.h"
24
25#include <tqdom.h>
26#include <tqtabwidget.h>
27#include <tqlabel.h>
28#include <tqlayout.h>
29#include <tqbuttongroup.h>
30#include <tqcheckbox.h>
31#include <tqsizepolicy.h>
32#include <tqptrlist.h>
33#include <tqspinbox.h>
34#include <tqwidget.h>
35
36#include <kurlrequester.h>
37#include <klineedit.h>
38#include <kpushbutton.h>
39#include <kdialog.h>
40#include <tdelocale.h>
41#include <tdefile.h>
42
43ConfigGuiSunbird::ConfigGuiSunbird( const QSync::Member &member, TQWidget *parent )
44 : ConfigGui( member, parent )
45{
46 TQTabWidget *tabWidget = new TQTabWidget( this );
47 topLayout()->addWidget( tabWidget );
48
49 mLocalWidget = new TQWidget( tabWidget );
50 mLocalLayout = new TQVBoxLayout( mLocalWidget, KDialog::spacingHint() );
51
52 mWebdavWidget = new TQWidget( tabWidget );
53 mWebdavLayout = new TQVBoxLayout( mWebdavWidget, KDialog::spacingHint() );
54
55 tabWidget->addTab( mLocalWidget, i18n( "Local Calendars" ) );
56 tabWidget->addTab( mWebdavWidget, i18n( "WebDAV Calendars" ) );
57
58 KPushButton *mLocalAddButton = new KPushButton( mLocalWidget );
59 mLocalAddButton->setText( i18n( "Add new calendar" ) );
60 mLocalAddButton->setSizePolicy( TQSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Fixed ) );
61 mLocalLayout->addWidget( mLocalAddButton );
62 connect( mLocalAddButton, TQT_SIGNAL( clicked() ),
63 this, TQT_SLOT( addLocalCalendar() ) );
64
65 KPushButton *mWebdavAddButton = new KPushButton( mWebdavWidget );
66 mWebdavAddButton->setText( i18n( "Add new calendar" ) );
67 mWebdavAddButton->setSizePolicy( TQSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Fixed ) );
68 mWebdavLayout->addWidget( mWebdavAddButton );
69 connect( mWebdavAddButton, TQT_SIGNAL( clicked() ),
70 this, TQT_SLOT( addWebdavCalendar() ) );
71
72 mLocalSpacer = new TQSpacerItem( 20, 40, TQSizePolicy::Expanding );
73 mLocalLayout->addItem( mLocalSpacer );
74 mWebdavSpacer = new TQSpacerItem( 20, 40, TQSizePolicy::Expanding );
75 mWebdavLayout->addItem( mWebdavSpacer );
76}
77
78void ConfigGuiSunbird::load( const TQString &xml )
79{
80 TQString path;
81 TQString url;
82 TQString username;
83 TQString password;
84 TQString defaultcal;
85 TQString days;
86
87 TQDomDocument doc;
88 doc.setContent( xml );
89 TQDomElement docElement = doc.documentElement();
90 TQDomNode node;
91 for( node = docElement.firstChild(); !node.isNull(); node = node.nextSibling() ) {
92 TQDomElement element = node.toElement();
93 if ( element.tagName() == "file" ) {
94 TQDomAttr pathAttr = element.attributeNode( "path" );
95 path = pathAttr.value();
96 TQDomAttr defaultAttr = element.attributeNode( "default" );
97 defaultcal = defaultAttr.value();
98 TQDomAttr daysAttr = element.attributeNode( "deletedaysold" );
99 days = daysAttr.value();
100
101 LocalCalendar *cal = new LocalCalendar( path, defaultcal, days, mLocalWidget );
102 mLocalLayout->removeItem( mLocalSpacer );
103 cal->setSizePolicy( TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Fixed ) );
104 mLocalLayout->addWidget( cal );
105 mLocalLayout->addItem( mLocalSpacer );
106 mLocalList.append( cal );
107
108 connect( cal, TQT_SIGNAL( deleteRequest( LocalCalendar* ) ), TQT_SLOT( delLocalCalendar( LocalCalendar* ) ) );
109 cal->show();
110 } else if ( element.tagName() == "webdav" ) {
111 TQDomAttr urlAttr = element.attributeNode( "url" );
112 url = urlAttr.value();
113 TQDomAttr unameAttr = element.attributeNode( "username" );
114 username = unameAttr.value();
115 TQDomAttr pwordAttr = element.attributeNode( "password" );
116 password = pwordAttr.value();
117 TQDomAttr defaultAttr = element.attributeNode( "default" );
118 defaultcal = defaultAttr.value();
119 TQDomAttr daysAttr = element.attributeNode( "deletedaysold" );
120 days = daysAttr.value();
121
122 WebdavCalendar *cal = new WebdavCalendar( username, password,
123 url, defaultcal, days, mWebdavWidget );
124 mWebdavLayout->removeItem( mWebdavSpacer );
125 cal->setSizePolicy( TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Fixed ) );
126 mWebdavLayout->addWidget( cal );
127 mWebdavLayout->addItem( mWebdavSpacer );
128 mWebdavList.append( cal );
129
130 connect( cal, TQT_SIGNAL( deleteRequest( WebdavCalendar* ) ), TQT_SLOT( delWebdavCalendar( WebdavCalendar* ) ) );
131 cal->show();
132 }
133 }
134}
135
136TQString ConfigGuiSunbird::save() const
137{
138 TQString config = "<config>\n";
139
140 for ( uint i = 0; i < mLocalList.count(); ++i ) {
141 LocalCalendar *lcal = mLocalList[ i ];
142 config += TQString( "<file " );
143 config += TQString( "path=\"%1\" " ).arg( lcal->mPathRequester->url() );
144
145 if ( lcal->mDaysCheckBox->isChecked() ) {
146 config += TQString( "deletedaysold=\"%1\" " ).arg( lcal->mDaysSpinBox->value() );
147 }
148 if ( lcal->mDefaultCheckBox->isChecked() ) {
149 config += TQString( "default=\"1\" " );
150 }
151 config += TQString( "/>\n" );
152 }
153
154 for ( uint i = 0; i < mWebdavList.count(); ++i ) {
155 WebdavCalendar *wcal = mWebdavList[ i ];
156 config += TQString( "<webdav " );
157 config += TQString( "username=\"%1\" " ).arg( wcal->mUsername->text() );
158 config += TQString( "password=\"%1\" " ).arg( wcal->mPassword->text() );
159 config += TQString( "url=\"%1\" " ).arg( wcal->mUrl->text() );
160
161 if ( wcal->mDaysCheckBox->isChecked() ) {
162 config += TQString( "deletedaysold=\"%1\" " ).arg( wcal->mDaysSpinBox->value() );
163 }
164 if ( wcal->mDefaultCheckBox->isChecked() ) {
165 config += TQString( "default=\"1\" " );
166 }
167 config += TQString( "/>\n" );
168 }
169 config += "</config>";
170
171 return config;
172}
173
174void ConfigGuiSunbird::addLocalCalendar()
175{
176 LocalCalendar *cal = new LocalCalendar( mLocalWidget );
177 mLocalLayout->removeItem( mLocalSpacer );
178 cal->setSizePolicy( TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Fixed ) );
179 mLocalLayout->addWidget( cal );
180 mLocalLayout->addItem( mLocalSpacer );
181 mLocalList.append( cal );
182
183 connect( cal, TQT_SIGNAL( deleteRequest( LocalCalendar* ) ), TQT_SLOT( delLocalCalendar( LocalCalendar* ) ) );
184 cal->show();
185}
186
187void ConfigGuiSunbird::delLocalCalendar( LocalCalendar *calendar )
188{
189 mLocalList.remove( calendar );
190 calendar->deleteLater();
191}
192
193void ConfigGuiSunbird::addWebdavCalendar()
194{
195 WebdavCalendar *cal = new WebdavCalendar( mWebdavWidget );
196 mWebdavLayout->removeItem( mWebdavSpacer );
197 cal->setSizePolicy( TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Fixed ) );
198 mWebdavLayout->addWidget( cal );
199 mWebdavLayout->addItem( mWebdavSpacer );
200 mWebdavList.append( cal );
201
202 connect( cal, TQT_SIGNAL( deleteRequest( WebdavCalendar* ) ), TQT_SLOT( delWebdavCalendar( WebdavCalendar* ) ) );
203 cal->show();
204}
205
206void ConfigGuiSunbird::delWebdavCalendar( WebdavCalendar *calendar )
207{
208 mWebdavList.remove( calendar );
209 calendar->deleteLater();
210}
211
212LocalCalendar::LocalCalendar( TQWidget *parent )
213 : TQWidget( parent )
214{
215 initGui();
216}
217
218LocalCalendar::LocalCalendar( const TQString &path, const TQString &defaultcal, const TQString &days, TQWidget *parent )
219 : TQWidget( parent )
220{
221 initGui();
222
223 mPathRequester->setURL( path );
224 mDefaultCheckBox->setChecked( defaultcal.toInt() == 1 );
225
226 if ( !days.isEmpty() ) {
227 mDaysCheckBox->setChecked( true );
228 mDaysSpinBox->setEnabled( true );
229 mDaysSpinBox->setValue( days.toInt() );
230 }
231}
232
233void LocalCalendar::initGui()
234{
235 TQBoxLayout *bottomLayout = new TQHBoxLayout();
236
237 mDaysCheckBox = new TQCheckBox( this );
238 mDaysCheckBox->setText( i18n( "Sync only events newer than" ) );
239
240 mDaysSpinBox = new TQSpinBox( this );
241 mDaysSpinBox->setDisabled( true );
242 mDaysSpinBox->setSizePolicy( TQSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Fixed ) );
243
244 connect( mDaysCheckBox, TQT_SIGNAL( toggled( bool ) ),
245 this, TQT_SLOT( toggleDays( bool ) ) );
246
247 bottomLayout->addWidget( mDaysCheckBox );
248 bottomLayout->addWidget( mDaysSpinBox );
249 bottomLayout->addWidget( new TQLabel( i18n( "day(s)" ), this ) );
250
251 TQGridLayout *localLayout = new TQGridLayout( this );
252
253 mPathRequester = new KURLRequester( this );
254
255 KPushButton *removeButton = new KPushButton( this );
256 removeButton->setSizePolicy( TQSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Fixed ) );
257 removeButton->setText( i18n( "Remove" ) );
258 connect( removeButton, TQT_SIGNAL( clicked() ),
259 this, TQT_SLOT( deleteWidget() ) );
260
261 mDefaultCheckBox = new TQCheckBox( this );
262 mDefaultCheckBox->setText( i18n( "Set as Default" ) );
263
264 localLayout->addItem( new TQSpacerItem( 40, 20, TQSizePolicy::Expanding ), 0, 0 );
265 localLayout->addWidget( new TQLabel( i18n( "Location:" ), this ), 1, 0 );
266 localLayout->addWidget( mPathRequester, 1, 1 );
267 localLayout->addItem( new TQSpacerItem( 40, 20, TQSizePolicy::Fixed ), 1, 2 );
268 localLayout->addWidget( removeButton, 1, 3 );
269 localLayout->addMultiCellLayout( bottomLayout, 2, 2, 0, 2 );
270 localLayout->addWidget( mDefaultCheckBox, 2, 3 );
271}
272
273void LocalCalendar::deleteWidget()
274{
275 emit deleteRequest( this );
276}
277
278WebdavCalendar::WebdavCalendar( TQWidget *parent )
279 : TQWidget( parent )
280{
281 initGui();
282};
283
284WebdavCalendar::WebdavCalendar( const TQString &username, const TQString &password, const TQString &url,
285 const TQString &defaultcal, const TQString &days, TQWidget *parent )
286 : TQWidget( parent )
287{
288 initGui();
289
290 mUsername->setText( username );
291 mPassword->setText( password );
292 mUrl->setText( url );
293 mDefaultCheckBox->setChecked( defaultcal.toInt() == 1 );
294
295 if ( !days.isEmpty() ) {
296 mDaysCheckBox->setChecked( true );
297 mDaysSpinBox->setEnabled( true );
298 mDaysSpinBox->setValue( days.toInt() );
299 }
300}
301
302void WebdavCalendar::initGui()
303{
304 TQBoxLayout *bottomLayout = new TQHBoxLayout();
305
306 mDaysCheckBox = new TQCheckBox( this );
307 mDaysCheckBox->setText( i18n( "Sync only events newer than" ) );
308
309 mDaysSpinBox = new TQSpinBox( this );
310 mDaysSpinBox->setDisabled( true );
311 mDaysSpinBox->setSizePolicy( TQSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Fixed ) );
312
313 connect( mDaysCheckBox, TQT_SIGNAL( toggled( bool ) ),
314 this, TQT_SLOT( toggleDays( bool ) ) );
315
316 bottomLayout->addWidget( mDaysCheckBox );
317 bottomLayout->addWidget( mDaysSpinBox );
318 bottomLayout->addWidget( new TQLabel( i18n( "day(s)" ), this ) );
319
320 TQGridLayout *webdavLayout = new TQGridLayout();
321
322 mUrl = new KLineEdit( this );
323 mUsername = new KLineEdit( this );
324 mPassword = new KLineEdit( this );
325 mPassword->setEchoMode( KLineEdit::Password );
326
327 KPushButton *removeButton = new KPushButton( this );
328 removeButton->setText( i18n( "Remove" ) );
329 connect( removeButton, TQT_SIGNAL( clicked() ),
330 this, TQT_SLOT( deleteWidget() ) );
331
332 mDefaultCheckBox = new TQCheckBox( this );
333 mDefaultCheckBox->setText( i18n( "Set as Default" ) );
334
335 webdavLayout->addWidget( new TQLabel( i18n( "Location:" ), this ), 0, 0 );
336 webdavLayout->addWidget( mUrl, 0, 1 );
337 webdavLayout->addItem( new TQSpacerItem( 40, 20, TQSizePolicy::Fixed ), 0, 2 );
338 webdavLayout->addWidget( removeButton, 0, 3 );
339 webdavLayout->addMultiCellLayout( bottomLayout, 1, 1, 0, 1 );
340 webdavLayout->addWidget( mDefaultCheckBox, 1, 3 );
341
342 TQGridLayout *mainLayout = new TQGridLayout( this );
343 mainLayout->addItem( new TQSpacerItem( 40, 20, TQSizePolicy::Fixed ), 0, 0 );
344 mainLayout->addMultiCellLayout( webdavLayout, 1, 1, 0, 4 );
345 mainLayout->addWidget( new TQLabel( i18n( "Username:" ), this ), 2, 0 );
346 mainLayout->addWidget( mUsername, 2, 1 );
347 mainLayout->addItem( new TQSpacerItem( 40, 20, TQSizePolicy::Fixed ), 2, 2 );
348 mainLayout->addWidget( new TQLabel( i18n( "Password:" ), this ), 2, 3 );
349 mainLayout->addWidget( mPassword, 2, 4 );
350}
351
352void WebdavCalendar::deleteWidget()
353{
354 emit deleteRequest( this );
355}
356
357void LocalCalendar::toggleDays( bool state )
358{
359 mDaysSpinBox->setEnabled( state );
360}
361
362void WebdavCalendar::toggleDays( bool state )
363{
364 mDaysSpinBox->setEnabled( state );
365}
366
367#include "configguisunbird.moc"