/** * @RDE_HEADER@ * FileManagement - FileExplorer dialog * $Id$ * $HeadURL$ * $Author$ * Created by Iuliana Ojog, SLSE, 2017-05-11 */ #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include "flm_get_content.h" namespace Ui { class FileManagementDialogWidget; } //---------------------------------------------------------------------------------------------------- // FileManagementDialogWidget //---------------------------------------------------------------------------------------------------- namespace FileManagement { class DialogModelFolder; class DialogModelProxyFolder; class DialogModelFile; class DialogFileProxyModel; class ForeignGuiComboboxInterface; enum class FileDialogMode { OpenFile = 0, // used as modal select file to open SaveFile = 1, // used as modal select folder to save file User = 2, // used by normal RW user to organize library Admin = 3 // used as admin, can export, remove files }; //---------------------------------------------------------------------------------------------------- class FileManagementDialogWidget final : public QWidget , protected FileManagement::Interface::Ftc::FolderRemoveReplyHandler , protected FileManagement::Interface::Ftc::FileContentRemoveReplyHandler , protected FileManagement::Interface::Ftc::FileContentModifyReplyHandler , protected FileManagement::Interface::Ftc::FileContentChangeStatusReplyHandler { Q_OBJECT friend class FileManagementDialogTab; friend class FileManagementDialog; public: explicit FileManagementDialogWidget(QWidget *parent = nullptr); ~FileManagementDialogWidget(); bool init(LtsSession::LtsSession *session, FileDialogMode dlgMode = FileDialogMode::OpenFile, const QVector &fileTypes = QVector(), int folderId = 0, const QString &xmlType = QString()); Q_SIGNALS: void enableButtons(); void accepted(); void rejected(); private: void enaDisa(); void saveFileName(const QString &name); QModelIndex selectedIndexViewFolder() const; bool isFolderRemovable(const QModelIndex &idx) const; void removeCurrentRowFolder(); static QString getTemplateFile(const QString &fileName); FileManagement::FileType getFileType(const QString &fileExt); void onFolderRemoveReply(const Core::FunctionReplyObject &replyObject) override final { m_requestHelper->requestReply(replyObject); } void onFileContentRemoveReply(const Core::FunctionReplyObject &replyObject) override final { m_requestHelper->requestReply(replyObject); } void onFileContentModifyReply(const Core::FunctionReplyObject &replyObject) override final { m_requestHelper->requestReply(replyObject); } void onFileContentChangeStatusReply(const Core::FunctionReplyObject &replyObject) override final { m_requestHelper->requestReply(replyObject); } void createNewOfficeFile(const QString &fileName); static QString getFileTypeStr(FileManagement::FileType fileType); protected slots: void onReject(); // folders void onAddFolder(); void onEditFolder(); void onRemoveFolder(); void onFolderSelectionChanged(); void folderContextMenuRequested(const QPoint &position); void onFolderChanged(const FileManagement::Folder &data, DataModification modType); void onRefreshFolders(); void onCopyFolder(); void onCutFolder(); void onPasteFolder(); void selectFolder(); // files void onExportFile(); void onImportFile(); void onNewOfficeWord(); void onNewOfficeExcel(); void onNewOfficePowerPoint(); void onNewLibreOfficeWrite(); void onNewLibreOfficeCalc(); void onNewLibreOfficePresent(); void onNewFileFromTemplate(); void onRemoveFile(); void onDeleteFile(); void onRestoreFile(); void onEditFile(); void onPreviewFile(); void fileContextMenuRequested(const QPoint &position); void onCopyFile(); void onCutFile(); void onPasteFile(); void onSelectFile(); void onChooseFileName(); void onFileChanged(const FileManagement::FileContent &data, DataModification modType); bool showFile(const FileManagement::FileContent &fc, const QString &xmlType); void reInitModelFile(bool restoreSelected = false); private: DialogModelFolder *m_modelFolder{nullptr}; DialogModelProxyFolder *m_proxyModelFolder{nullptr}; DialogModelFile *m_modelFile{nullptr}; DialogFileProxyModel *m_proxyModelFile{nullptr}; std::shared_ptr m_dtc; std::shared_ptr m_ftc; std::shared_ptr m_opmDtc; std::shared_ptr m_exmDtc; std::shared_ptr m_ppmDtc; std::shared_ptr m_flmGuiCbxIfc; std::shared_ptr m_flmGuiIfc; Ui::FileManagementDialogWidget *m_ui{nullptr}; LtsSession::LtsSession *m_session{nullptr}; QString m_menuGroup; LtsUtils::RequestHelper *m_requestHelper{nullptr}; GetFileContent *m_getContent{nullptr}; // folder actions QAction *m_actionAddFolder{nullptr}; QAction *m_actionRenameFolder{nullptr}; QAction *m_actionRemoveFolder{nullptr}; QAction *m_actionRefreshFolders{nullptr}; QAction *m_actionCutFolder{nullptr}; QAction *m_actionCopyFolder{nullptr}; QAction *m_actionPasteFolder{nullptr}; FileManagement::Folder m_copyFolder; int m_selectedFolderId{-1}; // file actions QAction *m_actionImportFile{nullptr}; QAction *m_actionNewOfficeExcel{nullptr}; QAction *m_actionNewOfficeWord{nullptr}; QAction *m_actionNewOfficePowerPoint{nullptr}; QAction *m_actionNewLibreOfficeWrite{nullptr}; QAction *m_actionNewLibreOfficeCalc{nullptr}; QAction *m_actionNewLibreOfficePresent{nullptr}; QAction *m_actionNewFromTemplate{nullptr}; QAction *m_actionEditFile{nullptr}; QAction *m_actionDeleteFile{nullptr}; QAction *m_actionPreviewFile{nullptr}; QAction *m_actionCutFile{nullptr}; QAction *m_actionCopyFile{nullptr}; QAction *m_actionPasteFile{nullptr}; // admin actions QAction *m_actionRemoveFile{nullptr}; QAction *m_actionRestoreFile{nullptr}; QAction *m_actionExportFile{nullptr}; FileManagement::FileContent m_copyFile; FileManagement::FileContent m_selectedFileContent; std::vector m_content; QString m_fileName; QVector m_fileTypes; QString m_xmlType; FileDialogMode m_dialogMode; bool m_isAdminMode; LOGGER_T m_logger; }; //---------------------------------------------------------------------------------------------------- class FileManagementDialog : public LtsWidgets::LtsFramelessDialog { Q_OBJECT friend class FileManagementDialogWidget; public: explicit FileManagementDialog(QWidget *parent = nullptr); ~FileManagementDialog(); bool init(LtsSession::LtsSession *session, FileDialogMode dlgMode = FileDialogMode::OpenFile, const QVector &fileTypes = QVector(), int folderId = 0, const QString &xmlType = QString()); FileManagement::FileContent getSelectedFile() const { return m_editItemWidget->m_selectedFileContent; } int getSelectedFileId() const { return m_editItemWidget->m_selectedFileContent.id(); } int getSelectedFolderId() const { return m_editItemWidget->m_selectedFolderId; } QString getFileName() const { return m_editItemWidget->m_fileName; } Q_SIGNALS: void fileSelected(int folderId, int fileId, const QString &fileName); protected: void accept() override; private: void enaDisa(); private: FileManagementDialogWidget *m_editItemWidget{nullptr}; LtsWidgets::LtsDialogButtonBox *m_buttonBox{nullptr}; FileDialogMode m_dialogMode; LOGGER_T m_logger; }; //------------------------------------------------------------------------------------------------- class FileManagementDialogTab : public LtsWidgets::LtsDialog { Q_OBJECT friend class FileManagementDialogWidget; public: explicit FileManagementDialogTab(const QString &menuGroup, QWidget *parent = nullptr); ~FileManagementDialogTab(); bool init(LtsSession::LtsSession *session, FileDialogMode dlgMode = FileDialogMode::OpenFile, const QVector &fileTypes = QVector(), const int &folderId = 0, const QString &buttonName = QString()); int getSelectedFileId() const { return m_editItemWidget->m_selectedFileContent.id(); } int getSelectedFolder() const { return m_editItemWidget->m_selectedFolderId; } QString getFileName() const { return m_editItemWidget->m_fileName; } FileContent getSelectedFile() const { return m_editItemWidget->m_selectedFileContent; } signals: void accepted(); private: void retranslate() override; void enaDisa(); private: FileManagementDialogWidget *m_editItemWidget{nullptr}; FileDialogMode m_dialogMode; LOGGER_T m_logger; }; } // namespace