This is a patched version of seesaw fur use in lwb-gui.
The changes are marked by the tag "== Hack esb-dev ==".
-
A new file reditpane.clj that has a function textarea that constructs a TextEditorPane from RSyntaxTextArea, just like editpane does this for a RTsyntaxTextarea.
-
A new function rscrollable in core.clj that constructs a RTextScrollpane, like scrollable
-
In project.clj we use a patched version of the lib rsyntaxtextarea which must be in the local maven repository.
-
A horrible hack in dialog and custom-dialog in core.clj. The only possibility to set the parent in a dialog is in the constructor. But the original functions did not set the parent component of a dialog. As a result we got a strange behaviour on a Mac: when showing the dialog, the menu bar disappears. In both functions there is a first parameter now, namely the parent of the dialog.
-
In project.clj we set the version to "1.5.1-esb-dev"
-
First build the patched lib rsyntaxtextarea, see https://github.com/esb-dev/RSyntaxTextArea.
-
Leiningen Task jar
-
localrepo
There's now a Google Group for discussion and questions.
Here's a brief tutorial that covers some Seesaw basics. It assumes no knowledge of Swing or Java.
Here's the slides from a Clojure/West 2012 talk on the Seesaw. Best viewed in Chrome or Safari.
See the Seesaw Wiki and the Seesaw API Docs for more detailed docs. Note that the docs in the code (use the doc
function!) are always the most up-to-date and trustworthy.
Seesaw is a library/DSL for constructing user interfaces in Clojure. It happens to be built on Swing, but please don't hold that against it.
Seesaw is compatible with Clojure 1.4, but will probably work fine with 1.3 and 1.5. Maybe even 1.2.
- Swing knowledge is not required for many apps!
- Construct widgets with simple functions, e.g.
(listbox :model (range 100))
- Support for all of Swing's built-in widgets as well as SwingX.
- Support for all of Swing's layout managers as well as MigLayout, and JGoodies Forms
- Convenient shortcuts for most properties. For example,
:background :blue
or:background "#00f"
, or:size [640 :by 480]
. - CSS-style selectors with same syntax as Enlive.
- Unified, extensible event API
- Unified, extensible selection API
- Widget binding, i.e. map changes from one widget into one or more others in a more functional style. Also integrates with Clojure's reference types.
- Graphics
- i18n
- An extensive test suite
There are numerous Seesaw examples in test/seesaw/test/examples.
Here's how you use Seesaw with Leiningen
Install lein
as described and then:
$ lein new hello-seesaw
$ cd hello-seesaw
Add Seesaw to project.clj
(defproject hello-seesaw "1.0.0-SNAPSHOT"
:description "FIXME: write"
:dependencies [[org.clojure/clojure "1.4.0"]
[seesaw "x.y.z"]])
Replace the Seesaw version with whatever the latest version tag is. See below!
Now edit the generated src/hello_seesaw/core.clj
file:
(ns hello-seesaw.core
(:use seesaw.core))
(defn -main [& args]
(invoke-later
(-> (frame :title "Hello",
:content "Hello, Seesaw",
:on-close :exit)
pack!
show!)))
Now run it:
$ lein run -m hello-seesaw.core
NOTE: Here's how you can run against the bleeding edge of Seesaw:
- Clone Seesaw from github. Fork if you like. Switch to the "develop" branch.
- In your Seesaw checkout, run
lein install
to build it. Note that Seesaw uses Leiningen 2 as of 3 NOV 2012! - In your project's
project.clj
file, change the Seesaw version toX.Y.Z-SNAPSHOT
to match whatever's in Seesaw'sproject.clj
. - Run
lein deps
... actually you can just start coding.lein deps
is almost never necessary. - Move along
- Meikel Brandmeyer (kotarak)
- David Brunell (Quantalume)
- Stuart Campbell (harto)
- Michael Frericks
- Jonathan Fischer Friberg (odyssomay)
- Anthony Grimes (Raynes)
- Thomas Karolski (MHOOO)
- Chun-wei Kuo (Domon)
- Vladimir Matveev (dpx-infinity)
- Jeff Rose (rosejn)
- Simon Lundmark (simlun)
- Jake McCrary (jakemcc)
Copyright (C) 2012 Dave Ray
Distributed under the Eclipse Public License, the same as Clojure.