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"