File indexing completed on 2024-04-28 09:41:39
0001 /* 0002 SPDX-FileCopyrightText: 2007 Nicolas Ternisien <nicolas.ternisien@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "detailDialog.h" 0008 0009 // Qt includes 0010 0011 #include <KGuiItem> 0012 #include <KLocalizedString> 0013 #include <KStandardGuiItem> 0014 #include <QIcon> 0015 0016 #include "logLine.h" 0017 #include "logViewWidget.h" 0018 #include "logViewWidgetItem.h" 0019 0020 #include "ksystemlog_debug.h" 0021 0022 DetailDialog::DetailDialog(QWidget *parent) 0023 : QDialog(parent) 0024 { 0025 setupUi(this); 0026 0027 previous->setText(i18n("&Previous")); 0028 previous->setIcon(QIcon::fromTheme(QStringLiteral("arrow-up"))); 0029 connect(previous, &QAbstractButton::clicked, this, &DetailDialog::previousItem); 0030 0031 next->setText(i18n("&Next")); 0032 next->setIcon(QIcon::fromTheme(QStringLiteral("arrow-down"))); 0033 connect(next, &QAbstractButton::clicked, this, &DetailDialog::nextItem); 0034 0035 KGuiItem::assign(closeButton, KStandardGuiItem::close()); 0036 connect(closeButton, &QAbstractButton::clicked, this, &QWidget::close); 0037 } 0038 0039 DetailDialog::~DetailDialog() 0040 { 0041 } 0042 0043 void DetailDialog::selectionChanged(LogViewWidget *logViewWidget) 0044 { 0045 mLogViewWidget = logViewWidget; 0046 0047 updateDetails(); 0048 } 0049 0050 // TODO Try to find a method that reload (an resize) correctly the content of the detail dialog 0051 void DetailDialog::updateDetails() 0052 { 0053 // qCDebug(KSYSTEMLOG) << "Updating Detail Dialog..."; 0054 0055 // Get the current-last item selected 0056 LogViewWidgetItem *item = mLogViewWidget->lastSelectedItem(); 0057 if (!item) { 0058 qCDebug(KSYSTEMLOG) << "No item found."; 0059 return; 0060 } 0061 0062 icon->setPixmap(item->logLine()->logLevel()->icon().pixmap(style()->pixelMetric(QStyle::PM_LargeIconSize))); 0063 0064 header->setText(item->logLine()->formattedText()); 0065 0066 message->setText(item->logLine()->logItems().last()); 0067 0068 if (!mLogViewWidget->topLevelItem(mLogViewWidget->indexOfTopLevelItem(item) - 1)) { 0069 previous->setEnabled(false); 0070 } else { 0071 previous->setEnabled(true); 0072 } 0073 0074 if (!mLogViewWidget->topLevelItem(mLogViewWidget->indexOfTopLevelItem(item) + 1)) { 0075 next->setEnabled(false); 0076 } else { 0077 next->setEnabled(true); 0078 } 0079 0080 /* 0081 header->adjustSize(); 0082 adjustSize(); 0083 */ 0084 } 0085 0086 void DetailDialog::moveToItem(int direction) 0087 { 0088 if (direction < 0) { 0089 qCDebug(KSYSTEMLOG) << "Go to previous item..."; 0090 } else { 0091 qCDebug(KSYSTEMLOG) << "Go to next item..."; 0092 } 0093 0094 // Get the current-last item selected 0095 LogViewWidgetItem *item = mLogViewWidget->lastSelectedItem(); 0096 if (!item) { 0097 qCDebug(KSYSTEMLOG) << "No item found."; 0098 return; 0099 } 0100 0101 QTreeWidgetItem *destinationItem = mLogViewWidget->topLevelItem(mLogViewWidget->indexOfTopLevelItem(item) + direction); 0102 if (!destinationItem) { 0103 if (direction < 0) { 0104 qCDebug(KSYSTEMLOG) << "No previous item found."; 0105 } else { 0106 qCDebug(KSYSTEMLOG) << "No next item found."; 0107 } 0108 return; 0109 } 0110 0111 item->setSelected(false); 0112 destinationItem->setSelected(true); 0113 mLogViewWidget->scrollToItem(destinationItem); 0114 0115 updateDetails(); 0116 } 0117 0118 void DetailDialog::previousItem() 0119 { 0120 moveToItem(-1); 0121 } 0122 0123 void DetailDialog::nextItem() 0124 { 0125 moveToItem(1); 0126 } 0127 0128 #include "moc_detailDialog.cpp"