[Libreoffice-commits] core.git: comphelper/Library_comphelper.mk comphelper/source include/comphelper officecfg/registry sd/inc sd/Package_xml.mk sd/source sd/xml test/Package_unittest.mk test/user-template
Vishv Brahmbhatt
vishvbrahmbhatt19 at gmail.com
Tue Sep 10 04:15:14 PDT 2013
comphelper/Library_comphelper.mk | 1
comphelper/source/misc/expandmacro.cxx | 59 ++
include/comphelper/expandmacro.hxx | 57 ++
officecfg/registry/schema/org/openoffice/Office/Impress.xcs | 14
sd/Package_xml.mk | 1
sd/inc/drawdoc.hxx | 8
sd/source/core/drawdoc.cxx | 64 +-
sd/source/core/sdpage.cxx | 271 +++++-----
sd/xml/objectlist.xml | 56 +-
test/Package_unittest.mk | 1
test/user-template/user/config/soffice.cfg/simpress/objectlist.xml | 41 +
11 files changed, 417 insertions(+), 156 deletions(-)
New commits:
commit d50bd55c5d78dc10d40be502f8d6638bcc0ce890
Author: Vishv Brahmbhatt <vishvbrahmbhatt19 at gmail.com>
Date: Wed Aug 28 01:52:17 2013 +0530
Parsing master presentation objects from 'objectlist.xml'
Parsing the property values of master presentation objects.
Also new functions added to comphelper module for expanding
filepaths macro to appropriate system file paths(for
configuration files present at 'Impress.xcs')
Change-Id: If0381a12155673e85103ddb5d51c34ae53fe2ecb
diff --git a/comphelper/Library_comphelper.mk b/comphelper/Library_comphelper.mk
index 09a6889..4b30338 100644
--- a/comphelper/Library_comphelper.mk
+++ b/comphelper/Library_comphelper.mk
@@ -86,6 +86,7 @@ $(eval $(call gb_Library_add_exception_objects,comphelper,\
comphelper/source/misc/documentiologring \
comphelper/source/misc/evtlistenerhlp \
comphelper/source/misc/evtmethodhelper \
+ comphelper/source/misc/expandmacro \
comphelper/source/misc/ihwrapnofilter \
comphelper/source/misc/instancelocker \
comphelper/source/misc/interaction \
diff --git a/comphelper/source/misc/expandmacro.cxx b/comphelper/source/misc/expandmacro.cxx
new file mode 100644
index 0000000..a7eae4b
--- /dev/null
+++ b/comphelper/source/misc/expandmacro.cxx
@@ -0,0 +1,59 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <comphelper/expandmacro.hxx>
+
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/util/theMacroExpander.hpp>
+#include <rtl/ustring.hxx>
+#include <rtl/uri.hxx>
+#include <osl/file.h>
+#include <comphelper/processfactory.hxx>
+
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using ::com::sun::star::lang::XMultiServiceFactory;
+
+namespace comphelper
+{
+ rtl::OUString getExpandedFilePath(const rtl::OUString& filepath)
+ {
+ const Reference<XComponentContext> xContext( ::comphelper::getProcessComponentContext() );
+ return getExpandedFilePath(filepath, xContext);
+ }
+
+ rtl::OUString getExpandedFilePath(const rtl::OUString& filepath, const Reference<XComponentContext>& xContext)
+ {
+ Reference< util::XMacroExpander > xMacroExpander = util::theMacroExpander::get( xContext );
+
+ rtl::OUString aFilename = filepath;
+
+ if( aFilename.startsWith( "vnd.sun.star.expand:" ) )
+ {
+ // cut protocol
+ rtl::OUString aMacro( aFilename.copy( sizeof ( "vnd.sun.star.expand:" ) -1 ) );
+
+ // decode uric class chars
+ aMacro = rtl::Uri::decode( aMacro, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 );
+
+ // expand macro string
+ aFilename = xMacroExpander->expandMacros( aMacro );
+ }
+
+ if( aFilename.startsWith( "file://" ) )
+ {
+ rtl::OUString aSysPath;
+ if( osl_getSystemPathFromFileURL( aFilename.pData, &aSysPath.pData ) == osl_File_E_None )
+ aFilename = aSysPath;
+ }
+
+ return aFilename;
+ }
+}
diff --git a/include/comphelper/expandmacro.hxx b/include/comphelper/expandmacro.hxx
new file mode 100644
index 0000000..efd2552
--- /dev/null
+++ b/include/comphelper/expandmacro.hxx
@@ -0,0 +1,57 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef COMPHELPER_EXPANDMACRO_HXX_INCLUDED
+#define COMPHELPER_EXPANDMACRO_HXX_INCLUDED
+
+#include "rtl/ustring.hxx"
+#include "comphelper/comphelperdllapi.h"
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/uno/XComponentContext.hpp>
+
+namespace comphelper
+{
+ /**
+ A helper function to get expanded version of macro for filepaths.
+
+ If the given path is prefixed by "vnd.sun.star.expand:", this
+ function substitutes contained macro references. It then always
+ returns a system file path, if necessary converting file
+ URIs. Example:
+ vnd.sun.star.expand:$BRAND_BASE_DIR/$BRAND_SHARE_SUBDIR gets
+ converted to e.g. /usr/lib64/libreoffice/share.
+
+ @param path to operate on. Both system file path and file URIs are accepted.
+
+ @return macro-expanded system file path.
+ */
+ COMPHELPER_DLLPUBLIC rtl::OUString getExpandedFilePath(const rtl::OUString& filepath);
+
+ /**
+ A helper function to get expanded version of macro for filepaths.
+
+ If the given path is prefixed by "vnd.sun.star.expand:", this
+ function substitutes contained macro references. It then always
+ returns a system file path, if necessary converting file
+ URIs. Example:
+ vnd.sun.star.expand:$BRAND_BASE_DIR/$BRAND_SHARE_SUBDIR gets
+ converted to e.g. /usr/lib64/libreoffice/share.
+
+ Use this version if you have a local reference of a component
+ context at hand, saves us the extra lookup.
+
+ @param path to operate on. Both system file path and file URIs are accepted.
+ @param xContext refers to the component context of the process.
+
+ @return macro-expanded system file path.
+ */
+ COMPHELPER_DLLPUBLIC rtl::OUString getExpandedFilePath(const rtl::OUString& filepath,
+ const ::com::sun::star::uno::Reference<css::uno::XComponentContext>& xContext);
+}
+#endif
diff --git a/officecfg/registry/schema/org/openoffice/Office/Impress.xcs b/officecfg/registry/schema/org/openoffice/Office/Impress.xcs
index c971846..b740aca 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Impress.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Impress.xcs
@@ -482,6 +482,20 @@
</info>
<value oor:separator=";">vnd.sun.star.expand:$BRAND_BASE_DIR/$BRAND_SHARE_SUBDIR/config/soffice.cfg/simpress/layoutlist.xml</value>
</prop>
+ <prop oor:name="PresObjListFiles" oor:type="oor:string-list" oor:nillable="false">
+ <info>
+ <desc>
+ Contains a list of xml files defining the presentation
+ object used in the master page of "notes" and "handout".
+ It contains properties of presentation objects,like
+ their position, width, and height. Entries are run
+ through macro expansion, so, vnd.sun.star.expand prefix is
+ allowed.
+ </desc>
+ <label>List of files containing master presentation objects</label>
+ </info>
+ <value oor:separator=";">vnd.sun.star.expand:$BRAND_BASE_DIR/$BRAND_SHARE_SUBDIR/config/soffice.cfg/simpress/objectlist.xml</value>
+ </prop>
<prop oor:name="PreviewNewEffects" oor:type="xs:boolean" oor:nillable="false">
<!-- OldPath: -->
<!-- OldLocation: -->
diff --git a/sd/Package_xml.mk b/sd/Package_xml.mk
index 694d452..ae635d4 100644
--- a/sd/Package_xml.mk
+++ b/sd/Package_xml.mk
@@ -15,6 +15,7 @@ $(eval $(call gb_Package_add_files,sd_xml,$(LIBO_SHARE_FOLDER)/config/soffice.cf
effects.xml \
transitions.xml \
layoutlist.xml \
+ objectlist.xml \
))
# vim: set noet sw=4 ts=4:
diff --git a/sd/inc/drawdoc.hxx b/sd/inc/drawdoc.hxx
index 22fb05b..85f4ab2 100644
--- a/sd/inc/drawdoc.hxx
+++ b/sd/inc/drawdoc.hxx
@@ -192,6 +192,9 @@ private:
std::vector<com::sun::star::uno::Reference<
com::sun::star::xml::dom::XNode> > maLayoutInfo;
+ std::vector<com::sun::star::uno::Reference<
+ com::sun::star::xml::dom::XNode> > maPresObjectInfo;
+
bool mbUseEmbedFonts;
protected:
@@ -272,6 +275,10 @@ public:
com::sun::star::xml::dom::XNode> >& GetLayoutVector() const
{ return maLayoutInfo; }
+ /// load xml-based impress master presentation object definitions into document
+ void InitObjectVector();
+ /// return reference to vector of master presentation object definitions
+ const std::vector<com::sun::star::uno::Reference<com::sun::star::xml::dom::XNode>>& GetObjectVector() const { return maPresObjectInfo; }
/** Insert pages into this document
This method inserts whole pages into this document, either
@@ -317,6 +324,7 @@ public:
Whether the replace operation should take the name from the new
page, or preserve the old name
*/
+
sal_Bool InsertBookmarkAsPage(const std::vector<OUString> &rBookmarkList,
std::vector<OUString> *pExchangeList,
sal_Bool bLink, sal_Bool bReplace, sal_uInt16 nPgPos,
diff --git a/sd/source/core/drawdoc.cxx b/sd/source/core/drawdoc.cxx
index 6c20c7e..e327215 100644
--- a/sd/source/core/drawdoc.cxx
+++ b/sd/source/core/drawdoc.cxx
@@ -70,11 +70,9 @@
#include <com/sun/star/xml/dom/XNamedNodeMap.hpp>
#include <com/sun/star/xml/dom/DocumentBuilder.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/io/XInputStream.hpp>
-#include <com/sun/star/util/theMacroExpander.hpp>
#include <rtl/ustring.hxx>
#include <rtl/uri.hxx>
-#include <osl/file.h>
+#include <comphelper/expandmacro.hxx>
#include <editeng/outliner.hxx>
#include "drawdoc.hxx"
@@ -105,9 +103,7 @@ using namespace ::com::sun::star::linguistic2;
using namespace com::sun::star::xml::dom;
using ::com::sun::star::uno::Reference;
-using ::com::sun::star::io::XInputStream;
using ::com::sun::star::lang::XMultiServiceFactory;
-using ::com::sun::star::container::XNameAccess;
using ::com::sun::star::beans::PropertyValue;
TYPEINIT1( SdDrawDocument, FmFormModel );
@@ -183,6 +179,7 @@ SdDrawDocument::SdDrawDocument(DocumentType eType, SfxObjectShell* pDrDocSh)
new ImpMasterPageListWatcher(*this));
InitLayoutVector();
+ InitObjectVector();
SetObjectShell(pDrDocSh); // for VCDrawModel
if (mpDocSh)
@@ -995,36 +992,16 @@ void SdDrawDocument::InitLayoutVector()
{
const Reference<css::uno::XComponentContext> xContext(
::comphelper::getProcessComponentContext() );
- Reference< util::XMacroExpander > xMacroExpander(
- util::theMacroExpander::get( xContext ) );
// get file list from configuration
Sequence< rtl::OUString > aFiles(
officecfg::Office::Impress::Misc::LayoutListFiles::get(xContext) );
- // loop over each file in sequence
- rtl::OUString aFilename;
+ rtl::OUString sFilename;
for( sal_Int32 i=0; i < aFiles.getLength(); ++i )
{
- aFilename = aFiles[i];
- if( aFilename.startsWith( "vnd.sun.star.expand:" ) )
- {
- // cut protocol
- rtl::OUString aMacro( aFilename.copy( sizeof ( "vnd.sun.star.expand:" ) -1 ) );
-
- // decode uric class chars
- aMacro = rtl::Uri::decode( aMacro, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 );
-
- // expand macro string
- aFilename = xMacroExpander->expandMacros( aMacro );
- }
-
- if( aFilename.startsWith( "file://" ) )
- {
- rtl::OUString aSysPath;
- if( osl_getSystemPathFromFileURL( aFilename.pData, &aSysPath.pData ) == osl_File_E_None )
- aFilename = aSysPath;
- }
+ rtl::OUString filepath = aFiles[i];
+ sFilename= ::comphelper::getExpandedFilePath(filepath,xContext);
// load layout file into DOM
Reference< XMultiServiceFactory > xServiceFactory(
@@ -1033,7 +1010,7 @@ void SdDrawDocument::InitLayoutVector()
DocumentBuilder::create( comphelper::getComponentContext (xServiceFactory) ));
// loop over every layout entry in current file
- const Reference<XDocument> xDoc = xDocBuilder->parseURI( aFilename );
+ const Reference<XDocument> xDoc = xDocBuilder->parseURI( sFilename );
const Reference<XNodeList> layoutlist = xDoc->getElementsByTagName("layout");
const int nElements = layoutlist->getLength();
for(int index=0; index < nElements; index++)
@@ -1041,4 +1018,33 @@ void SdDrawDocument::InitLayoutVector()
}
}
+void SdDrawDocument::InitObjectVector()
+{
+ const Reference<css::uno::XComponentContext> xContext(
+ ::comphelper::getProcessComponentContext() );
+
+ // get file list from configuration
+ Sequence< rtl::OUString > aFiles(
+ officecfg::Office::Impress::Misc::PresObjListFiles::get(xContext) );
+
+ rtl::OUString sFilename;
+ for( sal_Int32 i=0; i < aFiles.getLength(); ++i )
+ {
+ rtl::OUString filepath = aFiles[i];
+ sFilename= ::comphelper::getExpandedFilePath(filepath,xContext);
+
+ // load presentation object file into DOM
+ Reference< XMultiServiceFactory > xServiceFactory(
+ xContext->getServiceManager() , UNO_QUERY_THROW );
+ const Reference<XDocumentBuilder> xDocBuilder(
+ DocumentBuilder::create( comphelper::getComponentContext (xServiceFactory) ));
+
+ // loop over every object entry in current file
+ const Reference<XDocument> xDoc = xDocBuilder->parseURI( sFilename );
+ const Reference<XNodeList> objectlist = xDoc->getElementsByTagName("object");
+ const int nElements = objectlist->getLength();
+ for(int index=0; index < nElements; index++)
+ maPresObjectInfo.push_back( objectlist->item(index) );
+ }
+}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/core/sdpage.cxx b/sd/source/core/sdpage.cxx
index 47dbc71..bd806ee 100644
--- a/sd/source/core/sdpage.cxx
+++ b/sd/source/core/sdpage.cxx
@@ -850,8 +850,80 @@ void SdPage::CreateTitleAndLayout(sal_Bool bInit, sal_Bool bCreate )
}
}
+static const std::vector<rtl::OUString> PageKindVector = {"PK_STANDARD","PK_NOTES" , "PK_HANDOUT"};
+static const std::vector<rtl::OUString> PresObjKindVector = {"PRESOBJ_NONE", "PRESOBJ_TITLE", "PRESOBJ_OUTLINE",
+ "PRESOBJ_TEXT" ,"PRESOBJ_GRAPHIC" , "PRESOBJ_OBJECT",
+ "PRESOBJ_CHART", "PRESOBJ_ORGCHART", "PRESOBJ_TABLE",
+ "PRESOBJ_IMAGE", "PRESOBJ_PAGE", "PRESOBJ_HANDOUT",
+ "PRESOBJ_NOTES","PRESOBJ_HEADER", "PRESOBJ_FOOTER",
+ "PRESOBJ_DATETIME", "PRESOBJ_SLIDENUMBER", "PRESOBJ_CALC",
+ "PRESOBJ_MEDIA", "PRESOBJ_MAX" };
+
+void getPresObjProp( SdPage rPage, const rtl::OUString& sObjKind, const rtl::OUString& sPageKind, double presObjPropValue[])
+{
+ bool bNoObjectFound = true; //used to break from outer loop
+
+ const std::vector< Reference<XNode> >& objectInfo = static_cast<const SdDrawDocument*>(rPage.GetModel())->GetObjectVector();
+ for( std::vector< Reference<XNode> >::const_iterator aIter=objectInfo.begin(); aIter != objectInfo.end(); ++aIter )
+ {
+ if(bNoObjectFound)
+ {
+ Reference<XNode> objectNode = *aIter; //get i'th object element
+ Reference<XNamedNodeMap> objectattrlist = objectNode->getAttributes();
+ Reference<XNode> objectattr = objectattrlist->getNamedItem("type");
+ rtl::OUString sObjType = objectattr->getNodeValue();
+
+ if(sObjType == sObjKind)
+ {
+ Reference<XNodeList> objectChildren = objectNode->getChildNodes();
+ const int objSize = objectChildren->getLength();
+
+ for( int j=0; j< objSize; j++)
+ {
+ Reference<XNode> obj = objectChildren->item(j);
+ rtl::OUString nodename = obj->getNodeName();
+
+ //check whether children is blank 'text-node' or 'object-prop' node
+ if(nodename == "object-prop")
+ {
+ Reference<XNamedNodeMap> ObjAttributes = obj->getAttributes();
+ Reference<XNode> ObjPageKind = ObjAttributes->getNamedItem("pagekind");
+ rtl::OUString sObjPageKind = ObjPageKind->getNodeValue();
+
+ if(sObjPageKind == sPageKind)
+ {
+ Reference<XNode> ObjSizeHeight = ObjAttributes->getNamedItem("relative-height");
+ rtl::OUString sValue = ObjSizeHeight->getNodeValue();
+ presObjPropValue[0] = sValue.toDouble();
+
+ Reference<XNode> ObjSizeWidth = ObjAttributes->getNamedItem("relative-width");
+ sValue = ObjSizeWidth->getNodeValue();
+ presObjPropValue[1] = sValue.toDouble();
+
+ Reference<XNode> ObjPosX = ObjAttributes->getNamedItem("relative-posX");
+ sValue = ObjPosX->getNodeValue();
+ presObjPropValue[2] = sValue.toDouble();
+
+ Reference<XNode> ObjPosY = ObjAttributes->getNamedItem("relative-posY");
+ sValue = ObjPosY->getNodeValue();
+ presObjPropValue[3] = sValue.toDouble();
+
+ bNoObjectFound = false;
+ break;
+ }
+ }
+ }
+ }
+ }
+ else
+ break;
+ }
+}
+
SdrObject* SdPage::CreateDefaultPresObj(PresObjKind eObjKind, bool bInsert)
{
+ double propvalue[] = {0,0,0,0};
+
if( eObjKind == PRESOBJ_TITLE )
{
Rectangle aTitleRect( GetTitleRect() );
@@ -869,46 +941,35 @@ SdrObject* SdPage::CreateDefaultPresObj(PresObjKind eObjKind, bool bInsert)
}
else if( (eObjKind == PRESOBJ_FOOTER) || (eObjKind == PRESOBJ_DATETIME) || (eObjKind == PRESOBJ_SLIDENUMBER) || (eObjKind == PRESOBJ_HEADER ) )
{
+ rtl::OUString sObjKind = PresObjKindVector[eObjKind];
+ rtl::OUString sPageKind = PageKindVector[mePageKind];
// create footer objects for standard master page
if( mePageKind == PK_STANDARD )
{
const long nLftBorder = GetLftBorder();
const long nUppBorder = GetUppBorder();
- Size aPageSize ( GetSize() );
- aPageSize.Width() -= nLftBorder + GetRgtBorder();
- aPageSize.Height() -= nUppBorder + GetLwrBorder();
+ Point aPos ( nLftBorder, nUppBorder );
+ Size aSize ( GetSize() );
- const int Y = long(nUppBorder + aPageSize.Height() * 0.911);
- const int W1 = long(aPageSize.Width() * 0.233);
- const int W2 = long(aPageSize.Width() * 0.317);
- const int H = long(aPageSize.Height() * 0.069);
+ aSize.Width() -= nLftBorder + GetRgtBorder();
+ aSize.Height() -= nUppBorder + GetLwrBorder();
- if( eObjKind == PRESOBJ_DATETIME )
- {
- Point aPos( long(nLftBorder+(aPageSize.Width()*0.05)), Y );
- Size aSize( W1, H );
- Rectangle aRect( aPos, aSize );
- return CreatePresObj( PRESOBJ_DATETIME, sal_False, aRect, bInsert );
- }
- else if( eObjKind == PRESOBJ_FOOTER )
- {
- Point aPos( long(nLftBorder+ aPageSize.Width() * 0.342), Y );
- Size aSize( W2, H );
- Rectangle aRect( aPos, aSize );
- return CreatePresObj( PRESOBJ_FOOTER, sal_False, aRect, bInsert );
- }
- else if( eObjKind == PRESOBJ_SLIDENUMBER )
+ getPresObjProp( *this, sObjKind, sPageKind, propvalue);
+ aPos.X() += long( aSize.Width() * propvalue[2] );
+ aPos.Y() += long( aSize.Height() * propvalue[3] );
+ aSize.Width() = long( aSize.Width() * propvalue[1] );
+ aSize.Height() = long( aSize.Height() * propvalue[0] );
+
+ if(eObjKind == PRESOBJ_HEADER )
{
- Point aPos( long(nLftBorder+(aPageSize.Width()*0.717)), Y );
- Size aSize( W1, H );
- Rectangle aRect( aPos, aSize );
- return CreatePresObj( PRESOBJ_SLIDENUMBER, sal_False, aRect, bInsert );
+ OSL_FAIL( "SdPage::CreateDefaultPresObj() - can't create a header placeholder for a slide master" );
+ return NULL;
}
else
{
- OSL_FAIL( "SdPage::CreateDefaultPresObj() - can't create a header placeholder for a slide master" );
- return NULL;
+ Rectangle aRect( aPos, aSize );
+ return CreatePresObj( eObjKind, sal_False, aRect, bInsert );
}
}
else
@@ -918,44 +979,24 @@ SdrObject* SdPage::CreateDefaultPresObj(PresObjKind eObjKind, bool bInsert)
aPageSize.Width() -= GetLftBorder() + GetRgtBorder();
aPageSize.Height() -= GetUppBorder() + GetLwrBorder();
+ Point aPosition ( GetLftBorder(), GetUppBorder() );
- const int NOTES_HEADER_FOOTER_WIDTH = long(aPageSize.Width() * 0.434);
- const int NOTES_HEADER_FOOTER_HEIGHT = long(aPageSize.Height() * 0.05);
-
+ getPresObjProp( *this, sObjKind, sPageKind, propvalue);
+ int NOTES_HEADER_FOOTER_WIDTH = long(aPageSize.Width() * propvalue[1]);
+ int NOTES_HEADER_FOOTER_HEIGHT = long(aPageSize.Height() * propvalue[0]);
Size aSize( NOTES_HEADER_FOOTER_WIDTH, NOTES_HEADER_FOOTER_HEIGHT );
+ Point aPos ( 0 ,0 );
+ if( propvalue[2] == 0 )
+ aPos.X() = aPosition.X();
+ else
+ aPos.X() = aPosition.X() + long( aPageSize.Width() - NOTES_HEADER_FOOTER_WIDTH );
+ if( propvalue[3] == 0 )
+ aPos.Y() = aPosition.Y();
+ else
+ aPos.Y() = aPosition.Y() + long( aPageSize.Height() - NOTES_HEADER_FOOTER_HEIGHT );
- const int X1 = GetLftBorder();
- const int X2 = GetLftBorder() + long(aPageSize.Width() - NOTES_HEADER_FOOTER_WIDTH);
- const int Y1 = GetUppBorder();
- const int Y2 = GetUppBorder() + long(aPageSize.Height() - NOTES_HEADER_FOOTER_HEIGHT );
-
- if( eObjKind == PRESOBJ_HEADER )
- {
- Point aPos( X1, Y1 );
- Rectangle aRect( aPos, aSize );
- return CreatePresObj( PRESOBJ_HEADER, sal_False, aRect, bInsert );
- }
- else if( eObjKind == PRESOBJ_DATETIME )
- {
- Point aPos( X2, Y1 );
- Rectangle aRect( aPos, aSize );
- return CreatePresObj( PRESOBJ_DATETIME, sal_False, aRect, bInsert );
- }
- else if( eObjKind == PRESOBJ_FOOTER )
- {
- Point aPos( X1, Y2 );
- Rectangle aRect( aPos, aSize );
- return CreatePresObj( PRESOBJ_FOOTER, sal_False, aRect, bInsert );
- }
- else if( eObjKind == PRESOBJ_SLIDENUMBER )
- {
- Point aPos( X2, Y2 );
- Rectangle aRect( aPos, aSize );
- return CreatePresObj( PRESOBJ_SLIDENUMBER, sal_False, aRect, bInsert );
- }
-
- OSL_FAIL("SdPage::CreateDefaultPresObj() - this should not happen!");
- return NULL;
+ Rectangle aRect( aPos, aSize );
+ return CreatePresObj( eObjKind, sal_False, aRect, bInsert );
}
}
else
@@ -974,6 +1015,7 @@ SdrObject* SdPage::CreateDefaultPresObj(PresObjKind eObjKind, bool bInsert)
Rectangle SdPage::GetTitleRect() const
{
Rectangle aTitleRect;
+ double propvalue[] = {0,0,0,0};
if (mePageKind != PK_HANDOUT)
{
@@ -984,21 +1026,26 @@ Rectangle SdPage::GetTitleRect() const
Size aTitleSize ( GetSize() );
aTitleSize.Width() -= GetLftBorder() + GetRgtBorder();
aTitleSize.Height() -= GetUppBorder() + GetLwrBorder();
+ rtl::OUString sPageKind = PageKindVector[mePageKind];
if (mePageKind == PK_STANDARD)
- {
- aTitlePos.X() += long( aTitleSize.Width() * 0.05 );
- aTitlePos.Y() += long( aTitleSize.Height() * 0.0399 );
- aTitleSize.Width() = long( aTitleSize.Width() * 0.9 );
- aTitleSize.Height() = long( aTitleSize.Height() * 0.167 );
+ {
+ getPresObjProp( *this , "PRESOBJ_TITLE" ,sPageKind, propvalue);
+ aTitlePos.X() += long( aTitleSize.Width() * propvalue[2] );
+ aTitlePos.Y() += long( aTitleSize.Height() * propvalue[3] );
+ aTitleSize.Width() = long( aTitleSize.Width() * propvalue[1] );
+ aTitleSize.Height() = long( aTitleSize.Height() * propvalue[0] );
}
else if (mePageKind == PK_NOTES)
{
Point aPos = aTitlePos;
- aPos.Y() += long( aTitleSize.Height() * 0.076 );
+ getPresObjProp( *this, "PRESOBJ_TITLE" ,sPageKind, propvalue);
+ aPos.X() += long( aTitleSize.Width() * propvalue[2] );
+ aPos.Y() += long( aTitleSize.Height() * propvalue[3] );
// limit height
- aTitleSize.Height() = (long) (aTitleSize.Height() * 0.375);
+ aTitleSize.Height() = long( aTitleSize.Height() * propvalue[0] );
+ aTitleSize.Width() = long( aTitleSize.Width() * propvalue[1] );
Size aPartArea = aTitleSize;
Size aSize;
@@ -1052,6 +1099,7 @@ Rectangle SdPage::GetTitleRect() const
Rectangle SdPage::GetLayoutRect() const
{
Rectangle aLayoutRect;
+ double propvalue[] = {0,0,0,0};
if (mePageKind != PK_HANDOUT)
{
@@ -1059,22 +1107,25 @@ Rectangle SdPage::GetLayoutRect() const
Size aLayoutSize ( GetSize() );
aLayoutSize.Width() -= GetLftBorder() + GetRgtBorder();
aLayoutSize.Height() -= GetUppBorder() + GetLwrBorder();
+ rtl::OUString sPageKind = PageKindVector[mePageKind];
if (mePageKind == PK_STANDARD)
{
- aLayoutPos.X() += long( aLayoutSize.Width() * 0.05 );
- aLayoutPos.Y() += long( aLayoutSize.Height() * 0.234 );
- aLayoutSize.Width() = long( aLayoutSize.Width() * 0.9 );
- aLayoutSize.Height() = long( aLayoutSize.Height() * 0.58 );
+ getPresObjProp( *this ,"PRESOBJ_OUTLINE", sPageKind, propvalue);
+ aLayoutPos.X() += long( aLayoutSize.Width() * propvalue[2] );
+ aLayoutPos.Y() += long( aLayoutSize.Height() * propvalue[3] );
+ aLayoutSize.Width() = long( aLayoutSize.Width() * propvalue[1] );
+ aLayoutSize.Height() = long( aLayoutSize.Height() * propvalue[0] );
aLayoutRect.SetPos(aLayoutPos);
aLayoutRect.SetSize(aLayoutSize);
}
else if (mePageKind == PK_NOTES)
{
- aLayoutPos.X() += long( aLayoutSize.Width() * 0.1 );
- aLayoutPos.Y() += long( aLayoutSize.Height() * 0.475 );
- aLayoutSize.Width() = long( aLayoutSize.Width() * 0.8 );
- aLayoutSize.Height() = long( aLayoutSize.Height() * 0.45 );
+ getPresObjProp( *this, "PRESOBJ_NOTES", sPageKind, propvalue);
+ aLayoutPos.X() += long( aLayoutSize.Width() * propvalue[2] );
+ aLayoutPos.Y() += long( aLayoutSize.Height() * propvalue[3] );
+ aLayoutSize.Width() = long( aLayoutSize.Width() * propvalue[1] );
+ aLayoutSize.Height() = long( aLayoutSize.Height() * propvalue[0] );
aLayoutRect.SetPos(aLayoutPos);
aLayoutRect.SetSize(aLayoutSize);
}
@@ -1170,53 +1221,53 @@ rtl::OUString enumtoString(AutoLayout aut)
switch (aut)
{
case AUTOLAYOUT_TITLE_CONTENT:
- retstr="AUTOLAYOUT_TITLE_CONTENT";
- break;
+ retstr="AUTOLAYOUT_TITLE_CONTENT";
+ break;
case AUTOLAYOUT_TITLE_CONTENT_OVER_CONTENT:
- retstr="AUTOLAYOUT_TITLE_CONTENT_OVER_CONTENT";
- break;
+ retstr="AUTOLAYOUT_TITLE_CONTENT_OVER_CONTENT";
+ break;
case AUTOLAYOUT_TITLE_CONTENT_2CONTENT:
- retstr="AUTOLAYOUT_TITLE_CONTENT_2CONTENT";
- break;
+ retstr="AUTOLAYOUT_TITLE_CONTENT_2CONTENT";
+ break;
case AUTOLAYOUT_TITLE_4CONTENT:
- retstr="AUTOLAYOUT_TITLE_4CONTENT";
- break;
+ retstr="AUTOLAYOUT_TITLE_4CONTENT";
+ break;
case AUTOLAYOUT_ONLY_TEXT:
- retstr="AUTOLAYOUT_ONLY_TEXT";
- break;
+ retstr="AUTOLAYOUT_ONLY_TEXT";
+ break;
case AUTOLAYOUT_TITLE_ONLY:
- retstr="AUTOLAYOUT_TITLE_ONLY";
- break;
+ retstr="AUTOLAYOUT_TITLE_ONLY";
+ break;
case AUTOLAYOUT_TITLE_6CONTENT:
- retstr="AUTOLAYOUT_TITLE_6CONTENT";
- break;
+ retstr="AUTOLAYOUT_TITLE_6CONTENT";
+ break;
case AUTOLAYOUT__START:
- retstr="AUTOLAYOUT__START";
- break;
+ retstr="AUTOLAYOUT__START";
+ break;
case AUTOLAYOUT_TITLE_2CONTENT_CONTENT:
- retstr="AUTOLAYOUT_TITLE_2CONTENT_CONTENT";
- break;
+ retstr="AUTOLAYOUT_TITLE_2CONTENT_CONTENT";
+ break;
case AUTOLAYOUT_TITLE_2CONTENT_OVER_CONTENT:
- retstr="AUTOLAYOUT_TITLE_2CONTENT_OVER_CONTENT";
- break;
+ retstr="AUTOLAYOUT_TITLE_2CONTENT_OVER_CONTENT";
+ break;
case AUTOLAYOUT_TITLE_2CONTENT:
- retstr="AUTOLAYOUT_TITLE_2CONTENT";
- break;
+ retstr="AUTOLAYOUT_TITLE_2CONTENT";
+ break;
case AUTOLAYOUT_VTITLE_VCONTENT:
- retstr="AUTOLAYOUT_VTITLE_VCONTENT";
- break;
+ retstr="AUTOLAYOUT_VTITLE_VCONTENT";
+ break;
case AUTOLAYOUT_VTITLE_VCONTENT_OVER_VCONTENT:
- retstr="AUTOLAYOUT_VTITLE_VCONTENT_OVER_VCONTENT";
- break;
+ retstr="AUTOLAYOUT_VTITLE_VCONTENT_OVER_VCONTENT";
+ break;
case AUTOLAYOUT_TITLE_VCONTENT:
- retstr="AUTOLAYOUT_TITLE_VCONTENT";
- break;
+ retstr="AUTOLAYOUT_TITLE_VCONTENT";
+ break;
case AUTOLAYOUT_TITLE_2VTEXT:
- retstr="AUTOLAYOUT_TITLE_2VTEXT";
- break;
+ retstr="AUTOLAYOUT_TITLE_2VTEXT";
+ break;
default:
- retstr="unknown";
- break;
+ retstr="unknown";
+ break;
// case AUTOLAYOUT_TITLE_4SCONTENT: return "AUTOLAYOUT_TITLE_4SCONTENT";
}
return retstr;
diff --git a/sd/xml/objectlist.xml b/sd/xml/objectlist.xml
index b354185..40ecec3 100644
--- a/sd/xml/objectlist.xml
+++ b/sd/xml/objectlist.xml
@@ -1,19 +1,41 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+-->
<object-list>
- <object pagekind="PK_STANDARD" type="PRESOBJ_DATETIME" relative-height="0.069" relative-width="0.233" relative-posX="0.05" relative-posY="0.911"/>
- <object pagekind="PK_HANDOUT" type="PRESOBJ_DATETIME" relative-height="0.434" relative-width="0.05" relative-posX="0.434" relative-posY="0"/>
- <object pagekind="PK_NOTES" type="PRESOBJ_DATETIME" relative-height="0.434" relative-width="0.05" relative-posX="0.434" relative-posY="0"/>
- <object pagekind="PK_STANDARD" type="PRESOBJ_FOOTER" relative-height="0.069" relative-width="0.317" relative-posX="0.342" relative-posY="0.911"/>
- <object pagekind="PK_HANDOUT" type="PRESOBJ_FOOTER" relative-height="0.434" relative-width="0.05" relative-posX="0" relative-posY="0.05"/>
- <object pagekind="PK_NOTES" type="PRESOBJ_FOOTER" relative-height="0.434" relative-width="0.05" relative-posX="0" relative-posY="0.05"/>
- <object pagekind="PK_STANDARD" type="PRESOBJ_SLIDENUMBER" relative-height="0.069" relative-width="0.317" relative-posX="0.717" relative-posY="0.911"/>
- <object pagekind="PK_HANDOUT" type="PRESOBJ_SLIDENUMBER" relative-height="0.434" relative-width="0.05" relative-posX="0" relative-posY="0.05"/>
- <object pagekind="PK_NOTES" type="PRESOBJ_SLIDENUMBER" relative-height="0.434" relative-width="0.05" relative-posX="0" relative-posY="0.05"/>
- <object pagekind="PK_STANDARD" type="PRESOBJ_HEADER" relative-height="0.069" relative-width="0.317" relative-posX="0.717" relative-posY="0.911"/>
- <object pagekind="PK_HANDOUT" type="PRESOBJ_HEADER" relative-height="0.434" relative-width="0.05" relative-posX="0" relative-posY="0"/>
- <object pagekind="PK_NOTES" type="PRESOBJ_HEADER" relative-height="0.434" relative-width="0.05" relative-posX="0" relative-posY="0"/>
- <object pagekind="PK_STANDARD" type="PRESOBJ_TITLE" relative-height="0.167" relative-width="0.9" relative-posX="0.05" relative-posY="0.0399"/>
- <object pagekind="PK_NOTES" type="PRESOBJ_TITLE" relative-height="0.375" relative-width="1" relative-posX="0" relative-posY="0.076"/>
- <object pagekind="PK_STANDARD" type="PRESOBJ_OUTLINE" relative-height="0.58" relative-width="0.9" relative-posX="0.05" relative-posY="0.234"/>
- <object pagekind="PK_NOTES" type="PRESOBJ_OUTLINE" relative-height="0.45" relative-width="0.1" relative-posX="0.1" relative-posY="0.475"/>
+ <object type="PRESOBJ_DATETIME">
+ <object-prop pagekind="PK_STANDARD" relative-height="0.069" relative-width="0.233" relative-posX="0.05" relative-posY="0.911"/>
+ <object-prop pagekind="PK_HANDOUT" relative-height="0.05" relative-width="0.434" relative-posX="0.434" relative-posY="0"/>
+ <object-prop pagekind="PK_NOTES" relative-height="0.05" relative-width="0.434" relative-posX="0.434" relative-posY="0"/>
+ </object>
+ <object type="PRESOBJ_FOOTER">
+ <object-prop pagekind="PK_STANDARD" relative-height="0.069" relative-width="0.317" relative-posX="0.342" relative-posY="0.911"/>
+ <object-prop pagekind="PK_HANDOUT" relative-height="0.05" relative-width="0.434" relative-posX="0" relative-posY="0.05"/>
+ <object-prop pagekind="PK_NOTES" relative-height="0.05" relative-width="0.434" relative-posX="0" relative-posY="0.05"/>
+ </object>
+ <object type="PRESOBJ_SLIDENUMBER">
+ <object-prop pagekind="PK_STANDARD" relative-height="0.069" relative-width="0.233" relative-posX="0.717" relative-posY="0.911"/>
+ <object-prop pagekind="PK_HANDOUT" relative-height="0.05" relative-width="0.434" relative-posX="0.434" relative-posY="0.05"/>
+ <object-prop pagekind="PK_NOTES" relative-height="0.05" relative-width="0.434" relative-posX="0.434" relative-posY="0.05"/>
+ </object>
+ <object type="PRESOBJ_HEADER">
+ <object-prop pagekind="PK_STANDARD" relative-height="0.069" relative-width="0.317" relative-posX="0.717" relative-posY="0.911"/>
+ <object-prop pagekind="PK_HANDOUT" relative-height="0.05" relative-width="0.434" relative-posX="0" relative-posY="0"/>
+ <object-prop pagekind="PK_NOTES" relative-height="0.05" relative-width="0.434" relative-posX="0" relative-posY="0"/>
+ </object>
+ <object type="PRESOBJ_TITLE">
+ <object-prop pagekind="PK_STANDARD" relative-height="0.167" relative-width="0.9" relative-posX="0.05" relative-posY="0.0399"/>
+ <object-prop pagekind="PK_NOTES" relative-height="0.375" relative-width="1" relative-posX="0" relative-posY="0.076"/>
+ </object>
+ <object type="PRESOBJ_OUTLINE">
+ <object-prop pagekind="PK_STANDARD" relative-height="0.58" relative-width="0.9" relative-posX="0.05" relative-posY="0.234"/>
+ </object>
+ <object type="PRESOBJ_NOTES">
+ <object-prop pagekind="PK_NOTES" relative-height="0.45" relative-width="0.8" relative-posX="0.1" relative-posY="0.475"/>
+ </object>
</object-list>
\ No newline at end of file
diff --git a/test/Package_unittest.mk b/test/Package_unittest.mk
index cbab559..2a992ef 100644
--- a/test/Package_unittest.mk
+++ b/test/Package_unittest.mk
@@ -23,6 +23,7 @@ $(eval $(call gb_Package_add_file,test_unittest,unittest/install/share/config/so
$(eval $(call gb_Package_add_file,test_unittest,unittest/install/share/config/soffice.cfg/simpress/transitions-ogl.xml,user/config/soffice.cfg/simpress/transitions-ogl.xml))
$(eval $(call gb_Package_add_file,test_unittest,unittest/install/share/config/soffice.cfg/simpress/effects.xml,user/config/soffice.cfg/simpress/effects.xml))
$(eval $(call gb_Package_add_file,test_unittest,unittest/install/share/config/soffice.cfg/simpress/layoutlist.xml,user/config/soffice.cfg/simpress/layoutlist.xml))
+$(eval $(call gb_Package_add_file,test_unittest,unittest/install/share/config/soffice.cfg/simpress/objectlist.xml,user/config/soffice.cfg/simpress/objectlist.xml))
$(eval $(call gb_Package_add_file,test_unittest,unittest/user/config/psetupl.xpm,user/config/psetupl.xpm))
# vim: set noet sw=4 ts=4:
diff --git a/test/user-template/user/config/soffice.cfg/simpress/objectlist.xml b/test/user-template/user/config/soffice.cfg/simpress/objectlist.xml
new file mode 100644
index 0000000..40ecec3
--- /dev/null
+++ b/test/user-template/user/config/soffice.cfg/simpress/objectlist.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+-->
+<object-list>
+ <object type="PRESOBJ_DATETIME">
+ <object-prop pagekind="PK_STANDARD" relative-height="0.069" relative-width="0.233" relative-posX="0.05" relative-posY="0.911"/>
+ <object-prop pagekind="PK_HANDOUT" relative-height="0.05" relative-width="0.434" relative-posX="0.434" relative-posY="0"/>
+ <object-prop pagekind="PK_NOTES" relative-height="0.05" relative-width="0.434" relative-posX="0.434" relative-posY="0"/>
+ </object>
+ <object type="PRESOBJ_FOOTER">
+ <object-prop pagekind="PK_STANDARD" relative-height="0.069" relative-width="0.317" relative-posX="0.342" relative-posY="0.911"/>
+ <object-prop pagekind="PK_HANDOUT" relative-height="0.05" relative-width="0.434" relative-posX="0" relative-posY="0.05"/>
+ <object-prop pagekind="PK_NOTES" relative-height="0.05" relative-width="0.434" relative-posX="0" relative-posY="0.05"/>
+ </object>
+ <object type="PRESOBJ_SLIDENUMBER">
+ <object-prop pagekind="PK_STANDARD" relative-height="0.069" relative-width="0.233" relative-posX="0.717" relative-posY="0.911"/>
+ <object-prop pagekind="PK_HANDOUT" relative-height="0.05" relative-width="0.434" relative-posX="0.434" relative-posY="0.05"/>
+ <object-prop pagekind="PK_NOTES" relative-height="0.05" relative-width="0.434" relative-posX="0.434" relative-posY="0.05"/>
+ </object>
+ <object type="PRESOBJ_HEADER">
+ <object-prop pagekind="PK_STANDARD" relative-height="0.069" relative-width="0.317" relative-posX="0.717" relative-posY="0.911"/>
+ <object-prop pagekind="PK_HANDOUT" relative-height="0.05" relative-width="0.434" relative-posX="0" relative-posY="0"/>
+ <object-prop pagekind="PK_NOTES" relative-height="0.05" relative-width="0.434" relative-posX="0" relative-posY="0"/>
+ </object>
+ <object type="PRESOBJ_TITLE">
+ <object-prop pagekind="PK_STANDARD" relative-height="0.167" relative-width="0.9" relative-posX="0.05" relative-posY="0.0399"/>
+ <object-prop pagekind="PK_NOTES" relative-height="0.375" relative-width="1" relative-posX="0" relative-posY="0.076"/>
+ </object>
+ <object type="PRESOBJ_OUTLINE">
+ <object-prop pagekind="PK_STANDARD" relative-height="0.58" relative-width="0.9" relative-posX="0.05" relative-posY="0.234"/>
+ </object>
+ <object type="PRESOBJ_NOTES">
+ <object-prop pagekind="PK_NOTES" relative-height="0.45" relative-width="0.8" relative-posX="0.1" relative-posY="0.475"/>
+ </object>
+</object-list>
\ No newline at end of file
More information about the Libreoffice-commits
mailing list