(asdf:oos 'asdf:load-op 'ltk) (asdf:oos 'asdf:load-op 'cgn) (use-package :ltk) (use-package :cgn) (defmacro defmodel (name &body body) `(defun ,name () (with-ltk () (let* ((*MODEL-FRAME* (make-instance 'frame)) (*MAIN-FRAME* (make-instance 'frame)) (*MAIN-LABEL-FRAME* (make-instance 'labelframe :text "MAIN" :master *MAIN-FRAME*)) (*MODEL-LABEL-FRAME* (make-instance 'labelframe :text "MODEL" :master *MAIN-FRAME*)) (*DISPLAY-FRAME* (make-instance 'frame)) (*DISPLAY-LABEL-FRAME* (make-instance 'labelframe :text "DISPLAY" :master *DISPLAY-FRAME*))) ,@body (pack *MAIN-FRAME* :side :top) (pack *MODEL-FRAME* :side :bottom) (pack *MAIN-LABEL-FRAME*) (pack *MODEL-LABEL-FRAME*) (pack *DISPLAY-FRAME* :side :right) (pack *DISPLAY-LABEL-FRAME* :side :right))))) (defmacro make-hscale (master label &optional (min 0) (max 10) (resolution 1)) `(make-instance 'scale :label ,label :from ,min :to ,max :resolution ,resolution :master ,master :orientation 'horizontal)) (defmacro make-vscale (master label &optional (min 0) (max 10) (resolution 1)) `(make-instance 'scale :label ,label :from ,min :to ,max :master ,master :resolution ,resolution)) (defmacro with-main (letz &rest rest) (let ((l letz) (cp `(progn)) cq) (dolist (i l cp) (setf cq (append cq (list (list (car i) (append (list (car (car (cdr i)))) (list '*MAIN-LABEL-FRAME*) (cdr (car (cdr i)))))))) (setf cp (append cp (list `(pack ,(car i)))))) `(let* ,cq ,@rest ,cp))) (defmacro with-model (letz &rest rest) (let ((l letz) (cp `(progn)) cq) (dolist (i l cp) (setf cq (append cq (list (list (car i) (append (list (car (car (cdr i)))) (list '*MODEL-LABEL-FRAME*) (cdr (car (cdr i)))))))) (setf cp (append cp (list `(pack ,(car i)))))) `(let* ,cq ,@rest ,cp))) (defmacro with-display (letz &rest rest) (let ((l letz) (cp `(progn)) cq) (dolist (i l cp) (setf cq (append cq (list (list (car i) (append (list (car (car (cdr i)))) (list '*DISPLAY-LABEL-FRAME*) (cdr (car (cdr i)))))))) (setf cp (append cp (list `(pack ,(car i)))))) `(let* ,cq ,@rest ,cp))) (defmacro make-evett-button () `(make-instance 'button :master *MODEL-LABEL-FRAME* :text "Generate Model" :command #'(lambda () (evett (value lamb) (value n) (value f) (value lr)))))