package bluej.stride.operations;
import bluej.Config;
import bluej.stride.generic.Frame;
import bluej.stride.generic.InteractionManager;
import bluej.stride.slots.EditableSlot;
import threadchecker.OnThread;
import threadchecker.Tag;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.control.CustomMenuItem;
import java.util.Arrays;
import java.util.List;
| An operation to toggle boolean properties
|
| @author Amjad Altadmri
|
public class ToggleBooleanProperty
extends FrameOperation{
private String name;
private SimpleStringProperty label;
private final char key;
public ToggleBooleanProperty(InteractionManager editor, String identifier, String name, char key)
{
super(editor, identifier, Combine.ALL, null);
this.name = name;
this.label = new SimpleStringProperty(Config.getString("frame.operation.toggle").replace("$", name));
this.key = key;
}
| If all values of specific modifier in targeted frames true,
| make them false. Otherwise, make all true.
|
| @param frames targeted frames that will receive the operation
|
@Override
protected void execute(List<Frame> frames)
{
boolean targetedAllTrue = targetedAllTrue(frames);
frames.forEach(f -> f.setModifier(name, !targetedAllTrue));
}
@Override
public List getLabels()
{
return Arrays.asList(new ItemLabel(label, EditableSlot.MenuItemOrder.TOGGLE_BOOLEAN));
}
@Override
@OnThread(Tag.FXPlatform)
public void onMenuShowing(CustomMenuItem item)
{
super.onMenuShowing(item);
updateName();
}
@OnThread(Tag.FXPlatform)
private void updateName()
{
label.set(targetedAllTrue(editor.getSelection().getSelected()) ?
Config.getString("frame.operation.remove").replace("$", name) :
Config.getString("frame.operation.make").replace("$", name));
}
private boolean targetedAllTrue(List<Frame> frames)
{
return frames.stream().allMatch(f -> f.getModifier(name).get());
}
@Override
public boolean onlyOnContextMenu()
{
return true;
}
public String getLabel()
{
return label.get();
}
public char getKey()
{
return key;
}
}
top,
use,
map,
class ToggleBooleanProperty
. ToggleBooleanProperty
. execute
. getLabels
. onMenuShowing
. updateName
. targetedAllTrue
. onlyOnContextMenu
. getLabel
. getKey
97 neLoCode
+ 5 LoComm