mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 03:21:12 +07:00
[javafx] Use EditorNotificationPanel in SceneBuilderEditor
#IDEA-358827 Fixed GitOrigin-RevId: 9b0b8de860491a7f9fc6f043f52dee4b7ec9c9e3
This commit is contained in:
committed by
intellij-monorepo-bot
parent
9baf611af3
commit
c8f3a0af05
@@ -94,7 +94,7 @@ javafx.root.tag.descriptor.cannot.resolve.class=Cannot resolve class {0}
|
||||
javafx.scene.builder.editor.download.scene.builder.kit=Download Scene Builder Kit
|
||||
javafx.scene.builder.editor.download.javafx=Download JavaFX
|
||||
javafx.scene.builder.editor.failed.to.download.kit.error=Failed to download Scene Builder Kit
|
||||
javafx.scene.builder.editor.failed.to.open.file.error=Failed to open the file in the Scene Builder.
|
||||
javafx.scene.builder.editor.failed.to.open.file.error=Failed to open the file in the Scene Builder.
|
||||
javafx.scene.builder.editor.scene.builder.edit.operation=JavaFX Scene Builder edit operation
|
||||
|
||||
javafx.settings.configurable.path.to.scenebuilder=&Path to SceneBuilder:
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.plugins.javaFX.sceneBuilder;
|
||||
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.jarRepository.JarRepositoryManager;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
@@ -14,19 +13,20 @@ import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.fileEditor.FileEditor;
|
||||
import com.intellij.openapi.fileEditor.FileEditorState;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.UserDataHolderBase;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.ReadonlyStatusHandler;
|
||||
import com.intellij.openapi.vfs.VfsUtilCore;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.ui.HyperlinkLabel;
|
||||
import com.intellij.ui.EditorNotificationPanel;
|
||||
import com.intellij.ui.ScrollPaneFactory;
|
||||
import com.intellij.util.download.DownloadableFileDescription;
|
||||
import com.intellij.ui.SideBorder;
|
||||
import com.intellij.ui.components.panels.NonOpaquePanel;
|
||||
import com.intellij.util.download.DownloadableFileService;
|
||||
import com.intellij.util.download.FileDownloader;
|
||||
import com.intellij.util.lang.JavaVersion;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -35,8 +35,6 @@ import org.jetbrains.plugins.javaFX.JavaFXBundle;
|
||||
import org.jetbrains.plugins.javaFX.fxml.JavaFxCommonNames;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.HyperlinkEvent;
|
||||
import javax.swing.event.HyperlinkListener;
|
||||
import java.awt.*;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.io.File;
|
||||
@@ -62,15 +60,15 @@ public final class SceneBuilderEditor extends UserDataHolderBase implements File
|
||||
private final CardLayout myLayout = new CardLayout();
|
||||
private final JPanel myPanel = new JPanel(myLayout);
|
||||
|
||||
//private final JPanel myErrorPanel = new JPanel(new VerticalFlowLayout(VerticalFlowLayout.TOP, 10, 5, true, false));
|
||||
private final JPanel myErrorPanel = new JPanel(new BorderLayout());
|
||||
private final HyperlinkLabel myErrorLabel = new HyperlinkLabel();
|
||||
private final EditorNotificationPanel myErrorNotification = new EditorNotificationPanel(EditorNotificationPanel.Status.Error);
|
||||
private JTextArea myErrorStack;
|
||||
|
||||
private final Document myDocument;
|
||||
private final ExternalChangeListener myChangeListener;
|
||||
|
||||
private SceneBuilder mySceneBuilder;
|
||||
private NonOpaquePanel myWrapper;
|
||||
|
||||
public SceneBuilderEditor(@NotNull Project project, @NotNull VirtualFile file) {
|
||||
myProject = project;
|
||||
@@ -83,23 +81,20 @@ public final class SceneBuilderEditor extends UserDataHolderBase implements File
|
||||
}
|
||||
|
||||
private void createErrorPage() {
|
||||
myErrorLabel.setOpaque(false);
|
||||
|
||||
myErrorLabel.addHyperlinkListener(new HyperlinkListener() {
|
||||
@Override
|
||||
public void hyperlinkUpdate(HyperlinkEvent e) {
|
||||
updateState();
|
||||
}
|
||||
});
|
||||
|
||||
myErrorStack = new JTextArea(50, 20);
|
||||
myErrorStack = new JTextArea(1, 20);
|
||||
myErrorStack.setBorder(JBUI.Borders.empty(UIUtil.LARGE_VGAP, 20));
|
||||
myErrorStack.setEditable(false);
|
||||
|
||||
myErrorPanel.add(myErrorLabel, BorderLayout.NORTH);
|
||||
myWrapper = new NonOpaquePanel(myErrorNotification);
|
||||
myWrapper.setBorder(new SideBorder(JBUI.CurrentTheme.Banner.ERROR_BORDER_COLOR, SideBorder.BOTTOM));
|
||||
myWrapper.setVisible(false);
|
||||
|
||||
myErrorPanel.add(myWrapper, BorderLayout.NORTH);
|
||||
myErrorPanel.add(ScrollPaneFactory.createScrollPane(myErrorStack), BorderLayout.CENTER);
|
||||
myPanel.add(myErrorPanel);
|
||||
}
|
||||
|
||||
@SuppressWarnings("DialogTitleCapitalization")
|
||||
private void showErrorPage(Throwable e) {
|
||||
if (e != null) {
|
||||
LOG.info(e);
|
||||
@@ -107,41 +102,43 @@ public final class SceneBuilderEditor extends UserDataHolderBase implements File
|
||||
|
||||
removeSceneBuilder();
|
||||
|
||||
myWrapper.setVisible(true);
|
||||
myErrorNotification.clear();
|
||||
myErrorStack.setText("");
|
||||
|
||||
if (JavaVersion.current().feature > 11 &&
|
||||
e instanceof NoClassDefFoundError &&
|
||||
!SceneBuilderUtil.getSceneBuilder11Path().toFile().isFile()) {
|
||||
myErrorLabel.addHyperlinkListener(e1 -> {
|
||||
DownloadableFileService service = DownloadableFileService.getInstance();
|
||||
DownloadableFileDescription
|
||||
description = service.createFileDescription("https://cache-redirector.jetbrains.com/" +
|
||||
"intellij-dependencies/org/jetbrains/intellij/deps/scenebuilderkit/" +
|
||||
SceneBuilderUtil.SCENE_BUILDER_VERSION + "/" + SceneBuilderUtil.SCENE_BUILDER_KIT_FULL_NAME,
|
||||
SceneBuilderUtil.SCENE_BUILDER_KIT_FULL_NAME);
|
||||
FileDownloader downloader = service.createDownloader(Collections.singletonList(description), "Scene Builder Kit");
|
||||
try {
|
||||
Path tempDir = Files.createTempDirectory("" );
|
||||
myErrorNotification.setText(JavaFXBundle.message("javafx.scene.builder.editor.failed.to.open.file.error"));
|
||||
myErrorNotification.createActionLabel(
|
||||
JavaFXBundle.message("javafx.scene.builder.editor.download.scene.builder.kit"),
|
||||
() -> {
|
||||
DownloadableFileService service = DownloadableFileService.getInstance();
|
||||
var description = service.createFileDescription("https://cache-redirector.jetbrains.com/" +
|
||||
"intellij-dependencies/org/jetbrains/intellij/deps/scenebuilderkit/" +
|
||||
SceneBuilderUtil.SCENE_BUILDER_VERSION + "/" + SceneBuilderUtil.SCENE_BUILDER_KIT_FULL_NAME, SceneBuilderUtil.SCENE_BUILDER_KIT_FULL_NAME);
|
||||
FileDownloader downloader = service.createDownloader(Collections.singletonList(description), "Scene Builder Kit");
|
||||
try {
|
||||
Path tempDir = Files.createTempDirectory("");
|
||||
|
||||
List<Pair<VirtualFile, DownloadableFileDescription>>
|
||||
list = downloader.downloadWithProgress(tempDir.toString(), myProject, myErrorPanel);
|
||||
if (list == null || list.isEmpty()) {
|
||||
myErrorLabel.setHyperlinkText(JavaFXBundle.message("javafx.scene.builder.editor.failed.to.download.kit.error"), "", "");
|
||||
setErrorIcon();
|
||||
return;
|
||||
final var list = downloader.downloadWithProgress(tempDir.toString(), myProject, myErrorPanel);
|
||||
if (list == null || list.isEmpty()) {
|
||||
myErrorNotification.clear();
|
||||
myErrorNotification.setText(JavaFXBundle.message("javafx.scene.builder.editor.failed.to.download.kit.error"));
|
||||
return;
|
||||
}
|
||||
|
||||
FileUtil.copy(VfsUtilCore.virtualToIoFile(list.get(0).first), SceneBuilderUtil.getSceneBuilder11Path().toFile());
|
||||
FileUtil.delete(tempDir.toFile());
|
||||
|
||||
SceneBuilderUtil.updateLoader();
|
||||
updateState();
|
||||
}
|
||||
catch (IOException e2) {
|
||||
LOG.warn("Can't download SceneBuilderKit", e2);
|
||||
}
|
||||
|
||||
FileUtil.copy(VfsUtilCore.virtualToIoFile(list.get(0).first), SceneBuilderUtil.getSceneBuilder11Path().toFile());
|
||||
FileUtil.delete(tempDir.toFile());
|
||||
|
||||
SceneBuilderUtil.updateLoader();
|
||||
updateState();
|
||||
}
|
||||
catch (IOException e2) {
|
||||
LOG.warn("Can't download SceneBuilderKit", e2);
|
||||
}
|
||||
});
|
||||
myErrorLabel.setHyperlinkText(JavaFXBundle.message("javafx.scene.builder.editor.failed.to.open.file.error"),
|
||||
JavaFXBundle.message("javafx.scene.builder.editor.download.scene.builder.kit"), "");
|
||||
setErrorIcon();
|
||||
);
|
||||
myLayout.show(myPanel, ERROR_CARD);
|
||||
return;
|
||||
}
|
||||
@@ -150,12 +147,12 @@ public final class SceneBuilderEditor extends UserDataHolderBase implements File
|
||||
Class.forName(JavaFxCommonNames.JAVAFX_SCENE_NODE);
|
||||
}
|
||||
catch (ClassNotFoundException exception) {
|
||||
myErrorLabel.addHyperlinkListener(e1 -> {
|
||||
downloadJavaFxDependencies();
|
||||
});
|
||||
myErrorLabel.setHyperlinkText(JavaFXBundle.message("javafx.scene.builder.editor.failed.to.open.file.error"),
|
||||
JavaFXBundle.message("javafx.scene.builder.editor.download.javafx"), "");
|
||||
setErrorIcon();
|
||||
myErrorNotification.clear();
|
||||
myErrorNotification.setText(JavaFXBundle.message("javafx.scene.builder.editor.failed.to.open.file.error"));
|
||||
myErrorNotification.createActionLabel(
|
||||
JavaFXBundle.message("javafx.scene.builder.editor.download.javafx"),
|
||||
() -> downloadJavaFxDependencies()
|
||||
);
|
||||
myLayout.show(myPanel, ERROR_CARD);
|
||||
return;
|
||||
}
|
||||
@@ -180,17 +177,12 @@ public final class SceneBuilderEditor extends UserDataHolderBase implements File
|
||||
description = "Unknown error occurred";
|
||||
}
|
||||
|
||||
myErrorLabel.setHyperlinkText(JavaFXBundle.message("javafx.scene.builder.editor.failed.to.open.file.error"), "", "");
|
||||
setErrorIcon();
|
||||
myErrorNotification.setText(JavaFXBundle.message("javafx.scene.builder.editor.failed.to.open.file.error"));
|
||||
myErrorStack.setText(description);
|
||||
myErrorStack.setVisible(true);
|
||||
myErrorStack.setRows(description.split("\n").length);
|
||||
myLayout.show(myPanel, ERROR_CARD);
|
||||
}
|
||||
|
||||
private void setErrorIcon() {
|
||||
myErrorLabel.setIcon(AllIcons.General.Error);
|
||||
}
|
||||
|
||||
private void downloadJavaFxDependencies() {
|
||||
for (String coordinate : SceneBuilderUtil.JAVAFX_ARTIFACTS) {
|
||||
RepositoryLibraryProperties libraryProperties =
|
||||
|
||||
Reference in New Issue
Block a user