+package org.simantics.g3d.property;
+
+import java.util.List;
+
+public class ComboPropertyManipulator implements PropertyManipulator{
+
+ ComboValueProvider provider;
+ Object input;
+
+ boolean editMode;
+
+ public ComboPropertyManipulator(ValueProvider provider, Object input) {
+ this.provider = (ComboValueProvider)provider;
+ this.input = input;
+ }
+
+ @Override
+ public int getValueCount() {
+ return 1;
+ }
+
+ @Override
+ public String getDescription(int i) {
+ if (i == 0)
+ return "Value";
+ return null;
+ }
+
+ @Override
+ public String getValue(int i) {
+ try {
+ Integer value = (Integer)provider.getValue(input);
+ if (value == null) return null;
+ return getItems()[value];
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ @Override
+ public String setValue(String value, int i) {
+ try {
+ provider.setValue(input, Integer.parseInt(value));
+ } catch (Exception e) {
+ return e.getMessage();
+ }
+ return null;
+ }
+
+ @Override
+ public boolean getEditMode() {
+ return editMode;
+ }
+
+ @Override
+ public void setEditMode(boolean b) {
+ editMode = b;
+ }
+
+ public String[] getItems() {
+ try {
+ List<Object> vals = provider.getValues(input);
+ String arr[] = new String[vals.size()];
+ for (int i = 0; i < vals.size(); i++) {
+ arr[i] = vals.get(i).toString();
+ }
+ return arr;
+ } catch (Exception e) {
+ return new String[0];
+ }
+ }
+
+ public Integer getValueIndex() {
+ try {
+ Integer value = (Integer)provider.getValue(input);
+ return value;
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ public Integer indexOf(String value) {
+ String[] items = getItems();
+ for (int i = 0; i < items.length; i++)
+ if (items[i].equals(value))
+ return i;
+ return -1;
+ }
+}