[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

probleme avec editor-view




 Bonjour,

 J'ai quelques difficultes avec le redisplay d'un objet compose d'un
editor-view et d'un ctedit.

 La situation :
  Je manipule deux arbres qui contiennent des "references croisees"
l'un vers l'autre. Ces references sont codees sous forme de PATH mis
en annotation. Chaque arbre apparait dans sa propre fenetre. Lorsque
je clicke sur un arbre, je cherche le noeud annote le plus proche, je
recupere le path et je positionne la selection {current} de l'autre
fenetre pour illuminer la branche liee. Ceci est realise par une
fonction propre de gestion de la souris.

  Pour des raisons techniques, les racines des deux arbres
appartiennent au meme formalisme, mais les fonctions de recherche des
annotations sont differentes. Je ne peux donc pas utiliser deux ctview
puisqu'ils activent la meme fonction set-environment, et donc mettent
le meme MouseEventList. Comme un des deux arbres doit simplement etre
visualise (et pas edite), un simple ctedit encapsuler dans un
editor-view convient parfaitement.

 Le probleme :
  Je n'arrive pas a provoquer le reaffichage de la fenetre editor-view
depuis CENTAUR. Les fonctions de redisplay
({ctedit}:incremental-redisplay, expose, show, redisplay, etc.) sont
inoperantes. Le seul moyen que j'ai trouve consiste a provoquer des
reaffichages depuis X-window (masquage-demasquage de la fenetre, ou
refresh de l'ecran). Ce qui s'affiche alors est bien ce que j'attends.

  Qu'est-ce que je fais mal ?

 Quelques extraits du code que j'ai ecrit suivent.

 Jean-Pierre


==============================================================================
Jean-Pierre JACQUOT        CRIN (Centre de Recherche en Informatique de Nancy)
e-mail: jacquot@loria.fr
post:   CRIN   B.P. 239   F-54506 Vandoeuvre-les-Nancy Cedex   FRANCE
phone:  +33  83.59.20.16
fax:    +33  83.41.30.79
==============================================================================

;; gestion de la souris
(de {PLANEUR-env}:mouse-down (ctedit event)
  (let* ((image_path (send 'image-path ctedit event))
	 (subject_path ({ctedit}:get-subject-path ctedit image_path))
	 (tree_list ({path}:tree+ subject_path)))
    (when tree_list
      (let ((tree (car tree_list))
	    (t-operator ({name}:operator 'tache  :planeur)))
;;; La fonction suivante est trouvee un peu au hasard
;;; pas vraiment documente dans CENTAUR
        ({ctedit}:current:mouse-down ctedit event)
	(while (not ({operator}:equal t-operator
                                      ({tree}:operator tree)))
          (setq tree ({tree}:up tree 1))
        )
        (:select-current-product
          (:current-product-window ctedit)
          ({decor}:annotvalue :decor-plan_product_link tree))
      )
    )
  )
)


;; positionnement de la selection dans l'autre fenetre
;; tentatives de reaffichage
;; note: le parametre ctview est le resultat de l'appel de la fonction
;;   :create ci-dessous

(de :select-current-product (ctview path)
 (let ((ctedit (send 'object ctview))
      )
  ({single}:merge
   ({ctedit}:find-selection  ctedit '{current})
   path)
  (if ({ctedit}:update-selection ctedit '{current})
    (print "selection modifiee")
    (print "selection NON modifiee"))
  ({ctedit}:update-select ctedit ({ctedit}:find-select ctedit '{current}))
  ({ctedit}:redraw ctedit)
;  (send 'redisplay ({editor-view}:frame ctview) ())
  ({ctedit}:incremental-update ctedit)
  ({ctedit}:incremental-redisplay ctedit)
;  (send 'show-frame ctview)
;  ({ctedit}:expose ctedit)
;   (send 'redisplay ctview ())
 )
)

;;
;; creation de la fenetre de visualisation

(de :create ()
;;; fonction qui cree un visualisateur de produit
;;; ATTENTIOn: ca ne marche pas pour l'instant !!

 (let ((ctedit ({ctedit}:create 700 350))
       (frame ({ctframe}:create (row ({butobj}:create 0 0 "bouton"
                                   (lambda (b ) (print "coucou"))))
                   (column ({butobj}:create 0 0 "autre"
                              (lambda (b ) (print "couic")))) 'hv))
       (window)
       (ctview))
  ({ctedit}:subject ctedit ({variable}:make ()))
  ({variable}:add-selection (send 'subject ctedit) '{current})
  ({ctedit}:create-select ctedit '{current} '{textual}:all)
  (setq ctview ({editor-view}:create ctedit frame))
;  ({editor-view}:attach-links ctview 'ctedit ctedit)
  (setq window (send 'window  ctview))
  ({gfxwindow}:centaurview window)
  (add-application ctview)
;  (send 'show ctedit)
;  (send 'show ctview)
;  ({properties}:set-user-property ctedit 'Editor 'Pvisual)
;  ({ctedit}:redraw ctedit)
  ctview
 )
)