xref: /trunk/main/framework/inc/xml/menudocumenthandler.hxx (revision 91144cd0085a7583d2099b982122deb2184ab956)
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 initialization 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) = 0;
64 
65         virtual void SAL_CALL endDocument(void) = 0;
66 
67         virtual void SAL_CALL startElement(
68             const rtl::OUString& aName,
69             const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > &xAttribs) = 0;
70 
71         virtual void SAL_CALL endElement(const rtl::OUString& aName) = 0;
72 
73         virtual void SAL_CALL characters(const rtl::OUString& aChars) = 0;
74 
75         virtual void SAL_CALL ignorableWhitespace(const rtl::OUString& aWhitespaces);
76 
77         virtual void SAL_CALL processingInstruction(const rtl::OUString& aTarget,
78                                                     const rtl::OUString& aData);
79 
80         virtual void SAL_CALL setDocumentLocator(
81             const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator > &xLocator);
82 
83     protected:
84         ::rtl::OUString getErrorLineString();
85 
86         ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator > m_xLocator;
87         ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler> m_xReader;
88         void initPropertyCommon( com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue > &rProps,
89                                  const rtl::OUString &rCommandURL, const rtl::OUString &rHelpId,
90                                  const rtl::OUString &rLabel, sal_Int16 nItemStyleBits );
91     private:
92         rtl::OUString m_aType;
93         rtl::OUString m_aLabel;
94         rtl::OUString m_aContainer;
95         rtl::OUString m_aHelpURL;
96         rtl::OUString m_aCommandURL;
97         rtl::OUString m_aStyle;
98         ::com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue > m_aItemProp;
99 };
100 
101 
102 class FWE_DLLPUBLIC OReadMenuDocumentHandler : public ReadMenuDocumentHandlerBase
103 {
104     public:
105         // #110897#
106         OReadMenuDocumentHandler(
107             const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
108             const com::sun::star::uno::Reference< com::sun::star::container::XIndexContainer >& rItemContainer );
109         virtual ~OReadMenuDocumentHandler();
110 
111         // #110897#
112         const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& getServiceFactory();
113 
114         // XDocumentHandler
115         virtual void SAL_CALL startDocument(void);
116 
117         virtual void SAL_CALL endDocument(void);
118 
119         virtual void SAL_CALL startElement(
120             const rtl::OUString& aName,
121             const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > &xAttribs);
122 
123         virtual void SAL_CALL endElement(const rtl::OUString& aName);
124 
125         virtual void SAL_CALL characters(const rtl::OUString& aChars);
126 
127     private:
128           int       m_nElementDepth;
129           sal_Bool  m_bMenuBarMode;
130           com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > m_xMenuBarContainer;
131           com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory > m_xContainerFactory;
132           const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& mxServiceFactory;
133 };  // OReadMenuDocumentHandler
134 
135 
136 class FWE_DLLPUBLIC OReadMenuBarHandler : public ReadMenuDocumentHandlerBase
137 {
138     public:
139         // #110897#
140         OReadMenuBarHandler(
141             const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory,
142             const com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >& rMenuBarContainer,
143             const com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory >& rContainerFactory );
144         virtual ~OReadMenuBarHandler();
145 
146         // #110897#
147         const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& getServiceFactory();
148 
149         // XDocumentHandler
150         virtual void SAL_CALL startDocument(void);
151 
152         virtual void SAL_CALL endDocument(void);
153 
154         virtual void SAL_CALL startElement(
155             const rtl::OUString& aName,
156             const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > &xAttribs);
157 
158         virtual void SAL_CALL endElement(const rtl::OUString& aName);
159 
160         virtual void SAL_CALL characters(const rtl::OUString& aChars);
161 
162     private:
163         int         m_nElementDepth;
164         sal_Bool    m_bMenuMode;
165         com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > m_xMenuBarContainer;
166         com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory > m_xContainerFactory;
167 
168         // #110897#
169         const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& mxServiceFactory;
170 };  // OReadMenuBarHandler
171 
172 
173 class FWE_DLLPUBLIC OReadMenuHandler : public ReadMenuDocumentHandlerBase
174 {
175     public:
176         OReadMenuHandler( const com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >& rMenuContainer,
177                           const com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory >& rContainerFactory );
178         virtual ~OReadMenuHandler();
179 
180         // XDocumentHandler
181         virtual void SAL_CALL startDocument(void);
182 
183         virtual void SAL_CALL endDocument(void);
184 
185         virtual void SAL_CALL startElement(
186             const rtl::OUString& aName,
187             const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > &xAttribs);
188 
189         virtual void SAL_CALL endElement(const rtl::OUString& aName);
190 
191         virtual void SAL_CALL characters(const rtl::OUString& aChars);
192 
193     private:
194         int                 m_nElementDepth;
195         sal_Bool            m_bMenuPopupMode;
196         com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > m_xMenuContainer;
197         com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory > m_xContainerFactory;
198 }; // OReadMenuHandler
199 
200 
201 class FWE_DLLPUBLIC OReadMenuPopupHandler : public ReadMenuDocumentHandlerBase
202 {
203     public:
204         OReadMenuPopupHandler( const com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >& rMenuContainer,
205                                const com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory >& rContainerFactory );
206         virtual ~OReadMenuPopupHandler();
207 
208         // XDocumentHandler
209         virtual void SAL_CALL startDocument(void);
210 
211         virtual void SAL_CALL endDocument(void);
212 
213         virtual void SAL_CALL startElement(
214             const rtl::OUString& aName,
215             const ::com::sun::star::uno::Reference<
216                 ::com::sun::star::xml::sax::XAttributeList > &xAttribs);
217 
218         virtual void SAL_CALL endElement(const rtl::OUString& aName);
219 
220         virtual void SAL_CALL characters(const rtl::OUString& aChars);
221 
222     private:
223         enum NextElementClose { ELEM_CLOSE_NONE, ELEM_CLOSE_MENUITEM, ELEM_CLOSE_MENUSEPARATOR };
224 
225         int                 m_nElementDepth;
226         sal_Bool            m_bMenuMode;
227         com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > m_xMenuContainer;
228         com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleComponentFactory > m_xContainerFactory;
229         com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >     m_xComponentContext;
230         NextElementClose    m_nNextElementExpected;
231 }; // OReadMenuPopupHandler
232 
233 
234 class FWE_DLLPUBLIC OWriteMenuDocumentHandler
235 {
236     public:
237         OWriteMenuDocumentHandler(
238             const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >& rMenuBarContainer,
239             const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler >& rDocumentHandler );
240         virtual ~OWriteMenuDocumentHandler();
241 
242         void WriteMenuDocument();
243     protected:
244         virtual void WriteMenu( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >& rSubMenuContainer );
245 
246         virtual void WriteMenuItem( const rtl::OUString& aCommandURL, const rtl::OUString& aLabel, const rtl::OUString& aHelpURL, sal_Int16 nStyle = 0 );
247         virtual void WriteMenuSeparator();
248 
249         com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess > m_xMenuBarContainer;
250         ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler > m_xWriteDocumentHandler;
251         ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > m_xEmptyList;
252         ::rtl::OUString m_aAttributeType;
253 };
254 
255 } // namespace framework
256 
257 #endif  // #ifndef __FRAMEWORK_XML_MENUDOCUMENTHANDLER_HXX_
258