| /**************************************************************************** |
| ** |
| ** Copyright (C) 2016 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the examples of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:BSD$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** BSD License Usage |
| ** Alternatively, you may use this file under the terms of the BSD license |
| ** as follows: |
| ** |
| ** "Redistribution and use in source and binary forms, with or without |
| ** modification, are permitted provided that the following conditions are |
| ** met: |
| ** * Redistributions of source code must retain the above copyright |
| ** notice, this list of conditions and the following disclaimer. |
| ** * Redistributions in binary form must reproduce the above copyright |
| ** notice, this list of conditions and the following disclaimer in |
| ** the documentation and/or other materials provided with the |
| ** distribution. |
| ** * Neither the name of The Qt Company Ltd nor the names of its |
| ** contributors may be used to endorse or promote products derived |
| ** from this software without specific prior written permission. |
| ** |
| ** |
| ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| #include <QtWidgets> |
| #if defined(QT_PRINTSUPPORT_LIB) |
| #include <QtPrintSupport/qtprintsupportglobal.h> |
| #if QT_CONFIG(printdialog) |
| #include <QPrinter> |
| #include <QPrintDialog> |
| #endif |
| #endif |
| |
| #include "licensewizard.h" |
| |
| QString emailRegExp = QStringLiteral(".+@.+"); |
| |
| //! [0] //! [1] //! [2] |
| LicenseWizard::LicenseWizard(QWidget *parent) |
| : QWizard(parent) |
| { |
| //! [0] |
| setPage(Page_Intro, new IntroPage); |
| setPage(Page_Evaluate, new EvaluatePage); |
| setPage(Page_Register, new RegisterPage); |
| setPage(Page_Details, new DetailsPage); |
| setPage(Page_Conclusion, new ConclusionPage); |
| //! [1] |
| |
| setStartId(Page_Intro); |
| //! [2] |
| |
| //! [3] |
| #ifndef Q_OS_MAC |
| //! [3] //! [4] |
| setWizardStyle(ModernStyle); |
| #endif |
| //! [4] //! [5] |
| setOption(HaveHelpButton, true); |
| //! [5] //! [6] |
| setPixmap(QWizard::LogoPixmap, QPixmap(":/images/logo.png")); |
| |
| //! [7] |
| connect(this, &QWizard::helpRequested, this, &LicenseWizard::showHelp); |
| //! [7] |
| |
| setWindowTitle(tr("License Wizard")); |
| //! [8] |
| } |
| //! [6] //! [8] |
| |
| //! [9] //! [10] |
| void LicenseWizard::showHelp() |
| //! [9] //! [11] |
| { |
| static QString lastHelpMessage; |
| |
| QString message; |
| |
| switch (currentId()) { |
| case Page_Intro: |
| message = tr("The decision you make here will affect which page you " |
| "get to see next."); |
| break; |
| //! [10] //! [11] |
| case Page_Evaluate: |
| message = tr("Make sure to provide a valid email address, such as " |
| "toni.buddenbrook@example.de."); |
| break; |
| case Page_Register: |
| message = tr("If you don't provide an upgrade key, you will be " |
| "asked to fill in your details."); |
| break; |
| case Page_Details: |
| message = tr("Make sure to provide a valid email address, such as " |
| "thomas.gradgrind@example.co.uk."); |
| break; |
| case Page_Conclusion: |
| message = tr("You must accept the terms and conditions of the " |
| "license to proceed."); |
| break; |
| //! [12] //! [13] |
| default: |
| message = tr("This help is likely not to be of any help."); |
| } |
| //! [12] |
| |
| if (lastHelpMessage == message) |
| message = tr("Sorry, I already gave what help I could. " |
| "Maybe you should try asking a human?"); |
| |
| //! [14] |
| QMessageBox::information(this, tr("License Wizard Help"), message); |
| //! [14] |
| |
| lastHelpMessage = message; |
| //! [15] |
| } |
| //! [13] //! [15] |
| |
| //! [16] |
| IntroPage::IntroPage(QWidget *parent) |
| : QWizardPage(parent) |
| { |
| setTitle(tr("Introduction")); |
| setPixmap(QWizard::WatermarkPixmap, QPixmap(":/images/watermark.png")); |
| |
| topLabel = new QLabel(tr("This wizard will help you register your copy of " |
| "<i>Super Product One</i>™ or start " |
| "evaluating the product.")); |
| topLabel->setWordWrap(true); |
| |
| registerRadioButton = new QRadioButton(tr("&Register your copy")); |
| evaluateRadioButton = new QRadioButton(tr("&Evaluate the product for 30 " |
| "days")); |
| registerRadioButton->setChecked(true); |
| |
| QVBoxLayout *layout = new QVBoxLayout; |
| layout->addWidget(topLabel); |
| layout->addWidget(registerRadioButton); |
| layout->addWidget(evaluateRadioButton); |
| setLayout(layout); |
| } |
| //! [16] //! [17] |
| |
| //! [18] |
| int IntroPage::nextId() const |
| //! [17] //! [19] |
| { |
| if (evaluateRadioButton->isChecked()) { |
| return LicenseWizard::Page_Evaluate; |
| } else { |
| return LicenseWizard::Page_Register; |
| } |
| } |
| //! [18] //! [19] |
| |
| //! [20] |
| EvaluatePage::EvaluatePage(QWidget *parent) |
| : QWizardPage(parent) |
| { |
| setTitle(tr("Evaluate <i>Super Product One</i>™")); |
| setSubTitle(tr("Please fill both fields. Make sure to provide a valid " |
| "email address (e.g., john.smith@example.com).")); |
| |
| nameLabel = new QLabel(tr("N&ame:")); |
| nameLineEdit = new QLineEdit; |
| //! [20] |
| nameLabel->setBuddy(nameLineEdit); |
| |
| emailLabel = new QLabel(tr("&Email address:")); |
| emailLineEdit = new QLineEdit; |
| emailLineEdit->setValidator(new QRegularExpressionValidator(QRegularExpression(emailRegExp), this)); |
| emailLabel->setBuddy(emailLineEdit); |
| |
| //! [21] |
| registerField("evaluate.name*", nameLineEdit); |
| registerField("evaluate.email*", emailLineEdit); |
| //! [21] |
| |
| QGridLayout *layout = new QGridLayout; |
| layout->addWidget(nameLabel, 0, 0); |
| layout->addWidget(nameLineEdit, 0, 1); |
| layout->addWidget(emailLabel, 1, 0); |
| layout->addWidget(emailLineEdit, 1, 1); |
| setLayout(layout); |
| //! [22] |
| } |
| //! [22] |
| |
| //! [23] |
| int EvaluatePage::nextId() const |
| { |
| return LicenseWizard::Page_Conclusion; |
| } |
| //! [23] |
| |
| RegisterPage::RegisterPage(QWidget *parent) |
| : QWizardPage(parent) |
| { |
| setTitle(tr("Register Your Copy of <i>Super Product One</i>™")); |
| setSubTitle(tr("If you have an upgrade key, please fill in " |
| "the appropriate field.")); |
| |
| nameLabel = new QLabel(tr("N&ame:")); |
| nameLineEdit = new QLineEdit; |
| nameLabel->setBuddy(nameLineEdit); |
| |
| upgradeKeyLabel = new QLabel(tr("&Upgrade key:")); |
| upgradeKeyLineEdit = new QLineEdit; |
| upgradeKeyLabel->setBuddy(upgradeKeyLineEdit); |
| |
| registerField("register.name*", nameLineEdit); |
| registerField("register.upgradeKey", upgradeKeyLineEdit); |
| |
| QGridLayout *layout = new QGridLayout; |
| layout->addWidget(nameLabel, 0, 0); |
| layout->addWidget(nameLineEdit, 0, 1); |
| layout->addWidget(upgradeKeyLabel, 1, 0); |
| layout->addWidget(upgradeKeyLineEdit, 1, 1); |
| setLayout(layout); |
| } |
| |
| //! [24] |
| int RegisterPage::nextId() const |
| { |
| if (upgradeKeyLineEdit->text().isEmpty()) { |
| return LicenseWizard::Page_Details; |
| } else { |
| return LicenseWizard::Page_Conclusion; |
| } |
| } |
| //! [24] |
| |
| DetailsPage::DetailsPage(QWidget *parent) |
| : QWizardPage(parent) |
| { |
| setTitle(tr("Fill In Your Details")); |
| setSubTitle(tr("Please fill all three fields. Make sure to provide a valid " |
| "email address (e.g., tanaka.aya@example.co.jp).")); |
| |
| companyLabel = new QLabel(tr("&Company name:")); |
| companyLineEdit = new QLineEdit; |
| companyLabel->setBuddy(companyLineEdit); |
| |
| emailLabel = new QLabel(tr("&Email address:")); |
| emailLineEdit = new QLineEdit; |
| emailLineEdit->setValidator(new QRegularExpressionValidator(QRegularExpression(emailRegExp), this)); |
| emailLabel->setBuddy(emailLineEdit); |
| |
| postalLabel = new QLabel(tr("&Postal address:")); |
| postalLineEdit = new QLineEdit; |
| postalLabel->setBuddy(postalLineEdit); |
| |
| registerField("details.company*", companyLineEdit); |
| registerField("details.email*", emailLineEdit); |
| registerField("details.postal*", postalLineEdit); |
| |
| QGridLayout *layout = new QGridLayout; |
| layout->addWidget(companyLabel, 0, 0); |
| layout->addWidget(companyLineEdit, 0, 1); |
| layout->addWidget(emailLabel, 1, 0); |
| layout->addWidget(emailLineEdit, 1, 1); |
| layout->addWidget(postalLabel, 2, 0); |
| layout->addWidget(postalLineEdit, 2, 1); |
| setLayout(layout); |
| } |
| |
| //! [25] |
| int DetailsPage::nextId() const |
| { |
| return LicenseWizard::Page_Conclusion; |
| } |
| //! [25] |
| |
| ConclusionPage::ConclusionPage(QWidget *parent) |
| : QWizardPage(parent) |
| { |
| setTitle(tr("Complete Your Registration")); |
| setPixmap(QWizard::WatermarkPixmap, QPixmap(":/images/watermark.png")); |
| |
| bottomLabel = new QLabel; |
| bottomLabel->setWordWrap(true); |
| |
| agreeCheckBox = new QCheckBox(tr("I agree to the terms of the license")); |
| |
| registerField("conclusion.agree*", agreeCheckBox); |
| |
| QVBoxLayout *layout = new QVBoxLayout; |
| layout->addWidget(bottomLabel); |
| layout->addWidget(agreeCheckBox); |
| setLayout(layout); |
| } |
| |
| //! [26] |
| int ConclusionPage::nextId() const |
| { |
| return -1; |
| } |
| //! [26] |
| |
| //! [27] |
| void ConclusionPage::initializePage() |
| { |
| QString licenseText; |
| |
| if (wizard()->hasVisitedPage(LicenseWizard::Page_Evaluate)) { |
| licenseText = tr("<u>Evaluation License Agreement:</u> " |
| "You can use this software for 30 days and make one " |
| "backup, but you are not allowed to distribute it."); |
| } else if (wizard()->hasVisitedPage(LicenseWizard::Page_Details)) { |
| licenseText = tr("<u>First-Time License Agreement:</u> " |
| "You can use this software subject to the license " |
| "you will receive by email."); |
| } else { |
| licenseText = tr("<u>Upgrade License Agreement:</u> " |
| "This software is licensed under the terms of your " |
| "current license."); |
| } |
| bottomLabel->setText(licenseText); |
| } |
| //! [27] |
| |
| //! [28] |
| void ConclusionPage::setVisible(bool visible) |
| { |
| QWizardPage::setVisible(visible); |
| |
| if (visible) { |
| //! [29] |
| wizard()->setButtonText(QWizard::CustomButton1, tr("&Print")); |
| wizard()->setOption(QWizard::HaveCustomButton1, true); |
| connect(wizard(), &QWizard::customButtonClicked, |
| this, &ConclusionPage::printButtonClicked); |
| //! [29] |
| } else { |
| wizard()->setOption(QWizard::HaveCustomButton1, false); |
| disconnect(wizard(), &QWizard::customButtonClicked, |
| this, &ConclusionPage::printButtonClicked); |
| } |
| } |
| //! [28] |
| |
| void ConclusionPage::printButtonClicked() |
| { |
| #if QT_CONFIG(printdialog) |
| QPrinter printer; |
| QPrintDialog dialog(&printer, this); |
| if (dialog.exec()) |
| QMessageBox::warning(this, tr("Print License"), |
| tr("As an environmentally friendly measure, the " |
| "license text will not actually be printed.")); |
| #endif |
| } |