blob: fe6f8f7659f08022494b170851b7eb72946ae5ff [file] [log] [blame]
/*******************************************************************************
* 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();
}
}
}