1 /*
2 SPDX-FileCopyrightText: 2015-2021 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5
6 */
7
8 #include "kdeapplicationtreelistwidget.h"
9 #include "categorytypecombobox.h"
10 #include "kdebugsettingsutil.h"
11 #include <KLocalizedString>
12 #include <QHeaderView>
13
KDEApplicationTreeListWidgetItem(const QString & category,QTreeWidget * parent)14 KDEApplicationTreeListWidgetItem::KDEApplicationTreeListWidgetItem(const QString &category, QTreeWidget *parent)
15 : QTreeWidgetItem(parent)
16 , mCategory(category)
17 , mCategoryTypeCombobox(new CategoryTypeComboBox(false))
18 {
19 treeWidget()->setItemWidget(this, CategoryType, mCategoryTypeCombobox);
20 }
21
~KDEApplicationTreeListWidgetItem()22 KDEApplicationTreeListWidgetItem::~KDEApplicationTreeListWidgetItem()
23 {
24 }
25
restoreToDefault()26 void KDEApplicationTreeListWidgetItem::restoreToDefault()
27 {
28 mCategoryTypeCombobox->restoreToDefault();
29 }
30
setType(LoggingCategory::LoggingType type)31 void KDEApplicationTreeListWidgetItem::setType(LoggingCategory::LoggingType type)
32 {
33 mCategoryTypeCombobox->setType(type);
34 }
35
setDefaultCategory(LoggingCategory::LoggingType type)36 void KDEApplicationTreeListWidgetItem::setDefaultCategory(LoggingCategory::LoggingType type)
37 {
38 mCategoryTypeCombobox->setDefaultCategories(type);
39 }
40
logName() const41 QString KDEApplicationTreeListWidgetItem::logName() const
42 {
43 return mCategory;
44 }
45
setLogName(const QString & category)46 void KDEApplicationTreeListWidgetItem::setLogName(const QString &category)
47 {
48 mCategory = category;
49 }
50
rule(bool forceSavingAllRules) const51 LoggingCategory KDEApplicationTreeListWidgetItem::rule(bool forceSavingAllRules) const
52 {
53 LoggingCategory cat;
54 if (mCategoryTypeCombobox->loggingCategoryIsNotDefault() || forceSavingAllRules) {
55 cat.enabled = false;
56 cat.categoryName = mCategory;
57 cat.loggingType = mCategoryTypeCombobox->type();
58 }
59 return cat;
60 }
61
KDEApplicationTreeListWidget(QWidget * parent)62 KDEApplicationTreeListWidget::KDEApplicationTreeListWidget(QWidget *parent)
63 : QTreeWidget(parent)
64 {
65 setColumnCount(4);
66 setRootIsDecorated(false);
67 setColumnHidden(KDEApplicationTreeListWidgetItem::LogName, true);
68 setColumnHidden(KDEApplicationTreeListWidgetItem::IdentifierName, true);
69 header()->hide();
70 }
71
~KDEApplicationTreeListWidget()72 KDEApplicationTreeListWidget::~KDEApplicationTreeListWidget()
73 {
74 }
75
searchColumns() const76 QList<int> KDEApplicationTreeListWidget::searchColumns() const
77 {
78 return {KDEApplicationTreeListWidgetItem::Description, KDEApplicationTreeListWidgetItem::LogName, KDEApplicationTreeListWidgetItem::IdentifierName};
79 }
80
selectAllDebugCategories()81 void KDEApplicationTreeListWidget::selectAllDebugCategories()
82 {
83 for (int i = 0; i < topLevelItemCount(); ++i) {
84 auto itemWidget = static_cast<KDEApplicationTreeListWidgetItem *>(topLevelItem(i));
85 if (!itemWidget->isHidden()) {
86 itemWidget->setType(LoggingCategory::Debug);
87 }
88 }
89 }
90
deSelectAllDebugCategories()91 void KDEApplicationTreeListWidget::deSelectAllDebugCategories()
92 {
93 for (int i = 0; i < topLevelItemCount(); ++i) {
94 auto itemWidget = static_cast<KDEApplicationTreeListWidgetItem *>(topLevelItem(i));
95 if (!itemWidget->isHidden()) {
96 itemWidget->setType(LoggingCategory::Info);
97 }
98 }
99 }
100
deSelectAllMessagesCategories()101 void KDEApplicationTreeListWidget::deSelectAllMessagesCategories()
102 {
103 for (int i = 0; i < topLevelItemCount(); ++i) {
104 auto itemWidget = static_cast<KDEApplicationTreeListWidgetItem *>(topLevelItem(i));
105 if (!itemWidget->isHidden()) {
106 itemWidget->setType(LoggingCategory::Off);
107 }
108 }
109 }
110
fillList(const LoggingCategory::List & list)111 void KDEApplicationTreeListWidget::fillList(const LoggingCategory::List &list)
112 {
113 addListItems(list, true);
114 }
115
generateToolTip(const LoggingCategory & cat)116 QString KDEApplicationTreeListWidget::generateToolTip(const LoggingCategory &cat)
117 {
118 QString toopTip = i18n("Category name: %1", cat.categoryName);
119 if (!cat.identifierName.isEmpty()) {
120 toopTip += QLatin1Char('\n') + i18n("Identifier: %1", cat.identifierName);
121 }
122 toopTip += QLatin1Char('\n') + i18n("Default Severity: %1", KDebugSettingsUtil::convertCategoryTypeToString(cat.defaultSeverityType));
123 return toopTip;
124 }
125
addListItems(const LoggingCategory::List & list,bool clearList)126 void KDEApplicationTreeListWidget::addListItems(const LoggingCategory::List &list, bool clearList)
127 {
128 if (clearList) {
129 clear();
130 }
131 for (const LoggingCategory &cat : list) {
132 auto item = new KDEApplicationTreeListWidgetItem(cat.categoryName, this);
133 item->setToolTip(0, generateToolTip(cat));
134 item->setText(KDEApplicationTreeListWidgetItem::Description, cat.description);
135 item->setType(cat.loggingType);
136 item->setDefaultCategory(cat.defaultSeverityType);
137 item->setText(KDEApplicationTreeListWidgetItem::LogName, cat.categoryName);
138 item->setText(KDEApplicationTreeListWidgetItem::IdentifierName, cat.identifierName);
139 }
140 resizeColumnToContents(KDEApplicationTreeListWidgetItem::Description);
141 }
142
insertCategories(const LoggingCategory::List & list)143 void KDEApplicationTreeListWidget::insertCategories(const LoggingCategory::List &list)
144 {
145 addListItems(list, false);
146 }
147
rules(bool forceSavingAllRules) const148 LoggingCategory::List KDEApplicationTreeListWidget::rules(bool forceSavingAllRules) const
149 {
150 LoggingCategory::List lst;
151 for (int i = 0; i < topLevelItemCount(); ++i) {
152 auto listWidgetItem = static_cast<KDEApplicationTreeListWidgetItem *>(topLevelItem(i));
153 const LoggingCategory cat = listWidgetItem->rule(forceSavingAllRules);
154 if (cat.isValid()) {
155 lst.append(cat);
156 }
157 }
158 return lst;
159 }
160
restoreToDefault()161 void KDEApplicationTreeListWidget::restoreToDefault()
162 {
163 for (int i = 0; i < topLevelItemCount(); ++i) {
164 auto itemWidget = static_cast<KDEApplicationTreeListWidgetItem *>(topLevelItem(i));
165 itemWidget->restoreToDefault();
166 }
167 }
168