File indexing completed on 2024-04-14 05:39:23

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"