18
18
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19
19
***************************************************************************/
21
#include <QDialogButtonBox>
22
#include <QVBoxLayout>
21
24
#include "coreconnectdlg.h"
24
#include <QFormLayout>
25
#include <QMessageBox>
26
#include <QNetworkProxy>
30
#include <QSslCertificate>
26
#include "iconloader.h"
34
27
#include "clientsettings.h"
35
#include "clientsyncer.h"
36
#include "coreconfigwizard.h"
37
#include "iconloader.h"
41
CoreConnectDlg::CoreConnectDlg(bool autoconnect, QWidget *parent)
28
#include "coreaccountsettingspage.h"
30
CoreConnectDlg::CoreConnectDlg(QWidget *parent) : QDialog(parent) {
31
_settingsPage = new CoreAccountSettingsPage(this);
32
_settingsPage->setStandAlone(true);
33
_settingsPage->load();
35
CoreAccountSettings s;
36
AccountId lastAccount = s.lastAccount();
37
if(lastAccount.isValid())
38
_settingsPage->setSelectedAccount(lastAccount);
40
setWindowTitle(tr("Connect to Core"));
41
setWindowIcon(SmallIcon("network-disconnect"));
43
QVBoxLayout *layout = new QVBoxLayout(this);
44
layout->addWidget(_settingsPage);
46
QDialogButtonBox *buttonBox = new QDialogButtonBox(this);
47
buttonBox->setStandardButtons(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
48
layout->addWidget(buttonBox);
50
connect(_settingsPage, SIGNAL(connectToCore(AccountId)), SLOT(accept()));
51
connect(buttonBox, SIGNAL(accepted()), SLOT(accept()));
52
connect(buttonBox, SIGNAL(rejected()), SLOT(reject()));
55
AccountId CoreConnectDlg::selectedAccount() const {
56
return _settingsPage->selectedAccount();
59
void CoreConnectDlg::accept() {
60
_settingsPage->save();
64
/******** CoreConnectAuthDlg ****************************************************************/
66
CoreConnectAuthDlg::CoreConnectAuthDlg(CoreAccount *account, QWidget *parent)
46
ui.editAccount->setIcon(SmallIcon("document-properties"));
47
ui.addAccount->setIcon(SmallIcon("list-add"));
48
ui.deleteAccount->setIcon(SmallIcon("list-remove"));
49
ui.connectIcon->setPixmap(BarIcon("network-disconnect"));
50
ui.secureConnection->setPixmap(SmallIcon("document-encrypt"));
52
if(Quassel::runMode() != Quassel::Monolithic) {
53
ui.useInternalCore->hide();
56
// make it look more native under Mac OS X:
57
setWindowFlags(Qt::Sheet);
59
clientSyncer = new ClientSyncer(this);
60
Client::registerClientSyncer(clientSyncer);
64
doingAutoConnect = false;
66
ui.stackedWidget->setCurrentWidget(ui.accountPage);
68
CoreAccountSettings s;
69
AccountId lastacc = s.lastAccount();
70
autoConnectAccount = s.autoConnectAccount();
71
QListWidgetItem *currentItem = 0;
72
foreach(AccountId id, s.knownAccounts()) {
73
if(!id.isValid()) continue;
74
QVariantMap data = s.retrieveAccountData(id);
75
if(data.contains("InternalAccount") && data["InternalAccount"].toBool()) {
76
_internalAccountId = id;
79
data["AccountId"] = QVariant::fromValue<AccountId>(id);
81
QListWidgetItem *item = new QListWidgetItem(data["AccountName"].toString(), ui.accountList);
82
item->setData(Qt::UserRole, QVariant::fromValue<AccountId>(id));
83
if(id == lastacc) currentItem = item;
85
if(currentItem) ui.accountList->setCurrentItem(currentItem);
86
else ui.accountList->setCurrentRow(0);
88
setAccountWidgetStates();
90
ui.accountButtonBox->button(QDialogButtonBox::Ok)->setFocus();
91
//ui.accountButtonBox->button(QDialogButtonBox::Ok)->setAutoDefault(true);
93
connect(clientSyncer, SIGNAL(socketStateChanged(QAbstractSocket::SocketState)),this, SLOT(initPhaseSocketState(QAbstractSocket::SocketState)));
94
connect(clientSyncer, SIGNAL(connectionError(const QString &)), this, SLOT(initPhaseError(const QString &)));
95
connect(clientSyncer, SIGNAL(connectionWarnings(const QStringList &)), this, SLOT(initPhaseWarnings(const QStringList &)));
96
connect(clientSyncer, SIGNAL(connectionMsg(const QString &)), this, SLOT(initPhaseMsg(const QString &)));
97
connect(clientSyncer, SIGNAL(startLogin()), this, SLOT(startLogin()));
98
connect(clientSyncer, SIGNAL(loginFailed(const QString &)), this, SLOT(loginFailed(const QString &)));
99
connect(clientSyncer, SIGNAL(loginSuccess()), this, SLOT(startSync()));
100
connect(clientSyncer, SIGNAL(startCoreSetup(const QVariantList &)), this, SLOT(startCoreConfig(const QVariantList &)));
101
connect(clientSyncer, SIGNAL(sessionProgress(quint32, quint32)), this, SLOT(coreSessionProgress(quint32, quint32)));
102
connect(clientSyncer, SIGNAL(networksProgress(quint32, quint32)), this, SLOT(coreNetworksProgress(quint32, quint32)));
103
connect(clientSyncer, SIGNAL(syncFinished()), this, SLOT(syncFinished()));
104
connect(clientSyncer, SIGNAL(encrypted()), ui.secureConnection, SLOT(show()));
106
connect(ui.user, SIGNAL(textChanged(const QString &)), this, SLOT(setLoginWidgetStates()));
107
connect(ui.password, SIGNAL(textChanged(const QString &)), this, SLOT(setLoginWidgetStates()));
109
connect(ui.loginButtonBox, SIGNAL(rejected()), this, SLOT(restartPhaseNull()));
110
connect(ui.syncButtonBox->button(QDialogButtonBox::Abort), SIGNAL(clicked()), this, SLOT(restartPhaseNull()));
112
if(autoconnect && ui.accountList->count() && autoConnectAccount.isValid()
113
&& autoConnectAccount == ui.accountList->currentItem()->data(Qt::UserRole).value<AccountId>()) {
114
doingAutoConnect = true;
115
on_accountButtonBox_accepted();
119
CoreConnectDlg::~CoreConnectDlg() {
120
if(ui.accountList->selectedItems().count()) {
121
CoreAccountSettings s;
122
s.setLastAccount(ui.accountList->selectedItems()[0]->data(Qt::UserRole).value<AccountId>());
127
/****************************************************
129
***************************************************/
131
void CoreConnectDlg::on_accountList_itemSelectionChanged() {
132
setAccountWidgetStates();
135
void CoreConnectDlg::setAccountWidgetStates() {
136
QList<QListWidgetItem *> selectedItems = ui.accountList->selectedItems();
137
ui.editAccount->setEnabled(selectedItems.count());
138
ui.deleteAccount->setEnabled(selectedItems.count());
139
ui.autoConnect->setEnabled(selectedItems.count());
140
if(selectedItems.count()) {
141
ui.autoConnect->setChecked(selectedItems[0]->data(Qt::UserRole).value<AccountId>() == autoConnectAccount);
143
ui.accountButtonBox->button(QDialogButtonBox::Ok)->setEnabled(ui.accountList->count());
146
void CoreConnectDlg::on_autoConnect_clicked(bool state) {
148
autoConnectAccount = 0;
150
if(ui.accountList->selectedItems().count()) {
151
autoConnectAccount = ui.accountList->selectedItems()[0]->data(Qt::UserRole).value<AccountId>();
153
qWarning() << "Checked auto connect without an enabled item!"; // should never happen!
154
autoConnectAccount = 0;
157
setAccountWidgetStates();
160
void CoreConnectDlg::on_addAccount_clicked() {
161
QStringList existing;
162
for(int i = 0; i < ui.accountList->count(); i++) existing << ui.accountList->item(i)->text();
163
CoreAccountEditDlg dlg(0, QVariantMap(), existing, this);
164
if(dlg.exec() == QDialog::Accepted) {
165
AccountId id = findFreeAccountId();
166
QVariantMap data = dlg.accountData();
167
data["AccountId"] = QVariant::fromValue<AccountId>(id);
169
QListWidgetItem *item = new QListWidgetItem(data["AccountName"].toString(), ui.accountList);
170
item->setData(Qt::UserRole, QVariant::fromValue<AccountId>(id));
171
ui.accountList->setCurrentItem(item);
175
void CoreConnectDlg::on_editAccount_clicked() {
176
QStringList existing;
177
for(int i = 0; i < ui.accountList->count(); i++) existing << ui.accountList->item(i)->text();
178
AccountId id = ui.accountList->currentItem()->data(Qt::UserRole).value<AccountId>();
179
QVariantMap acct = accounts[id];
180
CoreAccountEditDlg dlg(id, acct, existing, this);
181
if(dlg.exec() == QDialog::Accepted) {
182
QVariantMap data = dlg.accountData();
183
ui.accountList->currentItem()->setText(data["AccountName"].toString());
188
void CoreConnectDlg::on_deleteAccount_clicked() {
189
AccountId id = ui.accountList->currentItem()->data(Qt::UserRole).value<AccountId>();
190
int ret = QMessageBox::question(this, tr("Remove Account Settings"),
191
tr("Do you really want to remove your local settings for this Quassel Core account?<br>"
192
"Note: This will <em>not</em> remove or change any data on the Core itself!"),
193
QMessageBox::Yes|QMessageBox::No, QMessageBox::No);
194
if(ret == QMessageBox::Yes) {
195
int idx = ui.accountList->currentRow();
196
delete ui.accountList->takeItem(idx);
197
ui.accountList->setCurrentRow(qMin(idx, ui.accountList->count()-1));
198
accounts[id]["Delete"] = true; // we only flag this here, actual deletion happens on accept!
199
setAccountWidgetStates();
203
void CoreConnectDlg::on_accountList_itemDoubleClicked(QListWidgetItem *item) {
205
on_accountButtonBox_accepted();
208
void CoreConnectDlg::on_accountButtonBox_accepted() {
210
CoreAccountSettings s;
211
foreach(QVariantMap acct, accounts.values()) {
212
AccountId id = acct["AccountId"].value<AccountId>();
213
if(acct.contains("Delete")) {
216
s.storeAccountData(id, acct);
219
s.setAutoConnectAccount(autoConnectAccount);
221
ui.stackedWidget->setCurrentWidget(ui.loginPage);
222
account = ui.accountList->currentItem()->data(Qt::UserRole).value<AccountId>();
223
accountData = accounts[account];
224
s.setLastAccount(account);
228
void CoreConnectDlg::on_useInternalCore_clicked() {
229
clientSyncer->useInternalCore();
230
ui.loginButtonBox->setStandardButtons(QDialogButtonBox::Cancel);
233
/*****************************************************
234
* Connecting to the Core
235
****************************************************/
237
/*** Phase One: initializing the core connection ***/
239
void CoreConnectDlg::connectToCore() {
240
ui.secureConnection->hide();
241
ui.connectIcon->setPixmap(BarIcon("network-disconnect"));
242
ui.connectLabel->setText(tr("Connect to %1").arg(accountData["Host"].toString()));
243
ui.coreInfoLabel->setText("");
244
ui.loginStack->setCurrentWidget(ui.loginEmptyPage);
245
ui.loginButtonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
246
ui.loginButtonBox->button(QDialogButtonBox::Ok)->setDefault(true);
247
ui.loginButtonBox->button(QDialogButtonBox::Ok)->setDisabled(true);
248
disconnect(ui.loginButtonBox, 0, this, 0);
249
connect(ui.loginButtonBox, SIGNAL(rejected()), this, SLOT(restartPhaseNull()));
251
clientSyncer->connectToCore(accountData);
254
void CoreConnectDlg::initPhaseError(const QString &error) {
255
doingAutoConnect = false;
256
ui.secureConnection->hide();
257
ui.connectIcon->setPixmap(BarIcon("dialog-error"));
258
//ui.connectLabel->setBrush(QBrush("red"));
259
ui.connectLabel->setText(tr("<div style=color:red;>Connection to %1 failed!</div>").arg(accountData["Host"].toString()));
260
ui.coreInfoLabel->setText(error);
261
ui.loginButtonBox->setStandardButtons(QDialogButtonBox::Retry|QDialogButtonBox::Cancel);
262
ui.loginButtonBox->button(QDialogButtonBox::Retry)->setFocus();
263
disconnect(ui.loginButtonBox, 0, this, 0);
264
connect(ui.loginButtonBox, SIGNAL(accepted()), this, SLOT(restartPhaseNull()));
265
connect(ui.loginButtonBox, SIGNAL(rejected()), this, SLOT(reject()));
268
void CoreConnectDlg::initPhaseWarnings(const QStringList &warnings) {
269
doingAutoConnect = false;
270
ui.secureConnection->hide();
271
ui.connectIcon->setPixmap(BarIcon("dialog-warning"));
272
ui.connectLabel->setText(tr("<div>Errors occurred while connecting to \"%1\":</div>").arg(accountData["Host"].toString()));
273
QStringList warningItems;
274
foreach(QString warning, warnings) {
275
warningItems << QString("<li>%1</li>").arg(warning);
277
ui.coreInfoLabel->setText(QString("<ul>%1</ul>").arg(warningItems.join("")));
278
ui.loginStack->setCurrentWidget(ui.connectionWarningsPage);
279
ui.loginButtonBox->setStandardButtons(QDialogButtonBox::Cancel);
280
ui.loginButtonBox->button(QDialogButtonBox::Cancel)->setFocus();
281
disconnect(ui.loginButtonBox, 0, this, 0);
282
connect(ui.loginButtonBox, SIGNAL(rejected()), this, SLOT(restartPhaseNull()));
285
void CoreConnectDlg::on_viewSslCertButton_clicked() {
287
const QSslSocket *socket = qobject_cast<const QSslSocket *>(clientSyncer->currentDevice());
291
SslCertDisplayDialog dialog(socket->peerName(), socket->peerCertificate());
296
void CoreConnectDlg::on_ignoreWarningsButton_clicked() {
297
clientSyncer->ignoreWarnings(ui.ignoreWarningsPermanently->isChecked());
301
void CoreConnectDlg::initPhaseMsg(const QString &msg) {
302
ui.coreInfoLabel->setText(msg);
305
void CoreConnectDlg::initPhaseSocketState(QAbstractSocket::SocketState state) {
307
QString host = accountData["Host"].toString();
309
case QAbstractSocket::UnconnectedState: s = tr("Not connected to %1.").arg(host); break;
310
case QAbstractSocket::HostLookupState: s = tr("Looking up %1...").arg(host); break;
311
case QAbstractSocket::ConnectingState: s = tr("Connecting to %1...").arg(host); break;
312
case QAbstractSocket::ConnectedState: s = tr("Connected to %1").arg(host); break;
313
default: s = tr("Unknown connection state to %1"); break;
315
ui.connectLabel->setText(s);
318
void CoreConnectDlg::restartPhaseNull() {
319
doingAutoConnect = false;
320
ui.stackedWidget->setCurrentWidget(ui.accountPage);
321
clientSyncer->disconnectFromCore();
324
/*********************************************************
326
*********************************************************/
328
void CoreConnectDlg::startLogin() {
329
ui.connectIcon->setPixmap(BarIcon("network-connect"));
330
ui.loginStack->setCurrentWidget(ui.loginCredentialsPage);
331
//ui.loginStack->setMinimumSize(ui.loginStack->sizeHint()); ui.loginStack->updateGeometry();
332
ui.loginButtonBox->setStandardButtons(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
333
ui.loginButtonBox->button(QDialogButtonBox::Ok)->setDefault(true);
334
ui.loginButtonBox->button(QDialogButtonBox::Ok)->setFocus();
335
if(!accountData["User"].toString().isEmpty()) {
336
ui.user->setText(accountData["User"].toString());
337
if(accountData["RememberPasswd"].toBool()) {
338
ui.password->setText(accountData["Password"].toString());
339
ui.rememberPasswd->setChecked(true);
340
ui.loginButtonBox->button(QDialogButtonBox::Ok)->setFocus();
342
ui.rememberPasswd->setChecked(false);
343
ui.password->setFocus();
345
} else ui.user->setFocus();
346
disconnect(ui.loginButtonBox, 0, this, 0);
347
connect(ui.loginButtonBox, SIGNAL(accepted()), this, SLOT(doLogin()));
348
connect(ui.loginButtonBox, SIGNAL(rejected()), this, SLOT(restartPhaseNull()));
349
if(doingAutoConnect) doLogin();
352
void CoreConnectDlg::doLogin() {
353
QVariantMap loginData;
354
loginData["User"] = ui.user->text();
355
loginData["Password"] = ui.password->text();
356
loginData["RememberPasswd"] = ui.rememberPasswd->isChecked();
360
void CoreConnectDlg::doLogin(const QVariantMap &loginData) {
361
disconnect(ui.loginButtonBox, 0, this, 0);
362
connect(ui.loginButtonBox, SIGNAL(accepted()), this, SLOT(doLogin()));
363
connect(ui.loginButtonBox, SIGNAL(rejected()), this, SLOT(restartPhaseNull()));
364
ui.loginStack->setCurrentWidget(ui.loginCredentialsPage);
365
ui.loginGroup->setTitle(tr("Logging in..."));
366
ui.user->setDisabled(true);
367
ui.password->setDisabled(true);
368
ui.rememberPasswd->setDisabled(true);
369
ui.loginButtonBox->button(QDialogButtonBox::Ok)->setDisabled(true);
370
accountData["User"] = loginData["User"];
371
accountData["RememberPasswd"] = loginData["RememberPasswd"];
372
if(loginData["RememberPasswd"].toBool()) accountData["Password"] = loginData["Password"];
373
else accountData.remove("Password");
374
ui.user->setText(loginData["User"].toString());
375
ui.password->setText(loginData["Password"].toString());
376
ui.rememberPasswd->setChecked(loginData["RememberPasswd"].toBool());
377
CoreAccountSettings s;
378
s.storeAccountData(account, accountData);
379
clientSyncer->loginToCore(loginData["User"].toString(), loginData["Password"].toString());
382
void CoreConnectDlg::setLoginWidgetStates() {
383
ui.loginButtonBox->button(QDialogButtonBox::Ok)->setDisabled(ui.user->text().isEmpty() || ui.password->text().isEmpty());
386
void CoreConnectDlg::loginFailed(const QString &error) {
390
ui.connectIcon->setPixmap(BarIcon("dialog-error"));
391
ui.loginStack->setCurrentWidget(ui.loginCredentialsPage);
392
ui.loginGroup->setTitle(tr("Login"));
393
ui.user->setEnabled(true);
394
ui.password->setEnabled(true);
395
ui.rememberPasswd->setEnabled(true);
396
ui.coreInfoLabel->setText(error);
397
ui.loginButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
398
ui.password->setFocus();
399
doingAutoConnect = false;
402
void CoreConnectDlg::startCoreConfig(const QVariantList &backends) {
403
storageBackends = backends;
404
ui.loginStack->setCurrentWidget(ui.coreConfigPage);
406
//on_launchCoreConfigWizard_clicked();
410
void CoreConnectDlg::on_launchCoreConfigWizard_clicked() {
412
wizard = new CoreConfigWizard(storageBackends, this);
413
connect(wizard, SIGNAL(setupCore(const QVariant &)), clientSyncer, SLOT(doCoreSetup(const QVariant &)));
414
connect(wizard, SIGNAL(loginToCore(const QVariantMap &)), this, SLOT(doLogin(const QVariantMap &)));
415
connect(clientSyncer, SIGNAL(coreSetupSuccess()), wizard, SLOT(coreSetupSuccess()));
416
connect(clientSyncer, SIGNAL(coreSetupFailed(const QString &)), wizard, SLOT(coreSetupFailed(const QString &)));
417
connect(wizard, SIGNAL(accepted()), this, SLOT(configWizardAccepted()));
418
connect(wizard, SIGNAL(rejected()), this, SLOT(configWizardRejected()));
419
connect(clientSyncer, SIGNAL(loginSuccess()), wizard, SLOT(loginSuccess()));
420
connect(clientSyncer, SIGNAL(syncFinished()), wizard, SLOT(syncFinished()));
424
void CoreConnectDlg::configWizardAccepted() {
426
wizard->deleteLater();
430
void CoreConnectDlg::configWizardRejected() {
432
wizard->deleteLater();
438
/************************************************************
439
* Phase Three: Syncing
440
************************************************************/
442
void CoreConnectDlg::startSync() {
443
ui.sessionProgress->setRange(0, 1);
444
ui.sessionProgress->setValue(0);
445
ui.networksProgress->setRange(0, 1);
446
ui.networksProgress->setValue(0);
448
ui.stackedWidget->setCurrentWidget(ui.syncPage);
450
ui.loginGroup->setTitle(tr("Login"));
451
ui.user->setEnabled(true);
452
ui.password->setEnabled(true);
453
ui.rememberPasswd->setEnabled(true);
454
if(ui.loginButtonBox->standardButtons() & QDialogButtonBox::Ok) // in mono mode we don't show an Ok Button
455
ui.loginButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
458
void CoreConnectDlg::coreSessionProgress(quint32 val, quint32 max) {
459
ui.sessionProgress->setRange(0, max);
460
ui.sessionProgress->setValue(val);
464
void CoreConnectDlg::coreNetworksProgress(quint32 val, quint32 max) {
466
ui.networksProgress->setFormat("0/0");
467
ui.networksProgress->setRange(0, 1);
468
ui.networksProgress->setValue(1);
470
ui.networksProgress->setFormat("%v/%m");
471
ui.networksProgress->setRange(0, max);
472
ui.networksProgress->setValue(val);
476
void CoreConnectDlg::syncFinished() {
477
if(!wizard) accept();
480
disconnect(wizard, 0, this, 0);
481
connect(wizard, SIGNAL(finished(int)), this, SLOT(accept()));
485
AccountId CoreConnectDlg::findFreeAccountId() {
486
for(AccountId i = 1;; i++) {
487
if(!accounts.contains(i) && i != _internalAccountId)
492
/*****************************************************************************************
494
*****************************************************************************************/
495
CoreAccountEditDlg::CoreAccountEditDlg(AccountId id, const QVariantMap &acct, const QStringList &_existing, QWidget *parent)
499
ui.useSsl->setIcon(SmallIcon("document-encrypt"));
501
existing = _existing;
505
existing.removeAll(acct["AccountName"].toString());
506
ui.host->setText(acct["Host"].toString());
507
ui.port->setValue(acct["Port"].toUInt());
508
ui.accountName->setText(acct["AccountName"].toString());
510
ui.useSsl->setChecked(acct["useSsl"].toBool());
512
ui.useSsl->setChecked(false);
513
ui.useSsl->setEnabled(false);
515
ui.useProxy->setChecked(acct["useProxy"].toBool());
516
ui.proxyHost->setText(acct["proxyHost"].toString());
517
ui.proxyPort->setValue(acct["proxyPort"].toUInt());
518
ui.proxyType->setCurrentIndex(acct["proxyType"].toInt() == QNetworkProxy::Socks5Proxy ? 0 : 1);
519
ui.proxyUser->setText(acct["proxyUser"].toString());
520
ui.proxyPassword->setText(acct["proxyPassword"].toString());
522
setWindowTitle(tr("Add Core Account"));
524
ui.useSsl->setChecked(false);
525
ui.useSsl->setEnabled(false);
530
QVariantMap CoreAccountEditDlg::accountData() {
531
account["AccountName"] = ui.accountName->text().trimmed();
532
account["Host"] = ui.host->text().trimmed();
533
account["Port"] = ui.port->value();
534
account["useSsl"] = ui.useSsl->isChecked();
535
account["useProxy"] = ui.useProxy->isChecked();
536
account["proxyHost"] = ui.proxyHost->text().trimmed();
537
account["proxyPort"] = ui.proxyPort->value();
538
account["proxyType"] = ui.proxyType->currentIndex() == 0 ? QNetworkProxy::Socks5Proxy : QNetworkProxy::HttpProxy;
539
account["proxyUser"] = ui.proxyUser->text().trimmed();
540
account["proxyPassword"] = ui.proxyPassword->text().trimmed();
544
void CoreAccountEditDlg::setWidgetStates() {
545
bool ok = !ui.accountName->text().trimmed().isEmpty() && !existing.contains(ui.accountName->text()) && !ui.host->text().isEmpty();
546
ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(ok);
549
void CoreAccountEditDlg::on_host_textChanged(const QString &text) {
554
void CoreAccountEditDlg::on_accountName_textChanged(const QString &text) {
561
// ========================================
562
// SslCertDisplayDialog
563
// ========================================
565
SslCertDisplayDialog::SslCertDisplayDialog(const QString &host, const QSslCertificate &cert, QWidget *parent)
568
setWindowTitle(tr("SSL Certificate used by %1").arg(host));
570
QVBoxLayout *mainLayout = new QVBoxLayout(this);
572
QGroupBox *issuerBox = new QGroupBox(tr("Issuer Info"), this);
573
QFormLayout *issuerLayout = new QFormLayout(issuerBox);
574
issuerLayout->addRow(tr("Organization:"), new QLabel(cert.issuerInfo(QSslCertificate::Organization), this));
575
issuerLayout->addRow(tr("Locality Name:"), new QLabel(cert.issuerInfo(QSslCertificate::LocalityName), this));
576
issuerLayout->addRow(tr("Organizational Unit Name:"), new QLabel(cert.issuerInfo(QSslCertificate::OrganizationalUnitName), this));
577
issuerLayout->addRow(tr("Country Name:"), new QLabel(cert.issuerInfo(QSslCertificate::CountryName), this));
578
issuerLayout->addRow(tr("State or Province Name:"), new QLabel(cert.issuerInfo(QSslCertificate::StateOrProvinceName), this));
579
mainLayout->addWidget(issuerBox);
581
QGroupBox *subjectBox = new QGroupBox(tr("Subject Info"), this);
582
QFormLayout *subjectLayout = new QFormLayout(subjectBox);
583
subjectLayout->addRow(tr("Organization:"), new QLabel(cert.subjectInfo(QSslCertificate::Organization), this));
584
subjectLayout->addRow(tr("Locality Name:"), new QLabel(cert.subjectInfo(QSslCertificate::LocalityName), this));
585
subjectLayout->addRow(tr("Organizational Unit Name:"), new QLabel(cert.subjectInfo(QSslCertificate::OrganizationalUnitName), this));
586
subjectLayout->addRow(tr("Country Name:"), new QLabel(cert.subjectInfo(QSslCertificate::CountryName), this));
587
subjectLayout->addRow(tr("State or Province Name:"), new QLabel(cert.subjectInfo(QSslCertificate::StateOrProvinceName), this));
588
mainLayout->addWidget(subjectBox);
590
QGroupBox *additionalBox = new QGroupBox(tr("Additional Info"), this);
591
QFormLayout *additionalLayout = new QFormLayout(additionalBox);
592
additionalLayout->addRow(tr("Valid From:"), new QLabel(cert.effectiveDate().toString(), this));
593
additionalLayout->addRow(tr("Valid To:"), new QLabel(cert.expiryDate().toString(), this));
594
QStringList hostnames = cert.alternateSubjectNames().values(QSsl::DnsEntry);
595
for(int i = 0; i < hostnames.count(); i++) {
596
additionalLayout->addRow(tr("Hostname %1:").arg(i + 1), new QLabel(hostnames[i], this));
598
QStringList mailaddresses = cert.alternateSubjectNames().values(QSsl::EmailEntry);
599
for(int i = 0; i < mailaddresses.count(); i++) {
600
additionalLayout->addRow(tr("E-Mail Address %1:").arg(i + 1), new QLabel(mailaddresses[i], this));
602
additionalLayout->addRow(tr("Digest:"), new QLabel(QString(prettyDigest(cert.digest()))));
603
mainLayout->addWidget(additionalBox);
606
QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok, Qt::Horizontal, this);
607
mainLayout->addWidget(buttonBox);
609
connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
610
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
72
connect(ui.user, SIGNAL(textChanged(QString)), SLOT(setButtonStates()));
73
connect(ui.password, SIGNAL(textChanged(QString)), SLOT(setButtonStates()));
75
ui.label->setText(tr("Please enter your credentials for %1:").arg(account->accountName()));
76
ui.user->setText(account->user());
77
ui.password->setText(account->password());
78
ui.rememberPasswd->setChecked(account->storePassword());
80
if(ui.user->text().isEmpty())
83
ui.password->setFocus();
86
void CoreConnectAuthDlg::accept() {
87
_account->setUser(ui.user->text());
88
_account->setPassword(ui.password->text());
89
_account->setStorePassword(ui.rememberPasswd->isChecked());
94
void CoreConnectAuthDlg::setButtonStates() {
95
bool valid = !(ui.user->text().isEmpty() || ui.password->text().isEmpty());
96
ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(valid);