view ui/createinstallerdialog.h @ 757:9bfaced5cf59

(issue56) Do not delete the certificate immediately When the selection changed the remove cert is triggered by a slection change event in the certificateitem. Deleting it immediately would delete the trigger of the call. Instead we deleteLater so that the widget get's cleaned up in the next mainloop iteration when it is no longer needed.
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 07 Jul 2014 12:54:02 +0200
parents 6c4fff146999
children 49168bcb02e2
line wrap: on
line source
/* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU GPL (v>=2)
 * and comes with ABSOLUTELY NO WARRANTY!
 * See LICENSE.txt for details.
 */
#ifndef CREATEINSTALLERDIALOG_H
#define CREATEINSTALLERDIALOG_H

#include <QDialog>
#include <QMainWindow>
#include <QLineEdit>
#include <QProcess>
#include <QProgressDialog>
#include <QDir>
/**
 * @file createinstallerdialog.h
 * @brief The dialog to show settings and create an installer.
 */

class QListWidget;
class QTemporaryDir;

class CreateInstallerDialog : public QDialog
{
    Q_OBJECT
public:
    /** @brief Create a dialog showing settings for the create installer
     * process
     * */
    CreateInstallerDialog(QMainWindow *parent);

private:
    void setupGUI();

    QLineEdit *mCertFile;
    QLineEdit *mBinaryFolder;
    QLineEdit *mSaveFile;

    QProcess mNSISProc;
    QProgressDialog mProgress;
    QString mInstallerPath;
    QTemporaryDir *mCurrentWorkingDir;

    /** @brief show an error message with QMessageBox
     *
     * @param [in] msg The message to show
     */
    void showErrorMessage(const QString &msg);

private slots:
    void openCertificateSelect();
    void openFolderSelect();
    void openSaveLocation();

    /**@brief entry point for installer creation
     *
     * check the selected parameters (certificate / folder etc.) and
     * create the nsis installer. This also creates the signatures. */
    void createInstaller();

    /**@brief Create tempoary dir with signed binaries from sourcedir
     *
     * Copies all files from the sourceDir to a temporary directory
     * and signs all .exe files in that directory.
     *
     * The caller needs to delete the temporary directory. If an error
     * occurs NULL is returned.
     *
     * @param[in] sourceDir the directory with the binaries to sign
     * @returns a pointer to a temporary dir containing the signed binaries
     * or NULL.
     */
    QTemporaryDir *codesignBinaries(const QDir& sourceDir);

    /**@brief Sign a file with the codesigning certificate from mCertFile
     *
     * Calls osslsigncode to sign the file pointed to in filePath.
     * The signing operation is logged.
     *
     * Sign information (hash algo / publisher / url) can be set at
     * build time or in the settings with the variables:
     *
     * sign_hash # the hash algorithm to use. Values are the same as in singtool
     * sign_publisher # the publisher information
     * sign_url # the product url to use in the signature
     *
     * @param[in] filePath the absolute path to the file.
     * @returns true on success, false on error
     */
    bool signFile(QString filePath);

    /* Slots for the creator process */
    void processError(QProcess::ProcessError error);
    void processFinished(int exitCode, QProcess::ExitStatus exitStatus);
};

/** @brief The dialog shown after the installer was created. */
class FinishedDialog : public QDialog
{
    Q_OBJECT

    public:
        /** @brief constructor for the dialog
         *
         * @param [in] parent the parent window
         * @param [in] msg the message to show
         * @param [in] details verbose information
         * @param [in] isErr if the dialog should be shown as an error*/
        FinishedDialog(QDialog *parent,
                       QString msg,
                       QString details,
                       bool isErr);

};


#endif // CREATEINSTALLERDIALOG_H

http://wald.intevation.org/projects/trustbridge/