-Bonjour à tous.
Je vais vous présenter
les tabs spécifiques qu'on pouvait avoir
quand on inspectait l'objet dans l'Inspector avec Cmd+I.
Ici, les tabs qu'on avait pour "Date",
par exemple le calendrier, sont implémentées.
Pour s'y intéresser, on sait que l'Inspector s'appelle GT Inspector,
on va se servir d'un outil qui s'appelle le Finder
et on va aller chercher des pragmas qui contiennent "gtInspector".
Donc, on sélectionne "Pragmas".
On va avoir trois pragmas qui sortent.
"gtInspectorPresentationOrder", ça, c'est intéressant.
On double-clique dessus, ça nous montre tous les senders.
Nous, ce qu'on aimerait trouver, c'est le sender pour la date.
On va chercher "Date".
On peut voir ici que "gtInspectorPreviewIn",
ça va définir une composite morph avec le titre "Calendrier",
et ça va implémenter la morph "Calendar".
Si on réinspecte cette morph, on peut voir dans le calendrier
qu'on va avoir notre tab "Calendar" avec la CalendarMorph en dessous.
Maintenant, on avait notre "HSVAColorMorph",
donc je supprime ça.
On va s'intéresser, plutôt, à "Morph new inspect".
J'exécute ça, Cmd+D.
On va voir notre Inspector, cette fois-ci, la morph va être ici.
Et, si on regarde pour "Morph",
on va avoir notre morph "gtInspectorMorphin",
c'est intéressant,
et si on regarde, on a effectivement ce qu'on veut.
Donc, on a le titre de notre tab qui est ici, "Morph".
On va avoir le display qui va nous présenter une morph
et une gestion d'erreurs en dessous, si jamais la morph s'affiche mal.
Et on a aussi deux actions : "exportAsPNG" et "delete",
qu'on peut retrouver ici, dans l'Inspector.
Donc, là, "Export as PNG" et "Delete".
Ça, c'est intéressant.
Une dernière chose qu'on va regarder, c'est, par exemple,
comment ça gère les méthodes qui sont déjà compilées.
Par exemple, si je regarde la méthode compilée
de "Point>>#degrees", Cmd+I, j'inspecte,
on a plusieurs onglets extrêmement intéressants :
"Bytecode", "Source",
la représentation intermédiaire, "Ir",
"AST", c'est un arbre de syntaxe,
"Header", "Meta" et deux autres onglets.
Ce qui nous intéresse, c'est plutôt "Bytecode", "Source".
Si, par exemple, j'ouvre deux fois celui-ci
et que je place celui-là sur "Source" et celui-ci sur "Bytecode",
je peux naviguer sur les deux à la fois.
Quand je clique sur l'instruction "pushConstant:0",
on peut voir que ça va être cette instruction ici.
Si je clique sur "sent>=", "jumpFalse:100",
on va avoir un retour direct à la fois entre le code source
et le bytecode de notre méthode compilée.
Donc, maintenant, si je regarde ça,
je vais aller dans "CompiledCode",
on va avoir "gtInspectorSource", ça, ça va être notre onglet "Source",
ensuite, je vais avoir "gtInspector"
pour la représentation intermédiaire "Ir".
Ensuite, "gtInspectorAST", qui va être ici.
Et "gtInspectorBytecode".
On va avoir toutes nos différentes tabs
qui sont définies avec la pragma "gtInspectorPresentationOrder".
C'était une présentation
de là où sont cachés ces onglets dans les objets qui les définissent.