aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui/widgets/FilePage.cpp
diff options
context:
space:
mode:
authorsaturneric <[email protected]>2025-01-26 18:17:20 +0000
committersaturneric <[email protected]>2025-01-26 18:18:10 +0000
commit92e1ed7b3fd5360278d41db087518b6c5af80b3e (patch)
tree577edfa58889d97a0b3ec1f2c045b9d6fe9cff70 /src/ui/widgets/FilePage.cpp
parentfix: 'std::future' is defined in header '<future>' (diff)
downloadGpgFrontend-92e1ed7b3fd5360278d41db087518b6c5af80b3e.tar.gz
GpgFrontend-92e1ed7b3fd5360278d41db087518b6c5af80b3e.zip
feat: allow file batch operations
Diffstat (limited to 'src/ui/widgets/FilePage.cpp')
-rw-r--r--src/ui/widgets/FilePage.cpp93
1 files changed, 62 insertions, 31 deletions
diff --git a/src/ui/widgets/FilePage.cpp b/src/ui/widgets/FilePage.cpp
index 998b4245..5f6fbae0 100644
--- a/src/ui/widgets/FilePage.cpp
+++ b/src/ui/widgets/FilePage.cpp
@@ -73,6 +73,9 @@ FilePage::FilePage(QWidget* parent, const QString& target_path)
option_popup_menu_->addAction(show_system_act);
ui_->optionsButton->setMenu(option_popup_menu_);
+ connect(ui_->batchModeButton, &QToolButton::toggled, this,
+ [this](bool checked) { emit SignalSetBatchMode(checked); });
+
connect(ui_->pathEdit, &QLineEdit::textChanged, [=]() {
auto path = ui_->pathEdit->text();
auto dir = QDir(path);
@@ -100,16 +103,16 @@ 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);
}
-auto FilePage::GetSelected() const -> QString {
- return file_tree_view_->GetSelectedPath();
+auto FilePage::GetSelected() const -> QContainer<QString> {
+ return file_tree_view_->GetSelectedPaths();
}
void FilePage::SlotGoPath() {
@@ -123,43 +126,71 @@ void FilePage::keyPressEvent(QKeyEvent* event) {
}
}
-void FilePage::update_main_basical_opera_menu(const QString& selected_path) {
+void FilePage::update_main_basic_opera_menu(
+ const QContainer<QString>& 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();
}
} // namespace GpgFrontend::UI