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.
266 lines
8.5 KiB
266 lines
8.5 KiB
/* |
|
SPDX-FileCopyrightText: 2012-2021 Laurent Montel <montel@kde.org> |
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later |
|
*/ |
|
|
|
#include "tagwidget.h" |
|
|
|
#include <Libkdepim/LineEditCatchReturnKey> |
|
|
|
#include <KActionCollection> |
|
#include <KColorCombo> |
|
#include <KIconButton> |
|
#include <KKeySequenceWidget> |
|
#include <KLocalizedString> |
|
#include <QCheckBox> |
|
#include <QGridLayout> |
|
#include <QIcon> |
|
#include <QLabel> |
|
#include <QLineEdit> |
|
#include <QVBoxLayout> |
|
using namespace MailCommon; |
|
class MailCommon::TagWidgetPrivate |
|
{ |
|
public: |
|
TagWidgetPrivate() |
|
{ |
|
} |
|
|
|
QLineEdit *mTagNameLineEdit = nullptr; |
|
|
|
QCheckBox *mTextColorCheck = nullptr; |
|
QCheckBox *mBackgroundColorCheck = nullptr; |
|
QCheckBox *mTextFontCheck = nullptr; |
|
QCheckBox *mInToolbarCheck = nullptr; |
|
|
|
KColorCombo *mTextColorCombo = nullptr; |
|
KColorCombo *mBackgroundColorCombo = nullptr; |
|
|
|
QCheckBox *mBoldCheckBox = nullptr; |
|
QCheckBox *mItalicCheckBox = nullptr; |
|
|
|
KIconButton *mIconButton = nullptr; |
|
|
|
KKeySequenceWidget *mKeySequenceWidget = nullptr; |
|
}; |
|
|
|
TagWidget::TagWidget(const QList<KActionCollection *> &actionCollections, QWidget *parent) |
|
: QWidget(parent) |
|
, d(new MailCommon::TagWidgetPrivate) |
|
{ |
|
auto settings = new QGridLayout(this); |
|
settings->setContentsMargins({}); |
|
|
|
// Stretcher layout for adding some space after the label |
|
auto spacer = new QVBoxLayout(); |
|
settings->addLayout(spacer, 0, 0, 1, 2); |
|
|
|
// First row for renaming |
|
d->mTagNameLineEdit = new QLineEdit(this); |
|
d->mTagNameLineEdit->setClearButtonEnabled(true); |
|
new KPIM::LineEditCatchReturnKey(d->mTagNameLineEdit, this); |
|
settings->addWidget(d->mTagNameLineEdit, 1, 1); |
|
|
|
auto namelabel = new QLabel(i18nc("@label:listbox Name of the tag", "Name:"), this); |
|
namelabel->setBuddy(d->mTagNameLineEdit); |
|
settings->addWidget(namelabel, 1, 0); |
|
|
|
connect(d->mTagNameLineEdit, &QLineEdit::textChanged, this, &TagWidget::slotEmitChangeCheck); |
|
|
|
// Second row for text color |
|
d->mTextColorCheck = new QCheckBox(i18n("Change te&xt color:"), this); |
|
settings->addWidget(d->mTextColorCheck, 2, 0); |
|
|
|
d->mTextColorCombo = new KColorCombo(this); |
|
settings->addWidget(d->mTextColorCombo, 2, 1); |
|
d->mTextColorCombo->setEnabled(false); |
|
|
|
connect(d->mTextColorCheck, &QCheckBox::toggled, d->mTextColorCombo, &KColorCombo::setEnabled); |
|
connect(d->mTextColorCheck, &QCheckBox::stateChanged, this, &TagWidget::slotEmitChangeCheck); |
|
connect(d->mTextColorCombo, &KColorCombo::activated, this, &TagWidget::slotEmitChangeCheck); |
|
|
|
// Third row for text background color |
|
d->mBackgroundColorCheck = new QCheckBox(i18n("Change &background color:"), this); |
|
settings->addWidget(d->mBackgroundColorCheck, 3, 0); |
|
|
|
d->mBackgroundColorCombo = new KColorCombo(this); |
|
settings->addWidget(d->mBackgroundColorCombo, 3, 1); |
|
d->mBackgroundColorCombo->setEnabled(false); |
|
|
|
connect(d->mBackgroundColorCheck, &QAbstractButton::toggled, d->mBackgroundColorCombo, &QWidget::setEnabled); |
|
connect(d->mBackgroundColorCheck, &QCheckBox::stateChanged, this, &TagWidget::slotEmitChangeCheck); |
|
connect(d->mBackgroundColorCombo, &KColorCombo::activated, this, &TagWidget::slotEmitChangeCheck); |
|
|
|
// Fourth for font selection |
|
d->mTextFontCheck = new QCheckBox(i18n("Change fo&nt:"), this); |
|
settings->addWidget(d->mTextFontCheck, 4, 0); |
|
|
|
auto fontLayout = new QVBoxLayout; |
|
settings->addLayout(fontLayout, 4, 1); |
|
|
|
d->mBoldCheckBox = new QCheckBox(i18n("&Bold")); |
|
d->mBoldCheckBox->setEnabled(false); |
|
fontLayout->addWidget(d->mBoldCheckBox); |
|
|
|
d->mItalicCheckBox = new QCheckBox(i18n("&Italics")); |
|
d->mItalicCheckBox->setEnabled(false); |
|
fontLayout->addWidget(d->mItalicCheckBox); |
|
|
|
connect(d->mTextFontCheck, &QAbstractButton::toggled, d->mBoldCheckBox, &QWidget::setEnabled); |
|
connect(d->mTextFontCheck, &QAbstractButton::toggled, d->mItalicCheckBox, &QWidget::setEnabled); |
|
connect(d->mTextFontCheck, &QCheckBox::stateChanged, this, &TagWidget::slotEmitChangeCheck); |
|
connect(d->mBoldCheckBox, &QAbstractButton::toggled, this, &TagWidget::slotEmitChangeCheck); |
|
connect(d->mItalicCheckBox, &QAbstractButton::toggled, this, &TagWidget::slotEmitChangeCheck); |
|
|
|
// Fifth for toolbar icon |
|
d->mIconButton = new KIconButton(this); |
|
d->mIconButton->setIconSize(16); |
|
d->mIconButton->setIconType(KIconLoader::NoGroup, KIconLoader::Action); |
|
d->mIconButton->setIcon(QIcon::fromTheme(QStringLiteral("mail-tagged"))); |
|
settings->addWidget(d->mIconButton, 5, 1); |
|
connect(d->mIconButton, &KIconButton::iconChanged, this, &TagWidget::iconNameChanged); |
|
|
|
auto iconlabel = new QLabel(i18n("Message tag &icon:"), this); |
|
iconlabel->setBuddy(d->mIconButton); |
|
settings->addWidget(iconlabel, 5, 0); |
|
|
|
// We do not connect the checkbox to icon selector since icons are used in the |
|
// menus as well |
|
connect(d->mIconButton, &KIconButton::iconChanged, this, &TagWidget::slotEmitChangeCheck); |
|
|
|
// Sixth for shortcut |
|
d->mKeySequenceWidget = new KKeySequenceWidget(this); |
|
settings->addWidget(d->mKeySequenceWidget, 6, 1); |
|
auto sclabel = new QLabel(i18n("Shortc&ut:"), this); |
|
sclabel->setBuddy(d->mKeySequenceWidget); |
|
settings->addWidget(sclabel, 6, 0); |
|
if (!actionCollections.isEmpty()) { |
|
d->mKeySequenceWidget->setCheckActionCollections(actionCollections); |
|
connect(d->mKeySequenceWidget, &KKeySequenceWidget::keySequenceChanged, this, &TagWidget::slotEmitChangeCheck); |
|
} else { |
|
d->mKeySequenceWidget->setEnabled(false); |
|
} |
|
|
|
// Seventh for Toolbar checkbox |
|
d->mInToolbarCheck = new QCheckBox(i18n("Enable &toolbar button"), this); |
|
settings->addWidget(d->mInToolbarCheck, 7, 0); |
|
connect(d->mInToolbarCheck, &QCheckBox::stateChanged, this, &TagWidget::slotEmitChangeCheck); |
|
} |
|
|
|
TagWidget::~TagWidget() |
|
{ |
|
delete d; |
|
} |
|
|
|
void TagWidget::slotEmitChangeCheck() |
|
{ |
|
Q_EMIT changed(); |
|
} |
|
|
|
void TagWidget::setTagTextColor(const QColor &color) |
|
{ |
|
d->mTextColorCheck->setEnabled(true); |
|
if (color.isValid()) { |
|
d->mTextColorCheck->setChecked(true); |
|
d->mTextColorCombo->setColor(color); |
|
} else { |
|
d->mTextColorCheck->setChecked(false); |
|
d->mTextColorCombo->setColor(Qt::white); |
|
} |
|
d->mTextColorCombo->setEnabled(d->mTextColorCheck->isChecked()); |
|
} |
|
|
|
void TagWidget::setTagBackgroundColor(const QColor &color) |
|
{ |
|
d->mBackgroundColorCheck->setEnabled(true); |
|
if (color.isValid()) { |
|
d->mBackgroundColorCheck->setChecked(true); |
|
d->mBackgroundColorCombo->setColor(color); |
|
} else { |
|
d->mBackgroundColorCheck->setChecked(false); |
|
d->mBackgroundColorCombo->setColor(Qt::white); |
|
} |
|
d->mBackgroundColorCombo->setEnabled(d->mBackgroundColorCheck->isChecked()); |
|
} |
|
|
|
void TagWidget::setTagTextFormat(bool isBold, bool isItalic) |
|
{ |
|
d->mTextFontCheck->setEnabled(true); |
|
d->mTextFontCheck->setChecked(isBold || isItalic); |
|
d->mBoldCheckBox->setChecked(isBold); |
|
d->mItalicCheckBox->setChecked(isItalic); |
|
} |
|
|
|
void TagWidget::recordTagSettings(MailCommon::Tag::Ptr tag) |
|
{ |
|
tag->textColor = d->mTextColorCheck->isChecked() ? d->mTextColorCombo->color() : QColor(); |
|
|
|
tag->backgroundColor = d->mBackgroundColorCheck->isChecked() ? d->mBackgroundColorCombo->color() : QColor(); |
|
|
|
tag->isBold = d->mTextFontCheck->isChecked() ? d->mBoldCheckBox->isChecked() : false; |
|
tag->isItalic = d->mTextFontCheck->isChecked() ? d->mItalicCheckBox->isChecked() : false; |
|
|
|
tag->iconName = iconButton()->icon(); |
|
if (d->mKeySequenceWidget->isEnabled()) { |
|
d->mKeySequenceWidget->applyStealShortcut(); |
|
tag->shortcut = QKeySequence(d->mKeySequenceWidget->keySequence()); |
|
} |
|
|
|
tag->inToolbar = d->mInToolbarCheck->isChecked(); |
|
} |
|
|
|
QLineEdit *TagWidget::tagNameLineEdit() const |
|
{ |
|
return d->mTagNameLineEdit; |
|
} |
|
|
|
QCheckBox *TagWidget::textColorCheck() const |
|
{ |
|
return d->mTextColorCheck; |
|
} |
|
|
|
QCheckBox *TagWidget::textFontCheck() const |
|
{ |
|
return d->mTextFontCheck; |
|
} |
|
|
|
QCheckBox *TagWidget::backgroundColorCheck() const |
|
{ |
|
return d->mBackgroundColorCheck; |
|
} |
|
|
|
QCheckBox *TagWidget::inToolBarCheck() const |
|
{ |
|
return d->mInToolbarCheck; |
|
} |
|
|
|
KColorCombo *TagWidget::textColorCombo() const |
|
{ |
|
return d->mTextColorCombo; |
|
} |
|
|
|
KColorCombo *TagWidget::backgroundColorCombo() const |
|
{ |
|
return d->mBackgroundColorCombo; |
|
} |
|
|
|
QCheckBox *TagWidget::textBoldCheck() const |
|
{ |
|
return d->mBoldCheckBox; |
|
} |
|
|
|
QCheckBox *TagWidget::textItalicCheck() const |
|
{ |
|
return d->mItalicCheckBox; |
|
} |
|
|
|
KIconButton *TagWidget::iconButton() const |
|
{ |
|
return d->mIconButton; |
|
} |
|
|
|
KKeySequenceWidget *TagWidget::keySequenceWidget() const |
|
{ |
|
return d->mKeySequenceWidget; |
|
}
|
|
|