Java tutorial
/* * $Id$ * * Copyright (c) 2004-2005 by the TeXlapse Team. * 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 */ package net.sourceforge.texlipse.actions; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IInputValidator; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.graphics.Image; 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.Shell; import org.eclipse.swt.widgets.Text; /** * A simple dialog window with "ok" and "cancel" -buttons, * a label and a text field. * * This is almost like org.eclipse.jface.dialogs.InputDialog, but * this version has an image and creation-time-settable button texts. * * The value of the textfield can be queried after the dialog has been closed. * * @author Kimmo Karlsson */ public class InputQueryDialog extends MessageDialog { // the value of the textfield. null in the beginning, // non-null after the user types something private String input; // the text field in the dialog window private Text field; // a flag indicating the button that was pressed in the dialog. // true means ok-button, false means cancel private boolean okPressed = false; // the initial value of the textfield private String initialText; private IInputValidator validator; /** * Does the same as super(). * @see MessageDialog#MessageDialog(org.eclipse.swt.widgets.Shell, java.lang.String, org.eclipse.swt.graphics.Image, java.lang.String, int, java.lang.String[], int) */ public InputQueryDialog(Shell parentShell, String dialogTitle, Image dialogTitleImage, String dialogMessage, int dialogImageType, String[] dialogButtonLabels, int defaultIndex) { super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, dialogButtonLabels, defaultIndex); } /** * Same kind of constructor as in InputDialog. * This class just doesn't create extra components. * * @param title dialog title * @param message dialog message * @param def default text for the textfield * @param vali validator for the text */ public InputQueryDialog(Shell shell, String title, String message, String def, IInputValidator vali) { super(shell, title, null, message, QUESTION, new String[] { IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL }, 0); initialText = def; input = def; validator = vali; } /** * Creates and returns the contents of an area of the dialog which appears * below the message and above the button bar. * <p> * The default implementation of this framework method returns * <code>null</code>. Subclasses may override. * </p> * * @param parent * parent composite to contain the custom area * @return the custom area control, or <code>null</code> */ protected Control createCustomArea(Composite parent) { // create the top level composite for the dialog area Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 1; composite.setLayout(layout); GridData data = new GridData(GridData.FILL_BOTH); composite.setLayoutData(data); field = new Text(composite, SWT.SINGLE | SWT.BORDER); if (initialText != null) { field.setText(initialText); field.setSelection(0, initialText.length()); } field.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); field.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if (validator != null) { input = field.getText(); if (input != null) { input = input.trim(); } String error = validator.isValid(input); Button ok = getButton(IDialogConstants.OK_ID); ok.setEnabled(error == null); } else { input = field.getText(); } } }); return composite; } /** * Sets a validator for the dialog input. * @param validator input validator */ public void setValidator(IInputValidator validator) { this.validator = validator; } /** * Returns the text of the text field. Recommended to call after * the dialog has been closed. * * @return the text from the text field, or null * if the user hasn't typed anything yet */ public String getInput() { return input; } /** * Convenience method to open a simple "enter text" dialog. * * @param title dialog title * @param message dialog message * @param okText text for the ok-button * @param cancelText text for the cancel-button * @return query dialog */ public static InputQueryDialog createQuery(String title, String message, String okText, String cancelText) { return new InputQueryDialog(new Shell(), title, null, // accept the default window icon message, QUESTION, new String[] { okText, cancelText }, 0); // OK is the default } /** * Convenience method to open a simple "enter text" dialog. * This version uses the workbench default "ok" and "cancel" labels * as button texts. * * @param title dialog title * @param message dialog message * @return query dialog */ public static InputQueryDialog createQuery(String title, String message) { return createQuery(title, message, IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL); } }