1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
#include "aboutdialog.h"
#include "ui_aboutdialog.h"
#include "common/utils.h"
#include "iconmanager.h"
#include "services/extralicensemanager.h"
#include "services/pluginmanager.h"
#include "services/sqliteextensionmanager.h"
#include "formmanager.h"
#include "iconmanager.h"
#include "mainwindow.h"
#include <QDebug>
#include <QFile>
#include <QApplication>
#include <QClipboard>
#include <QAction>
AboutDialog::AboutDialog(InitialMode initialMode, QWidget *parent) :
QDialog(parent),
ui(new Ui::AboutDialog)
{
init(initialMode);
}
AboutDialog::~AboutDialog()
{
delete ui;
}
void AboutDialog::init(InitialMode initialMode)
{
ui->setupUi(this);
ui->leftIcon->setPixmap(ICONS.SQLITESTUDIO_APP.toQIcon().pixmap(200, 200));
ui->tabWidget->setCurrentWidget(initialMode == ABOUT ? ui->about : ui->license);
// About
QString distName;
switch (getDistributionType())
{
case DistributionType::PORTABLE:
distName = tr("Portable distribution.");
break;
case DistributionType::OSX_BUNDLE:
distName = tr("MacOS X application bundle distribution.");
break;
case DistributionType::OS_MANAGED:
distName = tr("Operating system managed distribution.");
break;
}
QString newLabelValue = ui->aboutLabel->text().arg(SQLITESTUDIO->getVersionString(), distName);
ui->aboutLabel->setText(newLabelValue);
// Licenses
licenseContents = "";
int row = 1;
QHash<QString,QString> licenses = SQLITESTUDIO->getExtraLicenseManager()->getLicensesContents();
QString violation;
QString title;
QHashIterator<QString,QString> it(licenses);
while (it.hasNext())
{
it.next();
violation = QString();
title = it.key();
if (SQLITESTUDIO->getExtraLicenseManager()->isViolatedLicense(title))
violation = SQLITESTUDIO->getExtraLicenseManager()->getViolationMessage(title);
addLicense(row++, title, it.value(), violation);
}
buildIndex();
ui->licenseEdit->setHtml(licenseContents);
indexContents.clear();
licenseContents.clear();
// Environment
ui->appDirEdit->setText(toNativePath(qApp->applicationDirPath()));
ui->cfgDirEdit->setText(toNativePath(CFG->getConfigDir()));
ui->pluginDirList->setPlainText(filterResourcePaths(PLUGINS->getPluginDirs()).join("\n"));
ui->iconDirList->setPlainText(filterResourcePaths(ICONMANAGER->getIconDirs()).join("\n"));
ui->formDirList->setPlainText(filterResourcePaths(FORMS->getFormDirs()).join("\n"));
ui->extensionDirList->setPlainText(filterResourcePaths(SQLITE_EXTENSIONS->getExtensionDirs()).join("\n"));
ui->qtVerEdit->setText(QT_VERSION_STR);
ui->sqlite3Edit->setText(CFG->getSqlite3Version());
}
void AboutDialog::buildIndex()
{
static const QString entryTpl = QStringLiteral("<li>%1</li>");
QStringList entries;
for (QString& idx : indexContents)
entries += entryTpl.arg(idx);
licenseContents.prepend(tr("<h3>Table of contents:</h3><ol>%2</ol>").arg(entries.join("")));
}
void AboutDialog::addLicense(int row, const QString& title, const QString& contents, const QString& violation)
{
static_qstring(violatedTpl, "<span style=\"color: #FF0000;\">%1 (%2)</span>");
QString escapedTitle = title.toHtmlEscaped();
QString finalTitle = violation.isNull() ? escapedTitle : violatedTpl.arg(escapedTitle, violation);
QString rowNum = QString::number(row);
licenseContents += "<h3>" + rowNum + ". " + finalTitle + "</h3>";
licenseContents += "<pre>" + contents.toHtmlEscaped() + "</pre>";
indexContents += finalTitle;
}
QString AboutDialog::readFile(const QString& path)
{
QFile file(path);
if (!file.open(QIODevice::ReadOnly))
{
qCritical() << "Error opening" << file.fileName();
return QString();
}
QString contents = QString::fromLatin1(file.readAll()).toHtmlEscaped();
file.close();
return contents;
}
QStringList AboutDialog::filterResourcePaths(const QStringList& paths)
{
QStringList output;
for (const QString& path : paths)
{
if (path.startsWith(":"))
continue;
QString newPath = toNativePath(path);
output << newPath;
}
return output;
}
|