[Libreoffice-commits] core.git: include/sfx2 officecfg/registry sfx2/sdi sfx2/source
Miklos Vajna
vmiklos at collabora.co.uk
Wed Sep 20 15:05:47 UTC 2017
include/sfx2/sfxsids.hrc | 1
officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu | 14 ++
sfx2/sdi/docslots.sdi | 5
sfx2/sdi/sfx.sdi | 16 +++
sfx2/source/appl/appuno.cxx | 6 -
sfx2/source/doc/guisaveas.cxx | 53 +++++++---
sfx2/source/doc/objserv.cxx | 2
7 files changed, 81 insertions(+), 16 deletions(-)
New commits:
commit eef3b0182af2f6196eb4c2a402d72eeaed069083
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Wed Sep 20 17:04:35 2017 +0200
EPUB export: add uno command to trigger the filter
This is quite similar to PDF, except that by default the File menu
doesn't advertise this command. Possible to add it via Tools ->
Customize -> Menus -> Search -> EPUB.
(Reasoning for having a dedicated UNO command for EPUB is an increasing
amount of users look at EPUB as the new PDF, given how non-reflowable
PDF is hard to read on mobile devices, while EPUB is primarily
reflowable.)
Change-Id: Ib80f784a630a192f5b6ffbbfc60cb565fda7ed37
diff --git a/include/sfx2/sfxsids.hrc b/include/sfx2/sfxsids.hrc
index 7ed7e1e0c728..062117dc4b4f 100644
--- a/include/sfx2/sfxsids.hrc
+++ b/include/sfx2/sfxsids.hrc
@@ -125,6 +125,7 @@
#define SID_EXPORTDOC (SID_SFX_START + 829)
#define SID_EXPORTDOCASPDF (SID_SFX_START + 1673)
#define SID_DIRECTEXPORTDOCASPDF (SID_SFX_START + 1674)
+#define SID_EXPORTDOCASEPUB (SID_SFX_START + 1677)
#define SID_UPDATEDOCMODE (SID_SFX_START + 1668)
#define SID_CHECKOUT (SID_SFX_START + 512)
#define SID_CANCELCHECKOUT (SID_SFX_START + 513)
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
index ff7788129b3c..6e4ec8c1dd12 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
@@ -4855,6 +4855,20 @@
<value>1</value>
</prop>
</node>
+ <node oor:name=".uno:ExportToEPUB" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="en-US">EPUB</value>
+ </prop>
+ <prop oor:name="ContextLabel" oor:type="xs:string">
+ <value xml:lang="en-US">~Export as EPUB...</value>
+ </prop>
+ <prop oor:name="TooltipLabel" oor:type="xs:string">
+ <value xml:lang="en-US">Export as EPUB</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
<node oor:name=".uno:ConfigureDialog" oor:op="replace">
<prop oor:name="Label" oor:type="xs:string">
<value xml:lang="en-US">~Customize...</value>
diff --git a/sfx2/sdi/docslots.sdi b/sfx2/sdi/docslots.sdi
index 52476b5c16c6..04039af5728a 100644
--- a/sfx2/sdi/docslots.sdi
+++ b/sfx2/sdi/docslots.sdi
@@ -234,6 +234,11 @@ shell SfxObjectShell
ExecMethod = ExecFile_Impl ;
StateMethod = GetState_Impl ;
]
+ SID_EXPORTDOCASEPUB
+ [
+ ExecMethod = ExecFile_Impl ;
+ StateMethod = GetState_Impl ;
+ ]
SID_SIGNATURE
[
ExecMethod = ExecFile_Impl;
diff --git a/sfx2/sdi/sfx.sdi b/sfx2/sdi/sfx.sdi
index 9b755fb36e6e..75b883ae5508 100644
--- a/sfx2/sdi/sfx.sdi
+++ b/sfx2/sdi/sfx.sdi
@@ -4778,6 +4778,22 @@ SfxVoidItem ExportDirectToPDF SID_DIRECTEXPORTDOCASPDF
GroupId = SfxGroupId::Document;
]
+SfxVoidItem ExportToEPUB SID_EXPORTDOCASEPUB
+(SfxStringItem URL SID_FILE_NAME, SfxStringItem FilterName SID_FILTER_NAME)
+[
+ AutoUpdate = FALSE,
+ FastCall = FALSE,
+ ReadOnlyDoc = TRUE,
+ Toggle = FALSE,
+ Container = TRUE,
+ RecordAbsolute = FALSE,
+ RecordPerSet;
+
+ AccelConfig = TRUE,
+ MenuConfig = TRUE,
+ ToolBoxConfig = TRUE,
+ GroupId = SfxGroupId::Document;
+]
SfxImageItem ImageOrientation SID_IMAGE_ORIENTATION
diff --git a/sfx2/source/appl/appuno.cxx b/sfx2/source/appl/appuno.cxx
index 8739f8f656a0..534baecfe967 100644
--- a/sfx2/source/appl/appuno.cxx
+++ b/sfx2/source/appl/appuno.cxx
@@ -168,8 +168,9 @@ static bool isMediaDescriptor( sal_uInt16 nSlotId )
{
return ( nSlotId == SID_OPENDOC || nSlotId == SID_EXPORTDOC ||
nSlotId == SID_SAVEASDOC || nSlotId == SID_SAVEDOC ||
- nSlotId == SID_SAVETO || nSlotId == SID_EXPORTDOCASPDF ||
- nSlotId == SID_DIRECTEXPORTDOCASPDF || nSlotId == SID_SAVEACOPY ||
+ nSlotId == SID_SAVETO || nSlotId == SID_SAVEACOPY ||
+ nSlotId == SID_EXPORTDOCASPDF || nSlotId == SID_DIRECTEXPORTDOCASPDF ||
+ nSlotId == SID_EXPORTDOCASEPUB ||
nSlotId == SID_SAVEACOPYITEM);
}
@@ -1330,6 +1331,7 @@ void TransformItems( sal_uInt16 nSlotId, const SfxItemSet& rSet, uno::Sequence<b
if ( nSlotId == SID_OPENDOC || nSlotId == SID_EXPORTDOC || nSlotId == SID_SAVEASDOC || nSlotId == SID_SAVEDOC ||
nSlotId == SID_SAVETO || nSlotId == SID_EXPORTDOCASPDF || nSlotId == SID_DIRECTEXPORTDOCASPDF ||
+ nSlotId == SID_EXPORTDOCASEPUB ||
nSlotId == SID_SAVEACOPY )
{
const SfxPoolItem *pItem=nullptr;
diff --git a/sfx2/source/doc/guisaveas.cxx b/sfx2/source/doc/guisaveas.cxx
index 6cd7f5e689d9..4fff1155a0a7 100644
--- a/sfx2/source/doc/guisaveas.cxx
+++ b/sfx2/source/doc/guisaveas.cxx
@@ -113,6 +113,7 @@
#define SAVE_REQUESTED 16
#define SAVEAS_REQUESTED 32
#define SAVEACOPY_REQUESTED 64
+#define EPUBEXPORT_REQUESTED 128
#define SAVEASREMOTE_REQUESTED -1
// possible statuses of save operation
@@ -130,7 +131,7 @@ using namespace css::system;
namespace {
-sal_uInt16 getSlotIDFromMode( sal_Int8 nStoreMode )
+sal_uInt16 getSlotIDFromMode( sal_Int16 nStoreMode )
{
// This is a temporary hardcoded solution must be removed when
// dialogs do not need parameters in SidSet representation any more
@@ -140,6 +141,8 @@ sal_uInt16 getSlotIDFromMode( sal_Int8 nStoreMode )
nResult = SID_EXPORTDOC;
else if ( nStoreMode == ( EXPORT_REQUESTED | PDFEXPORT_REQUESTED ) )
nResult = SID_EXPORTDOCASPDF;
+ else if ( nStoreMode == ( EXPORT_REQUESTED | EPUBEXPORT_REQUESTED ) )
+ nResult = SID_EXPORTDOCASEPUB;
else if ( nStoreMode == ( EXPORT_REQUESTED | PDFEXPORT_REQUESTED | PDFDIRECTEXPORT_REQUESTED ) )
nResult = SID_DIRECTEXPORTDOCASPDF;
else if ( nStoreMode == SAVEAS_REQUESTED || nStoreMode == ( EXPORT_REQUESTED | WIDEEXPORT_REQUESTED ) )
@@ -154,15 +157,17 @@ sal_uInt16 getSlotIDFromMode( sal_Int8 nStoreMode )
}
-sal_Int8 getStoreModeFromSlotName( const OUString& aSlotName )
+sal_Int16 getStoreModeFromSlotName( const OUString& aSlotName )
{
- sal_Int8 nResult = 0;
+ sal_Int16 nResult = 0;
if ( aSlotName == "ExportTo" )
nResult = EXPORT_REQUESTED;
else if ( aSlotName == "ExportToPDF" )
nResult = EXPORT_REQUESTED | PDFEXPORT_REQUESTED;
else if ( aSlotName == "ExportDirectToPDF" )
nResult = EXPORT_REQUESTED | PDFEXPORT_REQUESTED | PDFDIRECTEXPORT_REQUESTED;
+ else if ( aSlotName == "ExportToEPUB" )
+ nResult = EXPORT_REQUESTED | EPUBEXPORT_REQUESTED;
else if ( aSlotName == "Save" )
nResult = SAVE_REQUESTED;
else if ( aSlotName == "SaveAs" )
@@ -179,14 +184,14 @@ sal_Int8 getStoreModeFromSlotName( const OUString& aSlotName )
}
-SfxFilterFlags getMustFlags( sal_Int8 nStoreMode )
+SfxFilterFlags getMustFlags( sal_Int16 nStoreMode )
{
return ( SfxFilterFlags::EXPORT
| ( ( ( nStoreMode & EXPORT_REQUESTED ) && !( nStoreMode & WIDEEXPORT_REQUESTED ) ) ? SfxFilterFlags::NONE : SfxFilterFlags::IMPORT ) );
}
-SfxFilterFlags getDontFlags( sal_Int8 nStoreMode )
+SfxFilterFlags getDontFlags( sal_Int16 nStoreMode )
{
return ( SfxFilterFlags::INTERNAL
| SfxFilterFlags::NOTINFILEDLG
@@ -299,7 +304,7 @@ public:
OUString GetDocServiceName();
uno::Sequence< beans::PropertyValue > GetDocServiceDefaultFilterCheckFlags( SfxFilterFlags nMust, SfxFilterFlags nDont );
uno::Sequence< beans::PropertyValue > GetDocServiceAnyFilter( SfxFilterFlags nMust, SfxFilterFlags nDont );
- uno::Sequence< beans::PropertyValue > GetPreselectedFilter_Impl( sal_Int8 nStoreMode );
+ uno::Sequence< beans::PropertyValue > GetPreselectedFilter_Impl( sal_Int16 nStoreMode );
uno::Sequence< beans::PropertyValue > GetDocServiceDefaultFilter();
bool ExecuteFilterDialog_Impl( const OUString& aFilterName );
@@ -311,7 +316,7 @@ public:
bool CheckFilterOptionsDialogExistence();
- bool OutputFileDialog( sal_Int8 nStoreMode,
+ bool OutputFileDialog( sal_Int16 nStoreMode,
const ::comphelper::SequenceAsHashMap& aPreselectedFilterPropsHM,
bool bSetStandardName,
OUString& aSuggestedName,
@@ -521,7 +526,7 @@ uno::Sequence< beans::PropertyValue > ModelData_Impl::GetDocServiceAnyFilter( Sf
}
-uno::Sequence< beans::PropertyValue > ModelData_Impl::GetPreselectedFilter_Impl( sal_Int8 nStoreMode )
+uno::Sequence< beans::PropertyValue > ModelData_Impl::GetPreselectedFilter_Impl( sal_Int16 nStoreMode )
{
if ( nStoreMode == SAVEASREMOTE_REQUESTED )
nStoreMode = SAVEAS_REQUESTED;
@@ -542,6 +547,17 @@ uno::Sequence< beans::PropertyValue > ModelData_Impl::GetPreselectedFilter_Impl(
aFilterProps = ::comphelper::MimeConfigurationHelper::SearchForFilter( m_pOwner->GetFilterQuery(), aSearchRequest, nMust, nDont );
}
+ else if ( ( nStoreMode != SAVEASREMOTE_REQUESTED ) && ( nStoreMode & EPUBEXPORT_REQUESTED ) )
+ {
+ // Preselect EPUB filter for export.
+ uno::Sequence<beans::NamedValue> aSearchRequest
+ {
+ { "Type", css::uno::makeAny(OUString("writer_EPUB_Document")) },
+ { "DocumentService", css::uno::makeAny(GetDocServiceName()) }
+ };
+
+ aFilterProps = ::comphelper::MimeConfigurationHelper::SearchForFilter( m_pOwner->GetFilterQuery(), aSearchRequest, nMust, nDont );
+ }
else
{
aFilterProps = GetDocServiceDefaultFilterCheckFlags( nMust, nDont );
@@ -781,7 +797,7 @@ bool ModelData_Impl::CheckFilterOptionsDialogExistence()
}
-bool ModelData_Impl::OutputFileDialog( sal_Int8 nStoreMode,
+bool ModelData_Impl::OutputFileDialog( sal_Int16 nStoreMode,
const ::comphelper::SequenceAsHashMap& aPreselectedFilterPropsHM,
bool bSetStandardName,
OUString& aSuggestedName,
@@ -825,7 +841,7 @@ bool ModelData_Impl::OutputFileDialog( sal_Int8 nStoreMode,
if( ( nStoreMode & EXPORT_REQUESTED ) && !( nStoreMode & WIDEEXPORT_REQUESTED ) )
{
- if ( nStoreMode & PDFEXPORT_REQUESTED )
+ if ( (nStoreMode & PDFEXPORT_REQUESTED) || (nStoreMode & EPUBEXPORT_REQUESTED) )
aDialogMode = css::ui::dialogs::TemplateDescription::
FILESAVE_AUTOEXTENSION;
else
@@ -858,6 +874,13 @@ bool ModelData_Impl::OutputFileDialog( sal_Int8 nStoreMode,
pFileDlg.reset(new sfx2::FileDialogHelper( aDialogMode, aDialogFlags, aFilterUIName, "pdf", rStandardDir, rBlackList, pWin ));
pFileDlg->SetCurrentFilter( aFilterUIName );
}
+ else if ((nStoreMode & EPUBEXPORT_REQUESTED) && !aPreselectedFilterPropsHM.empty())
+ {
+ // This is an EPUB export, the filter options has been shown already.
+ const OUString aFilterUIName = aPreselectedFilterPropsHM.getUnpackedValueOrDefault( "UIName", OUString() );
+ pFileDlg.reset(new sfx2::FileDialogHelper(aDialogMode, aDialogFlags, aFilterUIName, "epub", rStandardDir, rBlackList, pWin));
+ pFileDlg->SetCurrentFilter(aFilterUIName);
+ }
else
{
// This is the normal dialog
@@ -1286,7 +1309,7 @@ bool SfxStoringHelper::GUIStoreModel( const uno::Reference< frame::XModel >& xMo
// parse the slot name
bool bRemote = false;
- sal_Int8 nStoreMode = getStoreModeFromSlotName( aSlotName );
+ sal_Int16 nStoreMode = getStoreModeFromSlotName( aSlotName );
if ( nStoreMode == SAVEASREMOTE_REQUESTED )
{
@@ -1424,9 +1447,11 @@ bool SfxStoringHelper::GUIStoreModel( const uno::Reference< frame::XModel >& xMo
const OUString sFilterDataString(aFilterDataString);
const OUString sFilterFlagsString("FilterFlags");
- if ( ( nStoreMode & EXPORT_REQUESTED ) && ( nStoreMode & PDFEXPORT_REQUESTED ) && !( nStoreMode & PDFDIRECTEXPORT_REQUESTED ) )
+ bool bPDFOptions = (nStoreMode & PDFEXPORT_REQUESTED) && !(nStoreMode & PDFDIRECTEXPORT_REQUESTED);
+ bool bEPUBOptions = (nStoreMode & EPUBEXPORT_REQUESTED);
+ if ( ( nStoreMode & EXPORT_REQUESTED ) && (bPDFOptions || bEPUBOptions) )
{
- // this is PDF export, the filter options dialog should be shown before the export
+ // this is PDF or EPUB export, the filter options dialog should be shown before the export
aModelData.GetMediaDescr()[sFilterNameString] <<= aFilterName;
if ( aModelData.GetMediaDescr().find( sFilterFlagsString ) == aModelData.GetMediaDescr().end()
&& aModelData.GetMediaDescr().find( sFilterOptionsString ) == aModelData.GetMediaDescr().end()
@@ -1564,7 +1589,7 @@ bool SfxStoringHelper::GUIStoreModel( const uno::Reference< frame::XModel >& xMo
aModelData.GetMediaDescr().find( OUString("FilterFlags") );
bool bFilterFlagsSet = ( aIter != aModelData.GetMediaDescr().end() );
- if( !( nStoreMode & PDFEXPORT_REQUESTED ) && !bFilterFlagsSet
+ if( !( nStoreMode & PDFEXPORT_REQUESTED ) && !( nStoreMode & EPUBEXPORT_REQUESTED ) && !bFilterFlagsSet
&& ( ( nStoreMode & EXPORT_REQUESTED ) || bUseFilterOptions ) )
{
// execute filter options dialog
diff --git a/sfx2/source/doc/objserv.cxx b/sfx2/source/doc/objserv.cxx
index 477e2fdbce32..da09164f0317 100644
--- a/sfx2/source/doc/objserv.cxx
+++ b/sfx2/source/doc/objserv.cxx
@@ -499,6 +499,7 @@ void SfxObjectShell::ExecFile_Impl(SfxRequest &rReq)
case SID_DIRECTEXPORTDOCASPDF:
bIsPDFExport = true;
SAL_FALLTHROUGH;
+ case SID_EXPORTDOCASEPUB:
case SID_EXPORTDOC:
case SID_SAVEASDOC:
case SID_SAVEASREMOTE:
@@ -977,6 +978,7 @@ void SfxObjectShell::GetState_Impl(SfxItemSet &rSet)
case SID_EXPORTDOCASPDF:
case SID_DIRECTEXPORTDOCASPDF:
+ case SID_EXPORTDOCASEPUB:
{
break;
}
More information about the Libreoffice-commits
mailing list