aboutsummaryrefslogtreecommitdiff
path: root/VMProtect/license_dialog.cc
diff options
context:
space:
mode:
Diffstat (limited to 'VMProtect/license_dialog.cc')
-rw-r--r--VMProtect/license_dialog.cc369
1 files changed, 369 insertions, 0 deletions
diff --git a/VMProtect/license_dialog.cc b/VMProtect/license_dialog.cc
new file mode 100644
index 0000000..755076f
--- /dev/null
+++ b/VMProtect/license_dialog.cc
@@ -0,0 +1,369 @@
+#ifdef ULTIMATE
+#include "../core/objects.h"
+#include "../core/core.h"
+#include "../core/lang.h"
+#include "widgets.h"
+#include "license_dialog.h"
+#include "moc/moc_license_dialog.cc"
+#include "message_dialog.h"
+#include "wait_cursor.h"
+#include "help_browser.h"
+#include "application.h"
+
+/**
+ * LicenseDialog
+ */
+
+LicenseDialog::LicenseDialog(LicensingManager *manager, License *license, QWidget *parent)
+ : QDialog(parent, Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint | Qt::MSWindowsFixedSizeDialogHint), manager_(manager), license_(license)
+{
+ setWindowTitle(QString::fromUtf8(language[lsAddLicense].c_str()));
+
+ QFont font;
+ font.setBold(true);
+
+ QLabel *details = new QLabel(QString::fromUtf8(language[lsDetails].c_str()), this);
+ details->setObjectName("header");
+ QFrame *groupDetails = new QFrame(this);
+ groupDetails->setObjectName("gridEditor");
+ groupDetails->setFrameShape(QFrame::StyledPanel);
+
+ QGridLayout *layout = new QGridLayout();
+ layout->setContentsMargins(0, 0, 0, 0);
+ layout->setHorizontalSpacing(0);
+ layout->setVerticalSpacing(1);
+ layout->setColumnMinimumWidth(0, 180 * Application::stylesheetScaleFactor());
+ layout->setColumnStretch(1, 1);
+
+ QLabel *nameLabel = new QLabel(QString::fromUtf8(language[lsCustomerName].c_str()), this);
+ nameLabel->setObjectName("editor");
+ nameEdit_ = new LineEdit(this);
+ nameEdit_->setFrame(false);
+ nameEdit_->setFont(font);
+
+ QLabel *emailLabel = new QLabel(QString::fromUtf8(language[lsEmail].c_str()), this);
+ emailLabel->setObjectName("editor");
+ emailEdit_ = new LineEdit(this);
+ emailEdit_->setFrame(false);
+ emailEdit_->setFont(font);
+
+ QLabel *dateLabel = new QLabel(QString::fromUtf8(language[lsDate].c_str()), this);
+ dateLabel->setObjectName("editor");
+ dateEdit_ = new QDateEdit(this);
+ dateEdit_->setFrame(false);
+ dateEdit_->setDate(QDate::currentDate());
+ dateEdit_->setFont(font);
+
+ QLabel *orderLabel = new QLabel(QString::fromUtf8(language[lsOrderRef].c_str()), this);
+ orderLabel->setObjectName("editor");
+ orderEdit_ = new LineEdit(this);
+ orderEdit_->setFrame(false);
+ orderEdit_->setFont(font);
+
+ QLabel *commentsLabel = new QLabel(QString::fromUtf8(language[lsComments].c_str()), this);
+ commentsLabel->setAlignment(Qt::AlignTop);
+ commentsLabel->setObjectName("editor");
+ commentsEdit_ = new QPlainTextEdit(this);
+ commentsEdit_->setFrameShape(QFrame::NoFrame);
+ commentsEdit_->setMaximumHeight(40 * Application::stylesheetScaleFactor());
+ commentsEdit_->setFont(font);
+ commentsEdit_->setTabChangesFocus(true);
+
+ layout->addWidget(nameLabel, 0, 0);
+ layout->addWidget(nameEdit_, 0, 1);
+ layout->addWidget(emailLabel, 1, 0);
+ layout->addWidget(emailEdit_, 1, 1);
+ layout->addWidget(dateLabel, 2, 0);
+ layout->addWidget(dateEdit_, 2, 1);
+ layout->addWidget(orderLabel, 3, 0);
+ layout->addWidget(orderEdit_, 3, 1);
+ layout->addWidget(commentsLabel, 4, 0);
+ layout->addWidget(commentsEdit_, 4, 1);
+ layout->setRowStretch(4, 1);
+ groupDetails->setLayout(layout);
+
+ QLabel *serial = new QLabel(QString::fromUtf8(language[lsSerialNumberContents].c_str()), this);
+ serial->setObjectName("header");
+ QFrame *groupSerial = new QFrame(this);
+ groupSerial->setObjectName("gridEditor");
+ groupSerial->setFrameShape(QFrame::StyledPanel);
+
+ serialNameCheckBox_ = new QCheckBox(QString::fromUtf8(language[lsCustomerName].c_str()), this);
+ serialNameCheckBox_->setObjectName("editor");
+ serialNameEdit_ = new LineEdit(this);
+ serialNameEdit_->setFrame(false);
+ serialNameEdit_->setFont(font);
+ serialNameEdit_->setMaxLength(255);
+
+ serialEmailCheckBox_ = new QCheckBox(QString::fromUtf8(language[lsEmail].c_str()), this);
+ serialEmailCheckBox_->setObjectName("editor");
+ serialEmailEdit_ = new LineEdit(this);
+ serialEmailEdit_->setFrame(false);
+ serialEmailEdit_->setFont(font);
+ serialEmailEdit_->setMaxLength(255);
+
+ serialHWIDCheckBox_ = new QCheckBox(QString::fromUtf8(language[lsHardwareID].c_str()), this);
+ serialHWIDCheckBox_->setObjectName("editor");
+ serialHWIDEdit_ = new LineEdit(this);
+ serialHWIDEdit_->setFrame(false);
+ serialHWIDEdit_->setFont(font);
+
+ serialExpirationDateCheckBox_ = new QCheckBox(QString::fromUtf8(language[lsExpirationDate].c_str()), this);
+ serialExpirationDateCheckBox_->setObjectName("editor");
+ serialExpirationDateEdit_ = new QDateEdit(this);
+ serialExpirationDateEdit_->setFrame(false);
+ serialExpirationDateEdit_->setDate(QDate::currentDate().addMonths(1));
+ serialExpirationDateEdit_->setFont(font);
+
+ serialTimeLimitCheckBox_ = new QCheckBox(QString::fromUtf8(language[lsRunningTimeLimit].c_str()), this);
+ serialTimeLimitCheckBox_->setObjectName("editor");
+ serialTimeLimitEdit_ = new QSpinBox(this);
+ serialTimeLimitEdit_->setFrame(false);
+ serialTimeLimitEdit_->setRange(0, 255);
+ serialTimeLimitEdit_->setValue(30);
+ serialTimeLimitEdit_->setFont(font);
+
+ serialMaxBuildDateCheckBox_ = new QCheckBox(QString::fromUtf8(language[lsMaxBuildDate].c_str()), this);
+ serialMaxBuildDateCheckBox_->setObjectName("editor");
+ serialMaxBuildDateEdit_ = new QDateEdit(this);
+ serialMaxBuildDateEdit_->setFrame(false);
+ serialMaxBuildDateEdit_->setDate(QDate::currentDate().addYears(1));
+ serialMaxBuildDateEdit_->setFont(font);
+
+ QFrame *serialUserDataFrame = new QFrame(this);
+ serialUserDataFrame->setObjectName("editor");
+ serialUserDataCheckBox_ = new QCheckBox(QString::fromUtf8(language[lsUserData].c_str()), serialUserDataFrame);
+ serialUserDataCheckBox_->setObjectName("editor");
+ serialUserDataEdit_ = new BinEditor(this);
+ serialUserDataEdit_->setFrameShape(QFrame::NoFrame);
+ serialUserDataEdit_->setOverwriteMode(false);
+ serialUserDataEdit_->setMaxLength(255);
+ serialUserDataEdit_->setMaximumHeight(40 * Application::stylesheetScaleFactor());
+ font = serialUserDataEdit_->font();
+ font.setBold(true);
+ serialUserDataEdit_->setFont(font);
+
+ layout = new QGridLayout();
+ layout->setContentsMargins(0, 0, 0, 0);
+ layout->setHorizontalSpacing(0);
+ layout->setVerticalSpacing(1);
+ layout->setColumnMinimumWidth(0, 180 * Application::stylesheetScaleFactor());
+ layout->setColumnStretch(1, 1);
+ layout->addWidget(serialNameCheckBox_, 0, 0);
+ layout->addWidget(serialNameEdit_, 0, 1);
+ layout->addWidget(serialEmailCheckBox_, 1, 0);
+ layout->addWidget(serialEmailEdit_, 1, 1);
+ layout->addWidget(serialHWIDCheckBox_, 2, 0);
+ layout->addWidget(serialHWIDEdit_, 2, 1);
+ layout->addWidget(serialExpirationDateCheckBox_, 3, 0);
+ layout->addWidget(serialExpirationDateEdit_, 3, 1);
+ layout->addWidget(serialTimeLimitCheckBox_, 4, 0);
+ layout->addWidget(serialTimeLimitEdit_, 4, 1);
+ layout->addWidget(serialMaxBuildDateCheckBox_, 5, 0);
+ layout->addWidget(serialMaxBuildDateEdit_, 5, 1);
+ layout->addWidget(serialUserDataFrame, 6, 0);
+ layout->addWidget(serialUserDataEdit_, 6, 1);
+
+ groupSerial->setLayout(layout);
+
+ QToolButton *helpButton = new QToolButton(this);
+ helpButton->setShortcut(HelpContentsKeySequence());
+ helpButton->setIconSize(QSize(20, 20));
+ helpButton->setIcon(QIcon(":/images/help_gray.png"));
+ helpButton->setToolTip(QString::fromUtf8(language[lsHelp].c_str()));
+ connect(helpButton, SIGNAL(clicked(bool)), this, SLOT(helpClicked()));
+
+ QPushButton *okButton = new PushButton(QString::fromUtf8(language[lsAddLicense].c_str()), this);
+ QPushButton *cancelButton = new PushButton(QString::fromUtf8(language[lsCancel].c_str()), this);
+ QHBoxLayout *buttonLayout = new QHBoxLayout();
+ buttonLayout->setContentsMargins(0, 0, 0, 0);
+ buttonLayout->setSpacing(10);
+ buttonLayout->addWidget(helpButton);
+ buttonLayout->addStretch();
+#ifdef __APPLE__
+ buttonLayout->addWidget(cancelButton);
+ buttonLayout->addWidget(okButton);
+#else
+ buttonLayout->addWidget(okButton);
+ buttonLayout->addWidget(cancelButton);
+#endif
+
+ QVBoxLayout *mainLayout = new QVBoxLayout();
+ mainLayout->setContentsMargins(10, 10, 10, 10);
+ mainLayout->setSpacing(10);
+ mainLayout->addWidget(details);
+ mainLayout->addWidget(groupDetails);
+ mainLayout->addStretch(1);
+ mainLayout->addWidget(serial);
+ mainLayout->addWidget(groupSerial);
+ mainLayout->addLayout(buttonLayout);
+
+ if (license) {
+ nameEdit_->setText(QString::fromUtf8(license->customer_name().c_str()));
+ emailEdit_->setText(QString::fromUtf8(license->customer_email().c_str()));
+ LicenseDate date = license->date();
+ dateEdit_->setDate(QDate(date.Year, date.Month, date.Day));
+ orderEdit_->setText(QString::fromUtf8(license->order_ref().c_str()));
+ commentsEdit_->setPlainText(QString::fromUtf8(license->comments().c_str()));
+
+ LicenseInfo *license_info = license_->info();
+ if (license_info) {
+ if (license_info->Flags & HAS_USER_NAME) {
+ serialNameCheckBox_->setChecked(true);
+ serialNameEdit_->setText(QString::fromUtf8(license_info->CustomerName.c_str()));
+ }
+ if (license_info->Flags & HAS_EMAIL) {
+ serialEmailCheckBox_->setChecked(true);
+ serialEmailEdit_->setText(QString::fromUtf8(license_info->CustomerEmail.c_str()));
+ }
+ if (license_info->Flags & HAS_HARDWARE_ID) {
+ serialHWIDCheckBox_->setChecked(true);
+ serialHWIDEdit_->setText(QString::fromLatin1(license_info->HWID.c_str()));
+ }
+ if (license_info->Flags & HAS_TIME_LIMIT) {
+ serialTimeLimitCheckBox_->setChecked(true);
+ serialTimeLimitEdit_->setValue(license_info->RunningTimeLimit);
+ }
+ if (license_info->Flags & HAS_EXP_DATE) {
+ serialExpirationDateCheckBox_->setChecked(true);
+ serialExpirationDateEdit_->setDate(QDate(license_info->ExpireDate.Year, license_info->ExpireDate.Month, license_info->ExpireDate.Day));
+ }
+ if (license_info->Flags & HAS_MAX_BUILD_DATE) {
+ serialMaxBuildDateCheckBox_->setChecked(true);
+ serialMaxBuildDateEdit_->setDate(QDate(license_info->MaxBuildDate.Year, license_info->MaxBuildDate.Month, license_info->MaxBuildDate.Day));
+ }
+ if (license_info->Flags & HAS_USER_DATA) {
+ serialUserDataCheckBox_->setChecked(true);
+ serialUserDataEdit_->setData(QByteArray(license_info->UserData.c_str(), (int)license_info->UserData.size()));
+ }
+ }
+ }
+
+ connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
+ connect(okButton, SIGNAL(clicked()), this, SLOT(okButtonClicked()));
+ connect(nameEdit_, SIGNAL(textChanged(const QString &)), this, SLOT(nameChanged()));
+ connect(emailEdit_, SIGNAL(textChanged(const QString &)), this, SLOT(emailChanged()));
+ connect(serialNameEdit_, SIGNAL(textChanged(const QString &)), this, SLOT(serialNameChanged()));
+ connect(serialEmailEdit_, SIGNAL(textChanged(const QString &)), this, SLOT(serialEmailChanged()));
+ connect(serialHWIDEdit_, SIGNAL(textChanged(const QString &)), this, SLOT(HWIDChanged()));
+ connect(serialExpirationDateEdit_, SIGNAL(dateChanged(const QDate &)), this, SLOT(expirationDateChanged()));
+ connect(serialTimeLimitEdit_, SIGNAL(valueChanged(int)), this, SLOT(timeLimitChanged()));
+ connect(serialMaxBuildDateEdit_, SIGNAL(dateChanged(const QDate &)), this, SLOT(maxBuildDateChanged()));
+ connect(serialUserDataEdit_, SIGNAL(dataChanged()), this, SLOT(userDataChanged()));
+
+ setLayout(mainLayout);
+ setMinimumSize(450 * Application::stylesheetScaleFactor(), 300 * Application::stylesheetScaleFactor());
+}
+
+void LicenseDialog::nameChanged()
+{
+ serialNameEdit_->setText(nameEdit_->text());
+}
+
+void LicenseDialog::emailChanged()
+{
+ serialEmailEdit_->setText(emailEdit_->text());
+}
+
+void LicenseDialog::serialNameChanged()
+{
+ serialNameCheckBox_->setChecked(!serialNameEdit_->text().isEmpty());
+}
+
+void LicenseDialog::serialEmailChanged()
+{
+ serialEmailCheckBox_->setChecked(!serialEmailEdit_->text().isEmpty());
+}
+
+void LicenseDialog::HWIDChanged()
+{
+ serialHWIDCheckBox_->setChecked(!serialHWIDEdit_->text().isEmpty());
+}
+
+void LicenseDialog::expirationDateChanged()
+{
+ serialExpirationDateCheckBox_->setChecked(true);
+}
+
+void LicenseDialog::timeLimitChanged()
+{
+ serialTimeLimitCheckBox_->setChecked(true);
+}
+
+void LicenseDialog::maxBuildDateChanged()
+{
+ serialMaxBuildDateCheckBox_->setChecked(true);
+}
+
+void LicenseDialog::userDataChanged()
+{
+ serialUserDataCheckBox_->setChecked(serialUserDataEdit_->data().size());
+}
+
+void LicenseDialog::okButtonClicked()
+{
+ LicenseInfo licenseInfo;
+
+ if (serialNameCheckBox_->checkState() == Qt::Checked) {
+ licenseInfo.Flags |= HAS_USER_NAME;
+ licenseInfo.CustomerName = serialNameEdit_->text().toUtf8().constData();
+ }
+
+ if (serialEmailCheckBox_->checkState() == Qt::Checked) {
+ licenseInfo.Flags |= HAS_EMAIL;
+ licenseInfo.CustomerEmail = serialEmailEdit_->text().toUtf8().constData();
+ }
+
+ if (serialHWIDCheckBox_->checkState() == Qt::Checked) {
+ licenseInfo.Flags |= HAS_HARDWARE_ID;
+ licenseInfo.HWID = serialHWIDEdit_->text().toUtf8().constData();
+ }
+
+ if (serialExpirationDateCheckBox_->checkState() == Qt::Checked) {
+ licenseInfo.Flags |= HAS_EXP_DATE;
+ QDate date = serialExpirationDateEdit_->date();
+ licenseInfo.ExpireDate = LicenseDate(date.year(), date.month(), date.day());
+ }
+
+ if (serialTimeLimitCheckBox_->checkState() == Qt::Checked) {
+ licenseInfo.Flags |= HAS_TIME_LIMIT;
+ licenseInfo.RunningTimeLimit = (uint8_t)serialTimeLimitEdit_->value();
+ }
+
+ if (serialMaxBuildDateCheckBox_->checkState() == Qt::Checked) {
+ licenseInfo.Flags |= HAS_MAX_BUILD_DATE;
+ QDate date = serialMaxBuildDateEdit_->date();
+ licenseInfo.MaxBuildDate = LicenseDate(date.year(), date.month(), date.day());
+ }
+
+ if (serialUserDataCheckBox_->checkState() == Qt::Checked) {
+ licenseInfo.Flags |= HAS_USER_DATA;
+ QByteArray data = serialUserDataEdit_->data();
+ licenseInfo.UserData = std::string(data.constData(), data.size());
+ }
+
+ try {
+ WaitCursor wc;
+ std::string serialNumber = manager_->GenerateSerialNumber(licenseInfo);
+ QDate date = dateEdit_->date();
+ license_ = manager_->Add(LicenseDate(date.year(), date.month(), date.day()),
+ nameEdit_->text().toUtf8().constData(),
+ emailEdit_->text().toUtf8().constData(),
+ orderEdit_->text().toUtf8().constData(),
+ commentsEdit_->toPlainText().toUtf8().constData(),
+ serialNumber,
+ false);
+ } catch (const std::runtime_error &e) {
+ MessageDialog::critical(this, QString("%1:\n%2").arg(QString::fromUtf8(language[lsSerialNumberError].c_str())).arg(QString::fromUtf8(e.what())), QMessageBox::Ok);
+ return;
+ }
+
+ accept();
+}
+
+void LicenseDialog::helpClicked()
+{
+ HelpBrowser::showTopic("project::licenses");
+}
+
+#endif \ No newline at end of file