/** * This file is part of GpgFrontend. * * GpgFrontend is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Foobar is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Foobar. If not, see . * * The initial version of the source code is inherited from gpg4usb-team. * Their source code version also complies with GNU General Public License. * * The source code version of this software was modified and released * by Saturneric starting on May 12, 2021. * */ #ifndef __GPGWIN_H__ #define __GPGWIN_H__ #include "gpg/GpgConstants.h" #include "gpg/result_analyse/DecryptResultAnalyse.h" #include "gpg/result_analyse/EncryptResultAnalyse.h" #include "gpg/result_analyse/SignResultAnalyse.h" #include "ui/FindWidget.h" #include "ui/GpgFrontendUI.h" #include "ui/KeyMgmt.h" #include "ui/KeyUploadDialog.h" #include "ui/WaitingDialog.h" #include "ui/Wizard.h" #include "ui/help/AboutDialog.h" #include "ui/settings/SettingsDialog.h" #include "ui/widgets/InfoBoardWidget.h" #include "ui/widgets/TextEdit.h" namespace GpgFrontend::UI { /** * @brief * */ class MainWindow : public QMainWindow { Q_OBJECT public: /** * @brief * */ MainWindow(); /** * ONLY Called from main() */ void init() noexcept; signals: void loaded(); public slots: void slotSetStatusBarText(const QString& text); protected: /** * @details Close event shows a save dialog, if there are unsaved documents on * exit. * @param event */ void closeEvent(QCloseEvent* event) override; public slots: /** * @details Open a new tab for path */ void slotOpenFile(QString& path); /** * @details Open dialog for encrypting file. */ void slotFileEncrypt(); /** * @details Open dialog for decrypting file. */ void slotFileDecrypt(); /** * @details Open dialog for signing file. */ void slotFileSign(); /** * @details Open dialog for verifying file. */ void slotFileVerify(); /** * @details Open dialog for signing file. */ void slotFileEncryptSign(); /** * @details Open dialog for verifying file. */ void slotFileDecryptVerify(); private slots: /** * @details encrypt the text of currently active textedit-page * with the currently checked keys */ void slotEncrypt(); /** * @details encrypt and sign the text of currently active textedit-page * with the currently checked keys */ void slotEncryptSign(); /** * @details Show a passphrase dialog and decrypt the text of currently active * tab. */ void slotDecrypt(); /** * @details Sign the text of currently active tab with the checked private * keys */ void slotSign(); /** * @details Verify the text of currently active tab and show verify * information. If document is signed with a key, which is not in keylist, * show import missing key from keyserver in Menu of verifynotification. */ void slotVerify(); /** * @details decrypt and verify the text of currently active textedit-page * with the currently checked keys */ void slotDecryptVerify(); /** * @details Show the details of the first of the first of selected keys */ void slotShowKeyDetails(); /** * @details Refresh key information of selected keys from default keyserver */ void refreshKeysFromKeyserver(); /** * @details upload the selected key to the keyserver */ void uploadKeyToServer(); /** * @details Open find widget. */ void slotFind(); /** * @details start the wizard */ void slotStartWizard(); /** * @details Import keys from currently active tab to keylist if possible. */ void slotImportKeyFromEdit(); /** * @details Append the selected keys to currently active textedit. */ void slotAppendSelectedKeys(); /** * @details Copy the mailaddress of selected key to clipboard. * Method for keylists contextmenu. */ void slotCopyMailAddressToClipboard(); /** * @details Open key management dialog. */ void slotOpenKeyManagement(); /** * @details Open File Opera Tab */ void slotOpenFileTab(); /** * @details Open settings-dialog. */ void slotOpenSettingsDialog(); // /** // * @details Show a warn message in status bar, if there are files in // * attachment folder. // */ // void slotCheckAttachmentFolder(); /** * @details Replace double linebreaks by single linebreaks in currently active * tab. */ void slotCleanDoubleLinebreaks(); /** * @details Cut the existing PGP header and footer from current tab. */ void slotCutPgpHeader(); /** * @details Add PGP header and footer to current tab. */ void slotAddPgpHeader(); /** * @details Disable tab related actions, if number of tabs is 0. * @param number number of the opened tabs and -1, if no tab is opened */ void slotDisableTabActions(int number); /** * @details get value of member restartNeeded to needed. * @param needed true, if application has to be restarted */ void slotSetRestartNeeded(bool needed); /** * @details called when need to upgrade. */ void slotVersionUpgrade(const SoftwareVersion& version); private: /** * @details Create actions for the main-menu and the context-menu of the * keylist. */ void createActions(); /** * @details create the menu of the main-window. */ void createMenus(); /** * @details Create edit-, crypt- and key-toolbars. */ void createToolBars(); /** * @details Create statusbar of mainwindow. */ void createStatusBar(); /** * @details Create keylist- and attachment-dockwindows. */ void createDockWindows(); /** * @details Create attachment-dockwindow. */ void createAttachmentDock(); /** * @details close attachment-dockwindow. */ void closeAttachmentDock(); /** * @details Load settings from ini-file. */ void restoreSettings(); /** * @details Save settings to ini-file. */ void saveSettings(); #ifdef ADVANCE_SUPPORT /** * @details Get full crypto text */ QString getCryptText(const QString& shortenCryptoText); /** * @details Shorten crypto text */ void shortenCryptText(); #endif /** * @brief return true, if restart is needed */ [[nodiscard]] bool getRestartNeeded() const; TextEdit* edit{}; /** Tabwidget holding the edit-windows */ QMenu* fileMenu{}; /** Submenu for file-operations*/ QMenu* editMenu{}; /** Submenu for text-operations*/ QMenu* cryptMenu{}; /** Submenu for crypt-operations */ QMenu* helpMenu{}; /** Submenu for help-operations */ QMenu* keyMenu{}; /** Submenu for key-operations */ QMenu* viewMenu{}; /** Submenu for view operations */ QMenu* importKeyMenu{}; /** Sumenu for import operations */ #ifdef SMTP_SUPPORT QMenu* emailMenu{}; /** Sumenu for email operations */ #endif QMenu* steganoMenu{}; /** Submenu for steganographic operations*/ QToolBar* cryptToolBar{}; /** Toolbar holding crypt actions */ QToolBar* fileToolBar{}; /** Toolbar holding file actions */ QToolBar* editToolBar{}; /** Toolbar holding edit actions */ QToolBar* specialEditToolBar{}; /** Toolbar holding special edit actions */ QToolBar* keyToolBar{}; /** Toolbar holding key operations */ QToolBar* emailToolBar{}; /** Toolbar holding key operations */ QToolButton* importButton{}; /** Toolbutton for import dropdown menu in toolbar */ QDockWidget* keyListDock{}; /** Encrypt Dock*/ QDockWidget* attachmentDock{}; /** Attachment Dock */ QDockWidget* infoBoardDock{}; QAction* newTabAct{}; /** Action to create new tab */ QAction* switchTabUpAct{}; /** Action to switch tab up*/ QAction* switchTabDownAct{}; /** Action to switch tab down */ QAction* openAct{}; /** Action to open file */ QAction* browserAct{}; /** Action to open file browser*/ QAction* saveAct{}; /** Action to save file */ QAction* saveAsAct{}; /** Action to save file as */ QAction* printAct{}; /** Action to print */ QAction* closeTabAct{}; /** Action to print */ QAction* quitAct{}; /** Action to quit application */ QAction* encryptAct{}; /** Action to encrypt text */ QAction* encryptSignAct{}; /** Action to encrypt and sign text */ QAction* decryptVerifyAct{}; /** Action to encrypt and sign text */ QAction* decryptAct{}; /** Action to decrypt text */ QAction* signAct{}; /** Action to sign text */ QAction* verifyAct{}; /** Action to verify text */ QAction* importKeyFromEditAct{}; /** Action to import key from edit */ QAction* cleanDoubleLinebreaksAct{}; /** Action to remove double line breaks */ QAction* appendSelectedKeysAct{}; /** Action to append selected keys to edit */ QAction* copyMailAddressToClipboardAct{}; /** Action to copy mail to clipboard */ QAction* openKeyManagementAct{}; /** Action to open key management */ QAction* copyAct{}; /** Action to copy text */ QAction* quoteAct{}; /** Action to quote text */ QAction* cutAct{}; /** Action to cut text */ QAction* pasteAct{}; /** Action to paste text */ QAction* selectAllAct{}; /** Action to select whole text */ QAction* findAct{}; /** Action to find text */ QAction* undoAct{}; /** Action to undo last action */ QAction* redoAct{}; /** Action to redo last action */ QAction* zoomInAct{}; /** Action to zoom in */ QAction* zoomOutAct{}; /** Action to zoom out */ QAction* aboutAct{}; /** Action to open about dialog */ QAction* checkUpdateAct{}; /** Action to open about dialog */ QAction* translateAct{}; /** Action to open about dialog */ QAction* openSettingsAct{}; /** Action to open settings dialog */ QAction* showKeyDetailsAct{}; /** Action to open key-details dialog */ QAction* startWizardAct{}; /** Action to open the wizard */ QAction* cutPgpHeaderAct{}; /** Action for cutting the PGP header */ QAction* addPgpHeaderAct{}; /** Action for adding the PGP header */ #ifdef SMTP_SUPPORT QAction* sendMailAct{}; /** Action for sending a email */ #endif QAction* importKeyFromFileAct{}; QAction* importKeyFromClipboardAct{}; QAction* importKeyFromKeyServerAct{}; QLabel* statusBarIcon{}; KeyList* mKeyList{}; InfoBoardWidget* infoBoard{}; QNetworkAccessManager* networkAccessManager{}; bool attachmentDockCreated{}; bool restartNeeded{}; bool prohibit_update_checking_ = false; }; } // namespace GpgFrontend::UI #endif // __GPGWIN_H__