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

0001 /*
0002     SPDX-FileCopyrightText: 2023-2024 Laurent Montel <montel.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "kdeapplicationtreeview.h"
0008 #include "kdeapplicationlistviewdelegate.h"
0009 #include "model/kdeapplicationloggingcategorymodel.h"
0010 #include "model/kdeapplicationloggingcategoryproxymodel.h"
0011 #include <QHeaderView>
0012 
0013 KDEApplicationTreeView::KDEApplicationTreeView(QWidget *parent)
0014     : QTreeView(parent)
0015     , mKdeApplicationLoggingCategoryProxyModel(new KDEApplicationLoggingCategoryProxyModel(this))
0016 {
0017     header()->hide();
0018     setRootIsDecorated(false);
0019     setAlternatingRowColors(true);
0020     setSelectionBehavior(QAbstractItemView::SelectRows);
0021     setSelectionMode(ExtendedSelection);
0022     setEditTriggers(AllEditTriggers);
0023     setUniformRowHeights(true);
0024 }
0025 
0026 KDEApplicationTreeView::~KDEApplicationTreeView() = default;
0027 
0028 void KDEApplicationTreeView::setLoggingCategoryModel(KDEApplicationLoggingCategoryModel *newLoggingCategoryModel)
0029 {
0030     mKdeApplicationLoggingCategoryModel = newLoggingCategoryModel;
0031     mKdeApplicationLoggingCategoryModel->setObjectName(QLatin1StringView("mKdeApplicationLoggingCategoryModel"));
0032 
0033     mKdeApplicationLoggingCategoryProxyModel->setSourceModel(mKdeApplicationLoggingCategoryModel);
0034     setModel(mKdeApplicationLoggingCategoryProxyModel);
0035     // Hide column when we have model.
0036     hideColumn(KDEApplicationLoggingCategoryModel::LoggingTypeRole);
0037     hideColumn(KDEApplicationLoggingCategoryModel::CategoryRole);
0038     setItemDelegateForColumn(KDEApplicationLoggingCategoryModel::LoggingTypeStrRole, new KDEApplicationListViewDelegate(this));
0039     resizeColumnToContents(KDEApplicationLoggingCategoryModel::DescriptionRole);
0040 }
0041 
0042 void KDEApplicationTreeView::setFilterRuleStr(const QString &str)
0043 {
0044     mKdeApplicationLoggingCategoryProxyModel->setFilterText(str);
0045 }
0046 
0047 void KDEApplicationTreeView::selectAllDebugCategories()
0048 {
0049     LoggingCategory::List lst;
0050     for (int i = 0; i < mKdeApplicationLoggingCategoryProxyModel->rowCount(); ++i) {
0051         QModelIndex index = mKdeApplicationLoggingCategoryProxyModel->mapToSource(
0052             mKdeApplicationLoggingCategoryProxyModel->index(i, KDEApplicationLoggingCategoryModel::CategoryRole));
0053         auto cat = index.data().value<LoggingCategory>();
0054         cat.loggingType = LoggingCategory::All;
0055         lst.append(cat);
0056     }
0057     if (!lst.isEmpty()) {
0058         mKdeApplicationLoggingCategoryModel->replaceCategories(lst);
0059     }
0060 }
0061 
0062 void KDEApplicationTreeView::deSelectAllDebugCategories()
0063 {
0064     LoggingCategory::List lst;
0065     for (int i = 0; i < mKdeApplicationLoggingCategoryProxyModel->rowCount(); ++i) {
0066         const QModelIndex index = mKdeApplicationLoggingCategoryProxyModel->mapToSource(
0067             mKdeApplicationLoggingCategoryProxyModel->index(i, KDEApplicationLoggingCategoryModel::CategoryRole));
0068         auto cat = index.data().value<LoggingCategory>();
0069         cat.loggingType = LoggingCategory::Info;
0070         lst.append(cat);
0071     }
0072     if (!lst.isEmpty()) {
0073         mKdeApplicationLoggingCategoryModel->replaceCategories(lst);
0074     }
0075 }
0076 
0077 void KDEApplicationTreeView::deSelectAllMessagesCategories()
0078 {
0079     LoggingCategory::List lst;
0080     for (int i = 0; i < mKdeApplicationLoggingCategoryProxyModel->rowCount(); ++i) {
0081         const QModelIndex index = mKdeApplicationLoggingCategoryProxyModel->mapToSource(
0082             mKdeApplicationLoggingCategoryProxyModel->index(i, KDEApplicationLoggingCategoryModel::CategoryRole));
0083         auto cat = index.data().value<LoggingCategory>();
0084         cat.loggingType = LoggingCategory::Off;
0085         lst.append(cat);
0086     }
0087     if (!lst.isEmpty()) {
0088         mKdeApplicationLoggingCategoryModel->replaceCategories(lst);
0089     }
0090 }
0091 
0092 void KDEApplicationTreeView::insertCategories(const LoggingCategory::List &list)
0093 {
0094     mKdeApplicationLoggingCategoryModel->insertCategories(list);
0095 }
0096 
0097 void KDEApplicationTreeView::restoreToDefault()
0098 {
0099     LoggingCategory::List lst;
0100     for (int i = 0; i < mKdeApplicationLoggingCategoryProxyModel->rowCount(); ++i) {
0101         const QModelIndex index = mKdeApplicationLoggingCategoryProxyModel->mapToSource(
0102             mKdeApplicationLoggingCategoryProxyModel->index(i, KDEApplicationLoggingCategoryModel::CategoryRole));
0103         auto cat = index.data().value<LoggingCategory>();
0104         cat.loggingType = cat.defaultSeverityType;
0105         lst.append(cat);
0106     }
0107     if (!lst.isEmpty()) {
0108         mKdeApplicationLoggingCategoryModel->replaceCategories(lst);
0109     }
0110 }
0111 
0112 LoggingCategory::List KDEApplicationTreeView::rules(bool forceSavingAllRules) const
0113 {
0114     LoggingCategory::List lst;
0115     for (int i = 0; i < mKdeApplicationLoggingCategoryProxyModel->rowCount(); ++i) {
0116         const QModelIndex index = mKdeApplicationLoggingCategoryProxyModel->mapToSource(
0117             mKdeApplicationLoggingCategoryProxyModel->index(i, KDEApplicationLoggingCategoryModel::CategoryRole));
0118         auto cat = index.data().value<LoggingCategory>();
0119         if (forceSavingAllRules || (cat.loggingType != cat.defaultSeverityType)) {
0120             cat.enabled = false;
0121             if (cat.isValid()) {
0122                 lst.append(cat);
0123             }
0124         }
0125     }
0126     return lst;
0127 }
0128 
0129 #include "moc_kdeapplicationtreeview.cpp"