package org.herac.tuxguitar.gui.tools.browser.dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.herac.tuxguitar.gui.TuxGuitar;
import org.herac.tuxguitar.gui.tools.browser.TGBrowserCollection;
import org.herac.tuxguitar.gui.tools.browser.TGBrowserManager;
import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory;
public class TGBrowserToolBar extends TGBrowserBar {
private ToolItem back;
protected TGBrowserCollectionCombo collections;
private Composite composite;
private ToolItem newBrowser;
protected Menu newBrowserMenu;
private ToolItem refresh;
private ToolItem root;
private ToolBar toolBar;
public TGBrowserToolBar(TGBrowserDialog browser) {
super(browser);
}
private void disposeItems() {
Control[] controls = this.composite.getChildren();
for (int i = 0; i < controls.length; i++) {
controls[i].dispose();
}
}
private GridLayout getLayout() {
GridLayout layout = new GridLayout(2, false);
layout.marginWidth = 0;
layout.marginHeight = 0;
return layout;
}
public void init(Shell shell) {
this.composite = new Composite(shell, SWT.NONE);
this.composite.setLayout(getLayout());
this.composite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
this.initItems();
}
public void initItems() {
this.toolBar = new ToolBar(this.composite, SWT.FLAT | SWT.WRAP);
// ---New Book----------------------------------------------------------
this.newBrowserMenu = new Menu(this.composite);
for (final TGBrowserFactory bookType : TGBrowserManager.instance()
.getFactories()) {
MenuItem item = new MenuItem(this.newBrowserMenu, SWT.PUSH);
item.setText(bookType.getName());
item.setData(bookType);
item.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
newCollection(bookType.getType());
}
});
}
this.newBrowser = new ToolItem(this.toolBar, SWT.DROP_DOWN);
this.newBrowser.setImage(TuxGuitar.instance().getIconManager()
.getBrowserNew());
this.newBrowser.addSelectionListener(new SelectionAdapter() {
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));
TGBrowserToolBar.this.newBrowserMenu.setLocation(pt.x, pt.y
+ rect.height);
TGBrowserToolBar.this.newBrowserMenu.setVisible(true);
}
}
});
new ToolItem(this.toolBar, SWT.SEPARATOR);
// ---Root Folder------------------------------------------------------
this.root = new ToolItem(this.toolBar, SWT.PUSH);
this.root.setImage(TuxGuitar.instance().getIconManager().getBrowserRoot());
this.root.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
getBrowser().getConnection().cdRoot(TGBrowserDialog.CALL_CD_ROOT);
}
});
// ---Back Folder------------------------------------------------------
this.back = new ToolItem(this.toolBar, SWT.PUSH);
this.back.setImage(TuxGuitar.instance().getIconManager().getBrowserBack());
this.back.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
getBrowser().getConnection().cdUp(TGBrowserDialog.CALL_CD_UP);
}
});
// ---Refresh Folder------------------------------------------------------
this.refresh = new ToolItem(this.toolBar, SWT.PUSH);
this.refresh.setImage(TuxGuitar.instance().getIconManager()
.getBrowserRefresh());
this.refresh.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
getBrowser().getConnection().listElements(TGBrowserDialog.CALL_LIST);
}
});
// ---Finish tool bar
new ToolItem(this.toolBar, SWT.SEPARATOR);
// ---Collections-------------------------------------------------------------
this.collections = new TGBrowserCollectionCombo(this.composite,
SWT.READ_ONLY);
this.collections.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,
true));
this.collections.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
updateCollection();
}
});
}
public void loadProperties() {
this.newBrowser.setToolTipText(TuxGuitar
.getProperty("browser.collection.new"));
this.root.setToolTipText(TuxGuitar.getProperty("browser.go-root"));
this.back.setToolTipText(TuxGuitar.getProperty("browser.go-back"));
this.refresh.setToolTipText(TuxGuitar.getProperty("browser.refresh"));
this.updateCollections(getBrowser().getCollection());
}
public void reload() {
this.disposeItems();
this.initItems();
this.loadProperties();
this.updateItems();
this.composite.layout(true, true);
}
protected void updateCollection() {
TGBrowserCollection collection = this.collections.getSelection();
if (collection == null) {
closeCollection();
} else {
openCollection(collection);
}
}
public void updateCollections(TGBrowserCollection selection) {
int index = 0;
this.collections.removeAll();
for (final TGBrowserCollection collection : TGBrowserManager.instance()
.getCollections()) {
if (collection.getData() != null) {
this.collections.add(collection);
if (selection != null && selection.equals(collection)) {
this.collections.select(index);
}
index++;
}
}
}
public void updateItems() {
this.newBrowser.setEnabled(!getBrowser().getConnection().isLocked());
this.collections.setEnabled(!getBrowser().getConnection().isLocked());
this.root.setEnabled(!getBrowser().getConnection().isLocked()
&& getBrowser().getConnection().isOpen());
this.back.setEnabled(!getBrowser().getConnection().isLocked()
&& getBrowser().getConnection().isOpen());
this.refresh.setEnabled(!getBrowser().getConnection().isLocked()
&& getBrowser().getConnection().isOpen());
}
}