package org.zend.php.zendserver.deployment.ui.editors;
import org.eclipse.jface.fieldassist.ControlDecoration;
import org.eclipse.jface.fieldassist.FieldDecoration;
import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.ui.forms.widgets.FormToolkit;
import org.zend.php.zendserver.deployment.core.descriptor.IModelObject;
import org.zend.php.zendserver.deployment.core.internal.descriptor.Feature;
import org.zend.php.zendserver.deployment.core.internal.validation.ValidationStatus;
import org.zend.php.zendserver.deployment.ui.editors.DescriptorEditorPage.FormDecoration;
public class CheckboxField implements EditorField {
protected Button control;
protected String labelTxt;
protected IModelObject target;
protected Feature key;
protected boolean isRefresh;
protected ControlDecoration controlDecoration;
public CheckboxField(IModelObject target,Feature key, String label) {
this.target = target;
this.key = key;
this.labelTxt = label;
}
public Feature getKey() {
return key;
}
public void refresh() {
isRefresh = true;
try {
String value = target != null ? target.get(key) : null;
control.setSelection(value != null && Boolean.parseBoolean(value));
} finally {
isRefresh = false;
}
}
public void create(Composite parent, FormToolkit toolkit) {
createControls(parent, toolkit);
createActions();
}
protected void createControls(Composite parent, FormToolkit toolkit) {
control = toolkit.createButton(parent, labelTxt, SWT.CHECK);
GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
gd.horizontalSpan = 2;
control.setLayoutData(gd);
controlDecoration = new ControlDecoration(control, SWT.LEFT);
}
public void setErrorMessage(String message) {
if (message == null) {
controlDecoration.hide();
return;
}
FieldDecoration img = FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_ERROR);
controlDecoration.setImage(img.getImage());
controlDecoration.setDescriptionText(message);
controlDecoration.show();
}
public void setWarningMessage(String message) {
if (message == null) {
controlDecoration.hide();
return;
}
FieldDecoration img = FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_WARNING);
controlDecoration.setImage(img.getImage());
controlDecoration.setDescriptionText(message);
controlDecoration.show();
}
protected void createActions() {
control.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if (isRefresh) {
return;
}
if (target != null) {
target.set(key, ((Button)e.widget).getSelection());
}
}
});
}
public void dispose() {
}
public void setFocus() {
control.setFocus();
}
public void setInput(IModelObject input) {
target = input;
}
public Button getButton() {
return control;
}
public void setVisible(boolean visible) {
control.setVisible(visible);
((GridData)control.getLayoutData()).exclude = visible;
}
public Control getText() {
return control;
}
public void setDecoration(FormDecoration value) {
if (value == null) {
setErrorMessage(null);
} else {
switch (value.severity) {
case (ValidationStatus.ERROR):
setErrorMessage(value.message);
break;
case (ValidationStatus.WARNING):
setWarningMessage(value.message);
break;
}
}
}
}