plt/gui/interfaces.ss
(module interfaces mzscheme
  (require (lib "class.ss"))
  (provide (all-defined))

  ;; controller
  ;; Manages the model and view.
  ;; Propagates actions from view to model (run, clear).
  ;; and status changes from model to view.
  (define controller<%>
    (interface ()
      run
      run-model
      clear-model
      
      get-view
      get-root-model
      
      on-model-status-change
      on-view-selection-change
      select-model
      ))

  ;; model
  ;; Represents a test (case or suite) together with the state associated
  ;; with the last run of that test. Run and clear actions are recursive and
  ;; signal the controller to update the view.
  (define model<%>
    (interface ()
      run
      clear

      get-status
      executed?
      success?
      failure?
      error?
      
      get-parent
      get-name
      get-test
      get-view-link
      set-view-link
      get-controller
      ))
  
  (define model-case<%>
    (interface (model<%>)
      get-result
      get-timing
      get-output
      get-property
      get-property-set
      ))
  
  (define model-suite<%>
    (interface (model<%>)
      get-children
      set-children
      on-child-status-change
      ))
  
  ;; view
  ;; Presents a graphical interface for inspecting and running tests.
  (define view<%>
    (interface ()
      show-model
      
      set-selection
      update-model-view
      
      get-controller
      get-selected-model
      ))

  ;; model->rml
  ;; Interprets model status and produces RML for view to display.
  (define model->rml<%>
    (interface ()
      model->rml/long
      model->rml/short
      ))

  ;; style-map
  ;; Maps symbolic style names ('bold, 'red) to MrEd styles.
  (define style-map<%>
    (interface ()
      get-style))

  ;; ext:text
  ;;
  (define ext:text<%>
    (interface ()
      text-insert
      text-insert/click))
  
  (define rml:text<%>
    (interface (ext:text<%>)
      render
      render-top-level
      render-inline
      ))
  
  (define rml:text:display<%>
    (interface (rml:text<%>)
      display
      display/tail
      append
      append/tail
      ))
  
  )