/**
* Copyright (c) 2009-2011, The HATS Consortium. All rights reserved.
* This file is licensed under the terms of the Modified BSD License.
*/
package org.absmodels.abs.plugin.debug.perspective;
import static org.absmodels.abs.plugin.debug.DebugUtils.getSchedulerRef;
import static org.absmodels.abs.plugin.util.Images.DEBUGGER_INTERACTIVE;
import static org.absmodels.abs.plugin.util.Images.DEBUGGER_RANDOM;
import org.absmodels.abs.plugin.debug.DebugUtils;
import org.absmodels.abs.plugin.util.Images;
import org.absmodels.abs.plugin.util.Constants.Scheduler;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.ui.IActionDelegate2;
import org.eclipse.ui.IViewActionDelegate;
import org.eclipse.ui.IViewPart;
/**
* Class handling clicks on the selectScheduler button.
* @author mweber
*/
public class SchedulerChoiceDelegate implements IViewActionDelegate, IActionDelegate2, IMenuCreator{
private Menu schedulerMenu;
private MenuItem interactiveItem;
private MenuItem randomItem;
private MenuItem historyItem;
@Override
public void dispose() {
if(schedulerMenu != null){
interactiveItem.dispose();
randomItem.dispose();
historyItem.dispose();
schedulerMenu.dispose();
}
}
@Override
public void init(IAction action) {
action.setMenuCreator(this);
DebugUtils.schedulerMenu = action;
action.setEnabled(false);
}
@Override
public Menu getMenu(Menu parent) {
return null;
}
@Override
public Menu getMenu(Control parent) {
if(schedulerMenu == null){
schedulerMenu = new Menu(parent);
interactiveItem = newSchedulerChoiceMenuItem(schedulerMenu, "&Interactive Scheduler",
Images.DEBUGGER_INTERACTIVE, Scheduler.interactive);
randomItem = newSchedulerChoiceMenuItem(schedulerMenu, "&Random Scheduler",
Images.DEBUGGER_RANDOM, Scheduler.random);
historyItem = newSchedulerChoiceMenuItem(schedulerMenu, "Replay &History",
Images.DEBUGGER_HISTORY, Scheduler.replay);
}
return schedulerMenu;
}
private MenuItem newSchedulerChoiceMenuItem(Menu schedulerMenu, String text, Image img, final Scheduler schedulerType) {
final MenuItem item = new MenuItem(schedulerMenu, SWT.RADIO);
item.setText(text);
item.setImage(img);
item.setSelection(DebugUtils.getScheduler() == schedulerType);
item.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
if (item.getSelection()) {
DebugUtils.setScheduler(schedulerType);
}
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
});
return item;
}
@Override
public void selectionChanged(IAction action, ISelection selection) {
}
@Override
public void runWithEvent(IAction action, Event event) {
if (event.widget instanceof ToolItem) {
ToolItem toolItem = (ToolItem) event.widget;
Control control = toolItem.getParent();
Menu menu= getMenu(control);
Rectangle bounds = toolItem.getBounds();
Point topLeft = new Point(bounds.x, bounds.y + bounds.height);
menu.setLocation(control.toDisplay(topLeft));
menu.setVisible(true);
}
}
@Override
public void init(IViewPart view) {
}
@Override
public void run(IAction action) {
}
public void setSelection(Scheduler scheduler) {
if(schedulerMenu != null){
interactiveItem.setSelection(scheduler == Scheduler.interactive);
randomItem.setSelection(scheduler == Scheduler.random);
historyItem.setSelection(scheduler == Scheduler.replay);
}
}
}