/*
* Created on 02-dic-2005
*
* TODO To change the template for this generated file go to Window -
* Preferences - Java - Code Style - Code Templates
*/
package org.herac.tuxguitar.gui.items.menu;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.herac.tuxguitar.gui.TuxGuitar;
import org.herac.tuxguitar.gui.actions.transport.TransportMetronomeAction;
import org.herac.tuxguitar.gui.actions.transport.TransportModeAction;
import org.herac.tuxguitar.gui.actions.transport.TransportPlayAction;
import org.herac.tuxguitar.gui.actions.transport.TransportSetLoopEHeaderAction;
import org.herac.tuxguitar.gui.actions.transport.TransportSetLoopSHeaderAction;
import org.herac.tuxguitar.gui.actions.transport.TransportStopAction;
import org.herac.tuxguitar.gui.items.MenuItems;
import org.herac.tuxguitar.player.base.MidiPlayerMode;
import org.herac.tuxguitar.song.models.TGMeasure;
/**
* @author julian
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class TransportMenuItem extends MenuItems {
private static final int STATUS_PAUSED = 2;
private static final int STATUS_RUNNING = 3;
private static final int STATUS_STOPPED = 1;
private MenuItem loopEHeader;
private MenuItem loopSHeader;
private Menu menu;
private MenuItem metronome;
private MenuItem mode;
private MenuItem play;
private int status;
private MenuItem stop;
private MenuItem transportMenuItem;
public TransportMenuItem(Shell shell, Menu parent, int style) {
this.transportMenuItem = new MenuItem(parent, style);
this.menu = new Menu(shell, SWT.DROP_DOWN);
}
public void loadIcons() {
this.loadIcons(true);
this.mode
.setImage(TuxGuitar.instance().getIconManager().getTransportMode());
this.metronome.setImage(TuxGuitar.instance().getIconManager()
.getTransportMetronome());
}
public void loadIcons(boolean force) {
int lastStatus = this.status;
if (TuxGuitar.instance().getPlayer().isRunning()) {
this.status = STATUS_RUNNING;
} else if (TuxGuitar.instance().getPlayer().isPaused()) {
this.status = STATUS_PAUSED;
} else {
this.status = STATUS_STOPPED;
}
if (force || lastStatus != this.status) {
if (this.status == STATUS_RUNNING) {
this.stop.setImage(TuxGuitar.instance().getIconManager()
.getTransportIconStop2());
this.play.setImage(TuxGuitar.instance().getIconManager()
.getTransportIconPause());
} else if (this.status == STATUS_PAUSED) {
this.stop.setImage(TuxGuitar.instance().getIconManager()
.getTransportIconStop2());
this.play.setImage(TuxGuitar.instance().getIconManager()
.getTransportIconPlay2());
} else if (this.status == STATUS_STOPPED) {
this.stop.setImage(TuxGuitar.instance().getIconManager()
.getTransportIconStop1());
this.play.setImage(TuxGuitar.instance().getIconManager()
.getTransportIconPlay1());
}
}
}
public void loadProperties() {
setMenuItemTextAndAccelerator(this.transportMenuItem, "transport", null);
setMenuItemTextAndAccelerator(this.play, "transport.start",
TransportPlayAction.NAME);
setMenuItemTextAndAccelerator(this.stop, "transport.stop",
TransportStopAction.NAME);
setMenuItemTextAndAccelerator(this.mode, "transport.mode",
TransportModeAction.NAME);
setMenuItemTextAndAccelerator(this.metronome, "transport.metronome",
TransportMetronomeAction.NAME);
setMenuItemTextAndAccelerator(this.loopSHeader, "transport.set-loop-start",
TransportSetLoopSHeaderAction.NAME);
setMenuItemTextAndAccelerator(this.loopEHeader, "transport.set-loop-end",
TransportSetLoopEHeaderAction.NAME);
}
public void showItems() {
this.play = new MenuItem(this.menu, SWT.PUSH);
this.play.addSelectionListener(TuxGuitar.instance().getAction(
TransportPlayAction.NAME));
this.stop = new MenuItem(this.menu, SWT.PUSH);
this.stop.addSelectionListener(TuxGuitar.instance().getAction(
TransportStopAction.NAME));
// --SEPARATOR--
new MenuItem(this.menu, SWT.SEPARATOR);
this.metronome = new MenuItem(this.menu, SWT.CHECK);
this.metronome.addSelectionListener(TuxGuitar.instance().getAction(
TransportMetronomeAction.NAME));
this.mode = new MenuItem(this.menu, SWT.PUSH);
this.mode.addSelectionListener(TuxGuitar.instance().getAction(
TransportModeAction.NAME));
// --SEPARATOR--
new MenuItem(this.menu, SWT.SEPARATOR);
this.loopSHeader = new MenuItem(this.menu, SWT.CHECK);
this.loopSHeader.addSelectionListener(TuxGuitar.instance().getAction(
TransportSetLoopSHeaderAction.NAME));
this.loopEHeader = new MenuItem(this.menu, SWT.CHECK);
this.loopEHeader.addSelectionListener(TuxGuitar.instance().getAction(
TransportSetLoopEHeaderAction.NAME));
this.transportMenuItem.setMenu(this.menu);
this.status = STATUS_STOPPED;
this.loadIcons();
this.loadProperties();
}
public void update() {
TGMeasure measure = TuxGuitar.instance().getTablatureEditor()
.getTablature().getCaret().getMeasure();
MidiPlayerMode pm = TuxGuitar.instance().getPlayer().getMode();
this.metronome.setSelection(TuxGuitar.instance().getPlayer()
.isMetronomeEnabled());
this.loopSHeader.setEnabled(pm.isLoop());
this.loopSHeader.setSelection(measure != null
&& measure.getNumber() == pm.getLoopSHeader());
this.loopEHeader.setEnabled(pm.isLoop());
this.loopEHeader.setSelection(measure != null
&& measure.getNumber() == pm.getLoopEHeader());
this.loadIcons(false);
}
}