/******************************************************************************* * Copyright (c) 2009 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 *******************************************************************************/ //------------------------------------------------------------------------------ // 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 Corporation - initial implementation //------------------------------------------------------------------------------ package org.eclipse.epf.richtext.dialogs; import java.io.File; import org.eclipse.epf.richtext.RichTextResources; import org.eclipse.epf.richtext.html.Image; 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.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.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; /** * Prompts the user to specify the image that will be used to create a HTML * <image> tag in the rich text editor. * * @author Kelvin Low * @since 1.0 */ public class AddImageDialog extends BaseDialog { protected Image image = new Image(); protected Text urlText; protected Button browseButton; protected SelectionAdapter browseSelectionAdapter = new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { FileDialog dialog = new FileDialog(Display.getCurrent() .getActiveShell(), SWT.OPEN); dialog .setFilterExtensions(new String[] { "*.gif", "*.jpg", "*.bmp" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ String imageFile = dialog.open(); if (imageFile != null && imageFile.length() > 0) { File file = new File(imageFile); try { String url = file.toURL().toExternalForm(); urlText.setText(url); } catch (Exception e) { logger.logError(e); } } } }; protected ModifyListener urlTextListener = new ModifyListener() { public void modifyText(ModifyEvent e) { if (okButton != null) { okButton.setEnabled(urlText.getText().trim().length() > 0); } } }; /** * Creates a new instance. * * @param parent * the parent shell */ public AddImageDialog(Shell parent) { super(parent); } @Override protected Control createDialogArea(Composite parent) { Composite composite = (Composite) super.createDialogArea(parent); GridLayout layout = (GridLayout) composite.getLayout(); layout.numColumns = 3; Label urlLabel = new Label(composite, SWT.NONE); urlLabel.setText(RichTextResources.urlLabel_text); urlText = new Text(composite, SWT.BORDER); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.widthHint = 300; urlText.setLayoutData(gridData); urlText.addModifyListener(urlTextListener); browseButton = new Button(composite, SWT.NONE); browseButton.setText(RichTextResources.browseButton_text); browseButton.addSelectionListener(browseSelectionAdapter); super.getShell().setText(RichTextResources.addImageDialog_title); return composite; } @Override protected void createButtonsForButtonBar(Composite parent) { super.createButtonsForButtonBar(parent); okButton.setEnabled(false); } @Override protected void okPressed() { String url = urlText.getText(); if (url != null && url.length() > 0) { image.setURL(url); } super.okPressed(); } /** * Gets the user specified image. * * @return an <code>Image</code> object */ public Image getImage() { return image; } }