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 __FRAMEWORK_XML_MENUDOCUMENTHANDLER_HXX_
25*b1cdbd2cSJim Jagielski #define __FRAMEWORK_XML_MENUDOCUMENTHANDLER_HXX_
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
28*b1cdbd2cSJim Jagielski //	interface includes
29*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #ifndef __COM_SUN_STAR_XML_SAX_XDOCUMENTHANDLER_HPP_
32*b1cdbd2cSJim Jagielski #include <com/sun/star/xml/sax/XDocumentHandler.hpp>
33*b1cdbd2cSJim Jagielski #endif
34*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XIndexContainer.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XSingleComponentFactory.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyValue.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Sequence.h>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/XComponentContext.hpp>
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
41*b1cdbd2cSJim Jagielski //	other includes
42*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
43*b1cdbd2cSJim Jagielski #include <threadhelp/threadhelpbase.hxx>
44*b1cdbd2cSJim Jagielski #include <rtl/ustring.hxx>
45*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase1.hxx>
46*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
47*b1cdbd2cSJim Jagielski #include <framework/fwedllapi.h>
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
50*b1cdbd2cSJim Jagielski //	namespace
51*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski namespace framework{
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski class FWE_DLLPUBLIC ReadMenuDocumentHandlerBase : public ThreadHelpBase,	// Struct for right initalization of mutex member! Must be first of baseclasses.
56*b1cdbd2cSJim Jagielski 									public ::cppu::WeakImplHelper1< ::com::sun::star::xml::sax::XDocumentHandler >
57*b1cdbd2cSJim Jagielski {
58*b1cdbd2cSJim Jagielski 	public:
59*b1cdbd2cSJim Jagielski 		ReadMenuDocumentHandlerBase();
60*b1cdbd2cSJim Jagielski 		virtual ~ReadMenuDocumentHandlerBase();
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski 		// XDocumentHandler
63*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL startDocument(void)
64*b1cdbd2cSJim Jagielski 		throw (	::com::sun::star::xml::sax::SAXException,
65*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException ) = 0;
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL endDocument(void)
68*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
69*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException ) = 0;
70*b1cdbd2cSJim Jagielski 
71*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL startElement(
72*b1cdbd2cSJim Jagielski 			const rtl::OUString& aName,
73*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > &xAttribs)
74*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
75*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException ) = 0;
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL endElement(const rtl::OUString& aName)
78*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
79*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException ) = 0;
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL characters(const rtl::OUString& aChars)
82*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
83*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException ) = 0;
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL ignorableWhitespace(const rtl::OUString& aWhitespaces)
86*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
87*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL processingInstruction(const rtl::OUString& aTarget,
90*b1cdbd2cSJim Jagielski 													const rtl::OUString& aData)
91*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
92*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL setDocumentLocator(
95*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator > &xLocator)
96*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
97*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski 	protected:
100*b1cdbd2cSJim Jagielski 		::rtl::OUString getErrorLineString();
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator > m_xLocator;
103*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler> m_xReader;
104*b1cdbd2cSJim Jagielski 		void initPropertyCommon( com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue > &rProps,
105*b1cdbd2cSJim Jagielski 								 const rtl::OUString &rCommandURL, const rtl::OUString &rHelpId,
106*b1cdbd2cSJim Jagielski                                  const rtl::OUString &rLabel, sal_Int16 nItemStyleBits );
107*b1cdbd2cSJim Jagielski 	private:
108*b1cdbd2cSJim Jagielski 		rtl::OUString m_aType;
109*b1cdbd2cSJim Jagielski 		rtl::OUString m_aLabel;
110*b1cdbd2cSJim Jagielski 		rtl::OUString m_aContainer;
111*b1cdbd2cSJim Jagielski 		rtl::OUString m_aHelpURL;
112*b1cdbd2cSJim Jagielski 		rtl::OUString m_aCommandURL;
113*b1cdbd2cSJim Jagielski         rtl::OUString m_aStyle;
114*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue > m_aItemProp;
115*b1cdbd2cSJim Jagielski };
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski class FWE_DLLPUBLIC OReadMenuDocumentHandler : public ReadMenuDocumentHandlerBase
119*b1cdbd2cSJim Jagielski {
120*b1cdbd2cSJim Jagielski 	public:
121*b1cdbd2cSJim Jagielski 		// #110897#
122*b1cdbd2cSJim Jagielski         OReadMenuDocumentHandler(
123*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
124*b1cdbd2cSJim Jagielski 			const com::sun::star::uno::Reference< com::sun::star::container::XIndexContainer >& rItemContainer );
125*b1cdbd2cSJim Jagielski 		virtual ~OReadMenuDocumentHandler();
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski 		// #110897#
128*b1cdbd2cSJim Jagielski 		const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& getServiceFactory();
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski 		// XDocumentHandler
131*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL startDocument(void)
132*b1cdbd2cSJim Jagielski 		throw (	::com::sun::star::xml::sax::SAXException,
133*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL endDocument(void)
136*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
137*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL startElement(
140*b1cdbd2cSJim Jagielski 			const rtl::OUString& aName,
141*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > &xAttribs)
142*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
143*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL endElement(const rtl::OUString& aName)
146*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
147*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL characters(const rtl::OUString& aChars)
150*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
151*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski 	private:
154*b1cdbd2cSJim Jagielski           int		m_nElementDepth;
155*b1cdbd2cSJim Jagielski           sal_Bool	m_bMenuBarMode;
156*b1cdbd2cSJim Jagielski           com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > m_xMenuBarContainer;
157*b1cdbd2cSJim Jagielski           com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory > m_xContainerFactory;
158*b1cdbd2cSJim Jagielski           const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& mxServiceFactory;
159*b1cdbd2cSJim Jagielski };	// OReadMenuDocumentHandler
160*b1cdbd2cSJim Jagielski 
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski class FWE_DLLPUBLIC OReadMenuBarHandler : public ReadMenuDocumentHandlerBase
163*b1cdbd2cSJim Jagielski {
164*b1cdbd2cSJim Jagielski 	public:
165*b1cdbd2cSJim Jagielski 		// #110897#
166*b1cdbd2cSJim Jagielski 		OReadMenuBarHandler(
167*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
168*b1cdbd2cSJim Jagielski 			const com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >& rMenuBarContainer,
169*b1cdbd2cSJim Jagielski             const com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory >& rContainerFactory );
170*b1cdbd2cSJim Jagielski 		virtual ~OReadMenuBarHandler();
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski 		// #110897#
173*b1cdbd2cSJim Jagielski 		const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& getServiceFactory();
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski 		// XDocumentHandler
176*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL startDocument(void)
177*b1cdbd2cSJim Jagielski 		throw (	::com::sun::star::xml::sax::SAXException,
178*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL endDocument(void)
181*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
182*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL startElement(
185*b1cdbd2cSJim Jagielski 			const rtl::OUString& aName,
186*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > &xAttribs)
187*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
188*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL endElement(const rtl::OUString& aName)
191*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
192*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL characters(const rtl::OUString& aChars)
195*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
196*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski 	private:
199*b1cdbd2cSJim Jagielski 		int			m_nElementDepth;
200*b1cdbd2cSJim Jagielski 		sal_Bool	m_bMenuMode;
201*b1cdbd2cSJim Jagielski         com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > m_xMenuBarContainer;
202*b1cdbd2cSJim Jagielski         com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory > m_xContainerFactory;
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski 		// #110897#
205*b1cdbd2cSJim Jagielski 		const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& mxServiceFactory;
206*b1cdbd2cSJim Jagielski };	// OReadMenuBarHandler
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski class FWE_DLLPUBLIC OReadMenuHandler : public ReadMenuDocumentHandlerBase
210*b1cdbd2cSJim Jagielski {
211*b1cdbd2cSJim Jagielski 	public:
212*b1cdbd2cSJim Jagielski 		OReadMenuHandler( const com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >& rMenuContainer,
213*b1cdbd2cSJim Jagielski                           const com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory >& rContainerFactory );
214*b1cdbd2cSJim Jagielski 		virtual ~OReadMenuHandler();
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski 		// XDocumentHandler
217*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL startDocument(void)
218*b1cdbd2cSJim Jagielski 		throw (	::com::sun::star::xml::sax::SAXException,
219*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
220*b1cdbd2cSJim Jagielski 
221*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL endDocument(void)
222*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
223*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
224*b1cdbd2cSJim Jagielski 
225*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL startElement(
226*b1cdbd2cSJim Jagielski 			const rtl::OUString& aName,
227*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > &xAttribs)
228*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
229*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL endElement(const rtl::OUString& aName)
232*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
233*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL characters(const rtl::OUString& aChars)
236*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
237*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski 	private:
240*b1cdbd2cSJim Jagielski 		int					m_nElementDepth;
241*b1cdbd2cSJim Jagielski 		sal_Bool			m_bMenuPopupMode;
242*b1cdbd2cSJim Jagielski         com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > m_xMenuContainer;
243*b1cdbd2cSJim Jagielski         com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory > m_xContainerFactory;
244*b1cdbd2cSJim Jagielski }; // OReadMenuHandler
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski 
247*b1cdbd2cSJim Jagielski class FWE_DLLPUBLIC OReadMenuPopupHandler : public ReadMenuDocumentHandlerBase
248*b1cdbd2cSJim Jagielski {
249*b1cdbd2cSJim Jagielski 	public:
250*b1cdbd2cSJim Jagielski 		OReadMenuPopupHandler( const com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >& rMenuContainer,
251*b1cdbd2cSJim Jagielski                                const com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory >& rContainerFactory );
252*b1cdbd2cSJim Jagielski 		virtual ~OReadMenuPopupHandler();
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski 		// XDocumentHandler
255*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL startDocument(void)
256*b1cdbd2cSJim Jagielski 			throw (	::com::sun::star::xml::sax::SAXException,
257*b1cdbd2cSJim Jagielski 					::com::sun::star::uno::RuntimeException );
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL endDocument(void)
260*b1cdbd2cSJim Jagielski 			throw (	::com::sun::star::xml::sax::SAXException,
261*b1cdbd2cSJim Jagielski 					::com::sun::star::uno::RuntimeException );
262*b1cdbd2cSJim Jagielski 
263*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL startElement(
264*b1cdbd2cSJim Jagielski 			const rtl::OUString& aName,
265*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference<
266*b1cdbd2cSJim Jagielski 				::com::sun::star::xml::sax::XAttributeList > &xAttribs)
267*b1cdbd2cSJim Jagielski 			throw (	::com::sun::star::xml::sax::SAXException,
268*b1cdbd2cSJim Jagielski 					::com::sun::star::uno::RuntimeException );
269*b1cdbd2cSJim Jagielski 
270*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL endElement(const rtl::OUString& aName)
271*b1cdbd2cSJim Jagielski 			throw (	::com::sun::star::xml::sax::SAXException,
272*b1cdbd2cSJim Jagielski 					::com::sun::star::uno::RuntimeException );
273*b1cdbd2cSJim Jagielski 
274*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL characters(const rtl::OUString& aChars)
275*b1cdbd2cSJim Jagielski 			throw (	::com::sun::star::xml::sax::SAXException,
276*b1cdbd2cSJim Jagielski 					::com::sun::star::uno::RuntimeException );
277*b1cdbd2cSJim Jagielski 
278*b1cdbd2cSJim Jagielski 	private:
279*b1cdbd2cSJim Jagielski 		enum NextElementClose { ELEM_CLOSE_NONE, ELEM_CLOSE_MENUITEM, ELEM_CLOSE_MENUSEPARATOR };
280*b1cdbd2cSJim Jagielski 
281*b1cdbd2cSJim Jagielski 		int					m_nElementDepth;
282*b1cdbd2cSJim Jagielski 		sal_Bool			m_bMenuMode;
283*b1cdbd2cSJim Jagielski         com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > m_xMenuContainer;
284*b1cdbd2cSJim Jagielski         com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory > m_xContainerFactory;
285*b1cdbd2cSJim Jagielski         com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >     m_xComponentContext;
286*b1cdbd2cSJim Jagielski 		NextElementClose	m_nNextElementExpected;
287*b1cdbd2cSJim Jagielski }; // OReadMenuPopupHandler
288*b1cdbd2cSJim Jagielski 
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski class FWE_DLLPUBLIC OWriteMenuDocumentHandler
291*b1cdbd2cSJim Jagielski {
292*b1cdbd2cSJim Jagielski 	public:
293*b1cdbd2cSJim Jagielski 		OWriteMenuDocumentHandler(
294*b1cdbd2cSJim Jagielski             const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >& rMenuBarContainer,
295*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler >& rDocumentHandler );
296*b1cdbd2cSJim Jagielski 		virtual ~OWriteMenuDocumentHandler();
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski 		void WriteMenuDocument() throw
299*b1cdbd2cSJim Jagielski 			( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException );
300*b1cdbd2cSJim Jagielski 	protected:
301*b1cdbd2cSJim Jagielski 		virtual void WriteMenu( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >& rSubMenuContainer ) throw
302*b1cdbd2cSJim Jagielski 			( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException );
303*b1cdbd2cSJim Jagielski 
304*b1cdbd2cSJim Jagielski         virtual void WriteMenuItem( const rtl::OUString& aCommandURL, const rtl::OUString& aLabel, const rtl::OUString& aHelpURL, sal_Int16 nStyle = 0 );
305*b1cdbd2cSJim Jagielski 		virtual void WriteMenuSeparator();
306*b1cdbd2cSJim Jagielski 
307*b1cdbd2cSJim Jagielski         com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > m_xMenuBarContainer;
308*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler > m_xWriteDocumentHandler;
309*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > m_xEmptyList;
310*b1cdbd2cSJim Jagielski 		::rtl::OUString m_aAttributeType;
311*b1cdbd2cSJim Jagielski };
312*b1cdbd2cSJim Jagielski 
313*b1cdbd2cSJim Jagielski } // namespace framework
314*b1cdbd2cSJim Jagielski 
315*b1cdbd2cSJim Jagielski #endif	// #ifndef __FRAMEWORK_XML_MENUDOCUMENTHANDLER_HXX_
316