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 10cdf0e10cSrcweir * 11*6d739b60SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 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. 19cdf0e10cSrcweir * 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 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 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 214cdf0e10cSrcweir OReadToolBoxDocumentHandler::~OReadToolBoxDocumentHandler() 215cdf0e10cSrcweir { 216cdf0e10cSrcweir } 217cdf0e10cSrcweir 218cdf0e10cSrcweir // XDocumentHandler 219cdf0e10cSrcweir void SAL_CALL OReadToolBoxDocumentHandler::startDocument(void) 220cdf0e10cSrcweir throw ( SAXException, RuntimeException ) 221cdf0e10cSrcweir { 222cdf0e10cSrcweir } 223cdf0e10cSrcweir 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 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 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 637cdf0e10cSrcweir void SAL_CALL OReadToolBoxDocumentHandler::characters(const ::rtl::OUString&) 638cdf0e10cSrcweir throw( SAXException, RuntimeException ) 639cdf0e10cSrcweir { 640cdf0e10cSrcweir } 641cdf0e10cSrcweir 642cdf0e10cSrcweir void SAL_CALL OReadToolBoxDocumentHandler::ignorableWhitespace(const ::rtl::OUString&) 643cdf0e10cSrcweir throw( SAXException, RuntimeException ) 644cdf0e10cSrcweir { 645cdf0e10cSrcweir } 646cdf0e10cSrcweir 647cdf0e10cSrcweir void SAL_CALL OReadToolBoxDocumentHandler::processingInstruction( 648cdf0e10cSrcweir const ::rtl::OUString& /*aTarget*/, const ::rtl::OUString& /*aData*/ ) 649cdf0e10cSrcweir throw( SAXException, RuntimeException ) 650cdf0e10cSrcweir { 651cdf0e10cSrcweir } 652cdf0e10cSrcweir 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 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 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 696cdf0e10cSrcweir OWriteToolBoxDocumentHandler::~OWriteToolBoxDocumentHandler() 697cdf0e10cSrcweir { 698cdf0e10cSrcweir } 699cdf0e10cSrcweir 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 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 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 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 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