package bndtools.shared; import java.io.File; import java.net.URI; import java.net.URISyntaxException; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; 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.Control; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; public class URLDialog extends TitleAreaDialog { private String locationStr = null; private URI location = null; private String name = null; private final String title; private final boolean named; public URLDialog(Shell parentShell, String title) { this(parentShell, title, true); } public URLDialog(Shell parentShell, String title, boolean named) { super(parentShell); this.title = title; this.named = named; setShellStyle(getShellStyle() | SWT.RESIZE); } @Override protected Control createDialogArea(Composite parent) { setTitle(title); Composite area = (Composite) super.createDialogArea(parent); Composite container = new Composite(area, SWT.NONE); container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); GridLayout gl = new GridLayout(3, false); container.setLayout(gl); Label lblUrl = new Label(container, SWT.NONE); lblUrl.setText("URL:"); final Text txtUrl = new Text(container, SWT.BORDER); txtUrl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); txtUrl.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent ev) { locationStr = txtUrl.getText(); updateFromInput(); } }); Button btnBrowseFile = new Button(container, SWT.PUSH); btnBrowseFile.setText("Local File"); btnBrowseFile.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { FileDialog fileDialog = new FileDialog(getShell(), SWT.OPEN); String path = fileDialog.open(); if (path != null) { File file = new File(path); URI fileUri = file.toURI(); txtUrl.setText(fileUri.toString()); } } }); if (named) { new Label(container, SWT.NONE).setText("Name:"); final Text txtName = new Text(container, SWT.BORDER); txtName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); @SuppressWarnings("unused") Label lblSpacer1 = new Label(container, SWT.NONE); // spacer txtName.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent ev) { name = txtName.getText(); } }); } // Listeners // Load from state if (location != null) txtUrl.setText(location.toString()); return area; } @Override protected void createButtonsForButtonBar(Composite parent) { super.createButtonsForButtonBar(parent); Button ok = getButton(OK); ok.setText("Add"); ok.setEnabled(location != null); } private void updateFromInput() { try { location = new URI(locationStr); setErrorMessage(null); getButton(OK).setEnabled(true); } catch (URISyntaxException e) { setErrorMessage(e.getMessage()); getButton(OK).setEnabled(false); } } public URI getLocation() { return location; } public String getName() { return name; } }