package jp.ac.aiit.jointry.controllers; import jp.ac.aiit.jointry.models.blocks.statement.procedure.Costume; import jp.ac.aiit.jointry.models.blocks.statement.codeblock.If; import jp.ac.aiit.jointry.models.blocks.statement.codeblock.While; import jp.ac.aiit.jointry.models.blocks.statement.procedure.Rotate; import jp.ac.aiit.jointry.models.blocks.statement.procedure.Move; import java.net.URL; import java.util.ResourceBundle; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Separator; import javafx.scene.layout.VBox; import javafx.stage.Modality; import javafx.stage.Stage; import javafx.stage.StageStyle; import jp.ac.aiit.jointry.models.VariableLabel; import jp.ac.aiit.jointry.models.blocks.MenuItem; import jp.ac.aiit.jointry.models.blocks.MenuItemAdv; import jp.ac.aiit.jointry.models.blocks.expression.Condition; import jp.ac.aiit.jointry.models.blocks.expression.Rebound; import jp.ac.aiit.jointry.models.blocks.statement.procedure.Assign; import jp.ac.aiit.jointry.models.blocks.statement.procedure.Calculate; import jp.ac.aiit.jointry.models.blocks.statement.procedure.Continue; import jp.ac.aiit.jointry.models.blocks.statement.procedure.Flip; import jp.ac.aiit.jointry.models.blocks.statement.procedure.Sleep; import jp.ac.aiit.jointry.models.blocks.statement.procedure.Speech; import jp.ac.aiit.jointry.services.broker.app.BlockDialog; import static jp.ac.aiit.jointry.services.broker.app.JointryCommon.M_BLOCK_VARIABLE_CREATE; public class BlocksController implements Initializable { @FXML private VBox blockMenu; @FXML private VBox blockMenuAdv; @FXML private Button createVariable; private MainController mainController; @Override public void initialize(URL url, ResourceBundle rb) { blockMenu.getChildren().addAll( new MenuItem(Move.class), new Separator(), new MenuItem(Flip.class), new Separator(), new MenuItem(Rotate.class), new Separator(), new MenuItem(Costume.class), new Separator(), //new MenuItem(Rebound.class), //new Separator(), new MenuItem(Speech.class), new Separator(), new MenuItem(Assign.class), new Separator(), new MenuItem(Calculate.class), new Separator(), new MenuItem(Continue.class), new Separator(), new MenuItem(Sleep.class), new Separator(), new Separator(), new Separator(), new MenuItem(While.class), new Separator(), new MenuItem(If.class), new Separator()); blockMenuAdv.getChildren().addAll( new Separator(), new MenuItem(Rebound.class), new Separator(), new MenuItem(Condition.class), new Separator()); } public void setMainController(MainController controller) { this.mainController = controller; } @FXML protected void createVariable(ActionEvent event) throws Exception { FXMLLoader loader = new FXMLLoader(getClass().getResource("CreateVariable.fxml")); loader.load(); Parent root = loader.getRoot(); CreateVariableController controller = loader.getController(); Scene scene = new Scene(root); Stage dialog = new Stage(StageStyle.UTILITY); dialog.setScene(scene); dialog.initOwner(createVariable.getScene().getWindow()); dialog.initModality(Modality.WINDOW_MODAL); dialog.setResizable(false); dialog.setTitle("へんすうをつくる"); dialog.showAndWait(); // ダイアログが閉じるまでブロックされる switch (controller.getSelectedOption()) { case YES: String name = controller.getVariableName(); addVariable(name, true); break; } } public void addVariable(String name, boolean sendMessage) { for (Node node : blockMenuAdv.getChildrenUnmodifiable()) { if (node instanceof MenuItemAdv) { VariableLabel variable = ((MenuItemAdv) node).getVariableLabel(); if (variable.getName().equals(name)) { return; //既にある変数名 } } } // TODO: あとで考える VariableLabel vl = new VariableLabel(name, null); // this.mainController.getFrontStageController().addVariable(vl); blockMenuAdv.getChildren().add(new Separator()); MenuItemAdv menu = new MenuItemAdv(name); menu.addVariableLabel(vl); blockMenuAdv.getChildren().add(menu); if (sendMessage) { BlockDialog.sendMessage(M_BLOCK_VARIABLE_CREATE, name); } } }