aboutsummaryrefslogtreecommitdiff
path: root/src/clojure/contrib/miglayout/internal/internal.clj
blob: 045714b6d3f4a19ad5847306141fe1f6424acc3e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
;;  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.
;;
;;  internal.clj
;;
;;  Internal functions for 'clojure.contrib.miglayout

(ns clojure.contrib.miglayout.internal
  (:import (java.awt Container Component)))

(defn format-constraints
  "Formats constraints expressed as a series of strings, keywords, vectors
  and/or maps into strings for miglayout."
  [& constraints]
  (loop [[c & cs] constraints
         cv []]
    (if c
      (recur cs (concat cv [", "]
        (cond (or (string? c) (keyword? c))
              [c]
              (vector? c)
              (interpose " " c)
              (map? c)
              (apply concat (interpose [", "] (map #(interpose " " %) c)))
              :else
              (throw
               (IllegalArgumentException.
                (format "unrecognized constraint: %s (%s)" c (class c)))))))
      (apply str (map #((if (keyword? %) name str) %) (rest cv))))))

(defn component?
  [x]
  (instance? Component x))

(defn keyword-item?
  [x]
  (#{:layout :column :row} x))

(defn item?
  [x]
  (or (component? x) (keyword-item? x)))

(defn constraint?
  [x]
  (not (item? x)))