File indexing completed on 2024-12-01 03:44:33

0001 /*
0002     This file is part of the KDE libraries
0003     SPDX-FileCopyrightText: 2007 Urs Wolfer <uwolfer at kde.org>
0004     SPDX-FileCopyrightText: 2008 Friedrich W. H. Kossebau <kossebau@kde.org>
0005     SPDX-FileCopyrightText: 2010 Teo Mrnjavac <teo@kde.org>
0006 
0007     Parts of this class have been take from the KAboutApplication class, which was
0008     SPDX-FileCopyrightText: 2000 Waldo Bastian <bastian@kde.org>
0009     SPDX-FileCopyrightText: 2000 Espen Sand <espen@kde.org>
0010 
0011     SPDX-License-Identifier: LGPL-2.0-only
0012 */
0013 
0014 #include "klicensedialog_p.h"
0015 
0016 // KF
0017 #include <KAboutData>
0018 #include <KLocalizedString>
0019 // Qt
0020 #include <QDialogButtonBox>
0021 #include <QFontDatabase>
0022 #include <QScrollBar>
0023 #include <QStyle>
0024 #include <QTextBrowser>
0025 #include <QVBoxLayout>
0026 
0027 KLicenseDialog::KLicenseDialog(const KAboutLicense &license, QWidget *parent)
0028     : QDialog(parent)
0029 {
0030     setAttribute(Qt::WA_DeleteOnClose);
0031     QVBoxLayout *layout = new QVBoxLayout(this);
0032 
0033     setWindowTitle(i18nc("@title:window", "License Agreement"));
0034 
0035     const QFont font = QFontDatabase::systemFont(QFontDatabase::FixedFont);
0036 
0037     const QString licenseText = license.text();
0038 
0039     QTextBrowser *licenseBrowser = new QTextBrowser(this);
0040     licenseBrowser->setFont(font);
0041     licenseBrowser->setLineWrapMode(QTextEdit::NoWrap);
0042     licenseBrowser->setText(licenseText);
0043     layout->addWidget(licenseBrowser);
0044 
0045     QDialogButtonBox *buttonBox = new QDialogButtonBox(this);
0046     buttonBox->setStandardButtons(QDialogButtonBox::Close);
0047     connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
0048     connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
0049     layout->addWidget(buttonBox);
0050 
0051     // try to set up the dialog such that the full width of the
0052     // document is visible without horizontal scroll-bars being required
0053     auto *style = this->style();
0054     const int leftMarginHint = style->pixelMetric(QStyle::PM_LayoutLeftMargin);
0055     const int rightMarginHint = style->pixelMetric(QStyle::PM_LayoutRightMargin);
0056     const qreal idealWidth = licenseBrowser->document()->idealWidth() + leftMarginHint + rightMarginHint + licenseBrowser->verticalScrollBar()->width() * 2;
0057 
0058     // try to allow enough height for a reasonable number of lines to be shown
0059     QFontMetrics metrics(font);
0060     const int idealHeight = metrics.height() * 30;
0061 
0062     resize(sizeHint().expandedTo(QSize(qRound(idealWidth), idealHeight)));
0063 }
0064 
0065 KLicenseDialog::~KLicenseDialog() = default;
0066 
0067 #include "moc_klicensedialog_p.cpp"