/******************************************************************************* | |
* Copyright (c) 2008, 2012 IBM Corporation and others. | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License 2.0 | |
* which accompanies this distribution, and is available at | |
* https://www.eclipse.org/legal/epl-2.0/ | |
* | |
* SPDX-License-Identifier: EPL-2.0 | |
* | |
* Contributors: | |
* IBM Corporation - initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.bpel.ui.dialogs; | |
import org.eclipse.bpel.ui.BPELUIPlugin; | |
import org.eclipse.core.runtime.Path; | |
import org.eclipse.jface.dialogs.IDialogSettings; | |
import org.eclipse.jface.dialogs.TrayDialog; | |
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.Control; | |
import org.eclipse.swt.widgets.Event; | |
import org.eclipse.swt.widgets.FileDialog; | |
import org.eclipse.swt.widgets.Label; | |
import org.eclipse.swt.widgets.Listener; | |
import org.eclipse.swt.widgets.Shell; | |
import org.eclipse.swt.widgets.Text; | |
public class SaveImageDialog extends TrayDialog { | |
private static final String SETTINGS_IS_TRANSPARENT = "Transparent"; | |
private static final String SETTINGS_DIRECTORY = "Directory"; | |
private Text txtImageFileName; | |
private Button btnTransparent; | |
private String fileNamePart; | |
private String imageFileName; | |
private boolean transparent; | |
private IDialogSettings settings; | |
public SaveImageDialog(Shell parentShell, String filename) { | |
super(parentShell); | |
int shellStyle = getShellStyle(); | |
setShellStyle(shellStyle | SWT.MAX | SWT.RESIZE); | |
this.fileNamePart = stripExtenstion(filename); | |
settings = BPELUIPlugin.INSTANCE.getDialogSettingsFor(this); | |
} | |
@Override | |
protected void configureShell(Shell shell) { | |
super.configureShell(shell); | |
shell.setText("Export as image"); | |
} | |
@Override | |
protected Control createDialogArea(Composite parent) { | |
Composite composite = (Composite) super.createDialogArea(parent); | |
GridLayout layout = (GridLayout) composite.getLayout(); | |
layout.numColumns = 3; | |
new Label(composite, SWT.NONE).setText("To image file:"); | |
txtImageFileName = new Text(composite, SWT.BORDER); | |
txtImageFileName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | |
| GridData.GRAB_HORIZONTAL)); | |
txtImageFileName.addListener(SWT.Modify, new Listener() { | |
public void handleEvent(Event event) { | |
btnTransparent.setEnabled(txtImageFileName.getText().endsWith( | |
".png")); | |
} | |
}); | |
Button browseButton = new Button(composite, SWT.NONE); | |
browseButton.setText("Browse..."); | |
browseButton.addSelectionListener(new SelectionAdapter() { | |
@Override | |
public void widgetSelected(SelectionEvent e) { | |
selectFile(); | |
} | |
}); | |
btnTransparent = new Button(composite, SWT.CHECK); | |
btnTransparent.setText("Transparent background"); | |
GridData gd = new GridData(); | |
gd.widthHint = 400; | |
gd.horizontalSpan = 3; | |
btnTransparent.setLayoutData(gd); | |
applySettings(); | |
return composite; | |
} | |
private void applySettings() { | |
String dir = settings.get(SETTINGS_DIRECTORY); | |
if (dir != null) | |
txtImageFileName.setText((new Path(dir)).append(fileNamePart) | |
.addFileExtension("png").toOSString()); | |
btnTransparent.setSelection(settings | |
.getBoolean(SETTINGS_IS_TRANSPARENT)); | |
} | |
private void selectFile() { | |
String[] filterExtensions = new String[] { "*.png", "*.jpg", "*.bmp" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ | |
String[] filterNames = new String[] { | |
"PNG (*.png)", "JPEG (*.jpg)", "BMP (*.bmp)" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ | |
FileDialog fileDialog = new FileDialog(getShell(), SWT.SAVE); | |
fileDialog.setFilterPath(txtImageFileName.getText()); | |
fileDialog.setFileName(fileNamePart); | |
fileDialog.setFilterNames(filterNames); | |
fileDialog.setFilterExtensions(filterExtensions); | |
fileDialog.setText("Export as"); | |
String result = fileDialog.open(); | |
if (result != null) { | |
txtImageFileName.setText(result); | |
} | |
} | |
private String stripExtenstion(String fileName) { | |
int pos = fileName.lastIndexOf('.'); | |
return (pos == -1) ? fileName : fileName.substring(0, pos); | |
} | |
public String getFileName() { | |
return imageFileName; | |
} | |
public boolean isTransparent() { | |
return transparent; | |
} | |
@Override | |
protected void okPressed() { | |
imageFileName = txtImageFileName.getText(); | |
transparent = btnTransparent.getSelection(); | |
settings.put(SETTINGS_IS_TRANSPARENT, transparent); | |
settings.put(SETTINGS_DIRECTORY, (new Path(imageFileName) | |
.removeLastSegments(1).toString())); | |
super.okPressed(); | |
} | |
} |