Kaydet (Commit) 318c3a48 authored tarafından Maxim Monastirsky's avatar Maxim Monastirsky

tdf#93837 Support nice UI names for context menus

Can be configured in various *WindowState.xcu files,
like toolbars.

Change-Id: I55a827344f03b31491cb793b9b211b59ff92287c
üst 5c6119ee
......@@ -1351,12 +1351,40 @@ ContextMenuSaveInData::ContextMenuSaveInData(
const OUString& aModuleId, bool bIsDocConfig )
: SaveInData( xCfgMgr, xParentCfgMgr, aModuleId, bIsDocConfig )
{
css::uno::Reference< css::uno::XComponentContext > xContext( comphelper::getProcessComponentContext() );
css::uno::Reference< css::container::XNameAccess > xConfig( css::ui::theWindowStateConfiguration::get( xContext ) );
xConfig->getByName( aModuleId ) >>= m_xPersistentWindowState;
}
ContextMenuSaveInData::~ContextMenuSaveInData()
{
}
OUString ContextMenuSaveInData::GetUIName( const OUString& rResourceURL )
{
if ( m_xPersistentWindowState.is() )
{
css::uno::Sequence< css::beans::PropertyValue > aProps;
try
{
m_xPersistentWindowState->getByName( rResourceURL ) >>= aProps;
}
catch ( const css::uno::Exception& )
{}
for ( const auto& aProp : aProps )
{
if ( aProp.Name == ITEM_DESCRIPTOR_UINAME )
{
OUString aResult;
aProp.Value >>= aResult;
return aResult;
}
}
}
return OUString();
}
SvxEntries* ContextMenuSaveInData::GetEntries()
{
if ( !m_pRootEntry )
......@@ -1393,14 +1421,17 @@ SvxEntries* ContextMenuSaveInData::GetEntries()
if ( xPopupMenu.is() )
{
OUString aMenuName = aUrl.copy( aUrl.lastIndexOf( '/' ) + 1 );
OUString aUIMenuName = GetUIName( aUrl );
if ( aUIMenuName.isEmpty() )
aUIMenuName = aMenuName;
// insert into std::unordered_map to filter duplicates from the parent
aMenuInfo.insert( MenuInfo::value_type( aMenuName, true ) );
SvxConfigEntry* pEntry = new SvxConfigEntry( aMenuName, aUrl, true );
SvxConfigEntry* pEntry = new SvxConfigEntry( aUIMenuName, aUrl, true );
pEntry->SetMain();
m_pRootEntry->GetEntries()->push_back( pEntry );
LoadSubMenus( xPopupMenu, aMenuName, pEntry );
LoadSubMenus( xPopupMenu, aUIMenuName, pEntry );
}
}
......@@ -1438,10 +1469,14 @@ SvxEntries* ContextMenuSaveInData::GetEntries()
if ( xPopupMenu.is() )
{
SvxConfigEntry* pEntry = new SvxConfigEntry( aMenuName, aUrl, true, true );
OUString aUIMenuName = GetUIName( aUrl );
if ( aUIMenuName.isEmpty() )
aUIMenuName = aMenuName;
SvxConfigEntry* pEntry = new SvxConfigEntry( aUIMenuName, aUrl, true, true );
pEntry->SetMain();
m_pRootEntry->GetEntries()->push_back( pEntry );
LoadSubMenus( xPopupMenu, aMenuName, pEntry );
LoadSubMenus( xPopupMenu, aUIMenuName, pEntry );
}
}
std::sort( m_pRootEntry->GetEntries()->begin(), m_pRootEntry->GetEntries()->end(), EntrySort );
......
......@@ -204,6 +204,8 @@ class ContextMenuSaveInData : public SaveInData
{
private:
std::unique_ptr< SvxConfigEntry > m_pRootEntry;
css::uno::Reference< css::container::XNameAccess > m_xPersistentWindowState;
OUString GetUIName( const OUString& rResourceURL );
public:
ContextMenuSaveInData(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment