274 lines
9.5 KiB
C++
Executable File
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
|