diff options
Diffstat (limited to 'VMProtect/license_dialog.cc')
-rw-r--r-- | VMProtect/license_dialog.cc | 369 |
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 |