1 package org.herac.tuxguitar.gui.items.menu; 2 3 import org.eclipse.swt.SWT; 4 import org.eclipse.swt.events.SelectionEvent; 5 import org.eclipse.swt.graphics.Point; 6 import org.eclipse.swt.graphics.Rectangle; 7 import org.eclipse.swt.widgets.Menu; 8 import org.eclipse.swt.widgets.MenuItem; 9 import org.eclipse.swt.widgets.Shell; 10 import org.eclipse.swt.widgets.ToolItem; 11 import org.herac.tuxguitar.gui.TuxGuitar; 12 import org.herac.tuxguitar.gui.actions.insert.InsertChordAction; 13 import org.herac.tuxguitar.gui.items.MenuItems; 14 import org.herac.tuxguitar.song.models.TGChord; 15 16 public class ChordMenuItem extends MenuItems{ 17 private MenuItem chordMenuItem; 18 private Menu menu; 19 private MenuItem insertChord; 20 private MenuItem[] subMenuItems; 21 22 private long lastEdit; 23 ChordMenuItem(Shell shell,Menu parent, int style)24 public ChordMenuItem(Shell shell,Menu parent, int style) { 25 this.chordMenuItem = new MenuItem(parent, style); 26 this.menu = new Menu(shell, SWT.DROP_DOWN); 27 } 28 showItems()29 public void showItems() { 30 //--INSERT CHORD-- 31 this.insertChord = new MenuItem(this.menu, SWT.PUSH); 32 this.insertChord.addSelectionListener(TuxGuitar.instance().getAction(InsertChordAction.NAME)); 33 //--SEPARATOR-- 34 new MenuItem(this.menu, SWT.SEPARATOR); 35 //--CUSTOM CHORDS-- 36 this.addItems(); 37 38 this.chordMenuItem.setMenu(this.menu); 39 40 this.loadIcons(); 41 this.loadProperties(); 42 } 43 addItems()44 public void addItems() { 45 this.disposeItems(); 46 this.subMenuItems = new MenuItem[TuxGuitar.instance().getCustomChordManager().countChords()]; 47 for(int i = 0;i < this.subMenuItems.length; i++){ 48 TGChord chord = TuxGuitar.instance().getCustomChordManager().getChord(i); 49 this.subMenuItems[i] = new MenuItem(this.menu, SWT.PUSH); 50 this.subMenuItems[i].setData(chord); 51 this.subMenuItems[i].setText(chord.getName()); 52 this.subMenuItems[i].addSelectionListener(TuxGuitar.instance().getAction(InsertChordAction.NAME)); 53 } 54 } 55 disposeItems()56 public void disposeItems() { 57 if(this.subMenuItems != null){ 58 for(int i = 0;i < this.subMenuItems.length; i++){ 59 this.subMenuItems[i].dispose(); 60 } 61 } 62 } 63 widgetSelected(SelectionEvent event)64 public void widgetSelected(SelectionEvent event) { 65 if (event.detail == SWT.ARROW && this.subMenuItems != null && this.subMenuItems.length > 0) { 66 ToolItem item = (ToolItem) event.widget; 67 Rectangle rect = item.getBounds(); 68 Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y)); 69 this.menu.setLocation(pt.x, pt.y + rect.height); 70 this.menu.setVisible(true); 71 }else{ 72 TuxGuitar.instance().getAction(InsertChordAction.NAME).process(event); 73 } 74 } 75 update()76 public void update(){ 77 boolean running = TuxGuitar.instance().getPlayer().isRunning(); 78 if(this.lastEdit != TuxGuitar.instance().getCustomChordManager().getLastEdit()){ 79 this.addItems(); 80 this.lastEdit = TuxGuitar.instance().getCustomChordManager().getLastEdit(); 81 } 82 this.insertChord.setEnabled(!running); 83 for(int i = 0;i < this.subMenuItems.length; i++){ 84 this.subMenuItems[i].setEnabled(!running); 85 } 86 } 87 loadProperties()88 public void loadProperties() { 89 setMenuItemTextAndAccelerator(this.chordMenuItem, "chord", null); 90 setMenuItemTextAndAccelerator(this.insertChord, "insert.chord", InsertChordAction.NAME); 91 } 92 loadIcons()93 public void loadIcons() { 94 //Nothing to do 95 } 96 } 97