UI/Model Parse - Sliders - WIP
authorFrank Duncan <frank@kank.net>
Wed, 29 Aug 2018 16:42:58 +0000 (11:42 -0500)
committerFrank Duncan <frank@kank.net>
Wed, 29 Aug 2018 16:42:58 +0000 (11:42 -0500)
resources/UI-test.nlogo
src/main/interface.lisp
src/main/main.lisp
src/main/model.lisp
src/main/package.lisp

index 1ff8bf16ce1c36c578609932149b45efee94a427..9427f3eb66ad96bcac57b0ac05263e2e9a54691e 100644 (file)
@@ -104,10 +104,10 @@ NIL
 1
 
 BUTTON
-66
-276
-161
-309
+111
+443
+206
+476
 stopping
 create-and-move
 T
@@ -132,10 +132,10 @@ new-turtles-green
 -1000
 
 TEXTBOX
-45
-335
-147
-367
+9
+442
+111
+474
 Textbox 1
 12
 0.0
@@ -161,6 +161,66 @@ this\nis a test and it goes like\nthis
 0.0
 1
 
+SLIDER
+15
+233
+187
+266
+basic-slider
+basic-slider
+0
+100
+50
+5
+1
+NIL
+HORIZONTAL
+
+SLIDER
+294
+501
+564
+534
+code-slider
+code-slider
+0
+count turtles
+65
+1
+1
+NIL
+HORIZONTAL
+
+SLIDER
+16
+275
+115
+308
+inverted-inc-slider
+inverted-inc-slider
+10
+30
+21
+-1
+1
+NIL
+HORIZONTAL
+
+SLIDER
+12
+322
+204
+355
+reversed-min-max-slider
+reversed-min-max-slider
+100
+0
+20
+5
+1
+NIL
+HORIZONTAL
+
 @#$#@#$#@
 ## WHAT IS IT?
 
index 6b2d85e5a5432eab6aff37f15a78f085ee7d4ed2..e5bcc38f2ca6f9d375c893992fd8892eee0b1c82 100644 (file)
@@ -496,6 +496,24 @@ keep apprised of any updates that may happen.")
     (list :switch (append switch-def (list :height clnl-gltk:*switch-height*)) switch nil)))
   switch-defs))
 
+(defun slider-defs->sliders (slider-defs)
+ (mapcar
+  (lambda (slider-def)
+   (let*
+    ((slider
+      (clnl-gltk:slider
+       (getf slider-def :left)
+       (- *window-height* clnl-gltk:*slider-height* (getf slider-def :top))
+       (getf slider-def :width)
+       (getf slider-def :display)
+       (lambda (state) (execute (format nil "set ~A ~A" (getf slider-def :display) state)))
+       (read-from-string (getf slider-def :min))
+       (read-from-string (getf slider-def :max))
+       (read-from-string (getf slider-def :step))
+       (getf slider-def :initial-value))))
+    (list :slider (append slider-def (list :height clnl-gltk:*slider-height*)) slider nil)))
+  slider-defs))
+
 (defun textbox-defs->textboxes (textbox-defs)
  (mapcar
   (lambda (textbox-def)
@@ -524,7 +542,7 @@ keep apprised of any updates that may happen.")
      textbox nil)))
   textbox-defs))
 
-(defun initialize (&key dims view buttons switches textboxes)
+(defun initialize (&key dims view buttons switches sliders textboxes)
  "INITIALIZE &key DIMS VIEW BUTTONS SWITCHES => RESULT
 
   DIMS: (:xmin XMIN :xmax XMAX :ymin YMIN :ymax YMAX :patch-size PATCH-SIZE)
@@ -563,7 +581,8 @@ DESCRIPTION:
   (append
    (button-defs->buttons buttons)
    (textbox-defs->textboxes textboxes)
-   (switch-defs->switches switches))))
+   (switch-defs->switches switches)
+   (slider-defs->sliders sliders))))
 
 (defun run ()
  "RUN => RESULT
index 3e1d98143b4710844a18b37fb45f3e6982a761cb..920e4e8445d69143a036710ead791d7e1233d335 100644 (file)
@@ -225,6 +225,7 @@ EXAMPLES:
             :view ',(clnl-model:view model)
             :buttons ',(clnl-model:buttons model)
             :textboxes ',(clnl-model:textboxes model)
+            :sliders ',(clnl-model:sliders model)
             :switches ',(clnl-model:switches model)))))))))
 
 (setf (documentation 'model->single-form-lisp 'function)
@@ -282,6 +283,7 @@ DESCRIPTION:
             :view ',(clnl-model:view model)
             :buttons ',(clnl-model:buttons model)
             :textboxes ',(clnl-model:textboxes model)
+            :sliders ',(clnl-model:sliders model)
             :switches ',(clnl-model:switches model)))))
      ,@(when netlogo-callback-fn
         `((defun ,netlogo-callback-fn (,(intern "NETLOGO-CODE" *model-package*))
index 8adc4726e4a46a1333c082391eb6b5a53330c9ea..3942110d860b4c13e15bb45fc2b66007f013a61d 100644 (file)
@@ -502,6 +502,24 @@ DESCRIPTION:
        :initial-value (switch-on widget) ))))
    (model-interface model))))
 
+(defun sliders (model)
+ (remove nil
+  (mapcar
+   (lambda (widget)
+    (typecase widget
+     (slider
+      (list
+       :left (slider-left widget)
+       :top (slider-top widget)
+       :width (- (slider-right widget) (slider-left widget))
+       :var (intern (string-upcase (slider-varname widget)) :keyword)
+       :display (slider-varname widget)
+       :min (slider-min widget)
+       :max (slider-max widget)
+       :step (slider-step widget)
+       :initial-value (slider-default widget)))))
+   (model-interface model))))
+
 (defun view (model)
  "VIEW MODEL => VIEW-DEF
 
index 032dfa5dbc97e4bed0906fe12eeaebb186055aaa..6f5f22f71700514d5bf1c92871483db77caa9a3a 100644 (file)
@@ -87,7 +87,7 @@ components."))
  (:use :common-lisp)
  (:export
   #:execute-button #:default-model #:read-from-nlogo #:world-dimensions #:widget-globals #:code
-  #:buttons #:textboxes #:forever-button-on #:switches #:view #:interface #:set-current-interface #:set-callback)
+  #:buttons #:textboxes #:forever-button-on #:switches #:sliders #:view #:interface #:set-current-interface #:set-callback)
  (:documentation
   "CLNL Model