1
1
// Aseprite
2
- // Copyright (C) 2018 Igara Studio S.A.
2
+ // Copyright (C) 2018-2022 Igara Studio S.A.
3
3
// Copyright (C) 2001-2018 David Capello
4
4
//
5
5
// This program is distributed under the terms of
15
15
#include " ui/accelerator.h"
16
16
17
17
#include < memory>
18
+ #include < utility>
18
19
#include < vector>
19
20
20
21
namespace ui {
@@ -31,6 +32,7 @@ namespace app {
31
32
32
33
enum class KeySource {
33
34
Original,
35
+ ExtensionDefined,
34
36
UserDefined
35
37
};
36
38
@@ -98,20 +100,20 @@ namespace app {
98
100
return KeyAction (int (a) & int (b));
99
101
}
100
102
103
+ using KeySourceAccelList = std::vector<std::pair<KeySource, ui::Accelerator>>;
104
+
101
105
class Key {
102
106
public:
107
+ Key (const Key& key);
103
108
Key (Command* command, const Params& params, KeyContext keyContext);
104
109
Key (KeyType type, tools::Tool* tool);
105
110
explicit Key (KeyAction action);
106
111
explicit Key (WheelAction action);
107
112
108
113
KeyType type () const { return m_type; }
109
- const ui::Accelerators& accels () const {
110
- return (m_useUsers ? m_users: m_accels);
111
- }
112
- const ui::Accelerators& origAccels () const { return m_accels; }
113
- const ui::Accelerators& userAccels () const { return m_users; }
114
- const ui::Accelerators& userRemovedAccels () const { return m_userRemoved; }
114
+ const ui::Accelerators& accels () const ;
115
+ const KeySourceAccelList addsKeys () const { return m_adds; }
116
+ const KeySourceAccelList delsKeys () const { return m_dels; }
115
117
116
118
void add (const ui::Accelerator& accel,
117
119
const KeySource source,
@@ -122,9 +124,15 @@ namespace app {
122
124
bool isLooselyPressed () const ;
123
125
124
126
bool hasAccel (const ui::Accelerator& accel) const ;
125
- void disableAccel (const ui::Accelerator& accel);
127
+ bool hasUserDefinedAccels () const ;
128
+
129
+ // The KeySource indicates from where the key was disabled
130
+ // (e.g. if it was removed from an extension-defined file, or from
131
+ // user-defined).
132
+ void disableAccel (const ui::Accelerator& accel,
133
+ const KeySource source);
126
134
127
- // Resets user accelerators to the original ones.
135
+ // Resets user accelerators to the original & extension-defined ones.
128
136
void reset ();
129
137
130
138
void copyOriginalToUser ();
@@ -144,10 +152,11 @@ namespace app {
144
152
145
153
private:
146
154
KeyType m_type;
147
- ui::Accelerators m_accels; // Default accelerators (from gui.xml)
148
- ui::Accelerators m_users; // User-defined accelerators
149
- ui::Accelerators m_userRemoved; // Default accelerators removed by user
150
- bool m_useUsers;
155
+ KeySourceAccelList m_adds;
156
+ KeySourceAccelList m_dels;
157
+ // Final list of accelerators after processing the
158
+ // addition/deletion of extension-defined & user-defined keys.
159
+ mutable std::unique_ptr<ui::Accelerators> m_accels;
151
160
KeyContext m_keycontext;
152
161
153
162
// for KeyType::Command
@@ -161,8 +170,8 @@ namespace app {
161
170
WheelAction m_wheelAction;
162
171
};
163
172
164
- typedef std::shared_ptr<Key> KeyPtr ;
165
- typedef std::vector<KeyPtr> Keys ;
173
+ using KeyPtr = std::shared_ptr<Key> ;
174
+ using Keys = std::vector<KeyPtr>;
166
175
167
176
std::string convertKeyContextToString (KeyContext keyContext);
168
177
std::string convertKeyContextToUserFriendlyString (KeyContext keyContext);
0 commit comments