[Libreoffice-commits] core.git: Branch 'feature/gsoc-impresslayout' - officecfg/registry sd/Package_xml.mk sd/source sd/xml test/Package_unittest.mk
Vishv Brahmbhatt
vishvbrahmbhatt19 at gmail.com
Fri Jun 28 15:07:01 PDT 2013
officecfg/registry/schema/org/openoffice/Office/Impress.xcs | 14 ++
sd/Package_xml.mk | 1
sd/source/core/sdpage.cxx | 59 +++++++++++-
sd/xml/layoutlist.xml | 8 +
test/Package_unittest.mk | 1
5 files changed, 79 insertions(+), 4 deletions(-)
New commits:
commit e2a23779c42a4b252706794dd7e89e975804c50e
Author: Vishv Brahmbhatt <vishvbrahmbhatt19 at gmail.com>
Date: Sat Jun 29 02:55:37 2013 +0530
Changing the XML parser with configuration file path
Updating the "getRootElement" function.So "layoutlist.xml" can be read from actual configuration path.
Change-Id: Iee636d32e629e935e46a18572646659780ae20e3
diff --git a/officecfg/registry/schema/org/openoffice/Office/Impress.xcs b/officecfg/registry/schema/org/openoffice/Office/Impress.xcs
index 8161806..fcb0e74 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Impress.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Impress.xcs
@@ -468,6 +468,20 @@
<label>List of files containing object effects</label>
</info>
<value oor:separator=";">vnd.sun.star.expand:$BRAND_BASE_DIR/share/config/soffice.cfg/simpress/effects.xml</value>
+ <prop oor:name="LayoutListFiles" oor:type="oor:string-list" oor:nillable="false">
+ <!-- OldPath: -->
+ <!-- OldLocation: -->
+ <!-- UIHints: List of files containing object effects -->
+ <info>
+ <desc>
+ Contains a list of layout type.It contains
+ properties of presobj like their Position,
+ Height and Width
+ </desc>
+ <label>List of files containing list of layouts</label>
+ </info>
+ <value oor:separator=";">vnd.sun.star.expand:$BRAND_BASE_DIR/share/config/soffice.cfg/simpress/layoutlist.xml</value>
+ </prop>
</prop>
<prop oor:name="PreviewNewEffects" oor:type="xs:boolean" oor:nillable="false">
<!-- OldPath: -->
diff --git a/sd/Package_xml.mk b/sd/Package_xml.mk
index 94e9607..3c997e0 100644
--- a/sd/Package_xml.mk
+++ b/sd/Package_xml.mk
@@ -14,6 +14,7 @@ $(eval $(call gb_Package_set_outdir,sd_xml,$(INSTDIR)))
$(eval $(call gb_Package_add_files,sd_xml,share/config/soffice.cfg/simpress,\
effects.xml \
transitions.xml \
+ layoutlist.xml \
))
# vim: set noet sw=4 ts=4:
diff --git a/sd/source/core/sdpage.cxx b/sd/source/core/sdpage.cxx
index 9dbe297..1bcda69 100644
--- a/sd/source/core/sdpage.cxx
+++ b/sd/source/core/sdpage.cxx
@@ -57,6 +57,15 @@
#include <rtl/ustring.hxx>
#include <comphelper/processfactory.hxx>
#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/util/theMacroExpander.hpp>
+#include <com/sun/star/container/XNameAccess.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/configuration/theDefaultProvider.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <unotools/streamwrap.hxx>
+#include <rtl/uri.hxx>
+#include <unotools/ucbstreamhelper.hxx>
#include "../ui/inc/DrawDocShell.hxx"
#include "Outliner.hxx"
@@ -81,9 +90,15 @@
using namespace ::sd;
using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
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;
+
TYPEINIT2( SdPage, FmFormPage, SdrObjUserCall );
@@ -1173,15 +1188,51 @@ static const LayoutDescriptor& GetLayoutDescriptor( AutoLayout eLayout )
return aLayouts[ eLayout - AUTOLAYOUT__START ];
}
+#define EXPAND_PROTOCOL "vnd.sun.star.expand:"
//to get the root element of the xml file
Reference<XElement> getRootElement()
{
rtl::OUString filepath="/home/vishv/layoutlist.xml";
const Reference<css::uno::XComponentContext> xContext(comphelper_getProcessComponentContext());
- const Reference<XDocumentBuilder> xDocBuilder(css::xml::dom::DocumentBuilder::create(xContext));
- const Reference<XDocument> xDoc = xDocBuilder->parseURI(filepath);
- const Reference<XElement> xRoot = xDoc->getDocumentElement();
- return xRoot;
+ Reference< XMultiServiceFactory > xServiceFactory(xContext->getServiceManager(), UNO_QUERY_THROW );
+ Reference< util::XMacroExpander > xMacroExpander =util::theMacroExpander::get(xContext);
+ Reference< XMultiServiceFactory > xConfigProvider =configuration::theDefaultProvider::get( xContext );
+ // read path to transition effects files from config
+ Any propValue = uno::makeAny(
+ beans::PropertyValue(
+ "nodepath", -1,
+ uno::makeAny( OUString( "/org.openoffice.Office.Impress/Misc" )),
+ beans::PropertyState_DIRECT_VALUE ) );
+
+ Reference<container::XNameAccess> xNameAccess(
+ xConfigProvider->createInstanceWithArguments(
+ "com.sun.star.configuration.ConfigurationAccess",
+ Sequence<Any>( &propValue, 1 ) ), UNO_QUERY_THROW );
+ uno::Sequence< OUString > aFiles;
+ xNameAccess->getByName( "LayoutListFiles" ) >>= aFiles;
+
+ for( sal_Int32 i=0; i<aFiles.getLength(); ++i )
+ {
+ OUString aURL = aFiles[i];
+ if( aURL.startsWith( EXPAND_PROTOCOL ) )
+ {
+ // cut protocol
+ OUString aMacro( aURL.copy( sizeof ( EXPAND_PROTOCOL ) -1 ) );
+ // decode uric class chars
+ aMacro = rtl::Uri::decode( aMacro, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 );
+ // expand macro string
+ aURL = xMacroExpander->expandMacros( aMacro );
+ }
+ SvStream* pIStm = ::utl::UcbStreamHelper::CreateStream( aURL, STREAM_READ );
+ ::utl::OInputStreamWrapper* isw=new ::utl::OInputStreamWrapper( pIStm);
+ Reference<XInputStream> xIs(isw);
+
+ rtl::OUString sServName = rtl::OUString::createFromAscii("com.sun.star.xml.dom.DocumentBuilder");
+ Reference<XDocumentBuilder> xDb( xServiceFactory->createInstance(sServName), UNO_QUERY);
+ const Reference<XDocument> xDom(xDb->parse(xIs), UNO_QUERY_THROW );
+ const Reference<XElement> xRoot( xDom->getDocumentElement(),UNO_QUERY_THROW );
+ return xRoot;//this loops seems to work only once,so temporary returning the root element
+ }
}
//read the information from XML file(traversing from layout node)
diff --git a/sd/xml/layoutlist.xml b/sd/xml/layoutlist.xml
new file mode 100644
index 0000000..0b1e9d9
--- /dev/null
+++ b/sd/xml/layoutlist.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- At present I am not sure about corect XML namespace,so once I am aware of it.I am ready to add it.
+-->
+<layout-list>
+<layout type="AUTOLAYOUT_TITLE_CONTENT"><presobj kind="PRESOBJ_TITLE" layout-pos-x="1400" layout-pos-y="837" layout-size-height="4400" layout-size-width="25600"/><presobj kind="PRESOBJ_OUTLINE1" layout-pos-x="1400" layout-pos-y="4914" layout-size-height="25200" layout-size-width="12180"/></layout>
+<layout type="AUTOLAYOUT_TITLE_2VTEXT"><presobj kind="PRESOBJ_TITLE" layout-pos-x="1400" layout-pos-y="837" layout-size-height="4400" layout-size-width="25600"/><presobj kind="PRESOBJ_OUTLINE1" layout-pos-x="1400" layout-pos-y="4914" layout-size-height="12297" layout-size-width="12180"/><presobj kind="PRESOBJ_OUTLINE2" layout-pos-x="14311" layout-pos-y="4914" layout-size-height="12297" layout-size-width="12180"/></layout>
+<layout type="AUTOLAYOUT_TITLE_CONTENT_OVER_CONTENT"><presobj kind="PRESOBJ_TITLE" layout-pos-x="1400" layout-pos-y="837" layout-size-height="4400" layout-size-width="25600"/><presobj kind="PRESOBJ_OUTLINE1" layout-pos-x="1400" layout-pos-y="4914" layout-size-height="25200" layout-size-width="5809"/><presobj kind="PRESOBJ_OUTLINE2" layout-pos-x="1400" layout-pos-y="11274" layout-size-height="25200" layout-size-width="5809"/></layout>
+</layout-list>
diff --git a/test/Package_unittest.mk b/test/Package_unittest.mk
index df87356..4c1d9ad 100644
--- a/test/Package_unittest.mk
+++ b/test/Package_unittest.mk
@@ -25,6 +25,7 @@ $(eval $(call gb_Package_add_file,test_unittest,unittest/user/config/psetup.xpm,
$(eval $(call gb_Package_add_file,test_unittest,unittest/user/config/soffice.cfg/simpress/transitions.xml,user/config/soffice.cfg/simpress/transitions.xml))
$(eval $(call gb_Package_add_file,test_unittest,unittest/user/config/soffice.cfg/simpress/transitions-ogl.xml,user/config/soffice.cfg/simpress/transitions-ogl.xml))
$(eval $(call gb_Package_add_file,test_unittest,unittest/user/config/soffice.cfg/simpress/effects.xml,user/config/soffice.cfg/simpress/effects.xml))
+$(eval $(call gb_Package_add_file,test_unittest,unittest/user/config/soffice.cfg/simpress/layoutlist.xml,user/config/soffice.cfg/simpress/layoutlist.xml))
$(eval $(call gb_Package_add_file,test_unittest,unittest/user/config/soffice.cfg/modules/empty_directory,user/config/soffice.cfg/modules/empty_directory))
$(eval $(call gb_Package_add_file,test_unittest,unittest/user/config/psetupl.xpm,user/config/psetupl.xpm))
$(eval $(call gb_Package_add_file,test_unittest,unittest/user/autocorr/empty_directory,user/autocorr/empty_directory))
More information about the Libreoffice-commits
mailing list