diff options
author | Noel Grandin <noelgrandin@gmail.com> | 2021-08-09 18:56:13 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2021-08-10 13:32:57 +0200 |
commit | afbade63e0cfbd4f39a3558f31049328c06ea82e (patch) | |
tree | cc18b5fff68de0ef629d79f303c201b138f88694 | |
parent | 41bca9976de53c9e013438118381a646530c5365 (diff) |
flatten Accelerator a little
Change-Id: I188a9ce69a89958f776f696f1da2f96b82a7f6da
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120217
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r-- | vcl/inc/accel.hxx | 12 | ||||
-rw-r--r-- | vcl/source/window/accel.cxx | 52 |
2 files changed, 27 insertions, 37 deletions
diff --git a/vcl/inc/accel.hxx b/vcl/inc/accel.hxx index fc763bd58f3d..9d597f76fd47 100644 --- a/vcl/inc/accel.hxx +++ b/vcl/inc/accel.hxx @@ -20,12 +20,14 @@ #pragma once #include <config_options.h> +#include <tools/solar.h> #include <tools/link.hxx> #include <vcl/keycod.hxx> #include <vcl/dllapi.h> #include <memory> +#include <map> +#include <vector> -class ImplAccelData; class CommandEvent; class Accelerator; @@ -40,12 +42,16 @@ public: bool mbEnabled; }; +typedef ::std::vector< std::unique_ptr<ImplAccelEntry> > ImplAccelList; + class Accelerator { friend class ImplAccelManager; private: - std::unique_ptr<ImplAccelData> mpData; + typedef ::std::map< sal_uLong, ImplAccelEntry* > ImplAccelMap; + ImplAccelMap maKeyMap; // for keycodes, generated with a code + ImplAccelList maIdList; // Id-List Link<Accelerator&,void> maActivateHdl; Link<Accelerator&,void> maSelectHdl; @@ -54,7 +60,7 @@ private: bool* mpDel; void ImplInit(); - void ImplCopyData( ImplAccelData& rAccelData ); + void ImplCopyData( const Accelerator& rAccelData ); void ImplDeleteData(); void ImplInsertAccel(sal_uInt16 nItemId, const vcl::KeyCode& rKeyCode, bool bEnable, Accelerator* pAutoAccel); diff --git a/vcl/source/window/accel.cxx b/vcl/source/window/accel.cxx index 14861258c352..a20c289f201a 100644 --- a/vcl/source/window/accel.cxx +++ b/vcl/source/window/accel.cxx @@ -19,24 +19,11 @@ #include <sal/log.hxx> #include <osl/diagnose.h> -#include <tools/solar.h> #include <accel.hxx> -#include <map> -#include <vector> - -typedef ::std::map< sal_uLong, ImplAccelEntry* > ImplAccelMap; -typedef ::std::vector< std::unique_ptr<ImplAccelEntry> > ImplAccelList; #define ACCELENTRY_NOTFOUND (sal_uInt16(0xFFFF)) -class ImplAccelData -{ -public: - ImplAccelMap maKeyMap; // for keycodes, generated with a code - ImplAccelList maIdList; // Id-List -}; - -static sal_uInt16 ImplAccelEntryGetIndex( ImplAccelList* pList, sal_uInt16 nId, +static sal_uInt16 ImplAccelEntryGetIndex( const ImplAccelList* pList, sal_uInt16 nId, sal_uInt16* pIndex = nullptr ) { size_t nLow; @@ -124,17 +111,17 @@ void Accelerator::ImplInit() ImplAccelEntry* Accelerator::ImplGetAccelData( const vcl::KeyCode& rKeyCode ) const { - ImplAccelMap::iterator it = mpData->maKeyMap.find( rKeyCode.GetFullCode() ); - if( it != mpData->maKeyMap.end() ) + auto it = maKeyMap.find( rKeyCode.GetFullCode() ); + if( it != maKeyMap.end() ) return it->second; else return nullptr; } -void Accelerator::ImplCopyData( ImplAccelData& rAccelData ) +void Accelerator::ImplCopyData( const Accelerator& rAccelData ) { // copy table - for (std::unique_ptr<ImplAccelEntry>& i : rAccelData.maIdList) + for (const std::unique_ptr<ImplAccelEntry>& i : rAccelData.maIdList) { std::unique_ptr<ImplAccelEntry> pEntry(new ImplAccelEntry( *i )); @@ -147,18 +134,18 @@ void Accelerator::ImplCopyData( ImplAccelData& rAccelData ) else pEntry->mpAutoAccel = nullptr; - mpData->maKeyMap.insert( std::make_pair( pEntry->maKeyCode.GetFullCode(), pEntry.get() ) ); - mpData->maIdList.push_back( std::move(pEntry) ); + maKeyMap.insert( std::make_pair( pEntry->maKeyCode.GetFullCode(), pEntry.get() ) ); + maIdList.push_back( std::move(pEntry) ); } } void Accelerator::ImplDeleteData() { // delete accelerator-entries using the id-table - for (const std::unique_ptr<ImplAccelEntry>& pEntry : mpData->maIdList) { + for (const std::unique_ptr<ImplAccelEntry>& pEntry : maIdList) { delete pEntry->mpAutoAccel; } - mpData->maIdList.clear(); + maIdList.clear(); } void Accelerator::ImplInsertAccel( sal_uInt16 nItemId, const vcl::KeyCode& rKeyCode, @@ -204,25 +191,23 @@ void Accelerator::ImplInsertAccel( sal_uInt16 nItemId, const vcl::KeyCode& rKeyC { OSL_FAIL( "Accelerator::InsertItem(): KeyCode with KeyCode 0 not allowed" ); } - else if ( !mpData->maKeyMap.insert( std::make_pair( nCode, pEntry.get() ) ).second ) + else if ( !maKeyMap.insert( std::make_pair( nCode, pEntry.get() ) ).second ) { SAL_WARN( "vcl", "Accelerator::InsertItem(): KeyCode (Key: " << nCode << ") already exists" ); } else - ImplAccelEntryInsert( &(mpData->maIdList), std::move(pEntry) ); + ImplAccelEntryInsert( &maIdList, std::move(pEntry) ); } Accelerator::Accelerator() { ImplInit(); - mpData.reset(new ImplAccelData); } Accelerator::Accelerator(const Accelerator& rAccel) { ImplInit(); - mpData.reset(new ImplAccelData); - ImplCopyData(*rAccel.mpData); + ImplCopyData(rAccel); } Accelerator::~Accelerator() @@ -252,14 +237,13 @@ void Accelerator::InsertItem( sal_uInt16 nItemId, const vcl::KeyCode& rKeyCode ) sal_uInt16 Accelerator::GetItemCount() const { - - return static_cast<sal_uInt16>(mpData->maIdList.size()); + return static_cast<sal_uInt16>(maIdList.size()); } sal_uInt16 Accelerator::GetItemId( sal_uInt16 nPos ) const { - ImplAccelEntry* pEntry = ( nPos < mpData->maIdList.size() ) ? mpData->maIdList[ nPos ].get() : nullptr; + ImplAccelEntry* pEntry = ( nPos < maIdList.size() ) ? maIdList[ nPos ].get() : nullptr; if ( pEntry ) return pEntry->mnId; else @@ -269,9 +253,9 @@ sal_uInt16 Accelerator::GetItemId( sal_uInt16 nPos ) const Accelerator* Accelerator::GetAccel( sal_uInt16 nItemId ) const { - sal_uInt16 nIndex = ImplAccelEntryGetIndex( &(mpData->maIdList), nItemId ); + sal_uInt16 nIndex = ImplAccelEntryGetIndex( &maIdList, nItemId ); if ( nIndex != ACCELENTRY_NOTFOUND ) - return mpData->maIdList[ nIndex ]->mpAccel; + return maIdList[ nIndex ]->mpAccel; else return nullptr; } @@ -286,8 +270,8 @@ Accelerator& Accelerator::operator=( const Accelerator& rAccel ) // delete and copy tables ImplDeleteData(); - mpData->maKeyMap.clear(); - ImplCopyData(*rAccel.mpData); + maKeyMap.clear(); + ImplCopyData(rAccel); return *this; } |