summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorRegina Henschel <rb.henschel@t-online.de>2018-08-17 19:02:55 +0200
committerTomaž Vajngerl <quikee@gmail.com>2018-08-27 16:27:17 +0200
commit9826a4e4a6aa9953d3f354fe645a23f9dae59d77 (patch)
tree25a38cbe766a092b8df736ab5c75581d77944895 /svx
parent3ed1bd19eb7fb7898bcca8e046e058799f836063 (diff)
tdf#101242 Support draw:display and draw:protect attributes of ODF
LibreOffice writes the properties visible, printable and locked of layers into items in the subfile settings.xml and handles them as properties of the view. ODF handles them as property of the layer. To become more ODF conform as a first step these properties are now read and written. They are used to initialize the view in case they are missing in settings.xml, which is the case for foreign documents. The ODF properties are written in addition to the items in settings.xml, so that older versions will notice no difference with such documents. SdModelTestBase is changed to handle odg as Draw document. Change-Id: I190ecc51fc6ee91ec4b96d06bb216ce517bdfcfe Reviewed-on: https://gerrit.libreoffice.org/59269 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'svx')
-rw-r--r--svx/source/svdraw/svdlayer.cxx46
-rw-r--r--svx/source/svdraw/svdpagv.cxx43
2 files changed, 86 insertions, 3 deletions
diff --git a/svx/source/svdraw/svdlayer.cxx b/svx/source/svdraw/svdlayer.cxx
index ff497d3d6104..d17b61dbf1f0 100644
--- a/svx/source/svdraw/svdlayer.cxx
+++ b/svx/source/svdraw/svdlayer.cxx
@@ -92,9 +92,14 @@ void SdrLayerIDSet::QueryValue( css::uno::Any & rAny ) const
rAny <<= aSeq;
}
+
SdrLayer::SdrLayer(SdrLayerID nNewID, const OUString& rNewName) :
maName(rNewName), pModel(nullptr), nType(0), nID(nNewID)
{
+ // ODF default values
+ mbVisibleODF = true;
+ mbPrintableODF = true;
+ mbLockedODF = false;
}
void SdrLayer::SetStandardLayer()
@@ -193,6 +198,16 @@ void SdrLayerAdmin::Broadcast() const
}
}
+void SdrLayerAdmin::InsertLayer(SdrLayer* pLayer, sal_uInt16 nPos)
+{
+ if(nPos==0xFFFF)
+ aLayer.push_back(pLayer);
+ else
+ aLayer.insert(aLayer.begin() + nPos, pLayer);
+ pLayer->SetModel(pModel);
+ Broadcast();
+}
+
SdrLayer* SdrLayerAdmin::RemoveLayer(sal_uInt16 nPos)
{
SdrLayer* pRetLayer=aLayer[nPos];
@@ -321,4 +336,35 @@ void SdrLayerAdmin::SetControlLayerName(const OUString& rNewName)
maControlLayerName = rNewName;
}
+void SdrLayerAdmin::getVisibleLayersODF( SdrLayerIDSet& rOutSet) const
+{
+ rOutSet.ClearAll();
+ for( SdrLayer* pCurrentLayer : aLayer )
+ {
+ if ( pCurrentLayer->IsVisibleODF() )
+ rOutSet.Set( pCurrentLayer->GetID() );
+ }
+}
+
+void SdrLayerAdmin::getPrintableLayersODF( SdrLayerIDSet& rOutSet) const
+{
+ rOutSet.ClearAll();
+ for( SdrLayer* pCurrentLayer : aLayer )
+ {
+ if ( pCurrentLayer->IsPrintableODF() )
+ rOutSet.Set( pCurrentLayer->GetID() );
+ }
+}
+
+void SdrLayerAdmin::getLockedLayersODF( SdrLayerIDSet& rOutSet) const
+{
+ rOutSet.ClearAll();
+ for( SdrLayer* pCurrentLayer : aLayer )
+ {
+ if ( pCurrentLayer->IsLockedODF() )
+ rOutSet.Set( pCurrentLayer->GetID() );
+ }
+}
+
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/svdraw/svdpagv.cxx b/svx/source/svdraw/svdpagv.cxx
index 1f9a53a8d323..bbb0d8e19e99 100644
--- a/svx/source/svdraw/svdpagv.cxx
+++ b/svx/source/svdraw/svdpagv.cxx
@@ -143,11 +143,48 @@ SdrPageView::SdrPageView(SdrPage* pPage1, SdrView& rNewView)
{
aPgOrg.setX(mpPage->GetLeftBorder() );
aPgOrg.setY(mpPage->GetUpperBorder() );
+
+ // Get layersets from document, master page or page to be ODF conform.
+ // Currently only partly implemented, the comments show, what is missing.
+ const SdrLayerAdmin& rPageLayerAdmin( mpPage->GetLayerAdmin() );
+ if ( rPageLayerAdmin.GetLayerCount() == 0 )
+ {
+ // if (master page has layers)
+ // Get LayerIDSet from master page.
+ // else
+ // Get default LayerIDSet from document
+ // Currently the parent LayerAdmin is the LayerAdmin of the document
+ SdrLayerAdmin* pParentLayerAdmin = rPageLayerAdmin.GetParent();
+ if ( pParentLayerAdmin )
+ {
+ pParentLayerAdmin->getVisibleLayersODF( aLayerVisi );
+ pParentLayerAdmin->getPrintableLayersODF( aLayerPrn );
+ pParentLayerAdmin->getLockedLayersODF( aLayerLock );
+ }
+ else
+ {
+ // This should not happen. ToDo: assertion for debug mode
+ aLayerVisi.SetAll();
+ aLayerPrn.SetAll();
+ }
+ }
+ else
+ {
+ // page has own Layers. Get LayerIDSet from page, maybe from master page in addition.
+ rPageLayerAdmin.getVisibleLayersODF( aLayerVisi );
+ rPageLayerAdmin.getPrintableLayersODF( aLayerPrn );
+ rPageLayerAdmin.getLockedLayersODF( aLayerLock );
+ // if (master page has layers)
+ // Add the layer IDs for master page layers to the set from the page.
+ }
+ }
+ else
+ { // SdrPageView without page?
+ // ToDo: assertion for debug mode
+ aLayerVisi.SetAll();
+ aLayerPrn.SetAll();
}
mbHasMarked = false;
- aLayerVisi.SetAll();
- aLayerPrn.SetAll();
-
mbVisible = false;
pCurrentList = nullptr;
pCurrentGroup = nullptr;