aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/ui/CMakeLists.txt1
-rw-r--r--src/ui/dialog/gnupg/GnuPGControllerDialog.cpp361
-rw-r--r--src/ui/dialog/gnupg/GnuPGControllerDialog.h104
-rw-r--r--src/ui/main_window/MainWindow.cpp5
-rw-r--r--src/ui/main_window/MainWindow.h6
-rw-r--r--src/ui/main_window/MainWindowSlotUI.cpp2
-rw-r--r--src/ui/main_window/MainWindowUI.cpp9
-rw-r--r--ui/GnuPGControllerDialog.ui201
8 files changed, 688 insertions, 1 deletions
diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt
index 176a406e..ba72c49a 100644
--- a/src/ui/CMakeLists.txt
+++ b/src/ui/CMakeLists.txt
@@ -36,6 +36,7 @@ aux_source_directory(thread UI_SOURCE)
aux_source_directory(dialog/details UI_SOURCE)
aux_source_directory(struct UI_SOURCE)
aux_source_directory(dialog/import_export UI_SOURCE)
+aux_source_directory(dialog/gnupg UI_SOURCE)
aux_source_directory(dialog UI_SOURCE)
# define libgpgfrontend_ui
diff --git a/src/ui/dialog/gnupg/GnuPGControllerDialog.cpp b/src/ui/dialog/gnupg/GnuPGControllerDialog.cpp
new file mode 100644
index 00000000..3e6f2534
--- /dev/null
+++ b/src/ui/dialog/gnupg/GnuPGControllerDialog.cpp
@@ -0,0 +1,361 @@
+/**
+ * Copyright (C) 2021 Saturneric
+ *
+ * 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.
+ *
+ * GpgFrontend 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 GpgFrontend. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from
+ * the gpg4usb project, which is under GPL-3.0-or-later.
+ *
+ * All the source code of GpgFrontend was modified and released by
+ * Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+
+#include "GnuPGControllerDialog.h"
+
+#include "SignalStation.h"
+#include "UserInterfaceUtils.h"
+#include "core/function/GlobalSettingStation.h"
+#include "ui/dialog/GeneralDialog.h"
+#include "ui/main_window/MainWindow.h"
+#include "ui_GnuPGControllerDialog.h"
+
+namespace GpgFrontend::UI {
+
+GnuPGControllerDialog::GnuPGControllerDialog(QWidget* parent)
+ : GeneralDialog("GnuPGControllerDialog", parent),
+ ui_(std::make_shared<Ui_GnuPGControllerDialog>()) {
+ ui_->setupUi(this);
+
+ ui_->generalBox->setTitle(_("General"));
+ ui_->keyDatabaseGroupBox->setTitle(_("Key Database"));
+ ui_->advanceGroupBox->setTitle(_("Advanced"));
+
+ ui_->asciiModeCheckBox->setText(_("No ASCII Mode"));
+ ui_->usePinentryAsPasswordInputDialogCheckBox->setText(
+ _("Use Pinentry as Password Input Dialog"));
+ ui_->useCustomGnuPGInstallPathCheckBox->setText(_("Use Custom GnuPG"));
+ ui_->useCustomGnuPGInstallPathButton->setText(_("Select GnuPG Path"));
+ ui_->keyDatabseUseCustomCheckBox->setText(
+ _("Use Custom GnuPG Key Database Path"));
+ ui_->customKeyDatabasePathSelectButton->setText(
+ _("Select Key Database Path"));
+
+ // announce main window
+ connect(this, &GnuPGControllerDialog::SignalRestartNeeded,
+ SignalStation::GetInstance(),
+ &SignalStation::SignalRestartApplication);
+
+ connect(ui_->keyDatabseUseCustomCheckBox, &QCheckBox::stateChanged, this,
+ [=](int state) {
+ ui_->customKeyDatabasePathSelectButton->setDisabled(
+ state != Qt::CheckState::Checked);
+ });
+
+ connect(ui_->useCustomGnuPGInstallPathCheckBox, &QCheckBox::stateChanged,
+ this, [=](int state) {
+ ui_->useCustomGnuPGInstallPathButton->setDisabled(
+ state != Qt::CheckState::Checked);
+ });
+
+ connect(ui_->keyDatabseUseCustomCheckBox, &QCheckBox::stateChanged, this,
+ &GnuPGControllerDialog::slot_update_custom_key_database_path_label);
+
+ connect(ui_->useCustomGnuPGInstallPathCheckBox, &QCheckBox::stateChanged,
+ this,
+ &GnuPGControllerDialog::slot_update_custom_gnupg_install_path_label);
+
+ connect(
+ ui_->customKeyDatabasePathSelectButton, &QPushButton::clicked, this,
+ [=]() {
+ QString selected_custom_key_database_path =
+ QFileDialog::getExistingDirectory(
+ this, _("Open Directory"), {},
+ QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+
+ SPDLOG_DEBUG("key databse path selected: {}",
+ selected_custom_key_database_path.toStdString());
+
+ if (!selected_custom_key_database_path.isEmpty()) {
+ auto& settings = GlobalSettingStation::GetInstance().GetUISettings();
+ auto& general = settings["general"];
+
+ // update settings
+ if (!general.exists("custom_key_database_path"))
+ general.add("custom_key_database_path",
+ libconfig::Setting::TypeString) =
+ selected_custom_key_database_path.toStdString();
+ else {
+ general["custom_key_database_path"] =
+ selected_custom_key_database_path.toStdString();
+ }
+
+ // announce the restart
+ this->slot_set_restart_needed(DEEP_RESTART_CODE);
+
+ // update ui
+ this->slot_update_custom_key_database_path_label(
+ this->ui_->keyDatabseUseCustomCheckBox->checkState());
+ }
+ });
+
+ connect(
+ ui_->useCustomGnuPGInstallPathButton, &QPushButton::clicked, this, [=]() {
+ QString selected_custom_gnupg_install_path =
+ QFileDialog::getExistingDirectory(
+ this, _("Open Directory"), {},
+ QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+
+ SPDLOG_DEBUG("gnupg install path selected: {}",
+ selected_custom_gnupg_install_path.toStdString());
+
+ if (!selected_custom_gnupg_install_path.isEmpty()) {
+ auto& settings = GlobalSettingStation::GetInstance().GetUISettings();
+ auto& general = settings["general"];
+
+ // update settings
+ if (!general.exists("custom_gnupg_install_path"))
+ general.add("custom_gnupg_install_path",
+ libconfig::Setting::TypeString) =
+ selected_custom_gnupg_install_path.toStdString();
+ else {
+ general["custom_gnupg_install_path"] =
+ selected_custom_gnupg_install_path.toStdString();
+ }
+
+ // announce the restart
+ this->slot_set_restart_needed(DEEP_RESTART_CODE);
+
+ // update ui
+ this->slot_update_custom_gnupg_install_path_label(
+ this->ui_->useCustomGnuPGInstallPathCheckBox->checkState());
+ }
+ });
+
+ connect(ui_->usePinentryAsPasswordInputDialogCheckBox,
+ &QCheckBox::stateChanged, this, [=](int state) {
+ // announce the restart
+ this->slot_set_restart_needed(DEEP_RESTART_CODE);
+ });
+
+#ifndef MACOS
+ connect(ui_->buttonBox, &QDialogButtonBox::accepted, this,
+ &GnuPGControllerDialog::SlotAccept);
+ connect(ui_->buttonBox, &QDialogButtonBox::rejected, this,
+ &GnuPGControllerDialog::reject);
+#else
+
+ // macOS style settings
+ ui_->buttonBox->setDisabled(true);
+ ui_->buttonBox->setHidden(true);
+
+ connect(this, &QDialog::finished, this, &GnuPGControllerDialog::SlotAccept);
+ connect(this, &QDialog::finished, this, &GnuPGControllerDialog::deleteLater);
+#endif
+
+ setWindowTitle(_("GnuPG Controller"));
+ set_settings();
+}
+
+void GnuPGControllerDialog::SlotAccept() {
+ apply_settings();
+
+ SPDLOG_DEBUG("gnupg controller apply done");
+
+ // write settings to filesystem
+ GlobalSettingStation::GetInstance().SyncSettings();
+
+ SPDLOG_DEBUG("restart needed: {}", get_restart_needed());
+ if (get_restart_needed()) {
+ emit SignalRestartNeeded(get_restart_needed());
+ }
+ close();
+}
+
+void GnuPGControllerDialog::slot_update_custom_key_database_path_label(
+ int state) {
+ if (state != Qt::CheckState::Checked) {
+ ui_->currentKeyDatabasePathLabel->setText(QString::fromStdString(
+ GpgContext::GetInstance().GetInfo(false).DatabasePath));
+
+ // hide label (not necessary to show the default path)
+ this->ui_->currentKeyDatabasePathLabel->setHidden(true);
+ } else {
+ // read from settings file
+ std::string custom_key_database_path;
+ try {
+ auto& settings =
+ GpgFrontend::GlobalSettingStation::GetInstance().GetUISettings();
+ custom_key_database_path = static_cast<std::string>(
+ settings.lookup("general.custom_key_database_path"));
+
+ } catch (...) {
+ SPDLOG_ERROR("setting operation error: custom_key_database_path");
+ }
+
+ SPDLOG_DEBUG("selected_custom_key_database_path from settings: {}",
+ custom_key_database_path);
+
+ // set label value
+ if (!custom_key_database_path.empty()) {
+ ui_->currentKeyDatabasePathLabel->setText(
+ QString::fromStdString(custom_key_database_path));
+ this->ui_->currentKeyDatabasePathLabel->setHidden(false);
+ } else {
+ this->ui_->currentKeyDatabasePathLabel->setHidden(true);
+ }
+ }
+}
+
+void GnuPGControllerDialog::slot_update_custom_gnupg_install_path_label(
+ int state) {
+ if (state != Qt::CheckState::Checked) {
+ ui_->currentCustomGnuPGInstallPathLabel->setText(QString::fromStdString(
+ GpgContext::GetInstance().GetInfo(false).GnuPGHomePath));
+
+ // hide label (not necessary to show the default path)
+ this->ui_->currentCustomGnuPGInstallPathLabel->setHidden(true);
+ } else {
+ // read from settings file
+ std::string custom_gnupg_install_path;
+ try {
+ auto& settings =
+ GpgFrontend::GlobalSettingStation::GetInstance().GetUISettings();
+ custom_gnupg_install_path = static_cast<std::string>(
+ settings.lookup("general.custom_gnupg_install_path"));
+
+ } catch (...) {
+ SPDLOG_ERROR("setting operation error: custom_gnupg_install_path");
+ }
+
+ SPDLOG_DEBUG("custom_gnupg_install_path from settings: {}",
+ custom_gnupg_install_path);
+
+ // set label value
+ if (!custom_gnupg_install_path.empty()) {
+ ui_->currentCustomGnuPGInstallPathLabel->setText(
+ QString::fromStdString(custom_gnupg_install_path));
+ this->ui_->currentCustomGnuPGInstallPathLabel->setHidden(false);
+ } else {
+ this->ui_->currentCustomGnuPGInstallPathLabel->setHidden(true);
+ }
+ }
+}
+
+void GnuPGControllerDialog::set_settings() {
+ auto& settings = GlobalSettingStation::GetInstance().GetUISettings();
+
+ try {
+ bool non_ascii_when_export =
+ settings.lookup("general.non_ascii_when_export");
+ SPDLOG_DEBUG("non_ascii_when_export: {}", non_ascii_when_export);
+ if (non_ascii_when_export)
+ ui_->asciiModeCheckBox->setCheckState(Qt::Checked);
+ } catch (...) {
+ SPDLOG_ERROR("setting operation error: non_ascii_when_export");
+ }
+
+ try {
+ bool use_custom_key_database_path =
+ settings.lookup("general.use_custom_key_database_path");
+ if (use_custom_key_database_path)
+ ui_->keyDatabseUseCustomCheckBox->setCheckState(Qt::Checked);
+ } catch (...) {
+ SPDLOG_ERROR("setting operation error: use_custom_key_database_path");
+ }
+
+ this->slot_update_custom_key_database_path_label(
+ ui_->keyDatabseUseCustomCheckBox->checkState());
+
+ try {
+ bool use_custom_gnupg_install_path =
+ settings.lookup("general.use_custom_gnupg_install_path");
+ if (use_custom_gnupg_install_path)
+ ui_->useCustomGnuPGInstallPathCheckBox->setCheckState(Qt::Checked);
+ } catch (...) {
+ SPDLOG_ERROR("setting operation error: use_custom_gnupg_install_path");
+ }
+
+ try {
+ bool use_pinentry_as_password_input_dialog =
+ settings.lookup("general.use_pinentry_as_password_input_dialog");
+ if (use_pinentry_as_password_input_dialog)
+ ui_->usePinentryAsPasswordInputDialogCheckBox->setCheckState(Qt::Checked);
+ } catch (...) {
+ SPDLOG_ERROR(
+ "setting operation error: use_pinentry_as_password_input_dialog");
+ }
+
+ this->slot_update_custom_gnupg_install_path_label(
+ ui_->useCustomGnuPGInstallPathCheckBox->checkState());
+}
+
+void GnuPGControllerDialog::apply_settings() {
+ auto& settings =
+ GpgFrontend::GlobalSettingStation::GetInstance().GetUISettings();
+
+ if (!settings.exists("general") ||
+ settings.lookup("general").getType() != libconfig::Setting::TypeGroup)
+ settings.add("general", libconfig::Setting::TypeGroup);
+
+ auto& general = settings["general"];
+
+ if (!general.exists("non_ascii_when_export"))
+ general.add("non_ascii_when_export", libconfig::Setting::TypeBoolean) =
+ ui_->asciiModeCheckBox->isChecked();
+ else {
+ general["non_ascii_when_export"] = ui_->asciiModeCheckBox->isChecked();
+ }
+
+ if (!general.exists("use_custom_key_database_path"))
+ general.add("use_custom_key_database_path",
+ libconfig::Setting::TypeBoolean) =
+ ui_->keyDatabseUseCustomCheckBox->isChecked();
+ else {
+ general["use_custom_key_database_path"] =
+ ui_->keyDatabseUseCustomCheckBox->isChecked();
+ }
+
+ if (!general.exists("use_custom_gnupg_install_path"))
+ general.add("use_custom_gnupg_install_path",
+ libconfig::Setting::TypeBoolean) =
+ ui_->useCustomGnuPGInstallPathCheckBox->isChecked();
+ else {
+ general["use_custom_gnupg_install_path"] =
+ ui_->useCustomGnuPGInstallPathCheckBox->isChecked();
+ }
+
+ if (!general.exists("use_pinentry_as_password_input_dialog"))
+ general.add("use_pinentry_as_password_input_dialog",
+ libconfig::Setting::TypeBoolean) =
+ ui_->usePinentryAsPasswordInputDialogCheckBox->isChecked();
+ else {
+ general["use_pinentry_as_password_input_dialog"] =
+ ui_->usePinentryAsPasswordInputDialogCheckBox->isChecked();
+ }
+}
+
+int GnuPGControllerDialog::get_restart_needed() const {
+ return this->restart_needed_;
+}
+
+void GnuPGControllerDialog::slot_set_restart_needed(int mode) {
+ this->restart_needed_ = mode;
+}
+
+} // namespace GpgFrontend::UI
diff --git a/src/ui/dialog/gnupg/GnuPGControllerDialog.h b/src/ui/dialog/gnupg/GnuPGControllerDialog.h
new file mode 100644
index 00000000..497f293a
--- /dev/null
+++ b/src/ui/dialog/gnupg/GnuPGControllerDialog.h
@@ -0,0 +1,104 @@
+/**
+ * Copyright (C) 2021 Saturneric
+ *
+ * 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.
+ *
+ * GpgFrontend 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 GpgFrontend. If not, see <https://www.gnu.org/licenses/>.
+ *
+ * The initial version of the source code is inherited from
+ * the gpg4usb project, which is under GPL-3.0-or-later.
+ *
+ * All the source code of GpgFrontend was modified and released by
+ * Saturneric<[email protected]> starting on May 12, 2021.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ */
+
+#ifndef GPGFRONTEND_GNUPGCONTROLLERDIALOGLOG_H
+#define GPGFRONTEND_GNUPGCONTROLLERDIALOGLOG_H
+
+#include "ui/GpgFrontendUI.h"
+#include "ui/dialog/GeneralDialog.h"
+
+class Ui_GnuPGControllerDialog;
+
+namespace GpgFrontend::UI {
+class GnuPGControllerDialog : public GeneralDialog {
+ Q_OBJECT
+ public:
+ /**
+ * @brief Construct a new General Tab object
+ *
+ * @param parent
+ */
+ explicit GnuPGControllerDialog(QWidget* parent = nullptr);
+
+ public slots:
+
+ /**
+ * @brief
+ *
+ */
+ void SlotAccept();
+
+ signals:
+
+ /**
+ * @brief
+ *
+ * @param needed
+ */
+ void SignalRestartNeeded(int);
+
+ private slots:
+
+ /**
+ * @brief
+ *
+ * @param needed
+ */
+ void slot_set_restart_needed(int);
+
+ /**
+ * @brief
+ *
+ */
+ void slot_update_custom_key_database_path_label(int state);
+
+ /**
+ * @brief
+ *
+ */
+ void slot_update_custom_gnupg_install_path_label(int state);
+
+ private:
+ std::shared_ptr<Ui_GnuPGControllerDialog> ui_; ///<
+ int restart_needed_{0}; ///<
+
+ /**
+ * @brief Get the Restart Needed object
+ *
+ * @return true
+ * @return false
+ */
+ int get_restart_needed() const;
+
+ void set_settings();
+
+ void apply_settings();
+};
+} // namespace GpgFrontend::UI
+
+#endif // GPGFRONTEND_GNUPGCONTROLLERDIALOGLOG_H
diff --git a/src/ui/main_window/MainWindow.cpp b/src/ui/main_window/MainWindow.cpp
index b38646cf..c59ce13c 100644
--- a/src/ui/main_window/MainWindow.cpp
+++ b/src/ui/main_window/MainWindow.cpp
@@ -28,6 +28,7 @@
#include "MainWindow.h"
+#include "core/GpgConstants.h"
#include "core/function/GlobalSettingStation.h"
#include "core/function/gpg/GpgAdvancedOperator.h"
#include "ui/SignalStation.h"
@@ -75,6 +76,10 @@ void MainWindow::Init() noexcept {
// show menu bar
this->menuBar()->show();
+ connect(this, &MainWindow::SignalRestartApplication,
+ SignalStation::GetInstance(),
+ &SignalStation::SignalRestartApplication);
+
connect(edit_->tab_widget_, &QTabWidget::currentChanged, this,
&MainWindow::slot_disable_tab_actions);
connect(SignalStation::GetInstance(),
diff --git a/src/ui/main_window/MainWindow.h b/src/ui/main_window/MainWindow.h
index 04a82759..8f0b2e4d 100644
--- a/src/ui/main_window/MainWindow.h
+++ b/src/ui/main_window/MainWindow.h
@@ -92,6 +92,11 @@ class MainWindow : public GeneralMainWindow {
*/
void SignalLoaded();
+ /**
+ * @brief
+ */
+ void SignalRestartApplication(int);
+
public slots:
/**
@@ -400,6 +405,7 @@ class MainWindow : public GeneralMainWindow {
QAction* clean_double_line_breaks_act_{}; ///< Action to remove double line
///< breaks
+ QAction* gnupg_controller_open_act_{}; ///<
QAction* clean_gpg_password_cache_act_{}; ///<
QAction* reload_components_act_{}; ///<
QAction* restart_components_act_{}; ///<
diff --git a/src/ui/main_window/MainWindowSlotUI.cpp b/src/ui/main_window/MainWindowSlotUI.cpp
index 8839df4b..0b7f4c64 100644
--- a/src/ui/main_window/MainWindowSlotUI.cpp
+++ b/src/ui/main_window/MainWindowSlotUI.cpp
@@ -127,7 +127,7 @@ void MainWindow::slot_open_settings_dialog() {
if (get_restart_needed()) {
if (edit_->MaybeSaveAnyTab()) {
save_settings();
- qApp->exit(get_restart_needed());
+ emit SignalRestartApplication(get_restart_needed());
}
}
});
diff --git a/src/ui/main_window/MainWindowUI.cpp b/src/ui/main_window/MainWindowUI.cpp
index 1034df52..36aa2f12 100644
--- a/src/ui/main_window/MainWindowUI.cpp
+++ b/src/ui/main_window/MainWindowUI.cpp
@@ -29,6 +29,7 @@
#include "MainWindow.h"
#include "core/function/GlobalSettingStation.h"
#include "core/function/gpg/GpgAdvancedOperator.h"
+#include "dialog/gnupg/GnuPGControllerDialog.h"
#include "ui/UserInterfaceUtils.h"
namespace GpgFrontend::UI {
@@ -330,6 +331,12 @@ void MainWindow::create_actions() {
}
});
+ gnupg_controller_open_act_ = new QAction(_("GnuPG Controller"), this);
+ gnupg_controller_open_act_->setIcon(QIcon(":configure.png"));
+ gnupg_controller_open_act_->setToolTip(_("Open GnuPG Controller Dialog"));
+ connect(gnupg_controller_open_act_, &QAction::triggered, this,
+ [this]() { (new GnuPGControllerDialog(this))->exec(); });
+
/*
* About Menu
*/
@@ -497,6 +504,8 @@ void MainWindow::create_menus() {
gpg_menu_->addSeparator();
gpg_menu_->addAction(reload_components_act_);
gpg_menu_->addAction(restart_components_act_);
+ gpg_menu_->addSeparator();
+ gpg_menu_->addAction(gnupg_controller_open_act_);
steganography_menu_ = menuBar()->addMenu(_("Steganography"));
steganography_menu_->addAction(cut_pgp_header_act_);
diff --git a/ui/GnuPGControllerDialog.ui b/ui/GnuPGControllerDialog.ui
new file mode 100644
index 00000000..9c9d7180
--- /dev/null
+++ b/ui/GnuPGControllerDialog.ui
@@ -0,0 +1,201 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>GnuPGControllerDialog</class>
+ <widget class="QDialog" name="GnuPGControllerDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>607</width>
+ <height>581</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>GnuPG Controller</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QGroupBox" name="generalBox">
+ <property name="title">
+ <string>General</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_7">
+ <item row="0" column="0">
+ <layout class="QVBoxLayout" name="verticalLayout_7">
+ <item>
+ <widget class="QCheckBox" name="asciiModeCheckBox">
+ <property name="text">
+ <string>No ASCII Mode</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="usePinentryAsPasswordInputDialogCheckBox">
+ <property name="text">
+ <string>Use Pinentry as Password Input Dialog</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="keyDatabaseGroupBox">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="title">
+ <string>Key Database</string>
+ </property>
+ <property name="flat">
+ <bool>false</bool>
+ </property>
+ <property name="checkable">
+ <bool>false</bool>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <layout class="QVBoxLayout" name="verticalLayout_6">
+ <item>
+ <widget class="QCheckBox" name="keyDatabseUseCustomCheckBox">
+ <property name="text">
+ <string>Use Custom GnuPG Key Database Path</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="currentKeyDatabasePathLabel">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="customKeyDatabasePathSelectButton">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Select Key Database Path</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="advanceGroupBox">
+ <property name="title">
+ <string>Advance</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="0" column="0">
+ <layout class="QVBoxLayout" name="verticalLayout_9">
+ <item>
+ <widget class="QCheckBox" name="useCustomGnuPGInstallPathCheckBox">
+ <property name="text">
+ <string>Use Custom GnuPG</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="currentCustomGnuPGInstallPathLabel">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="useCustomGnuPGInstallPathButton">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Select GnuPG Path</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Tips: please select a directroy where gpgconf is located.</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>GnuPGControllerDialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>GnuPGControllerDialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>