/******************************************************************************* * This file is protected by Copyright. * Please refer to the COPYRIGHT file distributed with this source distribution. * * This file is part of REDHAWK IDE. * * All rights reserved. This program and the accompanying materials are made available under * the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ package gov.redhawk.ide.ui.wizard; import org.eclipse.core.databinding.validation.IValidator; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; import org.eclipse.jface.layout.GridDataFactory; 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.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; /** * @since 8.0 * */ public class ContentsGroup { private final Button createNewResourceButton; private final Button importFileButton; private final Text fileText; private final Button browseButton; private IValidator validator; private final Group group; private final IValidatableWizardPage page; public ContentsGroup(final Composite parent, final int style, final String resourceType, final String resourceExtension, final IValidatableWizardPage page) { final int COLS = 3; this.page = page; this.group = new Group(parent, style); this.group.setText("Contents"); this.group.setLayout(new GridLayout(COLS, false)); this.createNewResourceButton = new Button(this.group, SWT.RADIO); GridDataFactory.generate(this.createNewResourceButton, COLS, 1); this.createNewResourceButton.setText("Create a new " + resourceType.toLowerCase()); this.createNewResourceButton.setLayoutData(GridDataFactory.fillDefaults().span(COLS, 1).create()); this.createNewResourceButton.setSelection(true); this.createNewResourceButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { page.validate(); ContentsGroup.this.fileText.setEnabled(!ContentsGroup.this.createNewResourceButton.getSelection()); ContentsGroup.this.browseButton.setEnabled(!ContentsGroup.this.createNewResourceButton.getSelection()); } }); this.importFileButton = new Button(this.group, SWT.RADIO); this.importFileButton.setText("Use existing " + resourceType.toLowerCase() + " as a template"); this.importFileButton.setLayoutData(GridDataFactory.fillDefaults().span(COLS, 1).create()); new Label(this.group, SWT.NONE).setText(resourceExtension + " File:"); this.fileText = new Text(this.group, SWT.BORDER); this.fileText.setEnabled(false); this.fileText.addModifyListener(new ModifyListener() { @Override public void modifyText(final ModifyEvent e) { page.validate(); } }); GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.CENTER).applyTo(this.fileText); this.browseButton = new Button(this.group, SWT.NONE); this.browseButton.setText("Browse..."); this.browseButton.setEnabled(false); this.browseButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { handleBrowseForTemplate(resourceExtension); } }); } protected void handleBrowseForTemplate(final String resourceExtension) { final FileDialog dialog = new FileDialog(this.browseButton.getShell(), SWT.OPEN); dialog.setFilterExtensions(new String[] { "*." + resourceExtension.toLowerCase() + ".xml", "*" }); dialog.setText("Open " + resourceExtension.toUpperCase()); final String result = dialog.open(); if (result != null) { this.fileText.setText(result); } } public void setLayoutData(final Object layoutData) { this.group.setLayoutData(layoutData); } public void setValidator(final IValidator validator) { this.validator = validator; this.page.validate(); } public IStatus validateGroup() { if (this.createNewResourceButton.getSelection()) { return Status.OK_STATUS; } else if (this.validator != null) { return this.validator.validate(this.fileText.getText()); } else { return Status.OK_STATUS; } } public boolean isCreateNewResource() { return this.createNewResourceButton.getSelection(); } public IPath getExistingResourcePath() { return new Path(this.fileText.getText().trim()); } /** * @since 9.0 */ public Button getCreateNewResourceButton() { return createNewResourceButton; } /** * @since 9.0 */ public Button getImportFileButton() { return importFileButton; } }