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