diff options
-rw-r--r-- | cui/source/options/optgdlg.cxx | 42 | ||||
-rw-r--r-- | desktop/source/app/app.cxx | 9 | ||||
-rw-r--r-- | framework/source/uielement/menubarmanager.cxx | 3 | ||||
-rw-r--r-- | framework/source/uielement/toolbarmanager.cxx | 4 | ||||
-rw-r--r-- | include/svtools/menuoptions.hxx | 90 | ||||
-rw-r--r-- | include/unotools/itemholderbase.hxx | 1 | ||||
-rw-r--r-- | svtools/Library_svt.mk | 1 | ||||
-rw-r--r-- | svtools/source/config/itemholder2.cxx | 5 | ||||
-rw-r--r-- | svtools/source/config/menuoptions.cxx | 413 |
9 files changed, 28 insertions, 540 deletions
diff --git a/cui/source/options/optgdlg.cxx b/cui/source/options/optgdlg.cxx index 30ca6b79a068..e55eca6dcf09 100644 --- a/cui/source/options/optgdlg.cxx +++ b/cui/source/options/optgdlg.cxx @@ -30,7 +30,6 @@ #include <i18nlangtag/mslangid.hxx> #include <i18nlangtag/languagetag.hxx> #include <unotools/compatibility.hxx> -#include <svtools/menuoptions.hxx> #include <svl/languageoptions.hxx> #include <svtools/miscopt.hxx> #include <unotools/syslocaleoptions.hxx> @@ -661,11 +660,10 @@ std::unique_ptr<SfxTabPage> OfaViewTabPage::Create( weld::Container* pPage, weld bool OfaViewTabPage::FillItemSet( SfxItemSet* ) { - SvtMenuOptions aMenuOpt; - bool bModified = false; bool bMenuOptModified = false; bool bRepaintWindows(false); + std::shared_ptr<comphelper::ConfigurationChanges> xChanges(comphelper::ConfigurationChanges::create()); SvtMiscOptions aMiscOptions; const sal_Int32 nSizeLB_NewSelection = m_xIconSizeLB->get_active(); @@ -698,9 +696,7 @@ bool OfaViewTabPage::FillItemSet( SfxItemSet* ) default: OSL_FAIL( "OfaViewTabPage::FillItemSet(): This state of m_xSidebarIconSizeLB should not be possible!" ); } - auto xChanges = comphelper::ConfigurationChanges::create(); officecfg::Office::Common::Misc::SidebarIconSize::set(static_cast<sal_Int16>(eSet), xChanges); - xChanges->commit(); } const sal_Int32 nNotebookbarSizeLB_NewSelection = m_xNotebookbarIconSizeLB->get_active(); @@ -716,9 +712,7 @@ bool OfaViewTabPage::FillItemSet( SfxItemSet* ) default: OSL_FAIL( "OfaViewTabPage::FillItemSet(): This state of m_xNotebookbarIconSizeLB should not be possible!" ); } - auto xChanges = comphelper::ConfigurationChanges::create(); officecfg::Office::Common::Misc::NotebookbarIconSize::set(static_cast<sal_Int16>(eSet), xChanges); - xChanges->commit(); } const sal_Int32 nStyleLB_NewSelection = m_xIconStyleLB->get_active(); @@ -768,17 +762,19 @@ bool OfaViewTabPage::FillItemSet( SfxItemSet* ) if (m_xFontShowCB->get_state_changed_from_saved()) { - std::shared_ptr<comphelper::ConfigurationChanges> batch(comphelper::ConfigurationChanges::create()); - officecfg::Office::Common::Font::View::ShowFontBoxWYSIWYG::set(m_xFontShowCB->get_active(), batch); - batch->commit(); + officecfg::Office::Common::Font::View::ShowFontBoxWYSIWYG::set(m_xFontShowCB->get_active(), xChanges); bModified = true; } if (m_xMenuIconsLB->get_value_changed_from_saved()) { - aMenuOpt.SetMenuIconsState(m_xMenuIconsLB->get_active() == 0 ? + TriState eMenuIcons = m_xMenuIconsLB->get_active() == 0 ? TRISTATE_INDET : - static_cast<TriState>(m_xMenuIconsLB->get_active() - 1)); + static_cast<TriState>(m_xMenuIconsLB->get_active() - 1); + // Output cache of current setting as possibly modified by System Theme for older version + bool bMenuIcons = Application::GetSettings().GetStyleSettings().GetUseImagesInMenus(); + officecfg::Office::Common::View::Menu::IsSystemIconsInMenus::set(eMenuIcons == TRISTATE_INDET, xChanges); + officecfg::Office::Common::View::Menu::ShowIconsInMenues::set(bMenuIcons, xChanges); bModified = true; bMenuOptModified = true; bAppearanceChanged = true; @@ -786,9 +782,11 @@ bool OfaViewTabPage::FillItemSet( SfxItemSet* ) if (m_xContextMenuShortcutsLB->get_value_changed_from_saved()) { - aMenuOpt.SetContextMenuShortcuts(m_xContextMenuShortcutsLB->get_active() == 0 ? + officecfg::Office::Common::View::Menu::ShortcutsInContextMenus::set( + m_xContextMenuShortcutsLB->get_active() == 0 ? TRISTATE_INDET : - static_cast<TriState>(m_xContextMenuShortcutsLB->get_active() - 1)); + static_cast<TriState>(m_xContextMenuShortcutsLB->get_active() - 1), + xChanges); bModified = true; bMenuOptModified = true; bAppearanceChanged = true; @@ -818,13 +816,13 @@ bool OfaViewTabPage::FillItemSet( SfxItemSet* ) if (m_xUseSkia->get_state_changed_from_saved() || m_xForceSkiaRaster->get_state_changed_from_saved()) { - std::shared_ptr<comphelper::ConfigurationChanges> batch(comphelper::ConfigurationChanges::create()); - officecfg::Office::Common::VCL::UseSkia::set(m_xUseSkia->get_active(), batch); - officecfg::Office::Common::VCL::ForceSkiaRaster::set(m_xForceSkiaRaster->get_active(), batch); - batch->commit(); + officecfg::Office::Common::VCL::UseSkia::set(m_xUseSkia->get_active(), xChanges); + officecfg::Office::Common::VCL::ForceSkiaRaster::set(m_xForceSkiaRaster->get_active(), xChanges); bModified = true; } + xChanges->commit(); + if( bMenuOptModified ) { // Set changed settings to the application instance @@ -926,11 +924,13 @@ void OfaViewTabPage::Reset( const SfxItemSet* ) // WorkingSet m_xFontShowCB->set_active(officecfg::Office::Common::Font::View::ShowFontBoxWYSIWYG::get()); - SvtMenuOptions aMenuOpt; - m_xMenuIconsLB->set_active(aMenuOpt.GetMenuIconsState() == 2 ? 0 : aMenuOpt.GetMenuIconsState() + 1); + bool bMenuIcons = officecfg::Office::Common::View::Menu::ShowIconsInMenues::get(); + bool bSystemMenuIcons = officecfg::Office::Common::View::Menu::IsSystemIconsInMenus::get(); + TriState eMenuIcons = bSystemMenuIcons ? TRISTATE_INDET : static_cast<TriState>(bMenuIcons); + m_xMenuIconsLB->set_active(eMenuIcons == 2 ? 0 : eMenuIcons + 1); m_xMenuIconsLB->save_value(); - TriState eContextMenuShortcuts = aMenuOpt.GetContextMenuShortcuts(); + TriState eContextMenuShortcuts = static_cast<TriState>(officecfg::Office::Common::View::Menu::ShortcutsInContextMenus::get()); bool bContextMenuShortcutsNonDefault = eContextMenuShortcuts == TRISTATE_FALSE || eContextMenuShortcuts == TRISTATE_TRUE; m_xContextMenuShortcutsLB->set_active(bContextMenuShortcutsNonDefault ? eContextMenuShortcuts + 1 : 0); m_xContextMenuShortcutsLB->save_value(); diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx index dec1fbe150c5..828ba1be3d5f 100644 --- a/desktop/source/app/app.cxx +++ b/desktop/source/app/app.cxx @@ -100,7 +100,6 @@ #include <rtl/byteseq.hxx> #include <unotools/pathoptions.hxx> #include <unotools/VersionConfig.hxx> -#include <svtools/menuoptions.hxx> #include <rtl/bootstrap.hxx> #include <vcl/test/GraphicsRenderTests.hxx> #include <vcl/glxtestprocess.hxx> @@ -1863,9 +1862,11 @@ void Desktop::OverrideSystemSettings( AllSettings& rSettings ) hMouseSettings.SetFollow( aAppearanceCfg.IsMenuMouseFollow() ? (nFollow|MouseFollowFlags::Menu) : (nFollow&~MouseFollowFlags::Menu)); rSettings.SetMouseSettings(hMouseSettings); - SvtMenuOptions aMenuOpt; - hStyleSettings.SetUseImagesInMenus(aMenuOpt.GetMenuIconsState()); - hStyleSettings.SetContextMenuShortcuts(aMenuOpt.GetContextMenuShortcuts()); + bool bMenuIcons = officecfg::Office::Common::View::Menu::ShowIconsInMenues::get(); + bool bSystemMenuIcons = officecfg::Office::Common::View::Menu::IsSystemIconsInMenus::get(); + TriState eMenuIcons = bSystemMenuIcons ? TRISTATE_INDET : static_cast<TriState>(bMenuIcons); + hStyleSettings.SetUseImagesInMenus(eMenuIcons); + hStyleSettings.SetContextMenuShortcuts(static_cast<TriState>(officecfg::Office::Common::View::Menu::ShortcutsInContextMenus::get())); hStyleSettings.SetDragFullOptions( nDragFullOptions ); rSettings.SetStyleSettings ( hStyleSettings ); } diff --git a/framework/source/uielement/menubarmanager.cxx b/framework/source/uielement/menubarmanager.cxx index 5cf5e9b77cd5..0357eb0a6be0 100644 --- a/framework/source/uielement/menubarmanager.cxx +++ b/framework/source/uielement/menubarmanager.cxx @@ -43,7 +43,6 @@ #include <comphelper/propertysequence.hxx> #include <officecfg/Office/Common.hxx> -#include <svtools/menuoptions.hxx> #include <svtools/javainteractionhandler.hxx> #include <uno/current_context.hxx> #include <unotools/cmdoptions.hxx> @@ -571,7 +570,7 @@ IMPL_LINK( MenuBarManager, Activate, Menu *, pMenu, bool ) css::uno::getCurrentContext())); // set/unset hiding disabled menu entries - bool bDontHide = SvtMenuOptions().IsEntryHidingEnabled(); + bool bDontHide = officecfg::Office::Common::View::Menu::DontHideDisabledEntry::get(); const StyleSettings& rSettings = Application::GetSettings().GetStyleSettings(); bool bShowMenuImages = rSettings.GetUseImagesInMenus(); bool bShowShortcuts = m_bHasMenuBar || rSettings.GetContextMenuShortcuts(); diff --git a/framework/source/uielement/toolbarmanager.cxx b/framework/source/uielement/toolbarmanager.cxx index 00bf67de463b..c7e6d8c79ec8 100644 --- a/framework/source/uielement/toolbarmanager.cxx +++ b/framework/source/uielement/toolbarmanager.cxx @@ -73,8 +73,6 @@ #include <vcl/weldutils.hxx> #include <tools/debug.hxx> -#include <svtools/menuoptions.hxx> - // namespaces using namespace ::com::sun::star::awt; @@ -1887,7 +1885,7 @@ void ToolBarManager::AddCustomizeMenuItems(ToolBox const * pToolBar) } // popup menu for quick customization - bool bHideDisabledEntries = !SvtMenuOptions().IsEntryHidingEnabled(); + bool bHideDisabledEntries = !officecfg::Office::Common::View::Menu::DontHideDisabledEntry::get(); ::PopupMenu *pMenu = pToolBar->GetMenu(); diff --git a/include/svtools/menuoptions.hxx b/include/svtools/menuoptions.hxx deleted file mode 100644 index 1a08c736325c..000000000000 --- a/include/svtools/menuoptions.hxx +++ /dev/null @@ -1,90 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -#pragma once - -#include <svtools/svtdllapi.h> -#include <sal/types.h> -#include <tools/gen.hxx> -#include <unotools/options.hxx> -#include <memory> - -namespace osl -{ -class Mutex; -} - -/*-************************************************************************************************************ - @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 SvtMenuOptions_Impl; - -/*-************************************************************************************************************ - @short collect information about menu features - @devstatus ready to use -**-***********************************************************************************************************/ - -class SAL_WARN_UNUSED SVT_DLLPUBLIC SvtMenuOptions final : public utl::detail::Options -{ -public: - SvtMenuOptions(); - virtual ~SvtMenuOptions() override; - - /*-**************************************************************************************************** - @short interface methods to get and set value of config key "org.openoffice.Office.Common/View/Menu/..." - @descr These options describe internal states to enable/disable features of installed office. - - IsEntryHidingEnabled() - SetEntryHidingState() => Activate this field for viewing all deactivated menu entries. - Menu commands that are normally not necessary are hidden by default. - Default=false - - IsFollowMouseEnabled() - SetFollowMouseState() => Automatic selection while moving the mouse on a menu. - Default=true - - @seealso configuration package "org.openoffice.Office.Common/View/Menu" - **-***************************************************************************************************/ - - bool IsEntryHidingEnabled() const; - TriState GetMenuIconsState() const; - void SetMenuIconsState(TriState eState); - TriState GetContextMenuShortcuts() const; - void SetContextMenuShortcuts(TriState eState); - -private: - /*-**************************************************************************************************** - @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. - **-***************************************************************************************************/ - - SVT_DLLPRIVATE static ::osl::Mutex& GetOwnStaticMutex(); - -private: - std::shared_ptr<SvtMenuOptions_Impl> m_pImpl; - -}; // class SvtMenuOptions - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/unotools/itemholderbase.hxx b/include/unotools/itemholderbase.hxx index 676ed455484a..2748623a42bf 100644 --- a/include/unotools/itemholderbase.hxx +++ b/include/unotools/itemholderbase.hxx @@ -48,7 +48,6 @@ enum class EItem LinguConfig , - MenuOptions , MiscOptions , ModuleOptions , diff --git a/svtools/Library_svt.mk b/svtools/Library_svt.mk index 6a23e69b3842..bbcce42ac65b 100644 --- a/svtools/Library_svt.mk +++ b/svtools/Library_svt.mk @@ -82,7 +82,6 @@ $(eval $(call gb_Library_add_exception_objects,svt,\ svtools/source/config/fontsubstconfig \ svtools/source/config/htmlcfg \ svtools/source/config/itemholder2 \ - svtools/source/config/menuoptions \ svtools/source/config/miscopt \ svtools/source/config/slidesorterbaropt \ svtools/source/config/optionsdrawinglayer \ diff --git a/svtools/source/config/itemholder2.cxx b/svtools/source/config/itemholder2.cxx index 52993547543f..92d3226b8e1c 100644 --- a/svtools/source/config/itemholder2.cxx +++ b/svtools/source/config/itemholder2.cxx @@ -26,7 +26,6 @@ #include <com/sun/star/configuration/theDefaultProvider.hpp> #include <svtools/accessibilityoptions.hxx> -#include <svtools/menuoptions.hxx> #include <svtools/colorcfg.hxx> #include <svtools/printoptions.hxx> #include <unotools/options.hxx> @@ -128,10 +127,6 @@ void ItemHolder2::impl_newItem(TItemInfo& rItem) rItem.pItem.reset( new ::svtools::ColorConfig() ); break; - case EItem::MenuOptions : - rItem.pItem.reset( new SvtMenuOptions() ); - break; - case EItem::MiscOptions : rItem.pItem.reset( new SvtMiscOptions() ); break; diff --git a/svtools/source/config/menuoptions.cxx b/svtools/source/config/menuoptions.cxx deleted file mode 100644 index 49d2128eb0a7..000000000000 --- a/svtools/source/config/menuoptions.cxx +++ /dev/null @@ -1,413 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include <svtools/menuoptions.hxx> -#include <unotools/configitem.hxx> -#include <tools/debug.hxx> -#include <com/sun/star/uno/Any.hxx> -#include <com/sun/star/uno/Sequence.hxx> -#include <vcl/svapp.hxx> -#include <vcl/settings.hxx> - -#include "itemholder2.hxx" - -// namespaces - -using namespace ::utl ; -using namespace ::osl ; -using namespace ::com::sun::star::uno ; - -#define ROOTNODE_MENU "Office.Common/View/Menu" -#define DEFAULT_DONTHIDEDISABLEDENTRIES false -#define DEFAULT_FOLLOWMOUSE true -#define DEFAULT_MENUICONS TRISTATE_INDET -#define DEFAULT_CONTEXTMENUSHORTCUTS TRISTATE_INDET - -#define PROPERTYNAME_DONTHIDEDISABLEDENTRIES "DontHideDisabledEntry" -#define PROPERTYNAME_FOLLOWMOUSE "FollowMouse" -#define PROPERTYNAME_SHOWICONSINMENUES "ShowIconsInMenues" -#define PROPERTYNAME_SYSTEMICONSINMENUES "IsSystemIconsInMenus" -#define PROPERTYNAME_SHORTCUTSINCONTEXMENU "ShortcutsInContextMenus" - -#define PROPERTYHANDLE_DONTHIDEDISABLEDENTRIES 0 -#define PROPERTYHANDLE_FOLLOWMOUSE 1 -#define PROPERTYHANDLE_SHOWICONSINMENUES 2 -#define PROPERTYHANDLE_SYSTEMICONSINMENUES 3 -#define PROPERTYHANDLE_SHORTCUTSINCONTEXMENU 4 - -// private declarations! - -class SvtMenuOptions_Impl : public ConfigItem -{ - - // private member - - private: - bool m_bDontHideDisabledEntries ; /// cache "DontHideDisabledEntries" of Menu section - bool m_bFollowMouse ; /// cache "FollowMouse" of Menu section - TriState m_eMenuIcons ; /// cache "MenuIcons" of Menu section - TriState m_eContextMenuShortcuts ; /// cache "ShortcutsInContextMenus" of Menu section - - // public methods - - public: - - // constructor / destructor - - SvtMenuOptions_Impl(); - virtual ~SvtMenuOptions_Impl() override; - - // override methods of baseclass - - /*-**************************************************************************************************** - @short called for notify of configmanager - @descr This method is called from the ConfigManager before application ends or from the - PropertyChangeListener if the sub tree broadcasts changes. You must update your - internal values. - - @seealso baseclass ConfigItem - - @param "seqPropertyNames" is the list of properties which should be updated. - *//*-*****************************************************************************************************/ - - virtual void Notify( const Sequence< OUString >& seqPropertyNames ) override; - - // public interface - - /*-**************************************************************************************************** - @short access method to get internal values - @descr These methods give us a chance to regulate access to our internal values. - It's not used at the moment - but it's possible for the future! - *//*-*****************************************************************************************************/ - - bool IsEntryHidingEnabled() const - { return m_bDontHideDisabledEntries; } - - TriState GetMenuIconsState() const - { return m_eMenuIcons; } - - void SetMenuIconsState(TriState eState) - { - m_eMenuIcons = eState; - SetModified(); - // tdf#93451: don't Commit() here, it's too early - } - - TriState GetContextMenuShortcuts() const - { return m_eContextMenuShortcuts; } - - void SetContextMenuShortcuts(TriState eState) - { - m_eContextMenuShortcuts = eState; - SetModified(); - Commit(); - } - - // private methods - - private: - - virtual void ImplCommit() override; - - /*-**************************************************************************************************** - @short return list of fix key names of our configuration management which represent our module tree - @descr This method returns a static const list of key names. We need it to get needed values from our - configuration management. - @return A list of needed configuration keys is returned. - *//*-*****************************************************************************************************/ - - static Sequence< OUString > const & impl_GetPropertyNames(); -}; - -// constructor - -SvtMenuOptions_Impl::SvtMenuOptions_Impl() - // Init baseclasses first - : ConfigItem ( ROOTNODE_MENU ) - // Init member then. - , m_bDontHideDisabledEntries ( DEFAULT_DONTHIDEDISABLEDENTRIES ) - , m_bFollowMouse ( DEFAULT_FOLLOWMOUSE ) - , m_eMenuIcons ( DEFAULT_MENUICONS ) - , m_eContextMenuShortcuts ( DEFAULT_CONTEXTMENUSHORTCUTS ) -{ - // Use our static list of configuration keys to get his values. - Sequence< OUString > seqNames = impl_GetPropertyNames(); - Sequence< Any > seqValues = GetProperties( seqNames ) ; - - // Safe impossible cases. - // We need values from ALL configuration keys. - // Follow assignment use order of values in relation to our list of key names! - DBG_ASSERT( !(seqNames.getLength()!=seqValues.getLength()), "SvtMenuOptions_Impl::SvtMenuOptions_Impl()\nI miss some values of configuration keys!\n" ); - - bool bMenuIcons = true; - bool bSystemMenuIcons = true; - if (m_eMenuIcons == TRISTATE_INDET) - bMenuIcons = Application::GetSettings().GetStyleSettings().GetPreferredUseImagesInMenus(); - else - { - bSystemMenuIcons = false; - bMenuIcons = m_eMenuIcons != TRISTATE_FALSE; - } - - // Copy values from list in right order to our internal member. - sal_Int32 nPropertyCount = seqValues.getLength() ; - sal_Int32 nProperty = 0 ; - for( nProperty=0; nProperty<nPropertyCount; ++nProperty ) - { - // Safe impossible cases. - // Check any for valid value. - DBG_ASSERT( seqValues[nProperty].hasValue(), "SvtMenuOptions_Impl::SvtMenuOptions_Impl()\nInvalid property value for property detected!\n" ); - - if (!seqValues[nProperty].hasValue()) - continue; - - switch( nProperty ) - { - case PROPERTYHANDLE_DONTHIDEDISABLEDENTRIES : { - DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_BOOLEAN), "SvtMenuOptions_Impl::SvtMenuOptions_Impl()\nWho has changed the value type of \"Office.Common\\View\\Menu\\DontHideDisabledEntry\"?" ); - seqValues[nProperty] >>= m_bDontHideDisabledEntries; - } - break; - - case PROPERTYHANDLE_FOLLOWMOUSE : { - DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_BOOLEAN), "SvtMenuOptions_Impl::SvtMenuOptions_Impl()\nWho has changed the value type of \"Office.Common\\View\\Menu\\FollowMouse\"?" ); - seqValues[nProperty] >>= m_bFollowMouse; - } - break; - case PROPERTYHANDLE_SHOWICONSINMENUES : { - DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_BOOLEAN), "SvtMenuOptions_Impl::SvtMenuOptions_Impl()\nWho has changed the value type of \"Office.Common\\View\\Menu\\ShowIconsInMenues\"?" ); - seqValues[nProperty] >>= bMenuIcons; - } - break; - case PROPERTYHANDLE_SYSTEMICONSINMENUES : { - DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_BOOLEAN), "SvtMenuOptions_Impl::SvtMenuOptions_Impl()\nWho has changed the value type of \"Office.Common\\View\\Menu\\IsSystemIconsInMenus\"?" ); - seqValues[nProperty] >>= bSystemMenuIcons; - } - break; - case PROPERTYHANDLE_SHORTCUTSINCONTEXMENU : { - DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_SHORT), "SvtMenuOptions_Impl::SvtMenuOptions_Impl()\nWho has changed the value type of \"Office.Common\\View\\Menu\\ShortcutsInContextMenus\"?" ); - sal_Int16 nContextMenuShortcuts; - if ( seqValues[nProperty] >>= nContextMenuShortcuts ) - m_eContextMenuShortcuts = static_cast<TriState>(nContextMenuShortcuts); - } - break; - } - } - - m_eMenuIcons = bSystemMenuIcons ? TRISTATE_INDET : static_cast<TriState>(bMenuIcons); - - EnableNotification( seqNames ); -} - -// destructor - -SvtMenuOptions_Impl::~SvtMenuOptions_Impl() -{ - assert(!IsModified()); // should have been committed -} - -// public method - -void SvtMenuOptions_Impl::Notify( const Sequence< OUString >& seqPropertyNames ) -{ - // Use given list of updated properties to get his values from configuration directly! - Sequence< Any > seqValues = GetProperties( seqPropertyNames ); - // Safe impossible cases. - // We need values from ALL notified configuration keys. - DBG_ASSERT( !(seqPropertyNames.getLength()!=seqValues.getLength()), "SvtMenuOptions_Impl::Notify()\nI miss some values of configuration keys!\n" ); - - bool bMenuSettingsChanged = false; - bool bMenuIcons = true; - bool bSystemMenuIcons = true; - if (m_eMenuIcons == TRISTATE_INDET) - bMenuIcons = Application::GetSettings().GetStyleSettings().GetUseImagesInMenus(); - else - { - bSystemMenuIcons = false; - bMenuIcons = m_eMenuIcons != TRISTATE_FALSE; - } - - // Step over list of property names and get right value from corresponding value list to set it on internal members! - sal_Int32 nCount = seqPropertyNames.getLength(); - for( sal_Int32 nProperty=0; nProperty<nCount; ++nProperty ) - { - if( seqPropertyNames[nProperty] == PROPERTYNAME_DONTHIDEDISABLEDENTRIES ) - { - DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_BOOLEAN), "SvtMenuOptions_Impl::Notify()\nWho has changed the value type of \"Office.Common\\View\\Menu\\DontHideDisabledEntry\"?" ); - seqValues[nProperty] >>= m_bDontHideDisabledEntries; - } - else if( seqPropertyNames[nProperty] == PROPERTYNAME_FOLLOWMOUSE ) - { - DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_BOOLEAN), "SvtMenuOptions_Impl::Notify()\nWho has changed the value type of \"Office.Common\\View\\Menu\\FollowMouse\"?" ); - seqValues[nProperty] >>= m_bFollowMouse; - } - else if( seqPropertyNames[nProperty] == PROPERTYNAME_SHOWICONSINMENUES ) - { - DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_BOOLEAN), "SvtMenuOptions_Impl::SvtMenuOptions_Impl()\nWho has changed the value type of \"Office.Common\\View\\Menu\\ShowIconsInMenues\"?" ); - bMenuSettingsChanged |= seqValues[nProperty] >>= bMenuIcons; - } - else if( seqPropertyNames[nProperty] == PROPERTYNAME_SYSTEMICONSINMENUES ) - { - DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_BOOLEAN), "SvtMenuOptions_Impl::SvtMenuOptions_Impl()\nWho has changed the value type of \"Office.Common\\View\\Menu\\IsSystemIconsInMenus\"?" ); - bMenuSettingsChanged |= seqValues[nProperty] >>= bSystemMenuIcons; - } - else if( seqPropertyNames[nProperty] == PROPERTYNAME_SHORTCUTSINCONTEXMENU ) - { - DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_SHORT), "SvtMenuOptions_Impl::SvtMenuOptions_Impl()\nWho has changed the value type of \"Office.Common\\View\\Menu\\ShortcutsInContextMenus\"?" ); - sal_Int16 nContextMenuShortcuts; - if ( seqValues[nProperty] >>= nContextMenuShortcuts ) - m_eContextMenuShortcuts = static_cast<TriState>(nContextMenuShortcuts); - } - else assert( false && "SvtMenuOptions_Impl::Notify()\nUnknown property detected ... I can't handle these!" ); - } - - if ( bMenuSettingsChanged ) - m_eMenuIcons = bSystemMenuIcons ? TRISTATE_INDET : static_cast<TriState>(bMenuIcons); -} - -// public method - -void SvtMenuOptions_Impl::ImplCommit() -{ - // Get names of supported properties, create a list for values and copy current values to it. - Sequence< OUString > seqNames = impl_GetPropertyNames(); - sal_Int32 nCount = seqNames.getLength(); - Sequence< Any > seqValues ( nCount ); - for( sal_Int32 nProperty=0; nProperty<nCount; ++nProperty ) - { - switch( nProperty ) - { - case PROPERTYHANDLE_DONTHIDEDISABLEDENTRIES : { - seqValues[nProperty] <<= m_bDontHideDisabledEntries; - } - break; - - case PROPERTYHANDLE_FOLLOWMOUSE : { - seqValues[nProperty] <<= m_bFollowMouse; - } - break; - //Output cache of current setting as possibly modified by System Theme for older version - case PROPERTYHANDLE_SHOWICONSINMENUES : { - bool bValue = Application::GetSettings().GetStyleSettings().GetUseImagesInMenus(); - seqValues[nProperty] <<= bValue; - } - break; - case PROPERTYHANDLE_SYSTEMICONSINMENUES : { - bool bValue = m_eMenuIcons == TRISTATE_INDET; - seqValues[nProperty] <<= bValue; - } - break; - case PROPERTYHANDLE_SHORTCUTSINCONTEXMENU : { - seqValues[nProperty] <<= static_cast<sal_Int16>(m_eContextMenuShortcuts); - } - break; - } - } - // Set properties in configuration. - PutProperties( seqNames, seqValues ); -} - -// private method - -Sequence< OUString > const & SvtMenuOptions_Impl::impl_GetPropertyNames() -{ - static const Sequence<OUString> seqPropertyNames { - OUString(PROPERTYNAME_DONTHIDEDISABLEDENTRIES) , - OUString(PROPERTYNAME_FOLLOWMOUSE) , - OUString(PROPERTYNAME_SHOWICONSINMENUES) , - OUString(PROPERTYNAME_SYSTEMICONSINMENUES) , - OUString(PROPERTYNAME_SHORTCUTSINCONTEXMENU) - }; - return seqPropertyNames; -} - -namespace { - -std::weak_ptr<SvtMenuOptions_Impl> g_pMenuOptions; - -} - -SvtMenuOptions::SvtMenuOptions() -{ - // Global access, must be guarded (multithreading!). - MutexGuard aGuard( GetOwnStaticMutex() ); - - m_pImpl = g_pMenuOptions.lock(); - if( !m_pImpl ) - { - m_pImpl = std::make_shared<SvtMenuOptions_Impl>(); - g_pMenuOptions = m_pImpl; - svtools::ItemHolder2::holdConfigItem(EItem::MenuOptions); - } -} - -SvtMenuOptions::~SvtMenuOptions() -{ - // Global access, must be guarded (multithreading!) - MutexGuard aGuard( GetOwnStaticMutex() ); - - m_pImpl.reset(); -} - -// public method - -bool SvtMenuOptions::IsEntryHidingEnabled() const -{ - MutexGuard aGuard( GetOwnStaticMutex() ); - return m_pImpl->IsEntryHidingEnabled(); -} - -// public method - -TriState SvtMenuOptions::GetMenuIconsState() const -{ - MutexGuard aGuard( GetOwnStaticMutex() ); - return m_pImpl->GetMenuIconsState(); -} - -// public method - -void SvtMenuOptions::SetMenuIconsState(TriState eState) -{ - MutexGuard aGuard( GetOwnStaticMutex() ); - m_pImpl->SetMenuIconsState(eState); -} - -TriState SvtMenuOptions::GetContextMenuShortcuts() const -{ - MutexGuard aGuard( GetOwnStaticMutex() ); - return m_pImpl->GetContextMenuShortcuts(); -} - -void SvtMenuOptions::SetContextMenuShortcuts(TriState eState) -{ - MutexGuard aGuard( GetOwnStaticMutex() ); - m_pImpl->SetContextMenuShortcuts(eState); -} - -// private method - -Mutex& SvtMenuOptions::GetOwnStaticMutex() -{ - static Mutex ourMutex; - - return ourMutex; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |