vmprotect-3.5.1/VMProtect/about_dialog.cc

177 lines
6.1 KiB
C++

#include "../core/objects.h"
#include "../core/files.h"
#include "../core/core.h"
#include "../core/lang.h"
#include "widgets.h"
#include "about_dialog.h"
#include "help_browser.h"
#include "moc/moc_about_dialog.cc"
/**
* AboutDialog
*/
AboutDialog::AboutDialog(QWidget *parent)
: QDialog(parent, Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint | Qt::MSWindowsFixedSizeDialogHint)
{
setWindowTitle(QString::fromUtf8(language[lsAbout].c_str()));
QAction *helpAction = new QAction(this);
helpAction->setShortcut(HelpContentsKeySequence());
connect(helpAction, SIGNAL(triggered()), this, SLOT(help()));
addAction(helpAction);
QFrame *top = new QFrame(this);
top->setObjectName("bootTop");
QLabel *logo = new QLabel(this);
logo->setPixmap(QPixmap(":/images/logo.png"));
QLabel *version = new QLabel(QString::fromLatin1(Core::edition()) + " v " + QString::fromLatin1(Core::version()), this);
version->setObjectName("version");
QLabel *build = new QLabel("build " + QString::fromLatin1(Core::build()), this);
build->setObjectName("build");
QGridLayout *grid_layout = new QGridLayout();
grid_layout->setContentsMargins(30, 30, 30, 20);
grid_layout->setSpacing(0);
grid_layout->setColumnStretch(1, 1);
grid_layout->addWidget(logo, 0, 0, 3, 1);
grid_layout->addWidget(version, 0, 1, Qt::AlignCenter);
grid_layout->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding), 1, 1);
grid_layout->addWidget(build, 2, 1, Qt::AlignRight);
top->setLayout(grid_layout);
QFrame *line1 = new QFrame(this);
line1->setObjectName("bootHSeparator");
line1->setFixedHeight(1);
QFrame *center = new QFrame(this);
center->setObjectName("boot");
QLabel *registered1 = new QLabel(this);
registered1->setWordWrap(true);
QLabel *registered2 = new QLabel(this);
registered2->setWordWrap(true);
enum PurchaseMode {
pmLicense,
pmSubscriptionPersonal,
pmSubscriptionCompany
};
QPushButton *purchase = NULL;
PurchaseMode purchaseMode = pmLicense;
#ifdef DEMO
registered1->setText(QString::fromUtf8(language[lsDemoVersion].c_str()));
registered1->setObjectName("unregistered");
purchase = new PushButton(QString::fromUtf8(language[lsPurchaseLicense].c_str()), this);
#else
VMProtectSerialNumberData data;
data.nState = SERIAL_STATE_FLAG_INVALID;
if (VMProtectGetSerialNumberData(&data, sizeof(data)) && data.nState == 0) {
registered1->setText(QString("%1: <b>%2 [%3], %4</b>").arg(QString::fromUtf8(language[lsRegisteredTo].c_str())).
arg(QString::fromUtf16((ushort *)data.wUserName)).
arg(QString::fromUtf16((ushort *)data.wEMail)).
arg((data.bUserData[0] & 1) ? "Personal License" : "Company License"));
if (data.dtMaxBuild.wYear) {
QDate dt = QDate(data.dtMaxBuild.wYear, data.dtMaxBuild.bMonth, data.dtMaxBuild.bDay);
registered2->setText(QString("%1: <b>%2</b>").arg(QString::fromUtf8(language[lsFreeUpdatesPeriod].c_str())).arg(dt.toString(Qt::SystemLocaleShortDate)));
if (QDate::currentDate() > dt) {
purchase = new PushButton(QString::fromUtf8(language[lsPurchaseSubscription].c_str()), this);
if (data.nUserDataLength)
purchaseMode = (data.bUserData[0] & 1) ? pmSubscriptionPersonal : pmSubscriptionCompany;
}
}
} else {
if (data.nState & SERIAL_STATE_FLAG_BLACKLISTED) {
registered1->setText(QString::fromLatin1(VMProtectDecryptStringA("Your key file is blocked!")));
// don't show "buy now" button
} else if (data.nState & SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED) {
registered1->setText(QString::fromLatin1(VMProtectDecryptStringA("Your key file will not work with this version of VMProtect!\nYou should use older version or buy one more year of updates and technical support.")));
purchase = new PushButton(QString::fromUtf8(language[lsPurchaseSubscription].c_str()), this);
if (data.nUserDataLength)
purchaseMode = (data.bUserData[0] & 1) ? pmSubscriptionPersonal : pmSubscriptionCompany;
} else {
registered1->setText(QString::fromUtf8(language[lsUnregisteredVersion].c_str()));
purchase = new PushButton(QString::fromUtf8(language[lsPurchaseLicense].c_str()), this);
}
registered1->setObjectName("unregistered");
}
#endif
QBoxLayout *layout = new QVBoxLayout();
layout->setContentsMargins(10, 10, 10, 10);
layout->setSpacing(5);
layout->addWidget(registered1);
layout->addWidget(registered2);
layout->addStretch(1);
if (purchase) {
switch (purchaseMode) {
case pmSubscriptionPersonal:
connect(purchase, SIGNAL(clicked()), this, SLOT(purchaseSubscriptionPersonal()));
break;
case pmSubscriptionCompany:
connect(purchase, SIGNAL(clicked()), this, SLOT(purchaseSubscriptionCompany()));
break;
default:
connect(purchase, SIGNAL(clicked()), this, SLOT(purchaseLicense()));
break;
}
layout->addWidget(purchase, 0, Qt::AlignCenter);
}
center->setLayout(layout);
QFrame *line2 = new QFrame(this);
line2->setObjectName("bootHSeparator");
line2->setFixedHeight(1);
QLabel *copyright = new QLabel(QString::fromLatin1(Core::copyright()), this);
copyright->setObjectName("copyright");
QFrame *bottom = new QFrame(this);
bottom->setObjectName("bootTop");
layout = new QHBoxLayout();
layout->setContentsMargins(10, 10, 10, 10);
layout->setSpacing(0);
layout->addWidget(copyright, 0, Qt::AlignCenter);
bottom->setLayout(layout);
layout = new QVBoxLayout();
layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(0);
layout->addWidget(top);
layout->addWidget(line1);
layout->addWidget(center, 1);
layout->addWidget(line2);
layout->addWidget(bottom);
setLayout(layout);
setMinimumSize(500, 300);
setMaximumSize(500, 300);
//auto size: layout->setSizeConstraint(QLayout::SetFixedSize);
}
void AboutDialog::purchaseLicense()
{
QDesktopServices::openUrl(QUrl(VMProtectDecryptStringA("http://www.vmpsoft.com/purchase/buy-online/")));
}
void AboutDialog::purchaseSubscriptionPersonal()
{
QDesktopServices::openUrl(QUrl("https://store.payproglobal.com/checkout?products[1][id]=35518"));
}
void AboutDialog::purchaseSubscriptionCompany()
{
QDesktopServices::openUrl(QUrl("https://store.payproglobal.com/checkout?products[1][id]=35531"));
}
void AboutDialog::help()
{
HelpBrowser::showTopic("contacts");
}