| /******************************************************************************* |
| * Copyright (c) 2004, 2006 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 |
| * yyyymmdd bug Email and other contact information |
| * -------- -------- ----------------------------------------------------------- |
| * 20060418 136335 joan@ca.ibm.com - Joan Haggarty |
| * 20060418 136759 joan@ca.ibm.com - Joan Haggarty |
| * 20061106 142500 david.schneider@unisys.com - David Schneider |
| * 20060829 180833 ericdp@ca.ibm.com - Eric D. Peters, New Web Service wizard service settings dialog has unlabelled enabled text fields |
| *******************************************************************************/ |
| package org.eclipse.wst.command.internal.env.ui.widgets; |
| |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.jface.dialogs.IDialogConstants; |
| import org.eclipse.swt.SWT; |
| 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.Event; |
| import org.eclipse.swt.widgets.Listener; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.swt.widgets.Text; |
| |
| public abstract class SimpleDialog extends Dialog implements DialogDataEvents |
| { |
| private WidgetContributor widget_; |
| private WidgetDataEvents dataEvents_; |
| private Listener statusListener_; |
| protected WizardPageManager pageManager_; |
| private Text messageText_; |
| private boolean ok_; |
| |
| public SimpleDialog( Shell shell, PageInfo pageInfo) |
| { |
| super(shell); |
| widget_ = pageInfo.getWidgetFactory().create(); |
| statusListener_ = new StatusListener(); |
| } |
| |
| Composite parent_; |
| public Control createDialogArea( Composite parent ) |
| { |
| parent_ = parent; |
| Composite control = (Composite) super.createDialogArea(parent); |
| dataEvents_ = widget_.addControls( control, statusListener_ ); |
| |
| //Text area to display validation messages |
| messageText_ = new Text(parent, SWT.WRAP | SWT.MULTI | SWT.READ_ONLY); |
| messageText_.setBackground(parent.getBackground()); |
| GridData griddata = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL); |
| griddata.horizontalIndent = 10; |
| messageText_.setLayoutData( griddata ); |
| parent_.setFocus(); |
| |
| //Call extenders override of the callSetters method to intialize any data in widget |
| callSetters(); |
| Dialog.applyDialogFont(parent); |
| return control; |
| } |
| |
| //Override of Dialog.createContents so we can affect button enablement |
| protected Control createContents(Composite parent) { |
| Control c = super.createContents(parent); |
| //enable controls for initial entry to dialog |
| validatePageToStatus(); |
| return c; |
| } |
| |
| // Enable or disable ok button based on state |
| private void enableOk(boolean state) |
| { |
| Button okButton = getButton(IDialogConstants.OK_ID); |
| if (okButton != null) |
| okButton.setEnabled(state); |
| } |
| |
| //Implement this method to call all setters on the dialog widget after the controls are created |
| protected abstract void callSetters(); |
| |
| public WidgetDataEvents getDataEvents() |
| { |
| return dataEvents_; |
| } |
| |
| protected WidgetContributor getWidget() |
| { |
| return widget_; |
| } |
| |
| // sets message in message area above OK and Cancel buttons |
| private void setMessage(String message) |
| { |
| if (message == null) |
| messageText_.setText(""); |
| else |
| messageText_.setText(message); |
| // force a resize of the parent composite and wrap of the text field if necessary |
| parent_.layout(); |
| } |
| |
| |
| |
| public void validatePageToStatus() |
| { |
| IStatus status = widget_.getStatus(); |
| |
| if( status != null ) |
| { |
| String message = status.getMessage(); |
| int severity = status.getSeverity(); |
| |
| // for error condition, disable ok and print message |
| if( severity == IStatus.ERROR ) |
| { |
| if( message.length() == 0 ) |
| { |
| setMessage( null); |
| } |
| else |
| { |
| setMessage(message); |
| } |
| ok_ = false; |
| } |
| // display warning and info messages but still enable OK |
| else if (severity == IStatus.WARNING | severity == IStatus.INFO) |
| { |
| setMessage(message); |
| ok_ = true; |
| } |
| // no message to display |
| else |
| { |
| setMessage( null); |
| ok_ = true; |
| } |
| } |
| // null status case |
| else |
| { |
| setMessage(null); |
| ok_ = true; |
| } |
| |
| enableOk(ok_); |
| } |
| |
| private class StatusListener implements Listener |
| { |
| public void handleEvent( Event evt ) |
| { |
| validatePageToStatus(); |
| } |
| } |
| } |
| |