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
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& )
_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to