wiki:SpTeEditor/SpTeEditorIFrame/XulPageAPI

Spatio-Temporel editor - Iframe implémentation

L'implémentation du Xbl SpTeEditorIFrame générique permet d'encapsuler une iframe qui contient l'éditeur dans une page (généralement Xul, voir Svg ou html).

Deux versions existent de cette implémentation :

  • Xbl SpTeEditorIFrame : l'iframe est directement affichée dans la zone d'édition.
  • Xbl SpTeEditorFixedIFrame : l'iframe est déportée dans une zone de l'éditeur hors scroll.

La page xul doit implémenter l'objet subSpTeEditor et informer le contexte parent (frameElement) ainsi :

  • sur l'event onload, après son initialisation, la page doit appeler
    frameElement.spTeEditor.onIFrameLoaded()
    
  • subSpTeEditor.init(pStructsToConnect) : initialisation de l'éditeur avec en paramètre un tableau de toutes les struct issues du chargement initial.
  • après l'init, une fois que l'éditeur est prêt à recevoir les events users, la page doit appeler :
    frameElement.spTeEditor.onIFrameReady()
    
    L'éditeur peut ne pas être immédiatement disponible à la fin de l'init. Exemple : doit attendre la réception asynchrone d'une ressource distance (image, flux audio, etc.).
    frameElement.spTeEditor.setEditorSize(pWidth, pHeight)
    
    Informe des dimensions souhaitées (taille de l'image de fond à éditer par exemple) pour que l'iframe s'ajuste. Si l'espace réellement disponible est insuffisant, la page Xul embarquant le subSpTeEditor doit afficher des scroll (box avec overflow: auto).
  • subSpTeEditor.connectStruct(pSpTeStruct) : voir ISpTeEditor. SpTeEditorIFrame garantit qu'aucun appel à connectStruct() ne sera réalisé avant l'appel à init(pStructsToConnect). Il n'est donc appelé qu'en mode interatcif ou en batch.
  • subSpTeEditor.setReadOnlyMode(pBoolean) : voir ISpTeEditor.
  • subSpTeEditor.refresh() : voir ISpTeEditor.
  • subSpTeEditor.removeStruct(pSpTeStruct) : voir ISpTeEditor.
  • subSpTeEditor.updateStruct(pSpTeStruct) : voir ISpTeEditor.
  • subSpTeEditor.changeStructFocus(pOldFocus, pNewFocus) : informe d'un changement de focus par le framework Xed. Lorsque le SpTeEditor veut opérer lui-même un changement de focus, il doit simplement appeler pSpTeStruct.spTeFocus() qui impliquera en retour un appel à changeStructFocus(pOldFocus, pNewFocus). C'est donc uniquement dans la méthode changeStructFocus(pOldFocus, pNewFocus) qu'il faut effectuer les changements graphiques pour matérialiser le focus.