From a87dd11b8fdf93cf73ff6a1e0f9c91f79cac1284 Mon Sep 17 00:00:00 2001 From: Alexander Lobas Date: Thu, 23 Jan 2014 14:58:57 +0400 Subject: [PATCH] JavaFX Scene Builder integration --- .../FxBuilderEmbedder/FxBuilderEmbedder.iml | 1 + .../kit/editor/EditorController.java | 11 ++- .../panel/content/ContentPanelController.java | 13 ++++ .../treeview/HierarchyTreeViewController.java | 13 ++++ .../inspector/InspectorPanelController.java | 13 ++++ .../panel/library/LibraryPanelController.java | 13 ++++ .../panel/util/AbstractPanelController.java | 12 +++ .../scenebuilder/kit/fxom/FXOMDocument.java | 13 ++++ .../javafx/collections/ObservableList.java | 10 +++ .../stubsSrc/javafx/geometry/Orientation.java | 8 ++ .../Stubs/stubsSrc/javafx/scene/Node.java | 7 ++ .../Stubs/stubsSrc/javafx/scene/Parent.java | 7 ++ .../Stubs/stubsSrc/javafx/scene/Scene.java | 3 + .../javafx/scene/control/Control.java | 9 +++ .../javafx/scene/control/SplitPane.java | 22 ++++++ .../stubsSrc/javafx/scene/layout/Region.java | 9 +++ .../sceneBuilder/SceneBuilderKitWrapper.java | 76 +++++++++++++++++++ plugins/javaFX/javaFX.iml | 1 - .../sceneBuilder/SceneBuilderEditor.java | 3 +- 19 files changed, 238 insertions(+), 6 deletions(-) create mode 100644 plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/content/ContentPanelController.java create mode 100644 plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/hierarchy/treeview/HierarchyTreeViewController.java create mode 100644 plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/inspector/InspectorPanelController.java create mode 100644 plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/library/LibraryPanelController.java create mode 100644 plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/util/AbstractPanelController.java create mode 100644 plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/fxom/FXOMDocument.java create mode 100644 plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/collections/ObservableList.java create mode 100644 plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/geometry/Orientation.java create mode 100644 plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/Node.java create mode 100644 plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/Parent.java create mode 100644 plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/control/Control.java create mode 100644 plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/control/SplitPane.java create mode 100644 plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/layout/Region.java create mode 100644 plugins/javaFX/FxBuilderEmbedder/src/org/jetbrains/plugins/javaFX/sceneBuilder/SceneBuilderKitWrapper.java diff --git a/plugins/javaFX/FxBuilderEmbedder/FxBuilderEmbedder.iml b/plugins/javaFX/FxBuilderEmbedder/FxBuilderEmbedder.iml index 3e312abc5d95..9379a8f49a6f 100644 --- a/plugins/javaFX/FxBuilderEmbedder/FxBuilderEmbedder.iml +++ b/plugins/javaFX/FxBuilderEmbedder/FxBuilderEmbedder.iml @@ -8,6 +8,7 @@ + diff --git a/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/EditorController.java b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/EditorController.java index 43d7230ba00a..042a83411fc8 100644 --- a/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/EditorController.java +++ b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/EditorController.java @@ -1,9 +1,14 @@ package com.oracle.javafx.scenebuilder.kit.editor; +import java.io.IOException; import java.net.URL; public class EditorController { - public URL getFxmlLocation() { - return null; // TODO: Auto-generated method stub - } + public URL getFxmlLocation() { + return null; // TODO: Auto-generated method stub + } + + public void setFxmlTextAndLocation(String fxmlText, URL fxmlLocation) throws IOException { + // TODO: Auto-generated method stub + } } \ No newline at end of file diff --git a/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/content/ContentPanelController.java b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/content/ContentPanelController.java new file mode 100644 index 000000000000..25a9cc877112 --- /dev/null +++ b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/content/ContentPanelController.java @@ -0,0 +1,13 @@ +package com.oracle.javafx.scenebuilder.kit.editor.panel.content; + +import com.oracle.javafx.scenebuilder.kit.editor.EditorController; +import com.oracle.javafx.scenebuilder.kit.editor.panel.util.AbstractPanelController; + +/** + * @author Alexander Lobas + */ +public class ContentPanelController extends AbstractPanelController { + public ContentPanelController(EditorController editorController) { + // TODO: Auto-generated method stub + } +} \ No newline at end of file diff --git a/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/hierarchy/treeview/HierarchyTreeViewController.java b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/hierarchy/treeview/HierarchyTreeViewController.java new file mode 100644 index 000000000000..197cbe23909d --- /dev/null +++ b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/hierarchy/treeview/HierarchyTreeViewController.java @@ -0,0 +1,13 @@ +package com.oracle.javafx.scenebuilder.kit.editor.panel.hierarchy.treeview; + +import com.oracle.javafx.scenebuilder.kit.editor.EditorController; +import com.oracle.javafx.scenebuilder.kit.editor.panel.util.AbstractPanelController; + +/** + * @author Alexander Lobas + */ +public class HierarchyTreeViewController extends AbstractPanelController { + public HierarchyTreeViewController(EditorController editorController) { + // TODO: Auto-generated method stub + } +} \ No newline at end of file diff --git a/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/inspector/InspectorPanelController.java b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/inspector/InspectorPanelController.java new file mode 100644 index 000000000000..26c6a3927f0f --- /dev/null +++ b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/inspector/InspectorPanelController.java @@ -0,0 +1,13 @@ +package com.oracle.javafx.scenebuilder.kit.editor.panel.inspector; + +import com.oracle.javafx.scenebuilder.kit.editor.EditorController; +import com.oracle.javafx.scenebuilder.kit.editor.panel.util.AbstractPanelController; + +/** + * @author Alexander Lobas + */ +public class InspectorPanelController extends AbstractPanelController { + public InspectorPanelController(EditorController editorController) { + // TODO: Auto-generated method stub + } +} \ No newline at end of file diff --git a/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/library/LibraryPanelController.java b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/library/LibraryPanelController.java new file mode 100644 index 000000000000..eea756708ca6 --- /dev/null +++ b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/library/LibraryPanelController.java @@ -0,0 +1,13 @@ +package com.oracle.javafx.scenebuilder.kit.editor.panel.library; + +import com.oracle.javafx.scenebuilder.kit.editor.EditorController; +import com.oracle.javafx.scenebuilder.kit.editor.panel.util.AbstractPanelController; + +/** + * @author Alexander Lobas + */ +public class LibraryPanelController extends AbstractPanelController { + public LibraryPanelController(EditorController c) { + // TODO: Auto-generated method stub + } +} \ No newline at end of file diff --git a/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/util/AbstractPanelController.java b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/util/AbstractPanelController.java new file mode 100644 index 000000000000..f9c4506e19c3 --- /dev/null +++ b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/editor/panel/util/AbstractPanelController.java @@ -0,0 +1,12 @@ +package com.oracle.javafx.scenebuilder.kit.editor.panel.util; + +import javafx.scene.Parent; + +/** + * @author Alexander Lobas + */ +public class AbstractPanelController { + public Parent getPanelRoot() { + return null; // TODO: Auto-generated method stub + } +} \ No newline at end of file diff --git a/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/fxom/FXOMDocument.java b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/fxom/FXOMDocument.java new file mode 100644 index 000000000000..6003ffab64d6 --- /dev/null +++ b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/com/oracle/javafx/scenebuilder/kit/fxom/FXOMDocument.java @@ -0,0 +1,13 @@ +package com.oracle.javafx.scenebuilder.kit.fxom; + +import java.io.IOException; +import java.net.URL; + +/** + * @author Alexander Lobas + */ +public class FXOMDocument { + public static String readContentFromURL(URL url) throws IOException { + return null; // TODO: Auto-generated method stub + } +} \ No newline at end of file diff --git a/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/collections/ObservableList.java b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/collections/ObservableList.java new file mode 100644 index 000000000000..f79e5136e489 --- /dev/null +++ b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/collections/ObservableList.java @@ -0,0 +1,10 @@ +package javafx.collections; + +import java.util.List; + +/** + * @author Alexander Lobas + */ +public interface ObservableList extends List { + public boolean addAll(E... elements); +} \ No newline at end of file diff --git a/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/geometry/Orientation.java b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/geometry/Orientation.java new file mode 100644 index 000000000000..39c5dc971f94 --- /dev/null +++ b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/geometry/Orientation.java @@ -0,0 +1,8 @@ +package javafx.geometry; + +/** + * @author Alexander Lobas + */ +public enum Orientation { + HORIZONTAL, VERTICAL +} \ No newline at end of file diff --git a/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/Node.java b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/Node.java new file mode 100644 index 000000000000..d3e351aee893 --- /dev/null +++ b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/Node.java @@ -0,0 +1,7 @@ +package javafx.scene; + +/** + * @author Alexander Lobas + */ +public class Node { +} \ No newline at end of file diff --git a/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/Parent.java b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/Parent.java new file mode 100644 index 000000000000..b51a0ef9683c --- /dev/null +++ b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/Parent.java @@ -0,0 +1,7 @@ +package javafx.scene; + +/** + * @author Alexander Lobas + */ +public abstract class Parent extends Node { +} \ No newline at end of file diff --git a/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/Scene.java b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/Scene.java index a0d16fafda3c..f3c8bd7c7776 100644 --- a/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/Scene.java +++ b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/Scene.java @@ -1,4 +1,7 @@ package javafx.scene; public class Scene { + public Scene(Parent root, double width, double height) { + // TODO: Auto-generated method stub + } } \ No newline at end of file diff --git a/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/control/Control.java b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/control/Control.java new file mode 100644 index 000000000000..6a1d0fb4078b --- /dev/null +++ b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/control/Control.java @@ -0,0 +1,9 @@ +package javafx.scene.control; + +import javafx.scene.layout.Region; + +/** + * @author Alexander Lobas + */ +public abstract class Control extends Region { +} \ No newline at end of file diff --git a/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/control/SplitPane.java b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/control/SplitPane.java new file mode 100644 index 000000000000..6a56a5826f99 --- /dev/null +++ b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/control/SplitPane.java @@ -0,0 +1,22 @@ +package javafx.scene.control; + +import javafx.collections.ObservableList; +import javafx.geometry.Orientation; +import javafx.scene.Node; + +/** + * @author Alexander Lobas + */ +public class SplitPane extends Control { + public final void setOrientation(Orientation value) { + // TODO: Auto-generated method stub + } + + public void setDividerPositions(double... positions) { + // TODO: Auto-generated method stub + } + + public ObservableList getItems() { + return null; // TODO: Auto-generated method stub + } +} \ No newline at end of file diff --git a/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/layout/Region.java b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/layout/Region.java new file mode 100644 index 000000000000..5bd724c71684 --- /dev/null +++ b/plugins/javaFX/FxBuilderEmbedder/Stubs/stubsSrc/javafx/scene/layout/Region.java @@ -0,0 +1,9 @@ +package javafx.scene.layout; + +import javafx.scene.Parent; + +/** + * @author Alexander Lobas + */ +public class Region extends Parent { +} \ No newline at end of file diff --git a/plugins/javaFX/FxBuilderEmbedder/src/org/jetbrains/plugins/javaFX/sceneBuilder/SceneBuilderKitWrapper.java b/plugins/javaFX/FxBuilderEmbedder/src/org/jetbrains/plugins/javaFX/sceneBuilder/SceneBuilderKitWrapper.java new file mode 100644 index 000000000000..4ebceb0f835e --- /dev/null +++ b/plugins/javaFX/FxBuilderEmbedder/src/org/jetbrains/plugins/javaFX/sceneBuilder/SceneBuilderKitWrapper.java @@ -0,0 +1,76 @@ +package org.jetbrains.plugins.javaFX.sceneBuilder; + +import com.intellij.openapi.diagnostic.Logger; +import com.oracle.javafx.scenebuilder.kit.editor.EditorController; +import com.oracle.javafx.scenebuilder.kit.editor.drag.source.AbstractDragSource; +import com.oracle.javafx.scenebuilder.kit.editor.panel.content.ContentPanelController; +import com.oracle.javafx.scenebuilder.kit.editor.panel.hierarchy.treeview.HierarchyTreeViewController; +import com.oracle.javafx.scenebuilder.kit.editor.panel.inspector.InspectorPanelController; +import com.oracle.javafx.scenebuilder.kit.editor.panel.library.LibraryPanelController; +import com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument; +import javafx.application.Platform; +import javafx.embed.swing.JFXPanel; +import javafx.fxml.FXMLLoader; +import javafx.geometry.Orientation; +import javafx.scene.Scene; +import javafx.scene.control.SplitPane; +import javafx.scene.input.DataFormat; + +import javax.swing.*; +import java.io.File; +import java.lang.reflect.Field; +import java.net.URL; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; + +/** + * @author Alexander Lobas + */ +public class SceneBuilderKitWrapper { + private static final Logger LOG = Logger.getInstance("#org.jetbrains.plugins.javaFX.sceneBuilder.SceneBuilderWrapper"); + + public static JComponent create(final String path) throws Exception { + Field identifier = DataFormat.class.getDeclaredField("identifier"); + identifier.setAccessible(true); + identifier.set(AbstractDragSource.INTERNAL_DATA_FORMAT, Collections + .unmodifiableSet(new HashSet(Arrays.asList("application/scene.builder.internal")))); + + FXMLLoader.setDefaultClassLoader(SceneBuilderKitWrapper.class.getClassLoader()); + + final JFXPanel panel = new JFXPanel(); + Platform.runLater(new Runnable() { + @Override + public void run() { + EditorController editor = new EditorController(); + HierarchyTreeViewController componentTree = new HierarchyTreeViewController(editor); + ContentPanelController canvas = new ContentPanelController(editor); + InspectorPanelController propertyTable = new InspectorPanelController(editor); + LibraryPanelController palette = new LibraryPanelController(editor); + + try { + URL fxmlURL = new File(path).toURI().toURL(); + String fxmlText = FXOMDocument.readContentFromURL(fxmlURL); + editor.setFxmlTextAndLocation(fxmlText, fxmlURL); + } + catch (Throwable e) { + LOG.error(e); + } + + SplitPane leftPane = new SplitPane(); + leftPane.setOrientation(Orientation.VERTICAL); + leftPane.getItems().addAll(palette.getPanelRoot(), componentTree.getPanelRoot()); + leftPane.setDividerPositions(0.5, 0.5); + + SplitPane mainPane = new SplitPane(); + + mainPane.getItems().addAll(leftPane, canvas.getPanelRoot(), propertyTable.getPanelRoot()); + mainPane.setDividerPositions(0, 0.5, 1); + + panel.setScene(new Scene(mainPane, 900, 600)); + } + }); + + return panel; + } +} \ No newline at end of file diff --git a/plugins/javaFX/javaFX.iml b/plugins/javaFX/javaFX.iml index c521ba65f5f2..3abff64396de 100644 --- a/plugins/javaFX/javaFX.iml +++ b/plugins/javaFX/javaFX.iml @@ -6,7 +6,6 @@ - diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/sceneBuilder/SceneBuilderEditor.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/sceneBuilder/SceneBuilderEditor.java index 45ccc220d3eb..891ab95c0550 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/sceneBuilder/SceneBuilderEditor.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/sceneBuilder/SceneBuilderEditor.java @@ -1,7 +1,6 @@ package org.jetbrains.plugins.javaFX.sceneBuilder; import com.intellij.codeHighlighting.BackgroundEditorHighlighter; -import com.intellij.ide.plugins.PluginManager; import com.intellij.ide.plugins.cl.PluginClassLoader; import com.intellij.ide.structureView.StructureViewBuilder; import com.intellij.openapi.diagnostic.Logger; @@ -114,7 +113,7 @@ public class SceneBuilderEditor extends UserDataHolderBase implements FileEditor private void loadSceneBuilder(SceneBuilderInfo info) throws Exception { mySceneLoader = createSceneLoader(info); - Class wrapperClass = Class.forName("org.jetbrains.plugins.javaFX.sceneBuilder.SceneBuilderWrapper", false, mySceneLoader); + Class wrapperClass = Class.forName("org.jetbrains.plugins.javaFX.sceneBuilder.SceneBuilderKitWrapper", false, mySceneLoader); myFxPanel = (JComponent)wrapperClass.getMethod("create", String.class).invoke(null, myFile.getPath()); myPanel.add(myFxPanel, SCENE_CARD);