package rocks.inspectit.ui.rcp.ci.wizard.page;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Text;
/**
* Wizard page for defining name and description. Can be used in multiple wizards.
*
* @author Ivan Senic, Alexander Wert
*
*/
public class DefineNameAndDescriptionWizardPage extends WizardPage {
/**
* Default message.
*/
private final String defaultMessage;
/**
* Name box.
*/
private Text nameBox;
/**
* Description box.
*/
private Text descriptionBox;
/**
* The initial value for the name.
*/
private String initialName;
/**
* The initial value for the description.
*/
private String initialDescription;
/**
* Main Composite.
*/
protected Composite main;
/**
* Default constructor.
*
* @param title
* Title of the page.
* @param defaultMessage
* Default message for the page.
*/
public DefineNameAndDescriptionWizardPage(String title, String defaultMessage) {
super(title);
setTitle(title);
setMessage(defaultMessage);
this.defaultMessage = defaultMessage;
}
/**
* Default constructor.
*
* @param title
* Title of the page.
* @param defaultMessage
* Default message for the page.
* @param initialName
* initial name
* @param initialDescription
* description
*/
public DefineNameAndDescriptionWizardPage(String title, String defaultMessage, String initialName, String initialDescription) {
super(title);
this.initialName = initialName;
this.initialDescription = initialDescription;
setTitle(title);
setMessage(defaultMessage);
this.defaultMessage = defaultMessage;
}
/**
* {@inheritDoc}
*/
@Override
public void createControl(Composite parent) {
main = new Composite(parent, SWT.NONE);
main.setLayout(new GridLayout(2, false));
Label nameLabel = new Label(main, SWT.LEFT);
nameLabel.setText("Name:");
nameBox = new Text(main, SWT.BORDER);
nameBox.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
if (null != initialName) {
nameBox.setText(initialName);
}
Label descLabel = new Label(main, SWT.LEFT);
descLabel.setText("Description:");
descLabel.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));
descriptionBox = new Text(main, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.WRAP);
descriptionBox.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
if (null != initialDescription) {
descriptionBox.setText(initialDescription);
}
Listener pageCompletionListener = new Listener() {
@Override
public void handleEvent(Event event) {
setPageComplete(isPageComplete());
setPageMessage();
}
};
nameBox.addListener(SWT.Modify, pageCompletionListener);
setControl(main);
}
/**
* {@inheritDoc}
*/
@Override
public boolean isPageComplete() {
return !nameBox.getText().isEmpty();
}
/**
* Sets the message based on the page selections.
*/
protected void setPageMessage() {
if (nameBox.getText().isEmpty()) {
setMessage("No value for the name entered", ERROR);
return;
}
setMessage(defaultMessage);
}
/**
* @return Returns defined name.
*/
@Override
public String getName() {
return nameBox.getText();
}
/**
* @return Returns defined description.
*/
@Override
public String getDescription() {
return descriptionBox.getText();
}
}