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