1// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: GPL-3.0-or-later
4
5#include "aboutdialog.h"
6#include "common/common.h"
7
8#include <QGridLayout>
9#include <QLabel>
10#include <QPushButton>
11#include <QLatin1String>
12#include <QDateTime>
13#include <QDesktopServices>
14
15const QString ICON_LOGO_128PX = ":/core/images/unioncode@128.png";
16
17AboutDialog::AboutDialog(QDialog *parent)
18 : QDialog(parent)
19{
20 setupUi();
21}
22
23AboutDialog::~AboutDialog()
24{
25
26}
27
28void AboutDialog::setupUi()
29{
30 setWindowTitle(tr("About Deepin Union Code"));
31
32 QLabel *logoLabel = new QLabel;
33 logoLabel->setPixmap(QPixmap(ICON_LOGO_128PX));
34
35 QString buildDateInfo = tr("<br/>Built on %1 %2 in %3<br/>")
36 .arg(QLatin1String(__DATE__), QLatin1String(__TIME__), ProcessUtil::localPlatform());
37
38 const QString description = tr(
39 "<h3>Deepin Union Code %1</h3>"
40 "%2<br/>"
41 "Copyright 2019-%3 UnionTech Software Technology Co., Ltd. All rights reserved.<br/><br/>"
42 "This program is released under <a href=\"https://www.gnu.org/licenses/gpl-3.0.html\">GPL-3.0-or-later</a>; \
43 we hope that the scheme will be useful, \
44 but we do not guarantee that it will be of economic value or fit for a particular purpose. \
45 For more information, see the GNU General Public License. <br/>\
46 Thanks to all the <a href=\"opensourcesoftware\">open source software</a> used."
47 "<br/>")
48 .arg(version(),
49 buildDateInfo,
50 QString::number(QDateTime::currentDateTime().date().year()));
51
52 QLabel *copyRightLabel = new QLabel(description);
53 copyRightLabel->setWordWrap(true);
54 copyRightLabel->setTextInteractionFlags(Qt::TextBrowserInteraction);
55 connect(copyRightLabel, &QLabel::linkActivated, this, &AboutDialog::handleLinkActivated);
56
57 QHBoxLayout *layoutButtons = new QHBoxLayout();
58 QPushButton *closeButton = new QPushButton(QPushButton::tr("Close"));
59 connect(closeButton , &QPushButton::clicked, this, &QDialog::reject);
60 layoutButtons->addStretch();
61 layoutButtons->addWidget(closeButton);
62
63 auto vLayout = new QVBoxLayout(this);
64 auto detailLayout = new QGridLayout(this);
65 detailLayout->setSizeConstraint(QLayout::SetFixedSize);
66 detailLayout->addWidget(logoLabel , 1, 0, 1, 1);
67 detailLayout->addWidget(copyRightLabel, 0, 4, 4, 5);
68 detailLayout->addLayout(layoutButtons, 4, 4, 1, 5);
69 vLayout->addLayout(detailLayout);
70}
71
72void AboutDialog::handleLinkActivated(const QString& link)
73{
74 if (link == "opensourcesoftware" && !bExpand) {
75 QFile file("/usr/share/doc/deepin-unioncode/copyright");
76 if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
77 QTextEdit* textEdit = new QTextEdit(this);
78 layout()->addWidget(textEdit);
79
80 QTextStream stream(&file);
81 QString fileContent = stream.readAll();
82 textEdit->setPlainText(fileContent);
83 setFixedHeight(height() * 2);
84 bExpand = true;
85 } else {
86 QMessageBox::critical(this, tr("Error"), tr("Failed to open the file."));
87 }
88 } else {
89 QDesktopServices::openUrl(QUrl(link));
90 }
91}
92