Surfaces et fenêtres
Un panneau peut vivre dans quatre hôtes : un dock, un onglet de la zone centrale, une fenêtre flottante, ou une fenêtre système détachée. Le contrat de fabrique est le même partout, et un seul point d'entrée décide du déplacement. Cette page décrit les quatre hôtes, les gestes de dépôt et ce qui est enregistré.
Les quatre hôtes
| Hôte | Fichier | État | Usage |
|---|---|---|---|
| Dock | shell-dock.js | isofind_shell_v1 | Inspecteurs, sorties, navigation. |
| Zone centrale | zone-centrale.js | isofind_zone_v1 | Carnet, consoles, vue de chaine : tout ce qui a besoin de largeur. |
| Fenêtre flottante | shell-flottant.js | isofind_flottant_v1 | Un panneau gardé au-dessus du travail en cours. |
| Fenêtre détachée | shell-detach.js | Portée par l'URL de la fenêtre | Second écran. |
L'arbitre de placement
placer ne tient pas de registre de ce qu'il croit savoir : il interroge chaque hôte à chaque appel. Un panneau ouvert par un chemin qui ignore placer, par exemple un bouton de plugin qui appelle directement le shell, est donc vu quand même, et libéré avant réouverture ailleurs.
Fenêtres flottantes
Les fenêtres flottantes vivent dans une couche en position: fixed et pointer-events: none : seules les fenêtres elles-mêmes reçoivent le pointeur, le reste de l'application reste cliquable.
| Geste | Effet |
|---|---|
| Glisser l'entête | Déplace la fenêtre, bornée à l'écran. |
| Tirer un bord ou un coin | Redimensionne, huit prises. |
| Double-clic sur l'entête | Agrandit, et rend la géométrie précédente au retour. |
| Lâcher sur un dock | Range le panneau dans ce dock. Un dock replié sous 24 px n'est pas une cible. |
| Lâcher hors de la fenêtre de l'application | Détache le panneau en fenêtre système, si le réglage et le drapeau detachable l'autorisent. |
La zone centrale n'est pas une cible de dépôt. Elle occupe tout le milieu de l'écran, et en faire une cible interdirait de déplacer une fenêtre flottante sans risquer qu'un onglet l'avale. L'entrée reste dans le menu de l'entête.
Pendant un déplacement ou un redimensionnement, un bouclier transparent est levé au-dessus des cadres. Un cadre survolé capte les événements de pointeur dans son propre document, et le geste serait perdu dès que le curseur passe au-dessus d'un onglet.
Fenêtres détachées
Une fenêtre détachée est une fenêtre système, servie par une page unique de static/ à laquelle les identifiants de panneaux sont passés en chaine de requête. Une même fenêtre peut donc porter plusieurs panneaux côte à côte, et il n'existe qu'une page quel que soit leur nombre.
L'état des panneaux détachés n'est pas écrit des deux côtés : la fenêtre annonce ce qu'elle porte, et le côté principal s'y fie. Écrire aussi un registre local donnerait deux vérités pour un même fait, qui divergeraient à la première fermeture manquée.
Le drapeau detachable
Certains panneaux sont des adaptateurs : ils ne construisent pas leur contenu, ils déplacent dans leur hôte une carte bâtie ailleurs, comme l'éditeur Python ou les consoles R et PHREEQC. Sortir cette carte dans une autre fenêtre la couperait de son code d'origine. Ces panneaux déclarent donc detachable: false.
La garde est posée à la source, dans detacher et detacherVers, et non chez chaque appelant : le dock détache par glissement hors fenêtre et par son menu d'onglet, la flottante par son menu et par le lâcher dehors. L'entrée reste visible et grisée, avec sa raison, plutôt que masquée.
Modales converties en panneaux
Une modale de l'atelier convertie devient un panneau ordinaire, jamais une famille de surfaces parallèle. Le Gestionnaire de plugins et la Bibliothèque de plugins sont dans ce cas et s'ouvrent comme n'importe quel panneau, y compris au centre.
Les modales locales à une page ne sont pas converties. Leur contenu est construit par le code de la page, avec le CSS de la page, et le sortir de son document romprait les sélecteurs par lesquels ce code retrouve ses propres morceaux. Elles sont traitées autrement, par le plein rectangle de la zone centrale.
Dispositions nommées
Une disposition capture les trois surfaces gérées par l'application : { shell, zone, flottant }. Chaque part est appliquée si elle est présente et laissée intacte sinon, de sorte qu'une disposition enregistrée avant la V2.0 ne ferme aucune fenêtre flottante, puisqu'elle n'a jamais rien dit à leur sujet.
| Réglage | Défaut | Portée |
|---|---|---|
| workspace.restorePanels | vrai | Les panneaux du dock au démarrage. |
| workspace.restoreTabs | vrai | Les onglets de la zone centrale. |
| workspace.restoreFloating | vrai | Les fenêtres flottantes. |
| workspace.detachDrag | vrai | Le détachement au lâcher hors de la fenêtre. |
Une disposition ne retient que les fenêtres flottantes ouvertes, leur ordre d'empilement et leur géométrie. La géométrie d'une fenêtre fermée reste une commodité de session : la verser dans un plan ferait qu'appliquer ce plan déplacerait des fenêtres qu'il n'ouvre même pas. Le flottant est appliqué après la zone, sans quoi un panneau que le plan veut voir flotter serait rouvert au centre.