blob: 40ec8c217deee2898d83f56effb70d56d05805b0 [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2018 Fondazione Bruno Kessler.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* Alberto Debiasi - initial API and implementation
******************************************************************************/
package org.polarsys.chess.paramArchConfigurator.ui.dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.widgets.Text;
import eu.fbk.tools.editor.contract.expression.validation.ProposalProvider.VariableType;
public class ConfigParameter {
static String[] boolValues = { "true", "false" };
private String fullName;
private VariableType type;
private String[] permittedValues;
private String value;
private VerifyListener verifyListener;
public ConfigParameter(String fullName, VariableType type) {
super();
this.fullName = fullName;
this.type = type;
if (type == VariableType.BOOLEAN) {
this.permittedValues = boolValues;
} else if (type == VariableType.INTEGER) {
this.verifyListener = new IntegerVerifyListener();
} else if (type == VariableType.REAL) {
this.verifyListener = new RealVerifyListener();
}
}
public ConfigParameter(String fullName, VariableType type, String[] permittedValues) {
this(fullName, type);
this.permittedValues = permittedValues;
}
public String getFullName() {
return fullName;
}
public VariableType getType() {
return type;
}
public String getValue() {
return value;
}
public String[] getPermittedValues() {
return permittedValues;
}
public VerifyListener getVerifyListener() {
return verifyListener;
}
class IntegerVerifyListener implements VerifyListener {
@Override
public void verifyText(VerifyEvent e) {
// allows cut (CTRL + x)
if (e.text.isEmpty()) {
e.doit = true;
} else if (e.keyCode == SWT.ARROW_LEFT || e.keyCode == SWT.ARROW_RIGHT || e.keyCode == SWT.BS
|| e.keyCode == SWT.DEL || e.keyCode == SWT.CTRL || e.keyCode == SWT.SHIFT) {
e.doit = true;
} else {
boolean allow = false;
for (int i = 0; i < e.text.length(); i++) {
char c = e.text.charAt(i);
allow = Character.isDigit(c);// ||
// Character.isWhitespace(c);
if (!allow) {
break;
}
}
e.doit = allow;
}
}
}
class RealVerifyListener implements VerifyListener {
@Override
public void verifyText(VerifyEvent e) {
// allows cut (CTRL + x)
if (e.text.isEmpty()) {
e.doit = true;
} else if (e.keyCode == SWT.ARROW_LEFT || e.keyCode == SWT.ARROW_RIGHT || e.keyCode == SWT.BS
|| e.keyCode == SWT.DEL || e.keyCode == SWT.CTRL || e.keyCode == SWT.SHIFT) {
e.doit = true;
} else {
boolean allow = false;
for (int i = 0; i < e.text.length(); i++) {
char c = e.text.charAt(i);
allow = (Character.isDigit(c)
|| ((c == '.') && (e.start != 0) && (dotIsAllowed(((Text) e.getSource()).getText()))));
if (!allow) {
break;
}
}
e.doit = allow;
}
}
private boolean dotIsAllowed(String text) {
return (text.length() > 1) && !text.contains(".");
// (StringUtils.countMatches(text, ".") <= 1);
}
}
}