1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef __FRAMEWORK_XML_MENUDOCUMENTHANDLER_HXX_
21 #define __FRAMEWORK_XML_MENUDOCUMENTHANDLER_HXX_
23 #include <com/sun/star/xml/sax/XDocumentHandler.hpp>
24 #include <com/sun/star/container/XIndexContainer.hpp>
25 #include <com/sun/star/lang/XSingleComponentFactory.hpp>
26 #include <com/sun/star/beans/PropertyValue.hpp>
27 #include <com/sun/star/uno/Sequence.h>
28 #include <com/sun/star/uno/XComponentContext.hpp>
30 #include <threadhelp/threadhelpbase.hxx>
31 #include <rtl/ustring.hxx>
32 #include <cppuhelper/implbase1.hxx>
33 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
34 #include <framework/fwedllapi.h>
38 class FWE_DLLPUBLIC ReadMenuDocumentHandlerBase
: public ThreadHelpBase
, // Struct for right initalization of mutex member! Must be first of baseclasses.
39 public ::cppu::WeakImplHelper1
< ::com::sun::star::xml::sax::XDocumentHandler
>
42 ReadMenuDocumentHandlerBase();
43 virtual ~ReadMenuDocumentHandlerBase();
46 virtual void SAL_CALL
startDocument(void)
47 throw ( ::com::sun::star::xml::sax::SAXException
,
48 ::com::sun::star::uno::RuntimeException
) = 0;
50 virtual void SAL_CALL
endDocument(void)
51 throw( ::com::sun::star::xml::sax::SAXException
,
52 ::com::sun::star::uno::RuntimeException
) = 0;
54 virtual void SAL_CALL
startElement(
55 const OUString
& aName
,
56 const ::com::sun::star::uno::Reference
< ::com::sun::star::xml::sax::XAttributeList
> &xAttribs
)
57 throw( ::com::sun::star::xml::sax::SAXException
,
58 ::com::sun::star::uno::RuntimeException
) = 0;
60 virtual void SAL_CALL
endElement(const OUString
& aName
)
61 throw( ::com::sun::star::xml::sax::SAXException
,
62 ::com::sun::star::uno::RuntimeException
) = 0;
64 virtual void SAL_CALL
characters(const OUString
& aChars
)
65 throw( ::com::sun::star::xml::sax::SAXException
,
66 ::com::sun::star::uno::RuntimeException
) = 0;
68 virtual void SAL_CALL
ignorableWhitespace(const OUString
& aWhitespaces
)
69 throw( ::com::sun::star::xml::sax::SAXException
,
70 ::com::sun::star::uno::RuntimeException
);
72 virtual void SAL_CALL
processingInstruction(const OUString
& aTarget
,
73 const OUString
& aData
)
74 throw( ::com::sun::star::xml::sax::SAXException
,
75 ::com::sun::star::uno::RuntimeException
);
77 virtual void SAL_CALL
setDocumentLocator(
78 const ::com::sun::star::uno::Reference
< ::com::sun::star::xml::sax::XLocator
> &xLocator
)
79 throw( ::com::sun::star::xml::sax::SAXException
,
80 ::com::sun::star::uno::RuntimeException
);
83 OUString
getErrorLineString();
85 ::com::sun::star::uno::Reference
< ::com::sun::star::xml::sax::XLocator
> m_xLocator
;
86 ::com::sun::star::uno::Reference
< ::com::sun::star::xml::sax::XDocumentHandler
> m_xReader
;
87 void initPropertyCommon( com::sun::star::uno::Sequence
< com::sun::star::beans::PropertyValue
> &rProps
,
88 const OUString
&rCommandURL
, const OUString
&rHelpId
,
89 const OUString
&rLabel
, sal_Int16 nItemStyleBits
);
93 OUString m_aContainer
;
95 OUString m_aCommandURL
;
97 ::com::sun::star::uno::Sequence
< com::sun::star::beans::PropertyValue
> m_aItemProp
;
101 class FWE_DLLPUBLIC OReadMenuDocumentHandler
: public ReadMenuDocumentHandlerBase
104 OReadMenuDocumentHandler(
105 const com::sun::star::uno::Reference
< com::sun::star::container::XIndexContainer
>& rItemContainer
);
106 virtual ~OReadMenuDocumentHandler();
109 virtual void SAL_CALL
startDocument(void)
110 throw ( ::com::sun::star::xml::sax::SAXException
,
111 ::com::sun::star::uno::RuntimeException
);
113 virtual void SAL_CALL
endDocument(void)
114 throw( ::com::sun::star::xml::sax::SAXException
,
115 ::com::sun::star::uno::RuntimeException
);
117 virtual void SAL_CALL
startElement(
118 const OUString
& aName
,
119 const ::com::sun::star::uno::Reference
< ::com::sun::star::xml::sax::XAttributeList
> &xAttribs
)
120 throw( ::com::sun::star::xml::sax::SAXException
,
121 ::com::sun::star::uno::RuntimeException
);
123 virtual void SAL_CALL
endElement(const OUString
& aName
)
124 throw( ::com::sun::star::xml::sax::SAXException
,
125 ::com::sun::star::uno::RuntimeException
);
127 virtual void SAL_CALL
characters(const OUString
& aChars
)
128 throw( ::com::sun::star::xml::sax::SAXException
,
129 ::com::sun::star::uno::RuntimeException
);
133 sal_Bool m_bMenuBarMode
;
134 com::sun::star::uno::Reference
< ::com::sun::star::container::XIndexContainer
> m_xMenuBarContainer
;
135 com::sun::star::uno::Reference
< ::com::sun::star::lang::XSingleComponentFactory
> m_xContainerFactory
;
136 }; // OReadMenuDocumentHandler
139 class FWE_DLLPUBLIC OReadMenuBarHandler
: public ReadMenuDocumentHandlerBase
143 const com::sun::star::uno::Reference
< ::com::sun::star::container::XIndexContainer
>& rMenuBarContainer
,
144 const com::sun::star::uno::Reference
< ::com::sun::star::lang::XSingleComponentFactory
>& rContainerFactory
);
145 virtual ~OReadMenuBarHandler();
148 virtual void SAL_CALL
startDocument(void)
149 throw ( ::com::sun::star::xml::sax::SAXException
,
150 ::com::sun::star::uno::RuntimeException
);
152 virtual void SAL_CALL
endDocument(void)
153 throw( ::com::sun::star::xml::sax::SAXException
,
154 ::com::sun::star::uno::RuntimeException
);
156 virtual void SAL_CALL
startElement(
157 const OUString
& aName
,
158 const ::com::sun::star::uno::Reference
< ::com::sun::star::xml::sax::XAttributeList
> &xAttribs
)
159 throw( ::com::sun::star::xml::sax::SAXException
,
160 ::com::sun::star::uno::RuntimeException
);
162 virtual void SAL_CALL
endElement(const OUString
& aName
)
163 throw( ::com::sun::star::xml::sax::SAXException
,
164 ::com::sun::star::uno::RuntimeException
);
166 virtual void SAL_CALL
characters(const OUString
& aChars
)
167 throw( ::com::sun::star::xml::sax::SAXException
,
168 ::com::sun::star::uno::RuntimeException
);
172 sal_Bool m_bMenuMode
;
173 com::sun::star::uno::Reference
< ::com::sun::star::container::XIndexContainer
> m_xMenuBarContainer
;
174 com::sun::star::uno::Reference
< ::com::sun::star::lang::XSingleComponentFactory
> m_xContainerFactory
;
175 }; // OReadMenuBarHandler
178 class FWE_DLLPUBLIC OReadMenuHandler
: public ReadMenuDocumentHandlerBase
181 OReadMenuHandler( const com::sun::star::uno::Reference
< ::com::sun::star::container::XIndexContainer
>& rMenuContainer
,
182 const com::sun::star::uno::Reference
< ::com::sun::star::lang::XSingleComponentFactory
>& rContainerFactory
);
183 virtual ~OReadMenuHandler();
186 virtual void SAL_CALL
startDocument(void)
187 throw ( ::com::sun::star::xml::sax::SAXException
,
188 ::com::sun::star::uno::RuntimeException
);
190 virtual void SAL_CALL
endDocument(void)
191 throw( ::com::sun::star::xml::sax::SAXException
,
192 ::com::sun::star::uno::RuntimeException
);
194 virtual void SAL_CALL
startElement(
195 const OUString
& aName
,
196 const ::com::sun::star::uno::Reference
< ::com::sun::star::xml::sax::XAttributeList
> &xAttribs
)
197 throw( ::com::sun::star::xml::sax::SAXException
,
198 ::com::sun::star::uno::RuntimeException
);
200 virtual void SAL_CALL
endElement(const OUString
& aName
)
201 throw( ::com::sun::star::xml::sax::SAXException
,
202 ::com::sun::star::uno::RuntimeException
);
204 virtual void SAL_CALL
characters(const OUString
& aChars
)
205 throw( ::com::sun::star::xml::sax::SAXException
,
206 ::com::sun::star::uno::RuntimeException
);
210 sal_Bool m_bMenuPopupMode
;
211 com::sun::star::uno::Reference
< ::com::sun::star::container::XIndexContainer
> m_xMenuContainer
;
212 com::sun::star::uno::Reference
< ::com::sun::star::lang::XSingleComponentFactory
> m_xContainerFactory
;
213 }; // OReadMenuHandler
216 class FWE_DLLPUBLIC OReadMenuPopupHandler
: public ReadMenuDocumentHandlerBase
219 OReadMenuPopupHandler( const com::sun::star::uno::Reference
< ::com::sun::star::container::XIndexContainer
>& rMenuContainer
,
220 const com::sun::star::uno::Reference
< ::com::sun::star::lang::XSingleComponentFactory
>& rContainerFactory
);
221 virtual ~OReadMenuPopupHandler();
224 virtual void SAL_CALL
startDocument(void)
225 throw ( ::com::sun::star::xml::sax::SAXException
,
226 ::com::sun::star::uno::RuntimeException
);
228 virtual void SAL_CALL
endDocument(void)
229 throw ( ::com::sun::star::xml::sax::SAXException
,
230 ::com::sun::star::uno::RuntimeException
);
232 virtual void SAL_CALL
startElement(
233 const OUString
& aName
,
234 const ::com::sun::star::uno::Reference
<
235 ::com::sun::star::xml::sax::XAttributeList
> &xAttribs
)
236 throw ( ::com::sun::star::xml::sax::SAXException
,
237 ::com::sun::star::uno::RuntimeException
);
239 virtual void SAL_CALL
endElement(const OUString
& aName
)
240 throw ( ::com::sun::star::xml::sax::SAXException
,
241 ::com::sun::star::uno::RuntimeException
);
243 virtual void SAL_CALL
characters(const OUString
& aChars
)
244 throw ( ::com::sun::star::xml::sax::SAXException
,
245 ::com::sun::star::uno::RuntimeException
);
248 enum NextElementClose
{ ELEM_CLOSE_NONE
, ELEM_CLOSE_MENUITEM
, ELEM_CLOSE_MENUSEPARATOR
};
251 sal_Bool m_bMenuMode
;
252 com::sun::star::uno::Reference
< ::com::sun::star::container::XIndexContainer
> m_xMenuContainer
;
253 com::sun::star::uno::Reference
< ::com::sun::star::lang::XSingleComponentFactory
> m_xContainerFactory
;
254 com::sun::star::uno::Reference
< ::com::sun::star::uno::XComponentContext
> m_xComponentContext
;
255 NextElementClose m_nNextElementExpected
;
256 }; // OReadMenuPopupHandler
259 class FWE_DLLPUBLIC OWriteMenuDocumentHandler
262 OWriteMenuDocumentHandler(
263 const ::com::sun::star::uno::Reference
< ::com::sun::star::container::XIndexAccess
>& rMenuBarContainer
,
264 const ::com::sun::star::uno::Reference
< ::com::sun::star::xml::sax::XDocumentHandler
>& rDocumentHandler
);
265 virtual ~OWriteMenuDocumentHandler();
267 void WriteMenuDocument() throw
268 ( ::com::sun::star::xml::sax::SAXException
, ::com::sun::star::uno::RuntimeException
);
270 virtual void WriteMenu( const ::com::sun::star::uno::Reference
< ::com::sun::star::container::XIndexAccess
>& rSubMenuContainer
) throw
271 ( ::com::sun::star::xml::sax::SAXException
, ::com::sun::star::uno::RuntimeException
);
273 virtual void WriteMenuItem( const OUString
& aCommandURL
, const OUString
& aLabel
, const OUString
& aHelpURL
, sal_Int16 nStyle
= 0 );
274 virtual void WriteMenuSeparator();
276 com::sun::star::uno::Reference
< ::com::sun::star::container::XIndexAccess
> m_xMenuBarContainer
;
277 ::com::sun::star::uno::Reference
< ::com::sun::star::xml::sax::XDocumentHandler
> m_xWriteDocumentHandler
;
278 ::com::sun::star::uno::Reference
< ::com::sun::star::xml::sax::XAttributeList
> m_xEmptyList
;
279 OUString m_aAttributeType
;
282 } // namespace framework
284 #endif // #ifndef __FRAMEWORK_XML_MENUDOCUMENTHANDLER_HXX_
286 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */