aboutsummaryrefslogtreecommitdiff
path: root/src/clojure/contrib/miglayout
diff options
context:
space:
mode:
Diffstat (limited to 'src/clojure/contrib/miglayout')
-rw-r--r--src/clojure/contrib/miglayout/example.clj60
-rw-r--r--src/clojure/contrib/miglayout/internal.clj120
-rw-r--r--src/clojure/contrib/miglayout/test.clj145
3 files changed, 0 insertions, 325 deletions
diff --git a/src/clojure/contrib/miglayout/example.clj b/src/clojure/contrib/miglayout/example.clj
deleted file mode 100644
index c688e9fe..00000000
--- a/src/clojure/contrib/miglayout/example.clj
+++ /dev/null
@@ -1,60 +0,0 @@
-;; Copyright (c) Stephen C. Gilardi. All rights reserved. The use and
-;; distribution terms for this software are covered by the Eclipse Public
-;; License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) which can
-;; be found in the file epl-v10.html at the root of this distribution. By
-;; using this software in any fashion, you are agreeing to be bound by the
-;; terms of this license. You must not remove this notice, or any other,
-;; from this software.
-;;
-;; clojure.contrib.miglayout.example
-;;
-;; A temperature converter using miglayout. Demonstrates accessing
-;; components by their id constraint.
-;;
-;; scgilardi (gmail)
-;; Created 31 May 2009
-
-(ns clojure.contrib.miglayout.example
- (:import (javax.swing JButton JFrame JLabel JPanel JTextField
- SwingUtilities))
- (:use (clojure.contrib
- [miglayout :only (miglayout components)]
- [swing-utils :only (add-key-typed-listener)])))
-
-(defn fahrenheit
- "Converts a Celsius temperature to Fahrenheit. Input and output are
- strings. Returns \"input?\" if the input can't be parsed as a Double."
- [celsius]
- (try
- (format "%.2f" (+ 32 (* 1.8 (Double/parseDouble celsius))))
- (catch NumberFormatException _ "input?")))
-
-(defn- handle-key
- "Clears output on most keys, shows conversion on \"Enter\""
- [event out]
- (.setText out
- (if (= (.getKeyChar event) \newline)
- (fahrenheit (-> event .getComponent .getText))
- "")))
-
-(defn converter-ui
- "Lays out and shows a Temperature Converter UI"
- []
- (let [panel
- (miglayout (JPanel.)
- (JTextField. 6) {:id :input}
- (JLabel. "\u00b0Celsius") :wrap
- (JLabel.) {:id :output}
- (JLabel. "\u00b0Fahrenheit"))
- {:keys [input output]} (components panel)]
- (add-key-typed-listener input handle-key output)
- (doto (JFrame. "Temperature Converter")
- (.setDefaultCloseOperation JFrame/DISPOSE_ON_CLOSE)
- (.add panel)
- (.pack)
- (.setVisible true))))
-
-(defn main
- "Invokes converter-ui in the AWT Event thread"
- []
- (SwingUtilities/invokeLater converter-ui))
diff --git a/src/clojure/contrib/miglayout/internal.clj b/src/clojure/contrib/miglayout/internal.clj
deleted file mode 100644
index e06bd2e0..00000000
--- a/src/clojure/contrib/miglayout/internal.clj
+++ /dev/null
@@ -1,120 +0,0 @@
-;; Copyright (c) Stephen C. Gilardi. All rights reserved. The use and
-;; distribution terms for this software are covered by the Eclipse Public
-;; License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) which can
-;; be found in the file epl-v10.html at the root of this distribution. By
-;; using this software in any fashion, you are agreeing to be bound by the
-;; terms of this license. You must not remove this notice, or any other,
-;; from this software.
-;;
-;; clojure.contrib.miglayout.internal
-;;
-;; Internal functions for 'clojure.contrib.miglayout
-;;
-;; scgilardi (gmail)
-;; Created 13 October 2008
-
-(ns clojure.contrib.miglayout.internal
- (:import (clojure.lang RT Reflector)
- java.awt.Component
- javax.swing.JComponent)
- (:use (clojure.contrib
- [core :only (new-by-name)]
- [except :only (throwf)]
- [fcase :only (fcase)]
- [java-utils :only (as-str)])))
-
-(def MigLayout "net.miginfocom.swing.MigLayout")
-(def LayoutCallback "net.miginfocom.layout.LayoutCallback")
-(def ConstraintParser "net.miginfocom.layout.ConstraintParser")
-
-(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, maps, and/or sets."
- [c]
- [[", "]
- (fcase #(%1 %2) c
- string? [c]
- 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)))])
-
-(defn format-constraints
- "Returns a string representing all the constraints for one keyword-item
- or component formatted for miglayout."
- [& constraints]
- (let [formatted
- (apply str
- (map as-str
- (rest (reduce concat []
- (mapcat format-constraint constraints)))))]
-;; (prn formatted)
- formatted))
-
-(defn component?
- "Returns true if x is a java.awt.Component"
- [x]
- (instance? Component x))
-
-(defn constraint?
- "Returns true if x is not a keyword-item or component"
- [x]
- (not
- (or (component? x)
- (#{:layout :column :row} x))))
-
-(defn parse-item-constraints
- "Iterates over args and builds a map containing values associated with
- :keywords and :components. The value for :keywords is a map from keyword
- items to constraints strings. The value for :components is a vector of
- vectors each associating a component with its constraints string."
- [& args]
- (loop [[item & args] args
- item-constraints {:keywords {} :components []}]
- (if item
- (let [[constraints args] (split-with constraint? args)]
- (recur args
- (update-in
- item-constraints
- [(if (component? item) :components :keywords)]
- conj [item (apply format-constraints constraints)])))
- item-constraints)))
-
-(defn parse-component-constraint
- "Parses a component constraint string returning a CC object"
- [constraint]
- (Reflector/invokeStaticMethod
- ConstraintParser "parseComponentConstraint" (into-array [constraint])))
-
-(defn add-components
- "Adds components with constraints to a container"
- [#^JComponent container components]
- (loop [[[#^Component component constraint] & components] components
- id-map nil]
- (if component
- (let [cc (parse-component-constraint constraint)]
- (.add container component cc)
- (recur
- components
- (if-let [id (.getId cc)]
- (assoc id-map (keyword id) component)
- id-map)))
- (doto container (.putClientProperty ::components id-map)))))
-
-(defn get-components
- "Returns a map from id to component for all components with an id"
- [#^JComponent container]
- (.getClientProperty container ::components))
-
-(defn do-layout
- "Attaches a MigLayout layout manager to container and adds components
- with constraints"
- [#^JComponent container layout column row components]
- (doto container
- (.setLayout (new-by-name MigLayout layout column row))
- (add-components components)))
diff --git a/src/clojure/contrib/miglayout/test.clj b/src/clojure/contrib/miglayout/test.clj
deleted file mode 100644
index dec12ba8..00000000
--- a/src/clojure/contrib/miglayout/test.clj
+++ /dev/null
@@ -1,145 +0,0 @@
-;; Copyright (c) Stephen C. Gilardi. All rights reserved. The use and
-;; distribution terms for this software are covered by the Eclipse Public
-;; License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) which can
-;; be found in the file epl-v10.html at the root of this distribution. By
-;; using this software in any fashion, you are agreeing to be bound by the
-;; terms of this license. You must not remove this notice, or any other,
-;; from this software.
-;;
-;; clojure.contrib.miglayout.test
-;;
-;; Test/example for clojure.contrib.miglayout
-;;
-;; scgilardi (gmail)
-;; Created 5 October 2008
-
-(ns clojure.contrib.miglayout.test
- (:import (javax.swing JButton JFrame JLabel JList JPanel
- JScrollPane JTabbedPane JTextField JSeparator))
- (:use clojure.contrib.miglayout))
-
-(def tests)
-
-(defn run-test
- [index]
- (let [panel ((tests index) (JPanel.))]
- (println index (components panel))
- (doto (JFrame. (format "MigLayout Test %d" index))
- (.add panel)
- (.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
- (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
- ;; http://www.devx.com/java/Article/38017/1954
-
- ;; constraints as strings exclusively
- (fn test1
- [panel]
- (miglayout panel
- :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]"
- (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) {:id :firstname}
- (label "Surname") [:gap :unrelated]
- (text-field) {:id :surname} :wrap
- (label "Address")
- (text-field) {:id :address} :span :grow))
-])