package bluej.pkgmgr.target;
import bluej.Config;
import bluej.editor.Editor;
import bluej.editor.EditorManager;
import bluej.pkgmgr.Package;
import bluej.pkgmgr.PackageEditor;
import bluej.utility.Debug;
import bluej.utility.javafx.JavaFXUtil;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import threadchecker.OnThread;
import threadchecker.Tag;
import java.io.File;
import java.io.IOException;
import java.util.Properties;
| A parent package
|
| @author Andrew Patterson
|
public class ReadmeTarget
extends NonCodeEditableTarget{
private static final String openStr = Config.getString("pkgmgr.packagemenu.open");
public static final String README_ID = "@README";
@OnThread(Tag.FXPlatform)
private static Image readmeImage;
@OnThread(Tag.FXPlatform)
private static Image selectedReadmeImage;
@OnThread(Tag.FXPlatform)
private ImageView imageView;
public ReadmeTarget(Package pkg)
{
super(pkg, README_ID);
if (readmeImage == null)
readmeImage = Config.getImageAsFXImage("image.readme");
if (selectedReadmeImage == null)
selectedReadmeImage= Config.getImageAsFXImage("image.readme-selected");
setPos(10, 10);
setSize((int)readmeImage.getWidth(), (int)readmeImage.getHeight());
JavaFXUtil.addStyleClass(pane, "readme-target");
pane.setTop(null);
imageView = new ImageView();
imageView.setImage(readmeImage);
pane.setCenter(imageView);
}
@Override
public void load(Properties props, String prefix) throws NumberFormatException
{
}
|
| @return the name of the (text) file this target corresponds to.
|
@Override
public File getSourceFile()
{
return new File(getPackage().getPath(), Package.readmeName);
}
@Override
@OnThread(Tag.FX)
public boolean isResizable()
{
return false;
}
|
| Although we do save some information (the editor position) about a Readme
| this is not done via the usual target save mechanism. If the normal save
| mechanism was used, the readme target would appear as a normal target.
| This would result in not being able to open a project saved in a newer
| BlueJ version with an older BlueJ version.
|
@Override
@OnThread(Tag.Any)
public boolean isSaveable()
{
return false;
}
@Override
public Editor getEditor()
{
if (editor == null) {
editor = EditorManager.getEditorManager().openText(
getSourceFile().getPath(),
getPackage().getProject().getProjectCharset(),
Package.readmeName, getPackage().getProject()::getDefaultFXTabbedEditor);
}
return editor;
}
private void openEditor(boolean openInNewWindow)
{
if (editor == null) {
if (! getSourceFile().exists()) {
try {
getSourceFile().createNewFile();
}
catch (IOException ioe) {
Debug.reportError("Couldn't open README", ioe);
}
}
}
if (getEditor() != null) {
editor.setEditorVisible(true, openInNewWindow);
}
}
|
| Called when a package icon in a GraphEditor is double clicked.
| Creates a new PkgFrame when a package is drilled down on.
|
@Override
@OnThread(Tag.FXPlatform)
public void doubleClick(boolean openInNewWindow)
{
openEditor(openInNewWindow);
}
|
| Post the context menu for this target.
|
@Override
@OnThread(Tag.FXPlatform)
public void popupMenu(int x, int y, PackageEditor editor)
{
ContextMenu menu = createMenu();
if (menu != null) {
showingMenu(menu);
menu.show(getNode(), x, y);
}
}
@OnThread(Tag.FXPlatform)
private ContextMenu createMenu()
{
MenuItem open = new MenuItem(openStr);
open.setOnAction(e -> openEditor(false));
JavaFXUtil.addStyleClass(open, "class-action-inbuilt");
return new ContextMenu(open);
}
@Override
public void remove()
{
}
@Override
public @OnThread(Tag.FXPlatform) void setSelected(boolean selected)
{
super.setSelected(selected);
imageView.setImage(selected ? selectedReadmeImage : readmeImage);
}
}
top,
use,
map,
class ReadmeTarget
. ReadmeTarget
. load
. getSourceFile
. isResizable
. isSaveable
. getEditor
. openEditor
. doubleClick
. popupMenu
. createMenu
. remove
. setSelected
191 neLoCode
+ 15 LoComm