package org.herac.tuxguitar.io.gtp; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.system.config.TGConfigManager; import org.herac.tuxguitar.gui.system.plugins.TGPluginConfigManager; import org.herac.tuxguitar.gui.util.DialogUtils; public class GTPSettingsUtil { private static GTPSettingsUtil instance; private static final String KEY_CHARSET = "charset"; public static GTPSettingsUtil instance() { if (instance == null) { instance = new GTPSettingsUtil(); } return instance; } private TGConfigManager config; private GTPSettings settings; private GTPSettingsUtil() { this.settings = new GTPSettings(); } public void configure(Shell parent) { final List<String> charsets = getAvailableCharsets(); final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("gtp.settings.title")); // ------------------DEVICE----------------------- Group group = new Group(dialog, SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout(2, false)); group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); group.setText(TuxGuitar.getProperty("gtp.settings.charset.tip")); final Label label = new Label(group, SWT.LEFT); label.setText(TuxGuitar.getProperty("gtp.settings.charset.select") + ":"); final Combo value = new Combo(group, SWT.DROP_DOWN | SWT.READ_ONLY); value.setLayoutData(new GridData(250, SWT.DEFAULT)); for (int i = 0; i < charsets.size(); i++) { String charset = (String) charsets.get(i); value.add(charset); if (charset.equals(this.settings.getCharset())) { value.select(i); } } // ------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2, false)); buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true)); GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(data); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { int selection = value.getSelectionIndex(); if (selection >= 0 && selection < charsets.size()) { TGConfigManager config = getConfig(); config.setProperty(KEY_CHARSET, (String) charsets.get(selection)); config.save(); load(); } dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(data); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton(buttonOK); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } private List<String> getAvailableCharsets() { return new ArrayList<String>(Charset.availableCharsets().keySet()); } public TGConfigManager getConfig() { if (this.config == null) { this.config = new TGPluginConfigManager("tuxguitar-gtp"); this.config.init(); } return this.config; } public GTPSettings getSettings() { return this.settings; } public void load() { String charsetDefault = System.getProperty("file.encoding"); if (charsetDefault == null) { charsetDefault = GTPSettings.DEFAULT_CHARSET; } this.settings.setCharset(getConfig().getStringConfigValue(KEY_CHARSET, charsetDefault)); } }