From 20aac63215b171c5deee261e75bf27b622035b5f Mon Sep 17 00:00:00 2001 From: "dziltener@lyrion.ch" Date: Sat, 31 Aug 2013 11:18:54 +0000 Subject: [PATCH] Fixed: Nested run-now (and therefore nested build) won't work. --- project.clj | 4 ++-- src/clojurefx/core.clj | 17 ++++++++++------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/project.clj b/project.clj index 94c3df5..bc40d0e 100644 --- a/project.clj +++ b/project.clj @@ -1,9 +1,9 @@ -(defproject clojurefx "0.0.1" +(defproject clojurefx "0.0.2" :description "Helper functions and probably a wrapper to simplify usage of JavaFX in Clojure. You'll need to have jfxrt.jar in your local maven repository. See [this coderwall protip](https://coderwall.com/p/4yjy1a) for how to make this happen. -**Installation: `[clojurefx \"0.0.1\"]`**" +**Installation: `[clojurefx \"0.0.2\"]`**" :url "https://www.github.com/zilti/clojurefx" :license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} diff --git a/src/clojurefx/core.clj b/src/clojurefx/core.clj index 497fb27..e29e534 100644 --- a/src/clojurefx/core.clj +++ b/src/clojurefx/core.clj @@ -11,16 +11,20 @@ Simple wrapper for Platform/runLater. You should use run-later. (defmacro run-later [& body] `(run-later* (fn [] ~@body))) +(declare ^:dynamic *nested?*) (defn run-now*" A modification of run-later waiting for the running method to return. You should use run-now. " [f] - (let [result (promise)] - (run-later - (deliver result (try (f) (catch Throwable e e)))) - @result)) +(let [result (promise)] + (run-later + (deliver result (try (f) (catch Throwable e e)))) + @result)) (defmacro run-now [& body] - `(run-now* (fn [] ~@body))) + (if *nested?* + `((fn [] ~@body)) + (binding [*nested?* true] + `(run-now* (fn [] ~@body))))) (defn- camel [in] (let [in (name in) @@ -79,7 +83,7 @@ Don't use this yourself; See the macros \"build\" and \"deffx\" below. (if (not (empty? (filter #(= % builder) (get pkgs k)))) (symbol (str k "." (camel (name builder)))))))))) -(defmacro build"This helper macro makes it easier to use the [JavaFX builder classes](http://docs.oracle.com/javafx/2/api/javafx/util/Builder.html). You can also use a map, so it is possible to compose the arguments for the builder over time. +(defmacro build "This helper macro makes it easier to use the [JavaFX builder classes](http://docs.oracle.com/javafx/2/api/javafx/util/Builder.html). You can also use a map, so it is possible to compose the arguments for the builder over time. **Examples:** @@ -90,7 +94,6 @@ Don't use this yourself; See the macros \"build\" and \"deffx\" below. (map? (first args))) `(build ~what ~@(for [entry# (keys (first args))] `(~(symbol (name entry#)) ~((first args) entry#)))) - `(run-now (.. ~(get-qualified what) ~(symbol "create") ~@args ~(symbol "build")))))