Dispositions et raccourcis

Trois mécanismes de personnalisation adossés au registre : les dispositions nommées, qui enregistrent l'agencement des docks et créent une commande ; la table des raccourcis, séparée des commandes pour que le remappage porte sur la liaison ; et le registre de widgets, qui fait du tableau de bord une surface alimentée par les contributions.

Dispositions nommées

Une disposition est un instantané de l'atelier : panneaux ouverts, panneau actif par dock, tailles, et zones effectives des panneaux déplacés. Elle ne contient pas l'état interne des panneaux : appliquer une disposition replace des panneaux, elle ne rejoue pas ce qu'ils contenaient.

var L = window.IsoFindLayouts; L.liste(); // ['Audit', 'Traçabilité'] L.enregistrer('Traçabilité'); // K.shell.snapshot(), puis inscrit une commande L.appliquer('Audit'); // K.shell.restore(...) L.renommer('Audit', 'Contrôle'); L.supprimer('Contrôle'); L.gerer(); // gestionnaire, commande core.layouts.manage
ComportementDétail
Enregistrer crée une commandeLa disposition apparait dans la palette et le panneau Actions, et peut recevoir un raccourci.
Widget dédiéLes dispositions sont applicables d'un clic depuis le tableau de bord.
RenommerRenomme la commande. Supprimer libère son jeton.
RéinitialiserK.shell.reset() referme tout et rend à chaque panneau sa zone déclarée, sans supprimer les dispositions.

Raccourcis clavier

La table des raccourcis associe une combinaison à un identifiant de commande. Le remappage agit sur la liaison, jamais sur la commande : un plugin ne peut donc pas imposer une touche que l'utilisateur a réattribuée.

Défauts livrés

CombinaisonCommande
Ctrl+Shift+Pcore.palette.open
Ctrl+Shift+Ecore.fichiers.toggle
Ctrl+Shift+Jcore.journal.toggle
Ctrl+Shift+Hcore.historique.toggle
Ctrl+Shift+Dcore.db.toggle
Ctrl+Shift+Acore.actions.toggle
Ctrl+Shift+Mcore.problemes.toggle
Ctrl+Shift+Lcore.layouts.manage
Ctrl+Shift+Kcore.keys.manage
Ctrl+Iapp.outils.isofImport
Ctrl+Eapp.outils.isofExport
Ctrl+Shift+Iapp.donnees.importCSV
Ctrl+Shift+Sapp.donnees.backupDatabase

Les défauts sont volontairement peu nombreux. Lier les quatre-vingt-seize actions du domaine produirait autant de combinaisons dont personne ne retiendrait la dixième, et qui se marcheraient dessus dans les éditeurs. Les combinaisons livrées couvrent les actions quotidiennes ; le reste passe par la palette.

Trois règles de résolution

RègleConséquence
Une liaison n'est posée que si sa commande existe sur la page. Une touche qui ne ferait rien laisserait croire à un raccourci cassé. Le nombre de raccourcis actifs varie donc d'une page à l'autre.
Sur une même combinaison, les candidats sont parcourus du plus récemment inscrit au plus ancien, et la première commande disponible l'emporte. Le conflit n'est pas refusé : interdire le doublon empêcherait un plugin de reprendre une touche que l'utilisateur ne lui a pas réservée. Il est affiché, et l'utilisateur tranche.
Une combinaison sans modificateur ne se déclenche pas dans un champ de saisie. Sinon, lier « n » à une commande rendrait impossible de taper la lettre n, et le symptôme serait attribué au clavier. Avec modificateur, la touche passe toujours : Ctrl+F dans un éditeur doit atteindre l'application.
Aide Raccourcis clavier core.keys.manage

L'écran liste les raccourcis posés, signale les conflits et permet le remappage. Cet écran sert autant à découvrir les raccourcis qu'à les modifier : sans liste consultable, un raccourci n'est utilisé que par ceux qui savaient déjà qu'il existe.

// API bas niveau, dans le noyau var jeton = K.keybindings.bind('ctrl+alt+p', 'phreeqc.simulation.lancer'); K.keybindings.list(); // [{ combo, commands: [...] }, ...] K.keybindings.unbindAll('ctrl+alt+p'); jeton.dispose();

Widgets du tableau de bord

Le tableau de bord est un hôte de widgets alimenté par le registre. Un plugin qui déclare un widget le voit apparaitre sans qu'aucune page ne soit modifiée, y compris s'il est chargé après le montage : le montage écoute dashboard.changed.

K.dashboard.registerWidget({ id: 'phreeqc.dernieres', source: 'phreeqc', order: 60, title: { fr: 'Dernières simulations', en: 'Recent simulations' }, factory: function (ctx) { // ctx.root : l'element de la carte. Peut etre rempli de facon asynchrone. } }); var monte = K.dashboard.mount(hote); // { rafraichir, dispose } K.dashboard.widgets(); // la liste, triee par order K.dashboard.remonter(); // redessine la ou le tableau est deja monte

Widgets du noyau

Quatre widgets, chacun rattaché à une question qui se pose à l'ouverture du logiciel.

WidgetQuestionAction au clic
ReprendreQu'ai-je fait la dernière fois ?Rouvre l'objet.
ModificationsQu'est-ce qui a changé dans mes données ?Émet historique.ouvrir, qui charge le panneau Historique sur cet échantillon.
Actions favoritesQu'est-ce que je fais tous les jours ?Exécute la commande.
DispositionsComment je me remets en place ?Applique la disposition.

Deux widgets s'y ajoutent : Workflows (les enchainements enregistrés, exécutables d'un clic) et Carnets (les notebooks récents, ouverts dans le panneau Notebook).

Aucun widget n'affiche de compteur du type « 224 échantillons ». Le chiffre est exact mais ne conduit à aucune action, et il occuperait la zone la plus visible de l'écran. Les widgets livrés ouvrent tous un objet sur lequel on travaillait déjà.

Visibilité

Le widget des modifications lit le registre signé à travers la clause de visibilité de l'utilisateur, appliquée côté backend. Le tableau de bord est affiché à chaque ouverture, souvent devant des personnes qui n'ont pas accès à tous les échantillons. Si la clause échoue, la route renvoie une erreur plutôt qu'une liste non filtrée.

Profils de tableau de bord

Un profil est appliqué à la première ouverture, sans écraser les personnalisations ultérieures. Le profil researcher privilégie les statistiques descriptives multi-familles et conditionne la veille scientifique à l'absence de mode air-gap. Les profils disponibles suivent les modules ouverts par la licence.