From 85f072ef33ef47b5e3e0bcd51acb5c4179cde2c2 Mon Sep 17 00:00:00 2001 From: Ariel Constenla-Haile Date: Fri, 4 Jan 2013 18:57:29 +0000 Subject: Resolves: #i121577# Allow setting toolbar name in Addons.xcu (cherry picked from commit 37894067213a63c51c7a73083d7b0ace5f5c40da) Conflicts: framework/inc/framework/addonsoptions.hxx framework/source/fwe/classes/addonsoptions.cxx framework/source/layoutmanager/toolbarlayoutmanager.cxx officecfg/registry/schema/org/openoffice/Office/Addons.xcs Change-Id: Icc8ed1bb5ac2cfecd6c03c53c137c503dc78bc66 --- framework/source/fwe/classes/addonsoptions.cxx | 75 ++++++++++++++++++++-- .../source/layoutmanager/toolbarlayoutmanager.cxx | 7 +- include/framework/addonsoptions.hxx | 7 ++ .../schema/org/openoffice/Office/Addons.xcs | 16 +++++ 4 files changed, 95 insertions(+), 10 deletions(-) diff --git a/framework/source/fwe/classes/addonsoptions.cxx b/framework/source/fwe/classes/addonsoptions.cxx index a94fe1c75165..3f9f65637781 100644 --- a/framework/source/fwe/classes/addonsoptions.cxx +++ b/framework/source/fwe/classes/addonsoptions.cxx @@ -49,8 +49,10 @@ using namespace ::com::sun::star::beans ; using namespace ::com::sun::star::lang ; using namespace ::com::sun::star; +#define STR_TOOLBARITEMS "ToolBarItems" #define ROOTNODE_ADDONMENU OUString("Office.Addons" ) #define PATHDELIMITER OUString("/" ) +#define TOOLBARITEMS OUString(STR_TOOLBARITEMS) #define SEPARATOR_URL_STR "private:separator" #define SEPARATOR_URL OUString( SEPARATOR_URL_STR ) @@ -62,6 +64,7 @@ using namespace ::com::sun::star; #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 @@ -92,7 +95,7 @@ using namespace ::com::sun::star; #define PROPERTYNAME_MERGETOOLBAR_MERGECOMMANDPARAMETER OUString("MergeCommandParameter" ) #define PROPERTYNAME_MERGETOOLBAR_MERGEFALLBACK OUString("MergeFallback" ) #define PROPERTYNAME_MERGETOOLBAR_MERGECONTEXT OUString("MergeContext" ) -#define PROPERTYNAME_MERGETOOLBAR_TOOLBARITEMS OUString("ToolBarItems" ) +#define PROPERTYNAME_MERGETOOLBAR_TOOLBARITEMS OUString(STR_TOOLBARITEMS) #define PROPERTYNAME_MERGESTATUSBAR_MERGEPOINT ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergePoint" )) #define PROPERTYNAME_MERGESTATUSBAR_MERGECOMMAND ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergeCommand" )) @@ -113,7 +116,8 @@ using namespace ::com::sun::star; #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 @@ -131,6 +135,11 @@ using namespace ::com::sun::star; #define OFFSET_POPUPMENU_SUBMENU 2 #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 @@ -277,6 +286,7 @@ class AddonsOptions_Impl : public ConfigItem const Sequence< Sequence< PropertyValue > >& GetAddonsMenuBarPart () const ; const Sequence< Sequence< PropertyValue > >& GetAddonsToolBarPart ( sal_uInt32 nIndex ) const ; const OUString GetAddonsToolbarResourceName( sal_uInt32 nIndex ) const; + const OUString GetAddonsToolbarUIName( sal_uInt32 nIndex ) const; const Sequence< Sequence< PropertyValue > >& GetAddonsHelpMenu () const ; Image GetImageFromURL( const OUString& aURL, sal_Bool bBig, sal_Bool bNoScale ) const; const MergeMenuInstructionContainer& GetMergeMenuInstructions() const; @@ -325,7 +335,9 @@ class AddonsOptions_Impl : public ConfigItem sal_Bool ReadAddonMenuSet( Sequence< Sequence< PropertyValue > >& aAddonMenuSeq ); sal_Bool ReadOfficeMenuBarSet( Sequence< Sequence< PropertyValue > >& aAddonOfficeMenuBarSeq ); - sal_Bool ReadOfficeToolBarSet( AddonToolBars& rAddonOfficeToolBars, std::vector< OUString >& rAddonOfficeToolBarResNames ); + sal_Bool ReadOfficeToolBarSet( AddonToolBars& rAddonOfficeToolBars, + std::vector< OUString >& rAddonOfficeToolBarResNames, + std::vector< OUString >& rAddonOfficeToolBarUINames ); sal_Bool ReadToolBarItemSet( const OUString rToolBarItemSetNodeName, Sequence< Sequence< PropertyValue > >& aAddonOfficeToolBarSeq ); sal_Bool ReadOfficeHelpSet( Sequence< Sequence< PropertyValue > >& aAddonOfficeHelpMenuSeq ); sal_Bool ReadImages( ImageManager& aImageManager ); @@ -354,6 +366,7 @@ class AddonsOptions_Impl : public ConfigItem Sequence< OUString > GetPropertyNamesMenuItem( const OUString& aPropertyRootNode ) const; Sequence< OUString > GetPropertyNamesPopupMenu( const OUString& aPropertyRootNode ) const; + Sequence< OUString > GetPropertyNamesToolBar( const OUString& aPropertyRootNode ) const; Sequence< OUString > GetPropertyNamesToolBarItem( const OUString& aPropertyRootNode ) const; Sequence< OUString > GetPropertyNamesStatusbarItem( const ::rtl::OUString& aPropertyRootNode ) const; Sequence< OUString > GetPropertyNamesImages( const OUString& aPropertyRootNode ) const; @@ -381,6 +394,7 @@ class AddonsOptions_Impl : public ConfigItem Sequence< Sequence< PropertyValue > > m_aCachedMenuBarPartProperties; AddonToolBars m_aCachedToolBarPartProperties; std::vector< OUString > m_aCachedToolBarPartResourceNames; + std::vector< OUString > m_aCachedToolBarPartUINames; Sequence< Sequence< PropertyValue > > m_aCachedHelpMenuProperties; Reference< util::XMacroExpander > m_xMacroExpander; ImageManager m_aImageManager; @@ -414,6 +428,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; @@ -481,11 +496,14 @@ void AddonsOptions_Impl::ReadConfigurationData() 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 ); @@ -569,6 +587,15 @@ const OUString AddonsOptions_Impl::GetAddonsToolbarResourceName( sal_uInt32 nInd return 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 //***************************************************************************************************************** @@ -763,7 +790,10 @@ sal_Bool AddonsOptions_Impl::ReadOfficeMenuBarSet( Sequence< Sequence< PropertyV //***************************************************************************************************************** // private method //***************************************************************************************************************** -sal_Bool AddonsOptions_Impl::ReadOfficeToolBarSet( AddonToolBars& rAddonOfficeToolBars, std::vector< OUString >& rAddonOfficeToolBarResNames ) +sal_Bool AddonsOptions_Impl::ReadOfficeToolBarSet( + AddonToolBars& rAddonOfficeToolBars, + std::vector< OUString >& rAddonOfficeToolBarResNames, + std::vector< OUString >& rAddonOfficeToolBarUINames ) { // Read the OfficeToolBar set and fill property sequences OUString aAddonToolBarNodeName( "AddonUI/OfficeToolBar" ); @@ -774,10 +804,24 @@ sal_Bool AddonsOptions_Impl::ReadOfficeToolBarSet( AddonToolBars& rAddonOfficeTo for ( sal_uInt32 n = 0; n < nCount; n++ ) { - OUString aToolBarItemNode( aAddonToolBarNode + aAddonToolBarNodeSeq[n] ); + 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() ); @@ -1715,6 +1759,17 @@ Sequence< OUString > AddonsOptions_Impl::GetPropertyNamesPopupMenu( const OUStri //***************************************************************************************************************** // private method //***************************************************************************************************************** +Sequence< OUString > AddonsOptions_Impl::GetPropertyNamesToolBar( const 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< OUString > AddonsOptions_Impl::GetPropertyNamesToolBarItem( const OUString& aPropertyRootNode ) const { Sequence< OUString > lResult( PROPERTYCOUNT_TOOLBARITEM ); @@ -1864,6 +1919,12 @@ const OUString AddonsOptions::GetAddonsToolbarResourceName( sal_uInt32 nIndex ) return m_pDataContainer->GetAddonsToolbarResourceName( nIndex ); } +const ::rtl::OUString AddonsOptions::GetAddonsToolbarUIName( sal_uInt32 nIndex ) const +{ + MutexGuard aGuard( GetOwnStaticMutex() ); + return m_pDataContainer->GetAddonsToolbarUIName( nIndex ); +} + //***************************************************************************************************************** // public method //***************************************************************************************************************** diff --git a/framework/source/layoutmanager/toolbarlayoutmanager.cxx b/framework/source/layoutmanager/toolbarlayoutmanager.cxx index b590ddd2e314..ebc54594322e 100644 --- a/framework/source/layoutmanager/toolbarlayoutmanager.cxx +++ b/framework/source/layoutmanager/toolbarlayoutmanager.cxx @@ -1031,7 +1031,8 @@ void ToolbarLayoutManager::implts_createAddonsToolBars() } OUString aAddonUIName = m_pAddonOptions->GetAddonsToolbarUIName( i ); - OUString aAddonTitle = aAddonUIName.getLength() ? + const bool bAddonUIName = aAddonUIName.getLength(); + OUString aAddonTitle = bAddonUIName ? aAddonUIName : implts_generateGenericAddonToolbarTitle( i+1 ); if ( !aElement.m_aName.isEmpty() ) @@ -1040,7 +1041,7 @@ void ToolbarLayoutManager::implts_createAddonsToolBars() // UI changes for this document. implts_setElementData( aElement, xDockWindow ); aElement.m_xUIElement = xUIElement; - if ( aElement.m_aUIName.isEmpty() ) + if ( aElement.m_aUIName.isEmpty() && !bAddonUIName) { aElement.m_aUIName = aAddonTitle; implts_writeWindowStateData( aElement ); @@ -1053,7 +1054,7 @@ void ToolbarLayoutManager::implts_createAddonsToolBars() aNewToolbar.m_bFloating = true; implts_readWindowStateData( aAddonToolBarName, aNewToolbar ); implts_setElementData( aNewToolbar, xDockWindow ); - if ( aNewToolbar.m_aUIName.isEmpty() ) + if ( aNewToolbar.m_aUIName.isEmpty() && !bAddonUIName) { aNewToolbar.m_aUIName = aAddonTitle; implts_writeWindowStateData( aNewToolbar ); diff --git a/include/framework/addonsoptions.hxx b/include/framework/addonsoptions.hxx index 0a926b865c0b..b441aeaa5b79 100644 --- a/include/framework/addonsoptions.hxx +++ b/include/framework/addonsoptions.hxx @@ -282,6 +282,13 @@ class FWE_DLLPUBLIC AddonsOptions *//*-*****************************************************************************************************/ bool GetMergeToolbarInstructions( const OUString& rToolbarName, MergeToolbarInstructionContainer& rToolbar ) 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 Gets the Add-On help menu part of all addon components registered @descr - diff --git a/officecfg/registry/schema/org/openoffice/Office/Addons.xcs b/officecfg/registry/schema/org/openoffice/Office/Addons.xcs index ee78884a9d42..90d33d457d5f 100644 --- a/officecfg/registry/schema/org/openoffice/Office/Addons.xcs +++ b/officecfg/registry/schema/org/openoffice/Office/Addons.xcs @@ -152,6 +152,22 @@ + + + Contains the structure of a toolbar. + + + + A localized string used as the toolbar title. + + + + + + Contains a list of sets of toolbar items that are part of add-on toolbars. + + + 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. -- cgit v1.2.3