cui/source/customize/cfg.cxx |  393 ++-----------------------------------------
 cui/source/inc/cfg.hxx       |  312 ++++++++++++++++++++++++++++++++++
 2 files changed, 335 insertions(+), 370 deletions(-)

New commits:
commit 2ee84fe096f9bfaf141a1cad57f1103be688c744
Author: Muhammet Kara <muhammet.k...@pardus.org.tr>
Date:   Fri Jun 30 09:35:27 2017 +0300

    Cleanup duplicate functions in cfg.cxx
    
    And move all helper functions to the temporary namespace killmelater
    
    Change-Id: If74102209a05b8d28c96d51a623ac14c1700630c
    Reviewed-on: https://gerrit.libreoffice.org/39404
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Katarina Behrens <katarina.behr...@cib.de>
    Reviewed-on: https://gerrit.libreoffice.org/40302
    Reviewed-by: Muhammet Kara <muhammet.k...@pardus.org.tr>

diff --git a/cui/source/customize/cfg.cxx b/cui/source/customize/cfg.cxx
index 2c158554a48a..89d6db93a34e 100644
--- a/cui/source/customize/cfg.cxx
+++ b/cui/source/customize/cfg.cxx
@@ -45,7 +45,6 @@
 #include <sfx2/request.hxx>
 #include <sfx2/filedlghelper.hxx>
 #include <svl/stritem.hxx>
-#include <svtools/miscopt.hxx>
 #include <svtools/svlbitm.hxx>
 #include "svtools/treelistentry.hxx"
 #include "svtools/viewdataentry.hxx"
@@ -63,9 +62,6 @@
 #include "eventdlg.hxx"
 #include <dialmgr.hxx>
 
-#include <comphelper/documentinfo.hxx>
-#include <comphelper/processfactory.hxx>
-#include <comphelper/random.hxx>
 #include <unotools/configmgr.hxx>
 #include <o3tl/make_unique.hxx>
 #include <com/sun/star/embed/ElementModes.hpp>
@@ -74,7 +70,6 @@
 #include <com/sun/star/frame/XFrames.hpp>
 #include <com/sun/star/frame/XLayoutManager.hpp>
 #include <com/sun/star/frame/FrameSearchFlag.hpp>
-#include <com/sun/star/frame/ModuleManager.hpp>
 #include <com/sun/star/frame/XController.hpp>
 #include <com/sun/star/frame/Desktop.hpp>
 #include <com/sun/star/frame/theUICommandDescription.hpp>
@@ -104,15 +99,6 @@
 
 #define ENTRY_HEIGHT 16
 
-static const char ITEM_DESCRIPTOR_COMMANDURL[]  = "CommandURL";
-static const char ITEM_DESCRIPTOR_CONTAINER[]   = "ItemDescriptorContainer";
-static const char ITEM_DESCRIPTOR_LABEL[]       = "Label";
-static const char ITEM_DESCRIPTOR_TYPE[]        = "Type";
-static const char ITEM_DESCRIPTOR_STYLE[]       = "Style";
-static const char ITEM_DESCRIPTOR_ISVISIBLE[]   = "IsVisible";
-static const char ITEM_DESCRIPTOR_RESOURCEURL[] = "ResourceURL";
-static const char ITEM_DESCRIPTOR_UINAME[]      = "UIName";
-
 namespace uno = com::sun::star::uno;
 namespace frame = com::sun::star::frame;
 namespace lang = com::sun::star::lang;
@@ -184,308 +170,12 @@ void printEntries(SvxEntries* entries)
 
 #endif
 
-OUString
-stripHotKey( const OUString& str )
-{
-    sal_Int32 index = str.indexOf( '~' );
-    if ( index == -1 )
-    {
-        return str;
-    }
-    else
-    {
-        return str.replaceAt( index, 1, OUString() );
-    }
-}
-
-OUString
-replaceSixteen( const OUString& str, sal_Int32 nReplacement )
-{
-    OUString result( str );
-    OUString sixteen = OUString::number( 16 );
-    OUString expected = OUString::number( nReplacement );
-
-    sal_Int32 len = sixteen.getLength();
-    sal_Int32 index = result.indexOf( sixteen );
-
-    while ( index != -1 )
-    {
-        result = result.replaceAt( index, len, expected );
-        index = result.indexOf( sixteen, index );
-    }
-
-    return result;
-}
-
-OUString
-generateCustomMenuURL(
-    SvxEntries* entries,
-    sal_Int32 suffix = 1 )
-{
-    OUString url = "vnd.openoffice.org:CustomMenu" + OUString::number( suffix 
);
-    if (!entries)
-        return url;
-
-    // now check is there is an already existing entry with this url
-    SvxEntries::const_iterator iter = entries->begin();
-
-    while ( iter != entries->end() )
-    {
-        SvxConfigEntry* pEntry = *iter;
-
-        if ( url == pEntry->GetCommand() )
-        {
-            break;
-        }
-        ++iter;
-    }
-
-    if ( iter != entries->end() )
-    {
-        // url already exists so try the next number up
-        return generateCustomMenuURL( entries, ++suffix );
-    }
-
-    return url;
-}
-
-void RemoveEntry( SvxEntries* pEntries, SvxConfigEntry* pChildEntry )
-{
-    SvxEntries::iterator iter = pEntries->begin();
-
-    while ( iter != pEntries->end() )
-    {
-        if ( pChildEntry == *iter )
-        {
-            pEntries->erase( iter );
-            break;
-        }
-        ++iter;
-    }
-}
-
 bool
 SvxConfigPage::CanConfig( const OUString& aModuleId )
 {
     return !(aModuleId == "com.sun.star.script.BasicIDE" || aModuleId == 
"com.sun.star.frame.Bibliography");
 }
 
-OUString GetModuleName( const OUString& aModuleId )
-{
-    if ( aModuleId == "com.sun.star.text.TextDocument" ||
-         aModuleId == "com.sun.star.text.GlobalDocument" )
-        return OUString("Writer");
-    else if ( aModuleId == "com.sun.star.text.WebDocument" )
-        return OUString("Writer/Web");
-    else if ( aModuleId == "com.sun.star.drawing.DrawingDocument" )
-        return OUString("Draw");
-    else if ( aModuleId == "com.sun.star.presentation.PresentationDocument" )
-        return OUString("Impress");
-    else if ( aModuleId == "com.sun.star.sheet.SpreadsheetDocument" )
-        return OUString("Calc");
-    else if ( aModuleId == "com.sun.star.script.BasicIDE" )
-        return OUString("Basic");
-    else if ( aModuleId == "com.sun.star.formula.FormulaProperties" )
-        return OUString("Math");
-    else if ( aModuleId == "com.sun.star.sdb.RelationDesign" )
-        return OUString("Relation Design");
-    else if ( aModuleId == "com.sun.star.sdb.QueryDesign" )
-        return OUString("Query Design");
-    else if ( aModuleId == "com.sun.star.sdb.TableDesign" )
-        return OUString("Table Design");
-    else if ( aModuleId == "com.sun.star.sdb.DataSourceBrowser" )
-        return OUString("Data Source Browser" );
-    else if ( aModuleId == "com.sun.star.sdb.DatabaseDocument" )
-        return OUString("Database" );
-
-    return OUString();
-}
-
-OUString GetUIModuleName( const OUString& aModuleId, const uno::Reference< 
css::frame::XModuleManager2 >& rModuleManager )
-{
-    assert(rModuleManager.is());
-
-    OUString aModuleUIName;
-
-    try
-    {
-        uno::Any a = rModuleManager->getByName( aModuleId );
-        uno::Sequence< beans::PropertyValue > aSeq;
-
-        if ( a >>= aSeq )
-        {
-            for ( sal_Int32 i = 0; i < aSeq.getLength(); ++i )
-            {
-                if ( aSeq[i].Name == "ooSetupFactoryUIName" )
-                {
-                    aSeq[i].Value >>= aModuleUIName;
-                    break;
-                }
-            }
-        }
-    }
-    catch ( uno::RuntimeException& )
-    {
-        throw;
-    }
-    catch ( uno::Exception& )
-    {
-    }
-
-    if ( aModuleUIName.isEmpty() )
-        aModuleUIName = GetModuleName( aModuleId );
-
-    return aModuleUIName;
-}
-
-bool GetMenuItemData(
-    const uno::Reference< container::XIndexAccess >& rItemContainer,
-    sal_Int32 nIndex,
-    OUString& rCommandURL,
-    OUString& rLabel,
-    sal_uInt16& rType,
-    uno::Reference< container::XIndexAccess >& rSubMenu )
-{
-    try
-    {
-        uno::Sequence< beans::PropertyValue > aProp;
-        if ( rItemContainer->getByIndex( nIndex ) >>= aProp )
-        {
-            for ( sal_Int32 i = 0; i < aProp.getLength(); ++i )
-            {
-                if ( aProp[i].Name == ITEM_DESCRIPTOR_COMMANDURL )
-                {
-                    aProp[i].Value >>= rCommandURL;
-                }
-                else if ( aProp[i].Name == ITEM_DESCRIPTOR_CONTAINER )
-                {
-                    aProp[i].Value >>= rSubMenu;
-                }
-                else if ( aProp[i].Name == ITEM_DESCRIPTOR_LABEL )
-                {
-                    aProp[i].Value >>= rLabel;
-                }
-                else if ( aProp[i].Name == ITEM_DESCRIPTOR_TYPE )
-                {
-                    aProp[i].Value >>= rType;
-                }
-            }
-
-            return true;
-        }
-    }
-    catch ( css::lang::IndexOutOfBoundsException& )
-    {
-    }
-
-    return false;
-}
-
-bool GetToolbarItemData(
-    const uno::Reference< container::XIndexAccess >& rItemContainer,
-    sal_Int32 nIndex,
-    OUString& rCommandURL,
-    OUString& rLabel,
-    sal_uInt16& rType,
-    bool& rIsVisible,
-    sal_Int32& rStyle )
-{
-    try
-    {
-        uno::Sequence< beans::PropertyValue > aProp;
-        if ( rItemContainer->getByIndex( nIndex ) >>= aProp )
-        {
-            for ( sal_Int32 i = 0; i < aProp.getLength(); ++i )
-            {
-                if ( aProp[i].Name == ITEM_DESCRIPTOR_COMMANDURL )
-                {
-                    aProp[i].Value >>= rCommandURL;
-                }
-                else if ( aProp[i].Name == ITEM_DESCRIPTOR_STYLE )
-                {
-                    aProp[i].Value >>= rStyle;
-                }
-                else if ( aProp[i].Name == ITEM_DESCRIPTOR_LABEL )
-                {
-                    aProp[i].Value >>= rLabel;
-                }
-                else if ( aProp[i].Name == ITEM_DESCRIPTOR_TYPE )
-                {
-                    aProp[i].Value >>= rType;
-                }
-                else if ( aProp[i].Name == ITEM_DESCRIPTOR_ISVISIBLE )
-                {
-                    aProp[i].Value >>= rIsVisible;
-                }
-            }
-
-            return true;
-        }
-    }
-    catch ( css::lang::IndexOutOfBoundsException& )
-    {
-    }
-
-    return false;
-}
-
-uno::Sequence< beans::PropertyValue >
-ConvertSvxConfigEntry( const SvxConfigEntry* pEntry )
-{
-    uno::Sequence< beans::PropertyValue > aPropSeq( 3 );
-
-    aPropSeq[0].Name = ITEM_DESCRIPTOR_COMMANDURL;
-    aPropSeq[0].Value <<= pEntry->GetCommand();
-
-    aPropSeq[1].Name = ITEM_DESCRIPTOR_TYPE;
-    aPropSeq[1].Value <<= css::ui::ItemType::DEFAULT;
-
-    // If the name has not been changed, then the label can be stored
-    // as an empty string.
-    // It will be initialised again later using the command to label map.
-    aPropSeq[2].Name = ITEM_DESCRIPTOR_LABEL;
-    if ( !pEntry->HasChangedName() && !pEntry->GetCommand().isEmpty() )
-    {
-        aPropSeq[2].Value <<= OUString();
-    }
-    else
-    {
-        aPropSeq[2].Value <<= pEntry->GetName();
-    }
-
-    return aPropSeq;
-}
-
-uno::Sequence< beans::PropertyValue >
-ConvertToolbarEntry( const SvxConfigEntry* pEntry )
-{
-    uno::Sequence< beans::PropertyValue > aPropSeq( 4 );
-
-    aPropSeq[0].Name = ITEM_DESCRIPTOR_COMMANDURL;
-    aPropSeq[0].Value <<= pEntry->GetCommand();
-
-    aPropSeq[1].Name = ITEM_DESCRIPTOR_TYPE;
-    aPropSeq[1].Value <<= css::ui::ItemType::DEFAULT;
-
-    // If the name has not been changed, then the label can be stored
-    // as an empty string.
-    // It will be initialised again later using the command to label map.
-    aPropSeq[2].Name = ITEM_DESCRIPTOR_LABEL;
-    if ( !pEntry->HasChangedName() && !pEntry->GetCommand().isEmpty() )
-    {
-        aPropSeq[2].Value <<= OUString();
-    }
-    else
-    {
-        aPropSeq[2].Value <<= pEntry->GetName();
-    }
-
-    aPropSeq[3].Name = ITEM_DESCRIPTOR_ISVISIBLE;
-    aPropSeq[3].Value <<= pEntry->IsVisible();
-
-    return aPropSeq;
-}
-
 VclPtr<SfxTabPage> CreateSvxMenuConfigPage( vcl::Window *pParent, const 
SfxItemSet* rSet )
 {
     return VclPtr<SvxMenuConfigPage>::Create( pParent, *rSet );
@@ -511,43 +201,6 @@ VclPtr<SfxTabPage> CreateSvxEventConfigPage( vcl::Window 
*pParent, const SfxItem
     return VclPtr<SvxEventConfigPage>::Create( pParent, *rSet, 
SvxEventConfigPage::EarlyInit() );
 }
 
-namespace {
-
-bool showKeyConfigTabPage( const css::uno::Reference< css::frame::XFrame >& 
xFrame )
-{
-    if (!xFrame.is())
-    {
-        return false;
-    }
-    OUString sModuleId(
-        css::frame::ModuleManager::create(
-            comphelper::getProcessComponentContext())
-        ->identify(xFrame));
-    return !sModuleId.isEmpty()
-        && sModuleId != "com.sun.star.frame.StartModule";
-}
-
-bool EntrySort( SvxConfigEntry* a, SvxConfigEntry* b )
-{
-    return a->GetName().compareTo( b->GetName() ) < 0;
-}
-
-bool SvxConfigEntryModified( SvxConfigEntry* pEntry )
-{
-    SvxEntries* pEntries = pEntry->GetEntries();
-    if ( !pEntries )
-        return false;
-
-    for ( const auto& entry : *pEntries )
-    {
-        if ( entry->IsModified() || SvxConfigEntryModified( entry ) )
-            return true;
-    }
-    return false;
-}
-
-}
-
 /******************************************************************************
  *
  * SvxConfigDialog is the configuration dialog which is brought up from the
@@ -590,7 +243,7 @@ void SvxConfigDialog::SetFrame(const css::uno::Reference< 
css::frame::XFrame >&
 {
     m_xFrame = xFrame;
 
-    if (!showKeyConfigTabPage( xFrame ))
+    if (!killmelater::showKeyConfigTabPage( xFrame ))
         RemoveTabPage(m_nKeyboardPageId);
 }
 
@@ -817,7 +470,7 @@ bool SaveInData::LoadSubMenus( const uno::Reference< 
container::XIndexAccess >&
 
         sal_uInt16 nType( css::ui::ItemType::DEFAULT );
 
-        bool bItem = GetMenuItemData( xMenuSettings, nIndex,
+        bool bItem = killmelater::GetMenuItemData( xMenuSettings, nIndex,
             aCommandURL, aLabel, nType, xSubMenu );
 
         if ( bItem )
@@ -895,7 +548,7 @@ bool SaveInData::LoadSubMenus( const uno::Reference< 
container::XIndexAccess >&
                         pEntry->SetMain();
                     }
 
-                    subMenuTitle += stripHotKey( aLabel );
+                    subMenuTitle += killmelater::stripHotKey( aLabel );
 
                     LoadSubMenus( xSubMenu, subMenuTitle, pEntry, bContextMenu 
);
                 }
@@ -976,7 +629,7 @@ void MenuSaveInData::Apply(
         SvxConfigEntry* pEntryData = *iter;
 
         uno::Sequence< beans::PropertyValue > aPropValueSeq =
-            ConvertSvxConfigEntry( pEntryData );
+            killmelater::ConvertSvxConfigEntry( pEntryData );
 
         uno::Reference< container::XIndexContainer > xSubMenuBar(
             rFactory->createInstanceWithContext( xContext ),
@@ -1009,7 +662,7 @@ void SaveInData::ApplyMenu(
         if ( pEntry->IsPopup() )
         {
             uno::Sequence< beans::PropertyValue > aPropValueSeq =
-                ConvertSvxConfigEntry( pEntry );
+                killmelater::ConvertSvxConfigEntry( pEntry );
 
             uno::Reference< container::XIndexContainer > xSubMenuBar(
                 rFactory->createInstanceWithContext( xContext ),
@@ -1034,7 +687,7 @@ void SaveInData::ApplyMenu(
         else
         {
             uno::Sequence< beans::PropertyValue > aPropValueSeq =
-                ConvertSvxConfigEntry( pEntry );
+                killmelater::ConvertSvxConfigEntry( pEntry );
             rMenuBar->insertByIndex(
                 rMenuBar->getCount(), uno::Any( aPropValueSeq ));
         }
@@ -1204,7 +857,7 @@ SvxEntries* ContextMenuSaveInData::GetEntries()
                 LoadSubMenus( xPopupMenu, aUIMenuName, pEntry, true );
             }
         }
-        std::sort( m_pRootEntry->GetEntries()->begin(), 
m_pRootEntry->GetEntries()->end(), EntrySort );
+        std::sort( m_pRootEntry->GetEntries()->begin(), 
m_pRootEntry->GetEntries()->end(), killmelater::EntrySort );
     }
     return m_pRootEntry->GetEntries();
 }
@@ -1238,7 +891,7 @@ bool ContextMenuSaveInData::Apply()
     SvxEntries* pEntries = GetEntries();
     for ( const auto& pEntry : *pEntries )
     {
-        if ( pEntry->IsModified() || SvxConfigEntryModified( pEntry ) )
+        if ( pEntry->IsModified() || killmelater::SvxConfigEntryModified( 
pEntry ) )
         {
             css::uno::Reference< css::container::XIndexContainer > 
xIndexContainer( GetConfigManager()->createSettings(), css::uno::UNO_QUERY );
             css::uno::Reference< css::lang::XSingleComponentFactory > 
xFactory( xIndexContainer, css::uno::UNO_QUERY );
@@ -1582,7 +1235,7 @@ void SvxConfigPage::Reset( const SfxItemSet* )
         // replace %MODULENAME in the label with the correct module name
         uno::Reference< css::frame::XModuleManager2 > xModuleManager(
             css::frame::ModuleManager::create( xContext ));
-        OUString aModuleName = GetUIModuleName( aModuleId, xModuleManager );
+        OUString aModuleName = killmelater::GetUIModuleName( aModuleId, 
xModuleManager );
 
         OUString title = m_pTopLevel->get_label();
         OUString aSearchString("%MODULENAME" );
@@ -1871,13 +1524,13 @@ void SvxConfigPage::ReloadTopLevelListBox( 
SvxConfigEntry* pToSelect )
         for ( ; iter != end; ++iter )
         {
             SvxConfigEntry* pEntryData = *iter;
-            const sal_Int32 nPos = m_pTopLevelListBox->InsertEntry( 
stripHotKey( pEntryData->GetName() ) );
+            const sal_Int32 nPos = m_pTopLevelListBox->InsertEntry( 
killmelater::stripHotKey( pEntryData->GetName() ) );
             m_pTopLevelListBox->SetEntryData( nPos, pEntryData );
 
             if ( pEntryData == pToSelect )
                 nSelectionPos = nPos;
 
-            AddSubMenusToUI( stripHotKey( pEntryData->GetName() ), pEntryData 
);
+            AddSubMenusToUI( killmelater::stripHotKey( pEntryData->GetName() 
), pEntryData );
         }
     }
 #ifdef DBG_UTIL
@@ -1908,7 +1561,7 @@ void SvxConfigPage::AddSubMenusToUI(
 
         if ( pEntryData->IsPopup() )
         {
-            OUString subMenuTitle = rBaseTitle + aMenuSeparatorStr + 
stripHotKey( pEntryData->GetName() );
+            OUString subMenuTitle = rBaseTitle + aMenuSeparatorStr + 
killmelater::stripHotKey( pEntryData->GetName() );
 
             const sal_Int32 nPos = m_pTopLevelListBox->InsertEntry( 
subMenuTitle );
             m_pTopLevelListBox->SetEntryData( nPos, pEntryData );
@@ -2071,7 +1724,7 @@ SvTreeListEntry* SvxConfigPage::InsertEntryIntoUI(
     }
     else
     {
-        OUString aName = stripHotKey( pNewEntryData->GetName() );
+        OUString aName = killmelater::stripHotKey( pNewEntryData->GetName() );
 
         Image aImage = GetSaveInData()->GetImage(
             pNewEntryData->GetCommand());
@@ -2166,7 +1819,7 @@ bool SvxConfigPage::MoveEntryData(
     if ( pSourceData != nullptr && pTargetData != nullptr )
     {
         // remove the source entry from our list
-        RemoveEntry( pEntries, pSourceData );
+        killmelater::RemoveEntry( pEntries, pSourceData );
 
         SvxEntries::iterator iter = pEntries->begin();
         SvxEntries::const_iterator end = pEntries->end();
@@ -2212,7 +1865,7 @@ SvxMainMenuOrganizerDialog::SvxMainMenuOrganizerDialog(
         {
             SvxConfigEntry* pEntry = *iter;
             SvTreeListEntry* pLBEntry =
-                m_pMenuListBox->InsertEntry( stripHotKey( pEntry->GetName() ) 
);
+                m_pMenuListBox->InsertEntry( killmelater::stripHotKey( 
pEntry->GetName() ) );
             pLBEntry->SetUserData( pEntry );
             mpEntries->push_back( pEntry );
 
@@ -2230,7 +1883,7 @@ SvxMainMenuOrganizerDialog::SvxMainMenuOrganizerDialog(
         OUString prefix = CuiResId( RID_SVXSTR_NEW_MENU );
 
         OUString newname = killmelater::generateCustomName( prefix, entries );
-        OUString newurl = generateCustomMenuURL( mpEntries );
+        OUString newurl = killmelater::generateCustomMenuURL( mpEntries );
 
         SvxConfigEntry* pNewEntryData =
             new SvxConfigEntry( newname, newurl, true );
@@ -2239,7 +1892,7 @@ SvxMainMenuOrganizerDialog::SvxMainMenuOrganizerDialog(
         pNewEntryData->SetMain();
 
         pNewMenuEntry =
-            m_pMenuListBox->InsertEntry( stripHotKey( pNewEntryData->GetName() 
) );
+            m_pMenuListBox->InsertEntry( killmelater::stripHotKey( 
pNewEntryData->GetName() ) );
         m_pMenuListBox->Select( pNewMenuEntry );
 
         pNewMenuEntry->SetUserData( pNewEntryData );
@@ -2818,7 +2471,7 @@ SvxEntries* ToolbarSaveInData::GetEntries()
             }
         }
 
-        std::sort( GetEntries()->begin(), GetEntries()->end(), EntrySort );
+        std::sort( GetEntries()->begin(), GetEntries()->end(), 
killmelater::EntrySort );
     }
 
     return pRootEntry->GetEntries();
@@ -2924,7 +2577,7 @@ void ToolbarSaveInData::ApplyToolbar(
         if ( pEntry->IsPopup() )
         {
             uno::Sequence< beans::PropertyValue > aPropValueSeq =
-                ConvertToolbarEntry( pEntry );
+                killmelater::ConvertToolbarEntry( pEntry );
 
             uno::Reference< container::XIndexContainer > xSubMenuBar(
                 rFactory->createInstanceWithContext( xContext ),
@@ -2947,7 +2600,7 @@ void ToolbarSaveInData::ApplyToolbar(
         else
         {
             uno::Sequence< beans::PropertyValue > aPropValueSeq =
-                ConvertToolbarEntry( pEntry );
+                killmelater::ConvertToolbarEntry( pEntry );
 
             rToolbarBar->insertByIndex(
                 rToolbarBar->getCount(), uno::Any( aPropValueSeq ));
@@ -3055,7 +2708,7 @@ void ToolbarSaveInData::RemoveToolbar( SvxConfigEntry* 
pToolbar )
     {
         OUString url = pToolbar->GetCommand();
         GetConfigManager()->removeSettings( url );
-        RemoveEntry( GetEntries(), pToolbar );
+        killmelater::RemoveEntry( GetEntries(), pToolbar );
         delete pToolbar;
 
         PersistChanges( GetConfigManager() );
@@ -3152,7 +2805,7 @@ void ToolbarSaveInData::LoadToolbar(
 
         sal_uInt16 nType( css::ui::ItemType::DEFAULT );
 
-        bool bItem = GetToolbarItemData( xToolbarSettings, nIndex, aCommandURL,
+        bool bItem = killmelater::GetToolbarItemData( xToolbarSettings, 
nIndex, aCommandURL,
             aLabel, nType, bIsVisible, nStyle );
 
         if ( bItem )
@@ -3275,7 +2928,7 @@ SvxIconSelectorDialog::SvxIconSelectorDialog( vcl::Window 
*pWindow,
 
     if ( m_nExpectedSize != 16 )
     {
-        pFtNote->SetText( replaceSixteen( pFtNote->GetText(), m_nExpectedSize 
) );
+        pFtNote->SetText( killmelater::replaceSixteen( pFtNote->GetText(), 
m_nExpectedSize ) );
     }
 
     uno::Reference< uno::XComponentContext > xComponentContext =
diff --git a/cui/source/inc/cfg.hxx b/cui/source/inc/cfg.hxx
index 9f6290703c82..44e738f8a419 100644
--- a/cui/source/inc/cfg.hxx
+++ b/cui/source/inc/cfg.hxx
@@ -41,8 +41,10 @@
 #include <com/sun/star/ui/XUIConfigurationManager.hpp>
 #include <com/sun/star/ui/XImageManager.hpp>
 #include <com/sun/star/ui/ImageType.hpp>
+#include <com/sun/star/ui/ItemType.hpp>
 #include <com/sun/star/graphic/XGraphicProvider.hpp>
 #include <com/sun/star/frame/XFrame.hpp>
+#include <com/sun/star/frame/ModuleManager.hpp>
 #include <com/sun/star/uno/XComponentContext.hpp>
 #include <com/sun/star/lang/XSingleComponentFactory.hpp>
 
@@ -53,6 +55,15 @@
 
 #include "cfgutil.hxx"
 
+static const char ITEM_DESCRIPTOR_COMMANDURL[]  = "CommandURL";
+static const char ITEM_DESCRIPTOR_CONTAINER[]   = "ItemDescriptorContainer";
+static const char ITEM_DESCRIPTOR_LABEL[]       = "Label";
+static const char ITEM_DESCRIPTOR_TYPE[]        = "Type";
+static const char ITEM_DESCRIPTOR_STYLE[]       = "Style";
+static const char ITEM_DESCRIPTOR_ISVISIBLE[]   = "IsVisible";
+static const char ITEM_DESCRIPTOR_RESOURCEURL[] = "ResourceURL";
+static const char ITEM_DESCRIPTOR_UINAME[]      = "UIName";
+
 static const char ITEM_MENUBAR_URL[] = "private:resource/menubar/menubar";
 static const char ITEM_TOOLBAR_URL[] = "private:resource/toolbar/";
 
@@ -717,6 +728,25 @@ stripHotKey( const OUString& str )
     }
 }
 
+inline OUString
+replaceSixteen( const OUString& str, sal_Int32 nReplacement )
+{
+    OUString result( str );
+    OUString sixteen = OUString::number( 16 );
+    OUString expected = OUString::number( nReplacement );
+
+    sal_Int32 len = sixteen.getLength();
+    sal_Int32 index = result.indexOf( sixteen );
+
+    while ( index != -1 )
+    {
+        result = result.replaceAt( index, len, expected );
+        index = result.indexOf( sixteen, index );
+    }
+
+    return result;
+}
+
 static sal_Int16 theImageType =
     css::ui::ImageType::COLOR_NORMAL |
     css::ui::ImageType::SIZE_DEFAULT;
@@ -826,6 +856,38 @@ generateCustomName(
     return name;
 }
 
+inline OUString
+generateCustomMenuURL(
+    SvxEntries* entries,
+    sal_Int32 suffix = 1 )
+{
+    OUString url = "vnd.openoffice.org:CustomMenu" + OUString::number( suffix 
);
+    if (!entries)
+        return url;
+
+    // now check is there is an already existing entry with this url
+    SvxEntries::const_iterator iter = entries->begin();
+
+    while ( iter != entries->end() )
+    {
+        SvxConfigEntry* pEntry = *iter;
+
+        if ( url.equals( pEntry->GetCommand() ) )
+        {
+            break;
+        }
+        ++iter;
+    }
+
+    if ( iter != entries->end() )
+    {
+        // url already exists so try the next number up
+        return generateCustomMenuURL( entries, ++suffix );
+    }
+
+    return url;
+}
+
 inline sal_uInt32 generateRandomValue()
 {
     return comphelper::rng::uniform_uint_distribution(0, 
std::numeric_limits<unsigned int>::max());
@@ -864,6 +926,256 @@ generateCustomURL(
     return url;
 }
 
+inline OUString GetModuleName( const OUString& aModuleId )
+{
+    if ( aModuleId == "com.sun.star.text.TextDocument" ||
+         aModuleId == "com.sun.star.text.GlobalDocument" )
+        return OUString("Writer");
+    else if ( aModuleId == "com.sun.star.text.WebDocument" )
+        return OUString("Writer/Web");
+    else if ( aModuleId == "com.sun.star.drawing.DrawingDocument" )
+        return OUString("Draw");
+    else if ( aModuleId == "com.sun.star.presentation.PresentationDocument" )
+        return OUString("Impress");
+    else if ( aModuleId == "com.sun.star.sheet.SpreadsheetDocument" )
+        return OUString("Calc");
+    else if ( aModuleId == "com.sun.star.script.BasicIDE" )
+        return OUString("Basic");
+    else if ( aModuleId == "com.sun.star.formula.FormulaProperties" )
+        return OUString("Math");
+    else if ( aModuleId == "com.sun.star.sdb.RelationDesign" )
+        return OUString("Relation Design");
+    else if ( aModuleId == "com.sun.star.sdb.QueryDesign" )
+        return OUString("Query Design");
+    else if ( aModuleId == "com.sun.star.sdb.TableDesign" )
+        return OUString("Table Design");
+    else if ( aModuleId == "com.sun.star.sdb.DataSourceBrowser" )
+        return OUString("Data Source Browser" );
+    else if ( aModuleId == "com.sun.star.sdb.DatabaseDocument" )
+        return OUString("Database" );
+
+    return OUString();
+}
+
+inline OUString GetUIModuleName( const OUString& aModuleId, const 
css::uno::Reference< css::frame::XModuleManager2 >& rModuleManager )
+{
+    assert(rModuleManager.is());
+
+    OUString aModuleUIName;
+
+    try
+    {
+        css::uno::Any a = rModuleManager->getByName( aModuleId );
+        css::uno::Sequence< css::beans::PropertyValue > aSeq;
+
+        if ( a >>= aSeq )
+        {
+            for ( sal_Int32 i = 0; i < aSeq.getLength(); ++i )
+            {
+                if ( aSeq[i].Name == "ooSetupFactoryUIName" )
+                {
+                    aSeq[i].Value >>= aModuleUIName;
+                    break;
+                }
+            }
+        }
+    }
+    catch ( css::uno::RuntimeException& )
+    {
+        throw;
+    }
+    catch ( css::uno::Exception& )
+    {
+    }
+
+    if ( aModuleUIName.isEmpty() )
+        aModuleUIName = GetModuleName( aModuleId );
+
+    return aModuleUIName;
+}
+
+inline bool GetMenuItemData(
+    const css::uno::Reference< css::container::XIndexAccess >& rItemContainer,
+    sal_Int32 nIndex,
+    OUString& rCommandURL,
+    OUString& rLabel,
+    sal_uInt16& rType,
+    css::uno::Reference< css::container::XIndexAccess >& rSubMenu )
+{
+    try
+    {
+        css::uno::Sequence< css::beans::PropertyValue > aProp;
+        if ( rItemContainer->getByIndex( nIndex ) >>= aProp )
+        {
+            for ( sal_Int32 i = 0; i < aProp.getLength(); ++i )
+            {
+                if ( aProp[i].Name == ITEM_DESCRIPTOR_COMMANDURL )
+                {
+                    aProp[i].Value >>= rCommandURL;
+                }
+                else if ( aProp[i].Name == ITEM_DESCRIPTOR_CONTAINER )
+                {
+                    aProp[i].Value >>= rSubMenu;
+                }
+                else if ( aProp[i].Name == ITEM_DESCRIPTOR_LABEL )
+                {
+                    aProp[i].Value >>= rLabel;
+                }
+                else if ( aProp[i].Name == ITEM_DESCRIPTOR_TYPE )
+                {
+                    aProp[i].Value >>= rType;
+                }
+            }
+
+            return true;
+        }
+    }
+    catch ( css::lang::IndexOutOfBoundsException& )
+    {
+    }
+
+    return false;
+}
+
+inline bool GetToolbarItemData(
+    const css::uno::Reference< css::container::XIndexAccess >& rItemContainer,
+    sal_Int32 nIndex,
+    OUString& rCommandURL,
+    OUString& rLabel,
+    sal_uInt16& rType,
+    bool& rIsVisible,
+    sal_Int32& rStyle )
+{
+    try
+    {
+        css::uno::Sequence< css::beans::PropertyValue > aProp;
+        if ( rItemContainer->getByIndex( nIndex ) >>= aProp )
+        {
+            for ( sal_Int32 i = 0; i < aProp.getLength(); ++i )
+            {
+                if ( aProp[i].Name == ITEM_DESCRIPTOR_COMMANDURL )
+                {
+                    aProp[i].Value >>= rCommandURL;
+                }
+                else if ( aProp[i].Name == ITEM_DESCRIPTOR_STYLE )
+                {
+                    aProp[i].Value >>= rStyle;
+                }
+                else if ( aProp[i].Name == ITEM_DESCRIPTOR_LABEL )
+                {
+                    aProp[i].Value >>= rLabel;
+                }
+                else if ( aProp[i].Name == ITEM_DESCRIPTOR_TYPE )
+                {
+                    aProp[i].Value >>= rType;
+                }
+                else if ( aProp[i].Name == ITEM_DESCRIPTOR_ISVISIBLE )
+                {
+                    aProp[i].Value >>= rIsVisible;
+                }
+            }
+
+            return true;
+        }
+    }
+    catch ( css::lang::IndexOutOfBoundsException& )
+    {
+    }
+
+    return false;
+}
+
+inline css::uno::Sequence< css::beans::PropertyValue >
+ConvertSvxConfigEntry( const SvxConfigEntry* pEntry )
+{
+    css::uno::Sequence< css::beans::PropertyValue > aPropSeq( 3 );
+
+    aPropSeq[0].Name = ITEM_DESCRIPTOR_COMMANDURL;
+    aPropSeq[0].Value <<= pEntry->GetCommand();
+
+    aPropSeq[1].Name = ITEM_DESCRIPTOR_TYPE;
+    aPropSeq[1].Value <<= css::ui::ItemType::DEFAULT;
+
+    // If the name has not been changed, then the label can be stored
+    // as an empty string.
+    // It will be initialised again later using the command to label map.
+    aPropSeq[2].Name = ITEM_DESCRIPTOR_LABEL;
+    if ( !pEntry->HasChangedName() && !pEntry->GetCommand().isEmpty() )
+    {
+        aPropSeq[2].Value <<= OUString();
+    }
+    else
+    {
+        aPropSeq[2].Value <<= pEntry->GetName();
+    }
+
+    return aPropSeq;
+}
+
+inline css::uno::Sequence< css::beans::PropertyValue >
+ConvertToolbarEntry( const SvxConfigEntry* pEntry )
+{
+    css::uno::Sequence< css::beans::PropertyValue > aPropSeq( 4 );
+
+    aPropSeq[0].Name = ITEM_DESCRIPTOR_COMMANDURL;
+    aPropSeq[0].Value <<= pEntry->GetCommand();
+
+    aPropSeq[1].Name = ITEM_DESCRIPTOR_TYPE;
+    aPropSeq[1].Value <<= css::ui::ItemType::DEFAULT;
+
+    // If the name has not been changed, then the label can be stored
+    // as an empty string.
+    // It will be initialised again later using the command to label map.
+    aPropSeq[2].Name = ITEM_DESCRIPTOR_LABEL;
+    if ( !pEntry->HasChangedName() && !pEntry->GetCommand().isEmpty() )
+    {
+        aPropSeq[2].Value <<= OUString();
+    }
+    else
+    {
+        aPropSeq[2].Value <<= pEntry->GetName();
+    }
+
+    aPropSeq[3].Name = ITEM_DESCRIPTOR_ISVISIBLE;
+    aPropSeq[3].Value <<= pEntry->IsVisible();
+
+    return aPropSeq;
+}
+
+//Was in anonymous namespace in cfg.cxx
+inline bool showKeyConfigTabPage( const css::uno::Reference< 
css::frame::XFrame >& xFrame )
+{
+    if (!xFrame.is())
+    {
+        return false;
+    }
+    OUString sModuleId(
+        css::frame::ModuleManager::create(
+            comphelper::getProcessComponentContext())
+        ->identify(xFrame));
+    return !sModuleId.isEmpty()
+        && sModuleId != "com.sun.star.frame.StartModule";
+}
+
+inline bool EntrySort( SvxConfigEntry* a, SvxConfigEntry* b )
+{
+    return a->GetName().compareTo( b->GetName() ) < 0;
+}
+
+inline bool SvxConfigEntryModified( SvxConfigEntry* pEntry )
+{
+    SvxEntries* pEntries = pEntry->GetEntries();
+    if ( !pEntries )
+        return false;
+
+    for ( const auto& entry : *pEntries )
+    {
+        if ( entry->IsModified() || SvxConfigEntryModified( entry ) )
+            return true;
+    }
+    return false;
+}
+
 }
 
 #endif // INCLUDED_CUI_SOURCE_INC_CFG_HXX
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to