1*6d739b60SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*6d739b60SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*6d739b60SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*6d739b60SAndrew Rist * distributed with this work for additional information
6*6d739b60SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*6d739b60SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*6d739b60SAndrew Rist * "License"); you may not use this file except in compliance
9*6d739b60SAndrew Rist * with the License. You may obtain a copy of the License at
10*6d739b60SAndrew Rist *
11*6d739b60SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*6d739b60SAndrew Rist *
13*6d739b60SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*6d739b60SAndrew Rist * software distributed under the License is distributed on an
15*6d739b60SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*6d739b60SAndrew Rist * KIND, either express or implied. See the License for the
17*6d739b60SAndrew Rist * specific language governing permissions and limitations
18*6d739b60SAndrew Rist * under the License.
19*6d739b60SAndrew Rist *
20*6d739b60SAndrew Rist *************************************************************/
21*6d739b60SAndrew Rist
22*6d739b60SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_framework.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <stdio.h>
28cdf0e10cSrcweir
29cdf0e10cSrcweir //_________________________________________________________________________________________________________________
30cdf0e10cSrcweir // my own includes
31cdf0e10cSrcweir //_________________________________________________________________________________________________________________
32cdf0e10cSrcweir
33cdf0e10cSrcweir #include <threadhelp/resetableguard.hxx>
34cdf0e10cSrcweir #include <xml/toolboxdocumenthandler.hxx>
35cdf0e10cSrcweir #include <macros/debug.hxx>
36cdf0e10cSrcweir #include <xml/toolboxconfigurationdefines.hxx>
37cdf0e10cSrcweir
38cdf0e10cSrcweir //_________________________________________________________________________________________________________________
39cdf0e10cSrcweir // interface includes
40cdf0e10cSrcweir //_________________________________________________________________________________________________________________
41cdf0e10cSrcweir #include <com/sun/star/xml/sax/XExtendedDocumentHandler.hpp>
42cdf0e10cSrcweir #include <com/sun/star/ui/ItemType.hpp>
43cdf0e10cSrcweir #include <com/sun/star/ui/ItemStyle.hpp>
44cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
45cdf0e10cSrcweir
46cdf0e10cSrcweir //_________________________________________________________________________________________________________________
47cdf0e10cSrcweir // other includes
48cdf0e10cSrcweir //_________________________________________________________________________________________________________________
49cdf0e10cSrcweir
50cdf0e10cSrcweir #include <sal/config.h>
51cdf0e10cSrcweir #include <vcl/svapp.hxx>
52cdf0e10cSrcweir #include <vcl/toolbox.hxx>
53cdf0e10cSrcweir #include <rtl/ustrbuf.hxx>
54cdf0e10cSrcweir
55cdf0e10cSrcweir #include <comphelper/attributelist.hxx>
56cdf0e10cSrcweir
57cdf0e10cSrcweir //_________________________________________________________________________________________________________________
58cdf0e10cSrcweir // namespace
59cdf0e10cSrcweir //_________________________________________________________________________________________________________________
60cdf0e10cSrcweir
61cdf0e10cSrcweir using namespace ::com::sun::star::uno;
62cdf0e10cSrcweir using namespace ::com::sun::star::beans;
63cdf0e10cSrcweir using namespace ::com::sun::star::container;
64cdf0e10cSrcweir using namespace ::com::sun::star::xml::sax;
65cdf0e10cSrcweir
66cdf0e10cSrcweir
67cdf0e10cSrcweir #define TOOLBAR_DOCTYPE "<!DOCTYPE toolbar:toolbar PUBLIC \"-//OpenOffice.org//DTD OfficeDocument 1.0//EN\" \"toolbar.dtd\">"
68cdf0e10cSrcweir
69cdf0e10cSrcweir namespace framework
70cdf0e10cSrcweir {
71cdf0e10cSrcweir
72cdf0e10cSrcweir // Property names of a menu/menu item ItemDescriptor
73cdf0e10cSrcweir static const char ITEM_DESCRIPTOR_COMMANDURL[] = "CommandURL";
74cdf0e10cSrcweir static const char ITEM_DESCRIPTOR_HELPURL[] = "HelpURL";
75cdf0e10cSrcweir static const char ITEM_DESCRIPTOR_TOOLTIP[] = "Tooltip";
76cdf0e10cSrcweir static const char ITEM_DESCRIPTOR_LABEL[] = "Label";
77cdf0e10cSrcweir static const char ITEM_DESCRIPTOR_TYPE[] = "Type";
78cdf0e10cSrcweir static const char ITEM_DESCRIPTOR_STYLE[] = "Style";
79cdf0e10cSrcweir static const char ITEM_DESCRIPTOR_VISIBLE[] = "IsVisible";
80cdf0e10cSrcweir static const char ITEM_DESCRIPTOR_WIDTH[] = "Width";
81cdf0e10cSrcweir
ExtractToolbarParameters(const Sequence<PropertyValue> rProp,::rtl::OUString & rCommandURL,::rtl::OUString & rLabel,::rtl::OUString & rHelpURL,::rtl::OUString & rTooltip,sal_Int16 & rStyle,sal_Int16 & rWidth,sal_Bool & rVisible,sal_Int16 & rType)82cdf0e10cSrcweir static void ExtractToolbarParameters( const Sequence< PropertyValue > rProp,
83cdf0e10cSrcweir ::rtl::OUString& rCommandURL,
84cdf0e10cSrcweir ::rtl::OUString& rLabel,
85cdf0e10cSrcweir ::rtl::OUString& rHelpURL,
86cdf0e10cSrcweir ::rtl::OUString& rTooltip,
87cdf0e10cSrcweir sal_Int16& rStyle,
88cdf0e10cSrcweir sal_Int16& rWidth,
89cdf0e10cSrcweir sal_Bool& rVisible,
90cdf0e10cSrcweir sal_Int16& rType )
91cdf0e10cSrcweir {
92cdf0e10cSrcweir for ( sal_Int32 i = 0; i < rProp.getLength(); i++ )
93cdf0e10cSrcweir {
94cdf0e10cSrcweir if ( rProp[i].Name.equalsAscii( ITEM_DESCRIPTOR_COMMANDURL ))
95cdf0e10cSrcweir {
96cdf0e10cSrcweir rProp[i].Value >>= rCommandURL;
97cdf0e10cSrcweir rCommandURL = rCommandURL.intern();
98cdf0e10cSrcweir }
99cdf0e10cSrcweir else if ( rProp[i].Name.equalsAscii( ITEM_DESCRIPTOR_HELPURL ))
100cdf0e10cSrcweir rProp[i].Value >>= rHelpURL;
101cdf0e10cSrcweir else if ( rProp[i].Name.equalsAscii( ITEM_DESCRIPTOR_TOOLTIP ))
102cdf0e10cSrcweir rProp[i].Value >>= rTooltip;
103cdf0e10cSrcweir else if ( rProp[i].Name.equalsAscii( ITEM_DESCRIPTOR_LABEL ))
104cdf0e10cSrcweir rProp[i].Value >>= rLabel;
105cdf0e10cSrcweir else if ( rProp[i].Name.equalsAscii( ITEM_DESCRIPTOR_TYPE ))
106cdf0e10cSrcweir rProp[i].Value >>= rType;
107cdf0e10cSrcweir else if ( rProp[i].Name.equalsAscii( ITEM_DESCRIPTOR_VISIBLE ))
108cdf0e10cSrcweir rProp[i].Value >>= rVisible;
109cdf0e10cSrcweir else if ( rProp[i].Name.equalsAscii( ITEM_DESCRIPTOR_WIDTH ))
110cdf0e10cSrcweir rProp[i].Value >>= rWidth;
111cdf0e10cSrcweir else if ( rProp[i].Name.equalsAscii( ITEM_DESCRIPTOR_STYLE ))
112cdf0e10cSrcweir rProp[i].Value >>= rStyle;
113cdf0e10cSrcweir }
114cdf0e10cSrcweir }
115cdf0e10cSrcweir
116cdf0e10cSrcweir struct ToolboxStyleItem
117cdf0e10cSrcweir {
118cdf0e10cSrcweir sal_Int16 nBit;
119cdf0e10cSrcweir const char* attrName;
120cdf0e10cSrcweir };
121cdf0e10cSrcweir
122cdf0e10cSrcweir ToolboxStyleItem Styles[ ] = {
123cdf0e10cSrcweir { ::com::sun::star::ui::ItemStyle::RADIO_CHECK, ATTRIBUTE_ITEMSTYLE_RADIO },
124cdf0e10cSrcweir { ::com::sun::star::ui::ItemStyle::ALIGN_LEFT, ATTRIBUTE_ITEMSTYLE_LEFT },
125cdf0e10cSrcweir { ::com::sun::star::ui::ItemStyle::AUTO_SIZE, ATTRIBUTE_ITEMSTYLE_AUTO },
126cdf0e10cSrcweir { ::com::sun::star::ui::ItemStyle::REPEAT, ATTRIBUTE_ITEMSTYLE_REPEAT },
127cdf0e10cSrcweir { ::com::sun::star::ui::ItemStyle::DROPDOWN_ONLY, ATTRIBUTE_ITEMSTYLE_DROPDOWNONLY },
128cdf0e10cSrcweir { ::com::sun::star::ui::ItemStyle::DROP_DOWN, ATTRIBUTE_ITEMSTYLE_DROPDOWN },
129cdf0e10cSrcweir { ::com::sun::star::ui::ItemStyle::ICON, ATTRIBUTE_ITEMSTYLE_IMAGE },
130cdf0e10cSrcweir { ::com::sun::star::ui::ItemStyle::TEXT, ATTRIBUTE_ITEMSTYLE_TEXT },
131cdf0e10cSrcweir };
132cdf0e10cSrcweir
133cdf0e10cSrcweir sal_Int32 nStyleItemEntries = sizeof( Styles ) / sizeof( Styles[ 0 ] );
134cdf0e10cSrcweir
135cdf0e10cSrcweir struct ToolBarEntryProperty
136cdf0e10cSrcweir {
137cdf0e10cSrcweir OReadToolBoxDocumentHandler::ToolBox_XML_Namespace nNamespace;
138cdf0e10cSrcweir char aEntryName[20];
139cdf0e10cSrcweir };
140cdf0e10cSrcweir
141cdf0e10cSrcweir ToolBarEntryProperty ToolBoxEntries[OReadToolBoxDocumentHandler::TB_XML_ENTRY_COUNT] =
142cdf0e10cSrcweir {
143cdf0e10cSrcweir { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ELEMENT_TOOLBAR },
144cdf0e10cSrcweir { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ELEMENT_TOOLBARITEM },
145cdf0e10cSrcweir { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ELEMENT_TOOLBARSPACE },
146cdf0e10cSrcweir { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ELEMENT_TOOLBARBREAK },
147cdf0e10cSrcweir { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ELEMENT_TOOLBARSEPARATOR },
148cdf0e10cSrcweir { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ATTRIBUTE_TEXT },
149cdf0e10cSrcweir { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ATTRIBUTE_BITMAP },
150cdf0e10cSrcweir { OReadToolBoxDocumentHandler::TB_NS_XLINK, ATTRIBUTE_URL },
151cdf0e10cSrcweir { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ATTRIBUTE_ITEMBITS },
152cdf0e10cSrcweir { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ATTRIBUTE_VISIBLE },
153cdf0e10cSrcweir { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ATTRIBUTE_WIDTH },
154cdf0e10cSrcweir { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ATTRIBUTE_USER },
155cdf0e10cSrcweir { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ATTRIBUTE_HELPID },
156cdf0e10cSrcweir { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ATTRIBUTE_ITEMSTYLE },
157cdf0e10cSrcweir { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ATTRIBUTE_UINAME },
158cdf0e10cSrcweir { OReadToolBoxDocumentHandler::TB_NS_TOOLBAR, ATTRIBUTE_TOOLTIP },
159cdf0e10cSrcweir };
160cdf0e10cSrcweir
OReadToolBoxDocumentHandler(const Reference<XIndexContainer> & rItemContainer)161cdf0e10cSrcweir OReadToolBoxDocumentHandler::OReadToolBoxDocumentHandler( const Reference< XIndexContainer >& rItemContainer ) :
162cdf0e10cSrcweir ThreadHelpBase( &Application::GetSolarMutex() ),
163cdf0e10cSrcweir m_rItemContainer( rItemContainer ),
164cdf0e10cSrcweir m_aType( RTL_CONSTASCII_USTRINGPARAM( ITEM_DESCRIPTOR_TYPE )),
165cdf0e10cSrcweir m_aLabel( RTL_CONSTASCII_USTRINGPARAM( ITEM_DESCRIPTOR_LABEL )),
166cdf0e10cSrcweir m_aStyle( RTL_CONSTASCII_USTRINGPARAM( ITEM_DESCRIPTOR_STYLE )),
167cdf0e10cSrcweir m_aHelpURL( RTL_CONSTASCII_USTRINGPARAM( ITEM_DESCRIPTOR_HELPURL )),
168cdf0e10cSrcweir m_aTooltip( RTL_CONSTASCII_USTRINGPARAM( ITEM_DESCRIPTOR_TOOLTIP )),
169cdf0e10cSrcweir m_aIsVisible( RTL_CONSTASCII_USTRINGPARAM( ITEM_DESCRIPTOR_VISIBLE )),
170cdf0e10cSrcweir m_aCommandURL( RTL_CONSTASCII_USTRINGPARAM( ITEM_DESCRIPTOR_COMMANDURL ))
171cdf0e10cSrcweir {
172cdf0e10cSrcweir ::rtl::OUString aNamespaceToolBar( RTL_CONSTASCII_USTRINGPARAM( XMLNS_TOOLBAR ));
173cdf0e10cSrcweir ::rtl::OUString aNamespaceXLink( RTL_CONSTASCII_USTRINGPARAM( XMLNS_XLINK ));
174cdf0e10cSrcweir ::rtl::OUString aSeparator( RTL_CONSTASCII_USTRINGPARAM( XMLNS_FILTER_SEPARATOR ));
175cdf0e10cSrcweir
176cdf0e10cSrcweir // create hash map
177cdf0e10cSrcweir for ( int i = 0; i < (int)TB_XML_ENTRY_COUNT; i++ )
178cdf0e10cSrcweir {
179cdf0e10cSrcweir if ( ToolBoxEntries[i].nNamespace == TB_NS_TOOLBAR )
180cdf0e10cSrcweir {
181cdf0e10cSrcweir ::rtl::OUString temp( aNamespaceToolBar );
182cdf0e10cSrcweir temp += aSeparator;
183cdf0e10cSrcweir temp += ::rtl::OUString::createFromAscii( ToolBoxEntries[i].aEntryName );
184cdf0e10cSrcweir m_aToolBoxMap.insert( ToolBoxHashMap::value_type( temp, (ToolBox_XML_Entry)i ) );
185cdf0e10cSrcweir }
186cdf0e10cSrcweir else
187cdf0e10cSrcweir {
188cdf0e10cSrcweir ::rtl::OUString temp( aNamespaceXLink );
189cdf0e10cSrcweir temp += aSeparator;
190cdf0e10cSrcweir temp += ::rtl::OUString::createFromAscii( ToolBoxEntries[i].aEntryName );
191cdf0e10cSrcweir m_aToolBoxMap.insert( ToolBoxHashMap::value_type( temp, (ToolBox_XML_Entry)i ) );
192cdf0e10cSrcweir }
193cdf0e10cSrcweir }
194cdf0e10cSrcweir
195cdf0e10cSrcweir // pre-calculate a hash code for all style strings to speed up xml read process
196cdf0e10cSrcweir m_nHashCode_Style_Radio = ::rtl::OUString::createFromAscii( ATTRIBUTE_ITEMSTYLE_RADIO ).hashCode();
197cdf0e10cSrcweir m_nHashCode_Style_Auto = ::rtl::OUString::createFromAscii( ATTRIBUTE_ITEMSTYLE_AUTO ).hashCode();
198cdf0e10cSrcweir m_nHashCode_Style_Left = ::rtl::OUString::createFromAscii( ATTRIBUTE_ITEMSTYLE_LEFT ).hashCode();
199cdf0e10cSrcweir m_nHashCode_Style_AutoSize = ::rtl::OUString::createFromAscii( ATTRIBUTE_ITEMSTYLE_AUTOSIZE ).hashCode();
200cdf0e10cSrcweir m_nHashCode_Style_DropDown = ::rtl::OUString::createFromAscii( ATTRIBUTE_ITEMSTYLE_DROPDOWN ).hashCode();
201cdf0e10cSrcweir m_nHashCode_Style_Repeat = ::rtl::OUString::createFromAscii( ATTRIBUTE_ITEMSTYLE_REPEAT ).hashCode();
202cdf0e10cSrcweir m_nHashCode_Style_DropDownOnly = ::rtl::OUString::createFromAscii( ATTRIBUTE_ITEMSTYLE_DROPDOWNONLY ).hashCode();
203cdf0e10cSrcweir m_nHashCode_Style_Text = ::rtl::OUString::createFromAscii( ATTRIBUTE_ITEMSTYLE_TEXT ).hashCode();
204cdf0e10cSrcweir m_nHashCode_Style_Image = ::rtl::OUString::createFromAscii( ATTRIBUTE_ITEMSTYLE_IMAGE ).hashCode();
205cdf0e10cSrcweir
206cdf0e10cSrcweir m_bToolBarStartFound = sal_False;
207cdf0e10cSrcweir m_bToolBarEndFound = sal_False;
208cdf0e10cSrcweir m_bToolBarItemStartFound = sal_False;
209cdf0e10cSrcweir m_bToolBarSpaceStartFound = sal_False;
210cdf0e10cSrcweir m_bToolBarBreakStartFound = sal_False;
211cdf0e10cSrcweir m_bToolBarSeparatorStartFound = sal_False;
212cdf0e10cSrcweir }
213cdf0e10cSrcweir
~OReadToolBoxDocumentHandler()214cdf0e10cSrcweir OReadToolBoxDocumentHandler::~OReadToolBoxDocumentHandler()
215cdf0e10cSrcweir {
216cdf0e10cSrcweir }
217cdf0e10cSrcweir
218cdf0e10cSrcweir // XDocumentHandler
startDocument(void)219cdf0e10cSrcweir void SAL_CALL OReadToolBoxDocumentHandler::startDocument(void)
220cdf0e10cSrcweir throw ( SAXException, RuntimeException )
221cdf0e10cSrcweir {
222cdf0e10cSrcweir }
223cdf0e10cSrcweir
endDocument(void)224cdf0e10cSrcweir void SAL_CALL OReadToolBoxDocumentHandler::endDocument(void)
225cdf0e10cSrcweir throw( SAXException, RuntimeException )
226cdf0e10cSrcweir {
227cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
228cdf0e10cSrcweir
229cdf0e10cSrcweir if (( m_bToolBarStartFound && !m_bToolBarEndFound ) ||
230cdf0e10cSrcweir ( !m_bToolBarStartFound && m_bToolBarEndFound ) )
231cdf0e10cSrcweir {
232cdf0e10cSrcweir ::rtl::OUString aErrorMessage = getErrorLineString();
233cdf0e10cSrcweir aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "No matching start or end element 'toolbar' found!" ));
234cdf0e10cSrcweir throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
235cdf0e10cSrcweir }
236cdf0e10cSrcweir }
237cdf0e10cSrcweir
startElement(const::rtl::OUString & aName,const Reference<XAttributeList> & xAttribs)238cdf0e10cSrcweir void SAL_CALL OReadToolBoxDocumentHandler::startElement(
239cdf0e10cSrcweir const ::rtl::OUString& aName, const Reference< XAttributeList > &xAttribs )
240cdf0e10cSrcweir throw( SAXException, RuntimeException )
241cdf0e10cSrcweir {
242cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
243cdf0e10cSrcweir
244cdf0e10cSrcweir ToolBoxHashMap::const_iterator pToolBoxEntry = m_aToolBoxMap.find( aName ) ;
245cdf0e10cSrcweir if ( pToolBoxEntry != m_aToolBoxMap.end() )
246cdf0e10cSrcweir {
247cdf0e10cSrcweir switch ( pToolBoxEntry->second )
248cdf0e10cSrcweir {
249cdf0e10cSrcweir case TB_ELEMENT_TOOLBAR:
250cdf0e10cSrcweir {
251cdf0e10cSrcweir if ( m_bToolBarStartFound )
252cdf0e10cSrcweir {
253cdf0e10cSrcweir ::rtl::OUString aErrorMessage = getErrorLineString();
254cdf0e10cSrcweir aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Element 'toolbar:toolbar' cannot be embeded into 'toolbar:toolbar'!" ));
255cdf0e10cSrcweir throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
256cdf0e10cSrcweir }
257cdf0e10cSrcweir else
258cdf0e10cSrcweir {
259cdf0e10cSrcweir // Check if we have a UI name set in our XML file
260cdf0e10cSrcweir ::rtl::OUString aUIName;
261cdf0e10cSrcweir for ( sal_Int16 n = 0; n < xAttribs->getLength(); n++ )
262cdf0e10cSrcweir {
263cdf0e10cSrcweir pToolBoxEntry = m_aToolBoxMap.find( xAttribs->getNameByIndex( n ) );
264cdf0e10cSrcweir if ( pToolBoxEntry != m_aToolBoxMap.end() )
265cdf0e10cSrcweir {
266cdf0e10cSrcweir switch ( pToolBoxEntry->second )
267cdf0e10cSrcweir {
268cdf0e10cSrcweir case TB_ATTRIBUTE_UINAME:
269cdf0e10cSrcweir aUIName = xAttribs->getValueByIndex( n );
270cdf0e10cSrcweir break;
271cdf0e10cSrcweir default:
272cdf0e10cSrcweir break;
273cdf0e10cSrcweir }
274cdf0e10cSrcweir }
275cdf0e10cSrcweir }
276cdf0e10cSrcweir
277cdf0e10cSrcweir if ( aUIName.getLength() > 0 )
278cdf0e10cSrcweir {
279cdf0e10cSrcweir // Try to set UI name as a container property
280cdf0e10cSrcweir Reference< XPropertySet > xPropSet( m_rItemContainer, UNO_QUERY );
281cdf0e10cSrcweir if ( xPropSet.is() )
282cdf0e10cSrcweir {
283cdf0e10cSrcweir try
284cdf0e10cSrcweir {
285cdf0e10cSrcweir xPropSet->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "UIName" )), makeAny( aUIName ) );
286cdf0e10cSrcweir }
287cdf0e10cSrcweir catch ( UnknownPropertyException& )
288cdf0e10cSrcweir {
289cdf0e10cSrcweir }
290cdf0e10cSrcweir }
291cdf0e10cSrcweir }
292cdf0e10cSrcweir }
293cdf0e10cSrcweir
294cdf0e10cSrcweir m_bToolBarStartFound = sal_True;
295cdf0e10cSrcweir }
296cdf0e10cSrcweir break;
297cdf0e10cSrcweir
298cdf0e10cSrcweir case TB_ELEMENT_TOOLBARITEM:
299cdf0e10cSrcweir {
300cdf0e10cSrcweir if ( !m_bToolBarStartFound )
301cdf0e10cSrcweir {
302cdf0e10cSrcweir ::rtl::OUString aErrorMessage = getErrorLineString();
303cdf0e10cSrcweir aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Element 'toolbar:toolbaritem' must be embeded into element 'toolbar:toolbar'!" ));
304cdf0e10cSrcweir throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
305cdf0e10cSrcweir }
306cdf0e10cSrcweir
307cdf0e10cSrcweir if ( m_bToolBarSeparatorStartFound ||
308cdf0e10cSrcweir m_bToolBarBreakStartFound ||
309cdf0e10cSrcweir m_bToolBarSpaceStartFound ||
310cdf0e10cSrcweir m_bToolBarItemStartFound )
311cdf0e10cSrcweir {
312cdf0e10cSrcweir ::rtl::OUString aErrorMessage = getErrorLineString();
313cdf0e10cSrcweir aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Element toolbar:toolbaritem is not a container!" ));
314cdf0e10cSrcweir throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
315cdf0e10cSrcweir }
316cdf0e10cSrcweir
317cdf0e10cSrcweir ::rtl::OUString aAttribute;
318cdf0e10cSrcweir sal_Bool bAttributeURL = sal_False;
319cdf0e10cSrcweir
320cdf0e10cSrcweir m_bToolBarItemStartFound = sal_True;
321cdf0e10cSrcweir ::rtl::OUString aLabel;
322cdf0e10cSrcweir ::rtl::OUString aCommandURL;
323cdf0e10cSrcweir ::rtl::OUString aHelpURL;
324cdf0e10cSrcweir ::rtl::OUString aTooltip;
325cdf0e10cSrcweir ::rtl::OUString aBitmapName;
326cdf0e10cSrcweir sal_uInt16 nItemBits( 0 );
327cdf0e10cSrcweir sal_uInt16 nWidth( 0 );
328cdf0e10cSrcweir sal_uInt16 nUserDef( 0 );
329cdf0e10cSrcweir sal_Bool bVisible( sal_True );
330cdf0e10cSrcweir
331cdf0e10cSrcweir for ( sal_Int16 n = 0; n < xAttribs->getLength(); n++ )
332cdf0e10cSrcweir {
333cdf0e10cSrcweir pToolBoxEntry = m_aToolBoxMap.find( xAttribs->getNameByIndex( n ) );
334cdf0e10cSrcweir if ( pToolBoxEntry != m_aToolBoxMap.end() )
335cdf0e10cSrcweir {
336cdf0e10cSrcweir switch ( pToolBoxEntry->second )
337cdf0e10cSrcweir {
338cdf0e10cSrcweir case TB_ATTRIBUTE_TEXT:
339cdf0e10cSrcweir {
340cdf0e10cSrcweir aLabel = xAttribs->getValueByIndex( n );
341cdf0e10cSrcweir }
342cdf0e10cSrcweir break;
343cdf0e10cSrcweir
344cdf0e10cSrcweir case TB_ATTRIBUTE_BITMAP:
345cdf0e10cSrcweir {
346cdf0e10cSrcweir aBitmapName = xAttribs->getValueByIndex( n );
347cdf0e10cSrcweir }
348cdf0e10cSrcweir break;
349cdf0e10cSrcweir
350cdf0e10cSrcweir case TB_ATTRIBUTE_URL:
351cdf0e10cSrcweir {
352cdf0e10cSrcweir bAttributeURL = sal_True;
353cdf0e10cSrcweir aCommandURL = xAttribs->getValueByIndex( n ).intern();
354cdf0e10cSrcweir }
355cdf0e10cSrcweir break;
356cdf0e10cSrcweir
357cdf0e10cSrcweir case TB_ATTRIBUTE_ITEMBITS:
358cdf0e10cSrcweir {
359cdf0e10cSrcweir nItemBits = (sal_uInt16)(xAttribs->getValueByIndex( n ).toInt32());
360cdf0e10cSrcweir }
361cdf0e10cSrcweir break;
362cdf0e10cSrcweir
363cdf0e10cSrcweir case TB_ATTRIBUTE_VISIBLE:
364cdf0e10cSrcweir {
365cdf0e10cSrcweir if ( xAttribs->getValueByIndex( n ).equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( ATTRIBUTE_BOOLEAN_TRUE )) )
366cdf0e10cSrcweir bVisible = sal_True;
367cdf0e10cSrcweir else if ( xAttribs->getValueByIndex( n ).equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( ATTRIBUTE_BOOLEAN_FALSE )) )
368cdf0e10cSrcweir bVisible = sal_False;
369cdf0e10cSrcweir else
370cdf0e10cSrcweir {
371cdf0e10cSrcweir ::rtl::OUString aErrorMessage = getErrorLineString();
372cdf0e10cSrcweir aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Attribute toolbar:visible must have value 'true' or 'false'!" ));
373cdf0e10cSrcweir throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
374cdf0e10cSrcweir }
375cdf0e10cSrcweir }
376cdf0e10cSrcweir break;
377cdf0e10cSrcweir
378cdf0e10cSrcweir case TB_ATTRIBUTE_WIDTH:
379cdf0e10cSrcweir {
380cdf0e10cSrcweir nWidth = (sal_uInt16)(xAttribs->getValueByIndex( n ).toInt32());
381cdf0e10cSrcweir }
382cdf0e10cSrcweir break;
383cdf0e10cSrcweir
384cdf0e10cSrcweir case TB_ATTRIBUTE_USER:
385cdf0e10cSrcweir {
386cdf0e10cSrcweir nUserDef = (sal_uInt16)(xAttribs->getValueByIndex( n ).toInt32());
387cdf0e10cSrcweir }
388cdf0e10cSrcweir break;
389cdf0e10cSrcweir
390cdf0e10cSrcweir case TB_ATTRIBUTE_HELPID:
391cdf0e10cSrcweir {
392cdf0e10cSrcweir aHelpURL = xAttribs->getValueByIndex( n );
393cdf0e10cSrcweir }
394cdf0e10cSrcweir break;
395cdf0e10cSrcweir
396cdf0e10cSrcweir case TB_ATTRIBUTE_TOOLTIP:
397cdf0e10cSrcweir {
398cdf0e10cSrcweir aTooltip = xAttribs->getValueByIndex( n );
399cdf0e10cSrcweir }
400cdf0e10cSrcweir break;
401cdf0e10cSrcweir
402cdf0e10cSrcweir case TB_ATTRIBUTE_STYLE:
403cdf0e10cSrcweir {
404cdf0e10cSrcweir // read space seperated item style list
405cdf0e10cSrcweir ::rtl::OUString aTemp = xAttribs->getValueByIndex( n );
406cdf0e10cSrcweir sal_Int32 nIndex = 0;
407cdf0e10cSrcweir
408cdf0e10cSrcweir do
409cdf0e10cSrcweir {
410cdf0e10cSrcweir ::rtl::OUString aToken = aTemp.getToken( 0, ' ', nIndex );
411cdf0e10cSrcweir if ( aToken.getLength() > 0 )
412cdf0e10cSrcweir {
413cdf0e10cSrcweir sal_Int32 nHashCode = aToken.hashCode();
414cdf0e10cSrcweir if ( nHashCode == m_nHashCode_Style_Radio )
415cdf0e10cSrcweir nItemBits |= ::com::sun::star::ui::ItemStyle::RADIO_CHECK;
416cdf0e10cSrcweir else if ( nHashCode == m_nHashCode_Style_Left )
417cdf0e10cSrcweir nItemBits |= ::com::sun::star::ui::ItemStyle::ALIGN_LEFT;
418cdf0e10cSrcweir else if ( nHashCode == m_nHashCode_Style_AutoSize )
419cdf0e10cSrcweir nItemBits |= ::com::sun::star::ui::ItemStyle::AUTO_SIZE;
420cdf0e10cSrcweir else if ( nHashCode == m_nHashCode_Style_DropDown )
421cdf0e10cSrcweir nItemBits |= ::com::sun::star::ui::ItemStyle::DROP_DOWN;
422cdf0e10cSrcweir else if ( nHashCode == m_nHashCode_Style_Repeat )
423cdf0e10cSrcweir nItemBits |= ::com::sun::star::ui::ItemStyle::REPEAT;
424cdf0e10cSrcweir else if ( nHashCode == m_nHashCode_Style_DropDownOnly )
425cdf0e10cSrcweir nItemBits |= ::com::sun::star::ui::ItemStyle::DROPDOWN_ONLY;
426cdf0e10cSrcweir else if ( nHashCode == m_nHashCode_Style_DropDown )
427cdf0e10cSrcweir nItemBits |= ::com::sun::star::ui::ItemStyle::DROP_DOWN;
428cdf0e10cSrcweir else if ( nHashCode == m_nHashCode_Style_Text )
429cdf0e10cSrcweir nItemBits |= ::com::sun::star::ui::ItemStyle::TEXT;
430cdf0e10cSrcweir else if ( nHashCode == m_nHashCode_Style_Image )
431cdf0e10cSrcweir nItemBits |= ::com::sun::star::ui::ItemStyle::ICON;
432cdf0e10cSrcweir }
433cdf0e10cSrcweir }
434cdf0e10cSrcweir while ( nIndex >= 0 );
435cdf0e10cSrcweir }
436cdf0e10cSrcweir break;
437cdf0e10cSrcweir
438cdf0e10cSrcweir default:
439cdf0e10cSrcweir break;
440cdf0e10cSrcweir }
441cdf0e10cSrcweir }
442cdf0e10cSrcweir } // for
443cdf0e10cSrcweir
444cdf0e10cSrcweir if ( !bAttributeURL )
445cdf0e10cSrcweir {
446cdf0e10cSrcweir ::rtl::OUString aErrorMessage = getErrorLineString();
447cdf0e10cSrcweir aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Required attribute toolbar:url must have a value!" ));
448cdf0e10cSrcweir throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
449cdf0e10cSrcweir }
450cdf0e10cSrcweir
451cdf0e10cSrcweir if ( aCommandURL.getLength() > 0 )
452cdf0e10cSrcweir {
453cdf0e10cSrcweir Sequence< PropertyValue > aToolbarItemProp( 7 );
454cdf0e10cSrcweir aToolbarItemProp[0].Name = m_aCommandURL;
455cdf0e10cSrcweir aToolbarItemProp[1].Name = m_aHelpURL;
456cdf0e10cSrcweir aToolbarItemProp[2].Name = m_aLabel;
457cdf0e10cSrcweir aToolbarItemProp[3].Name = m_aType;
458cdf0e10cSrcweir aToolbarItemProp[4].Name = m_aStyle;
459cdf0e10cSrcweir aToolbarItemProp[5].Name = m_aIsVisible;
460cdf0e10cSrcweir aToolbarItemProp[6].Name = m_aTooltip;
461cdf0e10cSrcweir
462cdf0e10cSrcweir aToolbarItemProp[0].Value <<= aCommandURL;
463cdf0e10cSrcweir aToolbarItemProp[1].Value <<= aHelpURL;
464cdf0e10cSrcweir aToolbarItemProp[2].Value <<= aLabel;
465cdf0e10cSrcweir aToolbarItemProp[3].Value = makeAny( ::com::sun::star::ui::ItemType::DEFAULT );
466cdf0e10cSrcweir aToolbarItemProp[4].Value <<= nItemBits;
467cdf0e10cSrcweir aToolbarItemProp[5].Value <<= bVisible;
468cdf0e10cSrcweir aToolbarItemProp[6].Value <<= aTooltip;
469cdf0e10cSrcweir
470cdf0e10cSrcweir m_rItemContainer->insertByIndex( m_rItemContainer->getCount(), makeAny( aToolbarItemProp ) );
471cdf0e10cSrcweir }
472cdf0e10cSrcweir }
473cdf0e10cSrcweir break;
474cdf0e10cSrcweir
475cdf0e10cSrcweir case TB_ELEMENT_TOOLBARSPACE:
476cdf0e10cSrcweir {
477cdf0e10cSrcweir if ( m_bToolBarSeparatorStartFound ||
478cdf0e10cSrcweir m_bToolBarBreakStartFound ||
479cdf0e10cSrcweir m_bToolBarSpaceStartFound ||
480cdf0e10cSrcweir m_bToolBarItemStartFound )
481cdf0e10cSrcweir {
482cdf0e10cSrcweir ::rtl::OUString aErrorMessage = getErrorLineString();
483cdf0e10cSrcweir aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Element toolbar:toolbarspace is not a container!" ));
484cdf0e10cSrcweir throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
485cdf0e10cSrcweir }
486cdf0e10cSrcweir
487cdf0e10cSrcweir m_bToolBarSpaceStartFound = sal_True;
488cdf0e10cSrcweir
489cdf0e10cSrcweir Sequence< PropertyValue > aToolbarItemProp( 2 );
490cdf0e10cSrcweir aToolbarItemProp[0].Name = m_aCommandURL;
491cdf0e10cSrcweir aToolbarItemProp[1].Name = m_aType;
492cdf0e10cSrcweir
493cdf0e10cSrcweir aToolbarItemProp[0].Value <<= rtl::OUString();
494cdf0e10cSrcweir aToolbarItemProp[1].Value <<= ::com::sun::star::ui::ItemType::SEPARATOR_SPACE;
495cdf0e10cSrcweir
496cdf0e10cSrcweir m_rItemContainer->insertByIndex( m_rItemContainer->getCount(), makeAny( aToolbarItemProp ) );
497cdf0e10cSrcweir }
498cdf0e10cSrcweir break;
499cdf0e10cSrcweir
500cdf0e10cSrcweir case TB_ELEMENT_TOOLBARBREAK:
501cdf0e10cSrcweir {
502cdf0e10cSrcweir if ( m_bToolBarSeparatorStartFound ||
503cdf0e10cSrcweir m_bToolBarBreakStartFound ||
504cdf0e10cSrcweir m_bToolBarSpaceStartFound ||
505cdf0e10cSrcweir m_bToolBarItemStartFound )
506cdf0e10cSrcweir {
507cdf0e10cSrcweir ::rtl::OUString aErrorMessage = getErrorLineString();
508cdf0e10cSrcweir aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Element toolbar:toolbarbreak is not a container!" ));
509cdf0e10cSrcweir throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
510cdf0e10cSrcweir }
511cdf0e10cSrcweir
512cdf0e10cSrcweir m_bToolBarBreakStartFound = sal_True;
513cdf0e10cSrcweir
514cdf0e10cSrcweir Sequence< PropertyValue > aToolbarItemProp( 2 );
515cdf0e10cSrcweir aToolbarItemProp[0].Name = m_aCommandURL;
516cdf0e10cSrcweir aToolbarItemProp[1].Name = m_aType;
517cdf0e10cSrcweir
518cdf0e10cSrcweir aToolbarItemProp[0].Value <<= rtl::OUString();
519cdf0e10cSrcweir aToolbarItemProp[1].Value <<= ::com::sun::star::ui::ItemType::SEPARATOR_LINEBREAK;
520cdf0e10cSrcweir
521cdf0e10cSrcweir m_rItemContainer->insertByIndex( m_rItemContainer->getCount(), makeAny( aToolbarItemProp ) );
522cdf0e10cSrcweir }
523cdf0e10cSrcweir break;
524cdf0e10cSrcweir
525cdf0e10cSrcweir case TB_ELEMENT_TOOLBARSEPARATOR:
526cdf0e10cSrcweir {
527cdf0e10cSrcweir if ( m_bToolBarSeparatorStartFound ||
528cdf0e10cSrcweir m_bToolBarBreakStartFound ||
529cdf0e10cSrcweir m_bToolBarSpaceStartFound ||
530cdf0e10cSrcweir m_bToolBarItemStartFound )
531cdf0e10cSrcweir {
532cdf0e10cSrcweir ::rtl::OUString aErrorMessage = getErrorLineString();
533cdf0e10cSrcweir aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Element toolbar:toolbarseparator is not a container!" ));
534cdf0e10cSrcweir throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
535cdf0e10cSrcweir }
536cdf0e10cSrcweir
537cdf0e10cSrcweir m_bToolBarSeparatorStartFound = sal_True;
538cdf0e10cSrcweir
539cdf0e10cSrcweir Sequence< PropertyValue > aToolbarItemProp( 2 );
540cdf0e10cSrcweir aToolbarItemProp[0].Name = m_aCommandURL;
541cdf0e10cSrcweir aToolbarItemProp[1].Name = m_aType;
542cdf0e10cSrcweir
543cdf0e10cSrcweir aToolbarItemProp[0].Value <<= rtl::OUString();
544cdf0e10cSrcweir aToolbarItemProp[1].Value <<= ::com::sun::star::ui::ItemType::SEPARATOR_LINE;
545cdf0e10cSrcweir
546cdf0e10cSrcweir m_rItemContainer->insertByIndex( m_rItemContainer->getCount(), makeAny( aToolbarItemProp ) );
547cdf0e10cSrcweir }
548cdf0e10cSrcweir break;
549cdf0e10cSrcweir
550cdf0e10cSrcweir default:
551cdf0e10cSrcweir break;
552cdf0e10cSrcweir }
553cdf0e10cSrcweir }
554cdf0e10cSrcweir }
555cdf0e10cSrcweir
endElement(const::rtl::OUString & aName)556cdf0e10cSrcweir void SAL_CALL OReadToolBoxDocumentHandler::endElement(const ::rtl::OUString& aName)
557cdf0e10cSrcweir throw( SAXException, RuntimeException )
558cdf0e10cSrcweir {
559cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
560cdf0e10cSrcweir
561cdf0e10cSrcweir ToolBoxHashMap::const_iterator pToolBoxEntry = m_aToolBoxMap.find( aName ) ;
562cdf0e10cSrcweir if ( pToolBoxEntry != m_aToolBoxMap.end() )
563cdf0e10cSrcweir {
564cdf0e10cSrcweir switch ( pToolBoxEntry->second )
565cdf0e10cSrcweir {
566cdf0e10cSrcweir case TB_ELEMENT_TOOLBAR:
567cdf0e10cSrcweir {
568cdf0e10cSrcweir if ( !m_bToolBarStartFound )
569cdf0e10cSrcweir {
570cdf0e10cSrcweir ::rtl::OUString aErrorMessage = getErrorLineString();
571cdf0e10cSrcweir aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "End element 'toolbar' found, but no start element 'toolbar'" ));
572cdf0e10cSrcweir throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
573cdf0e10cSrcweir }
574cdf0e10cSrcweir
575cdf0e10cSrcweir m_bToolBarStartFound = sal_False;
576cdf0e10cSrcweir }
577cdf0e10cSrcweir break;
578cdf0e10cSrcweir
579cdf0e10cSrcweir case TB_ELEMENT_TOOLBARITEM:
580cdf0e10cSrcweir {
581cdf0e10cSrcweir if ( !m_bToolBarItemStartFound )
582cdf0e10cSrcweir {
583cdf0e10cSrcweir ::rtl::OUString aErrorMessage = getErrorLineString();
584cdf0e10cSrcweir aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "End element 'toolbar:toolbaritem' found, but no start element 'toolbar:toolbaritem'" ));
585cdf0e10cSrcweir throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
586cdf0e10cSrcweir }
587cdf0e10cSrcweir
588cdf0e10cSrcweir m_bToolBarItemStartFound = sal_False;
589cdf0e10cSrcweir }
590cdf0e10cSrcweir break;
591cdf0e10cSrcweir
592cdf0e10cSrcweir case TB_ELEMENT_TOOLBARBREAK:
593cdf0e10cSrcweir {
594cdf0e10cSrcweir if ( !m_bToolBarBreakStartFound )
595cdf0e10cSrcweir {
596cdf0e10cSrcweir ::rtl::OUString aErrorMessage = getErrorLineString();
597cdf0e10cSrcweir aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "End element 'toolbar:toolbarbreak' found, but no start element 'toolbar:toolbarbreak'" ));
598cdf0e10cSrcweir throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
599cdf0e10cSrcweir }
600cdf0e10cSrcweir
601cdf0e10cSrcweir m_bToolBarBreakStartFound = sal_False;
602cdf0e10cSrcweir }
603cdf0e10cSrcweir break;
604cdf0e10cSrcweir
605cdf0e10cSrcweir case TB_ELEMENT_TOOLBARSPACE:
606cdf0e10cSrcweir {
607cdf0e10cSrcweir if ( !m_bToolBarSpaceStartFound )
608cdf0e10cSrcweir {
609cdf0e10cSrcweir ::rtl::OUString aErrorMessage = getErrorLineString();
610cdf0e10cSrcweir aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "End element 'toolbar:toolbarspace' found, but no start element 'toolbar:toolbarspace'" ));
611cdf0e10cSrcweir throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
612cdf0e10cSrcweir }
613cdf0e10cSrcweir
614cdf0e10cSrcweir m_bToolBarSpaceStartFound = sal_False;
615cdf0e10cSrcweir }
616cdf0e10cSrcweir break;
617cdf0e10cSrcweir
618cdf0e10cSrcweir case TB_ELEMENT_TOOLBARSEPARATOR:
619cdf0e10cSrcweir {
620cdf0e10cSrcweir if ( !m_bToolBarSeparatorStartFound )
621cdf0e10cSrcweir {
622cdf0e10cSrcweir ::rtl::OUString aErrorMessage = getErrorLineString();
623cdf0e10cSrcweir aErrorMessage += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "End element 'toolbar:toolbarseparator' found, but no start element 'toolbar:toolbarseparator'" ));
624cdf0e10cSrcweir throw SAXException( aErrorMessage, Reference< XInterface >(), Any() );
625cdf0e10cSrcweir }
626cdf0e10cSrcweir
627cdf0e10cSrcweir m_bToolBarSeparatorStartFound = sal_False;
628cdf0e10cSrcweir }
629cdf0e10cSrcweir break;
630cdf0e10cSrcweir
631cdf0e10cSrcweir default:
632cdf0e10cSrcweir break;
633cdf0e10cSrcweir }
634cdf0e10cSrcweir }
635cdf0e10cSrcweir }
636cdf0e10cSrcweir
characters(const::rtl::OUString &)637cdf0e10cSrcweir void SAL_CALL OReadToolBoxDocumentHandler::characters(const ::rtl::OUString&)
638cdf0e10cSrcweir throw( SAXException, RuntimeException )
639cdf0e10cSrcweir {
640cdf0e10cSrcweir }
641cdf0e10cSrcweir
ignorableWhitespace(const::rtl::OUString &)642cdf0e10cSrcweir void SAL_CALL OReadToolBoxDocumentHandler::ignorableWhitespace(const ::rtl::OUString&)
643cdf0e10cSrcweir throw( SAXException, RuntimeException )
644cdf0e10cSrcweir {
645cdf0e10cSrcweir }
646cdf0e10cSrcweir
processingInstruction(const::rtl::OUString &,const::rtl::OUString &)647cdf0e10cSrcweir void SAL_CALL OReadToolBoxDocumentHandler::processingInstruction(
648cdf0e10cSrcweir const ::rtl::OUString& /*aTarget*/, const ::rtl::OUString& /*aData*/ )
649cdf0e10cSrcweir throw( SAXException, RuntimeException )
650cdf0e10cSrcweir {
651cdf0e10cSrcweir }
652cdf0e10cSrcweir
setDocumentLocator(const Reference<XLocator> & xLocator)653cdf0e10cSrcweir void SAL_CALL OReadToolBoxDocumentHandler::setDocumentLocator(
654cdf0e10cSrcweir const Reference< XLocator > &xLocator)
655cdf0e10cSrcweir throw( SAXException, RuntimeException )
656cdf0e10cSrcweir {
657cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
658cdf0e10cSrcweir
659cdf0e10cSrcweir m_xLocator = xLocator;
660cdf0e10cSrcweir }
661cdf0e10cSrcweir
getErrorLineString()662cdf0e10cSrcweir ::rtl::OUString OReadToolBoxDocumentHandler::getErrorLineString()
663cdf0e10cSrcweir {
664cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
665cdf0e10cSrcweir
666cdf0e10cSrcweir char buffer[32];
667cdf0e10cSrcweir
668cdf0e10cSrcweir if ( m_xLocator.is() )
669cdf0e10cSrcweir {
670cdf0e10cSrcweir snprintf( buffer, sizeof(buffer), "Line: %ld - ", static_cast<long>( m_xLocator->getLineNumber() ));
671cdf0e10cSrcweir return ::rtl::OUString::createFromAscii( buffer );
672cdf0e10cSrcweir }
673cdf0e10cSrcweir else
674cdf0e10cSrcweir return ::rtl::OUString();
675cdf0e10cSrcweir }
676cdf0e10cSrcweir
677cdf0e10cSrcweir
678cdf0e10cSrcweir //_________________________________________________________________________________________________________________
679cdf0e10cSrcweir // OWriteToolBoxDocumentHandler
680cdf0e10cSrcweir //_________________________________________________________________________________________________________________
681cdf0e10cSrcweir
OWriteToolBoxDocumentHandler(const Reference<XIndexAccess> & rItemAccess,Reference<XDocumentHandler> & rWriteDocumentHandler)682cdf0e10cSrcweir OWriteToolBoxDocumentHandler::OWriteToolBoxDocumentHandler(
683cdf0e10cSrcweir const Reference< XIndexAccess >& rItemAccess,
684cdf0e10cSrcweir Reference< XDocumentHandler >& rWriteDocumentHandler ) :
685cdf0e10cSrcweir ThreadHelpBase( &Application::GetSolarMutex() ),
686cdf0e10cSrcweir m_xWriteDocumentHandler( rWriteDocumentHandler ),
687cdf0e10cSrcweir m_rItemAccess( rItemAccess )
688cdf0e10cSrcweir {
689cdf0e10cSrcweir ::comphelper::AttributeList* pList = new ::comphelper::AttributeList;
690cdf0e10cSrcweir m_xEmptyList = Reference< XAttributeList >( (XAttributeList *) pList, UNO_QUERY );
691cdf0e10cSrcweir m_aAttributeType = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_TYPE_CDATA ));
692cdf0e10cSrcweir m_aXMLXlinkNS = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( XMLNS_XLINK_PREFIX ));
693cdf0e10cSrcweir m_aXMLToolbarNS = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( XMLNS_TOOLBAR_PREFIX ));
694cdf0e10cSrcweir }
695cdf0e10cSrcweir
~OWriteToolBoxDocumentHandler()696cdf0e10cSrcweir OWriteToolBoxDocumentHandler::~OWriteToolBoxDocumentHandler()
697cdf0e10cSrcweir {
698cdf0e10cSrcweir }
699cdf0e10cSrcweir
WriteToolBoxDocument()700cdf0e10cSrcweir void OWriteToolBoxDocumentHandler::WriteToolBoxDocument() throw
701cdf0e10cSrcweir ( SAXException, RuntimeException )
702cdf0e10cSrcweir {
703cdf0e10cSrcweir ResetableGuard aGuard( m_aLock );
704cdf0e10cSrcweir
705cdf0e10cSrcweir m_xWriteDocumentHandler->startDocument();
706cdf0e10cSrcweir
707cdf0e10cSrcweir // write DOCTYPE line!
708cdf0e10cSrcweir Reference< XExtendedDocumentHandler > xExtendedDocHandler( m_xWriteDocumentHandler, UNO_QUERY );
709cdf0e10cSrcweir if ( xExtendedDocHandler.is() )
710cdf0e10cSrcweir {
711cdf0e10cSrcweir xExtendedDocHandler->unknown( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( TOOLBAR_DOCTYPE )) );
712cdf0e10cSrcweir m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
713cdf0e10cSrcweir }
714cdf0e10cSrcweir
715cdf0e10cSrcweir ::rtl::OUString aUIName;
716cdf0e10cSrcweir Reference< XPropertySet > xPropSet( m_rItemAccess, UNO_QUERY );
717cdf0e10cSrcweir if ( xPropSet.is() )
718cdf0e10cSrcweir {
719cdf0e10cSrcweir try
720cdf0e10cSrcweir {
721cdf0e10cSrcweir xPropSet->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "UIName" ))) >>= aUIName;
722cdf0e10cSrcweir }
723cdf0e10cSrcweir catch ( UnknownPropertyException& )
724cdf0e10cSrcweir {
725cdf0e10cSrcweir }
726cdf0e10cSrcweir }
727cdf0e10cSrcweir
728cdf0e10cSrcweir ::comphelper::AttributeList* pList = new ::comphelper::AttributeList;
729cdf0e10cSrcweir Reference< XAttributeList > xList( (XAttributeList *) pList , UNO_QUERY );
730cdf0e10cSrcweir
731cdf0e10cSrcweir pList->AddAttribute( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_XMLNS_TOOLBAR )),
732cdf0e10cSrcweir m_aAttributeType,
733cdf0e10cSrcweir ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( XMLNS_TOOLBAR )) );
734cdf0e10cSrcweir
735cdf0e10cSrcweir pList->AddAttribute( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_XMLNS_XLINK )),
736cdf0e10cSrcweir m_aAttributeType,
737cdf0e10cSrcweir ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( XMLNS_XLINK )) );
738cdf0e10cSrcweir
739cdf0e10cSrcweir if ( aUIName.getLength() > 0 )
740cdf0e10cSrcweir pList->AddAttribute( m_aXMLToolbarNS + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_UINAME )),
741cdf0e10cSrcweir m_aAttributeType,
742cdf0e10cSrcweir aUIName );
743cdf0e10cSrcweir
744cdf0e10cSrcweir m_xWriteDocumentHandler->startElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_TOOLBAR )), pList );
745cdf0e10cSrcweir m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
746cdf0e10cSrcweir
747cdf0e10cSrcweir sal_Int32 nItemCount = m_rItemAccess->getCount();
748cdf0e10cSrcweir Any aAny;
749cdf0e10cSrcweir
750cdf0e10cSrcweir for ( sal_Int32 nItemPos = 0; nItemPos < nItemCount; nItemPos++ )
751cdf0e10cSrcweir {
752cdf0e10cSrcweir Sequence< PropertyValue > aProps;
753cdf0e10cSrcweir aAny = m_rItemAccess->getByIndex( nItemPos );
754cdf0e10cSrcweir if ( aAny >>= aProps )
755cdf0e10cSrcweir {
756cdf0e10cSrcweir ::rtl::OUString aCommandURL;
757cdf0e10cSrcweir ::rtl::OUString aLabel;
758cdf0e10cSrcweir ::rtl::OUString aHelpURL;
759cdf0e10cSrcweir ::rtl::OUString aTooltip;
760cdf0e10cSrcweir sal_Bool bVisible( sal_True );
761cdf0e10cSrcweir sal_Int16 nType( ::com::sun::star::ui::ItemType::DEFAULT );
762cdf0e10cSrcweir sal_Int16 nWidth( 0 );
763cdf0e10cSrcweir sal_Int16 nStyle( 0 );
764cdf0e10cSrcweir
765cdf0e10cSrcweir ExtractToolbarParameters( aProps, aCommandURL, aLabel, aHelpURL, aTooltip, nStyle, nWidth, bVisible, nType );
766cdf0e10cSrcweir if ( nType == ::com::sun::star::ui::ItemType::DEFAULT )
767cdf0e10cSrcweir WriteToolBoxItem( aCommandURL, aLabel, aHelpURL, aTooltip, nStyle, nWidth, bVisible );
768cdf0e10cSrcweir else if ( nType == ::com::sun::star::ui::ItemType::SEPARATOR_SPACE )
769cdf0e10cSrcweir WriteToolBoxSpace();
770cdf0e10cSrcweir else if ( nType == ::com::sun::star::ui::ItemType::SEPARATOR_LINE )
771cdf0e10cSrcweir WriteToolBoxSeparator();
772cdf0e10cSrcweir else if ( nType == ::com::sun::star::ui::ItemType::SEPARATOR_LINEBREAK )
773cdf0e10cSrcweir WriteToolBoxBreak();
774cdf0e10cSrcweir }
775cdf0e10cSrcweir }
776cdf0e10cSrcweir
777cdf0e10cSrcweir m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
778cdf0e10cSrcweir m_xWriteDocumentHandler->endElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_TOOLBAR )) );
779cdf0e10cSrcweir m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
780cdf0e10cSrcweir m_xWriteDocumentHandler->endDocument();
781cdf0e10cSrcweir }
782cdf0e10cSrcweir
783cdf0e10cSrcweir //_________________________________________________________________________________________________________________
784cdf0e10cSrcweir // protected member functions
785cdf0e10cSrcweir //_________________________________________________________________________________________________________________
786cdf0e10cSrcweir
WriteToolBoxItem(const::rtl::OUString & rCommandURL,const::rtl::OUString & rLabel,const::rtl::OUString & rHelpURL,const::rtl::OUString & rTooltip,sal_Int16 nStyle,sal_Int16 nWidth,sal_Bool bVisible)787cdf0e10cSrcweir void OWriteToolBoxDocumentHandler::WriteToolBoxItem(
788cdf0e10cSrcweir const ::rtl::OUString& rCommandURL,
789cdf0e10cSrcweir const ::rtl::OUString& rLabel,
790cdf0e10cSrcweir const ::rtl::OUString& rHelpURL,
791cdf0e10cSrcweir const ::rtl::OUString& rTooltip,
792cdf0e10cSrcweir sal_Int16 nStyle,
793cdf0e10cSrcweir sal_Int16 nWidth,
794cdf0e10cSrcweir sal_Bool bVisible )
795cdf0e10cSrcweir throw ( SAXException, RuntimeException )
796cdf0e10cSrcweir {
797cdf0e10cSrcweir ::comphelper::AttributeList* pList = new ::comphelper::AttributeList;
798cdf0e10cSrcweir Reference< XAttributeList > xList( (XAttributeList *) pList , UNO_QUERY );
799cdf0e10cSrcweir
800cdf0e10cSrcweir if ( m_aAttributeURL.getLength() == 0 )
801cdf0e10cSrcweir {
802cdf0e10cSrcweir m_aAttributeURL = m_aXMLXlinkNS;
803cdf0e10cSrcweir m_aAttributeURL += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_URL ));
804cdf0e10cSrcweir }
805cdf0e10cSrcweir
806cdf0e10cSrcweir // save required attribute (URL)
807cdf0e10cSrcweir pList->AddAttribute( m_aAttributeURL, m_aAttributeType, rCommandURL );
808cdf0e10cSrcweir
809cdf0e10cSrcweir if ( rLabel.getLength() > 0 )
810cdf0e10cSrcweir {
811cdf0e10cSrcweir pList->AddAttribute( m_aXMLToolbarNS + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_TEXT )),
812cdf0e10cSrcweir m_aAttributeType,
813cdf0e10cSrcweir rLabel );
814cdf0e10cSrcweir }
815cdf0e10cSrcweir
816cdf0e10cSrcweir if ( bVisible == sal_False )
817cdf0e10cSrcweir {
818cdf0e10cSrcweir pList->AddAttribute( m_aXMLToolbarNS + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_VISIBLE )),
819cdf0e10cSrcweir m_aAttributeType,
820cdf0e10cSrcweir ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_BOOLEAN_FALSE )) );
821cdf0e10cSrcweir }
822cdf0e10cSrcweir
823cdf0e10cSrcweir if ( rHelpURL.getLength() > 0 )
824cdf0e10cSrcweir {
825cdf0e10cSrcweir pList->AddAttribute( m_aXMLToolbarNS + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_HELPID )),
826cdf0e10cSrcweir m_aAttributeType,
827cdf0e10cSrcweir rHelpURL );
828cdf0e10cSrcweir }
829cdf0e10cSrcweir
830cdf0e10cSrcweir if ( rTooltip.getLength() > 0 )
831cdf0e10cSrcweir {
832cdf0e10cSrcweir pList->AddAttribute( m_aXMLToolbarNS + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_TOOLTIP )),
833cdf0e10cSrcweir m_aAttributeType,
834cdf0e10cSrcweir rTooltip );
835cdf0e10cSrcweir }
836cdf0e10cSrcweir
837cdf0e10cSrcweir if ( nStyle > 0 )
838cdf0e10cSrcweir {
839cdf0e10cSrcweir rtl::OUString aValue;
840cdf0e10cSrcweir ToolboxStyleItem* pStyle = Styles;
841cdf0e10cSrcweir
842cdf0e10cSrcweir for ( sal_Int32 nIndex = 0; nIndex < nStyleItemEntries; ++nIndex, ++pStyle )
843cdf0e10cSrcweir {
844cdf0e10cSrcweir if ( nStyle & pStyle->nBit )
845cdf0e10cSrcweir {
846cdf0e10cSrcweir if ( aValue.getLength() )
847cdf0e10cSrcweir aValue = aValue.concat( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(" ") ) );
848cdf0e10cSrcweir aValue += rtl::OUString::createFromAscii( pStyle->attrName );
849cdf0e10cSrcweir }
850cdf0e10cSrcweir }
851cdf0e10cSrcweir pList->AddAttribute( m_aXMLToolbarNS + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_ITEMSTYLE )),
852cdf0e10cSrcweir m_aAttributeType,
853cdf0e10cSrcweir aValue );
854cdf0e10cSrcweir }
855cdf0e10cSrcweir
856cdf0e10cSrcweir if ( nWidth > 0 )
857cdf0e10cSrcweir {
858cdf0e10cSrcweir pList->AddAttribute( m_aXMLToolbarNS + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ATTRIBUTE_WIDTH )),
859cdf0e10cSrcweir m_aAttributeType,
860cdf0e10cSrcweir ::rtl::OUString::valueOf( sal_Int32( nWidth )) );
861cdf0e10cSrcweir }
862cdf0e10cSrcweir
863cdf0e10cSrcweir m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
864cdf0e10cSrcweir m_xWriteDocumentHandler->startElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_TOOLBARITEM )), xList );
865cdf0e10cSrcweir m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
866cdf0e10cSrcweir m_xWriteDocumentHandler->endElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_TOOLBARITEM )) );
867cdf0e10cSrcweir }
868cdf0e10cSrcweir
WriteToolBoxSpace()869cdf0e10cSrcweir void OWriteToolBoxDocumentHandler::WriteToolBoxSpace() throw
870cdf0e10cSrcweir ( SAXException, RuntimeException )
871cdf0e10cSrcweir {
872cdf0e10cSrcweir m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
873cdf0e10cSrcweir m_xWriteDocumentHandler->startElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_TOOLBARSPACE )), m_xEmptyList );
874cdf0e10cSrcweir m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
875cdf0e10cSrcweir m_xWriteDocumentHandler->endElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_TOOLBARSPACE )) );
876cdf0e10cSrcweir }
877cdf0e10cSrcweir
WriteToolBoxBreak()878cdf0e10cSrcweir void OWriteToolBoxDocumentHandler::WriteToolBoxBreak() throw
879cdf0e10cSrcweir ( SAXException, RuntimeException )
880cdf0e10cSrcweir {
881cdf0e10cSrcweir m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
882cdf0e10cSrcweir m_xWriteDocumentHandler->startElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_TOOLBARBREAK )), m_xEmptyList );
883cdf0e10cSrcweir m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
884cdf0e10cSrcweir m_xWriteDocumentHandler->endElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_TOOLBARBREAK )) );
885cdf0e10cSrcweir }
886cdf0e10cSrcweir
WriteToolBoxSeparator()887cdf0e10cSrcweir void OWriteToolBoxDocumentHandler::WriteToolBoxSeparator() throw
888cdf0e10cSrcweir ( SAXException, RuntimeException )
889cdf0e10cSrcweir {
890cdf0e10cSrcweir m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
891cdf0e10cSrcweir m_xWriteDocumentHandler->startElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_TOOLBARSEPARATOR )), m_xEmptyList );
892cdf0e10cSrcweir m_xWriteDocumentHandler->ignorableWhitespace( ::rtl::OUString() );
893cdf0e10cSrcweir m_xWriteDocumentHandler->endElement( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ELEMENT_NS_TOOLBARSEPARATOR )) );
894cdf0e10cSrcweir }
895cdf0e10cSrcweir
896cdf0e10cSrcweir } // namespace framework
897cdf0e10cSrcweir
898