diff options
author | scgilardi <scgilardi@gmail.com> | 2009-03-13 06:23:48 +0000 |
---|---|---|
committer | scgilardi <scgilardi@gmail.com> | 2009-03-13 06:23:48 +0000 |
commit | dba39786323602b548faad6088a5f2ef72b3430d (patch) | |
tree | 0d4025cbe5d8cc8d941d0ffe63a8baf73cba0da0 /src/clojure/contrib/miglayout | |
parent | 08cfc276dfc60d9a45b4dff7581597dd23682bfb (diff) |
miglayout: add support for set as a group of constraints that can be named, bound, etc. update tests with more examples and some helper functions
Diffstat (limited to 'src/clojure/contrib/miglayout')
-rw-r--r-- | src/clojure/contrib/miglayout/internal.clj | 16 | ||||
-rw-r--r-- | src/clojure/contrib/miglayout/test.clj | 134 |
2 files changed, 107 insertions, 43 deletions
diff --git a/src/clojure/contrib/miglayout/internal.clj b/src/clojure/contrib/miglayout/internal.clj index 00be8785..77476086 100644 --- a/src/clojure/contrib/miglayout/internal.clj +++ b/src/clojure/contrib/miglayout/internal.clj @@ -17,10 +17,12 @@ (:import (java.awt Component)) (:use (clojure.contrib except fcase))) +(declare format-constraints) + (defn format-constraint "Returns a vector of vectors representing one or more constraints separated by commas. Constraints may be specified in Clojure using - strings, keywords, vectors, and/or maps." + strings, keywords, vectors, maps, and/or sets." [c] [[", "] (fcase #(%1 %2) c @@ -28,6 +30,7 @@ keyword? [c] vector? (interpose " " c) map? (apply concat (interpose [", "] (map #(interpose " " %) c))) + set? (apply concat (interpose [", "] (map format-constraints c))) (throwf IllegalArgumentException "unrecognized constraint: %s (%s)" c (class c)))]) @@ -40,10 +43,13 @@ "Returns a string representing all the constraints for one keyword-item or component formatted for miglayout." [& constraints] - (apply str - (map the-str - (rest (reduce concat [] - (mapcat format-constraint constraints)))))) + (let [formatted + (apply str + (map the-str + (rest (reduce concat [] + (mapcat format-constraint constraints)))))] + ;(prn formatted) + formatted)) (defn component? "Returns true if x is a java.awt.Component" diff --git a/src/clojure/contrib/miglayout/test.clj b/src/clojure/contrib/miglayout/test.clj index 888285c0..abdc89c4 100644 --- a/src/clojure/contrib/miglayout/test.clj +++ b/src/clojure/contrib/miglayout/test.clj @@ -27,15 +27,31 @@ (.pack) (.setVisible true))) +(defn label + "Returns a swing label" + [text] + (JLabel. text)) + +(defn text-field + "Returns a swing text field" + ([] (text-field 10)) + ([width] + (JTextField. width))) + +(defn sep + "Returns a swing separator" + [] + (JSeparator.)) + (def tests [ (fn test0 [panel] (miglayout panel - (JLabel. "Hello") - (JLabel. "World") {:gap :unrelated} - (JTextField. 10) :wrap - (JLabel. "Bonus!") + (label "Hello") + (label "World") {:gap :unrelated} + (text-field) :wrap + (label "Bonus!") (JButton. "Bang it") {:wmin :button :grow :x :span 2} :center)) ;; test1 and test2 are based on code from @@ -45,42 +61,84 @@ (fn test1 [panel] (miglayout panel - :column "[right]" - (JLabel. "General") "split, span" - (JSeparator.) "growx, wrap" - (JLabel. "Company") "gap 10" - (JTextField. "") "span, growx" - (JLabel. "Contact") "gap 10" - (JTextField. "") "span, growx, wrap" - (JLabel. "Propeller") "split, span, gaptop 10" - (JSeparator.) "growx, wrap, gaptop 10" - (JLabel. "PTI/kW") "gapx 10, gapy 15" - (JTextField. 10) - (JLabel. "Power/kW") "gap 10" - (JTextField. 10) "wrap" - (JLabel. "R/mm") "gap 10" - (JTextField. 10) - (JLabel. "D/mm") "gap 10" - (JTextField. 10))) + :column "[right]" + (label "General") "split, span" + (sep) "growx, wrap" + (label "Company") "gap 10" + (text-field "") "span, growx" + (label "Contact") "gap 10" + (text-field "") "span, growx, wrap" + (label "Propeller") "split, span, gaptop 10" + (sep) "growx, wrap, gaptop 10" + (label "PTI/kW") "gapx 10, gapy 15" + (text-field) + (label "Power/kW") "gap 10" + (text-field) "wrap" + (label "R/mm") "gap 10" + (text-field) + (label "D/mm") "gap 10" + (text-field))) ;; the same constraints as strings, keywords, vectors, and maps (fn test2 [panel] (miglayout panel - :column "[right]" - (JLabel. "General") "split, span" - (JSeparator.) :growx :wrap - (JLabel. "Company") [:gap 10] - (JTextField. "") :span :growx - (JLabel. "Contact") [:gap 10] - (JTextField. "") :span :growx :wrap - (JLabel. "Propeller") :split :span [:gaptop 10] - (JSeparator.) :growx :wrap [:gaptop 10] - (JLabel. "PTI/kW") {:gapx 10 :gapy 15} - (JTextField. 10) - (JLabel. "Power/kW") [:gap 10] - (JTextField. 10) :wrap - (JLabel. "R/mm") [:gap 10] - (JTextField. 10) - (JLabel. "D/mm") [:gap 10] - (JTextField. 10)))]) + :column "[right]" + (label "General") "split, span" + (sep) :growx :wrap + (label "Company") [:gap 10] + (text-field "") :span :growx + (label "Contact") [:gap 10] + (text-field "") :span :growx :wrap + (label "Propeller") :split :span [:gaptop 10] + (sep) :growx :wrap [:gaptop 10] + (label "PTI/kW") {:gapx 10 :gapy 15} + (text-field) + (label "Power/kW") [:gap 10] + (text-field) :wrap + (label "R/mm") [:gap 10] + (text-field) + (label "D/mm") [:gap 10] + (text-field))) + + ;; the same constraints using symbols to name groups of constraints + (fn test3 + [panel] + (let [g [:gap 10] + gt [:gaptop 10] + gxs #{:growx :span} + gxw #{:growx :wrap} + gxy {:gapx 10 :gapy 15} + right "[right]" + ss #{:split :span} + w :wrap] + (miglayout panel + :column right + (label "General") ss + (sep) gxw + (label "Company") g + (text-field "") gxs + (label "Contact") g + (text-field "") gxs + (label "Propeller") ss gt + (sep) gxw g + (label "PTI/kW") gxy + (text-field) + (label "Power/kW") g + (text-field) w + (label "R/mm") g + (text-field) + (label "D/mm") g + (text-field)))) + + (fn test4 + [panel] + (miglayout panel + (label "First Name") + (text-field) + (label "Surname") [:gap :unrelated] + (text-field) :wrap + (label "Address") + (text-field) :span :grow)) + +]) |