mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
JavaFX Scene Builder integration
This commit is contained in:
@@ -57,6 +57,7 @@
|
||||
<actions>
|
||||
<action class="org.jetbrains.plugins.javaFX.actions.OpenInSceneBuilderAction" id="OpenInSceneBuilder" text="Open In SceneBuilder">
|
||||
<add-to-group group-id="EditorPopupMenu" anchor="last"/>
|
||||
<add-to-group group-id="EditorTabPopupMenu" anchor="last"/>
|
||||
<add-to-group group-id="ProjectViewPopupMenu" anchor="last"/>
|
||||
</action>
|
||||
</actions>
|
||||
|
||||
+7
-121
@@ -17,35 +17,18 @@ package org.jetbrains.plugins.javaFX.actions;
|
||||
|
||||
import com.intellij.CommonBundle;
|
||||
import com.intellij.execution.configurations.GeneralCommandLine;
|
||||
import com.intellij.execution.configurations.JavaParameters;
|
||||
import com.intellij.execution.configurations.PathEnvironmentVariableUtil;
|
||||
import com.intellij.execution.process.OSProcessHandler;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.CommonDataKeys;
|
||||
import com.intellij.openapi.actionSystem.PlatformDataKeys;
|
||||
import com.intellij.openapi.actionSystem.Presentation;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.fileChooser.FileChooser;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleUtilCore;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.javaFX.JavaFxSettings;
|
||||
import org.jetbrains.plugins.javaFX.JavaFxSettingsConfigurable;
|
||||
import org.jetbrains.plugins.javaFX.fxml.JavaFxFileTypeFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.jetbrains.plugins.javaFX.sceneBuilder.SceneBuilderInfo;
|
||||
|
||||
/**
|
||||
* User: anna
|
||||
@@ -53,84 +36,21 @@ import java.util.List;
|
||||
*/
|
||||
public class OpenInSceneBuilderAction extends AnAction {
|
||||
private static final Logger LOG = Logger.getInstance("#" + OpenInSceneBuilderAction.class.getName());
|
||||
public static final String ORACLE = "Oracle";
|
||||
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
final VirtualFile virtualFile = e.getData(CommonDataKeys.VIRTUAL_FILE);
|
||||
LOG.assertTrue(virtualFile != null);
|
||||
final String path = virtualFile.getPath();
|
||||
|
||||
final JavaFxSettings settings = JavaFxSettings.getInstance();
|
||||
String pathToSceneBuilder = settings.getPathToSceneBuilder();
|
||||
if (StringUtil.isEmptyOrSpaces(settings.getPathToSceneBuilder())){
|
||||
final VirtualFile sceneBuilderFile = FileChooser.chooseFile(JavaFxSettingsConfigurable.createSceneBuilderDescriptor(), e.getProject(), getPredefinedPath());
|
||||
if (sceneBuilderFile == null) return;
|
||||
|
||||
pathToSceneBuilder = sceneBuilderFile.getPath();
|
||||
settings.setPathToSceneBuilder(FileUtil.toSystemIndependentName(pathToSceneBuilder));
|
||||
}
|
||||
|
||||
final Project project = getEventProject(e);
|
||||
if (project != null && !Registry.is("scene.builder.start.executable", true)) {
|
||||
final Module module = ModuleUtilCore.findModuleForFile(virtualFile, project);
|
||||
if (module != null) {
|
||||
try {
|
||||
final JavaParameters javaParameters = new JavaParameters();
|
||||
javaParameters.configureByModule(module, JavaParameters.JDK_AND_CLASSES);
|
||||
|
||||
final File sceneBuilderLibsFile;
|
||||
if (SystemInfo.isMac) {
|
||||
sceneBuilderLibsFile = new File(new File(pathToSceneBuilder, "Contents"), "Java");
|
||||
} else if (SystemInfo.isWindows) {
|
||||
File sceneBuilderRoot = new File(pathToSceneBuilder);
|
||||
File sceneBuilderRootDir = sceneBuilderRoot.getParentFile();
|
||||
if (sceneBuilderRootDir == null) {
|
||||
final File foundInPath = PathEnvironmentVariableUtil.findInPath(pathToSceneBuilder);
|
||||
if (foundInPath != null) {
|
||||
sceneBuilderRootDir = foundInPath.getParentFile();
|
||||
}
|
||||
}
|
||||
sceneBuilderRoot = sceneBuilderRootDir != null ? sceneBuilderRootDir.getParentFile() : null;
|
||||
if (sceneBuilderRoot != null) {
|
||||
final File libFile = new File(sceneBuilderRoot, "lib");
|
||||
if (libFile.isDirectory()) {
|
||||
sceneBuilderLibsFile = libFile;
|
||||
}
|
||||
else {
|
||||
final File appFile = new File(sceneBuilderRootDir, "app");
|
||||
sceneBuilderLibsFile = appFile.isDirectory() ? appFile : null;
|
||||
}
|
||||
}
|
||||
else {
|
||||
sceneBuilderLibsFile = null;
|
||||
}
|
||||
} else {
|
||||
sceneBuilderLibsFile = new File(new File(pathToSceneBuilder).getParent(), "app");
|
||||
}
|
||||
if (sceneBuilderLibsFile != null) {
|
||||
final File[] sceneBuilderLibs = sceneBuilderLibsFile.listFiles();
|
||||
if (sceneBuilderLibs != null) {
|
||||
for (File jarFile : sceneBuilderLibs) {
|
||||
javaParameters.getClassPath().add(jarFile.getPath());
|
||||
}
|
||||
javaParameters.setMainClass("com.oracle.javafx.authoring.Main");
|
||||
javaParameters.getProgramParametersList().add(path);
|
||||
|
||||
final OSProcessHandler processHandler = javaParameters.createOSProcessHandler();
|
||||
final String commandLine = processHandler.getCommandLine();
|
||||
LOG.info("scene builder command line: " + commandLine);
|
||||
processHandler.startNotify();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Throwable ex) {
|
||||
LOG.info(ex);
|
||||
}
|
||||
}
|
||||
final SceneBuilderInfo info = SceneBuilderInfo.get(project, true);
|
||||
if (info == SceneBuilderInfo.EMPTY) {
|
||||
return;
|
||||
}
|
||||
|
||||
String pathToSceneBuilder = info.path;
|
||||
|
||||
if (SystemInfo.isMac) {
|
||||
pathToSceneBuilder += "/Contents/MacOS/scenebuilder-launcher.sh";
|
||||
}
|
||||
@@ -152,45 +72,11 @@ public class OpenInSceneBuilderAction extends AnAction {
|
||||
presentation.setEnabled(false);
|
||||
presentation.setVisible(false);
|
||||
final VirtualFile virtualFile = e.getData(CommonDataKeys.VIRTUAL_FILE);
|
||||
if (virtualFile != null &&
|
||||
if (virtualFile != null &&
|
||||
JavaFxFileTypeFactory.isFxml(virtualFile) &&
|
||||
e.getProject() != null) {
|
||||
presentation.setEnabled(true);
|
||||
presentation.setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static VirtualFile getPredefinedPath() {
|
||||
String path = null;
|
||||
if (SystemInfo.isWindows) {
|
||||
final String sb11 = File.separator + "JavaFX Scene Builder 1.1" + File.separator + "JavaFX Scene Builder 1.1.exe";
|
||||
final String sb10 = File.separator + "JavaFX Scene Builder 1.0" + File.separator + "bin" + File.separator + "scenebuilder.exe";
|
||||
final List<String> suspiciousPaths = new ArrayList<String>();
|
||||
final String programFiles = "C:\\Program Files";
|
||||
fillPaths(programFiles, sb11, sb10, suspiciousPaths);
|
||||
fillPaths(programFiles + " (x86)", sb11, sb10, suspiciousPaths);
|
||||
final File sb = FileUtil.findFirstThatExist(ArrayUtil.toStringArray(suspiciousPaths));
|
||||
if (sb != null) {
|
||||
path = sb.getPath();
|
||||
}
|
||||
}
|
||||
else if (SystemInfo.isMac) {
|
||||
final File sb = FileUtil.findFirstThatExist("/Applications/JavaFX Scene Builder 1.1.app",
|
||||
"/Applications/JavaFX Scene Builder 1.0.app");
|
||||
if (sb != null) {
|
||||
path = sb.getPath();
|
||||
}
|
||||
}
|
||||
else if (SystemInfo.isUnix) {
|
||||
path = "/opt/JavaFXSceneBuilder1.1/JavaFXSceneBuilder1.1";
|
||||
}
|
||||
|
||||
return path != null ? LocalFileSystem.getInstance().findFileByPath(FileUtil.toSystemIndependentName(path)) : null;
|
||||
}
|
||||
|
||||
private static void fillPaths(String programFilesPath, String sb11, String sb10, List<String> suspiciousPaths) {
|
||||
suspiciousPaths.add(new File(programFilesPath, ORACLE).getPath() + sb11);
|
||||
suspiciousPaths.add(new File(programFilesPath, ORACLE).getPath() + sb10);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user