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
top,
use,
map,
abstract class TabMenuManager
. TabMenuManager
. updateMoveMenus
. getMenus
105 neLoCode
+ 1 LoComm