package org.herac.tuxguitar.gui.items.menu;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.ToolItem;
import org.herac.tuxguitar.gui.TuxGuitar;
import org.herac.tuxguitar.gui.actions.insert.InsertChordAction;
import org.herac.tuxguitar.gui.items.MenuItems;
import org.herac.tuxguitar.song.models.TGChord;
public class ChordMenuItem extends MenuItems {
private MenuItem chordMenuItem;
private MenuItem insertChord;
private long lastEdit;
private Menu menu;
private MenuItem[] subMenuItems;
public ChordMenuItem(Shell shell, Menu parent, int style) {
this.chordMenuItem = new MenuItem(parent, style);
this.menu = new Menu(shell, SWT.DROP_DOWN);
}
public void addItems() {
this.disposeItems();
this.subMenuItems = new MenuItem[TuxGuitar.instance()
.getCustomChordManager().countChords()];
for (int i = 0; i < this.subMenuItems.length; i++) {
TGChord chord = TuxGuitar.instance().getCustomChordManager().getChord(i);
this.subMenuItems[i] = new MenuItem(this.menu, SWT.PUSH);
this.subMenuItems[i].setData(chord);
this.subMenuItems[i].setText(chord.getName());
this.subMenuItems[i].addSelectionListener(TuxGuitar.instance().getAction(
InsertChordAction.NAME));
}
}
public void disposeItems() {
if (this.subMenuItems != null) {
for (int i = 0; i < this.subMenuItems.length; i++) {
this.subMenuItems[i].dispose();
}
}
}
public void loadIcons() {
// Nothing to do
}
public void loadProperties() {
setMenuItemTextAndAccelerator(this.chordMenuItem, "chord", null);
setMenuItemTextAndAccelerator(this.insertChord, "insert.chord",
InsertChordAction.NAME);
}
public void showItems() {
// --INSERT CHORD--
this.insertChord = new MenuItem(this.menu, SWT.PUSH);
this.insertChord.addSelectionListener(TuxGuitar.instance().getAction(
InsertChordAction.NAME));
// --SEPARATOR--
new MenuItem(this.menu, SWT.SEPARATOR);
// --CUSTOM CHORDS--
this.addItems();
this.chordMenuItem.setMenu(this.menu);
this.loadIcons();
this.loadProperties();
}
public void update() {
boolean running = TuxGuitar.instance().getPlayer().isRunning();
if (this.lastEdit != TuxGuitar.instance().getCustomChordManager()
.getLastEdit()) {
this.addItems();
this.lastEdit = TuxGuitar.instance().getCustomChordManager()
.getLastEdit();
}
this.insertChord.setEnabled(!running);
for (int i = 0; i < this.subMenuItems.length; i++) {
this.subMenuItems[i].setEnabled(!running);
}
}
public void widgetSelected(SelectionEvent event) {
if (event.detail == SWT.ARROW && this.subMenuItems != null
&& this.subMenuItems.length > 0) {
ToolItem item = (ToolItem) event.widget;
Rectangle rect = item.getBounds();
Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y));
this.menu.setLocation(pt.x, pt.y + rect.height);
this.menu.setVisible(true);
} else {
TuxGuitar.instance().getAction(InsertChordAction.NAME).process(event);
}
}
}