Messagelib

searchmessagebybuttons.cpp
1/*
2 SPDX-FileCopyrightText: 2024 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
7#include "searchmessagebybuttons.h"
8#include <KLocalizedString>
9#include <QButtonGroup>
10#include <QHBoxLayout>
11#include <QLabel>
12#include <QToolButton>
13
14using namespace MessageList::Core;
15SearchMessageByButtons::SearchMessageByButtons(QWidget *parent)
16 : QWidget{parent}
17 , mMainLayout(new QHBoxLayout(this))
18 , mButtonGroup(new QButtonGroup(this))
19{
20 mMainLayout->setObjectName(QStringLiteral("mainLayout"));
21 mMainLayout->setContentsMargins({});
22 mMainLayout->setSpacing(0);
23
24 mButtonGroup->setObjectName(QStringLiteral("mButtonGroup"));
25 connect(mButtonGroup, &QButtonGroup::idClicked, this, &SearchMessageByButtons::searchOptionChanged);
26 createButtons();
27 mMainLayout->addStretch(0);
28}
29
30SearchMessageByButtons::~SearchMessageByButtons() = default;
31
32void SearchMessageByButtons::createButtons()
33{
34 auto button = createFilterButton(i18nc("@action", "Full Message"), SearchEveryWhere);
35 button->setChecked(true); // Enable by default
36 createFilterButton(i18nc("@action", "Body"), SearchAgainstBody);
37 createFilterButton(i18nc("@action", "Subject"), SearchAgainstSubject);
38 mSearchAgainstFromOrToButton = createFilterButton(QString(), SearchAgainstTo);
39 createFilterButton(i18nc("@action", "BCC"), SearchAgainstBcc);
40 changeSearchAgainstFromOrToText();
41}
42
43QToolButton *SearchMessageByButtons::createFilterButton(const QString &text, SearchOption option)
44{
45 auto toolButton = new QToolButton(this);
46 toolButton->setText(text);
47 toolButton->setCheckable(true);
48 toolButton->setAutoRaise(true);
49 mButtonGroup->addButton(toolButton, option);
50 mMainLayout->addWidget(toolButton, 0, Qt::AlignTop);
51 return toolButton;
52}
53
54bool SearchMessageByButtons::containsOutboundMessages() const
55{
56 return mContainsOutboundMessages;
57}
58
59void SearchMessageByButtons::setContainsOutboundMessages(bool containsOutboundMessages)
60{
61 if (mContainsOutboundMessages != containsOutboundMessages) {
62 mContainsOutboundMessages = containsOutboundMessages;
63 changeSearchAgainstFromOrToText();
64 }
65}
66
67void SearchMessageByButtons::changeSearchAgainstFromOrToText()
68{
69 if (mContainsOutboundMessages) {
70 mSearchAgainstFromOrToButton->setText(i18n("To"));
71 } else {
72 mSearchAgainstFromOrToButton->setText(i18n("From"));
73 }
74}
75
76SearchMessageByButtons::SearchOptions SearchMessageByButtons::searchOptions() const
77{
79 const int checked = mButtonGroup->checkedId();
80 if (checked == SearchAgainstTo) {
81 if (mContainsOutboundMessages) {
82 searchOptions |= SearchMessageByButtons::SearchAgainstTo;
83 } else {
84 searchOptions |= SearchMessageByButtons::SearchAgainstFrom;
85 }
86 } else {
87 searchOptions |= static_cast<SearchMessageByButtons::SearchOption>(checked);
88 }
89 return searchOptions;
90}
91
92void SearchMessageByButtons::setSearchOptions(SearchMessageByButtons::SearchOptions opts)
93{
94 mButtonGroup->button(SearchMessageByButtons::SearchEveryWhere)->setChecked(opts & SearchMessageByButtons::SearchEveryWhere);
95 mButtonGroup->button(SearchMessageByButtons::SearchAgainstBody)->setChecked(opts & SearchMessageByButtons::SearchAgainstBody);
96 mButtonGroup->button(SearchMessageByButtons::SearchAgainstSubject)->setChecked(opts & SearchMessageByButtons::SearchAgainstSubject);
97 mButtonGroup->button(SearchMessageByButtons::SearchAgainstBcc)->setChecked(opts & SearchMessageByButtons::SearchAgainstBcc);
98 mButtonGroup->button(SearchMessageByButtons::SearchEveryWhere)->setChecked(opts & SearchMessageByButtons::SearchEveryWhere);
99
100 if (mContainsOutboundMessages) {
101 mButtonGroup->button(SearchMessageByButtons::SearchAgainstTo)->setChecked(opts & SearchMessageByButtons::SearchAgainstTo);
102 } else {
103 mButtonGroup->button(SearchMessageByButtons::SearchAgainstTo)->setChecked(opts & SearchMessageByButtons::SearchAgainstFrom);
104 }
105}
106
107void SearchMessageByButtons::clearFilter()
108{
109 mButtonGroup->button(SearchMessageByButtons::SearchEveryWhere)->setChecked(true);
110}
111
112#include "moc_searchmessagebybuttons.cpp"
QString i18nc(const char *context, const char *text, const TYPE &arg...)
QString i18n(const char *text, const TYPE &arg...)
The implementation independent part of the MessageList library.
Definition aggregation.h:22
void setChecked(bool)
void setText(const QString &text)
void addWidget(QWidget *widget, int stretch, Qt::Alignment alignment)
void addButton(QAbstractButton *button, int id)
QAbstractButton * button(int id) const const
int checkedId() const const
void idClicked(int id)
void setObjectName(QAnyStringView name)
AlignTop
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Fri Aug 30 2024 11:45:52 by doxygen 1.12.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.