xref: /AOO41X/main/framework/inc/xml/acceleratorconfigurationreader.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_ACCELERATORCONFIGURATIONREADER_HXX_
25 #define _FRAMEWORK_XML_ACCELERATORCONFIGURATIONREADER_HXX_
26 
27 //_______________________________________________
28 // own includes
29 
30 #include <accelerators/acceleratorcache.hxx>
31 #include <accelerators/keymapping.hxx>
32 #include <macros/xinterface.hxx>
33 #include <threadhelp/threadhelpbase.hxx>
34 #include <general.h>
35 
36 //_______________________________________________
37 // interface includes
38 
39 #ifndef __COM_SUN_STAR_XML_SAX_XDOCUMENTHANDLER_HPP_
40 #include <com/sun/star/xml/sax/XDocumentHandler.hpp>
41 #endif
42 
43 #ifndef __COM_SUN_STAR_XML_SAX_XLOCATOR_HPP_
44 #include <com/sun/star/xml/sax/XLocator.hpp>
45 #endif
46 
47 //_______________________________________________
48 // other includes
49 #include <salhelper/singletonref.hxx>
50 #include <cppuhelper/weak.hxx>
51 #include <rtl/ustring.hxx>
52 
53 namespace framework{
54 
55 class AcceleratorConfigurationReader : public  css::xml::sax::XDocumentHandler
56                                      , private ThreadHelpBase
57                                      , public  ::cppu::OWeakObject
58 {
59     //-------------------------------------------
60     // const, types
61 
62     private:
63 
64         //---------------------------------------
65         /** @short  classification of XML elements. */
66         enum EXMLElement
67         {
68             E_ELEMENT_ACCELERATORLIST,
69             E_ELEMENT_ITEM
70         };
71 
72         //---------------------------------------
73         /** @short  classification of XML attributes. */
74         enum EXMLAttribute
75         {
76             E_ATTRIBUTE_KEYCODE,
77             E_ATTRIBUTE_MOD_SHIFT,
78             E_ATTRIBUTE_MOD_MOD1,
79             E_ATTRIBUTE_MOD_MOD2,
80                         E_ATTRIBUTE_MOD_MOD3,
81             E_ATTRIBUTE_URL
82         };
83 
84         //---------------------------------------
85         /** @short  some namespace defines */
86         enum EAcceleratorXMLNamespace
87         {
88             E_NAMESPACE_ACCEL,
89             E_NAMESPACE_XLINK
90         };
91 
92     //-------------------------------------------
93     // member
94 
95     private:
96 
97         //---------------------------------------
98         /** @short  needed to read the xml configuration. */
99         css::uno::Reference< css::xml::sax::XDocumentHandler > m_xReader;
100 
101         //---------------------------------------
102         /** @short  reference to the outside container, where this
103                     reader/writer must work on. */
104         AcceleratorCache& m_rContainer;
105 
106         //---------------------------------------
107         /** @short  used to detect if an accelerator list
108                     occures recursive inside xml. */
109         sal_Bool m_bInsideAcceleratorList;
110 
111         //---------------------------------------
112         /** @short  used to detect if an accelerator item
113                     occures recursive inside xml. */
114         sal_Bool m_bInsideAcceleratorItem;
115 
116         //---------------------------------------
117         /** @short  is used to map key codes to its
118                     string representation.
119 
120             @descr  To perform this operatio is
121                     created only one times and holded
122                     alive forever ...*/
123         ::salhelper::SingletonRef< KeyMapping > m_rKeyMapping;
124 
125         //---------------------------------------
126         /** @short  provide informations abou the parsing state.
127 
128             @descr  We use it to find out the line and column, where
129                     an error occure.
130           */
131         css::uno::Reference< css::xml::sax::XLocator > m_xLocator;
132 
133 /*        SfxAcceleratorItemList& m_aReadAcceleratorList;
134 */
135 
136     //-------------------------------------------
137     // interface
138 
139     public:
140 
141         //---------------------------------------
142         /** @short  connect this new reader/writer instance
143                     to an outside container, which should be used
144                     flushed to the underlying XML configuration or
145                     filled from there.
146 
147             @param  rContainer
148                     a reference to the outside container.
149           */
150         AcceleratorConfigurationReader(AcceleratorCache& rContainer);
151 
152         //---------------------------------------
153         /** @short  does nothing real ... */
154         virtual ~AcceleratorConfigurationReader();
155 
156         //---------------------------------------
157         // XInterface
158         FWK_DECLARE_XINTERFACE
159 
160         //---------------------------------------
161         // XDocumentHandler
162         virtual void SAL_CALL startDocument()
163             throw(css::xml::sax::SAXException,
164                   css::uno::RuntimeException );
165 
166         virtual void SAL_CALL endDocument()
167             throw(css::xml::sax::SAXException,
168                   css::uno::RuntimeException );
169 
170         virtual void SAL_CALL startElement(const ::rtl::OUString&                                      sElement      ,
171                                            const css::uno::Reference< css::xml::sax::XAttributeList >& xAttributeList)
172             throw(css::xml::sax::SAXException,
173                   css::uno::RuntimeException );
174 
175         virtual void SAL_CALL endElement(const ::rtl::OUString& sElement)
176             throw(css::xml::sax::SAXException,
177                   css::uno::RuntimeException );
178 
179         virtual void SAL_CALL characters(const ::rtl::OUString& sChars)
180             throw(css::xml::sax::SAXException,
181                   css::uno::RuntimeException );
182 
183         virtual void SAL_CALL ignorableWhitespace(const ::rtl::OUString& sWhitespaces)
184             throw(css::xml::sax::SAXException,
185                   css::uno::RuntimeException );
186 
187         virtual void SAL_CALL processingInstruction(const ::rtl::OUString& sTarget,
188                                                     const ::rtl::OUString& sData  )
189             throw(css::xml::sax::SAXException,
190                   css::uno::RuntimeException );
191 
192         virtual void SAL_CALL setDocumentLocator(const css::uno::Reference< css::xml::sax::XLocator >& xLocator)
193             throw(css::xml::sax::SAXException,
194                   css::uno::RuntimeException );
195 
196     //-------------------------------------------
197     // helper
198 
199     private:
200 
201         //---------------------------------------
202         /** TODO document me */
203         static EXMLElement implst_classifyElement(const ::rtl::OUString& sElement);
204 
205         //---------------------------------------
206         /** TODO document me */
207         static EXMLAttribute implst_classifyAttribute(const ::rtl::OUString& sAttribute);
208 
209         //---------------------------------------
210         /** TODO document me */
211         ::rtl::OUString implts_getErrorLineString();
212 };
213 
214 } // namespace framework
215 
216 #endif // _FRAMEWORK_XML_ACCELERATORCONFIGURATIONREADER_HXX_
217