summaryrefslogtreecommitdiff
authorzecke <zecke>2003-09-20 18:23:58 (UTC)
committer zecke <zecke>2003-09-20 18:23:58 (UTC)
commit2fbd2230957098e5601d9d5c4b04a4af220afbce (patch) (unidiff)
treed187f0e8b61f97f36764591f6daa81d5bc2cda41
parenta986ab57229fa7a0d039d320001dc48018951bf1 (diff)
downloadopie-2fbd2230957098e5601d9d5c4b04a4af220afbce.zip
opie-2fbd2230957098e5601d9d5c4b04a4af220afbce.tar.gz
opie-2fbd2230957098e5601d9d5c4b04a4af220afbce.tar.bz2
Thanks to treke for tweaking the ui file
Allow the user to set how the QCOP bridge should response Either in Qtopia1.7 mode or the one found prior including Opie1.0 or respond in both ways We still need to check what sync utilities can cope with 'both'
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/settings/security/security.cpp17
-rw-r--r--core/settings/security/securitybase.ui27
2 files changed, 38 insertions, 6 deletions
diff --git a/core/settings/security/security.cpp b/core/settings/security/security.cpp
index 75a181b..c4726b3 100644
--- a/core/settings/security/security.cpp
+++ b/core/settings/security/security.cpp
@@ -1,289 +1,296 @@
1/********************************************************************** 1/**********************************************************************
2 ** Copyright (C) 2000 Trolltech AS. All rights reserved. 2 ** Copyright (C) 2000 Trolltech AS. All rights reserved.
3 ** 3 **
4 ** This file is part of Qtopia Environment. 4 ** This file is part of Qtopia Environment.
5 ** 5 **
6 ** This file may be distributed and/or modified under the terms of the 6 ** This file may be distributed and/or modified under the terms of the
7 ** GNU General Public License version 2 as published by the Free Software 7 ** GNU General Public License version 2 as published by the Free Software
8 ** Foundation and appearing in the file LICENSE.GPL included in the 8 ** Foundation and appearing in the file LICENSE.GPL included in the
9 ** packaging of this file. 9 ** packaging of this file.
10 ** 10 **
11 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13 ** 13 **
14 ** See http://www.trolltech.com/gpl/ for GPL licensing information. 14 ** See http://www.trolltech.com/gpl/ for GPL licensing information.
15 ** 15 **
16 ** Contact info@trolltech.com if any conditions of this licensing are 16 ** Contact info@trolltech.com if any conditions of this licensing are
17 ** not clear to you. 17 ** not clear to you.
18 ** 18 **
19 **********************************************************************/ 19 **********************************************************************/
20#include "security.h" 20#include "security.h"
21 21
22#include <qpe/qpeapplication.h> 22#include <qpe/qpeapplication.h>
23#include <qpe/config.h> 23#include <qpe/config.h>
24#include <qpe/password.h> 24#include <qpe/password.h>
25#include <qpe/qpedialog.h> 25#include <qpe/qpedialog.h>
26#include <qpe/qcopenvelope_qws.h>
26 27
27#include <qcheckbox.h> 28#include <qcheckbox.h>
28#include <qpushbutton.h> 29#include <qpushbutton.h>
29#include <qcombobox.h> 30#include <qcombobox.h>
30#include <qmessagebox.h> 31#include <qmessagebox.h>
31#include <qfile.h> 32#include <qfile.h>
32#include <qlistview.h> 33#include <qlistview.h>
33#include <qtextstream.h> 34#include <qtextstream.h>
34 35
35 Security::Security( QWidget* parent, const char* name, WFlags fl ) 36 Security::Security( QWidget* parent, const char* name, WFlags fl )
36: SecurityBase( parent, name, TRUE, fl ) 37: SecurityBase( parent, name, TRUE, fl )
37{ 38{
38 valid=FALSE; 39 valid=FALSE;
39 Config cfg("Security"); 40 Config cfg("Security");
40 cfg.setGroup("Passcode"); 41 cfg.setGroup("Passcode");
41 passcode = cfg.readEntry("passcode"); 42 passcode = cfg.readEntry("passcode");
42 passcode_poweron->setChecked(cfg.readBoolEntry("passcode_poweron",FALSE)); 43 passcode_poweron->setChecked(cfg.readBoolEntry("passcode_poweron",FALSE));
43 cfg.setGroup("Sync"); 44 cfg.setGroup("Sync");
44 int auth_peer = cfg.readNumEntry("auth_peer",0xc0a88100);//new default 192.168.129.0/24 45 int auth_peer = cfg.readNumEntry("auth_peer",0xc0a88100);//new default 192.168.129.0/24
45 int auth_peer_bits = cfg.readNumEntry("auth_peer_bits",24); 46 int auth_peer_bits = cfg.readNumEntry("auth_peer_bits",24);
46 selectNet(auth_peer,auth_peer_bits); 47 selectNet(auth_peer,auth_peer_bits);
47 connect(syncnet, SIGNAL(textChanged(const QString&)), 48 connect(syncnet, SIGNAL(textChanged(const QString&)),
48 this, SLOT(setSyncNet(const QString&))); 49 this, SLOT(setSyncNet(const QString&)));
49 50
50 /* 51 /*
51 cfg.setGroup("Remote"); 52 cfg.setGroup("Remote");
52 if ( telnetAvailable() ) 53 if ( telnetAvailable() )
53 telnet->setChecked(cfg.readEntry("allow_telnet")); 54 telnet->setChecked(cfg.readEntry("allow_telnet"));
54 else 55 else
55 telnet->hide(); 56 telnet->hide();
56 57
57 if ( sshAvailable() ) 58 if ( sshAvailable() )
58 ssh->setChecked(cfg.readEntry("allow_ssh")); 59 ssh->setChecked(cfg.readEntry("allow_ssh"));
59 else 60 else
60 ssh->hide(); 61 ssh->hide();
61 */ 62 */
62 63
63 QString configFile = QPEApplication::qpeDir() + "/etc/opie-login.conf"; 64 QString configFile = QPEApplication::qpeDir() + "/etc/opie-login.conf";
64 Config loginCfg(configFile,Config::File); 65 Config loginCfg(configFile,Config::File);
65 66
66 loginCfg.setGroup("General"); 67 loginCfg.setGroup("General");
67 autoLoginName=loginCfg.readEntry("AutoLogin",""); 68 autoLoginName=loginCfg.readEntry("AutoLogin","");
68 69
69 if (autoLoginName.stripWhiteSpace().isEmpty()) { 70 if (autoLoginName.stripWhiteSpace().isEmpty()) {
70 autoLogin=false; 71 autoLogin=false;
71 } else { 72 } else {
72 autoLogin=true; 73 autoLogin=true;
73 } 74 }
74 75
76 cfg.setGroup("SyncMode");
77 int mode = cfg.readNumEntry("Mode",2); // Default to Sharp
78 syncModeCombo->setCurrentItem( mode - 1 );
75 79
76 connect(autologinToggle, SIGNAL(toggled(bool)), this, SLOT(toggleAutoLogin(bool))); 80 connect(autologinToggle, SIGNAL(toggled(bool)), this, SLOT(toggleAutoLogin(bool)));
77 connect(userlist, SIGNAL(activated(int)), this, SLOT(changeLoginName(int))); 81 connect(userlist, SIGNAL(activated(int)), this, SLOT(changeLoginName(int)));
78 connect(changepasscode,SIGNAL(clicked()), this, SLOT(changePassCode())); 82 connect(changepasscode,SIGNAL(clicked()), this, SLOT(changePassCode()));
79 connect(clearpasscode,SIGNAL(clicked()), this, SLOT(clearPassCode())); 83 connect(clearpasscode,SIGNAL(clicked()), this, SLOT(clearPassCode()));
80 84
81 loadUsers(); 85 loadUsers();
82 updateGUI(); 86 updateGUI();
83 87
84 dl = new QPEDialogListener(this); 88 dl = new QPEDialogListener(this);
85 showMaximized(); 89 showMaximized();
86} 90}
87 91
88Security::~Security() 92Security::~Security()
89{ 93{
90} 94}
91 95
92 96
93void Security::updateGUI() 97void Security::updateGUI()
94{ 98{
95 bool empty = passcode.isEmpty(); 99 bool empty = passcode.isEmpty();
96 100
97 changepasscode->setText( empty ? tr("Set passcode" ) 101 changepasscode->setText( empty ? tr("Set passcode" )
98 : tr("Change passcode" ) ); 102 : tr("Change passcode" ) );
99 passcode_poweron->setEnabled( !empty ); 103 passcode_poweron->setEnabled( !empty );
100 clearpasscode->setEnabled( !empty ); 104 clearpasscode->setEnabled( !empty );
101 105
102 autologinToggle->setChecked(autoLogin); 106 autologinToggle->setChecked(autoLogin);
103 userlist->setEnabled(autoLogin); 107 userlist->setEnabled(autoLogin);
104 108
105} 109}
106 110
107 111
108void Security::show() 112void Security::show()
109{ 113{
110 valid=FALSE; 114 valid=FALSE;
111 setEnabled(FALSE); 115 setEnabled(FALSE);
112 SecurityBase::show(); 116 SecurityBase::show();
113 if ( passcode.isEmpty() ) { 117 if ( passcode.isEmpty() ) {
114 // could insist... 118 // could insist...
115 //changePassCode(); 119 //changePassCode();
116 //if ( passcode.isEmpty() ) 120 //if ( passcode.isEmpty() )
117 //reject(); 121 //reject();
118 } else { 122 } else {
119 QString pc = enterPassCode(tr("Enter passcode")); 123 QString pc = enterPassCode(tr("Enter passcode"));
120 if ( pc != passcode ) { 124 if ( pc != passcode ) {
121 QMessageBox::critical(this, tr("Passcode incorrect"), 125 QMessageBox::critical(this, tr("Passcode incorrect"),
122 tr("The passcode entered is incorrect.\nAccess denied")); 126 tr("The passcode entered is incorrect.\nAccess denied"));
123 reject(); 127 reject();
124 return; 128 return;
125 } 129 }
126 } 130 }
127 setEnabled(TRUE); 131 setEnabled(TRUE);
128 valid=TRUE; 132 valid=TRUE;
129} 133}
130 134
131void Security::accept() 135void Security::accept()
132{ 136{
133 applySecurity(); 137 applySecurity();
134 QDialog::accept(); 138 QDialog::accept();
139 QCopEnvelope env("QPE/System", "securityChanged()" );
135} 140}
136 141
137void Security::done(int r) 142void Security::done(int r)
138{ 143{
139 QDialog::done(r); 144 QDialog::done(r);
140 close(); 145 close();
141} 146}
142 147
143void Security::selectNet(int auth_peer,int auth_peer_bits) 148void Security::selectNet(int auth_peer,int auth_peer_bits)
144{ 149{
145 QString sn; 150 QString sn;
146 if ( auth_peer_bits == 0 && auth_peer == 0 ) { 151 if ( auth_peer_bits == 0 && auth_peer == 0 ) {
147 sn = tr("Any"); 152 sn = tr("Any");
148 } else if ( auth_peer_bits == 32 && auth_peer == 0 ) { 153 } else if ( auth_peer_bits == 32 && auth_peer == 0 ) {
149 sn = tr("None"); 154 sn = tr("None");
150 } else { 155 } else {
151 sn = 156 sn =
152 QString::number((auth_peer>>24)&0xff) + "." 157 QString::number((auth_peer>>24)&0xff) + "."
153 + QString::number((auth_peer>>16)&0xff) + "." 158 + QString::number((auth_peer>>16)&0xff) + "."
154 + QString::number((auth_peer>>8)&0xff) + "." 159 + QString::number((auth_peer>>8)&0xff) + "."
155 + QString::number((auth_peer>>0)&0xff) + "/" 160 + QString::number((auth_peer>>0)&0xff) + "/"
156 + QString::number(auth_peer_bits); 161 + QString::number(auth_peer_bits);
157 } 162 }
158 for (int i=0; i<syncnet->count(); i++) { 163 for (int i=0; i<syncnet->count(); i++) {
159 if ( syncnet->text(i).left(sn.length()) == sn ) { 164 if ( syncnet->text(i).left(sn.length()) == sn ) {
160 syncnet->setCurrentItem(i); 165 syncnet->setCurrentItem(i);
161 return; 166 return;
162 } 167 }
163 } 168 }
164 qDebug("No match for \"%s\"",sn.latin1()); 169 qDebug("No match for \"%s\"",sn.latin1());
165} 170}
166 171
167void Security::parseNet(const QString& sn,int& auth_peer,int& auth_peer_bits) 172void Security::parseNet(const QString& sn,int& auth_peer,int& auth_peer_bits)
168{ 173{
169 auth_peer=0; 174 auth_peer=0;
170 if ( sn == tr("Any") ) { 175 if ( sn == tr("Any") ) {
171 auth_peer = 0; 176 auth_peer = 0;
172 auth_peer_bits = 0; 177 auth_peer_bits = 0;
173 } else if ( sn == tr("None") ) { 178 } else if ( sn == tr("None") ) {
174 auth_peer = 0; 179 auth_peer = 0;
175 auth_peer_bits = 32; 180 auth_peer_bits = 32;
176 } else { 181 } else {
177 int x=0; 182 int x=0;
178 for (int i=0; i<4; i++) { 183 for (int i=0; i<4; i++) {
179 int nx = sn.find(QChar(i==3 ? '/' : '.'),x); 184 int nx = sn.find(QChar(i==3 ? '/' : '.'),x);
180 auth_peer = (auth_peer<<8)|sn.mid(x,nx-x).toInt(); 185 auth_peer = (auth_peer<<8)|sn.mid(x,nx-x).toInt();
181 x = nx+1; 186 x = nx+1;
182 } 187 }
183 uint n = (uint)sn.find(' ',x)-x; 188 uint n = (uint)sn.find(' ',x)-x;
184 auth_peer_bits = sn.mid(x,n).toInt(); 189 auth_peer_bits = sn.mid(x,n).toInt();
185 } 190 }
186} 191}
187 192
188void Security::loadUsers ( void ) 193void Security::loadUsers ( void )
189{ 194{
190 QFile passwd("/etc/passwd"); 195 QFile passwd("/etc/passwd");
191 if ( passwd.open(IO_ReadOnly) ) { 196 if ( passwd.open(IO_ReadOnly) ) {
192 QTextStream t( &passwd ); 197 QTextStream t( &passwd );
193 QString s; 198 QString s;
194 QStringList account; 199 QStringList account;
195 while ( !t.eof() ) { 200 while ( !t.eof() ) {
196 account = QStringList::split(':',t.readLine()); 201 account = QStringList::split(':',t.readLine());
197 202
198 // Hide disabled accounts 203 // Hide disabled accounts
199 if (*account.at(1)!="*") { 204 if (*account.at(1)!="*") {
200 205
201 userlist->insertItem(*account.at(0)); 206 userlist->insertItem(*account.at(0));
202 // Highlight this item if it is set to autologinToggle 207 // Highlight this item if it is set to autologinToggle
203 if ( *account.at(0) == autoLoginName) 208 if ( *account.at(0) == autoLoginName)
204 userlist->setCurrentItem(userlist->count()-1); 209 userlist->setCurrentItem(userlist->count()-1);
205 } 210 }
206 } 211 }
207 passwd.close(); 212 passwd.close();
208 } 213 }
209 214
210} 215}
211void Security::toggleAutoLogin(bool val) 216void Security::toggleAutoLogin(bool val)
212{ 217{
213 autoLogin=val; 218 autoLogin=val;
214 userlist->setEnabled(val); 219 userlist->setEnabled(val);
215 if (!autoLogin) 220 if (!autoLogin)
216 autoLoginName=userlist->currentText(); 221 autoLoginName=userlist->currentText();
217} 222}
218void Security::setSyncNet(const QString& sn) 223void Security::setSyncNet(const QString& sn)
219{ 224{
220 int auth_peer,auth_peer_bits; 225 int auth_peer,auth_peer_bits;
221 parseNet(sn,auth_peer,auth_peer_bits); 226 parseNet(sn,auth_peer,auth_peer_bits);
222 selectNet(auth_peer,auth_peer_bits); 227 selectNet(auth_peer,auth_peer_bits);
223} 228}
224 229
225void Security::applySecurity() 230void Security::applySecurity()
226{ 231{
227 if ( valid ) { 232 if ( valid ) {
228 Config cfg("Security"); 233 Config cfg("Security");
229 cfg.setGroup("Passcode"); 234 cfg.setGroup("Passcode");
230 cfg.writeEntry("passcode",passcode); 235 cfg.writeEntry("passcode",passcode);
231 cfg.writeEntry("passcode_poweron",passcode_poweron->isChecked()); 236 cfg.writeEntry("passcode_poweron",passcode_poweron->isChecked());
232 cfg.setGroup("Sync"); 237 cfg.setGroup("Sync");
233 int auth_peer=0; 238 int auth_peer=0;
234 int auth_peer_bits; 239 int auth_peer_bits;
235 QString sn = syncnet->currentText(); 240 QString sn = syncnet->currentText();
236 parseNet(sn,auth_peer,auth_peer_bits); 241 parseNet(sn,auth_peer,auth_peer_bits);
237 cfg.writeEntry("auth_peer",auth_peer); 242 cfg.writeEntry("auth_peer",auth_peer);
238 cfg.writeEntry("auth_peer_bits",auth_peer_bits); 243 cfg.writeEntry("auth_peer_bits",auth_peer_bits);
239 /* 244 /*
240 cfg.setGroup("Remote"); 245 cfg.setGroup("Remote");
241 if ( telnetAvailable() ) 246 if ( telnetAvailable() )
242 cfg.writeEntry("allow_telnet",telnet->isChecked()); 247 cfg.writeEntry("allow_telnet",telnet->isChecked());
243 if ( sshAvailable() ) 248 if ( sshAvailable() )
244 cfg.writeEntry("allow_ssh",ssh->isChecked()); 249 cfg.writeEntry("allow_ssh",ssh->isChecked());
245 // ### write ssh/telnet sys config files 250 // ### write ssh/telnet sys config files
246 */ 251 */
247 252
248 QString configFile = QPEApplication::qpeDir() + "/etc/opie-login.conf"; 253 QString configFile = QPEApplication::qpeDir() + "/etc/opie-login.conf";
249 Config loginCfg(configFile,Config::File); 254 Config loginCfg(configFile,Config::File);
250 loginCfg.setGroup("General"); 255 loginCfg.setGroup("General");
251 256
252 if (autoLogin) { 257 if (autoLogin) {
253 loginCfg.writeEntry("AutoLogin",autoLoginName); 258 loginCfg.writeEntry("AutoLogin",autoLoginName);
254 } else { 259 } else {
255 loginCfg.removeEntry("AutoLogin"); 260 loginCfg.removeEntry("AutoLogin");
256 } 261 }
257 262
263 cfg.setGroup("SyncMode");
264 cfg.writeEntry("Mode", syncModeCombo->currentItem()+1 );
258 } 265 }
259} 266}
260 267
261void Security::changeLoginName( int idx ) 268void Security::changeLoginName( int idx )
262{ 269{
263 autoLoginName = userlist->text(idx);; 270 autoLoginName = userlist->text(idx);;
264 updateGUI(); 271 updateGUI();
265} 272}
266 273
267void Security::changePassCode() 274void Security::changePassCode()
268{ 275{
269 QString new1; 276 QString new1;
270 QString new2; 277 QString new2;
271 278
272 do { 279 do {
273 new1 = enterPassCode(tr("Enter new passcode")); 280 new1 = enterPassCode(tr("Enter new passcode"));
274 if ( new1.isNull() ) 281 if ( new1.isNull() )
275 return; 282 return;
276 new2 = enterPassCode(tr("Re-enter new passcode")); 283 new2 = enterPassCode(tr("Re-enter new passcode"));
277 if ( new2.isNull() ) 284 if ( new2.isNull() )
278 return; 285 return;
279 } while (new1 != new2); 286 } while (new1 != new2);
280 287
281 passcode = new1; 288 passcode = new1;
282 updateGUI(); 289 updateGUI();
283} 290}
284 291
285void Security::clearPassCode() 292void Security::clearPassCode()
286{ 293{
287 passcode = QString::null; 294 passcode = QString::null;
288 updateGUI(); 295 updateGUI();
289} 296}
diff --git a/core/settings/security/securitybase.ui b/core/settings/security/securitybase.ui
index da25f39..73290e5 100644
--- a/core/settings/security/securitybase.ui
+++ b/core/settings/security/securitybase.ui
@@ -1,46 +1,46 @@
1<!DOCTYPE UI><UI> 1<!DOCTYPE UI><UI>
2<class>SecurityBase</class> 2<class>SecurityBase</class>
3<widget> 3<widget>
4 <class>QDialog</class> 4 <class>QDialog</class>
5 <property stdset="1"> 5 <property stdset="1">
6 <name>name</name> 6 <name>name</name>
7 <cstring>SecurityBase</cstring> 7 <cstring>SecurityBase</cstring>
8 </property> 8 </property>
9 <property stdset="1"> 9 <property stdset="1">
10 <name>geometry</name> 10 <name>geometry</name>
11 <rect> 11 <rect>
12 <x>0</x> 12 <x>0</x>
13 <y>0</y> 13 <y>0</y>
14 <width>329</width> 14 <width>339</width>
15 <height>483</height> 15 <height>483</height>
16 </rect> 16 </rect>
17 </property> 17 </property>
18 <property stdset="1"> 18 <property stdset="1">
19 <name>caption</name> 19 <name>caption</name>
20 <string>Security Settings</string> 20 <string>Security Settings</string>
21 </property> 21 </property>
22 <property> 22 <property>
23 <name>layoutMargin</name> 23 <name>layoutMargin</name>
24 </property> 24 </property>
25 <property> 25 <property>
26 <name>layoutSpacing</name> 26 <name>layoutSpacing</name>
27 </property> 27 </property>
28 <vbox> 28 <vbox>
29 <property stdset="1"> 29 <property stdset="1">
30 <name>margin</name> 30 <name>margin</name>
31 <number>0</number> 31 <number>0</number>
32 </property> 32 </property>
33 <property stdset="1"> 33 <property stdset="1">
34 <name>spacing</name> 34 <name>spacing</name>
35 <number>0</number> 35 <number>0</number>
36 </property> 36 </property>
37 <widget> 37 <widget>
38 <class>QTabWidget</class> 38 <class>QTabWidget</class>
39 <property stdset="1"> 39 <property stdset="1">
40 <name>name</name> 40 <name>name</name>
41 <cstring>TabWidget2</cstring> 41 <cstring>TabWidget2</cstring>
42 </property> 42 </property>
43 <property> 43 <property>
44 <name>layoutMargin</name> 44 <name>layoutMargin</name>
45 </property> 45 </property>
46 <widget> 46 <widget>
@@ -352,61 +352,86 @@
352 <property> 352 <property>
353 <name>text</name> 353 <name>text</name>
354 <string>10.0.0.0/8</string> 354 <string>10.0.0.0/8</string>
355 </property> 355 </property>
356 </item> 356 </item>
357 <item> 357 <item>
358 <property> 358 <property>
359 <name>text</name> 359 <name>text</name>
360 <string>1.0.0.0/8</string> 360 <string>1.0.0.0/8</string>
361 </property> 361 </property>
362 </item> 362 </item>
363 <item> 363 <item>
364 <property> 364 <property>
365 <name>text</name> 365 <name>text</name>
366 <string>Any</string> 366 <string>Any</string>
367 </property> 367 </property>
368 </item> 368 </item>
369 <item> 369 <item>
370 <property> 370 <property>
371 <name>text</name> 371 <name>text</name>
372 <string>None</string> 372 <string>None</string>
373 </property> 373 </property>
374 </item> 374 </item>
375 <property stdset="1"> 375 <property stdset="1">
376 <name>name</name> 376 <name>name</name>
377 <cstring>syncnet</cstring> 377 <cstring>syncnet</cstring>
378 </property> 378 </property>
379 <property stdset="1"> 379 <property stdset="1">
380 <name>editable</name> 380 <name>editable</name>
381 <bool>true</bool> 381 <bool>true</bool>
382 </property> 382 </property>
383 </widget> 383 </widget>
384 <widget>
385 <class>QComboBox</class>
386 <item>
387 <property>
388 <name>text</name>
389 <string>Qtopia 1.7</string>
390 </property>
391 </item>
392 <item>
393 <property>
394 <name>text</name>
395 <string>Opie 1.0</string>
396 </property>
397 </item>
398 <item>
399 <property>
400 <name>text</name>
401 <string>Both</string>
402 </property>
403 </item>
404 <property stdset="1">
405 <name>name</name>
406 <cstring>syncModeCombo</cstring>
407 </property>
408 </widget>
384 </vbox> 409 </vbox>
385 </widget> 410 </widget>
386 <spacer> 411 <spacer>
387 <property> 412 <property>
388 <name>name</name> 413 <name>name</name>
389 <cstring>Spacer1</cstring> 414 <cstring>Spacer1</cstring>
390 </property> 415 </property>
391 <property stdset="1"> 416 <property stdset="1">
392 <name>orientation</name> 417 <name>orientation</name>
393 <enum>Vertical</enum> 418 <enum>Vertical</enum>
394 </property> 419 </property>
395 <property stdset="1"> 420 <property stdset="1">
396 <name>sizeType</name> 421 <name>sizeType</name>
397 <enum>Expanding</enum> 422 <enum>Expanding</enum>
398 </property> 423 </property>
399 <property> 424 <property>
400 <name>sizeHint</name> 425 <name>sizeHint</name>
401 <size> 426 <size>
402 <width>20</width> 427 <width>20</width>
403 <height>20</height> 428 <height>20</height>
404 </size> 429 </size>
405 </property> 430 </property>
406 </spacer> 431 </spacer>
407 </vbox> 432 </vbox>
408 </widget> 433 </widget>
409 </widget> 434 </widget>
410 </vbox> 435 </vbox>
411</widget> 436</widget>
412</UI> 437</UI>