xref: /trunk/main/xmloff/source/draw/sdxmlimp_impl.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef _SDXMLIMP_IMPL_HXX
29 #define _SDXMLIMP_IMPL_HXX
30 
31 #include <com/sun/star/drawing/XDrawPage.hpp>
32 #include <com/sun/star/frame/XModel.hpp>
33 #include <com/sun/star/task/XStatusIndicator.hpp>
34 #include <xmloff/xmltkmap.hxx>
35 #include <com/sun/star/container/XNameAccess.hpp>
36 
37 #ifndef __SGI_STL_VECTOR
38 #include <vector>
39 #endif
40 #include <xmloff/xmlimp.hxx>
41 
42 //////////////////////////////////////////////////////////////////////////////
43 
44 enum SdXMLDocElemTokenMap
45 {
46     XML_TOK_DOC_FONTDECLS,
47     XML_TOK_DOC_STYLES,
48     XML_TOK_DOC_AUTOSTYLES,
49     XML_TOK_DOC_MASTERSTYLES,
50     XML_TOK_DOC_META,
51     XML_TOK_DOC_BODY,
52     XML_TOK_DOC_SCRIPT,
53     XML_TOK_DOC_SETTINGS,
54     XML_TOK_OFFICE_END = XML_TOK_UNKNOWN
55 };
56 
57 enum SdXMLBodyElemTokenMap
58 {
59     XML_TOK_BODY_PAGE,
60     XML_TOK_BODY_SETTINGS,
61     XML_TOK_BODY_HEADER_DECL,
62     XML_TOK_BODY_FOOTER_DECL,
63     XML_TOK_BODY_DATE_TIME_DECL
64 };
65 
66 enum SdXMLStylesElemTokenMap
67 {
68     XML_TOK_STYLES_MASTER_PAGE,
69     XML_TOK_STYLES_STYLE,
70     XML_TOK_STYLES_PAGE_MASTER,
71     XML_TOK_STYLES_PRESENTATION_PAGE_LAYOUT
72 };
73 
74 enum SdXMLAutoStylesElemTokenMap
75 {
76     XML_TOK_AUTOSTYLES_STYLE
77 };
78 
79 enum SdXMLMasterPageElemTokenMap
80 {
81     XML_TOK_MASTERPAGE_STYLE,
82     XML_TOK_MASTERPAGE_NOTES
83 };
84 
85 enum SdXMLMasterPageAttrTokenMap
86 {
87     XML_TOK_MASTERPAGE_NAME,
88     XML_TOK_MASTERPAGE_DISPLAY_NAME,
89     XML_TOK_MASTERPAGE_PAGE_MASTER_NAME,
90     XML_TOK_MASTERPAGE_STYLE_NAME,
91     XML_TOK_MASTERPAGE_PAGE_LAYOUT_NAME,
92     XML_TOK_MASTERPAGE_USE_HEADER_NAME,
93     XML_TOK_MASTERPAGE_USE_FOOTER_NAME,
94     XML_TOK_MASTERPAGE_USE_DATE_TIME_NAME
95 };
96 
97 enum SdXMLPageMasterAttrTokenMap
98 {
99     XML_TOK_PAGEMASTER_NAME
100 };
101 
102 enum SdXMLPageMasterStyleAttrTokenMap
103 {
104     XML_TOK_PAGEMASTERSTYLE_MARGIN_TOP,
105     XML_TOK_PAGEMASTERSTYLE_MARGIN_BOTTOM,
106     XML_TOK_PAGEMASTERSTYLE_MARGIN_LEFT,
107     XML_TOK_PAGEMASTERSTYLE_MARGIN_RIGHT,
108     XML_TOK_PAGEMASTERSTYLE_PAGE_WIDTH,
109     XML_TOK_PAGEMASTERSTYLE_PAGE_HEIGHT,
110     XML_TOK_PAGEMASTERSTYLE_PAGE_ORIENTATION
111 };
112 
113 enum SdXMLDocStyleAttrTokenMap
114 {
115     XML_TOK_DOCSTYLE_NAME,
116     XML_TOK_DOCSTYLE_FAMILY,
117     XML_TOK_DOCSTYLE_PARENT_STYLE_NAME,
118     XML_TOK_DOCSTYLE_AUTOMATIC
119 };
120 
121 enum SdXMLDocStyleElemTokenMap
122 {
123     XML_TOK_DOCSTYLE_PROPERTIES,
124     XML_TOK_DOCSTYLE_PRESENTATION_PLACEHOLDER
125 };
126 
127 enum SdXMLDrawPageAttrTokenMap
128 {
129     XML_TOK_DRAWPAGE_NAME,
130     XML_TOK_DRAWPAGE_STYLE_NAME,
131     XML_TOK_DRAWPAGE_MASTER_PAGE_NAME,
132     XML_TOK_DRAWPAGE_PAGE_LAYOUT_NAME,
133     XML_TOK_DRAWPAGE_DRAWID,
134     XML_TOK_DRAWPAGE_XMLID,
135     XML_TOK_DRAWPAGE_HREF,
136     XML_TOK_DRAWPAGE_USE_HEADER_NAME,
137     XML_TOK_DRAWPAGE_USE_FOOTER_NAME,
138     XML_TOK_DRAWPAGE_USE_DATE_TIME_NAME
139 };
140 
141 enum SdXMLDrawPageElemTokenMap
142 {
143     XML_TOK_DRAWPAGE_NOTES,
144     XML_TOK_DRAWPAGE_PAR,
145     XML_TOK_DRAWPAGE_SEQ
146 };
147 
148 enum SdXMLPresentationPlaceholderAttrTokenMap
149 {
150     XML_TOK_PRESENTATIONPLACEHOLDER_OBJECTNAME,
151     XML_TOK_PRESENTATIONPLACEHOLDER_X,
152     XML_TOK_PRESENTATIONPLACEHOLDER_Y,
153     XML_TOK_PRESENTATIONPLACEHOLDER_WIDTH,
154     XML_TOK_PRESENTATIONPLACEHOLDER_HEIGHT
155 };
156 
157 //////////////////////////////////////////////////////////////////////////////
158 
159 struct SdXMLltXDrawPageId
160 {
161   bool operator()(sal_Int32 nId1, sal_Int32 nId2 ) const
162   {
163     return nId1 < nId2;
164   }
165 };
166 
167 typedef std::map< sal_Int32, com::sun::star::uno::Reference< com::sun::star::drawing::XDrawPage >, SdXMLltXDrawPageId > DrawPageIdMap;
168 
169 //////////////////////////////////////////////////////////////////////////////
170 
171 class SvXMLUnitConverter;
172 class SvXMLTokenMap;
173 class XMLSdPropHdlFactory;
174 class XMLPropertySetMapper;
175 class XMLPropStyleContext;
176 class SdXMLStylesContext;
177 class SdXMLMasterStylesContext;
178 
179 //////////////////////////////////////////////////////////////////////////////
180 
181 struct DateTimeDeclContextImpl
182 {
183     rtl::OUString maStrText;
184     sal_Bool mbFixed;
185     rtl::OUString maStrDateTimeFormat;
186 
187     DateTimeDeclContextImpl() : mbFixed(sal_True) {}
188 };
189 
190 DECLARE_STL_USTRINGACCESS_MAP( ::rtl::OUString, HeaderFooterDeclMap );
191 DECLARE_STL_USTRINGACCESS_MAP( DateTimeDeclContextImpl, DateTimeDeclMap );
192 
193 //////////////////////////////////////////////////////////////////////////////
194 
195 class SdXMLImport: public SvXMLImport
196 {
197     com::sun::star::uno::Reference< com::sun::star::container::XNameAccess > mxDocStyleFamilies;
198     com::sun::star::uno::Reference< com::sun::star::container::XIndexAccess > mxDocMasterPages;
199     com::sun::star::uno::Reference< com::sun::star::container::XIndexAccess > mxDocDrawPages;
200     com::sun::star::uno::Reference< com::sun::star::container::XNameAccess > mxPageLayouts;
201 
202     // contexts for Style and AutoStyle import
203     SdXMLMasterStylesContext*   mpMasterStylesContext;
204 
205     // token map lists
206     SvXMLTokenMap*              mpDocElemTokenMap;
207     SvXMLTokenMap*              mpBodyElemTokenMap;
208     SvXMLTokenMap*              mpStylesElemTokenMap;
209     SvXMLTokenMap*              mpAutoStylesElemTokenMap;
210     SvXMLTokenMap*              mpMasterPageElemTokenMap;
211     SvXMLTokenMap*              mpMasterPageAttrTokenMap;
212     SvXMLTokenMap*              mpPageMasterAttrTokenMap;
213     SvXMLTokenMap*              mpPageMasterStyleAttrTokenMap;
214     SvXMLTokenMap*              mpDocStyleAttrTokenMap;
215     SvXMLTokenMap*              mpDocStyleElemTokenMap;
216     SvXMLTokenMap*              mpDrawPageAttrTokenMap;
217     SvXMLTokenMap*              mpDrawPageElemTokenMap;
218     SvXMLTokenMap*              mpPresentationPlaceholderAttrTokenMap;
219 
220     sal_uInt16                  mnStyleFamilyMask;
221 
222     sal_Int32                   mnNewPageCount;
223     sal_Int32                   mnNewMasterPageCount;
224 
225     sal_Bool                    mbIsDraw;
226     sal_Bool                    mbLoadDoc;
227     sal_Bool                    mbPreview;
228 
229     DrawPageIdMap               maDrawPageIds;
230 
231     ::rtl::OUString             msPageLayouts;
232     ::rtl::OUString             msPreview;
233 
234     HeaderFooterDeclMap         maHeaderDeclsMap;
235     HeaderFooterDeclMap         maFooterDeclsMap;
236     DateTimeDeclMap             maDateTimeDeclsMap;
237 
238 protected:
239     // This method is called after the namespace map has been updated, but
240     // before a context for the current element has been pushed.
241     virtual SvXMLImportContext *CreateContext(sal_uInt16 nPrefix,
242       const rtl::OUString& rLocalName,
243       const com::sun::star::uno::Reference<
244         com::sun::star::xml::sax::XAttributeList>& xAttrList);
245 
246 public:
247     // #110680#
248     SdXMLImport(
249         const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
250         sal_Bool bIsDraw, sal_uInt16 nImportFlags = IMPORT_ALL );
251     ~SdXMLImport() throw ();
252 
253     // XImporter
254     virtual void SAL_CALL setTargetDocument( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& xDoc ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
255 
256     // XInitialization
257     virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
258 
259     void SetProgress(sal_Int32 nProg);
260 
261     virtual void SetViewSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aViewProps);
262     virtual void SetConfigurationSettings(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aConfigProps);
263 
264     // namespace office
265     // NB: in contrast to other CreateFooContexts, this particular one handles
266     //     the root element (i.e. office:document-meta)
267     SvXMLImportContext* CreateMetaContext(const rtl::OUString& rLocalName,
268         const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList);
269     SvXMLImportContext* CreateScriptContext( const ::rtl::OUString& rLocalName );
270     SvXMLImportContext* CreateBodyContext(const rtl::OUString& rLocalName,
271         const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList);
272     SvXMLStylesContext* CreateStylesContext(const rtl::OUString& rLocalName,
273         const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList);
274     SvXMLStylesContext* CreateAutoStylesContext(const rtl::OUString& rLocalName,
275         const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList);
276     SvXMLImportContext* CreateMasterStylesContext(const rtl::OUString& rLocalName,
277         const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList);
278     SvXMLImportContext *CreateFontDeclsContext(const ::rtl::OUString& rLocalName,
279         const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > & xAttrList );
280 
281     // Styles and AutoStyles contexts
282     const SdXMLMasterStylesContext* GetMasterStylesContext() const { return mpMasterStylesContext; }
283 
284     sal_uInt16 GetStyleFamilyMask() const { return mnStyleFamilyMask; }
285     sal_Bool IsStylesOnlyMode() const { return !mbLoadDoc; }
286 
287     const SvXMLTokenMap& GetDocElemTokenMap();
288     const SvXMLTokenMap& GetBodyElemTokenMap();
289     const SvXMLTokenMap& GetStylesElemTokenMap();
290     const SvXMLTokenMap& GetMasterPageElemTokenMap();
291     const SvXMLTokenMap& GetMasterPageAttrTokenMap();
292     const SvXMLTokenMap& GetPageMasterAttrTokenMap();
293     const SvXMLTokenMap& GetPageMasterStyleAttrTokenMap();
294     const SvXMLTokenMap& GetDrawPageAttrTokenMap();
295     const SvXMLTokenMap& GetDrawPageElemTokenMap();
296     const SvXMLTokenMap& GetPresentationPlaceholderAttrTokenMap();
297 
298     // export local parameters concerning page access and similar
299     const com::sun::star::uno::Reference<
300         com::sun::star::container::XNameAccess >& GetLocalDocStyleFamilies() const { return mxDocStyleFamilies; }
301     const com::sun::star::uno::Reference<
302         com::sun::star::container::XIndexAccess >& GetLocalMasterPages() const { return mxDocMasterPages; }
303     const com::sun::star::uno::Reference<
304         com::sun::star::container::XIndexAccess >& GetLocalDrawPages() const { return mxDocDrawPages; }
305 
306     sal_Int32 GetNewPageCount() const { return mnNewPageCount; }
307     void IncrementNewPageCount() { mnNewPageCount++; }
308     sal_Int32 GetNewMasterPageCount() const { return mnNewMasterPageCount; }
309     void IncrementNewMasterPageCount() { mnNewMasterPageCount++; }
310 
311     com::sun::star::uno::Reference< com::sun::star::container::XNameAccess > getPageLayouts() const { return mxPageLayouts; }
312 
313     sal_Bool IsDraw() const { return mbIsDraw; }
314     sal_Bool IsImpress() const { return !mbIsDraw; }
315 
316     // import pool defaults. Parameter contains pool defaults read
317     // from input data. These data needs to be set at the model.
318     void ImportPoolDefaults(const XMLPropStyleContext* pPool);
319 
320     // #80365#
321     virtual void SetStatistics(
322         const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue> & i_rStats);
323 
324     sal_Bool IsPreview() const { return mbPreview; }
325 
326     // XServiceInfo ( : SvXMLExport )
327     virtual ::rtl::OUString SAL_CALL getImplementationName() throw( ::com::sun::star::uno::RuntimeException );
328 
329     void AddHeaderDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText );
330     void AddFooterDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText );
331     void AddDateTimeDecl( const ::rtl::OUString& rName, const ::rtl::OUString& rText, sal_Bool bFixed, const ::rtl::OUString& rDateTimeFormat );
332 
333     ::rtl::OUString GetHeaderDecl( const ::rtl::OUString& rName ) const;
334     ::rtl::OUString GetFooterDecl( const ::rtl::OUString& rName ) const;
335     ::rtl::OUString GetDateTimeDecl( const ::rtl::OUString& rName, sal_Bool& rbFixed, ::rtl::OUString& rDateTimeFormat );
336 
337 };
338 
339 #endif  //  _SDXMLIMP_HXX
340