1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef _XMLOFF_FORMLAYEREXPORT_HXX_
25*b1cdbd2cSJim Jagielski #define _XMLOFF_FORMLAYEREXPORT_HXX_
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include "sal/config.h"
28*b1cdbd2cSJim Jagielski #include "xmloff/dllapi.h"
29*b1cdbd2cSJim Jagielski #include <vos/refernce.hxx>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XDrawPage.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XIndexAccess.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XModel.hpp>
34*b1cdbd2cSJim Jagielski #include <vos/ref.hxx>
35*b1cdbd2cSJim Jagielski #include <xmloff/xmlexppr.hxx>
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski namespace com { namespace sun { namespace star { namespace awt {
38*b1cdbd2cSJim Jagielski 	class XControlModel;
39*b1cdbd2cSJim Jagielski } } } }
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski class SvXMLExport;
42*b1cdbd2cSJim Jagielski //.........................................................................
43*b1cdbd2cSJim Jagielski namespace xmloff
44*b1cdbd2cSJim Jagielski {
45*b1cdbd2cSJim Jagielski //.........................................................................
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski 	class OFormLayerXMLExport_Impl;
48*b1cdbd2cSJim Jagielski 	class OFormsRootExport;
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski 	//=====================================================================
51*b1cdbd2cSJim Jagielski 	//= OFormLayerXMLExport
52*b1cdbd2cSJim Jagielski 	//=====================================================================
53*b1cdbd2cSJim Jagielski 	/** provides functionallity for exporting a complete form layer.
54*b1cdbd2cSJim Jagielski 	*/
55*b1cdbd2cSJim Jagielski 	class XMLOFF_DLLPUBLIC OFormLayerXMLExport
56*b1cdbd2cSJim Jagielski 				:public ::vos::OReference
57*b1cdbd2cSJim Jagielski 	{
58*b1cdbd2cSJim Jagielski 	protected:
59*b1cdbd2cSJim Jagielski 		/// our export context
60*b1cdbd2cSJim Jagielski 		SvXMLExport&				m_rContext;
61*b1cdbd2cSJim Jagielski 		// impl class
62*b1cdbd2cSJim Jagielski 		OFormLayerXMLExport_Impl*	m_pImpl;
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski 	protected:
65*b1cdbd2cSJim Jagielski 		~OFormLayerXMLExport();
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski 	public:
68*b1cdbd2cSJim Jagielski 		OFormLayerXMLExport(SvXMLExport& _rContext);
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski 		/** initial the object
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski 			<p>To be called if you want to reuse the same object for exportin different documents.</p>
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski 			<p>You don't need to call this if you just constructed the object, in this case it is already
75*b1cdbd2cSJim Jagielski 			initialized..</p>
76*b1cdbd2cSJim Jagielski 		*/
77*b1cdbd2cSJim Jagielski 		void initialize();
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski 		/** initializes some internal structures for fast access to the given page
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski 			<p>This method has to be called before you use getControlId for controls on the given page.
82*b1cdbd2cSJim Jagielski 			This way a performance optimization can be done for faster access to the control ids</p>
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski 			@return
85*b1cdbd2cSJim Jagielski 				<TRUE/> if the page has been examined before. If <FALSE/> is returned, this is a serious error.
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski 			@see getControlId
88*b1cdbd2cSJim Jagielski 			@see examineForms
89*b1cdbd2cSJim Jagielski 		*/
90*b1cdbd2cSJim Jagielski 		sal_Bool seekPage(
91*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >& _rxDrawPage);
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski 		/** get the id for the given control
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski 			<p>The page the control belongs to must have been examined and sought to.</p>
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski 			@param _rxControl
98*b1cdbd2cSJim Jagielski 				the control which's id should be retrieved. Must not be <NULL/>.
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski 			@see examineForms
101*b1cdbd2cSJim Jagielski 			@see seekPage
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski 		*/
104*b1cdbd2cSJim Jagielski 		::rtl::OUString getControlId(
105*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxControl);
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski 		/** retrieves the style name for the control's number style.
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski 			<p>For performance reasons, this method is allowed to be called for any controls, even those which
110*b1cdbd2cSJim Jagielski 			do not have a number style. In this case, an empty string is returned.</p>
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski 			@param _rxControl
113*b1cdbd2cSJim Jagielski 				the control which's id should be retrieved. Must not be <NULL/>.
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski 			@see examineForms
116*b1cdbd2cSJim Jagielski 			@see seekPage
117*b1cdbd2cSJim Jagielski 		*/
118*b1cdbd2cSJim Jagielski 		::rtl::OUString getControlNumberStyle(
119*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxControl );
120*b1cdbd2cSJim Jagielski 
121*b1cdbd2cSJim Jagielski 		/** examines the forms collection given.
122*b1cdbd2cSJim Jagielski 
123*b1cdbd2cSJim Jagielski 			<p>This method will collect all form layer related data of the given draw page</p>
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski 			@param _rxDrawPage
126*b1cdbd2cSJim Jagielski 				the draw page to examine. The object will be queried for a <type scope="com.sun.star.form">XFormsSupplier</type>
127*b1cdbd2cSJim Jagielski 				interface to obtain the forms container.
128*b1cdbd2cSJim Jagielski 		*/
129*b1cdbd2cSJim Jagielski 		void examineForms(const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >& _rxDrawPage);
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski 		/** exports the structure of a form layer
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski 			<p>This method does not export styles (e.g. font properties of the controls), or any references
134*b1cdbd2cSJim Jagielski 			external instances may have to the control models contained in the form layer (e.g. uno control
135*b1cdbd2cSJim Jagielski 			shapes in the drawing layer may have such references)</p>
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski 			<p>No top level element describing the whole collection is inserted. I.e. if within your document, you
138*b1cdbd2cSJim Jagielski 			expect the the forms collection to be stored like
139*b1cdbd2cSJim Jagielski 				<listing>
140*b1cdbd2cSJim Jagielski 					&lt;Forms&gt;
141*b1cdbd2cSJim Jagielski 						....	// all the forms stuff here
142*b1cdbd2cSJim Jagielski 					&lt;/Forms&gt;
143*b1cdbd2cSJim Jagielski 				</listing>
144*b1cdbd2cSJim Jagielski 			you have to start the Forms element yourself.</p>
145*b1cdbd2cSJim Jagielski 
146*b1cdbd2cSJim Jagielski 			@param	_rxDrawPage
147*b1cdbd2cSJim Jagielski 				the draw page to examine. The object will be queried for a <type scope="com.sun.star.form">XFormsSupplier</type>
148*b1cdbd2cSJim Jagielski 				interface to obtain the forms container.
149*b1cdbd2cSJim Jagielski 		*/
150*b1cdbd2cSJim Jagielski 		void exportForms(const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >& _rxDrawPage);
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski         /** exports the XForms model data
153*b1cdbd2cSJim Jagielski         */
154*b1cdbd2cSJim Jagielski         void exportXForms() const;
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski         /** determines whether the given page contains logical forms
157*b1cdbd2cSJim Jagielski         */
158*b1cdbd2cSJim Jagielski 		bool pageContainsForms( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >& _rxDrawPage ) const;
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski         /** determines whether the given page contains XForm instances
161*b1cdbd2cSJim Jagielski         */
162*b1cdbd2cSJim Jagielski 		bool documentContainsXForms() const;
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski 		/** exports the controls number styles
165*b1cdbd2cSJim Jagielski 		*/
166*b1cdbd2cSJim Jagielski 		void exportControlNumberStyles();
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski 		/** exports the automatic controls number styles
169*b1cdbd2cSJim Jagielski 		*/
170*b1cdbd2cSJim Jagielski 		void exportAutoControlNumberStyles();
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski 		/** exports the auto-styles collected during the examineForms calls
173*b1cdbd2cSJim Jagielski 		*/
174*b1cdbd2cSJim Jagielski 		void exportAutoStyles();
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski 		/** exclude the given control (model) from export.
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski 			<p>If your document contains form controls which are not to be exported for whatever reason,
179*b1cdbd2cSJim Jagielski 			you need to announce the models of these controls (can be retrieved from XControlShape::getControl)
180*b1cdbd2cSJim Jagielski 			to the form layer exporter.<br/>
181*b1cdbd2cSJim Jagielski 			Of course you have to do this before calling <member>exportForms</member></p>
182*b1cdbd2cSJim Jagielski 		*/
183*b1cdbd2cSJim Jagielski 		void excludeFromExport( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > _rxControl );
184*b1cdbd2cSJim Jagielski 	};
185*b1cdbd2cSJim Jagielski 
186*b1cdbd2cSJim Jagielski 	//=========================================================================
187*b1cdbd2cSJim Jagielski 	//= OOfficeFormsExport
188*b1cdbd2cSJim Jagielski 	//=========================================================================
189*b1cdbd2cSJim Jagielski 	/// export helper for the office::forms element
190*b1cdbd2cSJim Jagielski 	class XMLOFF_DLLPUBLIC OOfficeFormsExport
191*b1cdbd2cSJim Jagielski 	{
192*b1cdbd2cSJim Jagielski 	private:
193*b1cdbd2cSJim Jagielski 		OFormsRootExport*	m_pImpl;
194*b1cdbd2cSJim Jagielski 
195*b1cdbd2cSJim Jagielski 	public:
196*b1cdbd2cSJim Jagielski 		OOfficeFormsExport( SvXMLExport& _rExp );
197*b1cdbd2cSJim Jagielski 		~OOfficeFormsExport();
198*b1cdbd2cSJim Jagielski 	};
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski //.........................................................................
201*b1cdbd2cSJim Jagielski }	// namespace xmloff
202*b1cdbd2cSJim Jagielski //.........................................................................
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski #endif // _XMLOFF_FORMLAYEREXPORT_HXX_
205*b1cdbd2cSJim Jagielski 
206