Hi Ralph, First off, nice post! We need more of these types of tutorials on GUI in clojure, they're very useful.
On make-login-widget you can probably do a doto when you do this part: > (.addWidget layout (WLabel. "Login:") 0 0 ) > (.addWidget layout login-field 0 1 ) > (.addWidget layout (WLabel. "Password:") 1 0 ) > (.addWidget layout password-field 1 1) > (.addWidget layout submit-button 2 0 1 2) Can be like (doto layout (add ) (add)) I don't have any experience using Jwt, but with regard to listeners and such, I've been using a 'continuation passing' style when writing little toy applications using swing. I guess the best way to explain it is that rather than using .trigger on the signal in the do-login function block, you would just apply a passed in (possibly anonymous) function. I can give an example: Think of this as pseudocode that may or may not run, as I only have Swing for ui on this computer. (defn make-login-form [logged-in-fn wrong-creds-fn] (let [layout (WGridLayout.) container (WContainerWidget.) password-field (doto (WLineEdit. container) (.setEchoMode WLineEdit$EchoMode/Password ) ) password #(.getText password-field) login-field (WLineEdit. container) login #(.getText login-field) do-login (fn [evt] (if (authenticate (login) (password)) (logged-in-fn) (wrong-creds-fn))) submit-button (WPushButton. "Login")] (-> submit-button .clicked (.addListener container ( create-listener [mouse-event] (do-login mouse-event)))) (doto layout (.addWidget (WLabel. "Login:") 0 0 ) (.addWidget login-field 0 1 ) (.addWidget (WLabel. "Password:") 1 0 ) (.addWidget password-field 1 1) (.addWidget submit-button 2 0 1 2)) (.setLayout container layout) (.setFocus login-field) container)) (defn make-login-app ([env continuation] (let [wapp (new WApplication env) root (.getRoot wapp) result-text (WText. "") user nil dialog (WDialog. "test") dialog-container (.getContents dialog) app-screen (make-app-screen) form (make-login-form #(do (.remove dialog) (.setText (-> app-screen .getLayout (.getItemAt 0) .getWidget) "Logged in!") (continuation)) #(do (.setText (-> app-screen .getLayout (.getItemAt 0) .getWidget) "Wrong credentials!")))] (.setTitle wapp "Login Example") (doto dialog (.. getContents (addWidget form)) .show) (.addWidget root app-screen) wapp)) ([env] (make-login-app env identity))) And so then, to get a dialog that is like a sequence of panels, you can go through and do like: (make-login-app env make-next-widget) Anyway, is not particularly any better than using signal passing technique, but is another approach that you might consider in your application. On Sep 4, 11:01 am, rb <raphi...@gmail.com> wrote: > Hi, > > In using the Jwt library, for which I only found examples in object > oriented languages that structure the code in class definitions and do > heavy usage of instance variables, I was in a situation where I > wondered how I could best structure my code. > > With help on the IRC channel I got to a working solution which I > document in a blog post > athttp://www.nsa.be/index.php/eng/Blog/From-OO-to-Lisp-style-structurin... > > I'm interested in feedback and advices for improvements > > Thanks > > Raph --~--~---------~--~----~------------~-------~--~----~ 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 Note that posts from new members are moderated - please be patient with your first post. 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 -~----------~----~----~----~------~----~------~--~---