(let ( (h (int 50)) (w (int 70)) (black java.awt.Color.black) (yellow java.awt.Color.yellow) (stroke (object ("java.awt.BasicStroke" (float 2.5)))) (ellipse (object ("java.awt.geom.Ellipse2D$Double" (int 0) (int 0) w h))) (view (object ("g2d.swing.IOPView" (boolean true) (boolean true)))) (frame (object ("g2d.swing.IOPFrame" "Node Example" view))) (mkNode (lambda (xPos yPos) (let ((node (let ((temp (object ("g2d.glyph.Glyph" ellipse black yellow)))) (seq (invoke temp "setStroke" stroke) temp))) (pressed (lambda (self event) (seq (setAttr self "pointF" ;(int 7) for a simple evaluate error (object ("java.awt.geom.Point2D$Double" (invoke event "getX") (invoke event "getY")))) (setAttr self "draggedF" (boolean true))))) (released (lambda (self event) (setAttr self "draggedF" (boolean false)))) (dragged (lambda (self event) (let ((dragon (getAttr self "draggedF"))) (if (and (!= dragon (object null)) dragon) ;(getAttr self "draggedF") (let ((pnt (getAttr self "pointF")) (eX (invoke event "getX")) (eY (invoke event "getY")) (a (let ((temp (object ("java.awt.geom.AffineTransform")))) (seq (invoke temp "translate" (- eX (invoke pnt "getX")) (- eY (invoke pnt "getY"))) temp)))) (seq (invoke self "transform" a) (invoke pnt "setLocation" eX eY) (invoke view "repaint"))))))) (clicked (lambda (self event) (seq (invoke java.lang.System.err "println" "clicked") (if (invoke event "isShiftDown") (let ((chooser (object ("javax.swing.JColorChooser"))) (color (invoke chooser "showDialog" frame "Color Chooser" (invoke self "getFill")))) (seq (if (!= color (object null)) (invoke self "setFill" color)) (invoke view "repaint"))))))) (trans (let ((temp (object ("java.awt.geom.AffineTransform")))) (seq (invoke temp "translate" xPos yPos) temp))) ) (seq (invoke node "setMouseAction" java.awt.event.MouseEvent.MOUSE_PRESSED pressed) (invoke node "setMouseAction" java.awt.event.MouseEvent.MOUSE_RELEASED released) (invoke node "setMouseAction" java.awt.event.MouseEvent.MOUSE_CLICKED clicked) (invoke node "setMouseAction" java.awt.event.MouseEvent.MOUSE_DRAGGED dragged) (invoke view "add" node trans))))) (clickedV (lambda (self event) (if (not (invoke event "isShiftDown")) (seq (apply mkNode (- (invoke event "getX") (/ w (int 2))) (- (invoke event "getY") (/ h (int 2)))) (invoke view "repaint"))))) ) (seq (invoke view "setMouseAction" java.awt.event.MouseEvent.MOUSE_CLICKED clickedV) (apply mkNode (* w (int 3)) (* h (int 3))) (invoke frame "setVisible" (boolean true)) (invoke view "repaint") ) )