diff options
Diffstat (limited to 'src/ui/widgets/FileTreeView.h')
-rw-r--r-- | src/ui/widgets/FileTreeView.h | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/src/ui/widgets/FileTreeView.h b/src/ui/widgets/FileTreeView.h new file mode 100644 index 00000000..9e9b03dd --- /dev/null +++ b/src/ui/widgets/FileTreeView.h @@ -0,0 +1,229 @@ +/** + * Copyright (C) 2021 Saturneric <[email protected]> + * + * 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 + * + */ + +#pragma once + +namespace GpgFrontend::UI { + +class FileTreeView : public QTreeView { + Q_OBJECT + public: + explicit FileTreeView(QWidget* parent, const QString& target_path); + + /** + * @brief Get the Current Path object + * + * @return std::filesystem::path + */ + auto GetCurrentPath() -> QString; + + /** + * @brief Get the Selected Path object + * + * @return std::filesystem::path + */ + auto GetSelectedPath() -> QString; + + /** + * @brief Get the Path By Click Point object + * + * @param point + * @return std::filesystem::path + */ + auto GetPathByClickPoint(const QPoint& point) -> QString; + + /** + * @brief Get the Mouse Point Global object + * + * @param point + * @return QPoint + */ + auto GetMousePointGlobal(const QPoint& point) -> QPoint; + + protected: + /** + * @brief + * + * @param selected + * @param deselected + */ + void selectionChanged(const QItemSelection& selected, + const QItemSelection& deselected) override; + + /** + * @brief + * + * @param event + */ + void keyPressEvent(QKeyEvent* event) override; + + /** + * @brief + * + */ + void paintEvent(QPaintEvent* event) override; + + signals: + + /** + * @brief + * + * @param path + */ + void SignalPathChanged(const QString&); + + /** + * @brief + * + */ + void SignalSelectedChanged(const QString&); + + /** + * @brief + * + */ + void SignalOpenFile(const QString&); + + public slots: + + /** + * @brief + * + */ + void SlotGoPath(const QString&); + + /** + * @brief + * + */ + void SlotUpLevel(); + + /** + * @brief + * + */ + void SlotShowSystemFile(bool); + + /** + * @brief + * + * @param on + */ + void SlotShowHiddenFile(bool); + + /** + * @brief + * + */ + auto SlotDeleteSelectedItem() -> void; + + /** + * @brief + * + */ + void SlotMkdir(); + + /** + * @brief + * + */ + void SlotMkdirBelowAtSelectedItem(); + + /** + * @brief + * + */ + void SlotTouch(); + + /** + * @brief + * + */ + void SlotTouchBelowAtSelectedItem(); + + /** + * @brief + * + */ + void SlotRenameSelectedItem(); + + /** + * @brief + * + */ + void SlotOpenSelectedItemBySystemApplication(); + + private slots: + + /** + * @brief + * + * @param index + */ + void slot_file_tree_view_item_double_clicked(const QModelIndex& index); + + /** + * @brief + * + */ + void slot_calculate_hash(); + + /** + * @brief compress directory into gpg-zip + * + */ + void slot_compress_files(); + + /** + * @brief + * + * @param point + */ + void slot_show_custom_context_menu(const QPoint& point); + + /** + * @brief Create a popup menu object + * + */ + void slot_create_popup_menu(); + + private: + QFileSystemModel* dir_model_; ///< + QString current_path_; ///< + QString selected_path_; ///< + + QMenu* popup_menu_; + QAction* action_open_file_; + QAction* action_rename_file_; + QAction* action_delete_file_; + QAction* action_calculate_hash_; + QAction* action_create_empty_file_; + QAction* action_make_directory_; + QAction* action_compress_files_; +}; +} // namespace GpgFrontend::UI
\ No newline at end of file |