/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 2013 Neil C Smith.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 3 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 3 for more details.
*
* You should have received a copy of the GNU General Public License version 3
* along with this work; if not, see http://www.gnu.org/licenses/
*
*
* Please visit http://neilcsmith.net if you need additional information or
* have any questions.
*/
package net.neilcsmith.praxis.live.pxr.editors;
import java.awt.Component;
import net.neilcsmith.praxis.core.Argument;
import net.neilcsmith.praxis.core.ArgumentFormatException;
import net.neilcsmith.praxis.core.ControlAddress;
import net.neilcsmith.praxis.core.info.ArgumentInfo;
import net.neilcsmith.praxis.core.types.PString;
import net.neilcsmith.praxis.live.properties.EditorSupport;
import net.neilcsmith.praxis.live.properties.PraxisProperty;
import org.openide.explorer.propertysheet.ExPropertyEditor;
import org.openide.explorer.propertysheet.PropertyEnv;
/**
*
* @author Neil C Smith <http://neilcsmith.net>
*/
public class ControlAddressEditor extends EditorSupport
implements ExPropertyEditor {
private PropertyEnv env;
private boolean allowEmpty;
ControlAddressEditor(PraxisProperty property, ArgumentInfo info) {
allowEmpty = info.getProperties().getBoolean(ArgumentInfo.KEY_ALLOW_EMPTY, false);
// property.setValue("canEditAsText", Boolean.FALSE);
}
@Override
public void setAsText(String text) throws IllegalArgumentException {
String val = text.trim();
if (val.isEmpty()) {
if (allowEmpty) {
setValue(PString.EMPTY);
} else {
throw new IllegalArgumentException("Property doesn't support empty value");
}
} else {
try {
setValue(ControlAddress.valueOf(val));
} catch (ArgumentFormatException ex) {
throw new IllegalArgumentException(ex);
}
}
}
private ControlAddress getAddress() {
try {
Argument arg = (Argument) getValue();
if (arg.isEmpty()) {
return null;
} else {
return ControlAddress.coerce(arg);
}
} catch (Exception ex) {
return null;
}
}
@Override
public String getPraxisInitializationString() {
ControlAddress address = getAddress();
if (address == null) {
return "{}";
} else {
return address.toString();
}
}
@Override
public void attachEnv(PropertyEnv env) {
this.env = env;
}
@Override
public boolean supportsCustomEditor() {
return env != null;
}
@Override
public Component getCustomEditor() {
return new ControlAddressCustomEditor(this, getAddress(), env);
}
public String getDisplayName() {
return "Control Address Editor";
}
}