Files
loongoffice/framework/source/accelerators/acceleratorcache.cxx
Stephan Bergmann 3c815c9785 No need for AcceleratorCache::takeOver...
...as it does the same as the copy assignment op.  And both of those are
apparently already only called with SolarMutex locked, so no need to lock it
again.  So the copy assignment op (as well as the other special memeber
functions) can be left implicitly-declared.  (And some uses of the original
takeOver can be optimized to use move assignment.)

Change-Id: I279a5e3ee85ff2342d6ef5f672108a0712fe116d
Reviewed-on: https://gerrit.libreoffice.org/72831
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2019-05-23 16:49:15 +02:00

127 lines
3.7 KiB
C++

/* -*- 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 <accelerators/acceleratorcache.hxx>
#include <xml/acceleratorconfigurationreader.hxx>
#include <com/sun/star/container/ElementExistException.hpp>
#include <com/sun/star/container/NoSuchElementException.hpp>
#include <vcl/svapp.hxx>
namespace framework
{
bool AcceleratorCache::hasKey(const css::awt::KeyEvent& aKey) const
{
SolarMutexGuard g;
return (m_lKey2Commands.find(aKey) != m_lKey2Commands.end());
}
bool AcceleratorCache::hasCommand(const OUString& sCommand) const
{
SolarMutexGuard g;
return (m_lCommand2Keys.find(sCommand) != m_lCommand2Keys.end());
}
AcceleratorCache::TKeyList AcceleratorCache::getAllKeys() const
{
SolarMutexGuard g;
TKeyList lKeys;
lKeys.reserve(m_lKey2Commands.size());
for (auto const& key2Command : m_lKey2Commands)
{
lKeys.push_back(key2Command.first);
}
return lKeys;
}
void AcceleratorCache::setKeyCommandPair(const css::awt::KeyEvent& aKey ,
const OUString& sCommand)
{
SolarMutexGuard g;
// register command for the specified key
m_lKey2Commands[aKey] = sCommand;
// update optimized structure to bind multiple keys to one command
TKeyList& rKeyList = m_lCommand2Keys[sCommand];
rKeyList.push_back(aKey);
}
AcceleratorCache::TKeyList AcceleratorCache::getKeysByCommand(const OUString& sCommand) const
{
SolarMutexGuard g;
TCommand2Keys::const_iterator pCommand = m_lCommand2Keys.find(sCommand);
if (pCommand == m_lCommand2Keys.end())
throw css::container::NoSuchElementException();
return pCommand->second;
}
OUString AcceleratorCache::getCommandByKey(const css::awt::KeyEvent& aKey) const
{
SolarMutexGuard g;
TKey2Commands::const_iterator pKey = m_lKey2Commands.find(aKey);
if (pKey == m_lKey2Commands.end())
throw css::container::NoSuchElementException();
return pKey->second;
}
void AcceleratorCache::removeKey(const css::awt::KeyEvent& aKey)
{
SolarMutexGuard g;
// check if key exists
TKey2Commands::const_iterator pKey = m_lKey2Commands.find(aKey);
if (pKey == m_lKey2Commands.end())
return;
// get its registered command
// Because we must know its place inside the optimized
// structure, which bind keys to commands, too!
OUString sCommand = pKey->second;
pKey = m_lKey2Commands.end(); // nobody should use an undefined value .-)
// remove key from primary list
m_lKey2Commands.erase(aKey);
// remove key from optimized command list
m_lCommand2Keys.erase(sCommand);
}
void AcceleratorCache::removeCommand(const OUString& sCommand)
{
SolarMutexGuard g;
const TKeyList& lKeys = getKeysByCommand(sCommand);
for (auto const& lKey : lKeys)
{
removeKey(lKey);
}
m_lCommand2Keys.erase(sCommand);
}
} // namespace framework
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */