package tool.editors.cdf;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.beans.BeansObservables;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
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.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wb.swt.ResourceManager;
import tool.model.ToolClass;
import tool.model.ToolComponent;
import tool.model.ToolType;
import tool.model.ToolVirtualAttribute;
import tool.model.validation.ToolNameValidator;
import tool.search.SelectType;
public class VirtualAttributeDialog extends TitleAreaDialog {
private DataBindingContext m_bindingContext;
private Text typeText;
private Text getExpressionText;
private Text text;
private ToolVirtualAttribute virtualAttribute;
protected PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(
this);
private Button btnCheckButton;
private Text nameText;
public void addPropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener);
}
public static int show(ToolVirtualAttribute attribute){
Shell shell = Display.getDefault().getActiveShell();
VirtualAttributeDialog dialog = new VirtualAttributeDialog(shell, attribute);
return dialog.open();
}
private VirtualAttributeDialog(Shell parentShell, ToolVirtualAttribute attribute) {
this(parentShell);
setTitleImage(ResourceManager.getPluginImage("Tool", "icons/private_virtual_attribute.gif"));
setTitle("Virtual Attribute");
this.virtualAttribute = attribute;
}
/**
* Create the dialog.
* @param parentShell
* @wbp.parser.constructor
*/
public VirtualAttributeDialog(Shell parentShell) {
super(parentShell);
}
/**
* Create contents of the dialog.
* @param parent
*/
@Override
protected Control createDialogArea(Composite parent) {
setTitleImage(ResourceManager.getPluginImage("Tool", "icons/private_virtual.gif"));
setTitle("Virtual Attribute");
Composite area = (Composite) super.createDialogArea(parent);
Composite container = new Composite(area, SWT.NONE);
GridLayout gl_container = new GridLayout(3, false);
gl_container.horizontalSpacing = 8;
container.setLayout(gl_container);
container.setLayoutData(new GridData(GridData.FILL_BOTH));
Label lblName = new Label(container, SWT.NONE);
lblName.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblName.setText("Name:");
nameText = new Text(container, SWT.BORDER);
nameText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
btnCheckButton = new Button(container, SWT.CHECK);
btnCheckButton.setBounds(0, 0, 85, 16);
btnCheckButton.setText("Public");
Label lblType = new Label(container, SWT.NONE);
lblType.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblType.setText("Type:");
typeText = new Text(container, SWT.BORDER);
typeText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Button findTypeButton = new Button(container, SWT.NONE);
findTypeButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
String typeName = getVirtualAttribute().getType();
ToolComponent myClass = (ToolComponent) getVirtualAttribute().getParent();
ToolComponent typeClass = ToolClass.fetch(myClass.getProject(), typeName);
ToolType newClass = (ToolType) SelectType.select(myClass, typeClass);
getVirtualAttribute().setType(newClass.getFullName());
}
});
findTypeButton.setImage(ResourceManager.getPluginImage("Tool", "icons/look_up.gif"));
findTypeButton.setToolTipText("Find Type");
Label lblGetExpression = new Label(container, SWT.NONE);
lblGetExpression.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false, false, 1, 1));
lblGetExpression.setText("Get Expression:");
getExpressionText = new Text(container, SWT.BORDER);
GridData gd_getExpressionText = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
gd_getExpressionText.heightHint = 85;
getExpressionText.setLayoutData(gd_getExpressionText);
Label lblSetExpression = new Label(container, SWT.NONE);
lblSetExpression.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false, false, 1, 1));
lblSetExpression.setText("Set Expression:");
text = new Text(container, SWT.BORDER);
GridData gd_text = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
gd_text.heightHint = 85;
text.setLayoutData(gd_text);
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
return area;
}
/**
* Create contents of the button bar.
* @param parent
*/
@Override
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,
true);
createButton(parent, IDialogConstants.CANCEL_ID,
IDialogConstants.CANCEL_LABEL, false);
m_bindingContext = initDataBindings();
}
/**
* Return the initial size of the dialog.
*/
@Override
protected Point getInitialSize() {
return new Point(457, 378);
}
public ToolVirtualAttribute getVirtualAttribute() {
return virtualAttribute;
}
public void setVirtualAttribute(ToolVirtualAttribute virtualAttribute) {
propertyChangeSupport.firePropertyChange("virtualAttribute",
this.virtualAttribute, this.virtualAttribute = virtualAttribute);
m_bindingContext = initDataBindings();
}
protected DataBindingContext initDataBindings() {
DataBindingContext bindingContext = new DataBindingContext();
//
IObservableValue btnCheckButtonObserveSelectionObserveWidget = SWTObservables.observeSelection(btnCheckButton);
IObservableValue virtualAttributePublicObserveValue = BeansObservables.observeValue(virtualAttribute, "public");
bindingContext.bindValue(btnCheckButtonObserveSelectionObserveWidget, virtualAttributePublicObserveValue, null, null);
//
IObservableValue typeTextObserveTextObserveWidget = SWTObservables.observeText(typeText, SWT.Modify);
IObservableValue virtualAttributeTypeObserveValue = BeansObservables.observeValue(virtualAttribute, "type");
bindingContext.bindValue(typeTextObserveTextObserveWidget, virtualAttributeTypeObserveValue, null, null);
//
IObservableValue getExpressionTextObserveTextObserveWidget = SWTObservables.observeText(getExpressionText, SWT.Modify);
IObservableValue virtualAttributeGetExpressionObserveValue = BeansObservables.observeValue(virtualAttribute, "getExpression");
bindingContext.bindValue(getExpressionTextObserveTextObserveWidget, virtualAttributeGetExpressionObserveValue, null, null);
//
IObservableValue textObserveTextObserveWidget = SWTObservables.observeText(text, SWT.Modify);
IObservableValue virtualAttributeSetExpressionObserveValue = BeansObservables.observeValue(virtualAttribute, "setExpression");
bindingContext.bindValue(textObserveTextObserveWidget, virtualAttributeSetExpressionObserveValue, null, null);
//
IObservableValue nameTextObserveTextObserveWidget = SWTObservables.observeText(nameText, SWT.Modify);
IObservableValue virtualAttributeNameObserveValue = BeansObservables.observeValue(virtualAttribute, "toolName");
UpdateValueStrategy strategy = new UpdateValueStrategy();
strategy.setAfterConvertValidator(new ToolNameValidator(nameText));
bindingContext.bindValue(nameTextObserveTextObserveWidget, virtualAttributeNameObserveValue, strategy, null);
//
return bindingContext;
}
}