#lang racket/gui

(require "Entorno-0.rkt")
;;;;;;;;;;;;;;
(define filas 49)
(define columnas 49)
(define radio 10)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; LAS FUNCIONES DE DIBUJO
;;; LAS HERRAMIENTAS GRÁFICAS
;;; PROCEDIMIENTOS DE DIBUJO
(define pinta-una-fila
  (lambda (output x y hoffset)
    (cond
      ((null? output) )
      (else
       (let* ((par (car output))
              (obj (car par))
              (olor (cdr par))
              (color (send obj get-color))
              (olor (send olor get-tipo))
              (pen 
               (make-object pen%
                 "lightgray"
                 1
                 'solid))
              (brush 
               (make-object brush%
                 (if (equal? (send obj get-rgb) '(0 0 0 1.0))
                     color
                     (if (= olor 1);para ver los rastros de feromona
                         "Gainsboro"
                         color)
                     )
;                 color;Para no ver rastros de feromona: eliminar el if
                 'solid))
              )
         (send dc set-pen pen)
         (send dc set-brush brush)
         (send dc draw-rectangle x y radio radio)
         (pinta-una-fila (cdr output) (+ x hoffset) y hoffset)) )
      ) 
    ))
(define pinta-configuracion
  (lambda (configuracion)
    (do
        ((voffset radio (+ voffset radio))
         (i 1 (add1 i))
         (config configuracion (cdr config))
         )
      ((null? config) #t)
      (pinta-una-fila
       (car config)
       4 voffset radio)
      )
    ))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define dibujo
  (lambda (dc)
    (pinta-configuracion (send M get-configuracion))
    ))
;;; La ventana
(define ventana
  (make-object frame% 
    "Monitor de Hormigas (clase única)" 
    #f 
    (+ 10 (* radio (add1 columnas))) (* radio (+ 10 filas))
    1200 0))
;;; El lienzo
(define lienzo
  (instantiate canvas%
    (ventana)
    (style '(border))
    (paint-callback
     (lambda (lienzo dc) (dibujo dc)))
    ))
(define dc (send lienzo get-dc))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define driver
  (lambda (dc)
    (let go ((i 0)
             (j 2000)
             )
      (if (= i j)
          #t
          (begin
            (dibujo dc)
            (printf "Iteración-~a~n" i)
            (send M procesar! i)
            (go (add1 i) j)
            )
          )
      )
    ))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(send ventana show #t)
(sleep/yield 1)



(driver dc)
