71 lines
2.0 KiB
Racket
71 lines
2.0 KiB
Racket
#lang racket/base
|
|
(require racket/class
|
|
unstable/class-iop
|
|
"interfaces.rkt"
|
|
"partition.rkt"
|
|
unstable/gui/notify)
|
|
(provide controller%)
|
|
|
|
;; displays-manager-mixin
|
|
(define displays-manager-mixin
|
|
(mixin () (displays-manager<%>)
|
|
;; displays : (list-of display<%>)
|
|
(field [displays null])
|
|
|
|
;; add-syntax-display : display<%> -> void
|
|
(define/public (add-syntax-display c)
|
|
(set! displays (cons c displays)))
|
|
|
|
;; remove-all-syntax-displays : -> void
|
|
(define/public (remove-all-syntax-displays)
|
|
(set! displays null))
|
|
|
|
(super-new)))
|
|
|
|
;; selection-manager-mixin
|
|
(define selection-manager-mixin
|
|
(mixin (displays-manager<%>) (selection-manager<%>)
|
|
(inherit-field displays)
|
|
(define-notify selected-syntax (new notify-box% (value #f)))
|
|
|
|
(super-new)
|
|
(listen-selected-syntax
|
|
(lambda (new-value)
|
|
(for-each (lambda (display) (send/i display display<%> refresh))
|
|
displays)))))
|
|
|
|
;; mark-manager-mixin
|
|
(define mark-manager-mixin
|
|
(mixin () (mark-manager<%>)
|
|
(init-field/i [primary-partition partition<%> (new-bound-partition)])
|
|
(super-new)
|
|
|
|
;; get-primary-partition : -> partition
|
|
(define/public-final (get-primary-partition)
|
|
primary-partition)
|
|
|
|
;; reset-primary-partition : -> void
|
|
(define/public-final (reset-primary-partition)
|
|
(set! primary-partition (new-bound-partition)))))
|
|
|
|
;; secondary-relation-mixin
|
|
(define secondary-relation-mixin
|
|
(mixin (displays-manager<%>) (secondary-relation<%>)
|
|
(inherit-field displays)
|
|
(define-notify identifier=? (new notify-box% (value #f)))
|
|
|
|
(listen-identifier=?
|
|
(lambda (name+proc)
|
|
(for ([d (in-list displays)])
|
|
(send/i d display<%> refresh))))
|
|
(super-new)))
|
|
|
|
(define controller%
|
|
(class* (secondary-relation-mixin
|
|
(selection-manager-mixin
|
|
(mark-manager-mixin
|
|
(displays-manager-mixin
|
|
object%))))
|
|
(controller<%>)
|
|
(super-new)))
|