;; Light Weight Editor Integration for Sparcworks.
;; "Era on Sparcworks" (EOS)
;;
;; Author: Eduardo Pelegri-Llopart
;;
;; Please send feedback to eduardo.pelegri-llopart@eng.sun.com

(require 'eos-common)

;; ================
;; Browser Protocol
;; ================
;; 
;; three notifications
;;
;; SPRO_SBENG_START
;; SPRO_SBENG_CURRENT_ELEMENT CONTEXT_UID filename lineno center==0
;; SPRO_SBENG_QUIT

(defun eos::browser-startup ()
  "Actions to do at startup for eos-browser.el"
  (make-face 'sbrowse-arrow-face)
  
  (set-face-foreground 'sbrowse-arrow-face
		       eos::sbrowse-arrow-color)
  (set-face-background 'sbrowse-arrow-face
		       (face-background (get-face 'default)))
  
  (setq sbrowser-pattern-list		; list of browser TT patterns
	(eos::create-sbrowser-patterns))
  
  (setq sbrowse-arrow			; pixmaps
	(make-pixmap "sbrowse-arrow.xbm"))

  ;; temporarily fixes redisplay bug
  (set-pixmap-contributes-to-line-height sbrowse-arrow nil)
)

(setq current-match nil)

(defun eos::spro_sbeng_current_element (msg pat)
  ;; SPRO_SBENG_CURRENT_ELEMENT CONTEXT_UID filename lineno center==0
  (let* ((filename
	  (get-tooltalk-message-attribute msg 'arg_val 1))
	 (lineno
	  (read (get-tooltalk-message-attribute msg 'arg_ival 2)))
	 )
    (eos::make-visible current-match sbrowse-arrow
			  filename lineno 'sbrowser
			  'sbrowse-arrow-face)
    (return-tooltalk-message msg)
    ))

(defun eos::spro_sbeng_start (msg pat)
    (eos::make-invisible current-match)
    (return-tooltalk-message msg)
    )

(defun eos::spro_sbeng_quit (msg pat)
    (eos::make-invisible current-match)
    (return-tooltalk-message msg)
    )

(defun eos::create-sbrowser-patterns ()
  "returns list of patterns"
  (list
   (make-an-observer "SPRO_SBENG_CURRENT_ELEMENT"
		     'eos::spro_sbeng_current_element)
   (make-an-observer "SPRO_SBENG_START"
		     'eos::spro_sbeng_start)
   (make-an-observer "SPRO_SBENG_QUIT"
		     'eos::spro_sbeng_quit)
   ))

(defun eos::register-sbrowser-patterns ()
  "register all sbrowser patterns"
  (mapcar 'register-tooltalk-pattern sbrowser-pattern-list))

(defun eos::unregister-sbrowser-patterns ()
  "unregister all sbrowser patterns"
  (mapcar 'unregister-tooltalk-pattern sbrowser-pattern-list))