dbf16c029fccc0e24a84e667ff006f36d1defa37
[idea/community.git] / platform / editor-ui-api / src / com / intellij / openapi / actionSystem / ActionManager.java
1 /*
2  * Copyright 2000-2017 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.actionSystem;
17
18 import com.intellij.openapi.Disposable;
19 import com.intellij.openapi.actionSystem.ex.AnActionListener;
20 import com.intellij.openapi.application.ApplicationManager;
21 import com.intellij.openapi.extensions.PluginId;
22 import com.intellij.openapi.util.ActionCallback;
23 import org.jetbrains.annotations.NonNls;
24 import org.jetbrains.annotations.NotNull;
25 import org.jetbrains.annotations.Nullable;
26
27 import javax.swing.*;
28 import java.awt.*;
29 import java.awt.event.InputEvent;
30
31 /**
32  * A manager for actions. Used to register and unregister actions, also
33  * contains utility methods to easily fetch action by id and id by action.
34  *
35  * @see AnAction
36  */
37 public abstract class ActionManager {
38   /**
39    * Fetches the instance of ActionManager implementation.
40    */
41   public static ActionManager getInstance(){
42     return ApplicationManager.getApplication().getComponent(ActionManager.class);
43   }
44
45   /**
46    * Factory method that creates an <code>ActionPopupMenu</code> from the
47    * specified group. The specified place is associated with the created popup.
48    *
49    * @param place Determines the place that will be set for {@link AnActionEvent} passed
50    *  when an action from the group is either performed or updated
51    *  See {@link com.intellij.openapi.actionSystem.ActionPlaces}
52    *
53    * @param group Group from which the actions for the menu are taken.
54    *
55    * @return An instance of <code>ActionPopupMenu</code>
56    */
57   public abstract ActionPopupMenu createActionPopupMenu(@NonNls String place, @NotNull ActionGroup group);
58
59   /**
60    * Factory method that creates an <code>ActionToolbar</code> from the
61    * specified group. The specified place is associated with the created toolbar.
62    *
63    * @param place Determines the place that will be set for {@link AnActionEvent} passed
64    *  when an action from the group is either performed or updated.
65    *  See {@link com.intellij.openapi.actionSystem.ActionPlaces}
66    *
67    * @param group Group from which the actions for the toolbar are taken.
68    *
69    * @param horizontal The orientation of the toolbar (true - horizontal, false - vertical)
70    *
71    * @return An instance of <code>ActionToolbar</code>
72    */
73   public abstract ActionToolbar createActionToolbar(@NonNls String place, @NotNull ActionGroup group, boolean horizontal);
74
75   /**
76    * Returns action associated with the specified actionId.
77    *
78    * @param actionId Id of the registered action
79    *
80    * @return Action associated with the specified actionId, <code>null</code> if
81    *  there is no actions associated with the specified actionId
82    *
83    * @exception java.lang.IllegalArgumentException if <code>actionId</code> is <code>null</code>
84    *
85    * @see com.intellij.openapi.actionSystem.IdeActions
86    */
87   public abstract AnAction getAction(@NonNls @NotNull String actionId);
88
89   /**
90    * Returns actionId associated with the specified action.
91    *
92    * @return id associated with the specified action, <code>null</code> if action
93    *  is not registered
94    *
95    * @exception java.lang.IllegalArgumentException if <code>action</code> is <code>null</code>
96    */
97   public abstract String getId(@NotNull AnAction action);
98
99   /**
100    * Registers the specified action with the specified id. Note that IDEA's keymaps
101    * processing deals only with registered actions.
102    *
103    * @param actionId Id to associate with the action
104    * @param action Action to register
105    */
106   public abstract void registerAction(@NonNls @NotNull String actionId, @NotNull AnAction action);
107
108   /**
109    * Registers the specified action with the specified id.
110    *
111    * @param actionId Id to associate with the action
112    * @param action   Action to register
113    * @param pluginId Identifier of the plugin owning the action. Used to show the actions in the
114    *                 correct place under the "Plugins" node in the "Keymap" settings pane and similar dialogs.
115    */
116   public abstract void registerAction(@NotNull String actionId, @NotNull AnAction action, @Nullable PluginId pluginId);
117
118   /**
119    * Unregisters the action with the specified actionId.
120    *
121    * @param actionId Id of the action to be unregistered
122    */
123   public abstract void unregisterAction(@NotNull String actionId);
124
125   /**
126    * Returns the list of all registered action IDs with the specified prefix.
127    *
128    * @return all action <code>id</code>s which have the specified prefix.
129    * @since 5.1
130    */
131   public abstract String[] getActionIds(@NotNull String idPrefix);
132
133   /**
134    * Checks if the specified action ID represents an action group and not an individual action.
135    * Calling this method does not cause instantiation of a specific action class corresponding
136    * to the action ID.
137    *
138    * @param actionId the ID to check.
139    * @return true if the ID represents an action group, false otherwise.
140    * @since 5.1
141    */
142   public abstract boolean isGroup(@NotNull String actionId);
143
144   /**
145    * Creates a panel with buttons which invoke actions from the specified action group.
146    *
147    * @param actionPlace        the place where the panel will be used (see {@link ActionPlaces}).
148    * @param messageActionGroup the action group from which the toolbar is created.
149    * @return the created panel.
150    * @since 5.1
151    */
152   public abstract JComponent createButtonToolbar(final String actionPlace, @NotNull ActionGroup messageActionGroup);
153
154   @Nullable
155   public abstract AnAction getActionOrStub(@NonNls String id);
156
157   public abstract void addTimerListener(int delay, TimerListener listener);
158
159   public abstract void removeTimerListener(TimerListener listener);
160
161   public abstract void addTransparentTimerListener(int delay, TimerListener listener);
162
163   public abstract void removeTransparentTimerListener(TimerListener listener);
164
165   public abstract ActionCallback tryToExecute(@NotNull AnAction action, @NotNull InputEvent inputEvent, @Nullable Component contextComponent,
166                                               @Nullable String place, boolean now);
167
168   public abstract void addAnActionListener(AnActionListener listener);
169   public abstract void addAnActionListener(AnActionListener listener, Disposable parentDisposable);
170
171   public abstract void removeAnActionListener(AnActionListener listener);
172
173   @Nullable
174   public abstract KeyboardShortcut getKeyboardShortcut(@NonNls @NotNull String actionId);
175
176   @NotNull
177   public String getComponentName() {
178     return "ActionManager";
179   }
180 }