package bluej.extmgr;
import javax.swing.*;
import bluej.*;
import bluej.utility.Utility;
import bluej.utility.javafx.FXPlatformSupplier;
import bluej.utility.javafx.JavaFXUtil;
import threadchecker.OnThread;
import threadchecker.Tag;
import java.net.URL;
import java.util.List;
import javafx.application.Platform;
import javafx.scene.Node;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.control.Hyperlink;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.scene.text.TextFlow;
import javafx.stage.Modality;
import javafx.stage.Window;
| The Extensions Manager help panel allows the user to view current extensions.
|
| @author Clive Millaer, University of Kent at Canterbury, 2002
| @author Damiano Bolla, University of Kent at Canterbury, 2003
|
@OnThread(Tag.FXPlatform)
public class ExtensionsDialog
{
private final String systemString = Config.getString("extmgr.systemExtensionShort");
private final String projectString = Config.getString("extmgr.projectExtensionShort");
private final String systemLongString = Config.getString("extmgr.systemExtensionLong");
private final String projectLongString = Config.getString("extmgr.projectExtensionLong");
private final String locationTag = Config.getString("extmgr.details.location");
private final String versionTag = Config.getString("extmgr.details.version");
private Dialog<Void> mainFrame;
private VBox extensionsVBox;
| Setup the UI for the dialog and event handlers for the dialog's buttons.
| This new version is guarantee to have a valid extension manager.
|
@OnThread(Tag.Swing)
ExtensionsDialog(List<ExtensionWrapper> extensionsList, FXPlatformSupplier<Window> parent)
{
Platform.runLater(() -> {
mainFrame = new Dialog();
mainFrame.initOwner(parent.get());
mainFrame.setTitle(Config.getString("extmgr.title"));
mainFrame.initModality(Modality.WINDOW_MODAL);
mainFrame.setResizable(true);
extensionsVBox = new VBox();
extensionsVBox.setFillWidth(true);
extensionsVBox.setMinWidth(200.0);
JavaFXUtil.addStyleClass(extensionsVBox, "extension-list");
ScrollPane extensionsPane = new ScrollPane(extensionsVBox);
extensionsPane.setPrefHeight(300.0);
extensionsPane.setPrefWidth(500.0);
extensionsPane.setFitToWidth(true);
Config.addDialogStylesheets(mainFrame.getDialogPane());
mainFrame.getDialogPane().setContent(extensionsPane);
mainFrame.getDialogPane().getButtonTypes().setAll(ButtonType.CLOSE);
});
extensionsList.forEach(wrapper -> {
String extensionName = wrapper.safeGetExtensionName();
String extensionStatus = wrapper.getExtensionStatus();
String extensionVersion = wrapper.safeGetExtensionVersion();
String extensionDescription = wrapper.safeGetExtensionDescription();
boolean isProject = wrapper.getProject() != null;
String extensionFileName = wrapper.getExtensionFileName();
URL url = wrapper.safeGetURL();
Platform.runLater(() ->
extensionsVBox.getChildren().add(makeDisplay(extensionName, extensionStatus, extensionVersion, extensionDescription, isProject, extensionFileName, url))
);
});
}
public void showAndWait()
{
mainFrame.showAndWait();
}
@OnThread(Tag.FXPlatform)
private TitledPane makeDisplay(String extensionName, String extensionStatus, String extensionVersion, String extensionDescription, boolean isProject, String extensionFileName, URL url)
{
String typeShort = isProject ? projectString : systemString;
String typeLong = isProject ? projectLongString : systemLongString;
String title = extensionName + " (" + typeShort + ", " + extensionStatus + ")";
VBox mainPanel = new VBox();
JavaFXUtil.addStyleClass(mainPanel, "extension-info");
mainPanel.getChildren().add(new Label(extensionName + " " + versionTag + " "
+ extensionVersion));
mainPanel.getChildren().add(new Label(typeLong));
mainPanel.getChildren().add(new Label(locationTag + " " + extensionFileName +
" (" + extensionStatus +')'));
Text description = new Text(extensionDescription);
mainPanel.getChildren().add(new TextFlow(description));
if (url != null)
{
Hyperlink link = new Hyperlink(url.toExternalForm());
link.setOnAction(e -> SwingUtilities.invokeLater(() -> Utility.openWebBrowser(url.toExternalForm())));
mainPanel.getChildren().add(link);
}
TitledPane titledPane = new TitledPane(title, mainPanel);
titledPane.setExpanded(false);
return titledPane;
}
}
top,
use,
map,
class ExtensionsDialog
. showAndWait
. makeDisplay
132 neLoCode
+ 5 LoComm