/******************************************************************************* * 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 v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * 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(); } }