Merge pull request #933 from ONLYOFFICE/feature/add-mi-create-from-template

Feature/add mi create from template
This commit is contained in:
Maxim Kadushkin
2023-08-18 19:36:50 +03:00
committed by GitHub
9 changed files with 82 additions and 18 deletions

View File

@ -1926,6 +1926,16 @@ QString CAscApplicationManagerWrapper::newFileName(int format)
}
}
QString CAscApplicationManagerWrapper::newFileName(const std::wstring& format)
{
int _f = format == L"word" ? AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX :
format == L"cell" ? AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX :
format == L"form" ? AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCXF :
format == L"slide" ? AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX : AVS_OFFICESTUDIO_FILE_UNKNOWN;
return newFileName(_f);
}
/*void CAscApplicationManagerWrapper::checkUpdates()
{
//APP_CAST(_app);

View File

@ -189,6 +189,7 @@ public:
static bool canAppClose();
static QCefView * createViewer(QWidget * parent);
static QString newFileName(int format);
static QString newFileName(const std::wstring& format);
static CThemes & themes();
static CPrintData& printData();

View File

@ -239,16 +239,31 @@ public:
} else
if ( cmd.compare(L"create:new") == 0 ) {
const std::wstring & format = data.get_Param();
int _f = format == L"word" ? AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX :
format == L"cell" ? AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX :
format == L"form" ? AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCXF :
format == L"slide" ? AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX : AVS_OFFICESTUDIO_FILE_UNKNOWN;
COpenOptions opts{m_appmanager.newFileName(_f), etNewFile};
opts.format = _f;
opts.parent_id = event.m_nSenderId;
if ( format.rfind(L"template:", 0) == 0 ) {
std::wstring type = format.substr(format.size() - 4);
std::wstring file_path = CEditorTools::getlocaltemplate(type, event.m_nSenderId).toStdWString();
if ( !file_path.empty() ) {
COpenOptions opts{file_path, etTemplateFile};
opts.name = m_appmanager.newFileName(type);
opts.parent_id = event.m_nSenderId;
openDocument(opts);
}
} else {
int _f = format == L"word" ? AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX :
format == L"cell" ? AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX :
format == L"form" ? AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCXF :
format == L"slide" ? AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX : AVS_OFFICESTUDIO_FILE_UNKNOWN;
COpenOptions opts{m_appmanager.newFileName(_f), etNewFile};
opts.format = _f;
opts.parent_id = event.m_nSenderId;
openDocument(opts);
}
openDocument(opts);
return true;
}

View File

@ -199,6 +199,33 @@ namespace CEditorTools
return _path;
}
QString getlocaltemplate(const std::wstring& editor, int parentid)
{
ParentHandle parent;
if ( !(parentid < 0) )
parent = AscAppManager::windowHandleFromId(parentid);
else parent = qApp->activeWindow();
QString _filter;
if ( editor.compare(L"cell") == 0 ) {
_filter = CFileDialogWrapper::tr("Spreadsheet template") + " (*.xltx *.xltm *.ots)";
} else
if ( editor.compare(L"slide") == 0 ) {
_filter = CFileDialogWrapper::tr("Presentation template") + " (*.potx *.otp)";
} else {
_filter = CFileDialogWrapper::tr("Document template") + " (*.dotx *.ott)";
}
CFileDialogWrapper dlg(parent);
QString _path = Utils::lastPath(LOCAL_PATH_OPEN);
if ( !(_path = dlg.modalOpenSingle(_path, _filter)).isEmpty() ) {
Utils::keepLastPath(LOCAL_PATH_OPEN, QFileInfo(_path).absolutePath());
}
return _path;
}
std::wstring getFolder(const std::wstring& path, int parentid)
{
ParentHandle parent;
@ -252,6 +279,9 @@ namespace CEditorTools
} else
if (opts.srctype == etNewFile) {
panel->createLocalFile(editorTypeFromFormat(opts.format), opts.name.toStdWString());
} else
if (opts.srctype == etTemplateFile) {
panel->createLocalFile(L"", opts.name.toStdWString());
} else {
panel->cef()->load(opts.wurl);
}
@ -259,7 +289,7 @@ namespace CEditorTools
if ( result ) {
CAscTabData * data = new CAscTabData(opts.name);
data->setUrl(opts.wurl);
data->setIsLocal( opts.srctype == etLocalFile || opts.srctype == etNewFile ||
data->setIsLocal( opts.srctype == etLocalFile || opts.srctype == etNewFile || opts.srctype == etTemplateFile ||
(opts.srctype == etRecentFile && !CExistanceController::isFileRemote(opts.url)) );
if ( opts.srctype == etNewFile )

View File

@ -57,6 +57,7 @@ namespace CEditorTools
void print(const sPrintConf&);
void getlocalfile(void * data);
QString getlocalfile(const std::wstring& path, int parentid = -1);
QString getlocaltemplate(const std::wstring& editor, int parentid);
std::wstring getFolder(const std::wstring&, int parentid = -1);
auto createEditorPanel(const COpenOptions& opts, const QRect& rect = QRect()) -> CTabPanel *;

View File

@ -38,6 +38,7 @@
#include "cscalingwrapper.h"
#include "ctabpanel.h"
#define etTemplateFile AscEditorType(255)
#define etLocalFile AscEditorType(254)
#define etRecoveryFile AscEditorType(253)
#define etRecentFile AscEditorType(252)

View File

@ -63,11 +63,11 @@ CFileDialogWrapper::CFileDialogWrapper(QWidget * parent) : QObject(parent)
{
m_mapFilters[AVS_OFFICESTUDIO_FILE_UNKNOWN] = tr("All files (*.*)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX] = tr("DOCX Document (*.docx)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_DOTX] = tr("Document template (*.dotx)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX] = tr("DOCX Document") + " (*.docx)";
m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_DOTX] = tr("Document template") + " (*.dotx)";
m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC] = tr("DOC Document (*.doc)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT] = tr("ODT Document (*.odt)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_OTT] = tr("OpenDocument Document template (*.ott)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_OTT] = tr("OpenDocument Document template") + " (*.ott)";
m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF] = tr("RTF File (*.rtf)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT] = tr("TXT File (*.txt)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML] = tr("HTML File (*.html)");
@ -80,18 +80,18 @@ CFileDialogWrapper::CFileDialogWrapper(QWidget * parent) : QObject(parent)
m_mapFilters[AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX] = tr("PPTX File (*.pptx)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT] = tr("PPT File (*.ppt)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_PRESENTATION_POTX] = tr("Presentation template (*.potx)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_PRESENTATION_POTX] = tr("Presentation template") + " (*.potx)";
m_mapFilters[AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP] = tr("ODP File (*.odp)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_PRESENTATION_OTP] = tr("OpenDocument Presentation Template (*.otp)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_PRESENTATION_OTP] = tr("OpenDocument Presentation Template") + " (*.otp)";
m_mapFilters[AVS_OFFICESTUDIO_FILE_PRESENTATION_PPSX] = tr("PPSX File (*.ppsx)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTM] = tr("Macro-enabled Presentation File (*.pptm)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX] = tr("XLSX File (*.xlsx)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLTX] = tr("Spreadsheet template (*.xltx)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLTM] = tr("Macro-enabled spreadsheet template (*.xltm)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLTX] = tr("Spreadsheet template") + " (*.xltx)";
m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLTM] = tr("Macro-enabled spreadsheet template") + " (*.xltm)";
m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS] = tr("XLS File (*.xls)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS] = tr("ODS File (*.ods)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_OTS] = tr("OpenDocument Spreadsheet Template (*.ots)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_OTS] = tr("OpenDocument Spreadsheet Template") + " (*.ots)";
m_mapFilters[AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV] = tr("CSV File (*.csv)");
m_mapFilters[AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF] = tr("PDF File (*.pdf)");

View File

@ -1,5 +1,5 @@
#include "components/ctabpanel.h"
#include "ctabpanel.h"
#include "cascapplicationmanagerwrapper.h"
#include "defines.h"
#include "cefview.h"
@ -124,6 +124,11 @@ void CTabPanel::createLocalFile(int format, const std::wstring& name)
static_cast<CCefViewEditor *>(m_pViewer->GetCefView())->CreateLocalFile(format, name);
}
void CTabPanel::createLocalFile(const std::wstring& templatepath, const std::wstring& name)
{
static_cast<CCefViewEditor *>(m_pViewer->GetCefView())->CreateLocalFile(0, name, templatepath);
}
bool CTabPanel::openRecoverFile(int id)
{
return static_cast<CCefViewEditor *>(m_pViewer->GetCefView())->OpenRecoverFile(id);

View File

@ -30,6 +30,7 @@ public:
void openLocalFile(const std::wstring& sFilePath, int nFileFormat, const std::wstring& params);
bool openLocalFile(const std::wstring& sFilePath, const std::wstring& params);
void createLocalFile(int nFileFormat, const std::wstring& sName = L"");
void createLocalFile(const std::wstring& templatepath, const std::wstring& name);
bool openRecoverFile(int id);
bool openRecentFile(int id);
bool isReady();