/**
*
*/
package cz.cuni.mff.peckam.java.origamist.modelstate.arguments;
import java.util.List;
import cz.cuni.mff.peckam.java.origamist.gui.editor.PickMode;
import cz.cuni.mff.peckam.java.origamist.gui.editor.StepEditor;
import cz.cuni.mff.peckam.java.origamist.modelstate.ModelSegment;
import cz.cuni.mff.peckam.java.origamist.utils.LocalizedString;
/**
* Argument for selecting layers.
*
* @author Martin Pecka
*/
public class LayersArgument extends OperationArgument implements EditorDataReceiver
{
/** The line defining the layer set. */
protected LineArgument defLine = null;
/** Selected layers. */
protected List<Integer> layers = null;
/**
* @param defLine The line defining the layer set.
* @param required If true, this argument is required.
* @param resourceBundleKey The key in "editor" resource bundle describing this operation argument.
*
* @throws NullPointerException If defLine is <code>null</code>.
*/
public LayersArgument(LineArgument defLine, boolean required, String resourceBundleKey) throws NullPointerException
{
super(required, resourceBundleKey);
if (defLine == null)
throw new NullPointerException("defLine cannot be null");
this.defLine = defLine;
}
@Override
public boolean isComplete()
{
return layers != null && layers.size() > 0;
}
/**
* @return True if the line defining the layer set is complete.
*/
public boolean isDefLineComplete()
{
return defLine.isComplete();
}
/**
* @return The layers.
*
* @throws IllegalStateException If {@link #isComplete()} is false.
*/
public List<Integer> getLayers() throws IllegalStateException
{
if (!isComplete())
throw new IllegalStateException("Cannot query properties of a non-completed argument.");
return layers;
}
/**
* @param layers The layers to set.
*/
public void setLayers(List<Integer> layers)
{
this.layers = layers;
}
/**
* @return A copy of the line defining the layer set.
*
* @throws IllegalStateException If the defLine hasn't been completed yet.
*/
public ModelSegment getDefSegment() throws IllegalStateException
{
return defLine.getLine().clone();
}
@Override
public PickMode preferredPickMode()
{
return PickMode.LAYER;
}
@Override
public void readDataFromObject(StepEditor editor)
{
if (editor.getChosenLayers() != null && editor.getChosenLayers().size() > 0)
this.layers = editor.getChosenLayers();
if (layers != null)
support.firePropertyChange(COMPLETE_PROPERTY, false, true);
}
@Override
public String getL7dUserTip()
{
return new LocalizedString(OperationArgument.class.getName(), "layer.user.tip").toString() + "<br/>"
+ super.getL7dUserTip();
}
}