X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsettingspages%2Fidentitiessettingspage.cpp;h=bb9b564ffb7869e3f65e001daf66275dba6f2808;hp=1ca75b0c2585a8b61af847683d78619f5ee980b1;hb=dcac65fc4beeb1167de8ebec5cc54608fc314fd3;hpb=c0c8cea57282c56951562e427bc1acb3ee2028a3 diff --git a/src/qtui/settingspages/identitiessettingspage.cpp b/src/qtui/settingspages/identitiessettingspage.cpp index 1ca75b0c..bb9b564f 100644 --- a/src/qtui/settingspages/identitiessettingspage.cpp +++ b/src/qtui/settingspages/identitiessettingspage.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * + * Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -18,70 +18,54 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include "identitiessettingspage.h" + #include #include -#include "identitiessettingspage.h" - #include "client.h" +#include "iconloader.h" +#include "signalproxy.h" IdentitiesSettingsPage::IdentitiesSettingsPage(QWidget *parent) - : SettingsPage(tr("General"), tr("Identities"), parent) { - + : SettingsPage(tr("Misc"), tr("Identities"), parent), + _editSsl(false) +{ ui.setupUi(this); - setEnabled(Client::isConnected()); // need a core connection! - setWidgetStates(); + ui.renameIdentity->setIcon(BarIcon("edit-rename")); + ui.addIdentity->setIcon(BarIcon("list-add-user")); + ui.deleteIdentity->setIcon(BarIcon("list-remove-user")); + + coreConnectionStateChanged(Client::isConnected()); // need a core connection! connect(Client::instance(), SIGNAL(coreConnectionStateChanged(bool)), this, SLOT(coreConnectionStateChanged(bool))); + connect(Client::instance(), SIGNAL(identityCreated(IdentityId)), this, SLOT(clientIdentityCreated(IdentityId))); connect(Client::instance(), SIGNAL(identityRemoved(IdentityId)), this, SLOT(clientIdentityRemoved(IdentityId))); + connect(ui.identityEditor, SIGNAL(widgetHasChanged()), this, SLOT(widgetHasChanged())); +#ifdef HAVE_SSL + connect(ui.identityEditor, SIGNAL(requestEditSsl()), this, SLOT(continueUnsecured())); +#endif + currentId = 0; - // We need to know whenever the state of input widgets changes... //connect(ui.identityList, SIGNAL(editTextChanged(const QString &)), this, SLOT(widgetHasChanged())); - connect(ui.realName, SIGNAL(textEdited(const QString &)), this, SLOT(widgetHasChanged())); - connect(ui.nicknameList, SIGNAL(itemChanged(QListWidgetItem *)), this, SLOT(widgetHasChanged())); - connect(ui.awayNick, SIGNAL(textEdited(const QString &)), this, SLOT(widgetHasChanged())); - connect(ui.awayNickEnabled, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); - connect(ui.awayReason, SIGNAL(textEdited(const QString &)), this, SLOT(widgetHasChanged())); - connect(ui.awayReasonEnabled, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); - connect(ui.autoAwayEnabled, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); - connect(ui.autoAwayTime, SIGNAL(valueChanged(int)), this, SLOT(widgetHasChanged())); - connect(ui.autoAwayReason, SIGNAL(textEdited(const QString &)), this, SLOT(widgetHasChanged())); - connect(ui.autoAwayReasonEnabled, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); - connect(ui.detachAwayEnabled, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); - connect(ui.detachAwayReason, SIGNAL(textEdited(const QString &)), this, SLOT(widgetHasChanged())); - connect(ui.detachAwayReasonEnabled, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); - connect(ui.ident, SIGNAL(textEdited(const QString &)), this, SLOT(widgetHasChanged())); - connect(ui.kickReason, SIGNAL(textEdited(const QString &)), this, SLOT(widgetHasChanged())); - connect(ui.partReason, SIGNAL(textEdited(const QString &)), this, SLOT(widgetHasChanged())); - connect(ui.quitReason, SIGNAL(textEdited(const QString &)), this, SLOT(widgetHasChanged())); - - connect(ui.nicknameList, SIGNAL(itemSelectionChanged()), this, SLOT(setWidgetStates())); - - // we would need this if we enabled drag and drop in the nicklist... - //connect(ui.nicknameList, SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(setWidgetStates())); - //connect(ui.nicknameList->model(), SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(nicklistHasChanged())); - } -void IdentitiesSettingsPage::setWidgetStates() { - if(ui.nicknameList->selectedItems().count()) { - ui.renameNick->setEnabled(true); - ui.nickUp->setEnabled(ui.nicknameList->row(ui.nicknameList->selectedItems()[0]) > 0); - ui.nickDown->setEnabled(ui.nicknameList->row(ui.nicknameList->selectedItems()[0]) < ui.nicknameList->count()-1); - } else { - ui.renameNick->setDisabled(true); - ui.nickUp->setDisabled(true); - ui.nickDown->setDisabled(true); - } - ui.deleteNick->setEnabled(ui.nicknameList->count() > 1); - -} - -void IdentitiesSettingsPage::coreConnectionStateChanged(bool state) { - this->setEnabled(state); - if(state) { +void IdentitiesSettingsPage::coreConnectionStateChanged(bool connected) { + setEnabled(connected); + if(connected) { +#ifdef HAVE_SSL + if(Client::signalProxy()->isSecure()) { + ui.identityEditor->setSslState(IdentityEditWidget::AllowSsl); + _editSsl = true; + } else { + ui.identityEditor->setSslState(IdentityEditWidget::UnsecureSsl); + _editSsl = false; + } +#else + ui.identityEditor->setSslState(IdentityEditWidget::NoSsl); +#endif load(); } else { // reset @@ -89,20 +73,33 @@ void IdentitiesSettingsPage::coreConnectionStateChanged(bool state) { } } +#ifdef HAVE_SSL +void IdentitiesSettingsPage::continueUnsecured() { + _editSsl = true; + + QHash::iterator idIter; + for(idIter = identities.begin(); idIter != identities.end(); idIter++) { + idIter.value()->enableEditSsl(); + } + + ui.identityEditor->setSslState(IdentityEditWidget::AllowSsl); +} +#endif + void IdentitiesSettingsPage::save() { setEnabled(false); - QList toCreate, toUpdate; + QList toCreate, toUpdate; // we need to remove our temporarily created identities. // these are going to be re-added after the core has propagated them back... - QHash::iterator i = identities.begin(); + QHash::iterator i = identities.begin(); while(i != identities.end()) { if((*i)->id() < 0) { - Identity *temp = *i; + CertIdentity *temp = *i; i = identities.erase(i); toCreate.append(temp); ui.identityList->removeItem(ui.identityList->findData(temp->id().toInt())); } else { - if(**i != *Client::identity((*i)->id())) { + if(**i != *Client::identity((*i)->id()) || (*i)->isDirty()) { toUpdate.append(*i); } ++i; @@ -150,17 +147,18 @@ bool IdentitiesSettingsPage::testHasChanged() { } else { if(currentId != 0) { changedIdentities.removeAll(currentId); - Identity temp(currentId, this); - saveToIdentity(&temp); + CertIdentity temp(currentId, this); + ui.identityEditor->saveToIdentity(&temp); temp.setIdentityName(identities[currentId]->identityName()); - if(temp != *Client::identity(currentId)) changedIdentities.append(currentId); + if(temp != *Client::identity(currentId) || temp.isDirty()) + changedIdentities.append(currentId); } return changedIdentities.count(); } } bool IdentitiesSettingsPage::aboutToSave() { - saveToIdentity(identities[currentId]); + ui.identityEditor->saveToIdentity(identities[currentId]); QList errors; foreach(Identity *id, identities.values()) { if(id->identityName().isEmpty()) errors.append(1); @@ -180,7 +178,14 @@ bool IdentitiesSettingsPage::aboutToSave() { } void IdentitiesSettingsPage::clientIdentityCreated(IdentityId id) { - insertIdentity(new Identity(*Client::identity(id), this)); + CertIdentity *identity = new CertIdentity(*Client::identity(id), this); +#ifdef HAVE_SSL + identity->enableEditSsl(_editSsl); +#endif + insertIdentity(identity); +#ifdef HAVE_SSL + connect(identity, SIGNAL(sslSettingsUpdated()), this, SLOT(clientIdentityUpdated())); +#endif connect(Client::identity(id), SIGNAL(updatedRemotely()), this, SLOT(clientIdentityUpdated())); } @@ -194,10 +199,16 @@ void IdentitiesSettingsPage::clientIdentityUpdated() { qWarning() << "Unknown identity to update:" << clientIdentity->identityName(); return; } - Identity *identity = identities[clientIdentity->id()]; - if(identity->identityName() != clientIdentity->identityName()) renameIdentity(identity->id(), clientIdentity->identityName()); - identity->update(*clientIdentity); - if(identity->id() == currentId) displayIdentity(identity, true); + + CertIdentity *identity = identities[clientIdentity->id()]; + + if(identity->identityName() != clientIdentity->identityName()) + renameIdentity(identity->id(), clientIdentity->identityName()); + + identity->copyFrom(*clientIdentity); + + if(identity->id() == currentId) + ui.identityEditor->displayIdentity(identity); } void IdentitiesSettingsPage::clientIdentityRemoved(IdentityId id) { @@ -208,7 +219,7 @@ void IdentitiesSettingsPage::clientIdentityRemoved(IdentityId id) { } } -void IdentitiesSettingsPage::insertIdentity(Identity *identity) { +void IdentitiesSettingsPage::insertIdentity(CertIdentity *identity) { IdentityId id = identity->id(); identities[id] = identity; if(id == 1) { @@ -245,72 +256,25 @@ void IdentitiesSettingsPage::removeIdentity(Identity *id) { } void IdentitiesSettingsPage::on_identityList_currentIndexChanged(int index) { + CertIdentity *previousIdentity = 0; + if(currentId != 0 && identities.contains(currentId)) + previousIdentity = identities[currentId]; + if(index < 0) { //ui.identityList->setEditable(false); - displayIdentity(0); + ui.identityEditor->displayIdentity(0, previousIdentity); + currentId = 0; } else { IdentityId id = ui.identityList->itemData(index).toInt(); - if(identities.contains(id)) displayIdentity(identities[id]); + if(identities.contains(id)) { + ui.identityEditor->displayIdentity(identities[id], previousIdentity); + currentId = id; + } ui.deleteIdentity->setEnabled(id != 1); // default identity cannot be deleted ui.renameIdentity->setEnabled(id != 1); // ...or renamed } } -void IdentitiesSettingsPage::displayIdentity(Identity *id, bool dontsave) { - if(currentId != 0 && !dontsave && identities.contains(currentId)) { - saveToIdentity(identities[currentId]); - } - if(id) { - currentId = id->id(); - ui.realName->setText(id->realName()); - ui.nicknameList->clear(); - ui.nicknameList->addItems(id->nicks()); - //for(int i = 0; i < ui.nicknameList->count(); i++) { - // ui.nicknameList->item(i)->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEditable|Qt::ItemIsEnabled); - //} - if(ui.nicknameList->count()) ui.nicknameList->setCurrentRow(0); - ui.awayNick->setText(id->awayNick()); - ui.awayNickEnabled->setChecked(id->awayNickEnabled()); - ui.awayReason->setText(id->awayReason()); - ui.awayReasonEnabled->setChecked(id->awayReasonEnabled()); - ui.autoAwayEnabled->setChecked(id->autoAwayEnabled()); - ui.autoAwayTime->setValue(id->autoAwayTime()); - ui.autoAwayReason->setText(id->autoAwayReason()); - ui.autoAwayReasonEnabled->setChecked(id->autoAwayReasonEnabled()); - ui.detachAwayEnabled->setChecked(id->detachAwayEnabled()); - ui.detachAwayReason->setText(id->detachAwayReason()); - ui.detachAwayReasonEnabled->setChecked(id->detachAwayReasonEnabled()); - ui.ident->setText(id->ident()); - ui.kickReason->setText(id->kickReason()); - ui.partReason->setText(id->partReason()); - ui.quitReason->setText(id->quitReason()); - } -} - -void IdentitiesSettingsPage::saveToIdentity(Identity *id) { - id->setRealName(ui.realName->text()); - QStringList nicks; - for(int i = 0; i < ui.nicknameList->count(); i++) { - nicks << ui.nicknameList->item(i)->text(); - } - id->setNicks(nicks); - id->setAwayNick(ui.awayNick->text()); - id->setAwayNickEnabled(ui.awayNickEnabled->isChecked()); - id->setAwayReason(ui.awayReason->text()); - id->setAwayReasonEnabled(ui.awayReasonEnabled->isChecked()); - id->setAutoAwayEnabled(ui.autoAwayEnabled->isChecked()); - id->setAutoAwayTime(ui.autoAwayTime->value()); - id->setAutoAwayReason(ui.autoAwayReason->text()); - id->setAutoAwayReasonEnabled(ui.autoAwayReasonEnabled->isChecked()); - id->setDetachAwayEnabled(ui.detachAwayEnabled->isChecked()); - id->setDetachAwayReason(ui.detachAwayReason->text()); - id->setDetachAwayReasonEnabled(ui.detachAwayReasonEnabled->isChecked()); - id->setIdent(ui.ident->text()); - id->setKickReason(ui.kickReason->text()); - id->setPartReason(ui.partReason->text()); - id->setQuitReason(ui.quitReason->text()); -} - void IdentitiesSettingsPage::on_addIdentity_clicked() { CreateIdentityDlg dlg(ui.identityList->model(), this); if(dlg.exec() == QDialog::Accepted) { @@ -320,10 +284,13 @@ void IdentitiesSettingsPage::on_addIdentity_clicked() { if(!identities.keys().contains(-id.toInt())) break; } id = -id.toInt(); - Identity *newId = new Identity(id, this); + CertIdentity *newId = new CertIdentity(id, this); +#ifdef HAVE_SSL + newId->enableEditSsl(_editSsl); +#endif if(dlg.duplicateId() != 0) { // duplicate - newId->update(*identities[dlg.duplicateId()]); + newId->copyFrom(*identities[dlg.duplicateId()]); newId->setId(id); } newId->setIdentityName(dlg.identityName()); @@ -357,65 +324,11 @@ void IdentitiesSettingsPage::on_renameIdentity_clicked() { } } -void IdentitiesSettingsPage::on_addNick_clicked() { - QStringList existing; - for(int i = 0; i < ui.nicknameList->count(); i++) existing << ui.nicknameList->item(i)->text(); - NickEditDlg dlg(QString(), existing, this); - if(dlg.exec() == QDialog::Accepted) { - ui.nicknameList->addItem(dlg.nick()); - ui.nicknameList->setCurrentRow(ui.nicknameList->count()-1); - setWidgetStates(); - widgetHasChanged(); - } -} - -void IdentitiesSettingsPage::on_deleteNick_clicked() { - // no confirmation, since a nickname is really nothing hard to recreate - if(ui.nicknameList->selectedItems().count()) { - delete ui.nicknameList->takeItem(ui.nicknameList->row(ui.nicknameList->selectedItems()[0])); - ui.nicknameList->setCurrentRow(qMin(ui.nicknameList->currentRow()+1, ui.nicknameList->count()-1)); - setWidgetStates(); - widgetHasChanged(); - } -} - -void IdentitiesSettingsPage::on_renameNick_clicked() { - if(!ui.nicknameList->selectedItems().count()) return; - QString old = ui.nicknameList->selectedItems()[0]->text(); - QStringList existing; - for(int i = 0; i < ui.nicknameList->count(); i++) existing << ui.nicknameList->item(i)->text(); - NickEditDlg dlg(old, existing, this); - if(dlg.exec() == QDialog::Accepted) { - ui.nicknameList->selectedItems()[0]->setText(dlg.nick()); - } - -} - -void IdentitiesSettingsPage::on_nickUp_clicked() { - if(!ui.nicknameList->selectedItems().count()) return; - int row = ui.nicknameList->row(ui.nicknameList->selectedItems()[0]); - if(row > 0) { - ui.nicknameList->insertItem(row-1, ui.nicknameList->takeItem(row)); - ui.nicknameList->setCurrentRow(row-1); - setWidgetStates(); - widgetHasChanged(); - } -} - -void IdentitiesSettingsPage::on_nickDown_clicked() { - if(!ui.nicknameList->selectedItems().count()) return; - int row = ui.nicknameList->row(ui.nicknameList->selectedItems()[0]); - if(row < ui.nicknameList->count()-1) { - ui.nicknameList->insertItem(row+1, ui.nicknameList->takeItem(row)); - ui.nicknameList->setCurrentRow(row+1); - setWidgetStates(); - widgetHasChanged(); - } -} - /*****************************************************************************************/ -CreateIdentityDlg::CreateIdentityDlg(QAbstractItemModel *model, QWidget *parent) : QDialog(parent) { +CreateIdentityDlg::CreateIdentityDlg(QAbstractItemModel *model, QWidget *parent) + : QDialog(parent) +{ ui.setupUi(this); ui.identityList->setModel(model); // now we use the identity list of the main page... Trolltech <3 @@ -441,9 +354,12 @@ void CreateIdentityDlg::on_identityName_textChanged(const QString &text) { /*********************************************************************************************/ -SaveIdentitiesDlg::SaveIdentitiesDlg(const QList &toCreate, const QList &toUpdate, const QList &toRemove, QWidget *parent) - : QDialog(parent) { //, toCreate(tocreate), toUpdate(toupdate), toRemove(toremove) { +SaveIdentitiesDlg::SaveIdentitiesDlg(const QList &toCreate, const QList &toUpdate, const QList &toRemove, QWidget *parent) + : QDialog(parent) +{ ui.setupUi(this); + ui.abort->setIcon(SmallIcon("dialog-cancel")); + numevents = toCreate.count() + toUpdate.count() + toRemove.count(); rcvevents = 0; if(numevents) { @@ -453,10 +369,10 @@ SaveIdentitiesDlg::SaveIdentitiesDlg(const QList &toCreate, const QL connect(Client::instance(), SIGNAL(identityCreated(IdentityId)), this, SLOT(clientEvent())); connect(Client::instance(), SIGNAL(identityRemoved(IdentityId)), this, SLOT(clientEvent())); - foreach(Identity *id, toCreate) { + foreach(CertIdentity *id, toCreate) { Client::createIdentity(*id); } - foreach(Identity *id, toUpdate) { + foreach(CertIdentity *id, toUpdate) { const Identity *cid = Client::identity(id->id()); if(!cid) { qWarning() << "Invalid client identity!"; @@ -465,6 +381,9 @@ SaveIdentitiesDlg::SaveIdentitiesDlg(const QList &toCreate, const QL } connect(cid, SIGNAL(updatedRemotely()), this, SLOT(clientEvent())); Client::updateIdentity(id->id(), id->toVariantMap()); +#ifdef HAVE_SSL + id->requestUpdateSslSettings(); +#endif } foreach(IdentityId id, toRemove) { Client::removeIdentity(id);