You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
5.4 KiB
161 lines
5.4 KiB
/* |
|
* kmail: KDE mail client |
|
* Copyright (C) 2000 Espen Sand, espen@kde.org |
|
* Copyright (C) 2001-2003 Marc Mutz, mutz@kde.org |
|
* Contains code segments and ideas from earlier kmail dialog code. |
|
* Copyright (C) 2010 Volker Krause <vkrause@kde.org> |
|
* |
|
* This program is free software; you can redistribute it and/or modify |
|
* it under the terms of the GNU General Public License as published by |
|
* the Free Software Foundation; either version 2 of the License, or |
|
* (at your option) any later version. |
|
* |
|
* This program is distributed in the hope that it will be useful, |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
* GNU General Public License for more details. |
|
* |
|
* You should have received a copy of the GNU General Public License along |
|
* with this program; if not, write to the Free Software Foundation, Inc., |
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
* |
|
*/ |
|
|
|
#include "newidentitydialog.h" |
|
|
|
#include <KIdentityManagement/kidentitymanagement/identitymanager.h> |
|
|
|
#include <PimCommon/PimUtil> |
|
#include <KComboBox> |
|
#include <KLineEdit> |
|
#include <KLocalizedString> |
|
#include <KSeparator> |
|
|
|
#include <QButtonGroup> |
|
#include <QHBoxLayout> |
|
#include <QLabel> |
|
#include <QRadioButton> |
|
#include <QVBoxLayout> |
|
|
|
#include <assert.h> |
|
#include <QDialogButtonBox> |
|
#include <QPushButton> |
|
|
|
using namespace KMail; |
|
|
|
NewIdentityDialog::NewIdentityDialog(KIdentityManagement::IdentityManager *manager, QWidget *parent) |
|
: QDialog(parent) |
|
, mIdentityManager(manager) |
|
{ |
|
setWindowTitle(i18n("New Identity")); |
|
QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Help, this); |
|
QVBoxLayout *mainLayout = new QVBoxLayout(this); |
|
mOkButton = buttonBox->button(QDialogButtonBox::Ok); |
|
mOkButton->setDefault(true); |
|
mOkButton->setShortcut(Qt::CTRL | Qt::Key_Return); |
|
connect(buttonBox, &QDialogButtonBox::accepted, this, &NewIdentityDialog::accept); |
|
connect(buttonBox, &QDialogButtonBox::rejected, this, &NewIdentityDialog::reject); |
|
connect(buttonBox->button(QDialogButtonBox::Help), &QPushButton::clicked, this, &NewIdentityDialog::slotHelp); |
|
|
|
QWidget *page = new QWidget(this); |
|
mainLayout->addWidget(page); |
|
mainLayout->addWidget(buttonBox); |
|
QVBoxLayout *vlay = new QVBoxLayout(page); |
|
vlay->setMargin(0); |
|
|
|
// row 0: line edit with label |
|
QHBoxLayout *hlay = new QHBoxLayout(); // inherits spacing |
|
vlay->addLayout(hlay); |
|
mLineEdit = new KLineEdit(page); |
|
mLineEdit->setFocus(); |
|
mLineEdit->setClearButtonShown(true); |
|
QLabel *l = new QLabel(i18n("&New identity:"), page); |
|
l->setBuddy(mLineEdit); |
|
hlay->addWidget(l); |
|
hlay->addWidget(mLineEdit, 1); |
|
connect(mLineEdit, &KLineEdit::textChanged, this, &NewIdentityDialog::slotEnableOK); |
|
|
|
mButtonGroup = new QButtonGroup(page); |
|
|
|
// row 1: radio button |
|
QRadioButton *radio = new QRadioButton(i18n("&With empty fields"), page); |
|
radio->setChecked(true); |
|
vlay->addWidget(radio); |
|
mButtonGroup->addButton(radio, (int)Empty); |
|
|
|
// row 2: radio button |
|
radio = new QRadioButton(i18n("&Use System Settings values"), page); |
|
vlay->addWidget(radio); |
|
mButtonGroup->addButton(radio, (int)ControlCenter); |
|
|
|
// row 3: radio button |
|
radio = new QRadioButton(i18n("&Duplicate existing identity"), page); |
|
vlay->addWidget(radio); |
|
mButtonGroup->addButton(radio, (int)ExistingEntry); |
|
|
|
// row 4: combobox with existing identities and label |
|
hlay = new QHBoxLayout(); // inherits spacing |
|
vlay->addLayout(hlay); |
|
mComboBox = new KComboBox(page); |
|
mComboBox->setEditable(false); |
|
mComboBox->addItems(manager->shadowIdentities()); |
|
mComboBox->setEnabled(false); |
|
QLabel *label = new QLabel(i18n("&Existing identities:"), page); |
|
label->setBuddy(mComboBox); |
|
label->setEnabled(false); |
|
hlay->addWidget(label); |
|
hlay->addWidget(mComboBox, 1); |
|
|
|
vlay->addWidget(new KSeparator); |
|
vlay->addStretch(1); // spacer |
|
|
|
// enable/disable combobox and label depending on the third radio |
|
// button's state: |
|
connect(radio, &QRadioButton::toggled, label, &QLabel::setEnabled); |
|
connect(radio, &QRadioButton::toggled, mComboBox, &KComboBox::setEnabled); |
|
|
|
mOkButton->setEnabled(false); // since line edit is empty |
|
|
|
resize(400, 180); |
|
} |
|
|
|
void NewIdentityDialog::slotHelp() |
|
{ |
|
PimCommon::Util::invokeHelp(QStringLiteral("kmail2/configure-identity.html"), QStringLiteral("configure-identity-newidentitydialog")); |
|
} |
|
|
|
NewIdentityDialog::DuplicateMode NewIdentityDialog::duplicateMode() const |
|
{ |
|
const int id = mButtonGroup->checkedId(); |
|
assert(id == (int)Empty |
|
|| id == (int)ControlCenter |
|
|| id == (int)ExistingEntry); |
|
return static_cast<DuplicateMode>(id); |
|
} |
|
|
|
void NewIdentityDialog::slotEnableOK(const QString &proposedIdentityName) |
|
{ |
|
// OK button is disabled if |
|
const QString name = proposedIdentityName.trimmed(); |
|
// name isn't empty |
|
if (name.isEmpty()) { |
|
mOkButton->setEnabled(false); |
|
return; |
|
} |
|
// or name doesn't yet exist. |
|
if (!mIdentityManager->isUnique(name)) { |
|
mOkButton->setEnabled(false); |
|
return; |
|
} |
|
mOkButton->setEnabled(true); |
|
} |
|
|
|
QString NewIdentityDialog::identityName() const |
|
{ |
|
return mLineEdit->text(); |
|
} |
|
|
|
QString NewIdentityDialog::duplicateIdentity() const |
|
{ |
|
return mComboBox->currentText(); |
|
}
|
|
|