diff options
author | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2022-01-12 13:58:03 +0200 |
---|---|---|
committer | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2022-01-18 09:21:00 +0200 |
commit | 91d4828ed3c18586ed3c3ad2fc083adb0faed676 (patch) | |
tree | a443b4a1bcd231cf29ccbf48288bdd560364aade /src/sdk | |
parent | df604d105d2cdf28bc9fbd2aa63ed5cef9aaeca2 (diff) |
Add "about application" menu and dialog on macOS
Also enable linking qtimageformats as a static plugin on macOS,
it is required to read the .icns file to be shown on the dialog.
Task-number: QTIFW-2453
Change-Id: Ib776635167a4c90ffa20a91ecc447d2d73f5aeb9
Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'src/sdk')
-rw-r--r-- | src/sdk/aboutapplicationdialog.cpp | 100 | ||||
-rw-r--r-- | src/sdk/aboutapplicationdialog.h | 48 | ||||
-rw-r--r-- | src/sdk/sdk.pro | 11 | ||||
-rw-r--r-- | src/sdk/tabcontroller.cpp | 11 | ||||
-rw-r--r-- | src/sdk/tabcontroller.h | 3 |
5 files changed, 167 insertions, 6 deletions
diff --git a/src/sdk/aboutapplicationdialog.cpp b/src/sdk/aboutapplicationdialog.cpp new file mode 100644 index 000000000..dc47c956e --- /dev/null +++ b/src/sdk/aboutapplicationdialog.cpp @@ -0,0 +1,100 @@ +/************************************************************************** +** +** Copyright (C) 2022 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Installer Framework. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +**************************************************************************/ + +#include "aboutapplicationdialog.h" + +#include <packagemanagercore.h> +#include <settings.h> + +#include <QGridLayout> +#include <QLabel> +#include <QDialogButtonBox> +#include <QPixmap> + +#define QUOTE_(x) #x +#define QUOTE(x) QUOTE_(x) + +#define ABOUT_IFW_VERSION "Built with Qt Installer Framework " QUOTE(IFW_VERSION_STR) +#define ABOUT_QT_VERSION "Based on Qt " QT_VERSION_STR +#define ABOUT_BUILD_DATE "Built on " __DATE__ +#define ABOUT_BUILD_YEAR (__DATE__ + 7) +#define ABOUT_SHA "From revision " QUOTE(_GIT_SHA1_) + +AboutApplicationDialog::AboutApplicationDialog(QInstaller::PackageManagerCore *core, QWidget *parent) + : QDialog(parent) +{ + setObjectName(QLatin1String("AboutApplicationDialog")); + + const QString productName = core->value(QLatin1String("ProductName")); + if (core->isInstaller()) + setWindowTitle(tr("About %1 installer").arg(productName)); + else + setWindowTitle(tr("About %1 Maintenance Tool").arg(productName)); + + QGridLayout *layout = new QGridLayout(this); + layout->setSizeConstraint(QLayout::SetFixedSize); + + QLabel *logoLabel = new QLabel; +#ifdef Q_OS_MACOS + QPixmap pixmap; + if (pixmap.load(core->settings().installerApplicationIcon())) + logoLabel->setPixmap(pixmap); +#else + logoLabel->setPixmap(core->settings().installerWindowIcon()); +#endif + const QString description = QString::fromLatin1( + "<h3>%1</h3>" + "%2<br/>" + "<br/>" + "%3<br/>" + "<br/>" + "%4<br/>" + "<br/>" + "Copyright %5 The Qt Company Ltd. All rights reserved.<br/>" + "<br/>" + "The program is provided AS IS with NO WARRANTY OF ANY KIND, " + "INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A " + "PARTICULAR PURPOSE.<br/>") + .arg(QLatin1String(ABOUT_IFW_VERSION), + QLatin1String(ABOUT_QT_VERSION), + QLatin1String(ABOUT_BUILD_DATE), + QLatin1String(ABOUT_SHA), + QLatin1String(ABOUT_BUILD_YEAR) + ); + + QLabel *aboutLabel = new QLabel(description); + aboutLabel->setWordWrap(true); + aboutLabel->setTextInteractionFlags(Qt::TextBrowserInteraction); + + QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Close); + connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); + + layout->addWidget(logoLabel , 0, 0, 1, 1); + layout->addWidget(aboutLabel, 0, 1, 4, 4); + layout->addWidget(buttonBox, 4, 0, 1, 5); +} diff --git a/src/sdk/aboutapplicationdialog.h b/src/sdk/aboutapplicationdialog.h new file mode 100644 index 000000000..5f05aa6d9 --- /dev/null +++ b/src/sdk/aboutapplicationdialog.h @@ -0,0 +1,48 @@ +/************************************************************************** +** +** Copyright (C) 2022 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Installer Framework. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +**************************************************************************/ + +#ifndef ABOUTAPPLICATIONDIALOG_H +#define ABOUTAPPLICATIONDIALOG_H + +#include <QDialog> + +namespace QInstaller { + class PackageManagerCore; +} + +class AboutApplicationDialog : public QDialog +{ + Q_OBJECT + +public: + explicit AboutApplicationDialog(QInstaller::PackageManagerCore *core, + QWidget *parent = nullptr); + ~AboutApplicationDialog() = default; +}; + +#endif // ABOUTAPPLICATIONDIALOG_H diff --git a/src/sdk/sdk.pro b/src/sdk/sdk.pro index d952d3462..cc20244fd 100644 --- a/src/sdk/sdk.pro +++ b/src/sdk/sdk.pro @@ -18,10 +18,11 @@ QT += network qml xml widgets } CONFIG(static, static|shared) { - # prevent qmake from automatically linking in imageformats, bearer, qmltooling plugins - QTPLUGIN.imageformats = - + # prevent qmake from automatically linking in bearer and qmltooling plugins QTPLUGIN.bearer = - QTPLUGIN.qmltooling = - + # ICNS support required on macOS, prevent linking on other platforms + !macos:QTPLUGIN.imageformats = - } DESTDIR = $$IFW_APP_PATH @@ -100,7 +101,8 @@ HEADERS += \ settingsdialog.h \ sdkapp.h \ commandlineinterface.h \ - installerbase.h + installerbase.h \ + aboutapplicationdialog.h SOURCES = \ main.cpp \ @@ -108,7 +110,8 @@ SOURCES = \ tabcontroller.cpp \ installerbasecommons.cpp \ settingsdialog.cpp \ - commandlineinterface.cpp + commandlineinterface.cpp \ + aboutapplicationdialog.cpp win32 { # Use our own manifest file diff --git a/src/sdk/tabcontroller.cpp b/src/sdk/tabcontroller.cpp index 3bcb3f11a..56ab524aa 100644 --- a/src/sdk/tabcontroller.cpp +++ b/src/sdk/tabcontroller.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2021 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -29,6 +29,7 @@ #include "installerbasecommons.h" #include "settingsdialog.h" +#include "aboutapplicationdialog.h" #include "globals.h" #include <packagemanagercore.h> @@ -118,6 +119,8 @@ int TabController::init() connect(d->m_gui, &QWizard::currentIdChanged, this, &TabController::onCurrentIdChanged); connect(d->m_gui, &PackageManagerGui::settingsButtonClicked, this, &TabController::onSettingsButtonClicked); + connect(d->m_gui, &PackageManagerGui::aboutApplicationClicked, + this, &TabController::onAboutApplicationClicked); } IntroductionPage *page = @@ -182,6 +185,12 @@ void TabController::onSettingsButtonClicked() } } +void TabController::onAboutApplicationClicked() +{ + AboutApplicationDialog dialog(d->m_core); + dialog.exec(); +} + void TabController::onCurrentIdChanged(int newId) { if (d->m_gui) { diff --git a/src/sdk/tabcontroller.h b/src/sdk/tabcontroller.h index 5fc63aff3..a92e724b4 100644 --- a/src/sdk/tabcontroller.h +++ b/src/sdk/tabcontroller.h @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -60,6 +60,7 @@ public Q_SLOTS: private Q_SLOTS: void restartWizard(); void onSettingsButtonClicked(); + void onAboutApplicationClicked(); void onCurrentIdChanged(int newId); void onNetworkSettingsChanged(const QInstaller::Settings &settings); |