1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
/* -*- 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 .
*/
#ifndef INCLUDED_FRAMEWORK_SOURCE_INC_ACCELERATORS_ACCELERATORCACHE_HXX
#define INCLUDED_FRAMEWORK_SOURCE_INC_ACCELERATORS_ACCELERATORCACHE_HXX
#include <general.h>
#include <stdtypes.h>
#include <com/sun/star/awt/KeyEvent.hpp>
#include <comphelper/sequenceasvector.hxx>
// definition
namespace framework
{
/**
@short implements a cache for any accelerator configuration.
@descr Its implemented threadsafe, supports copy-on-write pattern
and a flush mechansim to support concurrent access to the same
configuration.
copy-on-write ... How? Do the following:
*/
class AcceleratorCache
{
// const, types
public:
/** TODO document me
commands -> keys
*/
typedef ::comphelper::SequenceAsVector< css::awt::KeyEvent > TKeyList;
typedef BaseHash< TKeyList > TCommand2Keys;
/** TODO document me
keys -> commands
*/
typedef std::unordered_map< css::awt::KeyEvent ,
OUString ,
KeyEventHashCode ,
KeyEventEqualsFunc > TKey2Commands;
// member
private:
/** map commands to keys in relation 1:n.
First key is interpreted as preferred one! */
TCommand2Keys m_lCommand2Keys;
/** map keys to commands in relation 1:1. */
TKey2Commands m_lKey2Commands;
// interface
public:
/** @short creates a new - but empty - cache instance. */
AcceleratorCache();
/** @short make a copy of this cache.
@descr Used for the copy-on-write feature.
*/
AcceleratorCache(const AcceleratorCache& rCopy);
/** @short does nothing real. */
virtual ~AcceleratorCache();
/** @short write changes back to the original container.
@param rCopy
the (changed!) copy, which should be written
back to this original container.
*/
virtual void takeOver(const AcceleratorCache& rCopy);
/** TODO document me */
AcceleratorCache& operator=(const AcceleratorCache& rCopy);
/** @short checks if the specified key exists.
@param aKey
the key, which should be checked.
@return [bool]
sal_True if the speicfied key exists inside this container.
*/
virtual bool hasKey(const css::awt::KeyEvent& aKey) const;
virtual bool hasCommand(const OUString& sCommand) const;
/** TODO document me */
virtual TKeyList getAllKeys() const;
/** @short add a new or change an existing key-command pair
of this container.
@param aKey
describe the key.
@param sCommand
describe the command.
*/
virtual void setKeyCommandPair(const css::awt::KeyEvent& aKey ,
const OUString& sCommand);
/** @short returns the list of keys, which are registered
for this command.
@param sCommand
describe the command.
@return [TKeyList]
the list of registered keys. Can be empty!
*/
virtual TKeyList getKeysByCommand(const OUString& sCommand) const;
/** TODO */
virtual OUString getCommandByKey(const css::awt::KeyEvent& aKey) const;
/** TODO */
virtual void removeKey(const css::awt::KeyEvent& aKey);
virtual void removeCommand(const OUString& sCommand);
};
} // namespace framework
#endif // INCLUDED_FRAMEWORK_SOURCE_INC_ACCELERATORS_ACCELERATORCACHE_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|