Author: arielch Date: Fri Jan 4 19:57:29 2013 New Revision: 1429069 URL: http://svn.apache.org/viewvc?rev=1429069&view=rev Log: i121577 - Allow setting toolbar name in Addons.xcu
Modified: openoffice/trunk/main/framework/inc/framework/addonsoptions.hxx openoffice/trunk/main/framework/source/fwe/classes/addonsoptions.cxx openoffice/trunk/main/framework/source/layoutmanager/toolbarlayoutmanager.cxx openoffice/trunk/main/officecfg/registry/schema/org/openoffice/Office/Addons.xcs Modified: openoffice/trunk/main/framework/inc/framework/addonsoptions.hxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/framework/inc/framework/addonsoptions.hxx?rev=1429069&r1=1429068&r2=1429069&view=diff ============================================================================== --- openoffice/trunk/main/framework/inc/framework/addonsoptions.hxx (original) +++ openoffice/trunk/main/framework/inc/framework/addonsoptions.hxx Fri Jan 4 19:57:29 2013 @@ -279,6 +279,13 @@ class FWE_DLLPUBLIC AddonsOptions const ::rtl::OUString GetAddonsToolbarResourceName( sal_uInt32 nIndex ) const; + /** + * @short Gets the UI name of a single addon toolbar + * @return The UI name of the toolbar as specified in the Addons.xcu configuration + * @onerror Returns an empty string + */ + const ::rtl::OUString GetAddonsToolbarUIName( sal_uInt32 nIndex ) const; + /*-****************************************************************************************************//** @short Retrieves all available merge instructions for the Office menu bar @descr - Modified: openoffice/trunk/main/framework/source/fwe/classes/addonsoptions.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/framework/source/fwe/classes/addonsoptions.cxx?rev=1429069&r1=1429068&r2=1429069&view=diff ============================================================================== --- openoffice/trunk/main/framework/source/fwe/classes/addonsoptions.cxx (original) +++ openoffice/trunk/main/framework/source/fwe/classes/addonsoptions.cxx Fri Jan 4 19:57:29 2013 @@ -64,9 +64,11 @@ using namespace ::com::sun::star::lang ; // const //_________________________________________________________________________________________________________________ +#define STR_TOOLBARITEMS "ToolBarItems" + #define ROOTNODE_ADDONMENU ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Office.Addons" )) #define PATHDELIMITER ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/" )) -#define TOOLBARITEMS ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ToolBarItems" )) +#define TOOLBARITEMS ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(STR_TOOLBARITEMS)) #define SEPARATOR_URL_STR "private:separator" #define SEPARATOR_URL_LEN 17 #define SEPARATOR_URL ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( SEPARATOR_URL_STR )) @@ -79,6 +81,7 @@ using namespace ::com::sun::star::lang ; #define PROPERTYNAME_SUBMENU ADDONSMENUITEM_PROPERTYNAME_SUBMENU #define PROPERTYNAME_CONTROLTYPE ADDONSMENUITEM_PROPERTYNAME_CONTROLTYPE #define PROPERTYNAME_WIDTH ADDONSMENUITEM_PROPERTYNAME_WIDTH +#define PROPERTYNAME_TOOLBARITEMS TOOLBARITEMS #define PROPERTYNAME_ALIGN STATUSBARITEM_PROPERTYNAME_ALIGN #define PROPERTYNAME_AUTOSIZE STATUSBARITEM_PROPERTYNAME_AUTOSIZE @@ -110,7 +113,7 @@ using namespace ::com::sun::star::lang ; #define PROPERTYNAME_MERGETOOLBAR_MERGECOMMANDPARAMETER ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergeCommandParameter" )) #define PROPERTYNAME_MERGETOOLBAR_MERGEFALLBACK ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergeFallback" )) #define PROPERTYNAME_MERGETOOLBAR_MERGECONTEXT ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergeContext" )) -#define PROPERTYNAME_MERGETOOLBAR_TOOLBARITEMS ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ToolBarItems" )) +#define PROPERTYNAME_MERGETOOLBAR_TOOLBARITEMS ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(STR_TOOLBARITEMS )) #define PROPERTYNAME_MERGESTATUSBAR_MERGEPOINT ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergePoint" )) #define PROPERTYNAME_MERGESTATUSBAR_MERGECOMMAND ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergeCommand" )) @@ -131,7 +134,8 @@ using namespace ::com::sun::star::lang ; #define INDEX_ALIGN 8 #define INDEX_AUTOSIZE 9 #define INDEX_OWNERDRAW 10 -#define PROPERTYCOUNT_INDEX 11 +#define INDEX_TOOLBARITEMS 11 +#define PROPERTYCOUNT_INDEX 12 // The following order is mandatory. Please add properties at the end! #define PROPERTYCOUNT_MENUITEM 6 @@ -150,6 +154,11 @@ using namespace ::com::sun::star::lang ; #define OFFSET_POPUPMENU_URL 3 // Used for property set // The following order is mandatory. Please add properties at the end! +#define PROPERTYCOUNT_TOOLBAR 2 +#define OFFSET_TOOLBAR_TITLE 0 +#define OFFSET_TOOLBAR_TOOLBARITEMS 1 + +// The following order is mandatory. Please add properties at the end! #define PROPERTYCOUNT_TOOLBARITEM 7 #define OFFSET_TOOLBARITEM_URL 0 #define OFFSET_TOOLBARITEM_TITLE 1 @@ -296,6 +305,7 @@ class AddonsOptions_Impl : public Config const Sequence< Sequence< PropertyValue > >& GetAddonsMenuBarPart () const ; const Sequence< Sequence< PropertyValue > >& GetAddonsToolBarPart ( sal_uInt32 nIndex ) const ; const ::rtl::OUString GetAddonsToolbarResourceName( sal_uInt32 nIndex ) const; + const ::rtl::OUString GetAddonsToolbarUIName( sal_uInt32 nIndex ) const; const Sequence< Sequence< PropertyValue > >& GetAddonsHelpMenu () const ; Image GetImageFromURL( const rtl::OUString& aURL, sal_Bool bBig, sal_Bool bHiContrast, sal_Bool bNoScale ) const; const MergeMenuInstructionContainer& GetMergeMenuInstructions() const; @@ -348,7 +358,9 @@ class AddonsOptions_Impl : public Config sal_Bool ReadAddonMenuSet( Sequence< Sequence< PropertyValue > >& aAddonMenuSeq ); sal_Bool ReadOfficeMenuBarSet( Sequence< Sequence< PropertyValue > >& aAddonOfficeMenuBarSeq ); - sal_Bool ReadOfficeToolBarSet( AddonToolBars& rAddonOfficeToolBars, std::vector< rtl::OUString >& rAddonOfficeToolBarResNames ); + sal_Bool ReadOfficeToolBarSet( AddonToolBars& rAddonOfficeToolBars, + std::vector< rtl::OUString >& rAddonOfficeToolBarResNames, + std::vector< rtl::OUString >& rAddonOfficeToolBarUINames ); sal_Bool ReadToolBarItemSet( const rtl::OUString rToolBarItemSetNodeName, Sequence< Sequence< PropertyValue > >& aAddonOfficeToolBarSeq ); sal_Bool ReadOfficeHelpSet( Sequence< Sequence< PropertyValue > >& aAddonOfficeHelpMenuSeq ); sal_Bool ReadImages( ImageManager& aImageManager ); @@ -378,6 +390,7 @@ class AddonsOptions_Impl : public Config Sequence< ::rtl::OUString > GetPropertyNamesMergeMenuInstruction( const ::rtl::OUString& aPropertyRootName ) const; Sequence< ::rtl::OUString > GetPropertyNamesMenuItem( const ::rtl::OUString& aPropertyRootNode ) const; Sequence< ::rtl::OUString > GetPropertyNamesPopupMenu( const ::rtl::OUString& aPropertyRootNode ) const; + Sequence< ::rtl::OUString > GetPropertyNamesToolBar( const ::rtl::OUString& aPropertyRootNode ) const; Sequence< ::rtl::OUString > GetPropertyNamesToolBarItem( const ::rtl::OUString& aPropertyRootNode ) const; Sequence< ::rtl::OUString > GetPropertyNamesStatusbarItem( const ::rtl::OUString& aPropertyRootNode ) const; Sequence< ::rtl::OUString > GetPropertyNamesImages( const ::rtl::OUString& aPropertyRootNode ) const; @@ -405,6 +418,7 @@ class AddonsOptions_Impl : public Config Sequence< Sequence< PropertyValue > > m_aCachedMenuBarPartProperties; AddonToolBars m_aCachedToolBarPartProperties; std::vector< rtl::OUString > m_aCachedToolBarPartResourceNames; + std::vector< rtl::OUString > m_aCachedToolBarPartUINames; Sequence< Sequence< PropertyValue > > m_aCachedHelpMenuProperties; Reference< com::sun::star::util::XMacroExpander > m_xMacroExpander; ImageManager m_aImageManager; @@ -442,6 +456,7 @@ AddonsOptions_Impl::AddonsOptions_Impl() m_aPropNames[ INDEX_ALIGN ] = PROPERTYNAME_ALIGN; m_aPropNames[ INDEX_AUTOSIZE ] = PROPERTYNAME_AUTOSIZE; m_aPropNames[ INDEX_OWNERDRAW ] = PROPERTYNAME_OWNERDRAW; + m_aPropNames[ INDEX_TOOLBARITEMS ] = PROPERTYNAME_TOOLBARITEMS; // initialize array with fixed images property names m_aPropImagesNames[ OFFSET_IMAGES_SMALL ] = PROPERTYNAME_IMAGESMALL; @@ -515,11 +530,14 @@ void AddonsOptions_Impl::ReadConfigurati m_aCachedToolBarPartProperties = AddonToolBars(); m_aCachedHelpMenuProperties = Sequence< Sequence< PropertyValue > >(); m_aCachedToolBarPartResourceNames.clear(); + m_aCachedToolBarPartUINames.clear(); m_aImageManager = ImageManager(); ReadAddonMenuSet( m_aCachedMenuProperties ); ReadOfficeMenuBarSet( m_aCachedMenuBarPartProperties ); - ReadOfficeToolBarSet( m_aCachedToolBarPartProperties, m_aCachedToolBarPartResourceNames ); + ReadOfficeToolBarSet( m_aCachedToolBarPartProperties, + m_aCachedToolBarPartResourceNames, + m_aCachedToolBarPartUINames ); ReadOfficeHelpSet( m_aCachedHelpMenuProperties ); ReadImages( m_aImageManager ); @@ -611,6 +629,15 @@ const ::rtl::OUString AddonsOptions_Impl return rtl::OUString(); } + +const ::rtl::OUString AddonsOptions_Impl::GetAddonsToolbarUIName( sal_uInt32 nIndex ) const +{ + if ( nIndex < m_aCachedToolBarPartUINames.size() ) + return m_aCachedToolBarPartUINames[nIndex]; + else + return rtl::OUString(); +} + //***************************************************************************************************************** // public method //***************************************************************************************************************** @@ -815,7 +842,10 @@ sal_Bool AddonsOptions_Impl::ReadOfficeM //***************************************************************************************************************** // private method //***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::ReadOfficeToolBarSet( AddonToolBars& rAddonOfficeToolBars, std::vector< rtl::OUString >& rAddonOfficeToolBarResNames ) +sal_Bool AddonsOptions_Impl::ReadOfficeToolBarSet( + AddonToolBars& rAddonOfficeToolBars, + std::vector< rtl::OUString >& rAddonOfficeToolBarResNames, + std::vector< rtl::OUString >& rAddonOfficeToolBarUINames ) { // Read the OfficeToolBar set and fill property sequences ::rtl::OUString aAddonToolBarNodeName( RTL_CONSTASCII_USTRINGPARAM( "AddonUI/OfficeToolBar" )); @@ -826,10 +856,24 @@ sal_Bool AddonsOptions_Impl::ReadOfficeT for ( sal_uInt32 n = 0; n < nCount; n++ ) { - ::rtl::OUString aToolBarItemNode( aAddonToolBarNode + aAddonToolBarNodeSeq[n] ); + ::rtl::OUString aToolBarNode( aAddonToolBarNode + aAddonToolBarNodeSeq[n] + m_aPathDelimiter ); rAddonOfficeToolBarResNames.push_back( aAddonToolBarNodeSeq[n] ); rAddonOfficeToolBars.push_back( m_aEmptyAddonToolBar ); - ReadToolBarItemSet( aToolBarItemNode, rAddonOfficeToolBars[n] ); + + Sequence< Any > aToolBarNodeValues = GetProperties( GetPropertyNamesToolBar( aToolBarNode ) ); + + rtl::OUString aUIName; + aToolBarNodeValues[OFFSET_TOOLBAR_TITLE] >>= aUIName; + rAddonOfficeToolBarUINames.push_back( aUIName ); + + Reference < XInterface > xToolbarItems; + if ( ( aToolBarNodeValues[OFFSET_TOOLBAR_TOOLBARITEMS] >>= xToolbarItems ) && xToolbarItems.is() ) + { + ::rtl::OUStringBuffer aBuffer; + aBuffer.append( aToolBarNode ); + aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( STR_TOOLBARITEMS ) ); + ReadToolBarItemSet( aBuffer.makeStringAndClear(), rAddonOfficeToolBars[n] ); + } } return ( !rAddonOfficeToolBars.empty() ); @@ -1812,6 +1856,17 @@ Sequence< ::rtl::OUString > AddonsOption //***************************************************************************************************************** // private method //***************************************************************************************************************** +Sequence< ::rtl::OUString > AddonsOptions_Impl::GetPropertyNamesToolBar( const ::rtl::OUString& aPropertyRootNode ) const +{ + Sequence< ::rtl::OUString > lResult( PROPERTYCOUNT_TOOLBAR ); + + // Create property names dependent from the root node name + lResult[OFFSET_TOOLBAR_TITLE] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_TITLE ] ); + lResult[OFFSET_TOOLBAR_TOOLBARITEMS] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_TOOLBARITEMS ] ); + + return lResult; +} + Sequence< ::rtl::OUString > AddonsOptions_Impl::GetPropertyNamesToolBarItem( const ::rtl::OUString& aPropertyRootNode ) const { Sequence< ::rtl::OUString > lResult( PROPERTYCOUNT_TOOLBARITEM ); @@ -1971,6 +2026,12 @@ const ::rtl::OUString AddonsOptions::Get return m_pDataContainer->GetAddonsToolbarResourceName( nIndex ); } +const ::rtl::OUString AddonsOptions::GetAddonsToolbarUIName( sal_uInt32 nIndex ) const +{ + MutexGuard aGuard( GetOwnStaticMutex() ); + return m_pDataContainer->GetAddonsToolbarUIName( nIndex ); +} + //***************************************************************************************************************** // public method //***************************************************************************************************************** Modified: openoffice/trunk/main/framework/source/layoutmanager/toolbarlayoutmanager.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/framework/source/layoutmanager/toolbarlayoutmanager.cxx?rev=1429069&r1=1429068&r2=1429069&view=diff ============================================================================== --- openoffice/trunk/main/framework/source/layoutmanager/toolbarlayoutmanager.cxx (original) +++ openoffice/trunk/main/framework/source/layoutmanager/toolbarlayoutmanager.cxx Fri Jan 4 19:57:29 2013 @@ -1005,7 +1005,8 @@ void ToolbarLayoutManager::implts_create } ::rtl::OUString aAddonUIName = m_pAddonOptions->GetAddonsToolbarUIName( i ); - ::rtl::OUString aAddonTitle = aAddonUIName.getLength() ? + const bool bAddonUIName = aAddonUIName.getLength(); + ::rtl::OUString aAddonTitle = bAddonUIName ? aAddonUIName : implts_generateGenericAddonToolbarTitle( i+1 ); if ( aElement.m_aName.getLength() > 0 ) @@ -1014,7 +1015,7 @@ void ToolbarLayoutManager::implts_create // UI changes for this document. implts_setElementData( aElement, xDockWindow ); aElement.m_xUIElement = xUIElement; - if ( aElement.m_aUIName.getLength() == 0 ) + if ( aElement.m_aUIName.getLength() == 0 && !bAddonUIName) { aElement.m_aUIName = aAddonTitle; implts_writeWindowStateData( aElement ); @@ -1027,7 +1028,7 @@ void ToolbarLayoutManager::implts_create aNewToolbar.m_bFloating = true; implts_readWindowStateData( aAddonToolBarName, aNewToolbar ); implts_setElementData( aNewToolbar, xDockWindow ); - if ( aNewToolbar.m_aUIName.getLength() == 0 ) + if ( aNewToolbar.m_aUIName.getLength() == 0 && !bAddonUIName) { aNewToolbar.m_aUIName = aAddonTitle; implts_writeWindowStateData( aNewToolbar ); Modified: openoffice/trunk/main/officecfg/registry/schema/org/openoffice/Office/Addons.xcs URL: http://svn.apache.org/viewvc/openoffice/trunk/main/officecfg/registry/schema/org/openoffice/Office/Addons.xcs?rev=1429069&r1=1429068&r2=1429069&view=diff ============================================================================== --- openoffice/trunk/main/officecfg/registry/schema/org/openoffice/Office/Addons.xcs (original) +++ openoffice/trunk/main/officecfg/registry/schema/org/openoffice/Office/Addons.xcs Fri Jan 4 19:57:29 2013 @@ -157,6 +157,22 @@ </info> </set> </group> + <group oor:name="ToolBar"> + <info> + <desc>Contains the structure of a toolbar.</desc> + </info> + <prop oor:name="Title" oor:type="xs:string" oor:localized="true"> + <info> + <desc>A localized string used as the toolbar title.</desc> + </info> + <value></value> + </prop> + <set oor:name="ToolBarItems" oor:node-type="ToolBarItem"> + <info> + <desc>Contains a list of sets of toolbar items that are part of add-on toolbars.</desc> + </info> + </set> + </group> <group oor:name="ToolBarItem"> <info> <desc>Describes a toolbar item representing a function of of an external component. The name must be unique and should be written using a package-scheme like org.openoffice.external.applicationexecuter to minimize name clashes.</desc> @@ -400,10 +416,10 @@ <desc>Contains a list of menu merging instructions of different add-ons.</desc> </info> </set> - <set oor:name="OfficeToolBar" oor:node-type="ToolBarItems"> - <info> - <desc>Contains a list of sets of toolbar items that are part of add-on toolbars.</desc> - </info> + <set oor:name="OfficeToolBar" oor:node-type="ToolBar"> + <info> + <desc>Contains a lists of addon toolbars.</desc> + </info> </set> <set oor:name="OfficeToolbarMerging" oor:node-type="MergeToolBarItems"> <info>