[Libreoffice-commits] core.git: cui/source framework/source include/unotools sfx2/source unotools/source

Noel Grandin (via logerrit) logerrit at kemper.freedesktop.org
Mon Jul 26 08:11:23 UTC 2021


 cui/source/dialogs/hldocntp.cxx                  |    2 
 framework/source/uielement/newmenucontroller.cxx |    2 
 include/unotools/dynamicmenuoptions.hxx          |   52 --
 include/unotools/itemholderbase.hxx              |    1 
 sfx2/source/appl/shutdowniconaqua.mm             |    2 
 sfx2/source/appl/shutdowniconw32.cxx             |    2 
 unotools/source/config/dynamicmenuoptions.cxx    |  453 ++++++-----------------
 unotools/source/config/itemholder1.cxx           |    4 
 8 files changed, 144 insertions(+), 374 deletions(-)

New commits:
commit 4df98358135689e1d2600819c61c6b07d8c8a722
Author:     Noel Grandin <noelgrandin at gmail.com>
AuthorDate: Sun Jul 25 16:55:17 2021 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Mon Jul 26 10:10:47 2021 +0200

    simplify SvtDynamicMenuOptions
    
    Change-Id: I8892b8a51fcecd84ea1fedcd71b6d1a2febabee1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119484
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/cui/source/dialogs/hldocntp.cxx b/cui/source/dialogs/hldocntp.cxx
index 31b3ba2d5de4..8d8628ded6ed 100644
--- a/cui/source/dialogs/hldocntp.cxx
+++ b/cui/source/dialogs/hldocntp.cxx
@@ -158,7 +158,7 @@ void SvxHyperlinkNewDocTp::FillDocumentList()
 {
     weld::WaitObject aWaitObj(mpDialog->getDialog());
 
-    std::vector<SvtDynMenuEntry> aDynamicMenuEntries( SvtDynamicMenuOptions().GetMenu( EDynamicMenuType::NewMenu ) );
+    std::vector<SvtDynMenuEntry> aDynamicMenuEntries( SvtDynamicMenuOptions::GetMenu( EDynamicMenuType::NewMenu ) );
 
     for ( const SvtDynMenuEntry & rDynamicMenuEntry : aDynamicMenuEntries )
     {
diff --git a/framework/source/uielement/newmenucontroller.cxx b/framework/source/uielement/newmenucontroller.cxx
index 4189442d701c..579fff015582 100644
--- a/framework/source/uielement/newmenucontroller.cxx
+++ b/framework/source/uielement/newmenucontroller.cxx
@@ -326,7 +326,7 @@ void NewMenuController::fillPopupMenu( Reference< css::awt::XPopupMenu > const &
         return;
 
     const std::vector< SvtDynMenuEntry > aDynamicMenuEntries =
-        SvtDynamicMenuOptions().GetMenu( m_bNewMenu ? EDynamicMenuType::NewMenu : EDynamicMenuType::WizardMenu );
+        SvtDynamicMenuOptions::GetMenu( m_bNewMenu ? EDynamicMenuType::NewMenu : EDynamicMenuType::WizardMenu );
 
     sal_uInt16 nItemId = 1;
 
diff --git a/include/unotools/dynamicmenuoptions.hxx b/include/unotools/dynamicmenuoptions.hxx
index 9b436d64488b..d1c1c7249af1 100644
--- a/include/unotools/dynamicmenuoptions.hxx
+++ b/include/unotools/dynamicmenuoptions.hxx
@@ -21,12 +21,8 @@
 
 #include <unotools/unotoolsdllapi.h>
 #include <sal/types.h>
-#include <unotools/options.hxx>
 #include <rtl/ustring.hxx>
-#include <memory>
-
-namespace com::sun::star::beans { struct PropertyValue; }
-namespace osl { class Mutex; }
+#include <vector>
 
 /*-****************************************************************************************************************
     @descr  struct to hold information about one menu entry.
@@ -48,14 +44,6 @@ enum class EDynamicMenuType
     WizardMenu    =   1
 };
 
-/*-************************************************************************************************************
-    @short          forward declaration to our private date container implementation
-    @descr          We use these class as internal member to support small memory requirements.
-                    You can create the container if it is necessary. The class which use these mechanism
-                    is faster and smaller then a complete implementation!
-*//*-*************************************************************************************************************/
-
-class SvtDynamicMenuOptions_Impl;
 
 /*-************************************************************************************************************
     @short          collect information about dynamic menus
@@ -63,39 +51,23 @@ class SvtDynamicMenuOptions_Impl;
     @devstatus      ready to use
 *//*-*************************************************************************************************************/
 
-class SAL_WARN_UNUSED UNOTOOLS_DLLPUBLIC SvtDynamicMenuOptions final : public utl::detail::Options
+namespace SvtDynamicMenuOptions
 {
-    public:
-         SvtDynamicMenuOptions();
-        virtual ~SvtDynamicMenuOptions() override;
-
-        /*-****************************************************************************************************
-            @short      return complete specified list
-            @descr      Call it to get all entries of an dynamic menu.
-                        We return a list of all nodes with its names and properties.
-            @param      "eMenu" select right menu.
-            @return     A list of menu items is returned.
-
-            @onerror    We return an empty list.
-        *//*-*****************************************************************************************************/
 
-        std::vector< SvtDynMenuEntry > GetMenu( EDynamicMenuType eMenu ) const;
-    private:
+    /*-****************************************************************************************************
+        @short      return complete specified list
+        @descr      Call it to get all entries of an dynamic menu.
+                    We return a list of all nodes with its names and properties.
+        @param      "eMenu" select right menu.
+        @return     A list of menu items is returned.
 
-        /*-****************************************************************************************************
-            @short      return a reference to a static mutex
-            @descr      These class is partially threadsafe (for de-/initialization only).
-                        All access methods aren't safe!
-                        We create a static mutex only for one ime and use at different times.
-            @return     A reference to a static mutex member.
-        *//*-*****************************************************************************************************/
+        @onerror    We return an empty list.
+    *//*-*****************************************************************************************************/
 
-        UNOTOOLS_DLLPRIVATE static ::osl::Mutex& GetOwnStaticMutex();
+    UNOTOOLS_DLLPUBLIC std::vector< SvtDynMenuEntry > GetMenu( EDynamicMenuType eMenu );
 
-    private:
-        std::shared_ptr<SvtDynamicMenuOptions_Impl> m_pImpl;
 
-};      // class SvtDynamicMenuOptions
+};      // namespace SvtDynamicMenuOptions
 
 #endif // INCLUDED_UNOTOOLS_DYNAMICMENUOPTIONS_HXX
 
diff --git a/include/unotools/itemholderbase.hxx b/include/unotools/itemholderbase.hxx
index 2748623a42bf..579046511e38 100644
--- a/include/unotools/itemholderbase.hxx
+++ b/include/unotools/itemholderbase.hxx
@@ -40,7 +40,6 @@ enum class EItem
     CTLOptions                    ,   // 2
 
     DefaultOptions                ,
-    DynamicMenuOptions            ,
 
     EventConfig                   ,
 
diff --git a/sfx2/source/appl/shutdowniconaqua.mm b/sfx2/source/appl/shutdowniconaqua.mm
index 9d788db1abe7..5a92f38adda5 100644
--- a/sfx2/source/appl/shutdowniconaqua.mm
+++ b/sfx2/source/appl/shutdowniconaqua.mm
@@ -402,7 +402,7 @@ void aqua_init_systray()
             // collect the URLs of the entries in the File/New menu
             SvtModuleOptions    aModuleOptions;
             std::set< OUString > aFileNewAppsAvailable;
-            std::vector < SvtDynMenuEntry > const aNewMenu = SvtDynamicMenuOptions().GetMenu( EDynamicMenuType::NewMenu );
+            std::vector < SvtDynMenuEntry > const aNewMenu = SvtDynamicMenuOptions::GetMenu( EDynamicMenuType::NewMenu );
 
             for ( SvtDynMenuEntry const & newMenuProp : aNewMenu )
             {
diff --git a/sfx2/source/appl/shutdowniconw32.cxx b/sfx2/source/appl/shutdowniconw32.cxx
index f86476995f1a..dba876a18532 100644
--- a/sfx2/source/appl/shutdowniconw32.cxx
+++ b/sfx2/source/appl/shutdowniconw32.cxx
@@ -151,7 +151,7 @@ static HMENU createSystrayMenu( )
 
     // collect the URLs of the entries in the File/New menu
     ::std::set< OUString > aFileNewAppsAvailable;
-    std::vector< SvtDynMenuEntry > const aNewMenu = SvtDynamicMenuOptions().GetMenu( EDynamicMenuType::NewMenu );
+    std::vector< SvtDynMenuEntry > const aNewMenu = SvtDynamicMenuOptions::GetMenu( EDynamicMenuType::NewMenu );
     for ( SvtDynMenuEntry const & newMenuProp : aNewMenu )
     {
         if ( !newMenuProp.sURL.isEmpty() )
diff --git a/unotools/source/config/dynamicmenuoptions.cxx b/unotools/source/config/dynamicmenuoptions.cxx
index e89f23406ac4..907d91e4642a 100644
--- a/unotools/source/config/dynamicmenuoptions.cxx
+++ b/unotools/source/config/dynamicmenuoptions.cxx
@@ -21,21 +21,16 @@
 
 #include <sal/log.hxx>
 #include <unotools/dynamicmenuoptions.hxx>
-#include <unotools/configitem.hxx>
 #include <tools/debug.hxx>
+#include <unotools/configmgr.hxx>
+#include <unotools/configitem.hxx>
 #include <com/sun/star/uno/Any.hxx>
 #include <com/sun/star/uno/Sequence.hxx>
 #include <com/sun/star/beans/PropertyValue.hpp>
 
 #include <vector>
-
-#include "itemholder1.hxx"
-
 #include <algorithm>
 
-using namespace ::std;
-using namespace ::utl;
-using namespace ::osl;
 using namespace ::com::sun::star::uno;
 using namespace ::com::sun::star::beans;
 
@@ -44,7 +39,6 @@ using namespace ::com::sun::star::beans;
 #define DYNAMICMENU_PROPERTYNAME_IMAGEIDENTIFIER        "ImageIdentifier"
 #define DYNAMICMENU_PROPERTYNAME_TARGETNAME             "TargetName"
 
-#define ROOTNODE_MENUS                                  "Office.Common/Menus/"
 #define PATHDELIMITER                                   "/"
 
 #define SETNODE_NEWMENU                                 "New"
@@ -59,175 +53,83 @@ using namespace ::com::sun::star::beans;
 
 #define PATHPREFIX_SETUP                                "m"
 
-namespace {
-
-
+namespace
+{
 /*-****************************************************************************************************************
     @descr  support simple menu structures and operations on it
 ****************************************************************************************************************-*/
-class SvtDynMenu
+struct SvtDynMenu
 {
-    public:
-        // append setup written menu entry
-        // Don't touch name of entry. It was defined by setup and must be the same every time!
-        // Look for double menu entries here too... may be some separator items are superfluous...
-        void AppendSetupEntry( const SvtDynMenuEntry& rEntry )
-        {
-            if(
-                ( lSetupEntries.empty()           )  ||
-                ( lSetupEntries.rbegin()->sURL != rEntry.sURL )
-              )
-            {
-                lSetupEntries.push_back( rEntry );
-            }
-        }
+    // append setup written menu entry
+    // Don't touch name of entry. It was defined by setup and must be the same every time!
+    // Look for double menu entries here too... may be some separator items are superfluous...
+    void AppendSetupEntry( const SvtDynMenuEntry& rEntry )
+    {
+        if( lSetupEntries.empty() || lSetupEntries.rbegin()->sURL != rEntry.sURL )
+            lSetupEntries.push_back( rEntry );
+    }
 
-        // convert internal list to external format
-        // for using it on right menus really
-        // Notice:   We build a property list with 4 entries and set it on result list then.
-        //           Separator entries will be packed in another way then normal entries! We define
-        //           special string "sSeparator" to perform too ...
-        std::vector< SvtDynMenuEntry > GetList() const
-        {
-            sal_Int32                             nSetupCount = static_cast<sal_Int32>(lSetupEntries.size());
-            sal_Int32                             nUserCount  = static_cast<sal_Int32>(lUserEntries.size());
-            sal_Int32                             nStep       = 0;
-            std::vector< SvtDynMenuEntry >        lResult ( nSetupCount+nUserCount );
-            OUString                              sSeparator  ( "private:separator" );
+    // convert internal list to external format
+    // for using it on right menus really
+    // Notice:   We build a property list with 4 entries and set it on result list then.
+    //           Separator entries will be packed in another way then normal entries! We define
+    //           special string "sSeparator" to perform too ...
+    std::vector< SvtDynMenuEntry > GetList() const
+    {
+        sal_Int32                             nSetupCount = static_cast<sal_Int32>(lSetupEntries.size());
+        sal_Int32                             nUserCount  = static_cast<sal_Int32>(lUserEntries.size());
+        sal_Int32                             nStep       = 0;
+        std::vector< SvtDynMenuEntry >        lResult ( nSetupCount+nUserCount );
+        OUString                              sSeparator  ( "private:separator" );
 
-            for( const auto& pList : {&lSetupEntries, &lUserEntries} )
+        for( const auto& pList : {&lSetupEntries, &lUserEntries} )
+        {
+            for( const auto& rItem : *pList )
             {
-                for( const auto& rItem : *pList )
+                SvtDynMenuEntry entry;
+                if( rItem.sURL == sSeparator )
+                {
+                    entry.sURL = sSeparator;
+                }
+                else
                 {
-                    SvtDynMenuEntry entry;
-                    if( rItem.sURL == sSeparator )
-                    {
-                        entry.sURL = sSeparator;
-                    }
-                    else
-                    {
-                        entry = rItem;
-                    }
-                    lResult[nStep] = entry;
-                    ++nStep;
+                    entry = rItem;
                 }
+                lResult[nStep] = entry;
+                ++nStep;
             }
-            return lResult;
         }
+        return lResult;
+    }
 
-    private:
-        vector< SvtDynMenuEntry > lSetupEntries;
-        vector< SvtDynMenuEntry > lUserEntries;
+private:
+    std::vector< SvtDynMenuEntry > lSetupEntries;
+    std::vector< SvtDynMenuEntry > lUserEntries;
 };
 
 }
 
-class SvtDynamicMenuOptions_Impl : public ConfigItem
+namespace SvtDynamicMenuOptions
 {
-    public:
-
-         SvtDynamicMenuOptions_Impl();
-        virtual ~SvtDynamicMenuOptions_Impl() override;
-
-        /*-****************************************************************************************************
-            @short      called for notify of configmanager
-            @descr      This method is called from the ConfigManager before the application ends or from the
-                         PropertyChangeListener if the sub tree broadcasts changes. You must update your
-                        internal values.
-
-            @seealso    baseclass ConfigItem
-
-            @param      "lPropertyNames" is the list of properties which should be updated.
-        *//*-*****************************************************************************************************/
-
-        virtual void Notify( const Sequence< OUString >& lPropertyNames ) override;
-
-        /*-****************************************************************************************************
-            @short      base implementation of public interface for "SvtDynamicMenuOptions"!
-            @descr      These class is used as static member of "SvtDynamicMenuOptions" ...
-                        => The code exist only for one time and isn't duplicated for every instance!
-        *//*-*****************************************************************************************************/
-
-        std::vector< SvtDynMenuEntry >   GetMenu     (           EDynamicMenuType    eMenu           ) const;
-
-    private:
-
-        virtual void ImplCommit() override;
-
-        /*-****************************************************************************************************
-            @short      return list of key names of our configuration management which represent our module tree
-            @descr      This method returns the current list of key names! We need it to get needed values from our
-                        configuration management and support dynamical menu item lists!
-            @param      "nNewCount"     ,   returns count of menu entries for "new"
-            @param      "nWizardCount"  ,   returns count of menu entries for "wizard"
-            @return     A list of configuration key names is returned.
-        *//*-*****************************************************************************************************/
-
-        Sequence< OUString > impl_GetPropertyNames( sal_uInt32& nNewCount, sal_uInt32& nWizardCount );
-
-        /*-****************************************************************************************************
-            @short      sort given source list and expand it for all well known properties to destination
-            @descr      We must support sets of entries with count inside the name .. but some of them could be missing!
-                        e.g. s1-s2-s3-s0-u1-s6-u5-u7
-                        Then we must sort it by name and expand it to the follow one:
-                            sSetNode/s0/URL
-                            sSetNode/s0/Title
-                            sSetNode/s0/...
-                            sSetNode/s1/URL
-                            sSetNode/s1/Title
-                            sSetNode/s1/...
-                            ...
-                            sSetNode/s6/URL
-                            sSetNode/s6/Title
-                            sSetNode/s6/...
-                            sSetNode/u1/URL
-                            sSetNode/u1/Title
-                            sSetNode/u1/...
-                            ...
-                            sSetNode/u7/URL
-                            sSetNode/u7/Title
-                            sSetNode/u7/...
-                        Rules: We start with all setup written entries names "sx" and x=[0..n].
-                        Then we handle all "ux" items. Inside these blocks we sort it ascending by number.
-
-            @attention  We add these expanded list to the end of given "lDestination" list!
-                        So we must start on "lDestination.getLength()".
-                        Reallocation of memory of destination list is done by us!
-
-            @seealso    method impl_GetPropertyNames()
-
-            @param      "lSource"      ,   original list (e.g. [m1-m2-m3-m6-m0] )
-            @param      "lDestination" ,   destination of operation
-            @param      "sSetNode"     ,   name of configuration set to build complete path
-            @return     A list of configuration key names is returned.
-        *//*-*****************************************************************************************************/
-
-        static void impl_SortAndExpandPropertyNames( const Sequence< OUString >& lSource      ,
-                                                     Sequence< OUString >& lDestination ,
-                                                     std::u16string_view         sSetNode     );
-
-    //  private member
-
-    private:
-
-        SvtDynMenu  m_aNewMenu;
-        SvtDynMenu  m_aWizardMenu;
-};
 
-//  constructor
+static Sequence< OUString > lcl_GetPropertyNames(
+        css::uno::Reference<css::container::XHierarchicalNameAccess> const & xHierarchyAccess,
+        sal_uInt32& nNewCount, sal_uInt32& nWizardCount );
 
-SvtDynamicMenuOptions_Impl::SvtDynamicMenuOptions_Impl()
-    // Init baseclasses first
-    :   ConfigItem( ROOTNODE_MENUS )
-    // Init member then...
+std::vector< SvtDynMenuEntry > GetMenu( EDynamicMenuType eMenu )
 {
+    SvtDynMenu  aNewMenu;
+    SvtDynMenu  aWizardMenu;
+
+    Reference<css::container::XHierarchicalNameAccess> xHierarchyAccess = utl::ConfigManager::acquireTree(u"Office.Common/Menus/");
+
     // Get names and values of all accessible menu entries and fill internal structures.
     // See impl_GetPropertyNames() for further information.
     sal_uInt32              nNewCount           = 0;
     sal_uInt32              nWizardCount        = 0;
-    Sequence< OUString >    lNames              = impl_GetPropertyNames ( nNewCount           ,
+    Sequence< OUString >    lNames              = lcl_GetPropertyNames ( xHierarchyAccess, nNewCount           ,
                                                                           nWizardCount        );
-    Sequence< Any >         lValues             = GetProperties         ( lNames              );
+    Sequence< Any >         lValues             = utl::ConfigItem::GetProperties( xHierarchyAccess, lNames, /*bAllLocales*/false );
 
     // Safe impossible cases.
     // We need values from ALL configuration keys.
@@ -273,7 +175,7 @@ SvtDynamicMenuOptions_Impl::SvtDynamicMenuOptions_Impl()
         ++nPosition;
         lValues[nPosition] >>= aItem.sTargetName;
         ++nPosition;
-        m_aNewMenu.AppendSetupEntry( aItem );
+        aNewMenu.AppendSetupEntry( aItem );
     }
 
     // Attention: Don't reset nPosition here!
@@ -291,143 +193,98 @@ SvtDynamicMenuOptions_Impl::SvtDynamicMenuOptions_Impl()
         ++nPosition;
         lValues[nPosition] >>= aItem.sTargetName;
         ++nPosition;
-        m_aWizardMenu.AppendSetupEntry( aItem );
-    }
-
-    // Attention: Don't reset nPosition here!
-
-/*TODO: Not used in the moment! see Notify() ...
-    // Enable notification mechanism of our baseclass.
-    // We need it to get information about changes outside these class on our used configuration keys!
-    EnableNotification( lNames );
-*/
-}
-
-//  destructor
-
-SvtDynamicMenuOptions_Impl::~SvtDynamicMenuOptions_Impl()
-{
-    assert(!IsModified()); // should have been committed
-}
-
-//  public method
-
-void SvtDynamicMenuOptions_Impl::Notify( const Sequence< OUString >& )
-{
-    SAL_WARN( "unotools.config", "SvtDynamicMenuOptions_Impl::Notify() Not implemented yet! I don't know how I can handle a dynamical list of unknown properties ..." );
-}
-
-//  public method
-
-void SvtDynamicMenuOptions_Impl::ImplCommit()
-{
-    SAL_WARN("unotools.config", "SvtDynamicMenuOptions_Impl::ImplCommit(): Not implemented yet!");
-    /*
-    // Write all properties!
-    // Delete complete sets first.
-    ClearNodeSet( SETNODE_NEWMENU    );
-    ClearNodeSet( SETNODE_WIZARDMENU );
-
-    MenuEntry                    aItem;
-    OUString                    sNode;
-    Sequence< PropertyValue >   lPropertyValues( PROPERTYCOUNT );
-    sal_uInt32                  nItem          = 0;
-
-    // Copy "new" menu entries to save-list!
-    sal_uInt32 nNewCount = m_aNewMenu.size();
-    for( nItem=0; nItem<nNewCount; ++nItem )
-    {
-        aItem = m_aNewMenu[nItem];
-        // Format:  "New/1/URL"
-        //          "New/1/Title"
-        //          ...
-        sNode = SETNODE_NEWMENU + PATHDELIMITER + PATHPREFIX + OUString::valueOf( (sal_Int32)nItem ) + PATHDELIMITER;
-
-        lPropertyValues[OFFSET_URL             ].Name  =   sNode + PROPERTYNAME_URL;
-        lPropertyValues[OFFSET_TITLE           ].Name  =   sNode + PROPERTYNAME_TITLE;
-        lPropertyValues[OFFSET_IMAGEIDENTIFIER ].Name  =   sNode + PROPERTYNAME_IMAGEIDENTIFIER;
-        lPropertyValues[OFFSET_TARGETNAME      ].Name  =   sNode + PROPERTYNAME_TARGETNAME;
-
-        lPropertyValues[OFFSET_URL             ].Value <<= aItem.sURL;
-        lPropertyValues[OFFSET_TITLE           ].Value <<= aItem.sTitle;
-        lPropertyValues[OFFSET_IMAGEIDENTIFIER ].Value <<= aItem.sImageIdentifier;
-        lPropertyValues[OFFSET_TARGETNAME      ].Value <<= aItem.sTargetName;
-
-        SetSetProperties( SETNODE_NEWMENU, lPropertyValues );
-    }
-
-    // Copy "wizard" menu entries to save-list!
-    sal_uInt32 nWizardCount = m_aWizardMenu.size();
-    for( nItem=0; nItem<nWizardCount; ++nItem )
-    {
-        aItem = m_aWizardMenu[nItem];
-        // Format:  "Wizard/1/URL"
-        //          "Wizard/1/Title"
-        //          ...
-        sNode = SETNODE_WIZARDMENU + PATHDELIMITER + PATHPREFIX + OUString::valueOf( (sal_Int32)nItem ) + PATHDELIMITER;
-
-        lPropertyValues[OFFSET_URL             ].Name  =   sNode + PROPERTYNAME_URL;
-        lPropertyValues[OFFSET_TITLE           ].Name  =   sNode + PROPERTYNAME_TITLE;
-        lPropertyValues[OFFSET_IMAGEIDENTIFIER ].Name  =   sNode + PROPERTYNAME_IMAGEIDENTIFIER;
-        lPropertyValues[OFFSET_TARGETNAME      ].Name  =   sNode + PROPERTYNAME_TARGETNAME;
-
-        lPropertyValues[OFFSET_URL             ].Value <<= aItem.sURL;
-        lPropertyValues[OFFSET_TITLE           ].Value <<= aItem.sTitle;
-        lPropertyValues[OFFSET_IMAGEIDENTIFIER ].Value <<= aItem.sImageIdentifier;
-        lPropertyValues[OFFSET_TARGETNAME      ].Value <<= aItem.sTargetName;
-
-        SetSetProperties( SETNODE_WIZARDMENU, lPropertyValues );
+        aWizardMenu.AppendSetupEntry( aItem );
     }
 
-    */
-}
-
-//  public method
-
-std::vector< SvtDynMenuEntry > SvtDynamicMenuOptions_Impl::GetMenu( EDynamicMenuType eMenu ) const
-{
     std::vector< SvtDynMenuEntry > lReturn;
     switch( eMenu )
     {
         case EDynamicMenuType::NewMenu      :
-            lReturn = m_aNewMenu.GetList();
+            lReturn = aNewMenu.GetList();
             break;
 
         case EDynamicMenuType::WizardMenu   :
-            lReturn = m_aWizardMenu.GetList();
+            lReturn = aWizardMenu.GetList();
             break;
     }
     return lReturn;
 }
 
-//  private method
-
-Sequence< OUString > SvtDynamicMenuOptions_Impl::impl_GetPropertyNames( sal_uInt32& nNewCount, sal_uInt32& nWizardCount )
+static void lcl_SortAndExpandPropertyNames( const Sequence< OUString >& lSource,
+            Sequence< OUString >& lDestination, std::u16string_view sSetNode );
+
+/*-****************************************************************************************************
+    @short      return list of key names of our configuration management which represent our module tree
+    @descr      This method returns the current list of key names! We need it to get needed values from our
+                configuration management and support dynamical menu item lists!
+    @param      "nNewCount"     ,   returns count of menu entries for "new"
+    @param      "nWizardCount"  ,   returns count of menu entries for "wizard"
+    @return     A list of configuration key names is returned.
+*//*-*****************************************************************************************************/
+static Sequence< OUString > lcl_GetPropertyNames(
+        css::uno::Reference<css::container::XHierarchicalNameAccess> const & xHierarchyAccess,
+        sal_uInt32& nNewCount, sal_uInt32& nWizardCount )
 {
     // First get ALL names of current existing list items in configuration!
-    Sequence< OUString > lNewItems           = GetNodeNames( SETNODE_NEWMENU       );
-    Sequence< OUString > lWizardItems        = GetNodeNames( SETNODE_WIZARDMENU    );
+    Sequence< OUString > lNewItems    = utl::ConfigItem::GetNodeNames( xHierarchyAccess, SETNODE_NEWMENU, utl::ConfigNameFormat::LocalPath );
+    Sequence< OUString > lWizardItems = utl::ConfigItem::GetNodeNames( xHierarchyAccess, SETNODE_WIZARDMENU, utl::ConfigNameFormat::LocalPath );
 
     // Get information about list counts ...
-    nNewCount           = lNewItems.getLength          ();
-    nWizardCount        = lWizardItems.getLength       ();
+    nNewCount           = lNewItems.getLength();
+    nWizardCount        = lWizardItems.getLength();
 
     // Sort and expand all three list to result list ...
     Sequence< OUString > lProperties;
-    impl_SortAndExpandPropertyNames( lNewItems          , lProperties, u"" SETNODE_NEWMENU   );
-    impl_SortAndExpandPropertyNames( lWizardItems       , lProperties, u"" SETNODE_WIZARDMENU );
+    lcl_SortAndExpandPropertyNames( lNewItems          , lProperties, u"" SETNODE_NEWMENU   );
+    lcl_SortAndExpandPropertyNames( lWizardItems       , lProperties, u"" SETNODE_WIZARDMENU );
 
     // Return result.
     return lProperties;
 }
 
-//  private helper
-
-namespace {
-
-class CountWithPrefixSort
+/*-****************************************************************************************************
+    @short      sort given source list and expand it for all well known properties to destination
+    @descr      We must support sets of entries with count inside the name .. but some of them could be missing!
+                e.g. s1-s2-s3-s0-u1-s6-u5-u7
+                Then we must sort it by name and expand it to the follow one:
+                    sSetNode/s0/URL
+                    sSetNode/s0/Title
+                    sSetNode/s0/...
+                    sSetNode/s1/URL
+                    sSetNode/s1/Title
+                    sSetNode/s1/...
+                    ...
+                    sSetNode/s6/URL
+                    sSetNode/s6/Title
+                    sSetNode/s6/...
+                    sSetNode/u1/URL
+                    sSetNode/u1/Title
+                    sSetNode/u1/...
+                    ...
+                    sSetNode/u7/URL
+                    sSetNode/u7/Title
+                    sSetNode/u7/...
+                Rules: We start with all setup written entries names "sx" and x=[0..n].
+                Then we handle all "ux" items. Inside these blocks we sort it ascending by number.
+
+    @attention  We add these expanded list to the end of given "lDestination" list!
+                So we must start on "lDestination.getLength()".
+                Reallocation of memory of destination list is done by us!
+
+    @seealso    method impl_GetPropertyNames()
+
+    @param      "lSource"      ,   original list (e.g. [m1-m2-m3-m6-m0] )
+    @param      "lDestination" ,   destination of operation
+    @param      "sSetNode"     ,   name of configuration set to build complete path
+    @return     A list of configuration key names is returned.
+*//*-*****************************************************************************************************/
+
+static void lcl_SortAndExpandPropertyNames( const Sequence< OUString >& lSource      ,
+                                        Sequence< OUString >& lDestination ,
+                                    std::u16string_view         sSetNode     )
 {
-    public:
+    struct CountWithPrefixSort
+    {
         bool operator() ( const OUString& s1 ,
                          const OUString& s2 ) const
         {
@@ -440,27 +297,17 @@ class CountWithPrefixSort
             // insert-positions of given entries in sorted list!
             return( n1<n2 );
         }
-};
-
-class SelectByPrefix
-{
-    public:
+    };
+    struct SelectByPrefix
+    {
         bool operator() ( const OUString& s ) const
         {
             // Prefer setup written entries by check first letter of given string. It must be a "s".
             return s.startsWith( PATHPREFIX_SETUP );
         }
-};
+    };
 
-}
-
-//  private method
-
-void SvtDynamicMenuOptions_Impl::impl_SortAndExpandPropertyNames( const Sequence< OUString >& lSource      ,
-                                                                        Sequence< OUString >& lDestination ,
-                                                                  std::u16string_view         sSetNode     )
-{
-    vector< OUString >  lTemp;
+    std::vector< OUString >  lTemp;
     sal_Int32           nSourceCount     = lSource.getLength();
     sal_Int32           nDestinationStep = lDestination.getLength(); // start on end of current list ...!
 
@@ -470,9 +317,9 @@ void SvtDynamicMenuOptions_Impl::impl_SortAndExpandPropertyNames( const Sequence
     lTemp.insert( lTemp.end(), lSource.begin(), lSource.end() );
 
     // Sort all entries by number ...
-    stable_sort( lTemp.begin(), lTemp.end(), CountWithPrefixSort() );
+    std::stable_sort( lTemp.begin(), lTemp.end(), CountWithPrefixSort() );
     // and split into setup & user written entries!
-    stable_partition( lTemp.begin(), lTemp.end(), SelectByPrefix() );
+    std::stable_partition( lTemp.begin(), lTemp.end(), SelectByPrefix() );
 
     // Copy sorted entries to destination and expand every item with
     // 4 supported sub properties.
@@ -486,51 +333,7 @@ void SvtDynamicMenuOptions_Impl::impl_SortAndExpandPropertyNames( const Sequence
     }
 }
 
-namespace {
-    // global
-    std::weak_ptr<SvtDynamicMenuOptions_Impl> g_pDynamicMenuOptions;
-}
-
-SvtDynamicMenuOptions::SvtDynamicMenuOptions()
-{
-    // Global access, must be guarded (multithreading!).
-    MutexGuard aGuard( GetOwnStaticMutex() );
-
-    m_pImpl = g_pDynamicMenuOptions.lock();
-    if( !m_pImpl )
-    {
-        m_pImpl = std::make_shared<SvtDynamicMenuOptions_Impl>();
-        g_pDynamicMenuOptions = m_pImpl;
-        ItemHolder1::holdConfigItem(EItem::DynamicMenuOptions);
-    }
-}
-
-SvtDynamicMenuOptions::~SvtDynamicMenuOptions()
-{
-    // Global access, must be guarded (multithreading!)
-    MutexGuard aGuard( GetOwnStaticMutex() );
-
-    m_pImpl.reset();
-}
-
-//  public method
 
-std::vector< SvtDynMenuEntry > SvtDynamicMenuOptions::GetMenu( EDynamicMenuType eMenu ) const
-{
-    MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pImpl->GetMenu( eMenu );
-}
-
-namespace
-{
-    class theDynamicMenuOptionsMutex : public rtl::Static<osl::Mutex, theDynamicMenuOptionsMutex>{};
-}
-
-//  private method
-
-Mutex& SvtDynamicMenuOptions::GetOwnStaticMutex()
-{
-    return theDynamicMenuOptionsMutex::get();
-}
+} // namespace SvtDynamicMenuOptions
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/unotools/source/config/itemholder1.cxx b/unotools/source/config/itemholder1.cxx
index 23149a6af6b8..b5bc50b7e118 100644
--- a/unotools/source/config/itemholder1.cxx
+++ b/unotools/source/config/itemholder1.cxx
@@ -129,10 +129,6 @@ void ItemHolder1::impl_newItem(TItemInfo& rItem)
             rItem.pItem.reset( new SvtDefaultOptions() );
             break;
 
-        case EItem::DynamicMenuOptions :
-            rItem.pItem.reset( new SvtDynamicMenuOptions() );
-            break;
-
         case EItem::EventConfig :
             //rItem.pItem.reset( new GlobalEventConfig() );
             break;


More information about the Libreoffice-commits mailing list