package org.herac.tuxguitar.gui.tools.browser.filesystem; import java.io.File; 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.Composite; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.gui.util.MessageDialog; public class TGBrowserDataDialog { private TGBrowserData data; private GridData getButtonData() { GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } public TGBrowserData getData() { return this.data; } private GridData getTextData(int span) { GridData data = new GridData(SWT.LEFT, SWT.CENTER, true, true, span, 1); data.minimumWidth = 350; return data; } protected boolean isBlank(String s) { return (s == null || s.length() == 0); } protected boolean isValidPath(String path) { if (!isBlank(path)) { File file = new File(path); return (file.exists() && file.isDirectory()); } return false; } public TGBrowserData open(Shell parent) { final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setLayout(new GridLayout()); dialog.setText(TuxGuitar.getProperty("browser.collection.fs.editor-title")); Group group = new Group(dialog, SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout()); group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); group.setText(TuxGuitar.getProperty("browser.collection.fs.editor-tip")); Composite composite = new Composite(group, SWT.NONE); composite.setLayout(new GridLayout(3, false)); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); final Label titleLabel = new Label(composite, SWT.LEFT); titleLabel.setText(TuxGuitar.getProperty("browser.collection.fs.name")); titleLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, true)); final Text titleValue = new Text(composite, SWT.BORDER); titleValue.setLayoutData(getTextData(2)); final Label pathLabel = new Label(composite, SWT.LEFT); pathLabel.setText(TuxGuitar.getProperty("browser.collection.fs.path")); pathLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, true)); final Text pathValue = new Text(composite, SWT.BORDER); pathValue.setLayoutData(getTextData(1)); final Button pathChooser = new Button(composite, SWT.PUSH); pathChooser.setImage(TuxGuitar.instance().getIconManager().getFileOpen()); pathChooser.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { DirectoryDialog directoryDialog = new DirectoryDialog(dialog); String selection = directoryDialog.open(); if (selection != null) { pathValue.setText(selection); } } }); // ------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2, false)); buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { String selectedTitle = titleValue.getText(); String selectedPath = pathValue.getText(); if (!isValidPath(selectedPath)) { MessageDialog.errorMessage(dialog, TuxGuitar .getProperty("browser.collection.fs.invalid-path")); return; } if (isBlank(selectedTitle)) { selectedTitle = selectedPath; } setData(new TGBrowserDataImpl(selectedTitle, selectedPath)); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); 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); return getData(); } public void setData(TGBrowserData data) { this.data = data; } }