aboutsummaryrefslogtreecommitdiff
path: root/src/clojure/contrib/miglayout.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/clojure/contrib/miglayout.clj')
-rw-r--r--src/clojure/contrib/miglayout.clj63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/clojure/contrib/miglayout.clj b/src/clojure/contrib/miglayout.clj
new file mode 100644
index 00000000..3fc5971e
--- /dev/null
+++ b/src/clojure/contrib/miglayout.clj
@@ -0,0 +1,63 @@
+;; Copyright (c) Stephen C. Gilardi. All rights reserved. The use and
+;; distribution terms for this software are covered by the Common Public
+;; License 1.0 (http://opensource.org/licenses/cpl.php) which can be found
+;; in the file CPL.TXT 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
+;;
+;; Clojure support for the MiGLayout layout manager
+;; http://www.miglayout.com/
+;;
+;; Example:
+;;
+;; (require '[clojure.contrib.miglayout.test :as mlt])
+;; (doseq i (range 3) (mlt/run-test i))
+;;
+;; scgilardi (gmail)
+;; Created 5 October 2008
+
+(ns clojure.contrib.miglayout
+ (:import (java.awt Container Component)
+ (net.miginfocom.swing MigLayout))
+ (:use clojure.contrib.miglayout.internal))
+
+(defn miglayout
+ "Adds java.awt.Components to a java.awt.Container with constraints
+ formatted for the MiGLayout layout manager.
+
+ Arguments: container [item constraint*]*
+
+ - container: the container for the specified components, its layout
+ manager will be set to a new instance of MigLayout
+
+ - an inline series of items and constraints--each item may be followed
+ by zero or more constraints.
+
+ Item:
+
+ - An item is either a Component or one of the keywords :layout
+ :column or :row. Constraints for a keyword item affect the entire
+ layout.
+
+ Constraint: string, keyword, vector, or map
+
+ - A string specifies one or more constraints each with zero or more
+ arguments.
+ - A keyword specifies a single constraint without arguments
+ - A vector specifies a single constraint with one or more arguments
+ - A map specifies one or more constraints as keys, each mapped to a
+ single argument"
+ [#^Container container & args]
+ (let [{:keys [keyword-items components]}
+ (apply parse-item-constraints args)]
+ (.setLayout container
+ (MigLayout.
+ (:layout keyword-items)
+ (:column keyword-items)
+ (:row keyword-items)))
+ (doseq [[#^Component component constraints] components]
+ (.add container component constraints))
+ container))