Mercurial > trustbridge
view ui/mainwindow.h @ 633:6c090638b2b4
Use static buffer for module file name.
According to the msdn examle the return value of getmodulefilename
should be used to indicate success and not the size. And according
to comments on that function on Windows 8.1 it does not return
the needed size. So better be more robust and just use max_path
as a limit.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Mon, 23 Jun 2014 15:29:48 +0200 |
parents | 292c590ba9cb |
children | 129e611eaf50 |
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 MAINWINDOW_H #define MAINWINDOW_H /** * @file mainwindow.h * @brief Main UI controller */ #include <QSystemTrayIcon> #include <QMainWindow> #include <QSettings> #include <QMenuBar> #include <QListWidget> #include <QTextEdit> #include <QPushButton> #include <QLabel> #include <QCheckBox> #include "downloader.h" #include "certificatelist.h" class QMenu; class QAction; class QTimer; Q_DECLARE_METATYPE(Certificate); class MainWindow : public QMainWindow { Q_OBJECT public: /**@brief create a new Main Window object * * In tray mode this window is not shown and only shows * notification messages if there is some actionable state * reached. If tray mode is true it also exits after * an update check. * * @param[in] trayMode set the tray mode * */ MainWindow(bool trayMode); void setMessage(const QString message) {mCurMessage = message;} QString getMessage() {return mCurMessage;} enum CurrentState { BeforeDownload, NewListAvailable, NewSoftwareAvailable, DownloadingSW, TransferError, NothingChanged }; CurrentState getState() {return mCurState;} void setState(CurrentState state) {mCurState = state;} private slots: void showMessage(); void iconActivated(QSystemTrayIcon::ActivationReason reason); void checkUpdates(bool downloadSW = false); void handleNewList(const QString& fileName, const QDateTime& modDate); void handleNewSW(const QString& fileName, const QDateTime& modDate); void downloaderError(const QString &message, SSLConnection::ErrorCode error); /** @brief Trigger the appropiate action depending on the state */ void messageClicked(); void showHelp(); void showAbout(); void showDetails(QListWidgetItem*); void resizeButtons(); void installerError(const QString& errMsg); void installerSuccess(); void installCerts(); void saveAutoUpdate(int state); void saveAutoStart(int state); /** @brief check for running software that needs to close before installing * * This function calls installCerts if no software is running otherwise * it informs the user about the software that still needs to be closed. */ void checkAndInstallCerts(); /** @brief get the last modified date on the download server for * the current version. * * After the initial installation this function can be used to * determine the DateTime that corresponds to the currently installed * version on the download server. * * Calls setLastModifiedSWDate on success. Otherwise downloaderError * is triggered. */ void getLastModForCurrentVersion(); /** @brief set the last modified software date/time * * The last modifiedSWDate is the corresponding last modified * timestamp from the download server vor the currently installed version. */ void setLastModifiedSWDate(const QDateTime &date); /** @brief saves the currently unselected certificates * * This creates / updates a qsettings section that * [unselected] that contains the certificates that * were unselected previously. * * Unselected are certificates that are unchecked * in the certListWidget * * Returns false on error. */ bool saveUnselectedCertificates(); /** @brief loads previously unselected certificates from settings * * The certificates are strored in the list mPreviouslyUnselected. * * On error mPreviouslyUnselected is empty after this call. */ void loadUnselectedCertificates(); protected slots: /** @brief cleanup and close the main window * * Perform a clean exit (saving state etc.) and close * the application */ virtual void closeApp(); /* @brief Execute the file fileName to install the softwareupdate. * * Once the installer process is started this function terminates * the application. */ void installNewSW(const QString& fileName, const QDateTime& modDate); private: /** @brief check the integrity of available certificate lists. * * Note: Do not use this as a local trust check as this only works on * FileNames where the underlying files can change. This * is just meant to check if the downloaded data was somehow * removed or corrupted. It also initializes mListToInstall * and mInstalledList. */ void verifyListData(); /** @brief check the integrity of available software updates. * * Note: Do not use this as a local trust check as this only works on * FileNames where the underlying files can change. This * is just meant to check if the downloaded data was somehow * removed or corrupted. */ void verifySWData(); void createTrayIcon(); void createActions(); void createMenuBar(); void createContent(); void loadCertificateList(); /** @brief Create a separator item for the certificate list. * * The item uses a SeparatorItemDelegate for layout and styling at the given * index. * * @param[in] text The text for the item. * @param[in] index The index of the item. * * @return The new separator item. */ QListWidgetItem* createSeparator(const QString &text, int index); /** @brief Create a certificate list item for the list. * * The item uses a CertificateItemDelegate for layout and styling. * * @param[in] text The certificate to display. * @param[in] status The certificate status. * @param[in] index The index of the item. * * @return The new separator item. */ QListWidgetItem* createListItem(const Certificate &certificate, Certificate::Status status, int index); /* Are we running in tray mode ?*/ const bool mTrayMode; /* The message currently shown at intervals */ QString mCurMessage; QString mInstalledSWVersion; QString mInstalledListVersion; QSettings mSettings; QSystemTrayIcon *mTrayIcon; QTimer *mMessageTimer; QMenu *mTrayMenu; QAction *mCheckUpdates; QAction *mQuitAction; CurrentState mCurState; QMenuBar *mMenuBar; /* The current list that should be installed */ CertificateList mListToInstall; /* The last list that we installed */ CertificateList mInstalledList; /* Previously made "unselect" choices in the form of * base64lines with I:/R: prefix */ QStringList mPreviouslyUnselected; QListWidget *mCertListWidget; QLabel *mSubjectCN; QLabel *mSubjectO; QLabel *mIssuerCN; QLabel *mIssuerO; QLabel *mValidFrom; QLabel *mValidTo; QLabel *mFingerprint; QLabel *mCurrentListDate; QLabel *mNewListDate; QCheckBox *mAutoUpdateOption; QCheckBox *mAutoStartOption; QPushButton *installButton; QPushButton *quitButton; }; #endif // MAINWINDOW_H