aheinecke@404: /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik aheinecke@404: * Software engineering by Intevation GmbH aheinecke@404: * aheinecke@404: * This file is Free Software under the GNU GPL (v>=2) aheinecke@404: * and comes with ABSOLUTELY NO WARRANTY! aheinecke@404: * See LICENSE.txt for details. aheinecke@404: */ rrenkert@361: #include "createinstallerdialog.h" rrenkert@361: #include rrenkert@361: #include rrenkert@361: #include rrenkert@361: #include rrenkert@361: #include rrenkert@361: #include rrenkert@361: #include rrenkert@361: #include aheinecke@515: #include aheinecke@515: #include rrenkert@361: rrenkert@361: CreateInstallerDialog::CreateInstallerDialog(QMainWindow *parent) : rrenkert@361: QDialog(parent) rrenkert@361: { aheinecke@515: QSettings settings; rrenkert@414: setWindowTitle(tr("Create binary installer")); rrenkert@361: setupGUI(); rrenkert@414: resize(500, 250); aheinecke@515: mCertFile->setText(settings.value("CodeSignCert", QString()).toString()); aheinecke@515: mBinaryFolder->setText(settings.value("LastBinaryFolder", QString()).toString()); aheinecke@515: mSaveFile->setText(settings.value("LastBinOutputFolder", QString()).toString()); rrenkert@361: } rrenkert@361: rrenkert@361: void CreateInstallerDialog::setupGUI() rrenkert@361: { rrenkert@361: /* Top level layout / widgets */ rrenkert@361: QVBoxLayout *topLayout = new QVBoxLayout; rrenkert@414: QVBoxLayout *headerLayout = new QVBoxLayout; rrenkert@414: QHBoxLayout *headerSubLayout = new QHBoxLayout; rrenkert@428: QHBoxLayout *centerLayout = new QHBoxLayout; rrenkert@361: QHBoxLayout *bottomLayout = new QHBoxLayout; rrenkert@428: QVBoxLayout *labelLayout = new QVBoxLayout; rrenkert@428: QVBoxLayout *fieldLayout = new QVBoxLayout; rrenkert@428: QVBoxLayout *buttonLayout = new QVBoxLayout; rrenkert@361: rrenkert@414: QLabel *header = new QLabel("

" + tr("Create binary installer") + "

"); rrenkert@414: QLabel *description = new QLabel( aheinecke@515: tr("Create and sign a TrustBridge binary installer.")); rrenkert@414: headerSubLayout->insertSpacing(0, 40); rrenkert@414: headerSubLayout->addWidget(description); rrenkert@414: QFrame *headerSeparator = new QFrame(); rrenkert@414: headerSeparator->setFrameShape(QFrame::HLine); rrenkert@414: headerSeparator->setFrameShadow(QFrame::Sunken); rrenkert@414: headerLayout->addWidget(header); rrenkert@414: headerLayout->addLayout(headerSubLayout); rrenkert@414: headerLayout->addWidget(headerSeparator); rrenkert@428: headerLayout->insertSpacing(4, 10); rrenkert@361: aheinecke@515: QLabel *archiveLabel = new QLabel(tr("Select binary folder:")); aheinecke@515: QLabel *certLabel = new QLabel(tr("Select code signing certificate:")); rrenkert@428: QLabel *saveLabel = new QLabel(tr("Select output folder:")); rrenkert@428: labelLayout->addWidget(archiveLabel); rrenkert@428: labelLayout->addWidget(certLabel); rrenkert@428: labelLayout->addWidget(saveLabel); rrenkert@428: aheinecke@515: mBinaryFolder = new QLineEdit(); rrenkert@428: mCertFile = new QLineEdit(); rrenkert@428: mSaveFile = new QLineEdit(); aheinecke@515: fieldLayout->addWidget(mBinaryFolder); rrenkert@428: fieldLayout->addWidget(mCertFile); rrenkert@428: fieldLayout->addWidget(mSaveFile); rrenkert@428: rrenkert@361: QPushButton *archiveSelect = new QPushButton("..."); aheinecke@515: connect(archiveSelect, SIGNAL(clicked()), this, SLOT(openFolderSelect())); rrenkert@361: archiveSelect->setFixedWidth(30); rrenkert@361: QPushButton *certSelect = new QPushButton("..."); rrenkert@361: connect(certSelect, SIGNAL(clicked()), this, SLOT(openCertificateSelect())); rrenkert@361: certSelect->setFixedWidth(30); rrenkert@361: QPushButton *saveSelect = new QPushButton("..."); rrenkert@361: connect(saveSelect, SIGNAL(clicked()), this, SLOT(openSaveLocation())); rrenkert@361: saveSelect->setFixedWidth(30); rrenkert@428: buttonLayout->addWidget(archiveSelect); rrenkert@428: buttonLayout->addWidget(certSelect); rrenkert@428: buttonLayout->addWidget(saveSelect); rrenkert@361: rrenkert@428: centerLayout->addLayout(labelLayout); rrenkert@428: centerLayout->addLayout(fieldLayout); rrenkert@428: centerLayout->addLayout(buttonLayout); rrenkert@361: rrenkert@414: QPushButton *create = new QPushButton(tr("Create installer")); rrenkert@361: connect(create, SIGNAL(clicked()), this, SLOT(createInstaller())); rrenkert@414: QPushButton *cancel = new QPushButton(tr("Cancel")); rrenkert@414: connect(cancel, SIGNAL(clicked()), this, SLOT(close())); rrenkert@361: bottomLayout->insertStretch(0, 10); rrenkert@361: bottomLayout->addWidget(create); rrenkert@414: bottomLayout->addWidget(cancel); rrenkert@414: rrenkert@414: QFrame *bottomSeparator = new QFrame(); rrenkert@414: bottomSeparator->setFrameShape(QFrame::HLine); rrenkert@414: bottomSeparator->setFrameShadow(QFrame::Sunken); rrenkert@361: rrenkert@361: topLayout->addLayout(headerLayout); rrenkert@361: topLayout->addLayout(centerLayout); rrenkert@361: topLayout->insertStretch(2, 10); rrenkert@428: centerLayout->insertSpacing(3, 10); rrenkert@414: topLayout->addWidget(bottomSeparator); rrenkert@361: topLayout->addLayout(bottomLayout); rrenkert@361: rrenkert@361: setLayout(topLayout); rrenkert@361: rrenkert@361: return; rrenkert@361: } rrenkert@361: rrenkert@361: void CreateInstallerDialog::openCertificateSelect() rrenkert@361: { aheinecke@515: QSettings settings; rrenkert@361: QString certFile = QFileDialog::getOpenFileName( aheinecke@515: this, tr("Select certificate"), aheinecke@515: mCertFile->text().isEmpty() ? QDir::homePath() : mCertFile->text(), aheinecke@515: "*.pem *.der *.crt"); aheinecke@515: settings.setValue("CodeSignCert", certFile); rrenkert@361: mCertFile->setText(certFile); rrenkert@361: } rrenkert@361: aheinecke@515: void CreateInstallerDialog::openFolderSelect() rrenkert@361: { aheinecke@515: QSettings settings; aheinecke@515: QString archiveFolder = QFileDialog::getExistingDirectory( aheinecke@515: this, tr("Select binary folder"), aheinecke@515: mBinaryFolder->text().isEmpty() ? QDir::homePath() : mBinaryFolder->text()); aheinecke@515: mBinaryFolder->setText(archiveFolder); aheinecke@515: settings.setValue("LastBinaryFolder", archiveFolder); rrenkert@361: } rrenkert@361: rrenkert@361: void CreateInstallerDialog::openSaveLocation() rrenkert@361: { aheinecke@515: QSettings settings; rrenkert@361: QString saveFile = QFileDialog::getExistingDirectory( aheinecke@515: this, tr("Select target location"), aheinecke@515: mSaveFile->text().isEmpty() ? QDir::homePath() : mSaveFile->text()); rrenkert@361: mSaveFile->setText(saveFile); aheinecke@515: settings.setValue("LastBinOutputFolder", saveFile); aheinecke@515: } aheinecke@515: aheinecke@515: void CreateInstallerDialog::showErrorMessage(const QString &msg) aheinecke@515: { aheinecke@515: QMessageBox::warning(this, tr("Error!"), msg); rrenkert@361: } rrenkert@361: rrenkert@361: void CreateInstallerDialog::createInstaller() rrenkert@361: { aheinecke@515: QDir binDir(mBinaryFolder->text()); aheinecke@515: if (mBinaryFolder->text().isEmpty() && binDir.exists()) { aheinecke@515: showErrorMessage(tr("Please select an existing input folder.")); aheinecke@515: } rrenkert@361: qDebug() << "and now create the installer using:"; aheinecke@515: qDebug() << "source archive: " << mBinaryFolder->text(); rrenkert@361: qDebug() << "certificate: " << mCertFile->text(); rrenkert@361: qDebug() << "target" << mSaveFile->text(); rrenkert@361: }