diff --git a/src/clojurefx/AppWrap.java b/src/clojurefx/AppWrap.java
index fcd0cc5..f6ecdca 100644
--- a/src/clojurefx/AppWrap.java
+++ b/src/clojurefx/AppWrap.java
@@ -10,7 +10,7 @@ import javafx.stage.Stage;
*/
public class AppWrap extends Application {
- String ns, fn;
+ private String ns, fn;
public AppWrap(String ns, String fn) {
super();
diff --git a/src/clojurefx/clojurefx.clj b/src/clojurefx/clojurefx.clj
index 8ef2bc0..47111cb 100644
--- a/src/clojurefx/clojurefx.clj
+++ b/src/clojurefx/clojurefx.clj
@@ -2,40 +2,41 @@
(:require [taoensso.timbre :as timbre]
[clojure.java.io :as io]
[clojure.zip :as zip]
- [clojurefx.protocols :as p]
- [clojure.java.io :refer :all])
- (:import (clojurefx AppWrap)))
+ [clojurefx.protocols :as p]))
+
+;; Fuck you, whoever made that API design.
+(defonce force-toolkit-init (javafx.embed.swing.JFXPanel.))
+
+(timbre/refer-timbre)
+
+(import '(clojurefx AppWrap)
+ '(javafx.scene.control Labeled Label TextField TextArea CheckBox ComboBox Menu MenuItem MenuBar
+ MenuButton ContextMenu ToolBar SplitPane ScrollPane Accordion
+ TitledPane TabPane Tab TableColumnBase Labeled ButtonBase)
+ '(javafx.scene Node Scene Parent)
+ '(javafx.scene.layout Pane VBox)
+ '(javafx.stage Stage)
+ '(javafx.collections FXCollections ObservableList)
+ '(javafx.css Styleable)
+ '(javafx.event Event ActionEvent EventTarget)
+ '(java.util Collection))
(defn gen-stage! [nspc fun]
(let [appwrap (AppWrap. nspc fun)]
- (.launch appwrap)))
+ (.launch appwrap nil)))
;; ## Threading helpers
-(defn run-later*"
- Simple wrapper for Platform/runLater. You should use run-later.
- " [f]
- (assert (instance? Runnable f))
- (javafx.application.Platform/runLater f)
- nil)
+(defmacro run-later "Simple wrapper for Platform/runLater." [& body]
+ `(javafx.application.Platform/runLater (fn [] ~@body)))
-(defmacro run-later [& body]
- `(run-later* (fn [] ~@body)))
-
-(defn run-now* "
- A modification of run-later waiting for the running method to return. You should use run-now.
- " [f]
- (if (javafx.application.Platform/isFxApplicationThread)
- (apply f [])
- (let [result (promise)]
- (run-later
- (deliver result (try (f) (catch Throwable e e))))
- @result)))
-
-(defmacro run-now "
- Runs the code on the FX application thread and waits until the return value is delivered.
- " [& body]
- `(run-now* (fn [] ~@body)))
+(defmacro run-now "Runs the code on the FX application thread and waits until the return value is delivered."
+ [& body]
+ `(if (javafx.application.Platform/isFxApplicationThread)
+ (apply (fn [] ~@body) [])
+ (let [result (promise)]
+ (run-later (deliver result (try (fn [] ~@body) (catch Throwable e e))))
+ @result)))
(defn collize "
Turns the input into a collection, if it isn't already.
@@ -44,19 +45,6 @@
input
(list input)))
-(timbre/refer-timbre)
-
-(import (javafx.scene.control Labeled Label TextField TextArea CheckBox ComboBox Menu MenuItem MenuBar
- MenuButton ContextMenu ToolBar SplitPane ScrollPane Accordion
- TitledPane TabPane Tab TableColumnBase Labeled ButtonBase)
- (javafx.scene Node Scene Parent)
- (javafx.scene.layout Pane VBox)
- (javafx.stage Stage)
- (javafx.collections FXCollections ObservableList)
- (javafx.css Styleable)
- (javafx.event Event ActionEvent EventTarget)
- (java.util Collection))
-
(defn pred-protocol [proto check]
(let [impls (keys (proto :impls))
check (type check)]
diff --git a/src/clojurefx/factory.clj b/src/clojurefx/factory.clj
index b4dd6b0..4d4c160 100644
--- a/src/clojurefx/factory.clj
+++ b/src/clojurefx/factory.clj
@@ -53,10 +53,6 @@
(trace "Key:" k " " (type k) "Value:" v " " (type v))
(when (nil? translation)
(throw (Exception. (str "Property" k "not available in translation map."))))
- ;; (when-not ((pred-substitute argument) v)
- ;; (throw (Exception. (str "Input type" v "is not compatible with expected type for" k))))
- ;; (when-not ((pred-substitute parent) node)
- ;; (throw (Exception. (str "Property" k "not available for class" (class node)))))
((setter translation) node v)))
node)
@@ -73,14 +69,6 @@
eval)
(apply dissoc props mandatory))))
-;; (ann resolv-o-matic [(U String Keyword Symbol Class) -> Class])
-;; (defn resolv-o-matic [thing]
-;; (cond
-;; (symbol? thing) (ns-resolve (the-ns 'clojurefx.clojurefx) thing)
-;; (keyword? thing) (recur (name thing))
-;; (string? thing) (recur (symbol thing))
-;; :else thing))
-
(defn compile
([args] (compile args []))
([[obj & other] accu]
diff --git a/test/clojurefx/clojurefx_test.clj b/test/clojurefx/clojurefx_test.clj
deleted file mode 100644
index cce9269..0000000
--- a/test/clojurefx/clojurefx_test.clj
+++ /dev/null
@@ -1,45 +0,0 @@
-(ns clojurefx.clojurefx-test
- (:refer-clojure :exclude [compile meta with-meta])
- (:require [clojurefx.factory :as factory]
- [clojurefx.protocols :refer :all])
- (:use midje.sweet
- clojurefx.clojurefx))
-
-(import (javafx.scene.layout VBox)
- (javafx.scene.control ScrollPane Button Label))
-
-;;## Element testing
-
-;;## Event testing
-;;(def button (new Button))
-(def button (atom nil))
-(def fired? (atom false))
-(facts "Events"
- (fact "Creating button with event handler"
- (class (reset! button (factory/compile [Button {:action (fn [_] (reset! fired? true))}]))) => javafx.scene.control.Button)
- (fact "Firing the event and checking the result"
- (do (fire! @button)
- @fired?) => true))
-
-;;## IdMapper
-(def example-graph
- (factory/compile
- [VBox {:id "topBox"
- :children [Button {:id "button"
- :text "Close"}
- ScrollPane {:content [Label {:id "label"
- :text "This rocks."}]}]}]))
-
-(facts "Id mapper"
- (fact "Getting a top-level entry"
- (type (get-node-by-id example-graph "topBox")) => javafx.scene.layout.VBox)
- (fact "Getting an entry in an FXParent"
- (type (get-node-by-id example-graph "button")) => javafx.scene.control.Button)
- (fact "Getting an entry in an FXParent and an FXContainer"
- (type (get-node-by-id example-graph "label")) => javafx.scene.control.Label)
- (fact "Fetching the whole id map."
- (map? (get-id-map example-graph)) => true)
- (fact "Fetching label text from id-map."
- (-> (get-id-map example-graph)
- :label
- get-value) => "This rocks."))
diff --git a/test/clojurefx/exampleWindow.fxml b/test/clojurefx/exampleWindow.fxml
new file mode 100644
index 0000000..47ff9de
--- /dev/null
+++ b/test/clojurefx/exampleWindow.fxml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/clojurefx/factory_test.clj b/test/clojurefx/factory_test.clj
deleted file mode 100644
index ca663a7..0000000
--- a/test/clojurefx/factory_test.clj
+++ /dev/null
@@ -1,52 +0,0 @@
-(ns clojurefx.factory-test
- (:refer-clojure :exclude [compile meta with-meta])
- (:require [clojurefx.protocols :refer :all])
- (:use midje.sweet
- clojurefx.factory)
- (:import (javafx.scene.control Button Label ScrollPane)
- (javafx.scene.layout VBox)))
-
-(def fxml-node (atom nil))
-
-(facts "FXML loading"
- (fact "Load the fxml file"
- (type (reset! fxml-node (load-fxml "resources/test.fxml"))) => javafx.scene.layout.VBox)
- (fact "Get VBox id"
- (.getId @fxml-node) => "topBox"))
-
-(def example-graph
- [VBox {:id "topBox"
- :children [Button {:id "button"
- :text "Close"}
- ScrollPane {:content [Label {:id "label"
- :text "This rocks."}]}]}])
-
-(def example-graph2
- [VBox {:id "topBox"
- :children [Button {:id "button"
- :text "Close"}
- (new javafx.scene.control.Label "Precompiled")
- Button {:id "button2"
- :text "OK"}
- ScrollPane {:content [Label {:id "label"
- :text "This rocks."}]}]}])
-
-(def example-graph3
- [VBox {:id "topBox"
- :children [Button {:id "button"
- :text "Close"}]}])
-
-(def scene-graph (atom nil))
-
-(facts "Vector compilation"
- (fact "Simple element"
- (type (compile [Label {:text "Hello ClojureFX"}])) => javafx.scene.control.Label)
- (fact "Simple precompiled element"
- (type (compile [(new Label "Hello Precompiled")])) => javafx.scene.control.Label)
- (fact "Nested structure"
- (type (reset! scene-graph (compile example-graph))) => javafx.scene.layout.VBox
- (get-id @scene-graph) => "topBox")
- (fact "Partially precompiled nested structure"
- (type (reset! scene-graph (compile example-graph2))) => javafx.scene.layout.VBox)
- (fact "Nested structure where FXParent only has one child"
- (type (reset! scene-graph (compile example-graph3))) => javafx.scene.layout.VBox))
diff --git a/test/resources/test.fxml b/test/resources/test.fxml
deleted file mode 100644
index 81750ce..0000000
--- a/test/resources/test.fxml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-