diff options
Diffstat (limited to '')
-rw-r--r-- | src/ui/MainWindow.cpp | 385 |
1 files changed, 0 insertions, 385 deletions
diff --git a/src/ui/MainWindow.cpp b/src/ui/MainWindow.cpp deleted file mode 100644 index 2af6da78..00000000 --- a/src/ui/MainWindow.cpp +++ /dev/null @@ -1,385 +0,0 @@ -/** - * 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 <https://www.gnu.org/licenses/>. - * - * 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<[email protected]> starting on May 12, 2021. - * - */ - -#include "MainWindow.h" - -#include "ui/UserInterfaceUtils.h" -#ifdef RELEASE -#include "ui/function/VersionCheckThread.h" -#endif -#include "ui/SignalStation.h" -#include "ui/settings/GlobalSettingStation.h" - -namespace GpgFrontend::UI { - -MainWindow::MainWindow() { - this->setMinimumSize(1200, 700); - this->setWindowTitle(qApp->applicationName()); -} - -void MainWindow::init() noexcept { - try { - networkAccessManager = new QNetworkAccessManager(this); - - /* get path where app was started */ - setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); - setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); - - edit = new TextEdit(this); - setCentralWidget(edit); - - /* the list of Keys available*/ - mKeyList = new KeyList( - KeyMenuAbility::REFRESH | KeyMenuAbility::UNCHECK_ALL, this); - - infoBoard = new InfoBoardWidget(this); - - /* List of binary Attachments */ - attachmentDockCreated = false; - - /* Variable containing if restart is needed */ - this->slotSetRestartNeeded(false); - - createActions(); - createMenus(); - createToolBars(); - createStatusBar(); - createDockWindows(); - - connect(edit->tabWidget, SIGNAL(currentChanged(int)), this, - SLOT(slotDisableTabActions(int))); - connect(SignalStation::GetInstance(), - &SignalStation::signalRefreshStatusBar, this, - [=](const QString& message, int timeout) { - statusBar()->showMessage(message, timeout); - }); - - mKeyList->addMenuAction(appendSelectedKeysAct); - mKeyList->addMenuAction(copyMailAddressToClipboardAct); - mKeyList->addSeparator(); - mKeyList->addMenuAction(showKeyDetailsAct); - - restoreSettings(); - - // open filename if provided as first command line parameter - QStringList args = qApp->arguments(); - if (args.size() > 1) { - if (!args[1].startsWith("-")) { - if (QFile::exists(args[1])) edit->loadFile(args[1]); - } - } - edit->curTextPage()->setFocus(); - - auto& settings = GlobalSettingStation::GetInstance().GetUISettings(); - - if (!settings.exists("wizard") || - settings.lookup("wizard").getType() != libconfig::Setting::TypeGroup) - settings.add("wizard", libconfig::Setting::TypeGroup); - - auto& wizard = settings["wizard"]; - - // Show wizard, if the don't show wizard message box wasn't checked - // and keylist doesn't contain a private key - - if (!wizard.exists("show_wizard")) - wizard.add("show_wizard", libconfig::Setting::TypeBoolean) = true; - - bool show_wizard = true; - wizard.lookupValue("show_wizard", show_wizard); - - LOG(INFO) << "wizard show_wizard" << show_wizard; - - if (show_wizard) { - slotStartWizard(); - } - - emit loaded(); - - // if not prohibit update checking - if (!prohibit_update_checking_) { -#ifdef RELEASE - auto version_thread = new VersionCheckThread(); - - connect(version_thread, SIGNAL(finished()), version_thread, - SLOT(deleteLater())); - connect(version_thread, &VersionCheckThread::upgradeVersion, this, - &MainWindow::slotVersionUpgrade); - - version_thread->start(); -#endif - } - - } catch (...) { - LOG(FATAL) << _("Critical error occur while loading GpgFrontend."); - QMessageBox::critical(nullptr, _("Loading Failed"), - _("Critical error occur while loading GpgFrontend.")); - QCoreApplication::quit(); - exit(0); - } -} - -void MainWindow::restoreSettings() { - LOG(INFO) << _("Called"); - - try { - auto& settings = GlobalSettingStation::GetInstance().GetUISettings(); - - if (!settings.exists("window") || - settings.lookup("window").getType() != libconfig::Setting::TypeGroup) - settings.add("window", libconfig::Setting::TypeGroup); - - auto& window = settings["window"]; - - if (!window.exists("window_state")) - window.add("window_state", libconfig::Setting::TypeString) = - saveState().toBase64().toStdString(); - - std::string window_state = settings.lookup("window.window_state"); - // state sets pos & size of dock-widgets - this->restoreState( - QByteArray::fromBase64(QByteArray::fromStdString(window_state))); - - if (!window.exists("window_save")) - window.add("window_save", libconfig::Setting::TypeBoolean) = true; - - bool window_save; - window.lookupValue("window_save", window_save); - - // Restore window size & location - if (window_save) { - if (!window.exists("window_pos")) - window.add("window_pos", libconfig::Setting::TypeGroup); - - auto& window_pos = window["window_pos"]; - - if (!window_pos.exists("x")) - window_pos.add("x", libconfig::Setting::TypeInt) = 100; - - if (!window_pos.exists("y")) - window_pos.add("y", libconfig::Setting::TypeInt) = 100; - - int x, y; - window_pos.lookupValue("x", x); - window_pos.lookupValue("y", y); - - auto pos = QPoint(x, y); - - if (!window.exists("window_size")) - window.add("window_size", libconfig::Setting::TypeGroup); - - auto& window_size = window["window_size"]; - - if (!window_size.exists("width")) - window_size.add("width", libconfig::Setting::TypeInt) = 800; - - if (!window_size.exists("height")) - window_size.add("height", libconfig::Setting::TypeInt) = 450; - - int width, height; - window_size.lookupValue("width", width); - window_size.lookupValue("height", height); - - auto size = QSize(width, height); - this->resize(size); - this->move(pos); - } else { - this->resize(QSize(800, 450)); - this->move(QPoint(100, 100)); - } - - if (!window.exists("icon_size")) - window.add("icon_size", libconfig::Setting::TypeGroup); - - auto& icon_size = window["icon_size"]; - - if (!icon_size.exists("width")) - icon_size.add("width", libconfig::Setting::TypeInt) = 24; - - if (!icon_size.exists("height")) - icon_size.add("height", libconfig::Setting::TypeInt) = 24; - - int width = icon_size["width"], height = icon_size["height"]; - LOG(INFO) << "icon_size" << width << height; - - // info board font size - if (!window.exists("info_font_size")) - window.add("info_font_size", libconfig::Setting::TypeInt) = 10; - - // icons ize - this->setIconSize(QSize(width, height)); - importButton->setIconSize(QSize(width, height)); - - if (!settings.exists("keyserver") || - settings.lookup("keyserver").getType() != libconfig::Setting::TypeGroup) - settings.add("keyserver", libconfig::Setting::TypeGroup); - - auto& keyserver = settings["keyserver"]; - - if (!keyserver.exists("server_list")) { - keyserver.add("server_list", libconfig::Setting::TypeList); - - auto& server_list = keyserver["server_list"]; - server_list.add(libconfig::Setting::TypeString) = "http://keys.gnupg.net"; - server_list.add(libconfig::Setting::TypeString) = - "https://keyserver.ubuntu.com"; - server_list.add(libconfig::Setting::TypeString) = - "http://pool.sks-keyservers.net"; - } - - if (!keyserver.exists("default_server")) { - keyserver.add("default_server", libconfig::Setting::TypeString) = - "https://keyserver.ubuntu.com"; - } - - if (!window.exists("icon_style")) { - window.add("icon_style", libconfig::Setting::TypeInt) = - Qt::ToolButtonTextUnderIcon; - } - - int s_icon_style = window.lookup("icon_style"); - - // icon_style - auto icon_style = static_cast<Qt::ToolButtonStyle>(s_icon_style); - this->setToolButtonStyle(icon_style); - importButton->setToolButtonStyle(icon_style); - - if (!settings.exists("general") || - settings.lookup("general").getType() != libconfig::Setting::TypeGroup) - settings.add("general", libconfig::Setting::TypeGroup); - - auto& general = settings["general"]; - - if (!general.exists("save_key_checked")) { - general.add("save_key_checked", libconfig::Setting::TypeBoolean) = true; - } - - if (!general.exists("non_ascii_when_export")) { - general.add("non_ascii_when_export", libconfig::Setting::TypeBoolean) = - true; - } - - bool save_key_checked = true; - general.lookupValue("save_key_checked", save_key_checked); - - // Checked Keys - if (save_key_checked) { - if (!general.exists("save_key_checked_key_ids")) { - general.add("save_key_checked_key_ids", libconfig::Setting::TypeList); - } - auto key_ids_ptr = std::make_unique<KeyIdArgsList>(); - auto& save_key_checked_key_ids = general["save_key_checked_key_ids"]; - const auto key_ids_size = - general.lookup("save_key_checked_key_ids").getLength(); - for (auto i = 0; i < key_ids_size; i++) { - std::string key_id = save_key_checked_key_ids[i]; - LOG(INFO) << "get checked key id" << key_id; - key_ids_ptr->push_back(key_id); - } - mKeyList->setChecked(std::move(key_ids_ptr)); - } - - auto& smtp = settings["smtp"]; - - if (!smtp.exists("enable")) { - smtp.add("enable", libconfig::Setting::TypeBoolean) = true; - } - - prohibit_update_checking_ = false; - try { - prohibit_update_checking_ = - settings.lookup("network.prohibit_update_checking"); - } catch (...) { - LOG(ERROR) << _("Setting Operation Error") - << _("prohibit_update_checking"); - } - - } catch (...) { - LOG(ERROR) << "cannot resolve settings"; - } - - GlobalSettingStation::GetInstance().Sync(); -} - -void MainWindow::saveSettings() { - auto& settings = GlobalSettingStation::GetInstance().GetUISettings(); - - try { - // window position and size - settings["window"]["window_state"] = saveState().toBase64().toStdString(); - settings["window"]["window_pos"]["x"] = pos().x(); - settings["window"]["window_pos"]["y"] = pos().y(); - - settings["window"]["window_size"]["width"] = size().width(); - settings["window"]["window_size"]["height"] = size().height(); - - bool save_key_checked = settings.lookup("general.save_key_checked"); - - // keyid-list of private checked keys - if (save_key_checked) { - auto& key_ids = settings.lookup("general.save_key_checked_key_ids"); - const int key_ids_size = key_ids.getLength(); - for (auto i = 0; i < key_ids_size; i++) key_ids.remove(i); - auto key_ids_need_to_store = mKeyList->getChecked(); - - for (size_t i = 0; i < key_ids_need_to_store->size(); i++) { - std::string key_id = (*key_ids_need_to_store)[i]; - key_ids.add(libconfig::Setting::TypeString) = key_id; - } - - } else { - settings["general"].remove("save_key_checked"); - } - } catch (...) { - LOG(ERROR) << "cannot save settings"; - }; - - GlobalSettingStation::GetInstance().Sync(); -} - -void MainWindow::closeAttachmentDock() { - if (!attachmentDockCreated) { - return; - } - attachmentDock->close(); - attachmentDock->deleteLater(); - attachmentDockCreated = false; -} - -void MainWindow::closeEvent(QCloseEvent* event) { - /* - * ask to save changes, if there are - * modified documents in any tab - */ - if (edit->maybeSaveAnyTab()) { - saveSettings(); - event->accept(); - } else { - event->ignore(); - } - - // clear password from memory - // GpgContext::GetInstance().clearPasswordCache(); -} - -} // namespace GpgFrontend::UI |