blob: e61f89af52796788e46f50d7c5501f694be2e645 [file] [log] [blame]
/**
* Copyright (c) 2019 CEA.
* 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:
* CEA - initial API and implementation and/or initial documentation
*/
package org.eclipse.sensinact.studio.navigator.device.ui.dialogs.resourceInvoker.parameterfield;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
/**
* @author Etienne Gandrille
*/
public abstract class ParameterField {
// graphic
private Label namelabel;
private Control widget;
private Label typeLabel;
// model
private String name;
private String value;
public static ParameterField create(Composite composite, String name, String type) {
if (NumberField.getAcceptedTypes().contains(type))
return new NumberField(composite, name, type);
if (TextField.getAcceptedTypes().contains(type))
return new TextField(composite, name, type);
if (BooleanField.getAcceptedTypes().contains(type))
return new BooleanField(composite, name, type);
throw new RuntimeException("No field available to display variable " + name + " of type " + type);
}
protected ParameterField(Composite composite, String name, String type, String defaultValue) {
this.namelabel = createNameLabel(composite, name);
this.widget = createWidget(composite, name);
this.typeLabel = createTypeLabel(composite, type);
this.name = name;
this.value = defaultValue;
}
private static Label createNameLabel(Composite composite, String name) {
Label label = new Label(composite, SWT.NONE);
label.setText(name + ":");
return label;
}
protected abstract Control createWidget(Composite parameterListComposite, final String name);
private static Label createTypeLabel(Composite parameterListComposite, String type) {
Label typeLabel = new Label(parameterListComposite, SWT.NONE);
typeLabel.setText(type);
typeLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
return typeLabel;
}
protected void setValue(String value) {
this.value = value;
}
public String getName() {
return name;
}
public String getValue() {
return value;
}
}