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