summaryrefslogtreecommitdiff
path: root/filter
diff options
context:
space:
mode:
authorArmin Le Grand <alg@apache.org>2014-04-07 14:58:01 +0000
committerCaolán McNamara <caolanm@redhat.com>2014-04-08 15:22:00 +0100
commitde37aa18faf03da14dc453e843b1419edbedbfa9 (patch)
tree94a78a12b0347cdbd9209b1302c32546879b6d4a /filter
parentb5e1693fe70f6b90120d367c3a8b4c46fe874a69 (diff)
Resolves: #i124608# functionality to export only selected objects...
in SVG export (cherry picked from commit 42c2b0cecfae5845439e0392a399497062238b15) Conflicts: filter/source/svg/svgexport.cxx filter/source/svg/svgfilter.cxx filter/source/svg/svgfilter.hxx Change-Id: Iac4fe6d93c95cc5ab25185245cf642703a02d0ed
Diffstat (limited to 'filter')
-rw-r--r--filter/source/svg/svgexport.cxx33
-rw-r--r--filter/source/svg/svgfilter.cxx51
-rw-r--r--filter/source/svg/svgfilter.hxx3
3 files changed, 76 insertions, 11 deletions
diff --git a/filter/source/svg/svgexport.cxx b/filter/source/svg/svgexport.cxx
index 9223bfef92da..5402ad45e71f 100644
--- a/filter/source/svg/svgexport.cxx
+++ b/filter/source/svg/svgexport.cxx
@@ -816,7 +816,11 @@ sal_Bool SVGFilter::implExportDocument()
implEmbedBulletGlyphs();
implExportTextEmbeddedBitmaps();
}
- implExportMasterPages( mMasterPageTargets, 0, mMasterPageTargets.getLength() - 1 );
+
+ bool bSelection = mbSinglePage && maShapeSelection.is() && maShapeSelection->getCount();
+ // #i124608# export a given object selection, so no MasterPage export at all
+ if (!bSelection)
+ implExportMasterPages( mMasterPageTargets, 0, mMasterPageTargets.getLength() - 1 );
implExportDrawPages( mSelectedPages, 0, nLastPage );
if( !mbSinglePage )
@@ -1401,7 +1405,7 @@ sal_Bool SVGFilter::implExportMasterPages( const SVGFilter::XDrawPageSequence &
sal_Int32 nFirstPage, sal_Int32 nLastPage )
{
DBG_ASSERT( nFirstPage <= nLastPage,
- "SVGFilter::implExportPages: nFirstPage > nLastPage" );
+ "SVGFilter::implExportMasterPages: nFirstPage > nLastPage" );
// When the exported slides are more than one we wrap master page elements
// with a svg <defs> element.
@@ -1434,7 +1438,7 @@ sal_Bool SVGFilter::implExportDrawPages( const SVGFilter::XDrawPageSequence & rx
sal_Int32 nFirstPage, sal_Int32 nLastPage )
{
DBG_ASSERT( nFirstPage <= nLastPage,
- "SVGFilter::implExportPages: nFirstPage > nLastPage" );
+ "SVGFilter::implExportDrawPages: nFirstPage > nLastPage" );
// We wrap all slide in a group element with class name "SlideGroup".
mpSVGExport->AddAttribute( XML_NAMESPACE_NONE, "class", "SlideGroup" );
@@ -1443,7 +1447,17 @@ sal_Bool SVGFilter::implExportDrawPages( const SVGFilter::XDrawPageSequence & rx
sal_Bool bRet = sal_False;
for( sal_Int32 i = nFirstPage; i <= nLastPage; ++i )
{
- Reference< XShapes > xShapes( rxPages[i], UNO_QUERY );
+ Reference< XShapes > xShapes;
+
+ if (maShapeSelection.is() && maShapeSelection->getCount())
+ {
+ // #i124608# export a given object selection
+ xShapes = maShapeSelection;
+ }
+ else
+ {
+ xShapes = Reference< XShapes >( rxPages[i], UNO_QUERY );
+ }
if( xShapes.is() )
{
@@ -1780,6 +1794,17 @@ sal_Bool SVGFilter::implExportShape( const Reference< XShape >& rxShape,
sal_Bool SVGFilter::implCreateObjects()
{
+ if (maShapeSelection.is() && maShapeSelection->getCount())
+ {
+ // #i124608# export a given object selection
+ if (mSelectedPages.getLength() && mSelectedPages[0].is())
+ {
+ implCreateObjectsFromShapes(mSelectedPages[0], maShapeSelection);
+ return sal_True;
+ }
+ return sal_False;
+ }
+
sal_Int32 i, nCount;
for( i = 0, nCount = mMasterPageTargets.getLength(); i < nCount; ++i )
diff --git a/filter/source/svg/svgfilter.cxx b/filter/source/svg/svgfilter.cxx
index d8703da8c1c4..fc70d83a101c 100644
--- a/filter/source/svg/svgfilter.cxx
+++ b/filter/source/svg/svgfilter.cxx
@@ -66,7 +66,6 @@ SVGFilter::SVGFilter( const Reference< XComponentContext >& rxCtx ) :
mpDefaultSdrPage( NULL ),
mpSdrModel( NULL ),
mbPresentation( sal_False ),
- mbExportAll( sal_False ),
mbSinglePage( sal_False ),
mnVisiblePage( -1 ),
mpObjects( NULL )
@@ -97,13 +96,27 @@ sal_Bool SAL_CALL SVGFilter::filter( const Sequence< PropertyValue >& rDescripto
#ifndef DISABLE_EXPORT
else if( mxSrcDoc.is() )
{
- if( !mbExportAll && !mSelectedPages.hasElements() )
+ // #i124608# detext selection
+ sal_Bool bSelectionOnly = sal_False;
+ bool bGotSelection(false);
+
+ // #i124608# extract Single selection wanted from dialog return values
+ for ( sal_Int32 nInd = 0; nInd < rDescriptor.getLength(); nInd++ )
{
- uno::Reference< frame::XDesktop2 > xDesktop(frame::Desktop::create(mxContext));
- uno::Reference< frame::XFrame > xFrame(xDesktop->getCurrentFrame(),
- uno::UNO_QUERY_THROW);
- uno::Reference<frame::XController > xController(xFrame->getController(),
+ if ( rDescriptor[nInd].Name == "SelectionOnly" )
+ {
+ rDescriptor[nInd].Value >>= bSelectionOnly;
+ }
+ }
+
+ uno::Reference< frame::XDesktop2 > xDesktop(frame::Desktop::create(mxContext));
+ uno::Reference< frame::XFrame > xFrame(xDesktop->getCurrentFrame(),
+ uno::UNO_QUERY_THROW);
+ uno::Reference<frame::XController > xController(xFrame->getController(),
uno::UNO_QUERY_THROW);
+
+ if( !mSelectedPages.hasElements() )
+ {
uno::Reference<drawing::XDrawView > xDrawView(xController,
uno::UNO_QUERY_THROW);
uno::Reference<drawing::framework::XControllerManager> xManager(xController,
@@ -211,6 +224,31 @@ sal_Bool SAL_CALL SVGFilter::filter( const Sequence< PropertyValue >& rDescripto
}
}
+ if (bSelectionOnly)
+ {
+ // #i124608# when selection only is wanted, get the current object selection
+ // from the DrawView
+ Reference< view::XSelectionSupplier > xSelection (xController, UNO_QUERY);
+
+ if (xSelection.is())
+ {
+ uno::Any aSelection;
+
+ if (xSelection->getSelection() >>= aSelection)
+ {
+ bGotSelection = (sal_True == ( aSelection >>= maShapeSelection ));
+ }
+ }
+ }
+
+ if(bSelectionOnly && bGotSelection && 0 == maShapeSelection->getCount())
+ {
+ // #i124608# export selection, got maShapeSelection but no shape selected -> nothing
+ // to export, we are done (maybe return true, but a hint that nothing was done
+ // may be useful; it may have happened by error)
+ bRet = sal_False;
+ }
+ else {
/*
* We get all master page that are targeted by at least one draw page.
* The master page are put in an unordered set.
@@ -234,6 +272,7 @@ sal_Bool SAL_CALL SVGFilter::filter( const Sequence< PropertyValue >& rDescripto
}
bRet = implExport( rDescriptor );
+ }
}
#endif
else
diff --git a/filter/source/svg/svgfilter.hxx b/filter/source/svg/svgfilter.hxx
index 7fdf8f786495..c0f6f9d0b40c 100644
--- a/filter/source/svg/svgfilter.hxx
+++ b/filter/source/svg/svgfilter.hxx
@@ -242,7 +242,6 @@ private:
SdrPage* mpDefaultSdrPage;
SdrModel* mpSdrModel;
sal_Bool mbPresentation;
- sal_Bool mbExportAll;
sal_Bool mbSinglePage;
sal_Int32 mnVisiblePage;
PagePropertySet mVisiblePagePropSet;
@@ -259,6 +258,8 @@ private:
Reference< XComponent > mxDstDoc;
Reference< XDrawPage > mxDefaultPage;
Sequence< PropertyValue > maFilterData;
+ // #i124608# explicit ShapeSelection for export when export of the selection is wanted
+ Reference< XShapes > maShapeSelection;
XDrawPageSequence mSelectedPages;
XDrawPageSequence mMasterPageTargets;