2022-06-19 16:17:38 +08:00
// SPDX-FileCopyrightText: 2022 Gary Wang <wzc782970009@gmail.com>
//
// SPDX-License-Identifier: MIT
2020-09-28 20:10:33 +08:00
# include "aboutdialog.h"
# include <QAbstractButton>
# include <QDialogButtonBox>
# include <QTextBrowser>
# include <QTabWidget>
# include <QVBoxLayout>
# include <QApplication>
# include <QLabel>
# include <QPushButton>
2020-12-25 13:36:34 +08:00
# include <QFile>
2020-09-28 20:10:33 +08:00
AboutDialog : : AboutDialog ( QWidget * parent )
: QDialog ( parent )
, m_tabWidget ( new QTabWidget )
, m_buttonBox ( new QDialogButtonBox )
, m_helpTextEdit ( new QTextBrowser )
, m_aboutTextEdit ( new QTextBrowser )
2020-10-05 20:43:30 +08:00
, m_specialThanksTextEdit ( new QTextBrowser )
2020-09-28 20:10:33 +08:00
, m_licenseTextEdit ( new QTextBrowser )
2020-10-05 20:43:30 +08:00
, m_3rdPartyLibsTextEdit ( new QTextBrowser )
2020-09-28 20:10:33 +08:00
{
this - > setWindowTitle ( tr ( " About " ) ) ;
2020-12-25 13:36:34 +08:00
const QStringList helpStr {
2020-10-05 20:43:30 +08:00
QStringLiteral ( " <p>%1</p> " ) . arg ( tr ( " Launch application with image file path as argument to load the file. " ) ) ,
QStringLiteral ( " <p>%1</p> " ) . arg ( tr ( " Drag and drop image file onto the window is also supported. " ) ) ,
2021-04-17 00:25:19 +08:00
QStringLiteral ( " <p>%1</p> " ) . arg ( tr ( " None of the operations in this application will alter the pictures on disk. " ) ) ,
2020-10-05 20:43:30 +08:00
QStringLiteral ( " <p>%1</p> " ) . arg ( tr ( " Context menu option explanation: " ) ) ,
QStringLiteral ( " <ul> " ) ,
2021-04-17 00:25:19 +08:00
// blumia: Chain two arg() here since it seems lupdate will remove one of them if we use
// the old `arg(QCoreApp::translate(), tr())` way, but it's worth to mention
// `arg(QCoreApp::translate(), this->tr())` works, but lupdate will complain about the usage.
QStringLiteral ( " <li><b>%1</b>:<br/>%2</li> " )
. arg ( QCoreApplication : : translate ( " MainWindow " , " Stay on top " ) )
. arg ( tr ( " Make window stay on top of all other windows. " ) ) ,
QStringLiteral ( " <li><b>%1</b>:<br/>%2</li> " )
. arg ( QCoreApplication : : translate ( " MainWindow " , " Protected mode " ) )
. arg ( tr ( " Avoid close window accidentally. (eg. by double clicking the window) " ) ) ,
2023-10-15 17:12:46 +08:00
QStringLiteral ( " <li><b>%1</b>:<br/>%2</li> " )
2023-10-15 17:42:46 +08:00
. arg ( QCoreApplication : : translate ( " MainWindow " , " Keep transformation " , " The 'transformation' means the flip/rotation status that currently applied to the image view " ) )
2023-10-15 17:12:46 +08:00
. arg ( tr ( " Avoid resetting the zoom/rotation/flip state that was applied to the image view when switching between images. " ) ) ,
2020-10-05 20:43:30 +08:00
QStringLiteral ( " </ul> " )
2020-09-28 20:10:33 +08:00
} ;
2020-12-25 13:36:34 +08:00
const QStringList aboutStr {
2020-09-28 20:10:33 +08:00
QStringLiteral ( " <center><img width='128' height='128' src=':/icons/app-icon.svg'/><br/> " ) ,
qApp - > applicationDisplayName ( ) ,
2024-09-17 19:28:05 +08:00
( QStringLiteral ( " <br/> " ) + tr ( " Version: %1 " ) . arg (
2020-09-29 09:45:07 +08:00
# ifdef GIT_DESCRIBE_VERSION_STRING
2024-09-17 19:28:05 +08:00
GIT_DESCRIBE_VERSION_STRING
# else
qApp - > applicationVersion ( )
2020-09-29 09:45:07 +08:00
# endif // GIT_DESCRIBE_VERSION_STRING
2024-09-17 19:28:05 +08:00
) ) ,
2020-10-05 20:43:30 +08:00
QStringLiteral ( " <hr/> " ) ,
2022-02-09 00:12:37 +08:00
tr ( " Copyright (c) %1 %2 " , " %1 is year, %2 is the name of copyright holder(s) " )
2024-02-16 11:58:32 +08:00
. arg ( QStringLiteral ( " 2024 " ) , QStringLiteral ( " <a href='https://github.com/BLumia'>@BLumia</a> " ) ) ,
2020-10-05 20:43:30 +08:00
QStringLiteral ( " <br/> " ) ,
tr ( " Logo designed by %1 " ) . arg ( QStringLiteral ( " <a href='https://github.com/Lovelyblack'>@Lovelyblack</a> " ) ) ,
QStringLiteral ( " <hr/> " ) ,
2020-09-28 20:10:33 +08:00
tr ( " Built with Qt %1 (%2) " ) . arg ( QT_VERSION_STR , QSysInfo : : buildCpuArchitecture ( ) ) ,
QStringLiteral ( " <br/><a href='%1'>%2</a> " ) . arg ( " https://github.com/BLumia/pineapple-pictures " , tr ( " Source code " ) ) ,
2020-10-05 20:43:30 +08:00
QStringLiteral ( " </center> " )
2020-09-28 20:10:33 +08:00
} ;
2020-12-25 13:36:34 +08:00
QFile translaterHtml ( " :/plain/translators.html " ) ;
bool canOpenFile = translaterHtml . open ( QIODevice : : ReadOnly ) ;
2024-07-06 14:09:00 +08:00
const QByteArray & translatorList = canOpenFile ? translaterHtml . readAll ( ) : QByteArrayLiteral ( " " ) ;
2020-12-25 13:36:34 +08:00
const QStringList specialThanksStr {
2020-10-05 20:43:30 +08:00
QStringLiteral ( " <h1 align='center'>%1</h1><a href='%2'>%3</a><p>%4</p> " ) . arg (
tr ( " Contributors " ) ,
QStringLiteral ( " https://github.com/BLumia/pineapple-pictures/graphs/contributors " ) ,
tr ( " List of contributors on GitHub " ) ,
tr ( " Thanks to all people who contributed to this project. " )
) ,
2020-12-25 13:36:34 +08:00
QStringLiteral ( " <h1 align='center'>%1</h1><p>%2</p>%3 " ) . arg (
2020-10-05 20:43:30 +08:00
tr ( " Translators " ) ,
2020-12-25 13:36:34 +08:00
tr ( " I would like to thank the following people who volunteered to translate this application. " ) ,
translatorList
)
2020-10-05 20:43:30 +08:00
} ;
2020-09-28 20:10:33 +08:00
2020-12-25 13:36:34 +08:00
const QStringList licenseStr {
2020-09-28 20:10:33 +08:00
QStringLiteral ( " <h1 align='center'><b>%1</b></h1> " ) . arg ( tr ( " Your Rights " ) ) ,
2020-10-05 20:43:30 +08:00
QStringLiteral ( " <p>%1</p><p>%2</p><ul><li>%3</li><li>%4</li><li>%5</li><li>%6</li></ul> " ) . arg (
tr ( " %1 is released under the MIT License. " ) , // %1
tr ( " This license grants people a number of freedoms: " ) , // %2
tr ( " You are free to use %1, for any purpose " ) , // %3
tr ( " You are free to distribute %1 " ) , // %4
tr ( " You can study how %1 works and change it " ) , // %5
tr ( " You can distribute changed versions of %1 " ) // %6
) . arg ( QStringLiteral ( " <i>%1</i> " ) ) ,
QStringLiteral ( " <p>%1</p> " ) . arg ( tr ( " The MIT license guarantees you this freedom. Nobody is ever permitted to take it away. " ) ) ,
2020-09-28 20:10:33 +08:00
QStringLiteral ( " <hr/><pre>%2</pre> " )
} ;
2020-12-25 13:36:34 +08:00
const QString mitLicense ( QStringLiteral ( R " (Expat/MIT License
2020-09-28 20:10:33 +08:00
2024-02-16 11:58:32 +08:00
Copyright ( c ) 2024 BLumia
2020-09-28 20:10:33 +08:00
Permission is hereby granted , free of charge , to any person obtaining a copy
of this software and associated documentation files ( the " Software " ) , to deal
in the Software without restriction , including without limitation the rights
to use , copy , modify , merge , publish , distribute , sublicense , and / or sell
copies of the Software , and to permit persons to whom the Software is
furnished to do so , subject to the following conditions :
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software .
THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND , EXPRESS OR
IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY ,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT . IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER
LIABILITY , WHETHER IN AN ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM ,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE .
) " ));
2020-12-25 13:36:34 +08:00
const QStringList thirdPartyLibsStr {
2020-10-05 20:43:30 +08:00
QStringLiteral ( " <h1 align='center'><b>%1</b></h1> " ) . arg ( tr ( " Third-party Libraries used by %1 " ) ) ,
2020-12-25 13:36:34 +08:00
tr ( " %1 is built on the following free software libraries: " , " Free as in freedom " ) ,
2020-10-05 20:43:30 +08:00
QStringLiteral ( " <ul> " ) ,
2020-11-15 19:53:47 +08:00
# ifdef HAVE_EXIV2_VERSION
QStringLiteral ( " <li><a href='%1'>%2</a>: %3</li> " ) . arg ( " https://www.exiv2.org/ " , " Exiv2 " , " GPLv2 " ) ,
# endif // EXIV2_VERSION
2020-10-05 20:43:30 +08:00
QStringLiteral ( " <li><a href='%1'>%2</a>: %3</li> " ) . arg ( " https://www.qt.io/ " , " Qt " , " GPLv2 + GPLv3 + LGPLv2.1 + LGPLv3 " ) ,
QStringLiteral ( " </ul> " )
} ;
2020-09-28 20:10:33 +08:00
m_helpTextEdit - > setText ( helpStr . join ( ' \n ' ) ) ;
m_aboutTextEdit - > setText ( aboutStr . join ( ' \n ' ) ) ;
m_aboutTextEdit - > setOpenExternalLinks ( true ) ;
2020-10-05 20:43:30 +08:00
m_specialThanksTextEdit - > setText ( specialThanksStr . join ( ' \n ' ) ) ;
m_specialThanksTextEdit - > setOpenExternalLinks ( true ) ;
2020-09-28 20:10:33 +08:00
m_licenseTextEdit - > setText ( licenseStr . join ( ' \n ' ) . arg ( qApp - > applicationDisplayName ( ) , mitLicense ) ) ;
2021-01-10 14:57:01 +08:00
m_3rdPartyLibsTextEdit - > setText ( thirdPartyLibsStr . join ( ' \n ' ) . arg ( QStringLiteral ( " <i>%1</i> " ) . arg ( qApp - > applicationDisplayName ( ) ) ) ) ;
2020-10-05 20:43:30 +08:00
m_3rdPartyLibsTextEdit - > setOpenExternalLinks ( true ) ;
2020-09-28 20:10:33 +08:00
m_tabWidget - > addTab ( m_helpTextEdit , tr ( " &Help " ) ) ;
m_tabWidget - > addTab ( m_aboutTextEdit , tr ( " &About " ) ) ;
2020-10-05 20:43:30 +08:00
m_tabWidget - > addTab ( m_specialThanksTextEdit , tr ( " &Special Thanks " ) ) ;
2020-09-28 20:10:33 +08:00
m_tabWidget - > addTab ( m_licenseTextEdit , tr ( " &License " ) ) ;
2020-10-05 20:43:30 +08:00
m_tabWidget - > addTab ( m_3rdPartyLibsTextEdit , tr ( " &Third-party Libraries " ) ) ;
2020-09-28 20:10:33 +08:00
m_buttonBox - > setStandardButtons ( QDialogButtonBox : : Close ) ;
connect ( m_buttonBox , QOverload < QAbstractButton * > : : of ( & QDialogButtonBox : : clicked ) , this , [ this ] ( ) {
this - > close ( ) ;
} ) ;
2020-10-08 22:24:54 +08:00
setLayout ( new QVBoxLayout ) ;
2020-09-28 20:10:33 +08:00
2020-10-08 22:24:54 +08:00
layout ( ) - > addWidget ( m_tabWidget ) ;
layout ( ) - > addWidget ( m_buttonBox ) ;
2020-09-28 20:10:33 +08:00
2020-10-08 22:24:54 +08:00
setMinimumSize ( 361 , 161 ) ; // not sure why it complain "Unable to set geometry"
2020-09-28 20:10:33 +08:00
setWindowFlag ( Qt : : WindowContextHelpButtonHint , false ) ;
}
AboutDialog : : ~ AboutDialog ( )
{
}
2020-10-08 22:24:54 +08:00
QSize AboutDialog : : sizeHint ( ) const
{
return QSize ( 520 , 350 ) ;
}