Itay,

I took a look at Waterfront and it seems to have a lot of potential.
Keep me and the group updated on your future work.

I have also been working on a GUI application in Clojure and I share
your perspective on the challenges of designing a functional GUI.  I
am definitely intrigued by the application context pattern and I am
going to take a look at it for incorporation in my design.

Thanks,
Kevin Albrecht

On Feb 24, 6:04 am, Itay Maman <itay.ma...@gmail.com> wrote:
> I've been silently following Clojure (and this group) for several
> months now.Somewhere around December I started working on a Clojure
> editor/REPL written in Clojure. This effort evolved into the
> Waterfront project which is now available on sourceforge (http://
> sourceforge.net/project/showfiles.php?group_id=249246).
>
> Waterfront's Highlights:
>
> * CTRL+E: Eval current selection, or the whole file if the selection
> is empty
> * Edit -> Eval as you type: When turned on (default) periodically
> evaluates your code. Boosts productivity as many errors are detected
> on the spot.
> * Eval-ed code can inspect/mutate Waterfront by accessing the *app*
> variable. For instance, if you eval this expression,
> ((*app* :change) :font-name "Arial"), you will choose "Arial" as the
> UI font.
> * Eval-ed code can inspect the currently edited Clojure program. For
> instance, if you eval this expression, ((*app* :visit) #(when (= (str
> (first %1)) "cons") (println %1))), the output window will show all
> calls, made by your code, to the cons function.
> * Syntax and Evaluation errors are displayed on: (1) The Problems
> window; (2) The line-number panel, as red markers.
> * Source -> Generate -> Proxy: Generates a proxy for the given list of
> super-types, with stub implementations for all abstract methods.
> * F1: Shows the doc (as per Clojure's (doc x) function) of the
> identifier under the caret.
> * Source -> Reflect: Shows the synopsis of a Java class when the caret
> stands on a class symbol (e.g.: java.awt.Color).
> * CTRL+Space: Token-based auto completion.
> * Full parenthesis matching.
> * An extensible plugin architecture.
> * Other goodies such as undo/redo, toggle comment, recently opened
> files, indent/unindent, Tab is *always* two spaces, ...
>
> In order to get started, you need to
>   (1) Download the waterfront zip file 
> from:http://sourceforge.net/project/showfiles.php?group_id=249246.
>   (2) Unpack it into a local directory.
>   (3) Edit wf.bat: fix the path to clojure.jar according to its
> location on your machine.
>
> Personally, this effort was quite interesting. Writing GUI
> applications in a functional language is sometimes a challenging task
> (at least if you want your Clojure code not to be a transliteration of
> Java code…).  I used a pattern the "application context" pattern: an
> immutable map describing the application's current state that is
> passed around. This made it possible for most of Waterfront's code to
> be purely functional. Consequently, plugins can accomplish a lot with
> just a handful of lines. Many plugins span about 60 lines of code.
> Vast majority of them are less than 200 LOC. The main module, ui.clj,
> that implements the underlying engine is also less than 200 LOC. I
> think this is a very good indication to Clojure's power.
>
> Hope you'll find it useful. I'd be happy if anyone would like to join
> and contribute to Waterfront. Your feedback, either on-line or
> offline, will be highly appreciated.
>
> --
> Itay Mamanhttp://javadots.blogspot.com
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to