/* * 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.tool; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; 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.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.actions.duration.ChangeDivisionTypeAction; import org.herac.tuxguitar.gui.actions.duration.ChangeDottedDurationAction; import org.herac.tuxguitar.gui.actions.duration.ChangeDoubleDottedDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetEighthDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetHalfDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetQuarterDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetSixteenthDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetSixtyFourthDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetThirtySecondDurationAction; import org.herac.tuxguitar.gui.actions.duration.SetWholeDurationAction; import org.herac.tuxguitar.gui.editors.TablatureEditor; import org.herac.tuxguitar.gui.items.ToolItems; import org.herac.tuxguitar.song.models.TGDivisionType; import org.herac.tuxguitar.song.models.TGDuration; /** * @author julian * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class DurationToolItems extends ToolItems { private class DivisionTypeMenuItem extends SelectionAdapter { private ToolItem divisionType; private Menu subMenu; private MenuItem[] subMenuItems; public DivisionTypeMenuItem() { this.divisionType = new ToolItem(DurationToolItems.this.toolBar, SWT.DROP_DOWN); this.divisionType.addSelectionListener(this); this.divisionType.setData(TGDivisionType.DEFAULT); this.subMenu = new Menu(this.divisionType.getParent().getShell()); } public void addItems() { this.subMenuItems = new MenuItem[8]; this.subMenuItems[0] = new MenuItem(this.subMenu, SWT.CHECK); this.subMenuItems[0].setText("3"); this.subMenuItems[0].setData(TGDivisionType.DEFAULT); this.subMenuItems[0].addSelectionListener(TuxGuitar.instance().getAction( ChangeDivisionTypeAction.NAME)); this.subMenuItems[1] = new MenuItem(this.subMenu, SWT.CHECK); this.subMenuItems[1].setText("5"); this.subMenuItems[1].setData(new TGDivisionType(5, 4)); this.subMenuItems[1].addSelectionListener(TuxGuitar.instance().getAction( ChangeDivisionTypeAction.NAME)); this.subMenuItems[2] = new MenuItem(this.subMenu, SWT.CHECK); this.subMenuItems[2].setText("6"); this.subMenuItems[2].setData(new TGDivisionType(6, 4)); this.subMenuItems[2].addSelectionListener(TuxGuitar.instance().getAction( ChangeDivisionTypeAction.NAME)); this.subMenuItems[3] = new MenuItem(this.subMenu, SWT.CHECK); this.subMenuItems[3].setText("7"); this.subMenuItems[3].setData(new TGDivisionType(7, 4)); this.subMenuItems[3].addSelectionListener(TuxGuitar.instance().getAction( ChangeDivisionTypeAction.NAME)); this.subMenuItems[4] = new MenuItem(this.subMenu, SWT.CHECK); this.subMenuItems[4].setText("9"); this.subMenuItems[4].setData(new TGDivisionType(9, 8)); this.subMenuItems[4].addSelectionListener(TuxGuitar.instance().getAction( ChangeDivisionTypeAction.NAME)); this.subMenuItems[5] = new MenuItem(this.subMenu, SWT.CHECK); this.subMenuItems[5].setText("10"); this.subMenuItems[5].setData(new TGDivisionType(10, 8)); this.subMenuItems[5].addSelectionListener(TuxGuitar.instance().getAction( ChangeDivisionTypeAction.NAME)); this.subMenuItems[6] = new MenuItem(this.subMenu, SWT.CHECK); this.subMenuItems[6].setText("11"); this.subMenuItems[6].setData(new TGDivisionType(11, 8)); this.subMenuItems[6].addSelectionListener(TuxGuitar.instance().getAction( ChangeDivisionTypeAction.NAME)); this.subMenuItems[7] = new MenuItem(this.subMenu, SWT.CHECK); this.subMenuItems[7].setText("12"); this.subMenuItems[7].setData(new TGDivisionType(12, 8)); this.subMenuItems[7].addSelectionListener(TuxGuitar.instance().getAction( ChangeDivisionTypeAction.NAME)); } public void setEnabled(boolean enabled) { this.divisionType.setEnabled(enabled); } public void setImage(Image image) { this.divisionType.setImage(image); } public void setText(String text) { this.divisionType.setToolTipText(text); } public void update() { TGDuration duration = getEditor().getTablature().getCaret().getDuration(); for (int i = 0; i < this.subMenuItems.length; i++) { TGDivisionType divisionType = (TGDivisionType) this.subMenuItems[i] .getData(); this.subMenuItems[i].setSelection((divisionType.isEqual(duration .getDivision()))); } } @Override public void widgetSelected(SelectionEvent event) { if (event.detail == SWT.ARROW) { ToolItem item = (ToolItem) event.widget; Rectangle rect = item.getBounds(); Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y)); this.subMenu.setLocation(pt.x, pt.y + rect.height); this.subMenu.setVisible(true); } else { TGDuration duration = getEditor().getTablature().getCaret() .getDuration(); if (duration.getDivision().isEqual(TGDivisionType.NORMAL)) { this.divisionType.setData(TGDivisionType.DEFAULT); } else { this.divisionType.setData(TGDivisionType.NORMAL); } TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME).process( event); } } } public static final String NAME = "duration.items"; private DivisionTypeMenuItem divisionTypeItems; private ToolItem dotted; private ToolItem doubleDotted; private ToolItem[] durationItems; protected ToolBar toolBar; public DurationToolItems() { super(NAME); } @Override protected TablatureEditor getEditor() { return super.getEditor(); } public void loadIcons() { this.durationItems[0].setImage(TuxGuitar.instance().getIconManager() .getDuration(TGDuration.WHOLE)); this.durationItems[1].setImage(TuxGuitar.instance().getIconManager() .getDuration(TGDuration.HALF)); this.durationItems[2].setImage(TuxGuitar.instance().getIconManager() .getDuration(TGDuration.QUARTER)); this.durationItems[3].setImage(TuxGuitar.instance().getIconManager() .getDuration(TGDuration.EIGHTH)); this.durationItems[4].setImage(TuxGuitar.instance().getIconManager() .getDuration(TGDuration.SIXTEENTH)); this.durationItems[5].setImage(TuxGuitar.instance().getIconManager() .getDuration(TGDuration.THIRTY_SECOND)); this.durationItems[6].setImage(TuxGuitar.instance().getIconManager() .getDuration(TGDuration.SIXTY_FOURTH)); this.dotted.setImage(TuxGuitar.instance().getIconManager() .getDurationDotted()); this.doubleDotted.setImage(TuxGuitar.instance().getIconManager() .getDurationDoubleDotted()); this.divisionTypeItems.setImage(TuxGuitar.instance().getIconManager() .getDivisionType()); } public void loadProperties() { this.durationItems[0].setToolTipText(TuxGuitar .getProperty("duration.whole")); this.durationItems[1] .setToolTipText(TuxGuitar.getProperty("duration.half")); this.durationItems[2].setToolTipText(TuxGuitar .getProperty("duration.quarter")); this.durationItems[3].setToolTipText(TuxGuitar .getProperty("duration.eighth")); this.durationItems[4].setToolTipText(TuxGuitar .getProperty("duration.sixteenth")); this.durationItems[5].setToolTipText(TuxGuitar .getProperty("duration.thirtysecond")); this.durationItems[6].setToolTipText(TuxGuitar .getProperty("duration.sixtyfourth")); this.dotted.setToolTipText(TuxGuitar.getProperty("duration.dotted")); this.doubleDotted.setToolTipText(TuxGuitar .getProperty("duration.doubledotted")); this.divisionTypeItems.setText(TuxGuitar .getProperty("duration.division-type")); } @Override public void showItems(ToolBar toolBar) { this.toolBar = toolBar; this.durationItems = new ToolItem[7]; this.durationItems[0] = new ToolItem(toolBar, SWT.RADIO); this.durationItems[0].addSelectionListener(TuxGuitar.instance().getAction( SetWholeDurationAction.NAME)); this.durationItems[1] = new ToolItem(toolBar, SWT.RADIO); this.durationItems[1].addSelectionListener(TuxGuitar.instance().getAction( SetHalfDurationAction.NAME)); this.durationItems[2] = new ToolItem(toolBar, SWT.RADIO); this.durationItems[2].setSelection(true); this.durationItems[2].addSelectionListener(TuxGuitar.instance().getAction( SetQuarterDurationAction.NAME)); this.durationItems[3] = new ToolItem(toolBar, SWT.RADIO); this.durationItems[3].addSelectionListener(TuxGuitar.instance().getAction( SetEighthDurationAction.NAME)); this.durationItems[4] = new ToolItem(toolBar, SWT.RADIO); this.durationItems[4].addSelectionListener(TuxGuitar.instance().getAction( SetSixteenthDurationAction.NAME)); this.durationItems[5] = new ToolItem(toolBar, SWT.RADIO); this.durationItems[5].addSelectionListener(TuxGuitar.instance().getAction( SetThirtySecondDurationAction.NAME)); this.durationItems[6] = new ToolItem(toolBar, SWT.RADIO); this.durationItems[6].addSelectionListener(TuxGuitar.instance().getAction( SetSixtyFourthDurationAction.NAME)); new ToolItem(toolBar, SWT.SEPARATOR); this.dotted = new ToolItem(toolBar, SWT.CHECK); this.dotted.addSelectionListener(TuxGuitar.instance().getAction( ChangeDottedDurationAction.NAME)); this.doubleDotted = new ToolItem(toolBar, SWT.CHECK); this.doubleDotted.addSelectionListener(TuxGuitar.instance().getAction( ChangeDoubleDottedDurationAction.NAME)); this.divisionTypeItems = new DivisionTypeMenuItem(); this.divisionTypeItems.addItems(); this.loadIcons(); this.loadProperties(); } public void update() { TGDuration duration = getEditor().getTablature().getCaret().getDuration(); boolean running = TuxGuitar.instance().getPlayer().isRunning(); int index = duration.getIndex(); for (int i = 0; i < this.durationItems.length; i++) { this.durationItems[i].setSelection((i == index)); this.durationItems[i].setEnabled(!running); } this.dotted.setSelection(duration.isDotted()); this.dotted.setEnabled(!running); this.doubleDotted.setSelection(duration.isDoubleDotted()); this.doubleDotted.setEnabled(!running); this.divisionTypeItems.setEnabled(!running); this.divisionTypeItems.update(); } }