package entitymodeler;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.ICoolBarManager;
import org.eclipse.jface.action.IMenuListener2;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.swt.SWT;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
import entitymodeler.actions.NewEOModelAction;
import entitymodeler.actions.OpenEOModelAction;
public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
// Actions - important to allocate these only in makeActions, and then use them
// in the fill methods. This ensures that the actions aren't recreated
// when fillActionBars is called with FILL_PROXY.
private IWorkbenchAction _newAction;
private IWorkbenchAction _openAction;
private IWorkbenchAction _saveAction;
private IWorkbenchAction _exitAction;
private IWorkbenchAction _undoAction;
private IWorkbenchAction _redoAction;
private IWorkbenchAction _cutAction;
private IWorkbenchAction _copyAction;
private IWorkbenchAction _pasteAction;
private IWorkbenchAction _deleteAction;
private IWorkbenchAction _selectAllAction;
private IWorkbenchAction _aboutAction;
private IWorkbenchAction _preferencesAction;
//private OpenViewAction openViewAction;
//private IWorkbenchAction messagePopupAction;
public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
super(configurer);
}
@Override
protected void makeActions(final IWorkbenchWindow window) {
// File
_newAction = ApplicationActionBarAdvisor.NEW.create(window);
register(_newAction);
_openAction = ApplicationActionBarAdvisor.OPEN.create(window);
register(_openAction);
_saveAction = ActionFactory.SAVE.create(window);
register(_saveAction);
_exitAction = ActionFactory.QUIT.create(window);
register(_exitAction);
// Edit
_undoAction = ActionFactory.UNDO.create(window);
register(_undoAction);
_redoAction = ActionFactory.REDO.create(window);
register(_redoAction);
_cutAction = ActionFactory.CUT.create(window);
register(_cutAction);
_copyAction = ActionFactory.COPY.create(window);
register(_copyAction);
_pasteAction = ActionFactory.PASTE.create(window);
register(_pasteAction);
_deleteAction = ActionFactory.DELETE.create(window);
register(_deleteAction);
_selectAllAction = ActionFactory.SELECT_ALL.create(window);
register(_selectAllAction);
// Help
_aboutAction = ActionFactory.ABOUT.create(window);
register(_aboutAction);
_preferencesAction = ActionFactory.PREFERENCES.create(window);
register(_preferencesAction);
//openViewAction = new OpenViewAction(window, "Open Another Message View", View.ID);
//register(openViewAction);
//messagePopupAction = ActionFactory.ABOUT.create(window);
//register(messagePopupAction);
}
public static final ActionFactory NEW = new ActionFactory("new") {//$NON-NLS-1$
@Override
public IWorkbenchAction create(IWorkbenchWindow window) {
if (window == null) {
throw new IllegalArgumentException();
}
NewEOModelAction action = new NewEOModelAction(window);
action.setId(getId());
return action;
}
};
public static final ActionFactory OPEN = new ActionFactory("open") {//$NON-NLS-1$
@Override
public IWorkbenchAction create(IWorkbenchWindow window) {
if (window == null) {
throw new IllegalArgumentException();
}
IWorkbenchAction action = new OpenEOModelAction(window);
action.setId(getId());
return action;
}
};
@Override
protected void fillMenuBar(IMenuManager menuBar) {
MenuManager fileMenu = new MenuManager(IDEWorkbenchMessages.Workbench_file, IWorkbenchActionConstants.M_FILE);
MenuManager editMenu = new MenuManager(IDEWorkbenchMessages.Workbench_edit, IWorkbenchActionConstants.M_EDIT);
MenuManager helpMenu = new MenuManager(IDEWorkbenchMessages.Workbench_help, IWorkbenchActionConstants.M_HELP);
menuBar.add(fileMenu);
menuBar.add(editMenu);
// Add a group marker indicating where action set menus will appear.
menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
menuBar.add(helpMenu);
// File
fileMenu.add(_newAction);
fileMenu.add(_openAction);
fileMenu.add(_saveAction);
//fileMenu.add(new Separator());
//fileMenu.add(messagePopupAction);
//fileMenu.add(openViewAction);
//fileMenu.add(new Separator());
ActionContributionItem exitItem = new ActionContributionItem(_exitAction);
exitItem.setVisible(!"carbon".equals(SWT.getPlatform()));
fileMenu.add(exitItem);
//MenuManager windowMenu = new MenuManager(IDEWorkbenchMessages.Workbench_window, IWorkbenchActionConstants.M_WINDOW);
ActionContributionItem preferencesItem = new ActionContributionItem(_preferencesAction);
preferencesItem.setVisible(!"carbon".equals(SWT.getPlatform()));
helpMenu.add(preferencesItem);
// MS: Eclipse core plugins inject some dumb shit into
// the File menu that there doesn't appear to be a
// good way to remove. So I'm going to do it
// the hard way ...
fileMenu.addMenuListener(new IMenuListener2() {
public void menuAboutToHide(IMenuManager manager) {
}
public void menuAboutToShow(IMenuManager manager) {
IContributionItem[] items = manager.getItems();
for (IContributionItem item : items) {
String id = item.getId();
if ("new.ext".equals(id) || "org.eclipse.ui.openLocalFile".equals(id)) {
manager.remove(item);
}
}
}
});
editMenu.add(_undoAction);
editMenu.add(_redoAction);
editMenu.add(new Separator());
editMenu.add(_cutAction);
editMenu.add(_copyAction);
editMenu.add(_pasteAction);
editMenu.add(new Separator());
editMenu.add(_deleteAction);
editMenu.add(_selectAllAction);
// Help
ActionContributionItem aboutItem = new ActionContributionItem(_aboutAction);
aboutItem.setVisible(!"carbon".equals(SWT.getPlatform())); //$NON-NLS-1$
helpMenu.add(aboutItem);
// MS: Most Mac apps don't have icons on menu items ...
for (IContributionItem menu : menuBar.getItems()) {
if (menu instanceof MenuManager) {
for (IContributionItem menuItem : ((MenuManager) menu).getItems()) {
if (menuItem instanceof ActionContributionItem) {
((ActionContributionItem) menuItem).getAction().setImageDescriptor(null);
}
}
}
}
}
@Override
protected void fillCoolBar(ICoolBarManager coolBar) {
//IToolBarManager toolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
//coolBar.add(new ToolBarContributionItem(toolbar, "main"));
//toolbar.add(openViewAction);
//toolbar.add(messagePopupAction);
//coolBar.setLockLayout(true);
}
}