package org.zend.php.zendserver.deployment.ui.editors;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.IMessageManager;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.zend.php.zendserver.deployment.core.descriptor.IModelContainer;
import org.zend.php.zendserver.deployment.core.internal.descriptor.Feature;
public class ListField extends TextField {
public ListField(IModelContainer target, Feature key, String label, IMessageManager mmng) {
super(target, key, label, mmng);
}
@Override
protected void createTextControl(Composite parent, FormToolkit toolkit) {
text = toolkit.createText(parent, "", SWT.MULTI|SWT.V_SCROLL|SWT.H_SCROLL|SWT.WRAP); //$NON-NLS-1$
GridData gd = new GridData(SWT.FILL, SWT.TOP, true, true);
gd.horizontalSpan = labelTxt != null ? 2 : 3;
gd.heightHint = 100;
text.setLayoutData(gd);
text.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
}
protected void createActions() {
text.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
if (isRefresh) {
return;
}
String text = ((Text)e.widget).getText();
String[] items = text.trim().length() == 0 ? new String[0] : text.split("\n"); //$NON-NLS-1$
if (target != null) {
List<Object> list = ((IModelContainer)target).getChildren(key);
for (int i = 0; i < Math.min(items.length, list.size()); i++) {
list.set(i, items[i]);
}
for (int i = list.size(); i < items.length; i++) {
list.add(items[i]);
}
for (int i = items.length; i < list.size(); i++) {
list.remove(items.length);
}
}
}
});
}
public void refresh() {
isRefresh = true;
try {
List<Object> value = target != null ? ((IModelContainer)target).getChildren(key) : null;
StringBuilder sb = new StringBuilder();
if (value != null) {
for (Object o : value) {
sb.append(o).append("\n"); //$NON-NLS-1$
}
}
text.setText(sb.toString());
} finally {
isRefresh = false;
}
}
}