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_STATUSBARDOCUMENTHANDLER_HXX_
25*b1cdbd2cSJim Jagielski #define __FRAMEWORK_XML_STATUSBARDOCUMENTHANDLER_HXX_
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #ifndef __FRAMEWORK_XML_STATUSBARCONFIGURATION_HXX_
28*b1cdbd2cSJim Jagielski #include <framework/statusbarconfiguration.hxx>
29*b1cdbd2cSJim Jagielski #endif
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
32*b1cdbd2cSJim Jagielski //	interface includes
33*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski #ifndef __COM_SUN_STAR_XML_SAX_XDOCUMENTHANDLER_HPP_
36*b1cdbd2cSJim Jagielski #include <com/sun/star/xml/sax/XDocumentHandler.hpp>
37*b1cdbd2cSJim Jagielski #endif
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
40*b1cdbd2cSJim Jagielski //	other includes
41*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
42*b1cdbd2cSJim Jagielski #include <threadhelp/threadhelpbase.hxx>
43*b1cdbd2cSJim Jagielski #include <rtl/ustring.hxx>
44*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase1.hxx>
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski #include <hash_map>
47*b1cdbd2cSJim Jagielski #include <stdtypes.h>
48*b1cdbd2cSJim Jagielski #include <framework/fwedllapi.h>
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
51*b1cdbd2cSJim Jagielski //	namespace
52*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski namespace framework{
55*b1cdbd2cSJim Jagielski 
56*b1cdbd2cSJim Jagielski //*****************************************************************************************************************
57*b1cdbd2cSJim Jagielski // Hash code function for using in all hash maps of follow implementation.
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski class FWE_DLLPUBLIC OReadStatusBarDocumentHandler :	private ThreadHelpBase,	// Struct for right initalization of lock member! Must be first of baseclasses.
60*b1cdbd2cSJim Jagielski 										public ::cppu::WeakImplHelper1< ::com::sun::star::xml::sax::XDocumentHandler >
61*b1cdbd2cSJim Jagielski {
62*b1cdbd2cSJim Jagielski 	public:
63*b1cdbd2cSJim Jagielski 		enum StatusBar_XML_Entry
64*b1cdbd2cSJim Jagielski 		{
65*b1cdbd2cSJim Jagielski 			SB_ELEMENT_STATUSBAR,
66*b1cdbd2cSJim Jagielski 			SB_ELEMENT_STATUSBARITEM,
67*b1cdbd2cSJim Jagielski 			SB_ATTRIBUTE_URL,
68*b1cdbd2cSJim Jagielski 			SB_ATTRIBUTE_ALIGN,
69*b1cdbd2cSJim Jagielski 			SB_ATTRIBUTE_STYLE,
70*b1cdbd2cSJim Jagielski 			SB_ATTRIBUTE_AUTOSIZE,
71*b1cdbd2cSJim Jagielski 			SB_ATTRIBUTE_OWNERDRAW,
72*b1cdbd2cSJim Jagielski 			SB_ATTRIBUTE_WIDTH,
73*b1cdbd2cSJim Jagielski 			SB_ATTRIBUTE_OFFSET,
74*b1cdbd2cSJim Jagielski             SB_ATTRIBUTE_HELPURL,
75*b1cdbd2cSJim Jagielski 			SB_XML_ENTRY_COUNT
76*b1cdbd2cSJim Jagielski 		};
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski 		enum StatusBar_XML_Namespace
79*b1cdbd2cSJim Jagielski 		{
80*b1cdbd2cSJim Jagielski 			SB_NS_STATUSBAR,
81*b1cdbd2cSJim Jagielski 			SB_NS_XLINK,
82*b1cdbd2cSJim Jagielski 			SB_XML_NAMESPACES_COUNT
83*b1cdbd2cSJim Jagielski 		};
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski         OReadStatusBarDocumentHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >& aStatusBarItems );
86*b1cdbd2cSJim Jagielski 		virtual ~OReadStatusBarDocumentHandler();
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski 		// XDocumentHandler
89*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL startDocument(void)
90*b1cdbd2cSJim Jagielski 		throw (	::com::sun::star::xml::sax::SAXException,
91*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL endDocument(void)
94*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
95*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL startElement(
98*b1cdbd2cSJim Jagielski 			const rtl::OUString& aName,
99*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > &xAttribs)
100*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
101*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL endElement(const rtl::OUString& aName)
104*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
105*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL characters(const rtl::OUString& aChars)
108*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
109*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL ignorableWhitespace(const rtl::OUString& aWhitespaces)
112*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
113*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL processingInstruction(const rtl::OUString& aTarget,
116*b1cdbd2cSJim Jagielski 													const rtl::OUString& aData)
117*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
118*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski 		virtual void SAL_CALL setDocumentLocator(
121*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator > &xLocator)
122*b1cdbd2cSJim Jagielski 		throw(	::com::sun::star::xml::sax::SAXException,
123*b1cdbd2cSJim Jagielski 				::com::sun::star::uno::RuntimeException );
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski 	private:
126*b1cdbd2cSJim Jagielski 		::rtl::OUString getErrorLineString();
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski 		class StatusBarHashMap : public ::std::hash_map< ::rtl::OUString				,
129*b1cdbd2cSJim Jagielski 														 StatusBar_XML_Entry			,
130*b1cdbd2cSJim Jagielski 														 rtl::OUStringHash,
131*b1cdbd2cSJim Jagielski 														 ::std::equal_to< ::rtl::OUString >	>
132*b1cdbd2cSJim Jagielski 		{
133*b1cdbd2cSJim Jagielski 			public:
free()134*b1cdbd2cSJim Jagielski 				inline void free()
135*b1cdbd2cSJim Jagielski 				{
136*b1cdbd2cSJim Jagielski 					StatusBarHashMap().swap( *this );
137*b1cdbd2cSJim Jagielski 				}
138*b1cdbd2cSJim Jagielski 		};
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski 		sal_Bool																	        m_bStatusBarStartFound;
141*b1cdbd2cSJim Jagielski 		sal_Bool																	        m_bStatusBarEndFound;
142*b1cdbd2cSJim Jagielski 		sal_Bool																	        m_bStatusBarItemStartFound;
143*b1cdbd2cSJim Jagielski 		StatusBarHashMap															        m_aStatusBarMap;
144*b1cdbd2cSJim Jagielski         ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >    m_aStatusBarItems;
145*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator >	        m_xLocator;
146*b1cdbd2cSJim Jagielski };
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski class FWE_DLLPUBLIC OWriteStatusBarDocumentHandler : private ThreadHelpBase // Struct for right initalization of lock member! Must be first of baseclasses.
149*b1cdbd2cSJim Jagielski {
150*b1cdbd2cSJim Jagielski 	public:
151*b1cdbd2cSJim Jagielski 		OWriteStatusBarDocumentHandler(
152*b1cdbd2cSJim Jagielski             const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >& rStatusBarItems,
153*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler >& rWriteDocHandler );
154*b1cdbd2cSJim Jagielski 		virtual ~OWriteStatusBarDocumentHandler();
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski 		void WriteStatusBarDocument() throw
157*b1cdbd2cSJim Jagielski 			( ::com::sun::star::xml::sax::SAXException,
158*b1cdbd2cSJim Jagielski 			  ::com::sun::star::uno::RuntimeException );
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski 	protected:
161*b1cdbd2cSJim Jagielski         virtual void WriteStatusBarItem(
162*b1cdbd2cSJim Jagielski             const rtl::OUString& rCommandURL,
163*b1cdbd2cSJim Jagielski             const rtl::OUString& rHelpURL,
164*b1cdbd2cSJim Jagielski             sal_Int16            nOffset,
165*b1cdbd2cSJim Jagielski             sal_Int16            nStyle,
166*b1cdbd2cSJim Jagielski             sal_Int16            nWidth ) throw
167*b1cdbd2cSJim Jagielski 			( ::com::sun::star::xml::sax::SAXException,
168*b1cdbd2cSJim Jagielski 			  ::com::sun::star::uno::RuntimeException );
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski         ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >       m_aStatusBarItems;
171*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler >	m_xWriteDocumentHandler;
172*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >		m_xEmptyList;
173*b1cdbd2cSJim Jagielski 		::rtl::OUString																		m_aXMLStatusBarNS;
174*b1cdbd2cSJim Jagielski 		::rtl::OUString																		m_aXMLXlinkNS;
175*b1cdbd2cSJim Jagielski 		::rtl::OUString																		m_aAttributeType;
176*b1cdbd2cSJim Jagielski 		::rtl::OUString																		m_aAttributeURL;
177*b1cdbd2cSJim Jagielski };
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski } // namespace framework
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski #endif
182