/*******************************************************************************
* Copyright (c) 2004, 2010 BREDEX GmbH.
* 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:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.jubula.client.ui.dialogs;
import org.apache.commons.lang.StringUtils;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.databinding.observable.value.WritableValue;
import org.eclipse.core.databinding.validation.IValidator;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jubula.client.core.model.IPersistentObject;
import org.eclipse.jubula.client.ui.i18n.Messages;
import org.eclipse.jubula.client.ui.utils.LayoutUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
/**
* Dialog for entering the comment e.g for a test result summary.
*
* @author BREDEX GmbH
* @created Aug 23, 2010
*/
public class EnterCommentDialog extends AbstractValidatedDialog {
/**
* the validator used for validation of value correctness
*/
private IValidator m_validator;
/** observable (bindable) value for comment title */
private WritableValue m_commentTitle;
/**
* <code>m_initialTitle</code>
*/
private String m_initialTitle = null;
/**
* Constructor
*
* @param parentShell
* The Shell to use as a parent for the dialog.
* @param commentValidator
* The validator to use for the commentary values
* @param title
* the initial comment title
*/
public EnterCommentDialog(Shell parentShell, IValidator commentValidator,
String title) {
super(parentShell);
setValidator(commentValidator);
m_initialTitle = title;
}
/**
* {@inheritDoc}
*/
protected Control createDialogArea(Composite parent) {
setTitle(Messages.EnterCommentDialogTitle);
setMessage(Messages.EnterCommentDialogMessage);
getShell().setText(Messages.EnterCommentDialogTitle);
GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
Composite area = new Composite(parent, SWT.BORDER);
area.setLayoutData(gridData);
area.setLayout(new GridLayout(2, false));
createCommentTitleField(area);
createDialogAdditionalArea(area);
return area;
}
/**
* @param area the area to create some additional content on
*/
protected void createDialogAdditionalArea(Composite area) {
// currently empty
}
/**
* {@inheritDoc}
*/
protected Point getInitialSize() {
Point shellSize = super.getInitialSize();
return new Point(Math.max(
convertHorizontalDLUsToPixels(450), shellSize.x),
Math.max(convertVerticalDLUsToPixels(100),
shellSize.y));
}
/**
* {@inheritDoc}
*/
protected boolean isResizable() {
return true;
}
/**
* @param area the parent area
*/
private void createCommentTitleField(Composite area) {
GridData gridData;
Text commentTitleField = createCommentTitleText(area);
gridData = new GridData(SWT.FILL, SWT.FILL, true, false);
LayoutUtil.addToolTipAndMaxWidth(gridData, commentTitleField);
commentTitleField.setLayoutData(gridData);
IObservableValue commentTitleFieldText =
SWTObservables.observeText(commentTitleField, SWT.Modify);
m_commentTitle = WritableValue.withValueType(String.class);
getValidationContext().bindValue(
commentTitleFieldText,
m_commentTitle,
new UpdateValueStrategy().setAfterGetValidator(getValidator()),
new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE));
if (!StringUtils.isEmpty(m_initialTitle)) {
m_commentTitle.setValue(m_initialTitle);
}
LayoutUtil.setMaxChar(commentTitleField,
IPersistentObject.MAX_STRING_LENGTH);
commentTitleField.selectAll();
}
/**
* @param area The parent for the created widgets.
* @return the created text field.
*/
private Text createCommentTitleText(Composite area) {
new Label(area, SWT.NONE).setText(
Messages.EnterCommentDialogTitleLabel);
return new Text(area, SWT.SINGLE | SWT.BORDER);
}
/**
* This method must be called from the GUI thread.
*
* @return the comment title
*/
public String getCommentTitle() {
return (String)m_commentTitle.getValue();
}
/**
* @return the validator
*/
protected IValidator getValidator() {
return m_validator;
}
/**
* @param validator the validator to set
*/
private void setValidator(IValidator validator) {
m_validator = validator;
}
}