/*
* Created on 17-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.actions.settings;
import java.util.Iterator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.TypedEvent;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.herac.tuxguitar.gui.TuxGuitar;
import org.herac.tuxguitar.gui.actions.Action;
import org.herac.tuxguitar.gui.system.plugins.TGPlugin;
import org.herac.tuxguitar.gui.system.plugins.TGPluginSetup;
import org.herac.tuxguitar.gui.util.DialogUtils;
import org.herac.tuxguitar.gui.util.MessageDialog;
/**
* @author julian
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class EditPluginsAction extends Action {
public static final String NAME = "action.settings.plugins";
private static final int TABLE_HEIGHT = 300;
private static final int TABLE_WIDTH = 400;
public EditPluginsAction() {
super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE);
}
protected int execute(TypedEvent e) {
showDialog();
return 0;
}
private GridData getButtonData() {
GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
data.minimumWidth = 80;
data.minimumHeight = 25;
return data;
}
private void setBold(Label label) {
FontData[] fontDatas = label.getFont().getFontData();
if (fontDatas.length > 0) {
final Font font = new Font(label.getDisplay(), fontDatas[0].getName(),
(fontDatas[0].getHeight()), SWT.BOLD);
label.setFont(font);
label.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
font.dispose();
}
});
}
}
public void showDialog() {
final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),
SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
dialog.setLayout(new GridLayout());
dialog.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
dialog.setText(TuxGuitar.getProperty("plugins"));
final Table table = new Table(dialog, SWT.BORDER | SWT.SINGLE
| SWT.FULL_SELECTION | SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL);
table.setLayoutData(new GridData(TABLE_WIDTH, TABLE_HEIGHT));
table.setHeaderVisible(true);
final TableColumn columnEnabled = new TableColumn(table, SWT.LEFT);
final TableColumn columnPlugin = new TableColumn(table, SWT.LEFT);
columnEnabled.setText(TuxGuitar.getProperty("plugin.column.enabled"));
columnPlugin.setText(TuxGuitar.getProperty("plugin.column.name"));
columnEnabled.setWidth((TABLE_WIDTH / 4));
columnPlugin.setWidth((TABLE_WIDTH - (TABLE_WIDTH / 4)));
Iterator it = TuxGuitar.instance().getPluginManager().getPlugins()
.iterator();
while (it.hasNext()) {
TGPlugin plugin = (TGPlugin) it.next();
TableItem item = new TableItem(table, SWT.NONE);
item.setData(plugin);
item.setText(1, ((plugin.getName() != null) ? plugin.getName()
: "Undefined Plugin"));
item
.setChecked(TuxGuitar.instance().getPluginManager().isEnabled(plugin));
}
// ------------------BUTTONS--------------------------
Composite buttons = new Composite(dialog, SWT.NONE);
buttons.setLayout(new GridLayout(3, false));
buttons.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, true, true));
final Button buttonSetup = new Button(buttons, SWT.PUSH);
buttonSetup.setText(TuxGuitar.getProperty("configure"));
buttonSetup.setLayoutData(getButtonData());
buttonSetup.setEnabled(false);
buttonSetup.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {
TableItem item = table.getItem(table.getSelectionIndex());
if (item != null && item.getData() instanceof TGPluginSetup) {
try {
((TGPluginSetup) item.getData()).setupDialog(dialog);
} catch (Throwable throwable) {
MessageDialog.errorMessage(dialog, throwable);
}
}
}
});
final Button buttonInfo = new Button(buttons, SWT.PUSH);
buttonInfo.setText(TuxGuitar.getProperty("info"));
buttonInfo.setLayoutData(getButtonData());
buttonInfo.setEnabled(false);
buttonInfo.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {
TableItem item = table.getItem(table.getSelectionIndex());
if (item != null && item.getData() instanceof TGPlugin) {
try {
showInfo(dialog, (TGPlugin) item.getData());
} catch (Throwable throwable) {
MessageDialog.errorMessage(dialog, throwable);
}
}
}
});
Button buttonClose = new Button(buttons, SWT.PUSH);
buttonClose.setText(TuxGuitar.getProperty("close"));
buttonClose.setLayoutData(getButtonData());
buttonClose.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {
dialog.dispose();
}
});
table.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
buttonInfo.setEnabled(false);
buttonSetup.setEnabled(false);
if (event.item instanceof TableItem
&& event.item.getData() instanceof TGPlugin) {
final TableItem item = (TableItem) event.item;
if (event.detail == SWT.CHECK) {
TuxGuitar.instance().loadCursor(dialog, SWT.CURSOR_WAIT);
TuxGuitar.instance().getPluginManager().setEnabled(
(TGPlugin) item.getData(), item.getChecked());
TuxGuitar.instance().loadCursor(dialog, SWT.CURSOR_ARROW);
table.setSelection(item);
}
buttonInfo.setEnabled(true);
buttonSetup.setEnabled((item.getData() instanceof TGPluginSetup));
}
}
});
dialog.setDefaultButton(buttonInfo);
DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER
| DialogUtils.OPEN_STYLE_PACK);
}
public void showInfo(Shell parent, TGPlugin plugin) {
final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM
| SWT.APPLICATION_MODAL);
dialog.setLayout(new GridLayout());
dialog.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
dialog.setText(TuxGuitar.getProperty("plugins"));
Composite info = new Composite(dialog, SWT.NONE);
info.setLayout(new GridLayout(2, false));
showInfoString(info, TuxGuitar.getProperty("name") + ":", plugin.getName());
showInfoString(info, TuxGuitar.getProperty("version") + ":", plugin
.getVersion());
showInfoString(info, TuxGuitar.getProperty("author") + ":", plugin
.getAuthor());
showInfoString(info, TuxGuitar.getProperty("description") + ":", plugin
.getDescription());
// ------------------BUTTONS--------------------------
Composite buttons = new Composite(dialog, SWT.NONE);
buttons.setLayout(new GridLayout());
buttons.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, true, true));
Button buttonExit = new Button(buttons, SWT.PUSH);
buttonExit.setText(TuxGuitar.getProperty("exit"));
buttonExit.setLayoutData(getButtonData());
buttonExit.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {
dialog.dispose();
}
});
dialog.setDefaultButton(buttonExit);
DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER
| DialogUtils.OPEN_STYLE_PACK);
}
private void showInfoString(Composite parent, String key, String value) {
Label labelKey = new Label(parent, SWT.LEFT);
Label labelValue = new Label(parent, SWT.LEFT | SWT.WRAP);
labelKey.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, true));
labelValue.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));
setBold(labelKey);
labelKey.setText(key);
labelValue.setText((value != null && value.length() > 0) ? value
: TuxGuitar.getProperty("plugin.unknown-value"));
}
}