Need code pointer for import of <draw:layer> attributes
Regina Henschel
rb.henschel at t-online.de
Wed Nov 22 16:32:15 UTC 2017
Hi all,
I've started on
https://bugs.documentfoundation.org/show_bug.cgi?id=101242. My current
work is in the attachment.
Problem: Although I remove the config-items IsVisible, IsPrintable,
IsLocked from the settings.xml of a file, the values from draw:display
and draw:locked of the <draw:layer> element are not used. It seems to
me, that somewhere the read values are overwritten with a default.
Where and when are the values from settings.xml transformed to
properties of the layers of a newly opened draw document?
Any other hint, where to look?
Besides that, it would be nice, if you could tell me, if my approach is
correct so far.
Kind regards
Regina
-------------- next part --------------
diff --git a/xmloff/source/draw/layerexp.cxx b/xmloff/source/draw/layerexp.cxx
index e1a3727f97f0..ec880e24f211 100644
--- a/xmloff/source/draw/layerexp.cxx
+++ b/xmloff/source/draw/layerexp.cxx
@@ -56,6 +56,9 @@ void SdXMLayerExporter::exportLayer( SvXMLExport& rExport )
const OUString strName( "Name" );
const OUString strTitle( "Title" );
const OUString strDescription( "Description" );
+ const OUString strIsLocked( "IsLocked" );
+ const OUString strIsVisible( "IsVisible" );
+ const OUString strIsPrintable( "IsPrintable" );
OUString sTmp;
@@ -70,6 +73,40 @@ void SdXMLayerExporter::exportLayer( SvXMLExport& rExport )
if(!sTmp.isEmpty())
rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_NAME, sTmp );
+ bool bIsLocked;
+ xLayer->getPropertyValue( strIsLocked ) >>= bIsLocked;
+ if ( bIsLocked )
+ rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_PROTECTED, "true" );
+ else
+ rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_PROTECTED, "false" );
+
+ bool bIsVisible;
+ xLayer->getPropertyValue( strIsVisible ) >>= bIsVisible;
+ bool bIsPrintable;
+ xLayer->getPropertyValue( strIsPrintable ) >>= bIsPrintable;
+ if ( bIsVisible )
+ {
+ if ( bIsPrintable )
+ {
+ rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_DISPLAY, "always" );
+ }
+ else
+ {
+ rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_DISPLAY, "screen" );
+ }
+ }
+ else
+ {
+ if ( bIsPrintable )
+ {
+ rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_DISPLAY, "printer" );
+ }
+ else
+ {
+ rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_DISPLAY, "none" );
+ }
+ }
+
SvXMLElementExport aEle( rExport, XML_NAMESPACE_DRAW, XML_LAYER, true, true );
// title property (as <svg:title> element)
diff --git a/xmloff/source/draw/layerimp.cxx b/xmloff/source/draw/layerimp.cxx
index bc28f6c83226..77b7dabe4b43 100644
--- a/xmloff/source/draw/layerimp.cxx
+++ b/xmloff/source/draw/layerimp.cxx
@@ -58,6 +58,8 @@ public:
private:
css::uno::Reference< css::container::XNameAccess > mxLayerManager;
OUString msName;
+ OUString mseDisplay; // always, none, printer, screen
+ OUString msbProtected; // false, true
OUStringBuffer sDescriptionBuffer;
OUStringBuffer sTitleBuffer;
};
@@ -77,7 +79,14 @@ SdXMLLayerContext::SdXMLLayerContext( SvXMLImport& rImport, sal_uInt16 nPrefix,
if( IsXMLToken( aLocalName, XML_NAME ) )
{
msName = sValue;
- break; // no more attributes needed
+ }
+ if( IsXMLToken( aLocalName, XML_PROTECTED ) )
+ {
+ msbProtected = sValue;
+ }
+ if( IsXMLToken( aLocalName, XML_DISPLAY ) )
+ {
+ mseDisplay = sValue;
}
}
}
@@ -127,6 +136,27 @@ void SdXMLLayerContext::EndElement()
{
xLayer->setPropertyValue("Title", Any( sTitleBuffer.makeStringAndClear() ) );
xLayer->setPropertyValue("Description", Any( sDescriptionBuffer.makeStringAndClear() ) );
+ xLayer->setPropertyValue("IsLocked",(msbProtected == "true") ? Any(true) : Any(false) );
+ if( mseDisplay == "always" )
+ {
+ xLayer->setPropertyValue("IsVisible", Any(true) );
+ xLayer->setPropertyValue("IsPrintable", Any(true) );
+ }
+ else if( mseDisplay == "screen" )
+ {
+ xLayer->setPropertyValue("IsVisible", Any(true) );
+ xLayer->setPropertyValue("IsPrintable",Any(false) );
+ }
+ else if( mseDisplay == "printer" )
+ {
+ xLayer->setPropertyValue("IsVisible", Any(false) );
+ xLayer->setPropertyValue("IsPrintable", Any(true) );
+ }
+ else // "none"
+ {
+ xLayer->setPropertyValue("IsVisible", Any(false) );
+ xLayer->setPropertyValue("IsPrintable", Any(false) );
+ }
}
}
catch( Exception& )
More information about the LibreOffice
mailing list