package de.urszeidler.shr5.ecp.dialogs; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.observable.ChangeEvent; import org.eclipse.core.databinding.observable.IChangeListener; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.core.databinding.observable.value.WritableValue; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.jface.databinding.swt.WidgetProperties; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FillLayout; 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.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.dialogs.ResourceListSelectionDialog; import org.eclipse.ui.dialogs.SelectionDialog; import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil; public class ImageChooseDialog extends TitleAreaDialog { protected DataBindingContext m_bindingContext; private Text text; private WritableValue externalValue = new WritableValue(null, String.class); private String value; private String defaultValue; /** * Create the dialog. * * @param parentShell */ public ImageChooseDialog(Shell parentShell,String defaultValue) { super(parentShell); setHelpAvailable(false); this.defaultValue = defaultValue; } /** * Create contents of the dialog. * * @param parent */ @Override protected Control createDialogArea(Composite parent) { setMessage("Select an image from the workspace or the filesystem."); setTitle("Select image"); Composite area = (Composite)super.createDialogArea(parent); Composite container = new Composite(area, SWT.NONE); container.setLayout(new GridLayout(1, false)); container.setLayoutData(new GridData(GridData.FILL_BOTH)); Group grpSelectSource = new Group(container, SWT.NONE); grpSelectSource.setLayout(new GridLayout(4, false)); grpSelectSource.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); grpSelectSource.setText("select source"); final Button btnRadioButton_1 = new Button(grpSelectSource, SWT.RADIO); btnRadioButton_1.setSelection(true); btnRadioButton_1.setText("workspace"); final Button btnRadioButton = new Button(grpSelectSource, SWT.RADIO); btnRadioButton.setText("filesystem"); new Label(grpSelectSource, SWT.NONE); new Label(grpSelectSource, SWT.NONE); text = new Text(grpSelectSource, SWT.BORDER); text.setSize(307, 29); text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1)); Button btnNewButton = new Button(grpSelectSource, SWT.NONE); btnNewButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (btnRadioButton_1.getSelection()) selectFromWorkspace(); else selectFromFilesystem(); } }); btnNewButton.setText("select"); Group grpPreview = new Group(container, SWT.NONE); grpPreview.setLayout(new FillLayout(SWT.HORIZONTAL)); GridData gd_grpPreview = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); gd_grpPreview.heightHint = 115; grpPreview.setLayoutData(gd_grpPreview); grpPreview.setText("preview"); final Label label = new Label(grpPreview, SWT.CENTER); if(defaultValue!=null && !defaultValue.isEmpty()){ label.setImage(AdapterFactoryUtil.getInstance().getImageScaledBy(gd_grpPreview.heightHint-5, defaultValue)); externalValue.setValue(defaultValue); } externalValue.addChangeListener(new IChangeListener() { @Override public void handleChange(ChangeEvent event) { String value = (String)externalValue.getValue(); if (value != null) { label.setImage(AdapterFactoryUtil.getInstance().getImageScaledBy(label.getBounds().height, value)); } } }); return area; } /** * Create contents of the button bar. * * @param parent */ @Override protected void createButtonsForButtonBar(Composite parent) { createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); m_bindingContext = initDataBindings(); } /** * Return the initial size of the dialog. */ @Override protected Point getInitialSize() { return new Point(450, 395); } @Override protected void okPressed() { value = (String)externalValue.getValue(); externalValue.dispose(); super.okPressed(); } protected DataBindingContext initDataBindings() { DataBindingContext bindingContext = new DataBindingContext(); // IObservableValue observeTextText_1ObserveWidget = WidgetProperties.text(SWT.Modify).observeDelayed(200, text); bindingContext.bindValue(observeTextText_1ObserveWidget, externalValue, null, null); // return bindingContext; } public String getValue() { return value; } /** * */ private void selectFromFilesystem() { FileDialog fd = new FileDialog(getShell(), SWT.OPEN); fd.setText("Open"); fd.setFilterPath(""); String[] filterExt = { "*.png", "*.jpg", ".gif", "*.*" }; fd.setFilterExtensions(filterExt); String selected = fd.open(); externalValue.setValue(selected); } /** * */ private void selectFromWorkspace() { IWorkspace workspace = ResourcesPlugin.getWorkspace(); SelectionDialog dlg; dlg = new ResourceListSelectionDialog(getShell(), workspace.getRoot(), 1); dlg.setTitle("Messages.BeschreibbarWidget_select_image"); int open = dlg.open(); if (open == Window.OK) { Object[] result = dlg.getResult(); if (result != null) { externalValue.setValue(((IFile)result[0]).getFullPath().toString()); } } } }