From 517e6f321b5fbfdc2b5832b2fd94c25ba999c459 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sun, 13 Aug 2023 17:32:06 +0300 Subject: [PATCH 1/2] [win-nix] handle "open from template" editor's command --- .../src/cascapplicationmanagerwrapper.cpp | 10 ++++++ win-linux/src/cascapplicationmanagerwrapper.h | 1 + .../cascapplicationmanagerwrapper_private.h | 31 +++++++++++++----- win-linux/src/ceditortools.cpp | 32 ++++++++++++++++++- win-linux/src/ceditortools.h | 1 + win-linux/src/components/asctabwidget.h | 1 + win-linux/src/components/ctabpanel.cpp | 7 +++- win-linux/src/components/ctabpanel.h | 1 + 8 files changed, 74 insertions(+), 10 deletions(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index 0a91bb601..360e259c3 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -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); diff --git a/win-linux/src/cascapplicationmanagerwrapper.h b/win-linux/src/cascapplicationmanagerwrapper.h index c8e7503f0..5bbcddf78 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.h +++ b/win-linux/src/cascapplicationmanagerwrapper.h @@ -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(); diff --git a/win-linux/src/cascapplicationmanagerwrapper_private.h b/win-linux/src/cascapplicationmanagerwrapper_private.h index 03714536f..779332077 100644 --- a/win-linux/src/cascapplicationmanagerwrapper_private.h +++ b/win-linux/src/cascapplicationmanagerwrapper_private.h @@ -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; } diff --git a/win-linux/src/ceditortools.cpp b/win-linux/src/ceditortools.cpp index 9d01b13a1..73fe1d446 100644 --- a/win-linux/src/ceditortools.cpp +++ b/win-linux/src/ceditortools.cpp @@ -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 ) diff --git a/win-linux/src/ceditortools.h b/win-linux/src/ceditortools.h index 20fdabd89..d6d129247 100644 --- a/win-linux/src/ceditortools.h +++ b/win-linux/src/ceditortools.h @@ -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 *; diff --git a/win-linux/src/components/asctabwidget.h b/win-linux/src/components/asctabwidget.h index e65e00327..192714c44 100644 --- a/win-linux/src/components/asctabwidget.h +++ b/win-linux/src/components/asctabwidget.h @@ -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) diff --git a/win-linux/src/components/ctabpanel.cpp b/win-linux/src/components/ctabpanel.cpp index 2fd0b2f37..405317000 100644 --- a/win-linux/src/components/ctabpanel.cpp +++ b/win-linux/src/components/ctabpanel.cpp @@ -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(m_pViewer->GetCefView())->CreateLocalFile(format, name); } +void CTabPanel::createLocalFile(const std::wstring& templatepath, const std::wstring& name) +{ + static_cast(m_pViewer->GetCefView())->CreateLocalFile(0, name, templatepath); +} + bool CTabPanel::openRecoverFile(int id) { return static_cast(m_pViewer->GetCefView())->OpenRecoverFile(id); diff --git a/win-linux/src/components/ctabpanel.h b/win-linux/src/components/ctabpanel.h index 48b7648fe..eaae80cec 100644 --- a/win-linux/src/components/ctabpanel.h +++ b/win-linux/src/components/ctabpanel.h @@ -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(); From 9ceefb96cf5022ce0aca9e7bf92777df689641b5 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Sun, 13 Aug 2023 17:32:32 +0300 Subject: [PATCH 2/2] [win-nix] update translations --- win-linux/src/components/cfiledialog.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/win-linux/src/components/cfiledialog.cpp b/win-linux/src/components/cfiledialog.cpp index 1de53466d..30a094776 100644 --- a/win-linux/src/components/cfiledialog.cpp +++ b/win-linux/src/components/cfiledialog.cpp @@ -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)");