File indexing completed on 2024-05-12 05:52:36

0001 /*
0002     SPDX-FileCopyrightText: 2015-2024 Laurent Montel <montel@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 
0006 */
0007 
0008 #include "customdebugsettingspage.h"
0009 #include "customdebuglistview.h"
0010 #include "loggingmanager.h"
0011 
0012 #include <KLocalizedString>
0013 #include <QHBoxLayout>
0014 #include <QKeyEvent>
0015 #include <QLineEdit>
0016 #include <QPushButton>
0017 #include <QVBoxLayout>
0018 
0019 CustomDebugSettingsPage::CustomDebugSettingsPage(QWidget *parent)
0020     : QWidget(parent)
0021     , mEditRule(new QPushButton(i18n("Edit..."), this))
0022     , mRemoveRule(new QPushButton(i18n("Remove..."), this))
0023     , mSearchLineEdit(new QLineEdit(this))
0024     , mCustomDebugListView(new CustomDebugListView(this))
0025 {
0026     auto mainLayout = new QVBoxLayout(this);
0027 
0028     auto horizontalLayout = new QHBoxLayout;
0029     horizontalLayout->setContentsMargins({});
0030     mainLayout->addLayout(horizontalLayout);
0031 
0032     auto vbox = new QVBoxLayout;
0033     horizontalLayout->addLayout(vbox);
0034 
0035     vbox->addWidget(mSearchLineEdit);
0036     mSearchLineEdit->setClearButtonEnabled(true);
0037     mSearchLineEdit->setObjectName(QLatin1StringView("mSearchLineEdit"));
0038     mSearchLineEdit->setPlaceholderText(i18n("Search..."));
0039     vbox->addWidget(mCustomDebugListView);
0040     mCustomDebugListView->setObjectName(QLatin1StringView("mCustomDebugListView"));
0041 
0042     mCustomDebugListView->setLoggingCategoryModel(LoggingManager::self().customCategoryModel());
0043     auto buttonLayout = new QVBoxLayout;
0044     horizontalLayout->addLayout(buttonLayout);
0045 
0046     auto addRulePushButton = new QPushButton(i18n("Add..."), this);
0047     addRulePushButton->setObjectName(QLatin1StringView("add_rule"));
0048     buttonLayout->addWidget(addRulePushButton);
0049     connect(addRulePushButton, &QAbstractButton::clicked, mCustomDebugListView, &CustomDebugListView::slotAddRule);
0050 
0051     mEditRule->setObjectName(QLatin1StringView("edit_rule"));
0052     buttonLayout->addWidget(mEditRule);
0053     connect(mEditRule, &QAbstractButton::clicked, mCustomDebugListView, &CustomDebugListView::editRule);
0054 
0055     mRemoveRule->setObjectName(QLatin1StringView("remove_rule"));
0056     buttonLayout->addWidget(mRemoveRule);
0057     buttonLayout->addStretch();
0058     connect(mRemoveRule, &QAbstractButton::clicked, mCustomDebugListView, &CustomDebugListView::removeRules);
0059     updateButtons();
0060     mSearchLineEdit->installEventFilter(this);
0061     connect(mSearchLineEdit, &QLineEdit::textChanged, mCustomDebugListView, &CustomDebugListView::setFilterRuleStr);
0062     connect(mCustomDebugListView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &CustomDebugSettingsPage::updateButtons);
0063     connect(mCustomDebugListView, &CustomDebugListView::updateButtonsRequested, this, &CustomDebugSettingsPage::updateButtons);
0064 }
0065 
0066 CustomDebugSettingsPage::~CustomDebugSettingsPage() = default;
0067 
0068 bool CustomDebugSettingsPage::eventFilter(QObject *obj, QEvent *event)
0069 {
0070     if (event->type() == QEvent::KeyPress && obj == mSearchLineEdit) {
0071         auto key = static_cast<QKeyEvent *>(event);
0072         if ((key->key() == Qt::Key_Enter) || (key->key() == Qt::Key_Return)) {
0073             event->accept();
0074             return true;
0075         }
0076     }
0077     return QWidget::eventFilter(obj, event);
0078 }
0079 
0080 void CustomDebugSettingsPage::updateButtons()
0081 {
0082     mEditRule->setEnabled(mCustomDebugListView->selectionModel()->selection().indexes().count() == 1);
0083     mRemoveRule->setEnabled(mCustomDebugListView->selectionModel()->hasSelection());
0084 }
0085 
0086 LoggingCategory::List CustomDebugSettingsPage::rules() const
0087 {
0088     return LoggingManager::self().customCategoryModel()->loggingCategories();
0089 }
0090 
0091 #include "moc_customdebugsettingspage.cpp"