JavaFX Scene Builder integration

This commit is contained in:
Alexander Lobas
2014-01-23 15:00:29 +04:00
parent ccd0d4a4a9
commit a87dd11b8f
19 changed files with 238 additions and 6 deletions
@@ -8,6 +8,7 @@
<orderEntry type="module" module-name="FxBuilderStubs" scope="PROVIDED" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="util" />
</component>
</module>
@@ -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
}
}
@@ -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
}
}
@@ -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
}
}
@@ -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
}
}
@@ -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
}
}
@@ -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
}
}
@@ -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
}
}
@@ -0,0 +1,10 @@
package javafx.collections;
import java.util.List;
/**
* @author Alexander Lobas
*/
public interface ObservableList<E> extends List<E> {
public boolean addAll(E... elements);
}
@@ -0,0 +1,8 @@
package javafx.geometry;
/**
* @author Alexander Lobas
*/
public enum Orientation {
HORIZONTAL, VERTICAL
}
@@ -0,0 +1,7 @@
package javafx.scene;
/**
* @author Alexander Lobas
*/
public class Node {
}
@@ -0,0 +1,7 @@
package javafx.scene;
/**
* @author Alexander Lobas
*/
public abstract class Parent extends Node {
}
@@ -1,4 +1,7 @@
package javafx.scene;
public class Scene {
public Scene(Parent root, double width, double height) {
// TODO: Auto-generated method stub
}
}
@@ -0,0 +1,9 @@
package javafx.scene.control;
import javafx.scene.layout.Region;
/**
* @author Alexander Lobas
*/
public abstract class Control extends Region {
}
@@ -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<Node> getItems() {
return null; // TODO: Auto-generated method stub
}
}
@@ -0,0 +1,9 @@
package javafx.scene.layout;
import javafx.scene.Parent;
/**
* @author Alexander Lobas
*/
public class Region extends Parent {
}
@@ -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<String>(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;
}
}
-1
View File
@@ -6,7 +6,6 @@
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/resources" isTestSource="false" />
</content>
<orderEntry type="module" module-name="FxBuilderStubs" scope="PROVIDED" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="lang-api" />
@@ -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);