From 1f62d4666102d8efd4d8f3ba58a1037456a3bcfb Mon Sep 17 00:00:00 2001 From: Chris Hennes Date: Tue, 16 Mar 2021 12:38:49 -0500 Subject: [PATCH] Minor refactoring and cleanup of the About window Removes old Qt code, restores the conditional inclusion of the 3Dconnexion license information, shortens the displayed hash, and links the hash to its repo. --- src/Doc/LICENSE.html | 6 +- src/Gui/AboutApplication.ui | 2 +- src/Gui/Splashscreen.cpp | 294 ++++++++---------------------------- src/Gui/Splashscreen.h | 1 + 4 files changed, 69 insertions(+), 234 deletions(-) diff --git a/src/Doc/LICENSE.html b/src/Doc/LICENSE.html index 96653865d0..2dab52fd4e 100644 --- a/src/Doc/LICENSE.html +++ b/src/Doc/LICENSE.html @@ -575,7 +575,9 @@ DAMAGES.

END OF TERMS AND CONDITIONS

-

3D Mouse Support

-

Development tools and related technology provided under license from 3Dconnexion.(c) 1992 - 2012 3Dconnexion. All rights reserved.

+
+ + + diff --git a/src/Gui/AboutApplication.ui b/src/Gui/AboutApplication.ui index 18294a5ab2..7ab150d186 100644 --- a/src/Gui/AboutApplication.ui +++ b/src/Gui/AboutApplication.ui @@ -146,7 +146,7 @@ 6 - + <html><head/><body><p><span style=" font-family: MS Shell Dlg 2; font-weight:600;">Unknown</span></p></body></html> diff --git a/src/Gui/Splashscreen.cpp b/src/Gui/Splashscreen.cpp index 80ba2fae7a..02adf81563 100644 --- a/src/Gui/Splashscreen.cpp +++ b/src/Gui/Splashscreen.cpp @@ -40,13 +40,7 @@ # include #endif -#if QT_VERSION < 0x050000 -# include -#endif - -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) -# include -#endif +#include #include #include @@ -143,16 +137,10 @@ public: return; } -#if QT_VERSION < 0x050000 - const QGLContext* ctx = QGLContext::currentContext(); - if (!ctx) -#endif - { - splash->showMessage(msg.replace(QLatin1String("\n"), QString()), alignment, textColor); - QMutex mutex; - QMutexLocker ml(&mutex); - QWaitCondition().wait(&mutex, 50); - } + splash->showMessage(msg.replace(QLatin1String("\n"), QString()), alignment, textColor); + QMutex mutex; + QMutexLocker ml(&mutex); + QWaitCondition().wait(&mutex, 50); } private: @@ -239,11 +227,7 @@ AboutDialog::AboutDialog(bool showLic, QWidget* parent) setModal(true); ui->setupUi(this); layout()->setSizeConstraint(QLayout::SetFixedSize); -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) QRect rect = QApplication::primaryScreen()->availableGeometry(); -#else - QRect rect = QApplication::desktop()->availableGeometry(); -#endif QPixmap image = getMainWindow()->splashImage(); // Make sure the image is not too big @@ -258,23 +242,6 @@ AboutDialog::AboutDialog(bool showLic, QWidget* parent) image = image.scaled(width, height); } ui->labelSplashPicture->setPixmap(image); -// if (showLic) { // currently disabled. Additional license blocks are always shown. - QString info(QLatin1String("SUCH DAMAGES.
")); - // any additional piece of text to be added after the main license text goes below. - // Please set title in

tags, license text in

tags - // and add an


tag at the end to nicely separate license blocks -#ifdef _USE_3DCONNEXION_SDK - info += QString::fromLatin1( - "

3D Mouse Support

" - "

Development tools and related technology provided under license from 3Dconnexion." - "(c) 1992 - 2012 3Dconnexion. All rights reserved

" - "
" - ); -#endif - QString lictext = ui->textBrowserLicense->toHtml(); - lictext.replace(QString::fromLatin1("SUCH DAMAGES.
"),info); - ui->textBrowserLicense->setHtml(lictext); -// } ui->tabWidget->setCurrentIndex(0); // always start on the About tab setupLabels(); @@ -294,174 +261,6 @@ AboutDialog::~AboutDialog() delete ui; } -class SystemInfo { -public: -static QString getOperatingSystem() -{ -#if QT_VERSION >= 0x050400 - return QSysInfo::prettyProductName(); - -#else // < 0x050400 - -#if defined (Q_OS_WIN32) - switch(QSysInfo::windowsVersion()) - { - case QSysInfo::WV_NT: - return QString::fromLatin1("Windows NT"); - case QSysInfo::WV_2000: - return QString::fromLatin1("Windows 2000"); - case QSysInfo::WV_XP: - return QString::fromLatin1("Windows XP"); - case QSysInfo::WV_2003: - return QString::fromLatin1("Windows Server 2003"); - case QSysInfo::WV_VISTA: - return QString::fromLatin1("Windows Vista"); - case QSysInfo::WV_WINDOWS7: - return QString::fromLatin1("Windows 7"); -#if QT_VERSION >= 0x040800 - case QSysInfo::WV_WINDOWS8: - return QString::fromLatin1("Windows 8"); -#endif -#if ((QT_VERSION >= 0x050200) || (QT_VERSION >= 0x040806 && QT_VERSION < 0x050000)) - case QSysInfo::WV_WINDOWS8_1: - return QString::fromLatin1("Windows 8.1"); -#endif -#if QT_VERSION >= 0x040807 - case QSysInfo::WV_WINDOWS10: - return QString::fromLatin1("Windows 10"); -#endif - default: - return QString::fromLatin1("Windows"); - } -#elif defined (Q_OS_MAC) - switch(QSysInfo::MacVersion()) - { - case QSysInfo::MV_10_3: - return QString::fromLatin1("Mac OS X 10.3"); - case QSysInfo::MV_10_4: - return QString::fromLatin1("Mac OS X 10.4"); - case QSysInfo::MV_10_5: - return QString::fromLatin1("Mac OS X 10.5"); -#if QT_VERSION >= 0x040700 - case QSysInfo::MV_10_6: - return QString::fromLatin1("Mac OS X 10.6"); -#endif -#if QT_VERSION >= 0x040800 - case QSysInfo::MV_10_7: - return QString::fromLatin1("Mac OS X 10.7"); - case QSysInfo::MV_10_8: - return QString::fromLatin1("Mac OS X 10.8"); - case QSysInfo::MV_10_9: - return QString::fromLatin1("Mac OS X 10.9"); - case QSysInfo::MV_10_10: - return QString::fromLatin1("Mac OS X 10.10"); -#endif -#if QT_VERSION >= 0x050500 - case QSysInfo::MV_10_11: - return QString::fromLatin1("Mac OS X 10.11"); -#endif -#if QT_VERSION >= 0x050600 - case QSysInfo::MV_10_12: - return QString::fromLatin1("Mac OS X 10.12"); -#endif - default: - return QString::fromLatin1("Mac OS X"); - } -#elif defined (Q_OS_LINUX) - QString exe(QLatin1String("lsb_release")); - QStringList args; - args << QLatin1String("-ds"); - QProcess proc; - proc.setEnvironment(QProcess::systemEnvironment()); - proc.start(exe, args); - if (proc.waitForStarted() && proc.waitForFinished()) { - QByteArray info = proc.readAll(); - info.replace('\n',""); - return QString::fromLatin1((const char*)info); - } - - return QString::fromLatin1("Linux"); -#elif defined (Q_OS_UNIX) - return QString::fromLatin1("UNIX"); -#else - return QString(); -#endif - -#endif // >= 0x050400 -} - -static int getWordSizeOfOS() -{ -#if defined(Q_OS_WIN64) - return 64; // 64-bit process running on 64-bit windows -#elif defined(Q_OS_WIN32) - - // determine if 32-bit process running on 64-bit windows in WOW64 emulation - // or 32-bit process running on 32-bit windows - // default bIsWow64 to false for 32-bit process on 32-bit windows - - BOOL bIsWow64 = false; // must default to false - typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); - - LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress( - GetModuleHandle("kernel32"), "IsWow64Process"); - - if (NULL != fnIsWow64Process) { - if (!fnIsWow64Process(GetCurrentProcess(), &bIsWow64)) { - assert(false); // something went majorly wrong - } - } - return bIsWow64 ? 64 : 32; - -#elif defined (Q_OS_LINUX) - // http://stackoverflow.com/questions/246007/how-to-determine-whether-a-given-linux-is-32-bit-or-64-bit - QString exe(QLatin1String("getconf")); - QStringList args; - args << QLatin1String("LONG_BIT"); - QProcess proc; - proc.setEnvironment(QProcess::systemEnvironment()); - proc.start(exe, args); - if (proc.waitForStarted() && proc.waitForFinished()) { - QByteArray info = proc.readAll(); - info.replace('\n',""); - return info.toInt(); - } - - return 0; // failed - -#elif defined (Q_OS_UNIX) || defined (Q_OS_MAC) - QString exe(QLatin1String("uname")); - QStringList args; - args << QLatin1String("-m"); - QProcess proc; - proc.setEnvironment(QProcess::systemEnvironment()); - proc.start(exe, args); - if (proc.waitForStarted() && proc.waitForFinished()) { - QByteArray info = proc.readAll(); - info.replace('\n',""); - if (info.indexOf("x86_64") >= 0) - return 64; - else if (info.indexOf("amd64") >= 0) - return 64; - else if (info.indexOf("ia64") >= 0) - return 64; - else if (info.indexOf("ppc64") >= 0) - return 64; - else if (info.indexOf("i386") >= 0) - return 32; - else if (info.indexOf("i686") >= 0) - return 32; - else if (info.indexOf("x86") >= 0) - return 32; - } - - return 0; // failed -#else - return 0; // unknown -#endif -} -}; - void AboutDialog::showOrHideImage(const QRect& rect) { adjustSize(); @@ -519,7 +318,7 @@ void AboutDialog::setupLabels() ui->labelBuildDate->setText(date); QString os = ui->labelBuildOS->text(); - os.replace(QString::fromLatin1("Unknown"), SystemInfo::getOperatingSystem()); + os.replace(QString::fromLatin1("Unknown"), QSysInfo::prettyProductName()); ui->labelBuildOS->setText(os); QString platform = ui->labelBuildPlatform->text(); @@ -543,8 +342,22 @@ void AboutDialog::setupLabels() it = config.find("BuildRevisionHash"); if (it != config.end()) { QString hash = ui->labelBuildHash->text(); - hash.replace(QString::fromLatin1("Unknown"), QString::fromLatin1(it->second.c_str())); + hash.replace(QString::fromLatin1("Unknown"), QString::fromLatin1(it->second.c_str()).left(7)); // Use the 7-char abbreviated hash ui->labelBuildHash->setText(hash); + if (auto url_itr = config.find("BuildRepositoryURL"); url_itr != config.end()) { + auto url = QString::fromStdString(url_itr->second); + + if (int space = url.indexOf(QChar::fromLatin1(' ')); space != -1) + url = url.left(space); // Strip off the branch information to get just the repo + + if (url == QString::fromUtf8("Unknown")) + url = QString::fromUtf8("https://github.com/FreeCAD/FreeCAD"); // Just take a guess + + // This may only create valid URLs for Github, but some other hosts use the same format so give it a shot... + auto https = url.replace(QString::fromUtf8("git://"), QString::fromUtf8("https://")); + https.replace(QString::fromUtf8(".git"), QString::fromUtf8("")); + ui->labelBuildHash->setUrl(https + QString::fromUtf8("/commit/") + QString::fromStdString(it->second)); + } } else { ui->labelHash->hide(); @@ -598,7 +411,7 @@ void AboutDialog::showCredits() //: Header for the list of companies/organizations in the Credits list. creditsHTML += tr("Organizations"); creditsHTML += QString::fromLatin1("
    "); - } + } else { creditsHTML += QString::fromLatin1("
  • ") + line + QString::fromLatin1("
  • "); } @@ -614,24 +427,48 @@ void AboutDialog::showLicenseInformation() .arg(QString::fromUtf8(App::Application::getHelpDir().c_str())); QFile licenseFile(licenseFileURL); - if (!licenseFile.open(QIODevice::ReadOnly | QIODevice::Text)) { - return; // Leave the existing license placeholder there if we can't find our license html file + if (licenseFile.open(QIODevice::ReadOnly | QIODevice::Text)) { + QString licenseHTML = QString::fromUtf8(licenseFile.readAll()); + const auto placeholder = QString::fromUtf8(""); + licenseHTML.replace(placeholder, getAdditionalLicenseInformation()); + + ui->tabWidget->removeTab(1); // Hide the license placeholder widget + + QWidget* tab_license = new QWidget(); + tab_license->setObjectName(QString::fromLatin1("tab_license")); + ui->tabWidget->addTab(tab_license, tr("License")); + QVBoxLayout* hlayout = new QVBoxLayout(tab_license); + QTextBrowser* textField = new QTextBrowser(tab_license); + textField->setOpenExternalLinks(true); + textField->setOpenLinks(true); + hlayout->addWidget(textField); + + textField->setHtml(licenseHTML); } + else { + QString info(QLatin1String("SUCH DAMAGES.
    ")); + info += getAdditionalLicenseInformation(); + QString lictext = ui->textBrowserLicense->toHtml(); + lictext.replace(QString::fromLatin1("SUCH DAMAGES.
    "), info); + ui->textBrowserLicense->setHtml(lictext); + } +} - ui->tabWidget->removeTab (1); // Hide the license placeholder widget - - QWidget* tab_license = new QWidget(); - tab_license->setObjectName(QString::fromLatin1("tab_license")); - ui->tabWidget->addTab(tab_license, tr("License")); - QVBoxLayout* hlayout = new QVBoxLayout(tab_license); - QTextBrowser* textField = new QTextBrowser(tab_license); - textField->setOpenExternalLinks(true); - textField->setOpenLinks(true); - hlayout->addWidget(textField); - - QString licenseHTML = QString::fromUtf8(licenseFile.readAll()); - textField->setHtml(licenseHTML); - +QString AboutDialog::getAdditionalLicenseInformation() const +{ + // Any additional piece of text to be added after the main license text goes below. + // Please set title in

    tags, license text in

    tags + // and add an


    tag at the end to nicely separate license blocks + QString info; +#ifdef _USE_3DCONNEXION_SDK + info += QString::fromUtf8( + "

    3D Mouse Support

    " + "

    Development tools and related technology provided under license from 3Dconnexion.
    " + "Copyright © 1992–2012 3Dconnexion. All rights reserved.

    " + "
    " + ); +#endif + return info; } void AboutDialog::showLibraryInformation() @@ -862,12 +699,7 @@ void AboutDialog::on_copyButton_clicked() } } - str << "OS: " << SystemInfo::getOperatingSystem() << deskInfo << '\n'; - - int wordSize = SystemInfo::getWordSizeOfOS(); - if (wordSize > 0) { - str << "Word size of OS: " << wordSize << "-bit\n"; - } + str << "OS: " << QSysInfo::prettyProductName() << deskInfo << '\n'; str << "Word size of " << exe << ": " << QSysInfo::WordSize << "-bit\n"; str << "Version: " << major << "." << minor << "." << build; char *appimage = getenv("APPIMAGE"); diff --git a/src/Gui/Splashscreen.h b/src/Gui/Splashscreen.h index eae1f6ef54..09334b662d 100644 --- a/src/Gui/Splashscreen.h +++ b/src/Gui/Splashscreen.h @@ -103,6 +103,7 @@ protected: void setupLabels(); void showCredits(); void showLicenseInformation(); + QString getAdditionalLicenseInformation() const; void showLibraryInformation(); void showCollectionInformation(); void showOrHideImage(const QRect& rect);