       (.setState :components components)
       (.setState :img img)
       (.setState :graphics graphics)
+      (.addMouseListener (proxy [MouseAdapter] [] ;Listener to collect initial points set by user
+                           (mouseClicked [e]
+                             (let [
+                                   path (.getState ui :path)
+                                   ]
+                               (if (<= (count path) 1)
+                                 (.setState ui :path (conj path [(.getX e) (.getY e)]))
+                                 )
+                               )
+                             )
+                           ))
+      (.addMouseMotionListener (proxy [MouseMotionAdapter] [] ;Listener to display initial line being drawn by user
+                                 (mouseMoved [e]
+                                   (let [
+                                         path (.getState ui :path)
+                                         g (.createGraphics (.getState ui :img))
+                                         [x y] (flatten (first path))
+                                         ]
+                                     (if (= (count path) 1)
+                                       (do (.reset ui)
+                                           (.drawLine g x y (.getX e) (.getY e))
+                                           (.repaint ui))
+                                       )
+                                     )
+                                   )
+                                 ))
       )
     (doseq [[name component] components] ;Add Components and their action listeners
       (.setSize component comp-size)

      (if (contains? actions name)
        (.addActionListener component (get actions name))
        ))
    (doto graphics
      (.setColor Color/black)
      (.fillRect 0 0 (.getWidth img) (.getHeight img))


(defn -init []
  "Sets Initial State"
  [["Levy Curve Generator"] (atom {:path [], :angle 45, :iterations 15, :color 16711680})]
  )

(defn -setup [ui]
  "Setup UI components, listeners"
  (let [screen-size (.getScreenSize (Toolkit/getDefaultToolkit))
        width (- (.width screen-size) 400)
        height (- (.height screen-size) 100)
        comp-size (Dimension. 100 20) ;Component Size
        components {:angle-label (JLabel. "Angle")
                    :angle (JTextField. "45")
                    :step (JButton. "Step")
                    :save (JButton. "Save")
                    :reset (JButton. "Reset")}
        create-listener (fn [f & args]
                          (proxy [ActionListener] []
                            (actionPerformed [e]
                              (apply f args)))
                          )
        actions {:step (create-listener -step ui)
                 :reset (create-listener -reset ui true)
                 :save (create-listener -save ui)
                 }
        img (BufferedImage. width height BufferedImage/TYPE_INT_RGB)
        graphics (.createGraphics img)
        ]
    (doto ui ;Set size and add state
