Skip to content
This repository has been archived by the owner on Aug 9, 2019. It is now read-only.

Commit

Permalink
added GUI components to choose a presentation file
Browse files Browse the repository at this point in the history
  • Loading branch information
fukamachi committed Sep 21, 2010
1 parent 221473d commit 84b1035
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 19 deletions.
10 changes: 2 additions & 8 deletions README.markdown
Expand Up @@ -39,15 +39,9 @@ See _run.clj_.

## Export to PDF

$ lein run export <your-slide.clj>
Press &lt;E&gt; on the presentation frame.

## Roadmap

* Indicate next slide to the console
* Command line JAR
* Cooperation with Twitter

## Author & License
## License

Copyright (c) 2010 深町英太郎 (E.Fukamachi).
Licensed under the MIT License (http://www.opensource.org/licenses/mit-license.php)
2 changes: 1 addition & 1 deletion project.clj
Expand Up @@ -6,7 +6,7 @@
:url "http://www.opensource.org/licenses/mit-license.php"
:distribution :repo}
:main L5.core
:run-aliases {:presen [L5.core -main], :export [L5.core -main "export"]}
:run-aliases {:presen [L5.core -main]}
:dependencies [[org.clojure/clojure "1.2.0"]
[org.clojure/clojure-contrib "1.2.0"]
[com.itextpdf/itextpdf "5.0.4"
Expand Down
30 changes: 23 additions & 7 deletions src/L5.clj
Expand Up @@ -3,11 +3,14 @@
clojure.contrib.server-socket)
(:require [L5.context :as context]
[L5.export :as export]
[L5.slide :as slide])
(:import [java.awt.event KeyEvent]))
[L5.slide :as slide]
[L5.file :as file])
(:import [java.awt.event KeyEvent]
[javax.swing JOptionPane]))

(def *run-file* (ref nil))
(def *context* (ref nil))
(def *server-socket* (ref nil))

(defn context [] @*context*)

Expand Down Expand Up @@ -60,15 +63,28 @@

(defn reload [] (load-file @*run-file*))

(defn export [& [input]]
(dosync (ref-set *run-file* input))
(defn go [n]
(dosync (ref-set (:current (context)) n))
(repaint))

(defn export [& [output]]
(reload)
(export/jframe->pdf (str (replace-re #"\..+$" "" input) ".pdf") (context))
(System/exit 0))
(go 0)
(export/jframe->pdf output (context))
(go 0)
(println "Export Complete!")
(JOptionPane/showMessageDialog @(:frame (context)) "Export Complete!"))

(defn start [file]
(def *server-socket* (create-repl-server 12345 25))
(when (not @*server-socket*)
(dosync (ref-set *server-socket* (create-repl-server 12345 25))))
(dosync (ref-set *run-file* file))
(reload)
(attach-event KeyEvent/VK_R #(reload))
(attach-event KeyEvent/VK_E (fn [] (file/save-dialog @(:frame (context)) #(export %))))
(context/start (context)))

(defn select-file []
(file/open-chooser "L5: Presentation with Clojure"
#(do (start %)
(println "Presentation is started. Good Luck!"))))
7 changes: 4 additions & 3 deletions src/L5/core.clj
Expand Up @@ -3,6 +3,7 @@
(:use L5))

(defn -main [& args]
(if (= "export" (first args))
(export (or (second args) "run.clj"))
(start (or (first args) "run.clj"))))
(if (first args)
(start (first args))
(select-file))
(println "Welcome to L5!"))
36 changes: 36 additions & 0 deletions src/L5/file.clj
@@ -0,0 +1,36 @@
(ns L5.file
(:import [javax.swing JFrame JLabel JButton JSplitPane JFileChooser]
[java.io File]
[java.awt.event ActionListener]))

(defn- file-dialog [action parent callback]
(let [chooser (JFileChooser.)]
(.setCurrentDirectory chooser (.. (File. ".") getAbsoluteFile getParentFile))
(when (= JFileChooser/APPROVE_OPTION
(if (= :save action)
(.showSaveDialog chooser parent)
(.showOpenDialog chooser parent)))
(callback (.. chooser getSelectedFile getPath)))))

(defn choose-dialog [parent callback]
(file-dialog :open parent callback))

(defn save-dialog [parent callback]
(file-dialog :save parent callback))

(defn open-chooser [name callback]
(let [frame (JFrame. name)
split-pane (JSplitPane. JSplitPane/VERTICAL_SPLIT)
button-action (proxy [ActionListener] []
(actionPerformed [e]
(choose-dialog frame callback)))]
(let [button (JButton. "Open presentation")]
(.addActionListener button button-action)
(doto split-pane
(.add (JLabel. "Welcome to L5"))
(.add button)))
(doto frame
(.add split-pane)
(.setSize 200 200)
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
(.setVisible true))))

0 comments on commit 84b1035

Please sign in to comment.