diff options
Diffstat (limited to 'src/clojure/contrib/miglayout')
-rw-r--r-- | src/clojure/contrib/miglayout/example.clj | 60 | ||||
-rw-r--r-- | src/clojure/contrib/miglayout/internal.clj | 120 | ||||
-rw-r--r-- | src/clojure/contrib/miglayout/test.clj | 145 |
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)) -]) |