79 Commits

Author SHA1 Message Date
Adrestie ca2b78e217 Remove every debug command
/fui keeps edit mode, reset and list. The thirty diagnostic and tuning
functions behind the other subcommands (bar, bags, character, tabs, close,
model, minimap, mouse, map, questlog, chat, chatlines, tabard...) go with
them, with Panes.Report, the bags read-back and the 205 texts they alone used.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-19 13:39:35 +02:00
Adrestie 1f1cd55486 TabMacros: tab-on-action-bar service shared with other addons
The character sheet's tab macros move to TabMacros.lua, which any addon or
AIO window can call (Register, Pickup, EnableDrag); ActionBar's
ActionButton_Update hook shows each registered tab's icon.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-19 05:36:03 +02:00
Adrestie fe70f4b34f Character sheet: drag a side tab onto an action bar
A dragged tab becomes an account macro (made once, found again by its
body) whose click opens the tab's screen, or closes the sheet when it
already shows it. On a bar the macro shows the tab's icon. No new macro
in combat or without a free slot.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-19 05:29:33 +02:00
Adrestie 40ebff305c ForeverUI : la liste d'équipement s'ouvre dans le sens de sa flèche
Comme camelot (flyoutDirection) : vers la droite pour la colonne gauche,
vers la gauche pour la colonne droite, vers le haut pour les armes. 3.3.5
l'ouvre toujours à droite de la flèche (dessous pour les armes) : la liste
est réancrée après PaperDollFrameItemFlyout_Show.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-18 00:20:07 +02:00
Adrestie 8372286532 ForeverUI : flèches du gestionnaire d'équipement à la camelot
Les boutons popout de 3.3.5 (PaperDollFrameItemPopoutButton : même liste
d'objets, mêmes entrées « ignorer l'emplacement », montrés avec
GearManagerDialog, donc sur la page Équipement seulement) prennent l'art
et la place de camelot 1.60.1.70450 (EquipmentFlyoutPopoutButtonTemplate) :
UI-Character-Info-Button-PullSide 20 x 43 à 5 px de l'emplacement,
tournée vers l'extérieur (colonne gauche vers la droite, colonne droite
vers la gauche), PullUp 43 x 20 au-dessus des armes ; -Open quand la
liste est ouverte, -Pressed enfoncé, survol en ADD. Le demi-tour se fait
par les coordonnées de texture (pas de SetRotation en 3.3.5).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-18 00:06:24 +02:00
Adrestie c7010f3e2c ForeverUI : statistiques remontées et resserrées
Les trois blocs commencent 2 px sous la pierre (au lieu de 10) et
chaque bloc est resserré : ses lignes partent 3 px sous le menu
déroulant, dans l'ombre de son fond, au lieu de 11. Écart entre blocs
inchangé (12) ; les lignes gardent leurs 13 px et leurs rayures.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 23:43:21 +02:00
Adrestie 8a9e9e25aa ForeverUI : troisième groupe de statistiques, pierre en un seul cadre
- Un troisième sélecteur de catégorie, identique aux deux du client (même
  menu déroulant, mêmes six lignes StatFrameTemplate remplies par
  UpdatePaperdollStats), dans les 25 px gagnés sur la pierre. Son choix
  est gardé dans ForeverUIDB.statThirdCategory ; par défaut, une catégorie
  que les deux autres n'affichent pas (sorts pour les lanceurs de sorts,
  distance pour le chasseur). Il suit les mises à jour du client.
  L'écart entre deux groupes passe de 16 à 12 pour que les trois tiennent.
- La pierre de 60 devient un cadre de 233 x 60 portant ses deux morceaux :
  le gestionnaire d'équipement et la page des titres, ancrés sous elle,
  s'arrêtaient à 30 px du haut et prennent maintenant toute la hauteur
  libérée.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 23:40:58 +02:00
Adrestie c1e65b8d89 ForeverUI : feuille de personnage, bandeau du niveau et menus déroulants
Camelot 1.60.1.70450 :
- La ligne de niveau et de classe quitte le volet droit pour un bandeau
  rocheux de 36 en haut du volet gauche (TopBackgroundStripHost :
  UI-Background-Rock, liseré _UI-Frame-InnerTopTile), centrée à (0, -2),
  police contourée de 14 (GameFontNormalMed2Outline), « Niveau 80 » puis
  la classe dans sa couleur (PLAYER_LEVEL_NO_SPEC). Le bandeau est un
  mobilier du personnage ; le modèle commence dessous, ses flèches de
  rotation passent à TOP (0, -40).
- La pierre du volet droit passe de 85 à 60 (StoneBG3), tirée du haut et
  du bas de StoneBG, sans art nouveau ; statistiques et titres gagnent
  25 px.

Les deux sélecteurs de catégorie de statistiques deviennent le menu
déroulant de camelot (WowStyle1DropdownTemplate par Tpl.MenuStyle1 :
fond common-dropdown-textholder, flèche à états, texte à gauche) au lieu
de l'en-tête UI-Character-Info-Title ; le menu et ses catégories restent
ceux du client.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 23:33:57 +02:00
Claude afdd314370 ForeverUI : feuille de personnage, lignes des listes, statistiques, ensembles par personnage
Listes de réputation, compétences et statistiques : une ligne qui ne tenait
plus était cachée, mais la boucle continuait, et une ligne plus courte plus
loin (un en-tête après une entrée) prenait sa place, hors d'ordre. Rien
n'est plus placé après la première ligne qui ne tient pas.

Statistiques : la page possédait les douze lignes et les réaffichait toutes
après chaque mise à jour, y compris la sixième que le client cache pour la
catégorie Distance (les chasseurs par défaut), avec le contenu de la
catégorie d'avant. Elle possède désormais leur parent, CharacterAttributesFrame.

Ensembles : le panneau était créé visible, et GearManagerDialog_Update
(ensemble porté depuis une barre, /equipset) pouvait le construire avant
la première ouverture de sa page, par-dessus les statistiques. Il naît
caché, et sa page le connaît même ouverte en combat.

L'ordre d'affichage et le dernier ensemble porté étaient au compte, alors
que les ensembles sont à un personnage : ouvrir la page sur un autre
personnage élaguait l'ordre du premier. Ils sont rangés par personnage, et
le premier usage reprend les anciennes valeurs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxRZNHkq453dyUMcWsyUf1
2026-10-01 23:35:58 +00:00
Claude 66ccb1ba1f ForeverUI : feuille de personnage, ensembles, réputation, familier en combat
Ensembles d'équipement : le crochet qui abandonne une modification sur
Annuler ou Échap visait la globale GearManagerDialogPopup_OnHide, que le
XML lie directement (function=) : il ne se déclenchait jamais. La session
restée ouverte faisait de la sauvegarde suivante une modification : l'ancien
ensemble était rééquipé, enregistré sous le nom tapé, puis supprimé. Le
script du cadre est désormais greffé (comme Taxi.lua).

Réputation : la description et les trois cases venaient de la liste du
client, qui ne les remplit que pour ses 15 lignes visibles ; cachée et
jamais défilée, elle laissait à partir de la 16e faction celles de la
précédente, et un clic agissait sur la nouvelle à contresens (en guerre,
barre suivie). Elles sont lues sur la faction elle-même.

Combat : PetPaperDollFrame, et donc CharacterFrame, sont protégés par les
boutons de compagnon sécurisés. Les masquer, les déplacer ou retailler la
feuille depuis l'addon en combat était bloqué : à chaque rafraîchissement
du familier (PET_BAR_UPDATE...), à chaque ouverture de la feuille, à chaque
onglet. Ces appels attendent la fin du combat ; Panes n'appelle plus Show
ou Hide sans changement, que le client refuse aussi.

Performance : les événements d'unité de la feuille (inventaire, portrait,
modèle) ne relancent plus toute la mise en page pour les autres unités ni
feuille fermée ; l'onglet du familier ne réagit plus qu'à son familier ;
l'onglet des statistiques relit l'arbre au plus deux fois par seconde.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxRZNHkq453dyUMcWsyUf1
2026-10-01 23:29:03 +00:00
Adrestie a45829d38f ForeverUI : onglet des montures sous le familier (aperçu 3D, liste en cartes)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:26:06 +02:00
Adrestie e43741a01b ForeverUI : les onglets latéraux gardent leur largeur quand le client les retaille
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:13:09 +02:00
Adrestie 7f656faa35 ForeverUI : onglet du familier réservé au familier, sans montures
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:09:20 +02:00
Adrestie 5842eb7a2b ForeverUI : code en anglais, commentaires resserres, code mort retire
Traduction
- Identifiants en anglais dans tout le module : addon, ecrans d'accueil,
  outils Python, banc d'essai et patcheur C#.
- Fichiers au nom francais renommes (Gabarits.lua -> Templates.lua,
  Textes_*.lua -> Texts_*.lua, deployer.py -> deploy.py,
  tools/patcheur -> tools/patcher, etc.).
- Commandes /fui et options de deploy.py en anglais (--check, --server,
  --remove-dbc).
- Cles des variables sauvegardees et de data/dbc/statistics.json
  traduites, sans reprise des anciennes cles.
- API de la micro-barre : ForeverUI.AddMicroButton(def) avec les champs
  name, atlasSet, after, tooltip, onClick, ready, et
  ForeverUI.UpdateMicro(name, isOpen).
- Commentaires reecrits en anglais, courts, sans dates ni historique ;
  les fonctions au nom peu parlant et leurs parametres sont expliques.

Code mort
- Exports, fonctions et variables jamais lus retires.
- Retires a la demande des modules : ForeverUI.PvPJauge, les exports
  FondEntete / TuilerEntete / Polices de TradeSkill, l'art legacy-up-c60,
  honorfill(half)blue et inv_misc_book_09, leurs entrees d'atlas et les
  parties d'outils correspondantes.

Verifications : liaisons des noms comparees avant et apres, banc vert,
chemins de textures inchanges, generateurs reproduisant les fichiers,
patcheur identique octet pour octet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 09:15:52 +02:00
Adrestie fd20e4c66d ForeverUI : onglet Statistics de camelot, statistiques ajoutees, micro-bouton generique
Onglet Statistics (StatisticsTab.lua, nouveau)
- Le StatisticsFrame de camelot sur les statistiques de hauts faits du
  client (GetStatisticsCategoryList, GetCategoryInfo, GetStatistic) :
  categories repliables, sous-categories au bouton campaign_headericon,
  survol, barre de camelot masquee si inutile, mise a jour sur
  CRITERIA_UPDATE ; l'etat replie survit aux mises a jour.
- Valeurs telles que le client les rend (noms des statistiques
  « ... most », montants d'or avec leurs pieces), « -- » sans valeur ;
  colonne de la valeur elargie a ce qu'elle porte.

Statistiques de camelot ajoutees aux hauts faits (data/dbc/statistiques.json)
- 14 boss de donjons classiques et 4 statistiques de raids a 20 / 40
  joueurs (entrees ; morts, en somme des morts sur les cartes de cette
  taille), suivies par le coeur.
- deployer.py, etape dbc (--dbc, --retirer-dbc, --serveur) : lignes
  ajoutees au DBC du client dans patch-Z, DBC du serveur recopie du client,
  lignes d'achievement_criteria_data (une creature tuee n'est comptee que
  si son critere y a une ligne) ; --verifier les controle.
- tools/foreverui/dbc.py : ajout et retrait de ses seules lignes DBC.

Micro-menu et exports pour les autres addons (session Progression)
- BottomBar.lua : ForeverUI.AjouterMicroBouton(def) et
  ForeverUI.MajMicro(nom, ouvert) ; ForeverUI ne connait plus aucun
  addon qui y ajoute un bouton.
- ForeverUI.PvPJauge (jauge circulaire, textures au choix),
  ForeverUI.StatusBarsPoser, exports de TradeSkill.lua.
- Art : legacy-up-c60 (et son masque), honorfill(half)blue,
  inv_misc_book_09 ; cuire_masque.py, cuire_portrait.py,
  decouper_elements.py.

Banc : essais de l'onglet Statistics et d'un micro-bouton d'un autre addon.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 03:39:09 +02:00
Adrestie b53f36a794 Fenetres secondaires, inspection, JcJ servi par le serveur, Deshonore
- hauts faits (Achievements.lua) : camelot n'en a pas, la fenetre du
  client se deplace par son en-tete, place gardee et reposee apres
  UpdateUIPanelPositions
- tutoriel (Tutorial.lua) : fenetre, bouton d'alerte et compteur masques
- horloge (TimeManager.lua) : ButtonFrameTemplate 220 x 240, globe en
  portrait, encart, menus d'alarme en style 1 (Gb.MenuStyle1), case
  d'alarme
- carte de zone (ZoneMap.lua) : cadre battlefieldminimap-border, croix
  rouge, alpha suivant l'opacite (image retiree : le client la repose)
- cabine d'essayage (DressUp.lua) : ButtonFrameTemplate 450 x 545, fond de
  race, fleches et rotation a la souris
- inspection (Inspect.lua) : 338 x 424, deplacable, portrait 48, onglets
  lateraux, page du personnage a la camelot (cadre Char-Paperdoll), page
  JcJ en cartes avec en tete le nom du rang et l'embleme de la faction
  sous son insigne, Civilian sans rang ni donnees ; bouton Talents
- talents de l'inspecte (Talents.lua) : notre fenetre en lecture seule,
  compacte (colonnes de 260, sans portes ni bande du bas), sans recherche
  ni points ; elle ne suit pas l'inspection
- JcJ (PvPTab.lua) : seuils de rang lus du serveur (canal d'addon
  PVPTITLES de mod-pvp-titles-ext : RANKS, REQ), sans serveur les seules
  victoires ; etat Deshonore (DISHONOR) : rang et temps restant, blason
  brise de la faction a la place de l'embleme
- debuff Deshonore dessine par ForeverUI en tete des affaiblissements
  (Buffs.lua), aucun sort ni DBC requis
- art : blasons brises honor-dishonored-alliance / -horde (cuits par
  tools/cuire_deshonneur.py), battlefieldminimap, char-paperdoll-*
- /fui croix : temoin de la croix de la feuille de personnage
- banc : inspection, talents compacts, tete JcJ, canal du serveur, blason
  brise, debuff dessine, temoin de la croix
- README : lignes JcJ, fenetres secondaires, ameliorations et affaiblissements

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 10:33:28 +02:00
Adrestie eb681aa9cd Aucun texte en dur : anglais en base, francais, langues extensibles
- socle : Textes.lua (ForeverUI.L) et ForeverUIGlueTextes.lua (G.L) ; les
  textes dans Textes_enUS / Textes_frFR (325 cles en jeu) et
  ForeverUIGlueTextes_enUS / _frFR (41 cles aux ecrans d'accueil) ; une cle
  absente prend l'anglais, une langue sans fichier lit l'anglais ; ajouter
  une langue = un fichier de plus
- les textes que le client 3.3.5 connait se lisent dans ses globales
  (GlobalStrings, GlueStrings en glue) ; les textes de secours sont retires
- tous les fichiers repris : libelles, infobulles, mode edition, messages et
  aide de /fui, erreurs internes ; .toc : Notes + Notes-frFR
- selection des personnages : race et classe traduites ramenees a leur jeton
  par les tables de langue (GetAvailableRaces / GetAvailableClasses font
  planter le client hors de la creation)
- tools/cartes_instances.py : noms des instances dans toutes les langues de
  la LibBabble-Zone de WDM (portails de la carte sur tout client)
- banc : toute cle employee existe en anglais et en francais, memes cles dans
  les deux, bascule frFR / deDE essayee ; chaines 3.3.5 ajoutees au faux client
- README : etat des sections mis a jour, langues, glue, deploiement --glue

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 03:22:30 +02:00
Adrestie 4628f3b4fb Social camelot (contacts, qui, guilde, raid, canaux), onglet PvP, cadres de groupe et de raid, bouton Social en tabard, fenetre de tabard camelot
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 14:00:12 +02:00
Adrestie 1c3f855557 Carte du monde : portails d'instance, bouton World, listes vers le bas ; feuille : onglet Pet, modeles a la souris
- Carte du monde : un clic sur le portail d'un donjon ou d'un raid (icones de
  WDM, livre dans patch-enus-n.mpq) ouvre sa carte par SetMapByID
  (WorldMapInstances.lua, genere des DBC du client par
  tools/cartes_instances.py)
- "World" mene a la vue cosmique (Azeroth / Outreterre), reste actif en donjon
- premiere ouverture en plein ecran habillee camelot d'emblee
- les listes des menus de la carte s'ouvrent vers le bas, calees dans l'ecran
- Feuille de personnage : icone de l'onglet Pet selon la classe ; le
  personnage et le familier tournent a la souris (reglages de camelot)
- /fui souris : le cadre sous la souris a chaque clic (diagnostic)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 20:01:43 +02:00
Adrestie cc7d2d45fa Talents camelot, glyphes refaits, cadre du familier, superposition des fenetres
- Talents : trois arbres cote a cote facon camelot sur PlayerTalentFrame,
  noeuds carres/ronds (TalentsData.lua genere des DBC), fleches, portes,
  changements en attente (Apply / Undo), onglets lateraux des specialisations,
  Activate, talents du familier en fenetre reduite, recherche (marques sur les
  noeuds, apercu, options, absents des barres), confirmation a la fermeture,
  glisser un sort de talent appris vers une barre
- Glyphes : page refaite sur l'art fourni (tools/cuire_glyphes.py), lueurs,
  etincelles, cercles concentriques tournants ; le GlyphFrame de WotLK reste
  sous PlayerTalentFrame (le reparenter plantait le client a la deconnexion)
- Cadre du familier facon camelot (PetFrame.lua)
- Superposition.lua : feuille, grimoire et talents passent entierement l'un
  devant l'autre, grimoire et talents deplacables
- Grimoire : la recherche "Missing from action bar" suit les barres

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 18:12:34 +02:00
Adrestie 8599265c5d Feuille : un troisieme onglet au volet droit, les titres
A la demande : camelot n a pas cet onglet -- son PAPERDOLL_SIDEBARS vaut
{STATS, EQUIPMENTMANAGER, PET} -- et l icone vient de mainline. La
disposition a trois, elle, vient de camelot : c est le DEUXIEME onglet
qui porte l ancre, le troisieme colle a sa droite et le premier a sa
gauche.

La liste prend toute la largeur du volet moins la marge des
statistiques, et le meme fond alterne qu elles. Le menu deroulant de
titre du client se tait a chaque passage : PlayerTitleFrame_UpdateTitles
le remontre des qu un titre change.

Le nom de la feuille suit le titre a UNIT_NAME_UPDATE, et non au clic :
SetCurrentTitle part au serveur, et UnitPVPName ne rend le nouveau nom
qu a la reponse.

Le TitleManagerPane de camelot est reste sur une ancre morte, sous la
bande de pierre : on prend celle de l EquipmentManagerPane.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 13:10:24 +02:00
Adrestie 0880e155a9 Feuille : l'onglet PvP, repris de camelot
PVPRankFrame.xml et pvprankframe.lua lus en entier. camelot tire tout de
C_MajorFactions -- le renom -- qui n'existe pas ici. Mais les trois
fonctions de l'epoque des rangs sont TOUJOURS dans le binaire, verifie dans
Wow.exe : UnitPVPRank, GetPVPRankInfo et GetPVPRankProgress. WotLK a
simplement cesse de s'en servir dans son FrameXML.

Heureuse coincidence : la planche c60 de camelot porte QUATORZE icones de
rang, exactement les quatorze rangs classiques. Son art est celui de
l'epoque.

Tout cet art vit sur une feuille que le listfile ne nomme pas :
ajouter_feuilles.py accepte desormais "fdid:<n>.blp => interface/...", et
retrouve ses entrees d'atlas par ce meme identifiant.

Trois ecarts assumes. La jauge circulaire n'est pas portable -- camelot la
fait avec un Cooldown dont il remplace la texture de balayage,
SetSwipeTexture, ABSENT du binaire ; l'anneau, la lueur, le fond de faction
et le badge sont poses, la progression s'ecrit en toutes lettres.
GameFontNormalMed2 n'existe pas. Le compte a rebours de saison demande un
C_SeasonInfo absent.

Le volet droit porte ce que WotLK sait vraiment donner : l'honneur.

Temoin : /fui pvp, qui dit ce que les trois fonctions rendent sur ce
serveur.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 02:04:16 +02:00
Adrestie ff72c844a5 Feuille : l'onglet des competences, repris de camelot
SkillsFrame.xml et skillsframe.lua lus en entier. Tout est commun avec la
reputation -- liste (10, -40) / (-25, 15), deux traits, retraits 0 / 2 / 46,
marges 10, ecart 3, survol a 0 / 0,10 / 0,20 -- sauf quatre choses :

  * l'en-tete fait 26 et non 28 ;
  * le nom d'une entree est a x = 2 et non 15, faute d'AccountWideIcon ;
  * la description du volet droit est a -8 sous la jauge et non -6 ;
  * LA BARRE EST BLEUE PAR SON SPRITE -- SetFillTextureByColorType(Blue)
    suivi d'UpdateBarColor(WHITE_FONT_COLOR), donc aucune teinte. Le
    remplissage bleu est cuit au masque comme le blanc.

Le texte de la barre est TOUJOURS la progression : rang / maximum, ou
rang (+bonus) / maximum avec le bonus en vert -- TryShowBarProgressText est
appele des l'initialisation. Et a l'ouverture, la premiere competence qui
n'est pas un en-tete est choisie, comme SelectFirstSkillIfNoneSelected le
veut.

Trois ecarts assumes : 3.3.5 n'a pas de sous-en-tete -- sa hierarchie n'a
qu'un niveau -- les lignes d'armes ne sont pas detaillees, faute des chaines
WEAPON_SKILL_DETAIL_*, et la description ne defile pas.

Temoin : /fui skills.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 01:52:48 +02:00
Adrestie 22e13463c8 Feuille : le volet droit montre le detail de la faction choisie
CharacterFrameSidePaneTemplate donne la surface -- TOPLEFT (16, -14) et
BOTTOMRIGHT (-12, 14) sur l'hote droit -- puis le titre large de 195 et
centre, le sous-titre, un UI-Character-Info-ScrollLine et la description.
ReputationDetailFrame y ajoute une StandingBar de 180 x 29 et trois cases de
26 empilees depuis le pied : la premiere a x = -4, les suivantes a (0, -2),
fond checkbox-minimal, coche UI-CheckBox-SwordCheck en 32 posee a (3, -5),
intitule large de 158 a +2, celui d'At War en rouge.

C'est le CLIENT qui remplit : ReputationFrame_Update ecrit le nom, la
description et l'etat des trois cases pour la faction que
SetSelectedFaction designe, et seulement si son cadre de detail est visible.
Cliquer une ligne le lui dit donc, puis relit ce qu'il a pose. Les trois
cases restent les siennes -- elles portent la declaration de guerre, le
rangement parmi les inactives et le suivi sur la barre du bas.

Deux ecarts assumes : GameFontNormalMed3 n'existe pas en 3.3.5, et la
description de camelot defile la ou la notre est simplement bornee.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 01:32:32 +02:00
Adrestie 6517687593 Feuille : l'onglet de reputation, repris du code de camelot
ReputationFrame.xml donne la liste -- TOPLEFT (10, -40) et BOTTOMRIGHT
(-25, 15) sur le volet gauche, deux traits UI-Character-Info-ScrollLine-Long
centres sur son haut et son bas -- et les gabarits : entree de 30, barre de
160 x 29 heritee de ColoredProgressBarTemplate, fond common-stat-bar-bg,
remplissage common-stat-bar-white teinte et haut de 15.

3.3.5 a les memes pieces sous d'autres noms : quinze ReputationBar<i>
ancrees une fois dans le XML, que ReputationFrame_Update ne fait que
remplir. On les repose une fois pour toutes et on se greffe apres lui pour
teindre, FACTION_BAR_COLORS donnant la couleur de chaque attitude.

Trois ecarts assumes, ecrits dans le fichier : pas de MaskTexture, donc les
bouts du remplissage restent carres ; un seul pas de ligne, la pagination du
client en exigeant un ; le nombre de lignes recalcule pour le volet, la
constante du client etant calee sur l'ancienne fenetre.

Un contenu peut se batir avant que la fenetre soit posee : la hauteur du
volet est prise par construction, la mesure ne servant que credible.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 23:06:03 +02:00
Adrestie bfa07df1a3 Feuille : l'onglet du personnage porte l'icone de sa classe
A LA DEMANDE, et non d'apres la source : camelot y met le portrait du
joueur -- CHARACTER_MODE_TAB_ICONS laisse la premiere entree a nil et
UpdateCharacterModeTabPortrait appelle SetPortraitTexture.

Une icone de classe demande un fichier par classe : les dix de 3.3.5 sont
versees depuis Interface/ICONS/ClassIcon_<classe> et cuites au masque comme
les autres, meme echelle et meme contour. Le jeton vient du second retour de
UnitClass et nomme le fichier ; la casse est sans importance, une archive
adresse ses fichiers par un condense insensible a la casse.

Le bouton Character Info du volet droit garde le portrait : il n'etait pas
concerne.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 22:23:24 +02:00
Adrestie f8f335a04f Feuille : les onglets lateraux passent sous l'encadrement
Un onglet est plus large que ce qu'on en voit : son art porte une langue a
gauche, qui vient se glisser sous la fenetre. Le fond de l'onglet y est
sombre et passait inapercu, mais le survol et le marqueur d'actif sont des
CONTOURS qui tracent toute la forme, langue comprise -- ils s'affichaient
donc par-dessus le metal du volet droit.

Aucun niveau n'etait fixe sur ces cadres : rien ne garantissait l'ordre. La
barre prend le niveau du cadre et les onglets un cran au-dessus, assez pour
couvrir le fond du panneau et pas assez pour atteindre l'habillage, qui vit
a NIVEAU_ART. Le banc verifie l'encadrement des trois niveaux.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 22:11:33 +02:00
Adrestie 06d1d424b0 Feuille : la colonne d'onglets se decale de 1, et les icones du volet
reprennent leur taille

DEUX CONSTANTES PORTAIENT LE MEME NOM. ONGLET_ICONE valait 28 pour les deux
onglets du volet droit -- Character Info et Equipment Manager. En portant
l'icone des onglets LATERAUX a 50, une seconde declaration du meme nom a ete
posee plus bas : en Lua elle masque la premiere pour tout ce qui suit, et
creerOngletVolet vient apres. Les deux boutons du volet s'etaient donc
agrandis sans qu'on l'ait demande.

Les noms sont maintenant distincts -- ONGLET_VOLET_ICONE et
ONGLET_LATERAL_ICONE -- et le banc verifie les deux tailles separement.

La colonne d'onglets se decale d'un pixel vers la droite, a la demande.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 21:59:47 +02:00
Adrestie 1957e7df20 Feuille : le masque des onglets est cuit dans l'alpha des icones
camelot decoupe l'icone d'un onglet par une MaskTexture -- common-sidetab-
mask -- et 3.3.5 n'en a pas : les angles restaient carres. Ce que le client
ne sait pas faire a l'ecran, tools/cuire_masque.py le fait avant.

La geometrie vient de la source et non d'une estimation : onglet 55 x 55,
masque 55 x 60 ancre au centre, icone 50 x 50 en (-3, 0) rognee a 0,03125 ;
hors du masque, CLAMPTOBLACKADDITIVE donne zero.

Deux dossiers : icons/ garde l'export brut -- provenance et entree de la
cuisson -- TabIcons/ porte les versions cuites, et c'est celles-la qu'on
affiche. Relancer l'outil refait les secondes a partir des premieres, sans
wow.export.

L'outil ecrit aussi l'apercu PNG que l'atelier exige a cote de chaque .blp :
ceux qui viennent du client sortent de wow.export, une image que NOUS
fabriquons n'a personne pour la produire.

Le portrait du personnage garde ses angles vifs : son icone n'est pas un
fichier, SetPortraitTexture la repose a chaque changement d'apparence.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 21:52:24 +02:00
Adrestie 7c65d31931 Feuille : l'onglet actif se voit, et l'icone remplit son onglet
LargeSideTabButtonTemplate empile quatre choses : common-sidetab en fond,
l'icone, common-sidetab-SELECTED en OVERLAY pour l'onglet actif, et
common-sidetab-hover en HIGHLIGHT pour le survol seul. Le marqueur d'actif
n'etait pas pose -- son atlas etait declare et jamais utilise, et rien a
l'ecran ne disait quel onglet etait ouvert. Une seule chose le decide : le
groupe ouvert, donc rien a retenir et aucun clic a intercepter.

L'icone passe de 32 a 50 : fillToInterior est vrai pour ces onglets, et
UpdateIconInterior pose SetSize(interiorExtent, interiorExtent) -- 50 par
defaut -- avec SetTexCoord(0.03125, 0.96875). L'onglet faisant 55 de large,
l'icone prend tout l'interieur moins le bord. Un tiers de la surface etait
perdu.

Reste un ecart assume : la source masque l'icone par common-sidetab-mask,
une MaskTexture que 3.3.5 n'a pas. Ses angles restent carres.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 21:46:47 +02:00
Adrestie 2d5dc1c45f Feuille : les onglets PvP et statistiques, que 3.3.5 n'avait pas
CHARACTERFRAME_SUBFRAMES en compte cinq, camelot six. Les deux manquants
sont crees avec leurs icones -- celle du PvP suit la faction, comme
SetupModeTabs le fait pour son quatrieme onglet. L'ordre de la colonne suit
camelot : PvP entre competences et monnaie, statistiques en dernier ; le
familier garde la deuxieme place que 3.3.5 lui donne.

LE PvP CESSE D'ETRE UNE FENETRE. PVPParentFrame -- 384 x 512, toplevel, fils
d'UIParent -- est reparente dans le volet gauche et son toplevel retire,
sans quoi il resterait au-dessus de tout. Reparenter est sans danger ici :
ce cadre ne porte aucun de nos reglages de niveau. TogglePVPFrame, donc la
touche et le bouton du micro-menu, ouvre desormais la feuille sur cet
onglet. Sa mise en page reste a faire.

L'onglet des statistiques est vide, et c'est voulu : 3.3.5 met les siennes
dans AchievementFrameStats, une fenetre a part, et ce qu'il faut y mettre
n'est pas decide.

Un ecran qui n'est pas au client ne passe pas par CharacterFrame_ShowSubFrame
-- elle ne connait que ses cinq cadres et laisserait la feuille sans groupe.
Les deux gestes se font separement.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 21:42:13 +02:00
Adrestie ea8225d86b Feuille : le releve des icones d'onglet en comptait cinq, il y en a six
CHARACTER_MODE_TAB_ICONS porte aussi INV_SideTab_Stats_c60, que le premier
releve avait omis. Son identifiant -- 8197104 -- rejoint ceux du PvP dans le
code et dans tools/fichiers_simples.txt.

Aucun des trois n'est verse : la feuille de 3.3.5 n'a ni onglet PvP ni
onglet des statistiques. CHARACTERFRAME_SUBFRAMES en compte cinq, et les
statistiques du jeu vivent dans AchievementFrameStats, une fenetre a part
que Blizzard_AchievementUI charge a la demande.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 21:36:54 +02:00
Adrestie 2babda80f6 Feuille : reputation et monnaie portent enfin leurs icones
Le listfile communautaire ne nomme pas les INV_SideTab_*_c60 : elles
n'existent que par leur FileDataID. ajouter_feuilles.py accepte donc une
ligne "source => nom voulu" -- on exporte par l'identifiant et on range sous
le nom que camelot donne, pour que l'atelier reste lisible et que
l'identifiant demeure note.

Reputation 8197103, monnaie 8197078 : verifiees a l'apercu -- une poignee de
main, une pile de pieces -- puis posees sur les onglets 3 et 5. Avec celle
des competences, les trois onglets que camelot decrit portent leur icone.

Les deux icones PvP ne sont pas versees : la feuille de 3.3.5 n'a pas cet
onglet. Leurs identifiants sont notes pour le jour ou elle en aura un.

L'onglet du familier garde son texte : camelot n'en a pas, donc aucune
source.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 21:33:18 +02:00
Adrestie ab84ac8470 Feuille : les onglets lateraux portent les icones de camelot
CHARACTER_MODE_TAB_ICONS nomme trois icones. Celle des competences --
Ability_Racial_JackofAllTrades -- est versee et remplace le mot.

Les deux autres, INV_SideTab_Reputation2_c60 et INV_SideTab_Currency_c60,
sont introuvables : le client charge dans wow.export EST celui de camelot,
wow_classic_beta 1.60.1.69913, et son code les nomme, mais le listfile
communautaire ne leur donne aucun nom -- /resolve rend null, /search n'en
connait aucune. Reputation et monnaie gardent donc le texte du client
plutot qu'une icone inventee. L'onglet du familier, lui, n'existe pas chez
camelot : aucune source, donc pas d'icone non plus.

UpdateTabLayout corrige au passage l'ecart entre deux onglets : (0, -2) et
non (0, 0). Le chevauchement de 2 px etait perdu. La meme fonction confirme
la regle du precedent VISIBLE, posee la veille.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 21:22:21 +02:00
Adrestie 8d4b66e3db Feuille : les onglets lateraux ne laissent plus de trou
3.3.5 efface l'onglet du familier quand le personnage n'en a pas --
PetPaperDollFrame_UpdateIsAvailable fait CharacterFrameTab2:Hide(), puis
rattache le suivant sur le LEFT du masque, sa reparation a lui, pensee pour
une rangee horizontale.

En colonne, l'onglet masque restait ancre et reservait sa hauteur :
reputation, competences et monnaie flottaient sous le personnage au lieu de
le suivre. La pile ne chaine plus que sur le precedent VISIBLE, et se refait
a chaque appel de cette fonction -- la seule qui decide de cet etat.

Le faux client sait desormais masquer cet onglet comme le vrai, avec son
rattachement horizontal, et le banc verifie les deux sens.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 21:17:33 +02:00
Adrestie e3b4e3360d Feuille : le volet droit reste ouvert d'un onglet a l'autre
La source le dit : UpdateRightPaneHeader ne masque que le StoneBg -- "the
stone header backs the PaperDoll sidebar tabs, so it should not render on
tabs that have none" -- et RightPaneHost demeure. Chaque onglet aura ses
propres informations a y mettre ; le volet leur est reserve des maintenant,
vide en attendant.

Ce qui s'en va d'un onglet a l'autre n'est donc pas le volet mais le
MOBILIER du groupe : bande de pierre, onglets de page et ligne de niveau
pour le personnage -- les trois choses exactes que la source masque.

Le mobilier est un troisieme niveau dans Panes.lua, parce que deux ne
suffisaient pas : la pierre et les onglets de page appartiennent au groupe
et non a l'une de ses deux pages, ou passer de l'une a l'autre les aurait
emportes.

Le repli, lui, traverse les onglets : replie sur le personnage, il l'est
encore sur les competences, et se defait depuis n'importe lequel.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 20:53:23 +02:00
Adrestie a7e83d694d Feuille : un fichier neuf ne casse plus la feuille, il se signale
ForeverUI.Panes valait nil en jeu : le client dresse la liste des fichiers
d'un addon a l'ouverture, et /reload rejoue ceux qu'il connait sans en
decouvrir de nouveau. Panes.lua etait sur le disque et inscrit au .toc, et
pourtant absent -- la feuille s'arretait sur une erreur au chargement.

Elle le dit maintenant au joueur et se tait : le reste de l'interface tient.
Le banc rejoue le cas dans un client neuf, sans ce fichier.

A retenir, et ecrit dans le README : tout nouveau fichier demande de fermer
et rouvrir le jeu.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 19:46:40 +02:00
Adrestie 9bff436351 Feuille : hotes, groupes et pages -- la visibilite n'a plus qu'un endroit
Elle se decidait a cinq : l'habillage, les deux onglets du volet, le repli
et la fonction des statistiques. Et l'habillage reposait TOUTE la geometrie
a chaque evenement. D'ou deux fautes que rien ne pouvait prevenir -- le
panneau du gestionnaire survivait a un changement d'onglet lateral, parce
qu'il appartient a NOTRE volet et non au PaperDollFrame du client ; les
barres de reputation traversaient ce volet, ReputationFrame gardant la
taille de la fenetre d'origine sans que personne ne le borne.

Panes.lua pose le modele de camelot : des HOTES, des GROUPES -- ce qu'un
onglet ouvre, un ecran entier -- et des PAGES, deux contenus qui se
partagent une surface. Un contenu se batit UNE fois, a sa premiere
ouverture, et ne fait ensuite que paraitre.

Les cadres du client ne sont pas reparentes : cela reinitialiserait niveau
et strate, et des reglages deja valides avec. Un contenu declare la liste
de ceux qu'il possede.

CharacterFrame_ShowSubFrame est le commutateur : le nom de l'ecran sert de
nom de groupe. La largeur de la fenetre devient une consequence -- l'hote
droit a-t-il quelque chose a montrer -- et le bouton de repli disparait la
ou il n'y a rien a replier.

Aucune mesure ne bouge : le banc le verifie sur vingt allers-retours, et
tous les essais de geometrie deja valides passent inchanges. /fui perso
rapporte desormais l'etat des hotes en tete.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 19:26:23 +02:00
Adrestie 52ac288817 Feuille : le volet droit se replie, les onglets lateraux restent
Bouton de 28 au coin haut droit du volet gauche, releve de camelot :
fleches de page, PrevPage depliee, NextPage repliee, survol UI-Common-
MouseHilight. Replie, la fenetre passe a 398 -- exactement la largeur du
volet gauche : le volet droit ne retrecit pas, il s'en va.

Ce qui part avec lui : les douze lignes de statistiques, leurs selecteurs
et le panneau du gestionnaire, qui sont des cadres DU CLIENT seulement
ancres dans notre volet -- les masquer un par un est necessaire.

Ce qui reste : tout le volet gauche, et les onglets lateraux, ancres au
bord droit de la fenetre et non au volet. La source ne les masque pas non
plus.

Quatre pieges regles : la largeur se decide en fin d'habillage, sinon le
passage suivant rouvrait le volet ; l'onglet ouvert se retient, sinon le
depli revenait toujours aux statistiques ; le bouton prend deux crans de
plus que le modele, qui recouvre son coin ; reposerLaPlace est declaree en
amont.

Le faux client retient desormais le proprietaire et le texte de
l'infobulle, et repond a GetOwner comme le jeu.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 19:12:39 +02:00
Adrestie 628cdb05e5 Gestionnaire : "New Set" en bouton tertiaire, comme les selecteurs
La recette du bouton tertiaire et ses mesures passent dans
ForeverUI.SkinTertiaryButton (AtlasUtil), employee par les selecteurs de
statistiques et par ce bouton. Son option auto fait suivre l'etat presse
au bouton de la souris ; sans elle l'appelant commande, ce que font les
selecteurs dont l'etat tient tant que leur liste est ouverte.

L'intitule est ecrit en dur : PAPERDOLL_NEWEQUIPMENTSET n'existe pas ici
et ce client ne porte aucune chaine equivalente.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 15:46:54 +02:00
Adrestie 8ceabb9355 Gestionnaire : le panneau suit son onglet, et son bouton s'appelle New
Les boutons du panneau sont ses cadres fils, pas ceux de la fenetre du
client : masquer GearManagerDialog ne les emportait pas, et le bouton
restait visible sous les statistiques. Le panneau entier se montre et se
cache avec l'onglet.

Son intitule venait de NEW_COMPACT_UNIT_FRAME_PROFILE, absente de ce
client -- d'ou "New Profile", une chaine d'un tout autre panneau.
PAPERDOLL_NEWEQUIPMENTSET, que camelot ecrit, n'existe pas ici non plus :
NEW est la plus proche, et elle va avec Equip et Save.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 15:42:42 +02:00
Adrestie 0fa323cb13 Feuille : la liste tombe sous le bouton, sans decalage
Sans ancrage donne, ToggleDropDownMenu accroche la liste a "<nom>Left" --
la piece doree du menu deroulant, que nous avons justement masquee --
d'ou le decalage. UIDropDownMenu_SetAnchor est l'entree prevue par le
client : TOPLEFT de la liste sur le BOTTOMLEFT du bouton, sans ecart.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 15:18:21 +02:00
Adrestie 073870a6be Feuille : le clic ne retaille plus le selecteur
UIDropDownMenu_InitializeHelper finit par
frame:SetHeight(UIDROPDOWNMENU_BUTTON_HEIGHT * 2). Cette constante, nous
l'avons portee a 20 pour les lignes de menu de camelot : le selecteur
reprenait donc 40 des qu'on cliquait dessus.

La taille voulue est retenue sur le cadre et reposee par un greffon sur
UIDropDownMenu_Initialize, qui passe apres le securecall de l'aide.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 14:58:51 +02:00
Adrestie 601c65b5e5 Feuille : les selecteurs passent de 40 a 34 de haut
C'est la hauteur propre de l'art de bouton
(common-button-tertiary-normal, 46 x 34) : a cette taille la bande
centrale du decoupage ne s'etire plus du tout en hauteur. Les lignes de
statistiques remontent d'autant.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 14:56:14 +02:00
Adrestie 5f582e6cc9 Feuille : majEtatSelecteurs etait appelee avant d'etre ecrite
habillerSelecteur la greffe sur la liste, et elle n'etait ecrite que plus
bas : son nom s'y resolvait en globale, donc nil, et HookScript refusait
le greffon. Declaration anticipee.

Le banc ne l'a pas vu parce que son HookScript acceptait nil. Il refuse
desormais tout greffon qui n'est pas une fonction, comme le vrai.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 14:54:43 +02:00
Adrestie 87c07d3772 Feuille : les selecteurs deviennent des boutons tertiaires
A la demande : l'en-tete UI-Character-Info-Title laisse la place a l'art
commonbuttontertiaryc60, normal et pressed, et la fleche du client s'en
va -- toute la barre ouvre deja le menu.

Decoupe et non etire : a partir de x = 11 le profil d'une colonne ne
change plus, donc coin de 11 sur les deux axes. Tendue de 46 a 203,
l'image ecraserait ses angles.

L'etat presse tient tant que la liste est ouverte. Elle se ferme de deux
facons -- ToggleDropDownMenu et CloseDropDownMenus -- donc l'etat se
releve sur le OnShow et le OnHide de la liste elle-meme.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 14:53:05 +02:00
Adrestie 872fe811b2 Feuille : l'icone du gestionnaire est rognee au carre
UI-GearManager-Button fait 64 x 64 mais son contenu opaque n'occupe que
x 6..58 sur toute la hauteur : c'est un bouton de 52 x 64, qui paraissait
rectangulaire dans un onglet carre. On en prend le carre central, la meme
plage sur les deux axes, comme l'onglet des statistiques rogne son
portrait.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 14:48:41 +02:00
Adrestie e9656c56c6 Gestionnaire d'equipement dans le volet droit
Sur le releve de PaperDollFrame.EquipmentManagerPane et de
GearSetButtonTemplate : panneau sous la bande de pierre, bordure
common-insideframe, cartes de 169 x 44 en colonne avec leur fond
OutfitCard, leur icone cerclee, leur intitule et la coche des ensembles
portes, puis Equip, Save et New Set au bas.

Rien n'est recree : GearManagerDialog passe dans le volet, son art de
fenetre est efface, ses cartes se reposent et se rhabillent. Le client
garde la liste, la selection et les infobulles.

Ecarts documentes : New Set passe par le Save du client, Delete est
garde (3.3.5 n'a pas le menu de carte de camelot), la coche se calcule
depuis GetEquipmentSetLocations, et la liste defile a la molette faute
de MinimalScrollBar.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 14:38:11 +02:00
Adrestie 137c62052f Feuille : la place retenue resiste au systeme de panneaux
GearManagerDialog_OnShow appelle UpdateUIPanelPositions(CharacterFrame)
et _OnHide appelle UpdateUIPanelPositions() : le systeme replace la
feuille a SA position et la place retenue par le joueur est perdue.

Le greffon est pose sur UpdateUIPanelPositions elle-meme, pas sur le
seul gestionnaire : toute autre ouverture qui la declenche pose le meme
probleme.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 14:28:25 +02:00
Adrestie ddefd603e8 Feuille : icone dans l'ouverture du cadre, et onglets qui commandent les stats
camelot donne 42 a son Icon, soit tout le bouton, mais ses icones
portent leur propre marge transparente ; un portrait remplit sa texture
et ressortait des angles arrondis. Mesure sur UI-Character-Info-StatTab :
metal en 3..6 et 35..38, ouverture de 7 a 34, soit 28.

Les deux se comportent en onglets : le gestionnaire ouvre son panneau et
masque les statistiques, les statistiques le ferment et reviennent. Au
retour on laisse PaperDollFrame_UpdateStats refaire le travail -- lui
seul sait cacher la sixieme ligne des categories a cinq statistiques --
et poserStatistiques lit l'etat de l'onglet au lieu de tout rallumer a
chaque evenement.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 14:25:00 +02:00