package bluej.editor.stride;

import java.util.ArrayList;
import java.util.List;
import javafx.beans.binding.StringExpression;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuItem;
import javafx.scene.control.SeparatorMenuItem;

import bluej.compiler.CompileReason;
import bluej.compiler.CompileType;
import bluej.Config;
import bluej.utility.javafx.JavaFXUtil;
import threadchecker.OnThread;
import threadchecker.Tag;


| Created by neil on 26/11/15. | public abstract class TabMenuManager { protected final FXTab tab; private final MenuItem contextMoveNew; private final Menu contextMoveMenu; protected final Menu mainMoveMenu; private final MenuItem mainMoveNew; @OnThread(Tag.FXPlatform) public TabMenuManager(FXTab tab) { this.tab = tab; contextMoveMenu = JavaFXUtil.makeMenu(Config.getString("frame.classmenu.move")); contextMoveNew = JavaFXUtil.makeMenuItem(Config.getString("frame.classmenu.move.new"), () -> tab.getParent().moveToNewLater(tab), null); mainMoveNew = JavaFXUtil.makeMenuItem(Config.getString("frame.classmenu.move.new"), () -> tab.getParent().moveToNewLater(tab), null); mainMoveMenu = JavaFXUtil.makeMenu(Config.getString("frame.classmenu.move")); JavaFXUtil.runAfterCurrent(() -> { if (tab.getParent() != null) updateMoveMenus(); tab.setContextMenu(new ContextMenu( contextMoveMenu , JavaFXUtil.makeMenuItem(Config.getString("frame.classmenu.close"), () -> tab.getParent().close(tab), null) )); if (tab instanceof FrameEditorTab) tab.getContextMenu().getItems().add(JavaFXUtil.makeMenuItem(Config.getString("frame.classmenu.compile"), () -> ((FrameEditorTab)tab).getFrameEditor().getWatcher().scheduleCompilation(true, CompileReason.USER, CompileType.EXPLICIT_USER_COMPILE) , null )); if (tab instanceof MoeFXTab) tab.getContextMenu().getItems().add(JavaFXUtil.makeMenuItem(Config.getString("frame.classmenu.compile"), () -> ((MoeFXTab)tab).getMoeEditor().getWatcher().scheduleCompilation(true, CompileReason.USER, CompileType.EXPLICIT_USER_COMPILE) , null )); }); } @OnThread(Tag.FXPlatform) protected void updateMoveMenus() { ArrayList<MenuItem> classMoveItems = new ArrayList<>(); ArrayList<MenuItem> contextMoveItems = new ArrayList<>(); classMoveItems.add(mainMoveNew); contextMoveItems.add(contextMoveNew); mainMoveNew.setDisable(tab.getParent().hasOneTab()); contextMoveNew.setDisable(tab.getParent().hasOneTab()); List<FXTabbedEditor> allWindows = tab.getParent().getProject().getAllFXTabbedEditorWindows(); if (allWindows.size() > 1) { classMoveItems.add(new SeparatorMenuItem()); contextMoveItems.add(new SeparatorMenuItem()); allWindows.stream().filter(w -> w != tab.getParent()).forEach(w -> { StringExpression itemText = new ReadOnlyStringWrapper(Config.getString("frame.classmenu.move.existing") + ": ").concat(w.titleProperty()); contextMoveItems.add(JavaFXUtil.makeMenuItem(itemText, () -> tab.getParent().moveTabTo(tab, w), null)); classMoveItems.add(JavaFXUtil.makeMenuItem(itemText, () -> tab.getParent().moveTabTo(tab, w), null)); }); } if (mainMoveMenu != null) { mainMoveMenu.getItems().setAll(classMoveItems); } if (contextMoveMenu != null) { contextMoveMenu.getItems().setAll(contextMoveItems); } } @OnThread(Tag.FXPlatform) abstract List getMenus(); }
top, use, map, abstract class TabMenuManager

.   TabMenuManager
.   updateMoveMenus
.   getMenus




105 neLoCode + 1 LoComm