Skip to content

Commit bb0b566

Browse files
committed
i121577 - Allow setting toolbar name in Addons.xcu
git-svn-id: https://svn.apache.org/repos/asf/openoffice/trunk@1429069 13f79535-47bb-0310-9956-ffa450edef68
1 parent 2616934 commit bb0b566

File tree

4 files changed

+100
-15
lines changed

4 files changed

+100
-15
lines changed

main/framework/inc/framework/addonsoptions.hxx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,13 @@ class FWE_DLLPUBLIC AddonsOptions
279279

280280
const ::rtl::OUString GetAddonsToolbarResourceName( sal_uInt32 nIndex ) const;
281281

282+
/**
283+
* @short Gets the UI name of a single addon toolbar
284+
* @return The UI name of the toolbar as specified in the Addons.xcu configuration
285+
* @onerror Returns an empty string
286+
*/
287+
const ::rtl::OUString GetAddonsToolbarUIName( sal_uInt32 nIndex ) const;
288+
282289
/*-****************************************************************************************************//**
283290
@short Retrieves all available merge instructions for the Office menu bar
284291
@descr -

main/framework/source/fwe/classes/addonsoptions.cxx

Lines changed: 69 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,11 @@ using namespace ::com::sun::star::lang ;
6464
// const
6565
//_________________________________________________________________________________________________________________
6666

67+
#define STR_TOOLBARITEMS "ToolBarItems"
68+
6769
#define ROOTNODE_ADDONMENU ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Office.Addons" ))
6870
#define PATHDELIMITER ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/" ))
69-
#define TOOLBARITEMS ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ToolBarItems" ))
71+
#define TOOLBARITEMS ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(STR_TOOLBARITEMS))
7072
#define SEPARATOR_URL_STR "private:separator"
7173
#define SEPARATOR_URL_LEN 17
7274
#define SEPARATOR_URL ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( SEPARATOR_URL_STR ))
@@ -79,6 +81,7 @@ using namespace ::com::sun::star::lang ;
7981
#define PROPERTYNAME_SUBMENU ADDONSMENUITEM_PROPERTYNAME_SUBMENU
8082
#define PROPERTYNAME_CONTROLTYPE ADDONSMENUITEM_PROPERTYNAME_CONTROLTYPE
8183
#define PROPERTYNAME_WIDTH ADDONSMENUITEM_PROPERTYNAME_WIDTH
84+
#define PROPERTYNAME_TOOLBARITEMS TOOLBARITEMS
8285

8386
#define PROPERTYNAME_ALIGN STATUSBARITEM_PROPERTYNAME_ALIGN
8487
#define PROPERTYNAME_AUTOSIZE STATUSBARITEM_PROPERTYNAME_AUTOSIZE
@@ -110,7 +113,7 @@ using namespace ::com::sun::star::lang ;
110113
#define PROPERTYNAME_MERGETOOLBAR_MERGECOMMANDPARAMETER ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergeCommandParameter" ))
111114
#define PROPERTYNAME_MERGETOOLBAR_MERGEFALLBACK ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergeFallback" ))
112115
#define PROPERTYNAME_MERGETOOLBAR_MERGECONTEXT ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergeContext" ))
113-
#define PROPERTYNAME_MERGETOOLBAR_TOOLBARITEMS ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ToolBarItems" ))
116+
#define PROPERTYNAME_MERGETOOLBAR_TOOLBARITEMS ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(STR_TOOLBARITEMS ))
114117

115118
#define PROPERTYNAME_MERGESTATUSBAR_MERGEPOINT ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergePoint" ))
116119
#define PROPERTYNAME_MERGESTATUSBAR_MERGECOMMAND ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MergeCommand" ))
@@ -131,7 +134,8 @@ using namespace ::com::sun::star::lang ;
131134
#define INDEX_ALIGN 8
132135
#define INDEX_AUTOSIZE 9
133136
#define INDEX_OWNERDRAW 10
134-
#define PROPERTYCOUNT_INDEX 11
137+
#define INDEX_TOOLBARITEMS 11
138+
#define PROPERTYCOUNT_INDEX 12
135139

136140
// The following order is mandatory. Please add properties at the end!
137141
#define PROPERTYCOUNT_MENUITEM 6
@@ -149,6 +153,11 @@ using namespace ::com::sun::star::lang ;
149153
#define OFFSET_POPUPMENU_SUBMENU 2
150154
#define OFFSET_POPUPMENU_URL 3 // Used for property set
151155

156+
// The following order is mandatory. Please add properties at the end!
157+
#define PROPERTYCOUNT_TOOLBAR 2
158+
#define OFFSET_TOOLBAR_TITLE 0
159+
#define OFFSET_TOOLBAR_TOOLBARITEMS 1
160+
152161
// The following order is mandatory. Please add properties at the end!
153162
#define PROPERTYCOUNT_TOOLBARITEM 7
154163
#define OFFSET_TOOLBARITEM_URL 0
@@ -296,6 +305,7 @@ class AddonsOptions_Impl : public ConfigItem
296305
const Sequence< Sequence< PropertyValue > >& GetAddonsMenuBarPart () const ;
297306
const Sequence< Sequence< PropertyValue > >& GetAddonsToolBarPart ( sal_uInt32 nIndex ) const ;
298307
const ::rtl::OUString GetAddonsToolbarResourceName( sal_uInt32 nIndex ) const;
308+
const ::rtl::OUString GetAddonsToolbarUIName( sal_uInt32 nIndex ) const;
299309
const Sequence< Sequence< PropertyValue > >& GetAddonsHelpMenu () const ;
300310
Image GetImageFromURL( const rtl::OUString& aURL, sal_Bool bBig, sal_Bool bHiContrast, sal_Bool bNoScale ) const;
301311
const MergeMenuInstructionContainer& GetMergeMenuInstructions() const;
@@ -348,7 +358,9 @@ class AddonsOptions_Impl : public ConfigItem
348358

349359
sal_Bool ReadAddonMenuSet( Sequence< Sequence< PropertyValue > >& aAddonMenuSeq );
350360
sal_Bool ReadOfficeMenuBarSet( Sequence< Sequence< PropertyValue > >& aAddonOfficeMenuBarSeq );
351-
sal_Bool ReadOfficeToolBarSet( AddonToolBars& rAddonOfficeToolBars, std::vector< rtl::OUString >& rAddonOfficeToolBarResNames );
361+
sal_Bool ReadOfficeToolBarSet( AddonToolBars& rAddonOfficeToolBars,
362+
std::vector< rtl::OUString >& rAddonOfficeToolBarResNames,
363+
std::vector< rtl::OUString >& rAddonOfficeToolBarUINames );
352364
sal_Bool ReadToolBarItemSet( const rtl::OUString rToolBarItemSetNodeName, Sequence< Sequence< PropertyValue > >& aAddonOfficeToolBarSeq );
353365
sal_Bool ReadOfficeHelpSet( Sequence< Sequence< PropertyValue > >& aAddonOfficeHelpMenuSeq );
354366
sal_Bool ReadImages( ImageManager& aImageManager );
@@ -378,6 +390,7 @@ class AddonsOptions_Impl : public ConfigItem
378390
Sequence< ::rtl::OUString > GetPropertyNamesMergeMenuInstruction( const ::rtl::OUString& aPropertyRootName ) const;
379391
Sequence< ::rtl::OUString > GetPropertyNamesMenuItem( const ::rtl::OUString& aPropertyRootNode ) const;
380392
Sequence< ::rtl::OUString > GetPropertyNamesPopupMenu( const ::rtl::OUString& aPropertyRootNode ) const;
393+
Sequence< ::rtl::OUString > GetPropertyNamesToolBar( const ::rtl::OUString& aPropertyRootNode ) const;
381394
Sequence< ::rtl::OUString > GetPropertyNamesToolBarItem( const ::rtl::OUString& aPropertyRootNode ) const;
382395
Sequence< ::rtl::OUString > GetPropertyNamesStatusbarItem( const ::rtl::OUString& aPropertyRootNode ) const;
383396
Sequence< ::rtl::OUString > GetPropertyNamesImages( const ::rtl::OUString& aPropertyRootNode ) const;
@@ -405,6 +418,7 @@ class AddonsOptions_Impl : public ConfigItem
405418
Sequence< Sequence< PropertyValue > > m_aCachedMenuBarPartProperties;
406419
AddonToolBars m_aCachedToolBarPartProperties;
407420
std::vector< rtl::OUString > m_aCachedToolBarPartResourceNames;
421+
std::vector< rtl::OUString > m_aCachedToolBarPartUINames;
408422
Sequence< Sequence< PropertyValue > > m_aCachedHelpMenuProperties;
409423
Reference< com::sun::star::util::XMacroExpander > m_xMacroExpander;
410424
ImageManager m_aImageManager;
@@ -442,6 +456,7 @@ AddonsOptions_Impl::AddonsOptions_Impl()
442456
m_aPropNames[ INDEX_ALIGN ] = PROPERTYNAME_ALIGN;
443457
m_aPropNames[ INDEX_AUTOSIZE ] = PROPERTYNAME_AUTOSIZE;
444458
m_aPropNames[ INDEX_OWNERDRAW ] = PROPERTYNAME_OWNERDRAW;
459+
m_aPropNames[ INDEX_TOOLBARITEMS ] = PROPERTYNAME_TOOLBARITEMS;
445460

446461
// initialize array with fixed images property names
447462
m_aPropImagesNames[ OFFSET_IMAGES_SMALL ] = PROPERTYNAME_IMAGESMALL;
@@ -515,11 +530,14 @@ void AddonsOptions_Impl::ReadConfigurationData()
515530
m_aCachedToolBarPartProperties = AddonToolBars();
516531
m_aCachedHelpMenuProperties = Sequence< Sequence< PropertyValue > >();
517532
m_aCachedToolBarPartResourceNames.clear();
533+
m_aCachedToolBarPartUINames.clear();
518534
m_aImageManager = ImageManager();
519535

520536
ReadAddonMenuSet( m_aCachedMenuProperties );
521537
ReadOfficeMenuBarSet( m_aCachedMenuBarPartProperties );
522-
ReadOfficeToolBarSet( m_aCachedToolBarPartProperties, m_aCachedToolBarPartResourceNames );
538+
ReadOfficeToolBarSet( m_aCachedToolBarPartProperties,
539+
m_aCachedToolBarPartResourceNames,
540+
m_aCachedToolBarPartUINames );
523541

524542
ReadOfficeHelpSet( m_aCachedHelpMenuProperties );
525543
ReadImages( m_aImageManager );
@@ -611,6 +629,15 @@ const ::rtl::OUString AddonsOptions_Impl::GetAddonsToolbarResourceName( sal_uInt
611629
return rtl::OUString();
612630
}
613631

632+
633+
const ::rtl::OUString AddonsOptions_Impl::GetAddonsToolbarUIName( sal_uInt32 nIndex ) const
634+
{
635+
if ( nIndex < m_aCachedToolBarPartUINames.size() )
636+
return m_aCachedToolBarPartUINames[nIndex];
637+
else
638+
return rtl::OUString();
639+
}
640+
614641
//*****************************************************************************************************************
615642
// public method
616643
//*****************************************************************************************************************
@@ -815,7 +842,10 @@ sal_Bool AddonsOptions_Impl::ReadOfficeMenuBarSet( Sequence< Sequence< PropertyV
815842
//*****************************************************************************************************************
816843
// private method
817844
//*****************************************************************************************************************
818-
sal_Bool AddonsOptions_Impl::ReadOfficeToolBarSet( AddonToolBars& rAddonOfficeToolBars, std::vector< rtl::OUString >& rAddonOfficeToolBarResNames )
845+
sal_Bool AddonsOptions_Impl::ReadOfficeToolBarSet(
846+
AddonToolBars& rAddonOfficeToolBars,
847+
std::vector< rtl::OUString >& rAddonOfficeToolBarResNames,
848+
std::vector< rtl::OUString >& rAddonOfficeToolBarUINames )
819849
{
820850
// Read the OfficeToolBar set and fill property sequences
821851
::rtl::OUString aAddonToolBarNodeName( RTL_CONSTASCII_USTRINGPARAM( "AddonUI/OfficeToolBar" ));
@@ -826,10 +856,24 @@ sal_Bool AddonsOptions_Impl::ReadOfficeToolBarSet( AddonToolBars& rAddonOfficeTo
826856

827857
for ( sal_uInt32 n = 0; n < nCount; n++ )
828858
{
829-
::rtl::OUString aToolBarItemNode( aAddonToolBarNode + aAddonToolBarNodeSeq[n] );
859+
::rtl::OUString aToolBarNode( aAddonToolBarNode + aAddonToolBarNodeSeq[n] + m_aPathDelimiter );
830860
rAddonOfficeToolBarResNames.push_back( aAddonToolBarNodeSeq[n] );
831861
rAddonOfficeToolBars.push_back( m_aEmptyAddonToolBar );
832-
ReadToolBarItemSet( aToolBarItemNode, rAddonOfficeToolBars[n] );
862+
863+
Sequence< Any > aToolBarNodeValues = GetProperties( GetPropertyNamesToolBar( aToolBarNode ) );
864+
865+
rtl::OUString aUIName;
866+
aToolBarNodeValues[OFFSET_TOOLBAR_TITLE] >>= aUIName;
867+
rAddonOfficeToolBarUINames.push_back( aUIName );
868+
869+
Reference < XInterface > xToolbarItems;
870+
if ( ( aToolBarNodeValues[OFFSET_TOOLBAR_TOOLBARITEMS] >>= xToolbarItems ) && xToolbarItems.is() )
871+
{
872+
::rtl::OUStringBuffer aBuffer;
873+
aBuffer.append( aToolBarNode );
874+
aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( STR_TOOLBARITEMS ) );
875+
ReadToolBarItemSet( aBuffer.makeStringAndClear(), rAddonOfficeToolBars[n] );
876+
}
833877
}
834878

835879
return ( !rAddonOfficeToolBars.empty() );
@@ -1812,6 +1856,17 @@ Sequence< ::rtl::OUString > AddonsOptions_Impl::GetPropertyNamesPopupMenu( const
18121856
//*****************************************************************************************************************
18131857
// private method
18141858
//*****************************************************************************************************************
1859+
Sequence< ::rtl::OUString > AddonsOptions_Impl::GetPropertyNamesToolBar( const ::rtl::OUString& aPropertyRootNode ) const
1860+
{
1861+
Sequence< ::rtl::OUString > lResult( PROPERTYCOUNT_TOOLBAR );
1862+
1863+
// Create property names dependent from the root node name
1864+
lResult[OFFSET_TOOLBAR_TITLE] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_TITLE ] );
1865+
lResult[OFFSET_TOOLBAR_TOOLBARITEMS] = ::rtl::OUString( aPropertyRootNode + m_aPropNames[ INDEX_TOOLBARITEMS ] );
1866+
1867+
return lResult;
1868+
}
1869+
18151870
Sequence< ::rtl::OUString > AddonsOptions_Impl::GetPropertyNamesToolBarItem( const ::rtl::OUString& aPropertyRootNode ) const
18161871
{
18171872
Sequence< ::rtl::OUString > lResult( PROPERTYCOUNT_TOOLBARITEM );
@@ -1971,6 +2026,12 @@ const ::rtl::OUString AddonsOptions::GetAddonsToolbarResourceName( sal_uInt32 nI
19712026
return m_pDataContainer->GetAddonsToolbarResourceName( nIndex );
19722027
}
19732028

2029+
const ::rtl::OUString AddonsOptions::GetAddonsToolbarUIName( sal_uInt32 nIndex ) const
2030+
{
2031+
MutexGuard aGuard( GetOwnStaticMutex() );
2032+
return m_pDataContainer->GetAddonsToolbarUIName( nIndex );
2033+
}
2034+
19742035
//*****************************************************************************************************************
19752036
// public method
19762037
//*****************************************************************************************************************

main/framework/source/layoutmanager/toolbarlayoutmanager.cxx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,7 +1005,8 @@ void ToolbarLayoutManager::implts_createAddonsToolBars()
10051005
}
10061006

10071007
::rtl::OUString aAddonUIName = m_pAddonOptions->GetAddonsToolbarUIName( i );
1008-
::rtl::OUString aAddonTitle = aAddonUIName.getLength() ?
1008+
const bool bAddonUIName = aAddonUIName.getLength();
1009+
::rtl::OUString aAddonTitle = bAddonUIName ?
10091010
aAddonUIName : implts_generateGenericAddonToolbarTitle( i+1 );
10101011

10111012
if ( aElement.m_aName.getLength() > 0 )
@@ -1014,7 +1015,7 @@ void ToolbarLayoutManager::implts_createAddonsToolBars()
10141015
// UI changes for this document.
10151016
implts_setElementData( aElement, xDockWindow );
10161017
aElement.m_xUIElement = xUIElement;
1017-
if ( aElement.m_aUIName.getLength() == 0 )
1018+
if ( aElement.m_aUIName.getLength() == 0 && !bAddonUIName)
10181019
{
10191020
aElement.m_aUIName = aAddonTitle;
10201021
implts_writeWindowStateData( aElement );
@@ -1027,7 +1028,7 @@ void ToolbarLayoutManager::implts_createAddonsToolBars()
10271028
aNewToolbar.m_bFloating = true;
10281029
implts_readWindowStateData( aAddonToolBarName, aNewToolbar );
10291030
implts_setElementData( aNewToolbar, xDockWindow );
1030-
if ( aNewToolbar.m_aUIName.getLength() == 0 )
1031+
if ( aNewToolbar.m_aUIName.getLength() == 0 && !bAddonUIName)
10311032
{
10321033
aNewToolbar.m_aUIName = aAddonTitle;
10331034
implts_writeWindowStateData( aNewToolbar );

main/officecfg/registry/schema/org/openoffice/Office/Addons.xcs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,22 @@
157157
</info>
158158
</set>
159159
</group>
160+
<group oor:name="ToolBar">
161+
<info>
162+
<desc>Contains the structure of a toolbar.</desc>
163+
</info>
164+
<prop oor:name="Title" oor:type="xs:string" oor:localized="true">
165+
<info>
166+
<desc>A localized string used as the toolbar title.</desc>
167+
</info>
168+
<value></value>
169+
</prop>
170+
<set oor:name="ToolBarItems" oor:node-type="ToolBarItem">
171+
<info>
172+
<desc>Contains a list of sets of toolbar items that are part of add-on toolbars.</desc>
173+
</info>
174+
</set>
175+
</group>
160176
<group oor:name="ToolBarItem">
161177
<info>
162178
<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 @@
400416
<desc>Contains a list of menu merging instructions of different add-ons.</desc>
401417
</info>
402418
</set>
403-
<set oor:name="OfficeToolBar" oor:node-type="ToolBarItems">
404-
<info>
405-
<desc>Contains a list of sets of toolbar items that are part of add-on toolbars.</desc>
406-
</info>
419+
<set oor:name="OfficeToolBar" oor:node-type="ToolBar">
420+
<info>
421+
<desc>Contains a lists of addon toolbars.</desc>
422+
</info>
407423
</set>
408424
<set oor:name="OfficeToolbarMerging" oor:node-type="MergeToolBarItems">
409425
<info>

0 commit comments

Comments
 (0)