/**
* Copyright (c) 2005-2007 IBM Corporation and others.
* 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
*
* Contributors:
* IBM - Initial API and implementation
*/
package org.eclipse.emf.converter.ui.contribution.base;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
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.Text;
import org.eclipse.emf.converter.ConverterPlugin;
import org.eclipse.emf.converter.ModelConverter;
/**
* @since 2.2.0
*/
public class ModelConverterURIPage extends ModelConverterPage
{
protected Text uriText;
protected Button browseFileSystemButton;
protected Button browseWorkspaceButton;
public ModelConverterURIPage(ModelConverter modelConverter, String pageName)
{
super(modelConverter, pageName);
}
@Override
public void dispose()
{
if (uriText != null)
{
uriText.removeListener(SWT.Modify, this);
uriText = null;
}
if (browseFileSystemButton != null)
{
browseFileSystemButton.removeListener(SWT.Selection, this);
browseFileSystemButton = null;
}
if (browseWorkspaceButton != null)
{
browseWorkspaceButton.removeListener(SWT.Selection, this);
browseWorkspaceButton = null;
}
super.dispose();
}
public void createControl(Composite parent)
{
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL));
GridLayout layout = new GridLayout();
layout.verticalSpacing = 8;
composite.setLayout(layout);
createURIControl(composite);
addControl(composite);
setControl(composite);
}
protected void createURIControl(Composite parent)
{
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL));
{
FormLayout layout = new FormLayout();
layout.marginTop = 10;
layout.spacing = 10;
composite.setLayout(layout);
}
Label uriLabel = new Label(composite, SWT.LEFT);
{
FormData data = new FormData();
data.left = new FormAttachment(0);
uriLabel.setLayoutData(data);
}
uriLabel.setText(getURITextLabel());
Composite uriComposite = new Composite(composite, SWT.NONE);
{
FormData data = new FormData();
data.top = new FormAttachment(uriLabel, 5);
data.left = new FormAttachment(0);
data.right = new FormAttachment(100);
uriComposite.setLayoutData(data);
GridLayout layout = new GridLayout(2, false);
layout.marginTop = -5;
layout.marginLeft = -5;
layout.marginRight = -5;
uriComposite.setLayout(layout);
}
Composite buttonComposite = new Composite(composite, SWT.NONE);
{
FormData data = new FormData();
data.top = new FormAttachment(uriLabel, 0, SWT.CENTER);
data.left = new FormAttachment(uriLabel, 0);
data.right = new FormAttachment(100);
buttonComposite.setLayoutData(data);
FormLayout layout = new FormLayout();
layout.marginTop = 0;
layout.marginBottom = 0;
layout.marginLeft = 0;
layout.marginRight = 0;
layout.spacing = 5;
buttonComposite.setLayout(layout);
}
browseFileSystemButton = new Button(buttonComposite, SWT.PUSH);
browseFileSystemButton.setText(getBrowseFileSystemButtonLabel());
browseFileSystemButton.addListener(SWT.Selection, this);
browseWorkspaceButton = new Button(buttonComposite, SWT.PUSH);
browseWorkspaceButton.setText(getBrowseWorkspaceButtonLabel());
browseWorkspaceButton.addListener(SWT.Selection, this);
{
FormData data = new FormData();
data.right = new FormAttachment(browseWorkspaceButton);
browseFileSystemButton.setLayoutData(data);
}
{
FormData data = new FormData();
data.right = new FormAttachment(100);
browseWorkspaceButton.setLayoutData(data);
}
uriText = new Text(uriComposite, SWT.SINGLE | SWT.BORDER);
setURIText(getURITextInitialValue());
if (uriText.getText().length() > 0)
{
uriText.selectAll();
}
uriText.addListener(SWT.Modify, this);
addURIControl(uriComposite);
{
GridData gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
if (uriComposite.getChildren().length == 1)
{
gridData.horizontalSpan = 2;
}
uriText.setLayoutData(gridData);
}
}
protected String getURITextLabel()
{
return "";
}
protected String getBrowseFileSystemButtonLabel()
{
return ConverterPlugin.INSTANCE.getString("_UI_BrowseFileSystemFile_label");
}
protected String getBrowseWorkspaceButtonLabel()
{
return ConverterPlugin.INSTANCE.getString("_UI_BrowseWorkspace_label");
}
protected String getURITextInitialValue()
{
return "";
}
protected void addURIControl(Composite parent)
{
// Subclasses may override
}
protected void addControl(Composite parent)
{
// Subclasses may override
}
@Override
protected void doHandleEvent(Event event)
{
if (event.type == SWT.Modify && event.widget == uriText)
{
uriTextModified(uriText.getText().trim());
}
else if (event.type == SWT.Selection && event.widget == browseFileSystemButton)
{
browseFileSystem();
}
else if (event.type == SWT.Selection && event.widget == browseWorkspaceButton)
{
browseWorkspace();
}
else
{
super.doHandleEvent(event);
}
getContainer().updateButtons();
}
protected void uriTextModified(String text)
{
setErrorMessage(null);
setMessage(null);
}
protected boolean supportMultipleURIs()
{
return false;
}
protected void setURIText(String uri)
{
uri = uri.trim();
StringBuffer text = new StringBuffer(uriText.getText());
if (!uri.equals(text))
{
if (supportMultipleURIs())
{
Point textSelection = uriText.getSelection();
text.delete(textSelection.x, textSelection.y);
uri = text.append(" ").append(uri).toString();
}
uriText.setText(uri.trim());
}
}
protected boolean browseFileSystem()
{
return true;
}
protected boolean browseWorkspace()
{
return true;
}
}