[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