diff options
Diffstat (limited to 'src/ui/widgets/FilePage.cpp')
-rw-r--r-- | src/ui/widgets/FilePage.cpp | 107 |
1 files changed, 76 insertions, 31 deletions
diff --git a/src/ui/widgets/FilePage.cpp b/src/ui/widgets/FilePage.cpp index 998b4245..605ae1d2 100644 --- a/src/ui/widgets/FilePage.cpp +++ b/src/ui/widgets/FilePage.cpp @@ -29,6 +29,7 @@ #include "ui/widgets/FilePage.h" #include "core/GpgModel.h" +#include "core/function/GlobalSettingStation.h" #include "ui/UISignalStation.h" #include "ui/main_window/MainWindow.h" #include "ui_FilePage.h" @@ -42,6 +43,8 @@ FilePage::FilePage(QWidget* parent, const QString& target_path) ui_->setupUi(this); ui_->trewViewLayout->addWidget(file_tree_view_); + ui_->batchModeButton->setToolTip(tr("Switch Batch Mode")); + connect(ui_->upPathButton, &QPushButton::clicked, file_tree_view_, &FileTreeView::SlotUpLevel); connect(ui_->refreshButton, &QPushButton::clicked, this, @@ -71,8 +74,19 @@ FilePage::FilePage(QWidget* parent, const QString& target_path) connect(show_system_act, &QAction::triggered, file_tree_view_, &FileTreeView::SlotShowSystemFile); option_popup_menu_->addAction(show_system_act); + + auto* switch_asc_mode_act = new QAction(tr("ASCII Mode"), this); + switch_asc_mode_act->setCheckable(true); + connect(switch_asc_mode_act, &QAction::triggered, this, + [=](bool on) { ascii_mode_ = on; }); + option_popup_menu_->addAction(switch_asc_mode_act); + ui_->optionsButton->setMenu(option_popup_menu_); + ascii_mode_ = !( + GetSettings().value("gnupg/non_ascii_at_file_operation", true).toBool()); + switch_asc_mode_act->setChecked(ascii_mode_); + connect(ui_->pathEdit, &QLineEdit::textChanged, [=]() { auto path = ui_->pathEdit->text(); auto dir = QDir(path); @@ -100,16 +114,18 @@ FilePage::FilePage(QWidget* parent, const QString& target_path) UISignalStation::GetInstance(), &UISignalStation::SignalMainWindowOpenFile); connect(file_tree_view_, &FileTreeView::SignalSelectedChanged, this, - &FilePage::update_main_basical_opera_menu); + &FilePage::update_main_basic_opera_menu); connect(this, &FilePage::SignalCurrentTabChanged, this, - [this]() { update_main_basical_opera_menu(GetSelected()); }); - connect(this, &FilePage::SignalMainWindowlUpdateBasicalOperaMenu, + [this]() { update_main_basic_opera_menu(GetSelected()); }); + connect(this, &FilePage::SignalMainWindowUpdateBasicOperaMenu, UISignalStation::GetInstance(), - &UISignalStation::SignalMainWindowlUpdateBasicalOperaMenu); + &UISignalStation::SignalMainWindowUpdateBasicOperaMenu); + connect(ui_->batchModeButton, &QToolButton::toggled, file_tree_view_, + &FileTreeView::SlotSwitchBatchMode); } -auto FilePage::GetSelected() const -> QString { - return file_tree_view_->GetSelectedPath(); +auto FilePage::GetSelected() const -> QStringList { + return file_tree_view_->GetSelectedPaths(); } void FilePage::SlotGoPath() { @@ -123,43 +139,72 @@ void FilePage::keyPressEvent(QKeyEvent* event) { } } -void FilePage::update_main_basical_opera_menu(const QString& selected_path) { +void FilePage::update_main_basic_opera_menu(const QStringList& selected_paths) { + if (selected_paths.isEmpty()) { + emit SignalMainWindowUpdateBasicOperaMenu(MainWindow::OperationMenu::kNone); + return; + } + MainWindow::OperationMenu::OperationType operation_type = MainWindow::OperationMenu::kNone; - // abort... - if (selected_path.isEmpty()) return; + LOG_D() << "selected path size: " << selected_paths.size(); + LOG_D() << "selected paths: " << selected_paths; - QFileInfo const info(selected_path); + QContainer<QFileInfo> infos; - if ((info.isDir() || info.isFile()) && - (info.suffix() != "gpg" && info.suffix() != "pgp" && - info.suffix() != "sig" && info.suffix() != "asc")) { - operation_type |= MainWindow::OperationMenu::kEncrypt; + for (const auto& path : selected_paths) { + infos.append(QFileInfo(path)); } - if ((info.isDir() || info.isFile()) && - (info.suffix() != "gpg" && info.suffix() != "pgp" && - info.suffix() != "sig" && info.suffix() != "asc")) { - operation_type |= MainWindow::OperationMenu::kEncryptAndSign; - } + bool c_encr = + std::all_of(infos.cbegin(), infos.cend(), [](const QFileInfo& info) { + return (info.isDir() || info.isFile()) && + (info.suffix() != "gpg" && info.suffix() != "pgp" && + info.suffix() != "sig" && info.suffix() != "asc"); + }); - if (info.isFile() && (info.suffix() == "gpg" || info.suffix() == "pgp" || - info.suffix() == "asc")) { - operation_type |= MainWindow::OperationMenu::kDecrypt; - operation_type |= MainWindow::OperationMenu::kDecryptAndVerify; + if (c_encr) { + operation_type |= MainWindow::OperationMenu::kEncrypt | + MainWindow::OperationMenu::kEncryptAndSign; } - if (info.isFile() && (info.suffix() != "gpg" && info.suffix() != "pgp" && - info.suffix() != "sig" && info.suffix() != "asc")) { - operation_type |= MainWindow::OperationMenu::kSign; - } + bool c_decr = + std::all_of(infos.cbegin(), infos.cend(), [](const QFileInfo& info) { + return info.isFile() && + (info.suffix() == "gpg" || info.suffix() == "pgp" || + info.suffix() == "asc"); + }); - if (info.isFile() && (info.suffix() == "sig" || info.suffix() == "gpg" || - info.suffix() == "pgp" || info.suffix() == "asc")) { - operation_type |= MainWindow::OperationMenu::kVerify; + if (c_decr) { + operation_type |= MainWindow::OperationMenu::kDecrypt | + MainWindow::OperationMenu::kDecryptAndVerify; } - emit SignalMainWindowlUpdateBasicalOperaMenu(operation_type); + bool c_sign = + std::all_of(infos.cbegin(), infos.cend(), [](const QFileInfo& info) { + return info.isFile() && + (info.suffix() != "gpg" && info.suffix() != "pgp" && + info.suffix() != "sig" && info.suffix() != "asc"); + }); + + if (c_sign) operation_type |= MainWindow::OperationMenu::kSign; + + bool c_verify = + std::all_of(infos.cbegin(), infos.cend(), [](const QFileInfo& info) { + return info.isFile() && + (info.suffix() == "sig" || info.suffix() == "gpg" || + info.suffix() == "pgp" || info.suffix() == "asc"); + }); + + if (c_verify) operation_type |= MainWindow::OperationMenu::kVerify; + + emit SignalMainWindowUpdateBasicOperaMenu(operation_type); } + +auto FilePage::IsBatchMode() const -> bool { + return ui_->batchModeButton->isChecked(); +} + +auto FilePage::IsASCIIMode() const -> bool { return ascii_mode_; } } // namespace GpgFrontend::UI |