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:
@@ -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>
|
||||
|
||||
|
||||
+8
-3
@@ -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
|
||||
}
|
||||
}
|
||||
+13
@@ -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
|
||||
}
|
||||
}
|
||||
+13
@@ -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
|
||||
}
|
||||
}
|
||||
+13
@@ -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
|
||||
}
|
||||
}
|
||||
+13
@@ -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
|
||||
}
|
||||
}
|
||||
+12
@@ -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
|
||||
}
|
||||
}
|
||||
+13
@@ -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
|
||||
}
|
||||
}
|
||||
+10
@@ -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 {
|
||||
}
|
||||
+76
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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
-2
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user