installscript.js Example File

dynamicpage/packages/org.qtproject.ifw.example.dynamicpage/meta/installscript.js

  /**************************************************************************
  **
  ** Copyright (C) 2017 The Qt Company Ltd.
  ** Contact: https://www.qt.io/licensing/
  **
  ** This file is part of the Qt Installer Framework.
  **
  ** $QT_BEGIN_LICENSE:GPL-EXCEPT$
  ** 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.
  **
  ** GNU General Public License Usage
  ** Alternatively, this file may be used under the terms of the GNU
  ** General Public License version 3 as published by the Free Software
  ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
  ** included in the packaging of this file. Please review the following
  ** information to ensure the GNU General Public License requirements will
  ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
  **
  ** $QT_END_LICENSE$
  **
  **************************************************************************/

  var ComponentSelectionPage = null;

  var Dir = new function () {
      this.toNativeSparator = function (path) {
          if (systemInfo.productType === "windows")
              return path.replace(/\//g, '\\');
          return path;
      }
  };

  function Component() {
      if (installer.isInstaller()) {
          component.loaded.connect(this, Component.prototype.installerLoaded);
          ComponentSelectionPage = gui.pageById(QInstaller.ComponentSelection);

          installer.setDefaultPageVisible(QInstaller.TargetDirectory, false);
          installer.setDefaultPageVisible(QInstaller.ComponentSelection, false);
          installer.setDefaultPageVisible(QInstaller.LicenseCheck, false);
          if (systemInfo.productType === "windows")
              installer.setDefaultPageVisible(QInstaller.StartMenuSelection, false);
          installer.setDefaultPageVisible(QInstaller.ReadyForInstallation, false);
      }
  }

  Component.prototype.installerLoaded = function () {
      if (installer.addWizardPage(component, "TargetWidget", QInstaller.TargetDirectory)) {
          var widget = gui.pageWidgetByObjectName("DynamicTargetWidget");
          if (widget != null) {
              widget.targetChooser.clicked.connect(this, Component.prototype.chooseTarget);
              widget.targetDirectory.textChanged.connect(this, Component.prototype.targetChanged);

              widget.windowTitle = "Installation Folder";
              widget.targetDirectory.text = Dir.toNativeSparator(installer.value("TargetDir"));
          }
      }

      if (installer.addWizardPage(component, "InstallationWidget", QInstaller.ComponentSelection)) {
          var widget = gui.pageWidgetByObjectName("DynamicInstallationWidget");
          if (widget != null) {
              widget.customInstall.toggled.connect(this, Component.prototype.customInstallToggled);
              widget.defaultInstall.toggled.connect(this, Component.prototype.defaultInstallToggled);
              widget.completeInstall.toggled.connect(this, Component.prototype.completeInstallToggled);

              widget.defaultInstall.checked = true;
              widget.windowTitle = "Select Installation Type";
          }

          if (installer.addWizardPage(component, "LicenseWidget", QInstaller.LicenseCheck)) {
              var widget = gui.pageWidgetByObjectName("DynamicLicenseWidget");
              if (widget != null) {
                  widget.acceptLicense.toggled.connect(this, Component.prototype.checkAccepted);

                  widget.complete = false;
                  widget.declineLicense.checked = true;
                  widget.windowTitle = "License Agreement";
              }
          }

          if (installer.addWizardPage(component, "ReadyToInstallWidget", QInstaller.ReadyForInstallation)) {
              var widget = gui.pageWidgetByObjectName("DynamicReadyToInstallWidget");
              if (widget != null) {
                  widget.showDetails.checked = false;
                  widget.windowTitle = "Ready to Install";
              }
              var page = gui.pageByObjectName("DynamicReadyToInstallWidget");
              if (page != null) {
                  page.entered.connect(this, Component.prototype.readyToInstallWidgetEntered);
              }
          }
      }
  }

  Component.prototype.targetChanged = function (text) {
      var widget = gui.pageWidgetByObjectName("DynamicTargetWidget");
      if (widget != null) {
          if (text != "") {
              if (!installer.fileExists(text + "/components.xml")) {
                  widget.complete = true;
                  installer.setValue("TargetDir", text);
                  return;
              }
          }
          widget.complete = false;
      }
  }

  Component.prototype.chooseTarget = function () {
      var widget = gui.pageWidgetByObjectName("DynamicTargetWidget");
      if (widget != null) {
          var newTarget = QFileDialog.getExistingDirectory("Choose your target directory.", widget
              .targetDirectory.text);
          if (newTarget != "")
              widget.targetDirectory.text = Dir.toNativeSparator(newTarget);
      }
  }

  Component.prototype.customInstallToggled = function (checked) {
      if (checked) {
          if (ComponentSelectionPage != null)
              ComponentSelectionPage.selectDefault();
          installer.setDefaultPageVisible(QInstaller.ComponentSelection, true);
      }
  }

  Component.prototype.defaultInstallToggled = function (checked) {
      if (checked) {
          if (ComponentSelectionPage != null)
              ComponentSelectionPage.selectDefault();
          installer.setDefaultPageVisible(QInstaller.ComponentSelection, false);
      }
  }

  Component.prototype.completeInstallToggled = function (checked) {
      if (checked) {
          if (ComponentSelectionPage != null)
              ComponentSelectionPage.selectAll();
          installer.setDefaultPageVisible(QInstaller.ComponentSelection, false);
      }
  }

  Component.prototype.checkAccepted = function (checked) {
      var widget = gui.pageWidgetByObjectName("DynamicLicenseWidget");
      if (widget != null)
          widget.complete = checked;
  }

  Component.prototype.readyToInstallWidgetEntered = function () {
      var widget = gui.pageWidgetByObjectName("DynamicReadyToInstallWidget");
      if (widget != null) {
          var html = "<b>Components to install:</b><ul>";
          var components = installer.components();
          for (i = 0; i < components.length; ++i) {
              if (components[i].installationRequested())
                  html = html + "<li>" + components[i].displayName + "</li>"
          }
          html = html + "</ul>";
          widget.showDetailsBrowser.html = html;
      }
  }