replaced <code></code> with more concise {@code}
[idea/community.git] / platform / platform-api / src / com / intellij / openapi / keymap / Keymap.java
1 /*
2  * Copyright 2000-2016 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.openapi.keymap;
17
18 import com.intellij.openapi.actionSystem.KeyboardShortcut;
19 import com.intellij.openapi.actionSystem.MouseShortcut;
20 import com.intellij.openapi.actionSystem.Shortcut;
21 import com.intellij.openapi.options.Scheme;
22 import org.jetbrains.annotations.NotNull;
23 import org.jetbrains.annotations.Nullable;
24
25 import javax.swing.*;
26 import java.util.Collection;
27 import java.util.List;
28 import java.util.Map;
29
30 public interface Keymap extends Scheme {
31   //think about name
32   @NotNull
33   @Override
34   String getName();
35
36   //think about name
37   String getPresentableName();
38
39   @Nullable
40   Keymap getParent();
41
42   boolean canModify();
43
44   /**
45    * @return Action ids including parent keymap ids
46    */
47   @NotNull
48   Collection<String> getActionIdList();
49
50   @NotNull
51   String[] getActionIds();
52
53   /**
54    * @return all keyboard shortcuts for the action with the specified {@code actionId}
55    * or an empty array if the action doesn't have any keyboard shortcut.
56    */
57   // 60 external usages - actionId cannot be marked as NotNull
58   @NotNull
59   Shortcut[] getShortcuts(@Nullable String actionId);
60
61   /**
62    * @return all actions including parent keymap that have the specified first keystroke. If there are no
63    * such actions then the method returns an empty array.
64    */
65   @NotNull
66   String[] getActionIds(@NotNull KeyStroke firstKeyStroke);
67
68   /**
69    * @return all actions that have the specified first and second keystrokes. If there are no
70    * such actions then the method returns an empty array.
71    */
72   String[] getActionIds(@NotNull KeyStroke firstKeyStroke, @Nullable KeyStroke secondKeyStroke);
73
74   String[] getActionIds(@NotNull Shortcut shortcut);
75
76   /**
77    * @return all actions with specified mouse shortcut.  If there are no
78    * such action then the method returns an empty array.
79    */
80   @NotNull
81   String[] getActionIds(@NotNull MouseShortcut shortcut);
82
83   void addShortcut(@NotNull String actionId, @NotNull Shortcut shortcut);
84
85   void removeShortcut(@NotNull String actionId, @NotNull Shortcut shortcut);
86
87   @NotNull
88   Map<String, List<KeyboardShortcut>> getConflicts(@NotNull String actionId, @NotNull KeyboardShortcut keyboardShortcut);
89
90   void addShortcutChangeListener(@NotNull Listener listener);
91
92   void removeShortcutChangeListener(@NotNull Listener listener);
93
94   void removeAllActionShortcuts(@NotNull String actionId);
95
96   @NotNull
97   Keymap deriveKeymap(@NotNull String newName);
98
99   boolean hasActionId(@NotNull String actionId, @NotNull MouseShortcut shortcut);
100
101   interface Listener {
102     void onShortcutChanged(String actionId);
103   }
104 }