package bluej.editor.stride;
import bluej.Config;
import bluej.prefmgr.PrefMgr;
import bluej.stride.generic.Frame;
import bluej.stride.generic.Frame.View;
import bluej.stride.slots.EditableSlot;
import bluej.stride.slots.EditableSlot.MenuItemOrder;
import bluej.stride.slots.EditableSlot.SortedMenuItem;
import bluej.utility.DialogManager;
import bluej.utility.Utility;
import bluej.utility.javafx.FXPlatformConsumer;
import bluej.utility.javafx.FXRunnable;
import bluej.utility.javafx.JavaFXUtil;
import javafx.beans.binding.StringBinding;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.print.PrinterJob;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuItem;
import javafx.scene.control.SeparatorMenuItem;
import javafx.scene.input.KeyCharacterCombination;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import threadchecker.OnThread;
import threadchecker.Tag;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
| A class to manage the menus for a frame editor.
|
class FrameMenuManager
extends TabMenuManager{
private final FrameEditorTab editor;
private final List<SortedMenuItem> defaultEditItems;
private final ObservableList<SortedMenuItem> contextualEditItems = FXCollections.observableArrayList();
private final ObservableList<SortedMenuItem> extraViewItems = FXCollections.observableArrayList();
private FXRunnable unbindEditItems;
private FXRunnable unbindViewItems;
private EditableSlot.MenuItems editMenuListener;
private EditableSlot.MenuItems viewMenuListener;
private List<Menu> menus = null;
private final BooleanProperty javaPreviewShowing;
FrameMenuManager(FrameEditorTab editor)
{
super(editor);
this.editor = editor;
this.javaPreviewShowing = new SimpleBooleanProperty(editor.getView() == View.JAVA_PREVIEW);
JavaFXUtil.addChangeListener(javaPreviewShowing, b -> {
if (b) JavaFXUtil.runNowOrLater(() -> editor.enableJavaPreview(Frame.ViewChangeReason.MENU_OR_SHORTCUT));
else{ JavaFXUtil.runNowOrLater(() -> editor.disableJavaPreview(Frame.ViewChangeReason.MENU_OR_SHORTCUT));
}
});
defaultEditItems = Arrays.asList(
MenuItemOrder.UNDO.item(JavaFXUtil.makeMenuItem(Config.getString("editor.undoLabel"), editor::undo, new KeyCodeCombination(KeyCode.Z, KeyCodeCombination.SHORTCUT_DOWN))),
MenuItemOrder.REDO.item(JavaFXUtil.makeMenuItem(Config.getString("editor.redoLabel"), editor::redo, Config.isMacOS() ? new KeyCodeCombination(KeyCode.Z, KeyCodeCombination.SHORTCUT_DOWN, KeyCodeCombination.SHIFT_DOWN) : new KeyCodeCombination(KeyCode.Y, KeyCodeCombination.SHORTCUT_DOWN))),
MenuItemOrder.CUT.item(JavaFXUtil.makeDisabledMenuItem(Config.getString("editor.cutLabel"), new KeyCodeCombination(KeyCode.X, KeyCodeCombination.SHORTCUT_DOWN))),
MenuItemOrder.COPY.item(JavaFXUtil.makeDisabledMenuItem(Config.getString("editor.copyLabel"), new KeyCodeCombination(KeyCode.C, KeyCodeCombination.SHORTCUT_DOWN))),
MenuItemOrder.PASTE.item(JavaFXUtil.makeDisabledMenuItem(Config.getString("editor.pasteLabel"), new KeyCodeCombination(KeyCode.V, KeyCodeCombination.SHORTCUT_DOWN)))
);
}
p.public void notifyView(View v)
{
javaPreviewShowing.set(v == View.JAVA_PREVIEW);
}
@OnThread(Tag.FXPlatform)
List<Menu> getMenus()
{
if (menus == null)
{
Menu editMenu = JavaFXUtil.makeMenu(Config.getString("frame.editmenu.title"));
JavaFXUtil.bindList(editMenu.getItems(), SortedMenuItem.sortAndAddDividers(contextualEditItems, defaultEditItems));
editMenu.setOnShowing(e -> Utility.ifNotNull(editMenuListener, EditableSlot.MenuItems::onShowing));
editMenu.setOnHidden(e -> Utility.ifNotNull(editMenuListener, EditableSlot.MenuItems::onHidden));
MenuItem birdsEyeItem = JavaFXUtil.makeMenuItem("", editor::enableCycleBirdseyeView, new KeyCharacterCombination("d", KeyCombination.SHORTCUT_DOWN));
birdsEyeItem.textProperty().bind(new StringBinding()
{ {super.bind(editor.viewProperty());
}
@Override
protected String computeValue()
{
switch (editor.viewProperty().get())
{
case BIRDSEYE_NODOC: return Config.getString("frame.viewmenu.birdseye.doc");
default: return Config.getString("frame.viewmenu.birdseye");
}
}
});
FXPlatformConsumer<? super Boolean> frameCatalogueShownListener = newValue ->
editor.recordShowHideFrameCatalogue(newValue, FrameCatalogue.ShowReason.MENU_OR_SHORTCUT);
ObservableList<MenuItem> standardViewMenuItems = FXCollections.observableArrayList(
JavaFXUtil.makeMenuItem(Config.getString("frame.viewmenu.nextError"), editor::nextError, new KeyCharacterCombination("k", KeyCombination.SHORTCUT_DOWN))
,new SeparatorMenuItem()
,JavaFXUtil.makeCheckMenuItem(Config.getString("frame.viewmenu.cheatsheet"), editor.cheatSheetShowingProperty(), new KeyCodeCombination(KeyCode.F1), frameCatalogueShownListener)
,birdsEyeItem
,JavaFXUtil.makeCheckMenuItem(Config.getString("frame.viewmenu.java"), javaPreviewShowing, new KeyCharacterCombination("j", KeyCombination.SHORTCUT_DOWN))
,new SeparatorMenuItem()
,JavaFXUtil.makeMenuItem(Config.getString("frame.viewmenu.fontbigger"), editor::increaseFontSize, new KeyCharacterCombination("=", KeyCombination.SHORTCUT_DOWN))
,JavaFXUtil.makeMenuItem(Config.getString("frame.viewmenu.fontsmaller"), editor::decreaseFontSize, new KeyCharacterCombination("-", KeyCombination.SHORTCUT_DOWN))
,JavaFXUtil.makeMenuItem(Config.getString("frame.viewmenu.fontdefault"), editor::resetFontSize, new KeyCharacterCombination("0", KeyCombination.SHORTCUT_DOWN))
);
Menu viewMenu = new Menu(Config.getString("frame.viewmenu.title"));
JavaFXUtil.bindList(viewMenu.getItems(), standardViewMenuItems);
viewMenu.setOnShowing(e -> Utility.ifNotNull(viewMenuListener, EditableSlot.MenuItems::onShowing));
viewMenu.setOnHidden(e -> Utility.ifNotNull(viewMenuListener, EditableSlot.MenuItems::onHidden));
updateMoveMenus();
menus = Arrays.asList(
JavaFXUtil.makeMenu(Config.getString("frame.classmenu.title")
, mainMoveMenu
, JavaFXUtil.makeMenuItem(Config.getString("frame.classmenu.print"), () -> print(), new KeyCodeCombination(KeyCode.P, KeyCombination.SHORTCUT_DOWN))
, JavaFXUtil.makeMenuItem(Config.getString("frame.classmenu.close"), () -> editor.getParent().close(editor), new KeyCodeCombination(KeyCode.W, KeyCombination.SHORTCUT_DOWN))
),
editMenu,
viewMenu
);
}
else
{
updateMoveMenus();
}
return menus;
}
| Print the Stride class of the associated editor.
|
@OnThread(Tag.FXPlatform)
private void print()
{
PrinterJob job = JavaFXUtil.createPrinterJob();
if (job == null)
{
DialogManager.showErrorFX(editor.getParent().getWindow(),"print-no-printers");
}
else if (job.showPrintDialog(editor.getParent().getWindow()))
{
FXRunnable printAction = editor.getFrameEditor().printTo(job, PrefMgr.PrintSize.STANDARD, false, false);
new Thread()
{
@Override
@OnThread(value = Tag.FX, ignoreParent = true)
public void run()
{
printAction.run();
job.endJob();
}
}.start();
}
}
void setMenuItems(Map<EditableSlot.TopLevelMenu, EditableSlot.MenuItems> items)
{
if (unbindEditItems != null)
{
unbindEditItems.run();
unbindEditItems = null;
contextualEditItems.clear();
editMenuListener = null;
}
EditableSlot.MenuItems editItems = items.get(EditableSlot.TopLevelMenu.EDIT);
if (editItems != null) {
editMenuListener = editItems;
unbindEditItems = JavaFXUtil.bindList(contextualEditItems, editItems.getItems());
}
if (unbindViewItems != null)
{
unbindViewItems.run();
unbindViewItems = null;
extraViewItems.clear();
viewMenuListener = null;
}
EditableSlot.MenuItems viewItems = items.get(EditableSlot.TopLevelMenu.VIEW);
if (viewItems != null)
{
viewMenuListener = viewItems;
unbindViewItems = JavaFXUtil.bindList(extraViewItems, viewItems.getItems());
}
}
}
. - FrameMenuManager
. notifyView
. computeValue
. print
. run
. setMenuItems
258 neLoCode
+ 2 LoComm