first commit

This commit is contained in:
Daniel Ziltener 2013-08-28 18:15:12 +00:00
parent 590e7a940a
commit 8445c0d07a
8 changed files with 149 additions and 0 deletions

2
.gitignore vendored
View file

@ -4,3 +4,5 @@ pom.xml
/classes/ /classes/
/targets/ /targets/
.lein-deps-sum .lein-deps-sum
*~
*class

12
.lein-repl-history Normal file
View file

@ -0,0 +1,12 @@
(def blahref '{a 1 b 2})
(get blahref 'a)
(def x (symbol "abc"))
(def y (symbol "abc"))
(= x y)
(split "abc-def" #"-")
(use 'clojure.string)
(split "abc-def" #"-")
(first "bvc")
(apply str (list "abc" "Def"))
(cons (list 1 2 3) 4)
(quit)

3
doc/intro.md Normal file
View file

@ -0,0 +1,3 @@
# Introduction to clojurefx
TODO: write [great documentation](http://jacobian.org/writing/great-documentation/what-to-write/)

7
project.clj Normal file
View file

@ -0,0 +1,7 @@
(defproject clojurefx "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.5.1"]
[com.oracle/javafx-runtime "2.2.0"]])

116
src/clojurefx/core.clj Normal file
View file

@ -0,0 +1,116 @@
(ns clojurefx.core
(:require [clojure.string :as str]))
(defn run-later*
[f]
(javafx.application.Platform/runLater f))
(defmacro run-later
[& body]
`(run-later* (fn [] ~@body)))
(defn run-now*
[f]
(let [result (promise)]
(run-later
(deliver result (try (f) (catch Throwable e e))))
@result))
(defmacro run-now
[& body]
`(run-now* (fn [] ~@body)))
(defn event-handler*
[f]
(reify javafx.event.EventHandler
(handle [this e] (f e))))
(defmacro event-handler [arg & body]
`(event-handler* (fn ~arg ~@body)))
(def build-reference
'{accordion "javafx.scene.control"
affine "javafx.scene.transform"
anchor "javafx.scene.layout"
border-pane "javafx.scene.layout"
arc "javafx.scene.shape"
arc-to "javafx.scene.shape"
blend "javafx.scene.effect"
bloom "javafx.scene.effect"
box-blur "javafx.scene.effect"
area-chart "javafx.scene.chart"
bar-chart "javafx.scene.chart"
bubble-chart "javafx.scene.chart"
axis "javafx.scene.chart"
audio-clip "javafx.scene.media"
bounding-box "javafx.geometry"})
(defn- camel [in]
(let [in (name in)
in (str/split in #"-")
in (map #(if (= (str (first %)) (str/upper-case (first %)))
% (str/capitalize %)) in)
in (conj (into [] in) "Builder")]
(apply str in)))
(defn- get-qualified [builder]
(let [pkgs {"javafx.scene.control" '[accordion button cell check-box check-box-tree-item check-menu-item choice-box
color-picker combo-box context-menu custom-menu-item hyperlink
indexed-cell index-range label list-cell list-view menu-bar menu menu-button menu-item
pagination password-field popup-control progress-bar progress-indicator
radio-button radio-button-menu-item scroll-bar scroll-pane separator
separator-menu-item slider split-menu-button split-pane tab table-cell table-column
table-position table-row table-view tab-pane text-area text-field tree-cell
titled-pane toggle-button toggle-group tool-bar tooltip tree-item tree-view]
"javafx.scene.control.cell" '[check-box-list-cell check-box-table-cell check-box-tree-cell
choice-box-list-cell choice-box-table-cell choice-box-tree-cell
combo-box-list-cell combo-box-table-cell combo-box-tree-cell
text-field-list-cell text-field-table-cell text-field-tree-cell
property-value-factory]
"javafx.scene.layout" '[anchor border-pane column-constraints flow-pane grid-pane h-box pane region
row-constraints stack-pane tile-pane v-box]
"javafx.scene.text" '[text font]
"javafx.scene.shape" '[arc arc-to circle close-path cubic-curve cubic-curve-to ellipse
h-line-to line line-to move-to path polygon polyline quad-curve quad-curve-to
rectangle SVG-path b-line-to]
"javafx.scene.canvas" '[canvas]
"javafx.scene.image" '[image-view]
"javafx.scene.input" '[clipboard-content key-character-combination key-code-combination mnemonic]
"javafx.scene.effect" '[blend bloom box-blur color-adjust color-input displacement-map dropshadow float-map
gaussian-blur glow image-input inner-shadow lighting motion-blur perspective-transform
reflection sepia-tone shadow]
"javafx.scene.paint" '[color image-pattern linear-gradient radial-gradient stop]
"javafx.scene.chart" '[chart area-chart bar-chart line-chart bubble-chart pie-chart scatter-chart
stacked-area-chart stacked-bar-chart x-y-chart
axis category-axis number-axis value-axis]
"javafx.scene.media" '[audio-clip media media-player media-view]
"javafx.scene.transform" '[affine rotate scale shear translate]
"javafx.scene.web" '[HTML-editor prompt-data web-engine web-view]
"javafx.scene" '[scene group image-cursor perspective-camera snapshot-parameters]
"javafx.animation" '[fade-transition fill-transition parallel-transition path-transition pause-transition
rotate-transition scale-transition sequential-transition stroke-transition timeline
translate-transition]
"javafx.stage" '[stage directory-chooser file-chooser popup]
"javafx.geometry" '[bounding-box dimension-2D insets point-2D point-3D rectangle-2D]
"javafx.embed.swt" '[custom-transfer]
"javafx.embed.swing" '[JFX-panel-builder]}
builder (symbol builder)]
(first (filter (comp not nil?) (for [k (keys pkgs)]
(if (not (empty? (filter #(= % builder) (get pkgs k))))
(symbol (str k "." (camel (name builder))))))))))
(defmacro build [what & args]
`(.. ~(get-qualified what) create
~@args
build))
(defmacro deffx [name what & args]
`(def ~name
(build ~what ~@args)))

1
target/repl/repl-port Normal file
View file

@ -0,0 +1 @@
38760

View file

@ -0,0 +1 @@
([:dependencies ([org.clojure/clojure "1.5.1"] [com.oracle/javafx-runtime "2.2.0"] [org.clojure/tools.nrepl "0.2.3"] [clojure-complete/clojure-complete "0.2.3"])])

View file

@ -0,0 +1,7 @@
(ns clojurefx.core-test
(:require [clojure.test :refer :all]
[clojurefx.core :refer :all]))
(deftest a-test
(testing "FIXME, I fail."
(is (= 0 1))))