Files
qt5-legatus-legacy/Lts/Plugins/FileManagement/Gui/Explorer/flm_dialog.h
T
2026-08-13 18:33:10 +02:00

274 lines
9.5 KiB
C++
Executable File

/**
* @RDE_HEADER@
* FileManagement - FileExplorer dialog
* $Id$
* $HeadURL$
* $Author$
* Created by Iuliana Ojog, SLSE, 2017-05-11
*/
#pragma once
#include <FileManagement/flm_dtc.h>
#include <FileManagement/flm_ftc.h>
#include <FileManagement/logger.h>
#include <OperatorManagement/opm_dtc.h>
#include <ExerciseManagement/exm_dtc.h>
#include <ParticipantManagement/ppm_dtc.h>
#include <LtsWidgets/lts_dialog.h>
#include <LtsWidgets/lts_frameless_dialog.h>
#include <LtsUtilsGuiDds/request_helper.h>
#include <LtsSession/lts_session.h>
#include <Plugins/FileManagement/flm_combobox_gui_plugin_interface.h>
#include <Plugins/FileManagement/flm_explorer_gui_plugin_interface.h>
#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<FileType> &fileTypes = QVector<FileType>(),
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<FileManagement::Interface::Dtc> m_dtc;
std::shared_ptr<FileManagement::Interface::Ftc> m_ftc;
std::shared_ptr<OperatorManagement::Interface::Dtc> m_opmDtc;
std::shared_ptr<ExerciseManagement::Interface::Dtc> m_exmDtc;
std::shared_ptr<ParticipantManagement::Interface::Dtc> m_ppmDtc;
std::shared_ptr<FileManagement::ForeignGuiComboboxInterface> m_flmGuiCbxIfc;
std::shared_ptr<FileManagement::ForeignGuiInterface> 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<uint8_t> m_content;
QString m_fileName;
QVector<FileManagement::FileType> 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<FileType> &fileTypes = QVector<FileType>(),
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<FileType> &fileTypes = QVector<FileType>(),
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