File indexing completed on 2024-05-12 15:59:58

0001 /*
0002  *    SPDX-FileCopyrightText: 2011 Srikanth Tiyyagura <srikanth.tulasiram@gmail.com>
0003  *    SPDX-FileCopyrightText: 2011 José Luis Vergara <pentalis@gmail.com>
0004  *    SPDX-FileCopyrightText: 2013 Sascha Suelzer <s.suelzer@gmail.com>
0005  *
0006  *    SPDX-License-Identifier: LGPL-2.0-or-later
0007  */
0008 
0009 #include "KisTagFilterWidget.h"
0010 
0011 #include <QPushButton>
0012 #include <QAction>
0013 #include <QGridLayout>
0014 #include <QLineEdit>
0015 #include <QCompleter>
0016 #include <QCheckBox>
0017 
0018 #include <klocalizedstring.h>
0019 
0020 #include <KoIcon.h>
0021 
0022 #include <kis_debug.h>
0023 #include <kconfig.h>
0024 #include <ksharedconfig.h>
0025 #include <kconfiggroup.h>
0026 
0027 class KisTagFilterWidget::Private
0028 {
0029 public:
0030     QLineEdit *tagSearchLineEdit;
0031     QGridLayout *filterBarLayout;
0032     QCompleter *completer;
0033     QCheckBox *filterByTagCheckbox;
0034 
0035     QString configGroup {"resources"};
0036     QString configName {"filterByTagChecked"};
0037 
0038 };
0039 
0040 KisTagFilterWidget::KisTagFilterWidget(KisTagModel* model, QWidget* parent)
0041     : QWidget(parent)
0042     , d(new Private())
0043 {
0044     QString searchTooltipMaintext = i18nc(
0045             "@info:tooltip",
0046             "<p>Enter search terms to filter by name</p>");
0047 
0048     QGridLayout* filterBarLayout = new QGridLayout(this);
0049 
0050 
0051     d->tagSearchLineEdit = new QLineEdit(this);
0052     d->tagSearchLineEdit->setClearButtonEnabled(true);
0053     d->tagSearchLineEdit->setPlaceholderText(i18n("Search"));
0054     d->tagSearchLineEdit->setToolTip(searchTooltipMaintext);
0055     d->tagSearchLineEdit->setEnabled(true);
0056 
0057     d->completer = new QCompleter(model, this);
0058     d->completer->setCompletionRole(Qt::DisplayRole);
0059     d->completer->setCaseSensitivity(Qt::CaseInsensitive);
0060     d->tagSearchLineEdit->setCompleter(d->completer);
0061 
0062     filterBarLayout->setMargin(0);
0063     filterBarLayout->setColumnStretch(0, 1);
0064     filterBarLayout->addWidget(d->tagSearchLineEdit, 0, 0);
0065 
0066     d->filterByTagCheckbox = new QCheckBox(this);
0067     d->filterByTagCheckbox->setText(i18nc("It appears in the checkbox next to the filter box "
0068                                           "in resources dockers; must be short.", "Filter in Tag"));
0069 
0070     KConfigGroup cfg = KSharedConfig::openConfig()->group(d->configGroup);
0071     bool filterByTagCheckboxChecked = cfg.readEntry(d->configName, true);
0072     d->filterByTagCheckbox->setChecked(filterByTagCheckboxChecked);
0073 
0074 
0075     filterBarLayout->addWidget(d->filterByTagCheckbox, 0, 1);
0076     connect(d->tagSearchLineEdit, SIGNAL(textChanged(QString)),
0077             this, SLOT(onTextChanged(QString)));
0078     connect(d->filterByTagCheckbox, SIGNAL(stateChanged(int)), this, SLOT(slotFilterByTagChanged(int)));
0079 }
0080 
0081 KisTagFilterWidget::~KisTagFilterWidget()
0082 {
0083     delete d;
0084 }
0085 
0086 void KisTagFilterWidget::clear()
0087 {
0088     d->tagSearchLineEdit->clear();
0089 }
0090 
0091 bool KisTagFilterWidget::isFilterByTagChecked()
0092 {
0093     return d->filterByTagCheckbox->isChecked();
0094 }
0095 
0096 
0097 void KisTagFilterWidget::onTextChanged(const QString& lineEditText)
0098 {
0099     emit filterTextChanged(lineEditText);
0100 }
0101 
0102 void KisTagFilterWidget::slotFilterByTagChanged(int filterByTag)
0103 {
0104     emit filterByTagChanged(filterByTag == Qt::Checked);
0105     KConfigGroup cfg = KSharedConfig::openConfig()->group(d->configGroup);
0106     cfg.writeEntry(d->configName, filterByTag == Qt::Checked);
0107 }