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 }