Last modified 4 years ago
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.