;; Copyright (C) 1996 DIMACS Center, Rutgers, The State University of New Jersey
;; Author(s): Jonathan Berry

;; This software is copyrighted by the DIMACS Center at Rutgers, The State
;; University of New Jersey.  IT IS PROVIDED AS IS, AND THE AUTHORS, DIMACS, AND
;; RUTGERS, THE STATE UNIVERSITY OF NEW JERSEY  DISCLAIM
;; ALL LIABILITY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
;; DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
;; DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
;; POSSIBILITY OF SUCH DAMAGE.

;; THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
;; INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
;; FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.  THIS SOFTWARE
;; IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
;; NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
;; MODIFICATIONS.

;; The authors hereby grant permission to use, copy, modify, distribute,
;; and license this software and its documentation for any purpose, provided
;; that existing copyright notices are retained in all copies and that this
;; notice is included verbatim in any distributions. No written agreement,
;; license, or royalty fee is required for any of the authorized uses.
;; Modifications to this software may be copyrighted by their authors
;; and need not follow the licensing terms described here, provided that
;; the new terms are clearly indicated on the first page of each file where
;; they apply.

;; Last File Update: 31-Jul-1996
;; 

(define-generic hide-label)
(define-generic show-label)
(define-generic hide-labels)
(define-generic show-labels)
(define-generic hide-vertex-labels)
(define-generic show-vertex-labels)
(define-generic hide-edge-labels)
(define-generic show-edge-labels)

(define-method hide-label ((v <vertex-item>))
	(let ((tx (slot-ref v 'txt-item)))
		(lower tx))
	(set! (text-color v) (background (parent v))))

(define-method show-label ((v <vertex-item>))
	(let ((tx (slot-ref v 'txt-item)))
		(raise tx))
	(set! (text-color v) "black"))

(define-method hide-label ((e <edge-item>))
        (let* ((sgs (slot-ref e 'seg-list)))
           (map (lambda (x)
                  (let ((tx (slot-ref x 'txt-item)))
                     (lower tx))) sgs))
	(set! (text-color e) (background (parent e))))

(define-method show-label ((e <edge-item>))
        (let* ((sgs (slot-ref e 'seg-list)))
           (map (lambda (x)
                  (let ((tx (slot-ref x 'txt-item)))
                     (raise tx))) sgs))
	(set! (text-color e) "black"))

(define-method hide-labels ((gv <graph-view>))
	(let ((egs (edges gv))
	      (vgs (vertices gv)))
	   (map (lambda (x) (hide-label x)) egs)
	   (map (lambda (x) (hide-label x)) vgs))
	#f)

(define-method show-labels ((gv <graph-view>))
	(let ((egs (edges gv))
	      (vgs (vertices gv)))
	   (map (lambda (x) (show-label x)) egs)
	   (map (lambda (x) (show-label x)) vgs))
	#f)

(define-method hide-vertex-labels ((gv <graph-view>))
	(let ((vgs (vertices gv)))
	   (map (lambda (x) (hide-label x)) vgs))
	#f)

(define-method show-vertex-labels ((gv <graph-view>))
	(let ((vgs (vertices gv)))
	   (map (lambda (x) (show-label x)) vgs))
	#f)

(define-method hide-edge-labels ((gv <graph-view>))
	(let ((egs (edges gv)))
	   (map (lambda (x) (hide-label x)) egs))
	#f)

(define-method show-edge-labels ((gv <graph-view>))
	(let ((egs (edges gv)))
	   (map (lambda (x) (show-label x)) egs))
	#f)

(define-generic reset-label)
(define-method reset-label ((vg <vertex-item>))
        (let ((v (slot-ref vg 'vertex)))
                (slot-set! vg 'vertex-label (vertex-label v))))

(define-method reset-label ((eg <edge-item>))
        (let ((e (slot-ref eg 'edge)))
                (slot-set! eg 'edge-label (edge-label e))))

(define-method reset-labels ((gv <graph-view>))
	(map reset-label (vertices gv))
	(map reset-label (edges gv)) #f)

(define-generic reset-colors)
(define-method reset-colors ((gv <graph-view>))
	(map (lambda(x) (slot-set! x 'color *link:default-vertex-color*)) 
						(vertices gv))
	(map (lambda(x) (slot-set! x 'color *link:default-edge-color*))
						(edges gv)))

(define-generic reset-graphics)
(define-method reset-graphics ((gv <graph-view>))
	(reset-labels gv)
	(reset-colors gv))
	

(provide "labels")
