xref: /AOO41X/main/framework/inc/xml/menudocumenthandler.hxx (revision f8e07b45f7e1fb69563504f404bb0b75210f0be6)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef __FRAMEWORK_XML_MENUDOCUMENTHANDLER_HXX_
25 #define __FRAMEWORK_XML_MENUDOCUMENTHANDLER_HXX_
26 
27 //_________________________________________________________________________________________________________________
28 //  interface includes
29 //_________________________________________________________________________________________________________________
30 
31 #ifndef __COM_SUN_STAR_XML_SAX_XDOCUMENTHANDLER_HPP_
32 #include <com/sun/star/xml/sax/XDocumentHandler.hpp>
33 #endif
34 #include <com/sun/star/container/XIndexContainer.hpp>
35 #include <com/sun/star/lang/XSingleComponentFactory.hpp>
36 #include <com/sun/star/beans/PropertyValue.hpp>
37 #include <com/sun/star/uno/Sequence.h>
38 #include <com/sun/star/uno/XComponentContext.hpp>
39 
40 //_________________________________________________________________________________________________________________
41 //  other includes
42 //_________________________________________________________________________________________________________________
43 #include <threadhelp/threadhelpbase.hxx>
44 #include <rtl/ustring.hxx>
45 #include <cppuhelper/implbase1.hxx>
46 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
47 #include <framework/fwedllapi.h>
48 
49 //_________________________________________________________________________________________________________________
50 //  namespace
51 //_________________________________________________________________________________________________________________
52 
53 namespace framework{
54 
55 class FWE_DLLPUBLIC ReadMenuDocumentHandlerBase : public ThreadHelpBase,    // Struct for right initalization of mutex member! Must be first of baseclasses.
56                                     public ::cppu::WeakImplHelper1< ::com::sun::star::xml::sax::XDocumentHandler >
57 {
58     public:
59         ReadMenuDocumentHandlerBase();
60         virtual ~ReadMenuDocumentHandlerBase();
61 
62         // XDocumentHandler
63         virtual void SAL_CALL startDocument(void)
64         throw ( ::com::sun::star::xml::sax::SAXException,
65                 ::com::sun::star::uno::RuntimeException ) = 0;
66 
67         virtual void SAL_CALL endDocument(void)
68         throw(  ::com::sun::star::xml::sax::SAXException,
69                 ::com::sun::star::uno::RuntimeException ) = 0;
70 
71         virtual void SAL_CALL startElement(
72             const rtl::OUString& aName,
73             const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > &xAttribs)
74         throw(  ::com::sun::star::xml::sax::SAXException,
75                 ::com::sun::star::uno::RuntimeException ) = 0;
76 
77         virtual void SAL_CALL endElement(const rtl::OUString& aName)
78         throw(  ::com::sun::star::xml::sax::SAXException,
79                 ::com::sun::star::uno::RuntimeException ) = 0;
80 
81         virtual void SAL_CALL characters(const rtl::OUString& aChars)
82         throw(  ::com::sun::star::xml::sax::SAXException,
83                 ::com::sun::star::uno::RuntimeException ) = 0;
84 
85         virtual void SAL_CALL ignorableWhitespace(const rtl::OUString& aWhitespaces)
86         throw(  ::com::sun::star::xml::sax::SAXException,
87                 ::com::sun::star::uno::RuntimeException );
88 
89         virtual void SAL_CALL processingInstruction(const rtl::OUString& aTarget,
90                                                     const rtl::OUString& aData)
91         throw(  ::com::sun::star::xml::sax::SAXException,
92                 ::com::sun::star::uno::RuntimeException );
93 
94         virtual void SAL_CALL setDocumentLocator(
95             const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator > &xLocator)
96         throw(  ::com::sun::star::xml::sax::SAXException,
97                 ::com::sun::star::uno::RuntimeException );
98 
99     protected:
100         ::rtl::OUString getErrorLineString();
101 
102         ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator > m_xLocator;
103         ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler> m_xReader;
104         void initPropertyCommon( com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue > &rProps,
105                                  const rtl::OUString &rCommandURL, const rtl::OUString &rHelpId,
106                                  const rtl::OUString &rLabel, sal_Int16 nItemStyleBits );
107     private:
108         rtl::OUString m_aType;
109         rtl::OUString m_aLabel;
110         rtl::OUString m_aContainer;
111         rtl::OUString m_aHelpURL;
112         rtl::OUString m_aCommandURL;
113         rtl::OUString m_aStyle;
114         ::com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue > m_aItemProp;
115 };
116 
117 
118 class FWE_DLLPUBLIC OReadMenuDocumentHandler : public ReadMenuDocumentHandlerBase
119 {
120     public:
121         // #110897#
122         OReadMenuDocumentHandler(
123             const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
124             const com::sun::star::uno::Reference< com::sun::star::container::XIndexContainer >& rItemContainer );
125         virtual ~OReadMenuDocumentHandler();
126 
127         // #110897#
128         const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& getServiceFactory();
129 
130         // XDocumentHandler
131         virtual void SAL_CALL startDocument(void)
132         throw ( ::com::sun::star::xml::sax::SAXException,
133                 ::com::sun::star::uno::RuntimeException );
134 
135         virtual void SAL_CALL endDocument(void)
136         throw(  ::com::sun::star::xml::sax::SAXException,
137                 ::com::sun::star::uno::RuntimeException );
138 
139         virtual void SAL_CALL startElement(
140             const rtl::OUString& aName,
141             const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > &xAttribs)
142         throw(  ::com::sun::star::xml::sax::SAXException,
143                 ::com::sun::star::uno::RuntimeException );
144 
145         virtual void SAL_CALL endElement(const rtl::OUString& aName)
146         throw(  ::com::sun::star::xml::sax::SAXException,
147                 ::com::sun::star::uno::RuntimeException );
148 
149         virtual void SAL_CALL characters(const rtl::OUString& aChars)
150         throw(  ::com::sun::star::xml::sax::SAXException,
151                 ::com::sun::star::uno::RuntimeException );
152 
153     private:
154           int       m_nElementDepth;
155           sal_Bool  m_bMenuBarMode;
156           com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > m_xMenuBarContainer;
157           com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory > m_xContainerFactory;
158           const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& mxServiceFactory;
159 };  // OReadMenuDocumentHandler
160 
161 
162 class FWE_DLLPUBLIC OReadMenuBarHandler : public ReadMenuDocumentHandlerBase
163 {
164     public:
165         // #110897#
166         OReadMenuBarHandler(
167             const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
168             const com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >& rMenuBarContainer,
169             const com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory >& rContainerFactory );
170         virtual ~OReadMenuBarHandler();
171 
172         // #110897#
173         const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& getServiceFactory();
174 
175         // XDocumentHandler
176         virtual void SAL_CALL startDocument(void)
177         throw ( ::com::sun::star::xml::sax::SAXException,
178                 ::com::sun::star::uno::RuntimeException );
179 
180         virtual void SAL_CALL endDocument(void)
181         throw(  ::com::sun::star::xml::sax::SAXException,
182                 ::com::sun::star::uno::RuntimeException );
183 
184         virtual void SAL_CALL startElement(
185             const rtl::OUString& aName,
186             const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > &xAttribs)
187         throw(  ::com::sun::star::xml::sax::SAXException,
188                 ::com::sun::star::uno::RuntimeException );
189 
190         virtual void SAL_CALL endElement(const rtl::OUString& aName)
191         throw(  ::com::sun::star::xml::sax::SAXException,
192                 ::com::sun::star::uno::RuntimeException );
193 
194         virtual void SAL_CALL characters(const rtl::OUString& aChars)
195         throw(  ::com::sun::star::xml::sax::SAXException,
196                 ::com::sun::star::uno::RuntimeException );
197 
198     private:
199         int         m_nElementDepth;
200         sal_Bool    m_bMenuMode;
201         com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > m_xMenuBarContainer;
202         com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory > m_xContainerFactory;
203 
204         // #110897#
205         const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& mxServiceFactory;
206 };  // OReadMenuBarHandler
207 
208 
209 class FWE_DLLPUBLIC OReadMenuHandler : public ReadMenuDocumentHandlerBase
210 {
211     public:
212         OReadMenuHandler( const com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >& rMenuContainer,
213                           const com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory >& rContainerFactory );
214         virtual ~OReadMenuHandler();
215 
216         // XDocumentHandler
217         virtual void SAL_CALL startDocument(void)
218         throw ( ::com::sun::star::xml::sax::SAXException,
219                 ::com::sun::star::uno::RuntimeException );
220 
221         virtual void SAL_CALL endDocument(void)
222         throw(  ::com::sun::star::xml::sax::SAXException,
223                 ::com::sun::star::uno::RuntimeException );
224 
225         virtual void SAL_CALL startElement(
226             const rtl::OUString& aName,
227             const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > &xAttribs)
228         throw(  ::com::sun::star::xml::sax::SAXException,
229                 ::com::sun::star::uno::RuntimeException );
230 
231         virtual void SAL_CALL endElement(const rtl::OUString& aName)
232         throw(  ::com::sun::star::xml::sax::SAXException,
233                 ::com::sun::star::uno::RuntimeException );
234 
235         virtual void SAL_CALL characters(const rtl::OUString& aChars)
236         throw(  ::com::sun::star::xml::sax::SAXException,
237                 ::com::sun::star::uno::RuntimeException );
238 
239     private:
240         int                 m_nElementDepth;
241         sal_Bool            m_bMenuPopupMode;
242         com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > m_xMenuContainer;
243         com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory > m_xContainerFactory;
244 }; // OReadMenuHandler
245 
246 
247 class FWE_DLLPUBLIC OReadMenuPopupHandler : public ReadMenuDocumentHandlerBase
248 {
249     public:
250         OReadMenuPopupHandler( const com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >& rMenuContainer,
251                                const com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory >& rContainerFactory );
252         virtual ~OReadMenuPopupHandler();
253 
254         // XDocumentHandler
255         virtual void SAL_CALL startDocument(void)
256             throw ( ::com::sun::star::xml::sax::SAXException,
257                     ::com::sun::star::uno::RuntimeException );
258 
259         virtual void SAL_CALL endDocument(void)
260             throw ( ::com::sun::star::xml::sax::SAXException,
261                     ::com::sun::star::uno::RuntimeException );
262 
263         virtual void SAL_CALL startElement(
264             const rtl::OUString& aName,
265             const ::com::sun::star::uno::Reference<
266                 ::com::sun::star::xml::sax::XAttributeList > &xAttribs)
267             throw ( ::com::sun::star::xml::sax::SAXException,
268                     ::com::sun::star::uno::RuntimeException );
269 
270         virtual void SAL_CALL endElement(const rtl::OUString& aName)
271             throw ( ::com::sun::star::xml::sax::SAXException,
272                     ::com::sun::star::uno::RuntimeException );
273 
274         virtual void SAL_CALL characters(const rtl::OUString& aChars)
275             throw ( ::com::sun::star::xml::sax::SAXException,
276                     ::com::sun::star::uno::RuntimeException );
277 
278     private:
279         enum NextElementClose { ELEM_CLOSE_NONE, ELEM_CLOSE_MENUITEM, ELEM_CLOSE_MENUSEPARATOR };
280 
281         int                 m_nElementDepth;
282         sal_Bool            m_bMenuMode;
283         com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > m_xMenuContainer;
284         com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory > m_xContainerFactory;
285         com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >     m_xComponentContext;
286         NextElementClose    m_nNextElementExpected;
287 }; // OReadMenuPopupHandler
288 
289 
290 class FWE_DLLPUBLIC OWriteMenuDocumentHandler
291 {
292     public:
293         OWriteMenuDocumentHandler(
294             const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >& rMenuBarContainer,
295             const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler >& rDocumentHandler );
296         virtual ~OWriteMenuDocumentHandler();
297 
298         void WriteMenuDocument() throw
299             ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException );
300     protected:
301         virtual void WriteMenu( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >& rSubMenuContainer ) throw
302             ( ::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException );
303 
304         virtual void WriteMenuItem( const rtl::OUString& aCommandURL, const rtl::OUString& aLabel, const rtl::OUString& aHelpURL, sal_Int16 nStyle = 0 );
305         virtual void WriteMenuSeparator();
306 
307         com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > m_xMenuBarContainer;
308         ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler > m_xWriteDocumentHandler;
309         ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > m_xEmptyList;
310         ::rtl::OUString m_aAttributeType;
311 };
312 
313 } // namespace framework
314 
315 #endif  // #ifndef __FRAMEWORK_XML_MENUDOCUMENTHANDLER_HXX_
316