Skip to content

Commit 14f84d1

Browse files
committedSep 11, 2015
Improvements to SQL Server connection dialog
- List databases found - Remove message boxes replace with message bar - Split into two columns for nicer layout. Funded by TechnoglogOne, Aus
1 parent e2684a4 commit 14f84d1

File tree

3 files changed

+383
-228
lines changed

3 files changed

+383
-228
lines changed
 

‎src/providers/mssql/qgsmssqlnewconnection.cpp

Lines changed: 83 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
***************************************************************************/
1717

1818
#include <QSettings>
19-
#include <QMessageBox>
2019
#include <QInputDialog>
20+
#include <QMessageBox>
2121

2222
#include <QtSql/QSqlDatabase>
2323
#include <QtSql/QSqlError>
@@ -31,6 +31,8 @@ QgsMssqlNewConnection::QgsMssqlNewConnection( QWidget *parent, const QString& co
3131
{
3232
setupUi( this );
3333

34+
lblWarning->hide();
35+
3436
if ( !connName.isEmpty() )
3537
{
3638
// populate the dialog with the information stored for the connection
@@ -40,7 +42,8 @@ QgsMssqlNewConnection::QgsMssqlNewConnection( QWidget *parent, const QString& co
4042
QString key = "/MSSQL/connections/" + connName;
4143
txtService->setText( settings.value( key + "/service" ).toString() );
4244
txtHost->setText( settings.value( key + "/host" ).toString() );
43-
txtDatabase->setText( settings.value( key + "/database" ).toString() );
45+
listDatabase->addItem( settings.value( key + "/database" ).toString() );
46+
listDatabase->setCurrentRow( 0 );
4447
cb_geometryColumns->setChecked( settings.value( key + "/geometryColumns", true ).toBool() );
4548
cb_allowGeometrylessTables->setChecked( settings.value( key + "/allowGeometrylessTables", true ).toBool() );
4649
cb_useEstimatedMetadata->setChecked( settings.value( key + "/estimatedMetadata", false ).toBool() );
@@ -69,15 +72,6 @@ void QgsMssqlNewConnection::accept()
6972
QString baseKey = "/MSSQL/connections/";
7073
settings.setValue( baseKey + "selected", txtName->text() );
7174

72-
if ( chkStorePassword->isChecked() &&
73-
QMessageBox::question( this,
74-
tr( "Saving passwords" ),
75-
tr( "WARNING: You have opted to save your password. It will be stored in plain text in your project files and in your home directory on Unix-like systems, or in your user profile on Windows. If you do not want this to happen, please press the Cancel button.\n" ),
76-
QMessageBox::Ok | QMessageBox::Cancel ) == QMessageBox::Cancel )
77-
{
78-
return;
79-
}
80-
8175
// warn if entry was renamed to an existing connection
8276
if (( mOriginalConnName.isNull() || mOriginalConnName.compare( txtName->text(), Qt::CaseInsensitive ) != 0 ) &&
8377
( settings.contains( baseKey + txtName->text() + "/service" ) ||
@@ -98,9 +92,16 @@ void QgsMssqlNewConnection::accept()
9892
}
9993

10094
baseKey += txtName->text();
95+
QString database;
96+
QListWidgetItem* item = listDatabase->currentItem();
97+
if ( item && item->text() != "(from service)" )
98+
{
99+
database = item->text();
100+
}
101+
101102
settings.setValue( baseKey + "/service", txtService->text() );
102103
settings.setValue( baseKey + "/host", txtHost->text() );
103-
settings.setValue( baseKey + "/database", txtDatabase->text() );
104+
settings.setValue( baseKey + "/database", database );
104105
settings.setValue( baseKey + "/username", chkStoreUsername->isChecked() ? txtUsername->text() : "" );
105106
settings.setValue( baseKey + "/password", chkStorePassword->isChecked() ? txtPassword->text() : "" );
106107
settings.setValue( baseKey + "/saveUsername", chkStoreUsername->isChecked() ? "true" : "false" );
@@ -117,6 +118,11 @@ void QgsMssqlNewConnection::on_btnConnect_clicked()
117118
testConnection();
118119
}
119120

121+
void QgsMssqlNewConnection::on_btnListDatabase_clicked()
122+
{
123+
listDatabases();
124+
}
125+
120126
void QgsMssqlNewConnection::on_cb_trustedConnection_clicked()
121127
{
122128
if ( cb_trustedConnection->checkState() == Qt::Checked )
@@ -137,32 +143,36 @@ void QgsMssqlNewConnection::on_cb_trustedConnection_clicked()
137143

138144
QgsMssqlNewConnection::~QgsMssqlNewConnection()
139145
{
146+
delete bar;
140147
}
141148

142-
void QgsMssqlNewConnection::testConnection()
149+
bool QgsMssqlNewConnection::testConnection( QString testDatabase )
143150
{
144-
if ( txtService->text().isEmpty() )
151+
bar->pushMessage( "Testing connection", "....." );
152+
// Gross but needed to show the last message.
153+
qApp->processEvents();
154+
155+
if ( txtService->text().isEmpty() && txtHost->text().isEmpty() )
145156
{
146-
if ( txtHost->text().isEmpty() )
147-
{
148-
QMessageBox::information( this,
149-
tr( "Test connection" ),
150-
tr( "Connection failed - Host name hasn't been specified.\n\n" ) );
151-
return;
152-
}
157+
bar->clearWidgets();
158+
bar->pushWarning( tr( "Connection Failed" ), tr( "Host name hasn't been specified' " ) );
159+
return false;
160+
}
153161

154-
if ( txtDatabase->text().isEmpty() )
155-
{
156-
QMessageBox::information( this,
157-
tr( "Test connection" ),
158-
tr( "Connection failed - Database name hasn't been specified.\n\n" ) );
159-
return;
160-
}
162+
QString database;
163+
QListWidgetItem* item = listDatabase->currentItem();
164+
if ( !testDatabase.isEmpty() )
165+
{
166+
database = testDatabase;
167+
}
168+
else if ( item && item->text() != "(from service)" )
169+
{
170+
database = item->text();
161171
}
162172

163173
QSqlDatabase db = QgsMssqlProvider::GetDatabase( txtService->text().trimmed(),
164174
txtHost->text().trimmed(),
165-
txtDatabase->text().trimmed(),
175+
database,
166176
txtUsername->text().trimmed(),
167177
txtPassword->text().trimmed() );
168178

@@ -171,19 +181,54 @@ void QgsMssqlNewConnection::testConnection()
171181

172182
if ( !db.open() )
173183
{
174-
QMessageBox::information( this,
175-
tr( "Test connection" ),
176-
db.lastError().text() );
184+
bar->clearWidgets();
185+
bar->pushWarning( tr( "Error opening connection" ), db.lastError().text() );
186+
return false;
177187
}
178188
else
179189
{
180-
QString dbName = txtDatabase->text();
181-
if ( dbName.isEmpty() )
190+
if ( database.isEmpty() )
191+
{
192+
database = txtService->text();
193+
}
194+
bar->clearWidgets();
195+
}
196+
197+
return true;
198+
}
199+
200+
void QgsMssqlNewConnection::listDatabases()
201+
{
202+
testConnection( "master" );
203+
listDatabase->clear();
204+
QString queryStr = "SELECT name FROM master..sysdatabases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')";
205+
206+
QSqlDatabase db = QgsMssqlProvider::GetDatabase( txtService->text().trimmed(),
207+
txtHost->text().trimmed(),
208+
"master",
209+
txtUsername->text().trimmed(),
210+
txtPassword->text().trimmed() );
211+
if ( db.open() )
212+
{
213+
QSqlQuery query = QSqlQuery( db );
214+
query.setForwardOnly( true );
215+
query.exec( queryStr );
216+
217+
if ( !txtService->text().isEmpty() )
182218
{
183-
dbName = txtService->text();
219+
listDatabase->addItem( "(from service)" );
184220
}
185-
QMessageBox::information( this,
186-
tr( "Test connection" ),
187-
tr( "Connection to %1 was successful" ).arg( dbName ) );
221+
222+
if ( query.isActive() )
223+
{
224+
while ( query.next() )
225+
{
226+
QString name = query.value( 0 ).toString();
227+
listDatabase->addItem( name );
228+
}
229+
listDatabase->setCurrentRow( 0 );
230+
}
231+
db.close();
188232
}
189233
}
234+

‎src/providers/mssql/qgsmssqlnewconnection.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "qgisgui.h"
2121
#include "qgscontexthelp.h"
2222

23+
2324
/** \class QgsMssqlNewConnection
2425
* \brief Dialog to allow the user to configure and save connection
2526
* information for an MSSQL database
@@ -30,12 +31,20 @@ class QgsMssqlNewConnection : public QDialog, private Ui::QgsMssqlNewConnectionB
3031
public:
3132
//! Constructor
3233
QgsMssqlNewConnection( QWidget *parent = 0, const QString& connName = QString::null, Qt::WindowFlags fl = QgisGui::ModalDialogFlags );
34+
3335
//! Destructor
3436
~QgsMssqlNewConnection();
37+
3538
//! Tests the connection using the parameters supplied
36-
void testConnection();
39+
bool testConnection( QString testDatabase = QString() );
40+
41+
/**
42+
* @brief List all databases found for the given server.
43+
*/
44+
void listDatabases();
3745
public slots:
3846
void accept() override;
47+
void on_btnListDatabase_clicked();
3948
void on_btnConnect_clicked();
4049
void on_cb_trustedConnection_clicked();
4150
void on_buttonBox_helpRequested() { QgsContextHelp::run( metaObject()->className() ); }

‎src/ui/qgsmssqlnewconnectionbase.ui

Lines changed: 290 additions & 189 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>399</width>
10-
<height>431</height>
9+
<width>709</width>
10+
<height>396</height>
1111
</rect>
1212
</property>
1313
<property name="sizePolicy">
@@ -26,203 +26,196 @@
2626
<bool>true</bool>
2727
</property>
2828
<layout class="QGridLayout">
29-
<property name="margin">
29+
<property name="leftMargin">
30+
<number>9</number>
31+
</property>
32+
<property name="topMargin">
33+
<number>0</number>
34+
</property>
35+
<property name="rightMargin">
36+
<number>9</number>
37+
</property>
38+
<property name="bottomMargin">
3039
<number>9</number>
3140
</property>
3241
<property name="spacing">
3342
<number>6</number>
3443
</property>
35-
<item row="0" column="0">
44+
<item row="0" column="0" colspan="2">
45+
<widget class="QgsMessageBar" name="bar" native="true"/>
46+
</item>
47+
<item row="1" column="0">
3648
<widget class="QGroupBox" name="GroupBox1">
3749
<property name="title">
38-
<string>Connection Information</string>
50+
<string>Connection Details</string>
3951
</property>
40-
<layout class="QGridLayout">
41-
<property name="margin">
42-
<number>0</number>
43-
</property>
44-
<property name="spacing">
45-
<number>5</number>
46-
</property>
52+
<layout class="QFormLayout" name="formLayout">
4753
<item row="0" column="0">
48-
<layout class="QHBoxLayout">
49-
<property name="spacing">
50-
<number>6</number>
54+
<widget class="QLabel" name="TextLabel1_2">
55+
<property name="text">
56+
<string>Connection name</string>
5157
</property>
52-
<property name="margin">
53-
<number>0</number>
58+
</widget>
59+
</item>
60+
<item row="0" column="1">
61+
<widget class="QLineEdit" name="txtName">
62+
<property name="toolTip">
63+
<string>Name of the new connection</string>
5464
</property>
55-
<item>
56-
<layout class="QVBoxLayout">
57-
<property name="spacing">
58-
<number>6</number>
59-
</property>
60-
<property name="margin">
61-
<number>0</number>
62-
</property>
63-
<item>
64-
<widget class="QLabel" name="TextLabel1_2">
65-
<property name="text">
66-
<string>Name</string>
67-
</property>
68-
<property name="buddy">
69-
<cstring>txtName</cstring>
70-
</property>
71-
</widget>
72-
</item>
73-
<item>
74-
<widget class="QLabel" name="label">
75-
<property name="text">
76-
<string>Provider/DSN</string>
77-
</property>
78-
<property name="buddy">
79-
<cstring>txtService</cstring>
80-
</property>
81-
</widget>
82-
</item>
83-
<item>
84-
<widget class="QLabel" name="TextLabel1">
85-
<property name="text">
86-
<string>Host</string>
87-
</property>
88-
<property name="buddy">
89-
<cstring>txtHost</cstring>
90-
</property>
91-
</widget>
92-
</item>
93-
<item>
94-
<widget class="QLabel" name="TextLabel2">
95-
<property name="text">
96-
<string>Database</string>
97-
</property>
98-
<property name="buddy">
99-
<cstring>txtDatabase</cstring>
100-
</property>
101-
</widget>
102-
</item>
103-
<item>
104-
<widget class="QLabel" name="label_2">
105-
<property name="text">
106-
<string/>
107-
</property>
108-
</widget>
109-
</item>
110-
<item>
111-
<widget class="QLabel" name="TextLabel3">
112-
<property name="text">
113-
<string>Username</string>
114-
</property>
115-
<property name="buddy">
116-
<cstring>txtUsername</cstring>
117-
</property>
118-
</widget>
119-
</item>
120-
<item>
121-
<widget class="QLabel" name="TextLabel3_2">
122-
<property name="text">
123-
<string>Password</string>
124-
</property>
125-
<property name="buddy">
126-
<cstring>txtPassword</cstring>
127-
</property>
128-
</widget>
129-
</item>
130-
</layout>
131-
</item>
132-
<item>
133-
<layout class="QVBoxLayout">
134-
<property name="spacing">
135-
<number>6</number>
136-
</property>
137-
<property name="margin">
138-
<number>0</number>
139-
</property>
140-
<item>
141-
<widget class="QLineEdit" name="txtName">
142-
<property name="toolTip">
143-
<string>Name of the new connection</string>
144-
</property>
145-
</widget>
146-
</item>
147-
<item>
148-
<widget class="QLineEdit" name="txtService"/>
149-
</item>
150-
<item>
151-
<widget class="QLineEdit" name="txtHost"/>
152-
</item>
153-
<item>
154-
<widget class="QLineEdit" name="txtDatabase"/>
155-
</item>
156-
<item>
157-
<widget class="QCheckBox" name="cb_trustedConnection">
158-
<property name="text">
159-
<string>Trusted Connection</string>
160-
</property>
161-
<property name="checked">
162-
<bool>true</bool>
163-
</property>
164-
</widget>
165-
</item>
166-
<item>
167-
<widget class="QLineEdit" name="txtUsername"/>
168-
</item>
169-
<item>
170-
<widget class="QLineEdit" name="txtPassword">
171-
<property name="echoMode">
172-
<enum>QLineEdit::Password</enum>
173-
</property>
174-
</widget>
175-
</item>
176-
</layout>
177-
</item>
178-
</layout>
65+
</widget>
17966
</item>
18067
<item row="1" column="0">
181-
<layout class="QGridLayout" name="gridLayout_1">
182-
<property name="margin">
183-
<number>0</number>
68+
<widget class="QLabel" name="label">
69+
<property name="text">
70+
<string>Provider/DSN</string>
18471
</property>
185-
<item row="0" column="0">
186-
<widget class="QCheckBox" name="chkStoreUsername">
187-
<property name="text">
188-
<string>Save Username</string>
189-
</property>
190-
</widget>
191-
</item>
192-
<item row="0" column="1" rowspan="2">
193-
<widget class="QPushButton" name="btnConnect">
194-
<property name="text">
195-
<string>&amp;Test Connect</string>
196-
</property>
197-
</widget>
198-
</item>
199-
<item row="1" column="0">
200-
<widget class="QCheckBox" name="chkStorePassword">
201-
<property name="text">
202-
<string>Save Password</string>
203-
</property>
204-
</widget>
205-
</item>
206-
</layout>
72+
</widget>
73+
</item>
74+
<item row="1" column="1">
75+
<widget class="QLineEdit" name="txtService"/>
20776
</item>
20877
<item row="2" column="0">
209-
<widget class="QCheckBox" name="cb_geometryColumns">
78+
<widget class="QLabel" name="TextLabel1">
21079
<property name="text">
211-
<string>Only look in the geometry_columns metadata table</string>
80+
<string>Host</string>
21281
</property>
213-
<property name="checked">
82+
</widget>
83+
</item>
84+
<item row="2" column="1">
85+
<widget class="QLineEdit" name="txtHost"/>
86+
</item>
87+
<item row="4" column="0">
88+
<widget class="QLabel" name="label_2">
89+
<property name="text">
90+
<string/>
91+
</property>
92+
</widget>
93+
</item>
94+
<item row="3" column="0" colspan="2">
95+
<widget class="QGroupBox" name="groupBox">
96+
<property name="title">
97+
<string>Login</string>
98+
</property>
99+
<property name="flat">
214100
<bool>true</bool>
215101
</property>
102+
<layout class="QFormLayout" name="formLayout_2">
103+
<item row="0" column="1">
104+
<widget class="QCheckBox" name="cb_trustedConnection">
105+
<property name="text">
106+
<string>Trusted Connection</string>
107+
</property>
108+
<property name="checked">
109+
<bool>true</bool>
110+
</property>
111+
</widget>
112+
</item>
113+
<item row="1" column="0">
114+
<widget class="QLabel" name="TextLabel3">
115+
<property name="text">
116+
<string>Username</string>
117+
</property>
118+
</widget>
119+
</item>
120+
<item row="1" column="1">
121+
<layout class="QHBoxLayout" name="horizontalLayout">
122+
<property name="topMargin">
123+
<number>0</number>
124+
</property>
125+
<item>
126+
<widget class="QLineEdit" name="txtUsername">
127+
<property name="enabled">
128+
<bool>false</bool>
129+
</property>
130+
</widget>
131+
</item>
132+
<item>
133+
<widget class="QCheckBox" name="chkStoreUsername">
134+
<property name="enabled">
135+
<bool>false</bool>
136+
</property>
137+
<property name="text">
138+
<string>Save</string>
139+
</property>
140+
</widget>
141+
</item>
142+
</layout>
143+
</item>
144+
<item row="2" column="0">
145+
<widget class="QLabel" name="TextLabel3_2">
146+
<property name="text">
147+
<string>Password</string>
148+
</property>
149+
</widget>
150+
</item>
151+
<item row="2" column="1">
152+
<layout class="QHBoxLayout" name="horizontalLayout_2">
153+
<property name="topMargin">
154+
<number>0</number>
155+
</property>
156+
<item>
157+
<widget class="QLineEdit" name="txtPassword">
158+
<property name="enabled">
159+
<bool>false</bool>
160+
</property>
161+
<property name="echoMode">
162+
<enum>QLineEdit::Password</enum>
163+
</property>
164+
</widget>
165+
</item>
166+
<item>
167+
<widget class="QCheckBox" name="chkStorePassword">
168+
<property name="enabled">
169+
<bool>false</bool>
170+
</property>
171+
<property name="text">
172+
<string>Save</string>
173+
</property>
174+
</widget>
175+
</item>
176+
</layout>
177+
</item>
178+
<item row="3" column="1">
179+
<widget class="QLabel" name="lblWarning">
180+
<property name="sizePolicy">
181+
<sizepolicy hsizetype="Ignored" vsizetype="Ignored">
182+
<horstretch>0</horstretch>
183+
<verstretch>0</verstretch>
184+
</sizepolicy>
185+
</property>
186+
<property name="text">
187+
<string>HEADS UP: You have opted to save your password. It will be stored in plain text in your project files and in your home directory on Unix-like systems, or in your user profile on Windows
188+
189+
Untick save if you don't wish to be the case.</string>
190+
</property>
191+
<property name="wordWrap">
192+
<bool>true</bool>
193+
</property>
194+
</widget>
195+
</item>
196+
</layout>
216197
</widget>
217198
</item>
218-
<item row="3" column="0">
199+
</layout>
200+
</widget>
201+
</item>
202+
<item row="1" column="1">
203+
<widget class="QGroupBox" name="groupBox_2">
204+
<property name="title">
205+
<string>Database details</string>
206+
</property>
207+
<layout class="QFormLayout" name="formLayout_3">
208+
<item row="1" column="1">
209+
<widget class="QListWidget" name="listDatabase"/>
210+
</item>
211+
<item row="3" column="0" colspan="2">
219212
<widget class="QCheckBox" name="cb_allowGeometrylessTables">
220213
<property name="text">
221214
<string>Also list tables with no geometry</string>
222215
</property>
223216
</widget>
224217
</item>
225-
<item row="4" column="0">
218+
<item row="4" column="0" colspan="2">
226219
<widget class="QCheckBox" name="cb_useEstimatedMetadata">
227220
<property name="text">
228221
<string>Use estimated table parameters</string>
@@ -232,10 +225,41 @@
232225
</property>
233226
</widget>
234227
</item>
228+
<item row="2" column="0" colspan="2">
229+
<widget class="QCheckBox" name="cb_geometryColumns">
230+
<property name="text">
231+
<string>Only look in the geometry_columns metadata table</string>
232+
</property>
233+
<property name="checked">
234+
<bool>true</bool>
235+
</property>
236+
</widget>
237+
</item>
238+
<item row="5" column="0" colspan="2">
239+
<widget class="QPushButton" name="btnConnect">
240+
<property name="text">
241+
<string>Test Connection</string>
242+
</property>
243+
</widget>
244+
</item>
245+
<item row="0" column="1">
246+
<widget class="QPushButton" name="btnListDatabase">
247+
<property name="text">
248+
<string>List Databases</string>
249+
</property>
250+
</widget>
251+
</item>
252+
<item row="0" column="0">
253+
<widget class="QLabel" name="TextLabel2">
254+
<property name="text">
255+
<string>Database</string>
256+
</property>
257+
</widget>
258+
</item>
235259
</layout>
236260
</widget>
237261
</item>
238-
<item row="1" column="0">
262+
<item row="2" column="0" colspan="2">
239263
<widget class="QDialogButtonBox" name="buttonBox">
240264
<property name="standardButtons">
241265
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok</set>
@@ -245,21 +269,18 @@
245269
</layout>
246270
</widget>
247271
<layoutdefault spacing="6" margin="11"/>
272+
<customwidgets>
273+
<customwidget>
274+
<class>QgsMessageBar</class>
275+
<extends>QWidget</extends>
276+
<header>qgsmessagebar.h</header>
277+
<container>1</container>
278+
</customwidget>
279+
</customwidgets>
248280
<tabstops>
249281
<tabstop>txtName</tabstop>
250282
<tabstop>txtService</tabstop>
251283
<tabstop>txtHost</tabstop>
252-
<tabstop>txtDatabase</tabstop>
253-
<tabstop>cb_trustedConnection</tabstop>
254-
<tabstop>txtUsername</tabstop>
255-
<tabstop>txtPassword</tabstop>
256-
<tabstop>chkStoreUsername</tabstop>
257-
<tabstop>chkStorePassword</tabstop>
258-
<tabstop>btnConnect</tabstop>
259-
<tabstop>cb_geometryColumns</tabstop>
260-
<tabstop>cb_allowGeometrylessTables</tabstop>
261-
<tabstop>cb_useEstimatedMetadata</tabstop>
262-
<tabstop>buttonBox</tabstop>
263284
</tabstops>
264285
<resources/>
265286
<connections>
@@ -270,11 +291,11 @@
270291
<slot>reject()</slot>
271292
<hints>
272293
<hint type="sourcelabel">
273-
<x>313</x>
274-
<y>501</y>
294+
<x>322</x>
295+
<y>386</y>
275296
</hint>
276297
<hint type="destinationlabel">
277-
<x>451</x>
298+
<x>391</x>
278299
<y>312</y>
279300
</hint>
280301
</hints>
@@ -286,14 +307,94 @@
286307
<slot>accept()</slot>
287308
<hints>
288309
<hint type="sourcelabel">
289-
<x>395</x>
290-
<y>501</y>
310+
<x>382</x>
311+
<y>386</y>
291312
</hint>
292313
<hint type="destinationlabel">
293-
<x>450</x>
314+
<x>391</x>
294315
<y>287</y>
295316
</hint>
296317
</hints>
297318
</connection>
319+
<connection>
320+
<sender>cb_trustedConnection</sender>
321+
<signal>toggled(bool)</signal>
322+
<receiver>chkStoreUsername</receiver>
323+
<slot>setDisabled(bool)</slot>
324+
<hints>
325+
<hint type="sourcelabel">
326+
<x>148</x>
327+
<y>143</y>
328+
</hint>
329+
<hint type="destinationlabel">
330+
<x>306</x>
331+
<y>163</y>
332+
</hint>
333+
</hints>
334+
</connection>
335+
<connection>
336+
<sender>cb_trustedConnection</sender>
337+
<signal>toggled(bool)</signal>
338+
<receiver>chkStorePassword</receiver>
339+
<slot>setDisabled(bool)</slot>
340+
<hints>
341+
<hint type="sourcelabel">
342+
<x>126</x>
343+
<y>136</y>
344+
</hint>
345+
<hint type="destinationlabel">
346+
<x>312</x>
347+
<y>198</y>
348+
</hint>
349+
</hints>
350+
</connection>
351+
<connection>
352+
<sender>cb_trustedConnection</sender>
353+
<signal>toggled(bool)</signal>
354+
<receiver>txtUsername</receiver>
355+
<slot>setDisabled(bool)</slot>
356+
<hints>
357+
<hint type="sourcelabel">
358+
<x>129</x>
359+
<y>146</y>
360+
</hint>
361+
<hint type="destinationlabel">
362+
<x>129</x>
363+
<y>166</y>
364+
</hint>
365+
</hints>
366+
</connection>
367+
<connection>
368+
<sender>cb_trustedConnection</sender>
369+
<signal>toggled(bool)</signal>
370+
<receiver>txtPassword</receiver>
371+
<slot>setDisabled(bool)</slot>
372+
<hints>
373+
<hint type="sourcelabel">
374+
<x>94</x>
375+
<y>139</y>
376+
</hint>
377+
<hint type="destinationlabel">
378+
<x>95</x>
379+
<y>200</y>
380+
</hint>
381+
</hints>
382+
</connection>
383+
<connection>
384+
<sender>chkStorePassword</sender>
385+
<signal>toggled(bool)</signal>
386+
<receiver>lblWarning</receiver>
387+
<slot>setVisible(bool)</slot>
388+
<hints>
389+
<hint type="sourcelabel">
390+
<x>312</x>
391+
<y>186</y>
392+
</hint>
393+
<hint type="destinationlabel">
394+
<x>266</x>
395+
<y>241</y>
396+
</hint>
397+
</hints>
398+
</connection>
298399
</connections>
299400
</ui>

0 commit comments

Comments
 (0)
Please sign in to comment.