| /******************************************************************************* |
| * Copyright (c) 2010 University of Illinois. 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: |
| * Albert L. Rossi (NCSA) - design and implementation |
| * added readOnly option 05/11/2010 |
| * - modified (09/14/2010) to use non-nls interface |
| ******************************************************************************/ |
| package org.eclipse.ptp.rm.jaxb.ui.dialogs; |
| |
| import org.eclipse.jface.dialogs.IDialogConstants; |
| import org.eclipse.jface.dialogs.MessageDialog; |
| import org.eclipse.ptp.rm.jaxb.ui.IJAXBUINonNLSConstants; |
| import org.eclipse.ptp.rm.jaxb.ui.messages.Messages; |
| import org.eclipse.ptp.rm.jaxb.ui.util.WidgetBuilderUtils; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.swt.widgets.Text; |
| |
| /** |
| * Displays text contents for editing/saving. Note: the font hint used is |
| * Courier, which should be available on Mac, Windows and Linux platforms. More |
| * lightweight than a full-blown text editor. |
| * |
| * @author arossi |
| */ |
| public class ScrollingEditableMessageDialog extends MessageDialog implements IJAXBUINonNLSConstants { |
| public static final int DEFAULT_INDEX = 0; |
| public static final String[] DEFAULT_LABELS = { Messages.DialogClose }; |
| |
| protected Button okButton; |
| protected boolean readOnly; |
| protected Text scrollable; |
| protected String title; |
| protected String value; |
| |
| /** |
| * @param parentShell |
| * @param name |
| * message label for text |
| * @param value |
| * initial text value |
| */ |
| public ScrollingEditableMessageDialog(Shell parentShell, String name, String value) { |
| this(parentShell, name, value, false); |
| } |
| |
| /** |
| * @param parentShell |
| * @param name |
| * message label for text |
| * @param value |
| * initial text value |
| * @param readOnly |
| * if the text box if read only |
| */ |
| public ScrollingEditableMessageDialog(Shell parentShell, String name, String value, boolean readOnly) { |
| this(parentShell, name, value, name, null, MessageDialog.NONE, DEFAULT_LABELS, DEFAULT_INDEX); |
| this.readOnly = readOnly; |
| } |
| |
| /** |
| * @param parentShell |
| * @param name |
| * message label for text |
| * @param value |
| * initial text value |
| * @param dialogTitle |
| * @param dialogTitleImage |
| * @param dialogImageType |
| * @param dialogButtonLabels |
| * @param defaultIndex |
| */ |
| public ScrollingEditableMessageDialog(Shell parentShell, String name, String value, String dialogTitle, Image dialogTitleImage, |
| int dialogImageType, String[] dialogButtonLabels, int defaultIndex) { |
| super(parentShell, dialogTitle, dialogTitleImage, name, dialogImageType, dialogButtonLabels, defaultIndex); |
| this.value = value; |
| readOnly = false; |
| } |
| |
| /** |
| * The entered value. |
| */ |
| public String getValue() { |
| return value; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.dialogs.MessageDialog#open() |
| */ |
| @Override |
| public int open() { |
| createDialogArea(getParentShell()); |
| return super.open(); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.dialogs.MessageDialog#buttonPressed(int) |
| */ |
| @Override |
| protected void buttonPressed(int buttonId) { |
| if (buttonId == IDialogConstants.OK_ID) { |
| value = scrollable.getText(); |
| } else { |
| value = null; |
| } |
| super.buttonPressed(buttonId); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see |
| * org.eclipse.jface.dialogs.MessageDialog#configureShell(org.eclipse.swt |
| * .widgets.Shell) |
| */ |
| @Override |
| protected void configureShell(Shell shell) { |
| super.configureShell(shell); |
| if (title != null) { |
| shell.setText(title); |
| } |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see |
| * org.eclipse.jface.dialogs.MessageDialog#createButtonsForButtonBar(org |
| * .eclipse.swt.widgets.Composite) |
| */ |
| @Override |
| protected void createButtonsForButtonBar(Composite parent) { |
| // create OK and Cancel buttons by default |
| okButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); |
| createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); |
| // do this here because setting the text will also set enablement on the |
| // OK button |
| scrollable.setFocus(); |
| if (value != null) { |
| scrollable.setText(value); |
| scrollable.selectAll(); |
| } |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see |
| * org.eclipse.jface.dialogs.MessageDialog#createDialogArea(org.eclipse. |
| * swt.widgets.Composite) |
| */ |
| @Override |
| protected Control createDialogArea(Composite parent) { |
| Control c = super.createDialogArea(parent); |
| GridData data = WidgetBuilderUtils.createGridDataFill(convertWidthInCharsToPixels(160), 550, 1); |
| scrollable = WidgetBuilderUtils.createText(parent, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.H_SCROLL | SWT.V_SCROLL, data, |
| readOnly, null); |
| WidgetBuilderUtils.applyMonospace(scrollable); |
| return c; |
| } |
| } |