/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.core;
import com.google.gwt.resources.client.ClientBundle;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.inject.name.Named;
import org.eclipse.che.ide.Resources;
import org.eclipse.che.ide.actions.CloseActiveEditorAction;
import org.eclipse.che.ide.actions.CollapseAllAction;
import org.eclipse.che.ide.actions.CompleteAction;
import org.eclipse.che.ide.actions.ConvertFolderToProjectAction;
import org.eclipse.che.ide.actions.CreateProjectAction;
import org.eclipse.che.ide.actions.DeleteResourceAction;
import org.eclipse.che.ide.actions.DownloadProjectAction;
import org.eclipse.che.ide.actions.DownloadResourceAction;
import org.eclipse.che.ide.actions.DownloadWsAction;
import org.eclipse.che.ide.actions.EditFileAction;
import org.eclipse.che.ide.actions.ExpandEditorAction;
import org.eclipse.che.ide.actions.FormatterAction;
import org.eclipse.che.ide.actions.FullTextSearchAction;
import org.eclipse.che.ide.actions.GoIntoAction;
import org.eclipse.che.ide.actions.HotKeysListAction;
import org.eclipse.che.ide.actions.ImportProjectAction;
import org.eclipse.che.ide.actions.LinkWithEditorAction;
import org.eclipse.che.ide.actions.NavigateToFileAction;
import org.eclipse.che.ide.actions.OpenFileAction;
import org.eclipse.che.ide.actions.ProjectConfigurationAction;
import org.eclipse.che.ide.actions.RedoAction;
import org.eclipse.che.ide.actions.RefreshPathAction;
import org.eclipse.che.ide.actions.RenameItemAction;
import org.eclipse.che.ide.actions.RunCommandAction;
import org.eclipse.che.ide.actions.SaveAction;
import org.eclipse.che.ide.actions.SaveAllAction;
import org.eclipse.che.ide.actions.ShowConsoleTreeAction;
import org.eclipse.che.ide.actions.ShowHiddenFilesAction;
import org.eclipse.che.ide.actions.ShowPreferencesAction;
import org.eclipse.che.ide.actions.ShowReferenceAction;
import org.eclipse.che.ide.actions.SignatureHelpAction;
import org.eclipse.che.ide.actions.SoftWrapAction;
import org.eclipse.che.ide.actions.StopWorkspaceAction;
import org.eclipse.che.ide.actions.UndoAction;
import org.eclipse.che.ide.actions.UploadFileAction;
import org.eclipse.che.ide.actions.UploadFolderAction;
import org.eclipse.che.ide.actions.common.MaximizePartAction;
import org.eclipse.che.ide.actions.common.MinimizePartAction;
import org.eclipse.che.ide.actions.common.RestorePartAction;
import org.eclipse.che.ide.actions.find.FindActionAction;
import org.eclipse.che.ide.api.action.Action;
import org.eclipse.che.ide.api.action.ActionEvent;
import org.eclipse.che.ide.api.action.ActionManager;
import org.eclipse.che.ide.api.action.DefaultActionGroup;
import org.eclipse.che.ide.api.action.IdeActions;
import org.eclipse.che.ide.api.constraints.Constraints;
import org.eclipse.che.ide.api.editor.EditorRegistry;
import org.eclipse.che.ide.api.editor.texteditor.EditorResources;
import org.eclipse.che.ide.api.filetypes.FileType;
import org.eclipse.che.ide.api.filetypes.FileTypeRegistry;
import org.eclipse.che.ide.api.icon.Icon;
import org.eclipse.che.ide.api.icon.IconRegistry;
import org.eclipse.che.ide.api.keybinding.KeyBindingAgent;
import org.eclipse.che.ide.api.keybinding.KeyBuilder;
import org.eclipse.che.ide.api.parts.Perspective;
import org.eclipse.che.ide.api.parts.PerspectiveManager;
import org.eclipse.che.ide.command.editor.CommandEditorProvider;
import org.eclipse.che.ide.command.palette.ShowCommandsPaletteAction;
import org.eclipse.che.ide.connection.WsConnectionListener;
import org.eclipse.che.ide.imageviewer.ImageViewerProvider;
import org.eclipse.che.ide.imageviewer.PreviewImageAction;
import org.eclipse.che.ide.machine.MachineResources;
import org.eclipse.che.ide.macro.ServerHostNameMacro;
import org.eclipse.che.ide.macro.ServerMacro;
import org.eclipse.che.ide.macro.ServerPortMacro;
import org.eclipse.che.ide.macro.ServerProtocolMacro;
import org.eclipse.che.ide.newresource.NewFileAction;
import org.eclipse.che.ide.newresource.NewFolderAction;
import org.eclipse.che.ide.part.editor.actions.CloseAction;
import org.eclipse.che.ide.part.editor.actions.CloseAllAction;
import org.eclipse.che.ide.part.editor.actions.CloseAllExceptPinnedAction;
import org.eclipse.che.ide.part.editor.actions.CloseOtherAction;
import org.eclipse.che.ide.part.editor.actions.PinEditorTabAction;
import org.eclipse.che.ide.part.editor.actions.ReopenClosedFileAction;
import org.eclipse.che.ide.part.editor.actions.SplitHorizontallyAction;
import org.eclipse.che.ide.part.editor.actions.SplitVerticallyAction;
import org.eclipse.che.ide.part.editor.actions.SwitchNextEditorAction;
import org.eclipse.che.ide.part.editor.actions.SwitchPreviousEditorAction;
import org.eclipse.che.ide.part.editor.recent.ClearRecentListAction;
import org.eclipse.che.ide.part.editor.recent.OpenRecentFilesAction;
import org.eclipse.che.ide.part.explorer.project.TreeResourceRevealer;
import org.eclipse.che.ide.part.explorer.project.synchronize.ProjectConfigSynchronized;
import org.eclipse.che.ide.processes.NewTerminalAction;
import org.eclipse.che.ide.processes.actions.CloseConsoleAction;
import org.eclipse.che.ide.processes.actions.ReRunProcessAction;
import org.eclipse.che.ide.processes.actions.StopProcessAction;
import org.eclipse.che.ide.resources.action.CopyResourceAction;
import org.eclipse.che.ide.resources.action.CutResourceAction;
import org.eclipse.che.ide.resources.action.PasteResourceAction;
import org.eclipse.che.ide.resources.action.RevealResourceAction;
import org.eclipse.che.ide.terminal.TerminalInitializer;
import org.eclipse.che.ide.ui.loaders.request.MessageLoaderResources;
import org.eclipse.che.ide.ui.popup.PopupResources;
import org.eclipse.che.ide.ui.toolbar.MainToolbar;
import org.eclipse.che.ide.ui.toolbar.ToolbarPresenter;
import org.eclipse.che.ide.util.browser.UserAgent;
import org.eclipse.che.ide.util.input.KeyCodeMap;
import org.eclipse.che.ide.xml.NewXmlFileAction;
import org.vectomatic.dom.svg.ui.SVGResource;
import java.util.Map;
import static org.eclipse.che.ide.actions.EditorActions.CLOSE;
import static org.eclipse.che.ide.actions.EditorActions.CLOSE_ALL;
import static org.eclipse.che.ide.actions.EditorActions.CLOSE_ALL_EXCEPT_PINNED;
import static org.eclipse.che.ide.actions.EditorActions.CLOSE_OTHER;
import static org.eclipse.che.ide.actions.EditorActions.PIN_TAB;
import static org.eclipse.che.ide.actions.EditorActions.REOPEN_CLOSED;
import static org.eclipse.che.ide.actions.EditorActions.SPLIT_HORIZONTALLY;
import static org.eclipse.che.ide.actions.EditorActions.SPLIT_VERTICALLY;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_ASSISTANT;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_CENTER_TOOLBAR;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_CONSOLES_TREE_CONTEXT_MENU;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_EDIT;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_EDITOR_CONTEXT_MENU;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_EDITOR_TAB_CONTEXT_MENU;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_FILE_NEW;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_HELP;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_MAIN_CONTEXT_MENU;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_MAIN_MENU;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_MAIN_TOOLBAR;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_PART_MENU;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_PROFILE;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_PROJECT;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_RECENT_FILES;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_RIGHT_MAIN_MENU;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_RIGHT_TOOLBAR;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_WORKSPACE;
import static org.eclipse.che.ide.api.constraints.Constraints.FIRST;
import static org.eclipse.che.ide.api.constraints.Constraints.LAST;
import static org.eclipse.che.ide.part.editor.recent.RecentFileStore.RECENT_GROUP_ID;
import static org.eclipse.che.ide.projecttype.BlankProjectWizardRegistrar.BLANK_CATEGORY;
/**
* Initializer for standard components i.e. some basic menu commands (Save, Save As etc)
*
* @author Evgen Vidolob
* @author Dmitry Shnurenko
*/
@Singleton
public class StandardComponentInitializer {
public static final String NAVIGATE_TO_FILE = "navigateToFile";
public static final String FULL_TEXT_SEARCH = "fullTextSearch";
public static final String PREVIEW_IMAGE = "previewImage";
public static final String FIND_ACTION = "findAction";
public static final String FORMAT = "format";
public static final String COPY = "copy";
public static final String CUT = "cut";
public static final String PASTE = "paste";
public static final String SWITCH_LEFT_TAB = "switchLeftTab";
public static final String SWITCH_RIGHT_TAB = "switchRightTab";
public static final String OPEN_RECENT_FILES = "openRecentFiles";
public static final String DELETE_ITEM = "deleteItem";
public static final String NEW_FILE = "newFile";
public static final String CREATE_PROJECT = "createProject";
public static final String IMPORT_PROJECT = "importProject";
public static final String CLOSE_ACTIVE_EDITOR = "closeActiveEditor";
public static final String SIGNATURE_HELP = "signatureHelp";
public static final String SOFT_WRAP = "softWrap";
public static final String RENAME = "renameResource";
public static final String SHOW_REFERENCE = "showReference";
public static final String SHOW_COMMANDS_PALETTE = "showCommandsPalette";
public static final String NEW_TERMINAL = "newTerminal";
public interface ParserResource extends ClientBundle {
@Source("org/eclipse/che/ide/blank.svg")
SVGResource samplesCategoryBlank();
}
@Inject
private EditorRegistry editorRegistry;
@Inject
private FileTypeRegistry fileTypeRegistry;
@Inject
private Resources resources;
@Inject
private KeyBindingAgent keyBinding;
@Inject
private ActionManager actionManager;
@Inject
private SaveAction saveAction;
@Inject
private SaveAllAction saveAllAction;
@Inject
private ShowPreferencesAction showPreferencesAction;
@Inject
private PreviewImageAction previewImageAction;
@Inject
private FindActionAction findActionAction;
@Inject
private NavigateToFileAction navigateToFileAction;
@Inject
@MainToolbar
private ToolbarPresenter toolbarPresenter;
@Inject
private CutResourceAction cutResourceAction;
@Inject
private CopyResourceAction copyResourceAction;
@Inject
private PasteResourceAction pasteResourceAction;
@Inject
private DeleteResourceAction deleteResourceAction;
@Inject
private RenameItemAction renameItemAction;
@Inject
private CollapseAllAction collapseAllAction;
@Inject
private SplitVerticallyAction splitVerticallyAction;
@Inject
private SplitHorizontallyAction splitHorizontallyAction;
@Inject
private CloseAction closeAction;
@Inject
private CloseAllAction closeAllAction;
@Inject
private CloseOtherAction closeOtherAction;
@Inject
private CloseAllExceptPinnedAction closeAllExceptPinnedAction;
@Inject
private ReopenClosedFileAction reopenClosedFileAction;
@Inject
private PinEditorTabAction pinEditorTabAction;
@Inject
private GoIntoAction goIntoAction;
@Inject
private EditFileAction editFileAction;
@Inject
private OpenFileAction openFileAction;
@Inject
private ShowHiddenFilesAction showHiddenFilesAction;
@Inject
private FormatterAction formatterAction;
@Inject
private UndoAction undoAction;
@Inject
private RedoAction redoAction;
@Inject
private UploadFileAction uploadFileAction;
@Inject
private UploadFolderAction uploadFolderAction;
@Inject
private DownloadProjectAction downloadProjectAction;
@Inject
private DownloadWsAction downloadWsAction;
@Inject
private DownloadResourceAction downloadResourceAction;
@Inject
private ImportProjectAction importProjectAction;
@Inject
private CreateProjectAction createProjectAction;
@Inject
private ConvertFolderToProjectAction convertFolderToProjectAction;
@Inject
private FullTextSearchAction fullTextSearchAction;
@Inject
private NewFolderAction newFolderAction;
@Inject
private NewFileAction newFileAction;
@Inject
private NewXmlFileAction newXmlFileAction;
@Inject
private ImageViewerProvider imageViewerProvider;
@Inject
private ProjectConfigurationAction projectConfigurationAction;
@Inject
private ExpandEditorAction expandEditorAction;
@Inject
private CompleteAction completeAction;
@Inject
private SwitchPreviousEditorAction switchPreviousEditorAction;
@Inject
private SwitchNextEditorAction switchNextEditorAction;
@Inject
private HotKeysListAction hotKeysListAction;
@Inject
private OpenRecentFilesAction openRecentFilesAction;
@Inject
private ClearRecentListAction clearRecentFilesAction;
@Inject
private CloseActiveEditorAction closeActiveEditorAction;
@Inject
private MessageLoaderResources messageLoaderResources;
@Inject
private EditorResources editorResources;
@Inject
private PopupResources popupResources;
@Inject
private ShowReferenceAction showReferenceAction;
@Inject
private RevealResourceAction revealResourceAction;
@Inject
private RefreshPathAction refreshPathAction;
@Inject
private LinkWithEditorAction linkWithEditorAction;
@Inject
private SignatureHelpAction signatureHelpAction;
@Inject
private MaximizePartAction maximizePartAction;
@Inject
private MinimizePartAction minimizePartAction;
@Inject
private RestorePartAction restorePartAction;
@Inject
private ShowCommandsPaletteAction showCommandsPaletteAction;
@Inject
private SoftWrapAction softWrapAction;
@Inject
private StopWorkspaceAction stopWorkspaceAction;
@Inject
private RunCommandAction runCommandAction;
@Inject
private NewTerminalAction newTerminalAction;
@Inject
private ReRunProcessAction reRunProcessAction;
@Inject
private StopProcessAction stopProcessAction;
@Inject
private CloseConsoleAction closeConsoleAction;
@Inject
private ShowConsoleTreeAction showConsoleTreeAction;
@Inject
private PerspectiveManager perspectiveManager;
@Inject
@Named("XMLFileType")
private FileType xmlFile;
@Inject
@Named("TXTFileType")
private FileType txtFile;
@Inject
@Named("JsonFileType")
private FileType jsonFile;
@Inject
@Named("MDFileType")
private FileType mdFile;
@Inject
@Named("PNGFileType")
private FileType pngFile;
@Inject
@Named("BMPFileType")
private FileType bmpFile;
@Inject
@Named("GIFFileType")
private FileType gifFile;
@Inject
@Named("ICOFileType")
private FileType iconFile;
@Inject
@Named("SVGFileType")
private FileType svgFile;
@Inject
@Named("JPEFileType")
private FileType jpeFile;
@Inject
@Named("JPEGFileType")
private FileType jpegFile;
@Inject
@Named("JPGFileType")
private FileType jpgFile;
@Inject
private CommandEditorProvider commandEditorProvider;
@Inject
@Named("CommandFileType")
private FileType commandFileType;
@Inject
private WsConnectionListener wsConnectionListener;
@Inject
private ProjectConfigSynchronized projectConfigSynchronized;
@Inject
private TreeResourceRevealer treeResourceRevealer; //just to work with it
// do not remove the injections below
@Inject
private ServerMacro serverMacro;
@Inject
private ServerProtocolMacro serverProtocolMacro;
@Inject
private ServerHostNameMacro serverHostNameMacro;
@Inject
private ServerPortMacro serverPortMacro;
@Inject
private TerminalInitializer terminalInitializer;
/** Instantiates {@link StandardComponentInitializer} an creates standard content. */
@Inject
public StandardComponentInitializer(IconRegistry iconRegistry,
MachineResources machineResources,
StandardComponentInitializer.ParserResource parserResource) {
iconRegistry.registerIcon(new Icon(BLANK_CATEGORY + ".samples.category.icon", parserResource.samplesCategoryBlank()));
iconRegistry.registerIcon(new Icon("che.machine.icon", machineResources.devMachine()));
machineResources.getCss().ensureInjected();
}
public void initialize() {
messageLoaderResources.Css().ensureInjected();
editorResources.editorCss().ensureInjected();
popupResources.popupStyle().ensureInjected();
fileTypeRegistry.registerFileType(xmlFile);
fileTypeRegistry.registerFileType(txtFile);
fileTypeRegistry.registerFileType(jsonFile);
fileTypeRegistry.registerFileType(mdFile);
fileTypeRegistry.registerFileType(pngFile);
editorRegistry.registerDefaultEditor(pngFile, imageViewerProvider);
fileTypeRegistry.registerFileType(bmpFile);
editorRegistry.registerDefaultEditor(bmpFile, imageViewerProvider);
fileTypeRegistry.registerFileType(gifFile);
editorRegistry.registerDefaultEditor(gifFile, imageViewerProvider);
fileTypeRegistry.registerFileType(iconFile);
editorRegistry.registerDefaultEditor(iconFile, imageViewerProvider);
fileTypeRegistry.registerFileType(svgFile);
editorRegistry.registerDefaultEditor(svgFile, imageViewerProvider);
fileTypeRegistry.registerFileType(jpeFile);
editorRegistry.registerDefaultEditor(jpeFile, imageViewerProvider);
fileTypeRegistry.registerFileType(jpegFile);
editorRegistry.registerDefaultEditor(jpegFile, imageViewerProvider);
fileTypeRegistry.registerFileType(jpgFile);
editorRegistry.registerDefaultEditor(jpgFile, imageViewerProvider);
fileTypeRegistry.registerFileType(commandFileType);
editorRegistry.registerDefaultEditor(commandFileType, commandEditorProvider);
// Workspace (New Menu)
DefaultActionGroup workspaceGroup = (DefaultActionGroup)actionManager.getAction(GROUP_WORKSPACE);
actionManager.registerAction(IMPORT_PROJECT, importProjectAction);
workspaceGroup.add(importProjectAction);
actionManager.registerAction(CREATE_PROJECT, createProjectAction);
workspaceGroup.add(createProjectAction);
actionManager.registerAction("downloadWsAsZipAction", downloadWsAction);
workspaceGroup.add(downloadWsAction);
workspaceGroup.addSeparator();
workspaceGroup.add(stopWorkspaceAction);
// Project (New Menu)
DefaultActionGroup projectGroup = (DefaultActionGroup)actionManager.getAction(GROUP_PROJECT);
DefaultActionGroup newGroup = new DefaultActionGroup("New", true, actionManager);
newGroup.getTemplatePresentation().setDescription("Create...");
newGroup.getTemplatePresentation().setSVGResource(resources.newResource());
actionManager.registerAction(GROUP_FILE_NEW, newGroup);
projectGroup.add(newGroup);
newGroup.addSeparator();
actionManager.registerAction(NEW_FILE, newFileAction);
newGroup.addAction(newFileAction);
actionManager.registerAction("newFolder", newFolderAction);
newGroup.addAction(newFolderAction);
newGroup.addSeparator();
actionManager.registerAction("newXmlFile", newXmlFileAction);
newXmlFileAction.getTemplatePresentation().setSVGResource(xmlFile.getImage());
newGroup.addAction(newXmlFileAction);
actionManager.registerAction("uploadFile", uploadFileAction);
projectGroup.add(uploadFileAction);
actionManager.registerAction("uploadFolder", uploadFolderAction);
projectGroup.add(uploadFolderAction);
actionManager.registerAction("convertFolderToProject", convertFolderToProjectAction);
projectGroup.add(convertFolderToProjectAction);
actionManager.registerAction("downloadAsZipAction", downloadProjectAction);
projectGroup.add(downloadProjectAction);
actionManager.registerAction("showHideHiddenFiles", showHiddenFilesAction);
projectGroup.add(showHiddenFilesAction);
projectGroup.addSeparator();
actionManager.registerAction("projectConfiguration", projectConfigurationAction);
projectGroup.add(projectConfigurationAction);
// Edit (New Menu)
DefaultActionGroup editGroup = (DefaultActionGroup)actionManager.getAction(GROUP_EDIT);
DefaultActionGroup recentGroup = new DefaultActionGroup(RECENT_GROUP_ID, true, actionManager);
actionManager.registerAction(GROUP_RECENT_FILES, recentGroup);
actionManager.registerAction("clearRecentList", clearRecentFilesAction);
recentGroup.addSeparator();
recentGroup.add(clearRecentFilesAction, LAST);
editGroup.add(recentGroup);
actionManager.registerAction(OPEN_RECENT_FILES, openRecentFilesAction);
editGroup.add(openRecentFilesAction);
editGroup.addSeparator();
actionManager.registerAction(CLOSE_ACTIVE_EDITOR, closeActiveEditorAction);
editGroup.add(closeActiveEditorAction);
actionManager.registerAction(FORMAT, formatterAction);
editGroup.add(formatterAction);
actionManager.registerAction("undo", undoAction);
editGroup.add(undoAction);
actionManager.registerAction("redo", redoAction);
editGroup.add(redoAction);
actionManager.registerAction(SOFT_WRAP, softWrapAction);
editGroup.add(softWrapAction);
actionManager.registerAction(CUT, cutResourceAction);
editGroup.add(cutResourceAction);
actionManager.registerAction(COPY, copyResourceAction);
editGroup.add(copyResourceAction);
actionManager.registerAction(PASTE, pasteResourceAction);
editGroup.add(pasteResourceAction);
actionManager.registerAction(RENAME, renameItemAction);
editGroup.add(renameItemAction);
actionManager.registerAction(DELETE_ITEM, deleteResourceAction);
editGroup.add(deleteResourceAction);
actionManager.registerAction(FULL_TEXT_SEARCH, fullTextSearchAction);
editGroup.add(fullTextSearchAction);
editGroup.addSeparator();
editGroup.add(switchPreviousEditorAction);
editGroup.add(switchNextEditorAction);
editGroup.addSeparator();
editGroup.add(revealResourceAction);
// Assistant (New Menu)
DefaultActionGroup assistantGroup = (DefaultActionGroup)actionManager.getAction(GROUP_ASSISTANT);
actionManager.registerAction(PREVIEW_IMAGE, previewImageAction);
assistantGroup.add(previewImageAction);
actionManager.registerAction(FIND_ACTION, findActionAction);
assistantGroup.add(findActionAction);
actionManager.registerAction("hotKeysList", hotKeysListAction);
assistantGroup.add(hotKeysListAction);
assistantGroup.addSeparator();
actionManager.registerAction("callCompletion", completeAction);
assistantGroup.add(completeAction);
actionManager.registerAction("downloadItemAction", downloadResourceAction);
actionManager.registerAction(NAVIGATE_TO_FILE, navigateToFileAction);
assistantGroup.add(navigateToFileAction);
// Compose Save group
DefaultActionGroup saveGroup = new DefaultActionGroup(actionManager);
actionManager.registerAction("saveGroup", saveGroup);
actionManager.registerAction("save", saveAction);
actionManager.registerAction("saveAll", saveAllAction);
saveGroup.addSeparator();
saveGroup.add(saveAction);
saveGroup.add(saveAllAction);
//Compose Profile menu
DefaultActionGroup profileGroup = (DefaultActionGroup)actionManager.getAction(GROUP_PROFILE);
actionManager.registerAction("showPreferences", showPreferencesAction);
profileGroup.add(showPreferencesAction);
// Compose Help menu
DefaultActionGroup helpGroup = (DefaultActionGroup)actionManager.getAction(GROUP_HELP);
helpGroup.addSeparator();
// Processes panel actions
actionManager.registerAction("stopWorkspace", stopWorkspaceAction);
actionManager.registerAction("runCommand", runCommandAction);
actionManager.registerAction("newTerminal", newTerminalAction);
// Compose main context menu
DefaultActionGroup resourceOperation = new DefaultActionGroup(actionManager);
actionManager.registerAction("resourceOperation", resourceOperation);
actionManager.registerAction("refreshPathAction", refreshPathAction);
actionManager.registerAction("linkWithEditor", linkWithEditorAction);
resourceOperation.addSeparator();
resourceOperation.add(previewImageAction);
resourceOperation.add(showReferenceAction);
resourceOperation.add(goIntoAction);
resourceOperation.add(editFileAction);
resourceOperation.add(cutResourceAction);
resourceOperation.add(copyResourceAction);
resourceOperation.add(pasteResourceAction);
resourceOperation.add(renameItemAction);
resourceOperation.add(deleteResourceAction);
resourceOperation.addSeparator();
resourceOperation.add(downloadResourceAction);
resourceOperation.add(refreshPathAction);
resourceOperation.add(linkWithEditorAction);
resourceOperation.addSeparator();
resourceOperation.add(convertFolderToProjectAction);
resourceOperation.addSeparator();
DefaultActionGroup mainContextMenuGroup = (DefaultActionGroup)actionManager.getAction(GROUP_MAIN_CONTEXT_MENU);
mainContextMenuGroup.add(newGroup, Constraints.FIRST);
mainContextMenuGroup.addSeparator();
mainContextMenuGroup.add(resourceOperation);
DefaultActionGroup partMenuGroup = (DefaultActionGroup)actionManager.getAction(GROUP_PART_MENU);
partMenuGroup.add(maximizePartAction);
partMenuGroup.add(minimizePartAction);
partMenuGroup.add(restorePartAction);
partMenuGroup.add(showConsoleTreeAction);
actionManager.registerAction("expandEditor", expandEditorAction);
DefaultActionGroup rightMenuGroup = (DefaultActionGroup)actionManager.getAction(GROUP_RIGHT_MAIN_MENU);
rightMenuGroup.add(expandEditorAction, FIRST);
// Compose main toolbar
DefaultActionGroup changeResourceGroup = new DefaultActionGroup(actionManager);
actionManager.registerAction("changeResourceGroup", changeResourceGroup);
actionManager.registerAction("editFile", editFileAction);
actionManager.registerAction("goInto", goIntoAction);
actionManager.registerAction(SHOW_REFERENCE, showReferenceAction);
actionManager.registerAction("collapseAll", collapseAllAction);
actionManager.registerAction("openFile", openFileAction);
actionManager.registerAction(SWITCH_LEFT_TAB, switchPreviousEditorAction);
actionManager.registerAction(SWITCH_RIGHT_TAB, switchNextEditorAction);
actionManager.registerAction("scrollFromSource", revealResourceAction);
changeResourceGroup.add(cutResourceAction);
changeResourceGroup.add(copyResourceAction);
changeResourceGroup.add(pasteResourceAction);
changeResourceGroup.add(deleteResourceAction);
DefaultActionGroup mainToolbarGroup = (DefaultActionGroup)actionManager.getAction(GROUP_MAIN_TOOLBAR);
mainToolbarGroup.add(newGroup);
mainToolbarGroup.add(changeResourceGroup);
toolbarPresenter.bindMainGroup(mainToolbarGroup);
DefaultActionGroup centerToolbarGroup = (DefaultActionGroup)actionManager.getAction(GROUP_CENTER_TOOLBAR);
toolbarPresenter.bindCenterGroup(centerToolbarGroup);
DefaultActionGroup rightToolbarGroup = (DefaultActionGroup)actionManager.getAction(GROUP_RIGHT_TOOLBAR);
toolbarPresenter.bindRightGroup(rightToolbarGroup);
// Consoles tree context menu group
DefaultActionGroup consolesTreeContextMenu = (DefaultActionGroup)actionManager.getAction(GROUP_CONSOLES_TREE_CONTEXT_MENU);
consolesTreeContextMenu.add(reRunProcessAction);
consolesTreeContextMenu.add(stopProcessAction);
consolesTreeContextMenu.add(closeConsoleAction);
//Editor context menu group
DefaultActionGroup editorTabContextMenu =
(DefaultActionGroup)actionManager.getAction(GROUP_EDITOR_TAB_CONTEXT_MENU);
editorTabContextMenu.add(closeAction);
actionManager.registerAction(CLOSE, closeAction);
editorTabContextMenu.add(closeAllAction);
actionManager.registerAction(CLOSE_ALL, closeAllAction);
editorTabContextMenu.add(closeOtherAction);
actionManager.registerAction(CLOSE_OTHER, closeOtherAction);
editorTabContextMenu.add(closeAllExceptPinnedAction);
actionManager.registerAction(CLOSE_ALL_EXCEPT_PINNED, closeAllExceptPinnedAction);
editorTabContextMenu.addSeparator();
editorTabContextMenu.add(reopenClosedFileAction);
actionManager.registerAction(REOPEN_CLOSED, reopenClosedFileAction);
editorTabContextMenu.add(pinEditorTabAction);
actionManager.registerAction(PIN_TAB, pinEditorTabAction);
editorTabContextMenu.addSeparator();
actionManager.registerAction(SPLIT_HORIZONTALLY, splitHorizontallyAction);
editorTabContextMenu.add(splitHorizontallyAction);
actionManager.registerAction(SPLIT_VERTICALLY, splitVerticallyAction);
editorTabContextMenu.add(splitVerticallyAction);
actionManager.registerAction(SIGNATURE_HELP, signatureHelpAction);
actionManager.registerAction(SHOW_COMMANDS_PALETTE, showCommandsPaletteAction);
DefaultActionGroup runGroup = (DefaultActionGroup)actionManager.getAction(IdeActions.GROUP_RUN);
runGroup.add(showCommandsPaletteAction);
runGroup.add(newTerminalAction, FIRST);
runGroup.addSeparator();
DefaultActionGroup editorContextMenuGroup = new DefaultActionGroup(actionManager);
actionManager.registerAction(GROUP_EDITOR_CONTEXT_MENU, editorContextMenuGroup);
editorContextMenuGroup.add(undoAction);
editorContextMenuGroup.add(redoAction);
editorContextMenuGroup.addSeparator();
editorContextMenuGroup.add(formatterAction);
editorContextMenuGroup.add(softWrapAction);
editorContextMenuGroup.addSeparator();
editorContextMenuGroup.add(fullTextSearchAction);
editorContextMenuGroup.add(closeActiveEditorAction);
// Define hot-keys
keyBinding.getGlobal().addKey(new KeyBuilder().action().alt().charCode('n').build(), NAVIGATE_TO_FILE);
keyBinding.getGlobal().addKey(new KeyBuilder().action().charCode('F').build(), FULL_TEXT_SEARCH);
keyBinding.getGlobal().addKey(new KeyBuilder().action().charCode('A').build(), FIND_ACTION);
keyBinding.getGlobal().addKey(new KeyBuilder().alt().charCode('L').build(), FORMAT);
keyBinding.getGlobal().addKey(new KeyBuilder().action().charCode('c').build(), COPY);
keyBinding.getGlobal().addKey(new KeyBuilder().action().charCode('x').build(), CUT);
keyBinding.getGlobal().addKey(new KeyBuilder().action().charCode('v').build(), PASTE);
keyBinding.getGlobal().addKey(new KeyBuilder().shift().charCode(KeyCodeMap.F6).build(), RENAME);
keyBinding.getGlobal().addKey(new KeyBuilder().shift().charCode(KeyCodeMap.F7).build(), SHOW_REFERENCE);
keyBinding.getGlobal().addKey(new KeyBuilder().alt().charCode(KeyCodeMap.ARROW_LEFT).build(), SWITCH_LEFT_TAB);
keyBinding.getGlobal().addKey(new KeyBuilder().alt().charCode(KeyCodeMap.ARROW_RIGHT).build(), SWITCH_RIGHT_TAB);
keyBinding.getGlobal().addKey(new KeyBuilder().action().charCode('e').build(), OPEN_RECENT_FILES);
keyBinding.getGlobal().addKey(new KeyBuilder().charCode(KeyCodeMap.DELETE).build(), DELETE_ITEM);
keyBinding.getGlobal().addKey(new KeyBuilder().action().alt().charCode('w').build(), SOFT_WRAP);
keyBinding.getGlobal().addKey(new KeyBuilder().alt().charCode(KeyCodeMap.F12).build(), NEW_TERMINAL);
keyBinding.getGlobal().addKey(new KeyBuilder().alt().charCode('N').build(), NEW_FILE);
keyBinding.getGlobal().addKey(new KeyBuilder().alt().charCode('x').build(), CREATE_PROJECT);
keyBinding.getGlobal().addKey(new KeyBuilder().alt().charCode('A').build(), IMPORT_PROJECT);
keyBinding.getGlobal().addKey(new KeyBuilder().shift().charCode(KeyCodeMap.F10).build(), SHOW_COMMANDS_PALETTE);
if (UserAgent.isMac()) {
keyBinding.getGlobal().addKey(new KeyBuilder().control().charCode('w').build(), CLOSE_ACTIVE_EDITOR);
keyBinding.getGlobal().addKey(new KeyBuilder().control().charCode('p').build(), SIGNATURE_HELP);
} else {
keyBinding.getGlobal().addKey(new KeyBuilder().alt().charCode('w').build(), CLOSE_ACTIVE_EDITOR);
keyBinding.getGlobal().addKey(new KeyBuilder().action().charCode('p').build(), SIGNATURE_HELP);
}
final Map<String, Perspective> perspectives = perspectiveManager.getPerspectives();
if (perspectives.size() > 1) { //if registered perspectives will be more then 2 Main Menu -> Window
// will appears and contains all of them as sub-menu
final DefaultActionGroup windowMenu = new DefaultActionGroup("Window", true, actionManager);
actionManager.registerAction("Window", windowMenu);
final DefaultActionGroup mainMenu = (DefaultActionGroup)actionManager.getAction(GROUP_MAIN_MENU);
mainMenu.add(windowMenu);
for (Perspective perspective : perspectives.values()) {
final Action action = new Action(perspective.getPerspectiveName()) {
@Override
public void actionPerformed(ActionEvent e) {
perspectiveManager.setPerspectiveId(perspective.getPerspectiveId());
}
};
actionManager.registerAction(perspective.getPerspectiveId(), action);
windowMenu.add(action);
}
}
}
}