File indexing completed on 2024-05-05 17:39:54

0001 /*
0002  *  KSysGuard, the KDE System Guard
0003  *
0004  *  SPDX-FileCopyrightText: 2022 Eugene Popov <popov895@ukr.net>
0005  *
0006  *  SPDX-License-Identifier: LGPL-2.0-or-later
0007  */
0008 
0009 #include "GeneralTab.h"
0010 
0011 #include <QGraphicsOpacityEffect>
0012 #include <QHeaderView>
0013 #include <QLabel>
0014 #include <QLayout>
0015 #include <QTreeWidget>
0016 
0017 #include <KLocalizedString>
0018 
0019 GeneralTab::GeneralTab(QWidget *parent)
0020     : QWidget(parent)
0021 {
0022     m_dataTreeWidget = new QTreeWidget;
0023     m_dataTreeWidget->setAlternatingRowColors(true);
0024     m_dataTreeWidget->setColumnCount(2);
0025     m_dataTreeWidget->setHeaderHidden(true);
0026     m_dataTreeWidget->setRootIsDecorated(false);
0027     m_dataTreeWidget->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
0028     m_dataTreeWidget->header()->setStretchLastSection(true);
0029 
0030     QVBoxLayout *rootLayout = new QVBoxLayout;
0031     rootLayout->addWidget(m_dataTreeWidget);
0032     setLayout(rootLayout);
0033 
0034     m_placeholderLabel = new QLabel;
0035     m_placeholderLabel->setAlignment(Qt::AlignCenter);
0036     m_placeholderLabel->setMargin(20);
0037     m_placeholderLabel->setTextInteractionFlags(Qt::NoTextInteraction);
0038     m_placeholderLabel->setWordWrap(true);
0039     m_placeholderLabel->setText(i18nc("@info:status", "No data to display"));
0040     // To match the size of a level 2 Heading/KTitleWidget
0041     QFont placeholderFont = m_placeholderLabel->font();
0042     placeholderFont.setPointSize(qRound(placeholderFont.pointSize() * 1.3));
0043     m_placeholderLabel->setFont(placeholderFont);
0044     // Match opacity of QML placeholder label component
0045     QGraphicsOpacityEffect *opacityEffect = new QGraphicsOpacityEffect(m_placeholderLabel);
0046     opacityEffect->setOpacity(0.5);
0047     m_placeholderLabel->setGraphicsEffect(opacityEffect);
0048 
0049     QVBoxLayout *placeholderLayout = new QVBoxLayout;
0050     placeholderLayout->addWidget(m_placeholderLabel);
0051     m_dataTreeWidget->setLayout(placeholderLayout);
0052 }
0053 
0054 void GeneralTab::setData(const QVariantMap &data)
0055 {
0056     m_dataTreeWidget->clear();
0057 
0058     QList<QTreeWidgetItem*> items;
0059     for (QVariantMap::const_iterator i = data.cbegin(); i != data.cend(); ++i) {
0060         items << new QTreeWidgetItem({ i.key(), i.value().toString() });
0061     }
0062 
0063     if (items.isEmpty()) {
0064         m_placeholderLabel->show();
0065     } else {
0066         m_placeholderLabel->hide();
0067         m_dataTreeWidget->addTopLevelItems(items);
0068     }
0069 }