Commit Graph

27 Commits

Author SHA1 Message Date
Claude 8407058297 ForeverUI : ensembles, boutons de la page gardés quand un panneau s'ouvre
GearManagerDialog fait partie des UIChildWindows : CloseChildWindows le
masquait dès qu'un panneau s'ouvrait à côté de la feuille (grimoire,
quêtes...), et la page des ensembles perdait Équiper et Enregistrer. Il est
réaffiché tant que la page est à l'écran, hors combat seulement (son
OnShow écrit un attribut de CharacterFrame, protégé).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxRZNHkq453dyUMcWsyUf1
2026-10-01 23:36:57 +00: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 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 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 d110de1cbe Chat et barres d'auras a la DA de camelot ; plus aucune globale du client ecrite par l'addon
- Chat : cadre, barre et bouton de retour, colonne, bouton d'amis de camelot ;
  au repos fond, onglets, colonne et saisie s'effacent, allumage au survol
- Barres d'ameliorations et d'affaiblissements (Buffs.lua) : grille, bordures
  par type, clignotement, repli, regroupement, enchantements d'arme
- Souillure : StaticPopupDialogs n'est plus reaffectee (BindEnchant bloque) ;
  menus deroulants, suivi des objectifs, choix d'icone, ajout de canal et
  carte du monde n'ecrivent plus les globales du client ; menus d'unite :
  lignes protegees servies par des boutons securises hors combat, grisees en
  combat ; seule MAP_QUEST_DIFFICULTY reste, par decision
- Gestionnaire d'ensembles : plus d'appel GetEquipmentSetIconInfo(nil)
- Banc : garde des globales ecrites (bytecode Lua 5.1), faux client durci

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 18:36:19 +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 5ff3687c1e Gestionnaire : l'ordre retenu ne garde qu'une fois chaque nom
Le temoin /fui sets a donne la cause : pour UN ensemble publie par le
client, l'ordre retenu en tenait sept -- "aab" quatre fois, plus trois noms
effaces. Un nom que le client ne publie pas a cet instant est saute par la
premiere boucle, et la seconde le rajoute des qu'il reparait ; quelques
renommages suffisaient a empiler les copies.

Chaque copie prenant un rang, l'ensemble se posait quatre fois. Et la
boucle d'affichage testait "index <= total" avec index = le RANG au lieu de
l'indice du client : la carte finissait au rang 4 pour un total de 1, donc
masquee -- liste vide apres un renommage.

Trois corrections : un nom n'est place qu'une fois ; remplacerDansOrdre
retire les copies du nom qu'il pose ; l'ordre se nettoie des noms effaces,
mais seulement quand le client publie au moins un ensemble. Le vrai indice
se lit dans ordre[position].

Le banc rejoue l'ordre corrompu rapporte par le temoin, et verifie qu'a
zero ensemble publie l'ordre reste intact.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 18:17:41 +02:00
Adrestie f5cebaaa62 Gestionnaire : la liste se surveille au lieu d'attendre un signal
Renommer un ensemble laissait la liste vide jusqu'a l'operation suivante.
Le rattrapage d'une image manquait encore la publication du client : les
ensembles vivent cote serveur, et aucun moment n'est sur -- ni le retour de
SaveEquipmentSet, ni l'instant de EQUIPMENT_SETS_CHANGED, ni l'image d'apres.

Le panneau compare donc toutes les 0,2 s ce que le client rend au contenu
affiche, et repose les cartes des que cela differe. Liste inchangee, rien
n'est repose. Le controle ne tourne que panneau ouvert.

Le banc rejoue desormais le pire cas -- evenement avant publication,
rattrapage dans le vide, plus rien d'annonce ensuite -- et verifie qu'un
seul battement repare, sans pose inutile quand la liste ne bouge pas.

Ajoute /fui sets : temoin des trois etats qui decident de l'affichage.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 18:13:45 +02:00
Adrestie 70e4088ba6 Gestionnaire : la liste ne reste plus en retard d'une operation
Deux fautes, qui se cumulaient.

GetNumEquipmentSets et GetEquipmentSetInfo ne rendent pas le nouvel etat
dans la foulee d'un enregistrement, ni meme a l'instant ou
EQUIPMENT_SETS_CHANGED arrive : la liste se reposait sur l'etat d'avant.
Elle se repose desormais a l'image suivante, comme la hauteur des sacs.

Et l'ordre retenu s'elaguait pendant l'affichage : quand le client ne
rend momentanement aucun ensemble, la table se vidait pour de bon et les
noms y revenaient un par un. Un nom inconnu est maintenant saute.

Le banc rendait ses listes tout de suite et ne pouvait pas le voir : il
repond desormais sur un etat publie, qui ne rattrape le vrai qu'a
l'evenement. La sequence signalee est un test.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 18:03:00 +02:00
Adrestie 68539578c5 Gestionnaire : les cartes se reposent sur EQUIPMENT_SETS_CHANGED
SaveEquipmentSet et DeleteEquipmentSet rendent la main avant que
GetNumEquipmentSets ait change : reposer les cartes dans la foulee
montrait l'etat d'avant, et un ensemble renomme n'apparaissait qu'a la
prochaine secousse de la liste.

On s'abonne soi-meme a l'evenement, le client ne l'ecoutant que fenetre
ouverte alors que notre panneau peut etre sur l'autre onglet. Le contenu
des cartes venant de lui, son GearManagerDialog_Update est refait aussi.
L'ordre retenu est elague des ensembles effaces.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 17:57:16 +02:00
Adrestie e9b0f8f5cd Gestionnaire : un renommage n'efface plus l'ancien sans creer le nouveau
Deux causes d'echec silencieux de l'enregistrement. L'indice d'icone peut
manquer : la fenetre retient l'icone preselectionnee dans selectedTexture
et ne la convertit en selectedIcon que pour les icones de la page
visible. Et MAX_EQUIPMENT_SETS_PER_PLAYER : creer avant d'effacer demande
une place de plus, qui n'existe pas au plafond.

Sans indice valide on abandonne ; au plafond l'ancien part d'abord, ce
qui est sans risque puisque son equipement est porte a cet instant ; et
l'effacement suit toujours une verification par
GetEquipmentSetInfoByName.

Le banc couvre les deux cas, et clot le remplacement asynchrone par son
evenement.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 17:52:55 +02:00
Adrestie 6bd9aa1bf3 Gestionnaire : le nom etait lu apres la fermeture de la fenetre
GearManagerDialogPopup_OnHide remet popup.name a nil : je le lisais apres
popup:Hide(), d'ou SaveEquipmentSet(nil, ...) et son Usage. Le nom et
l'icone sont desormais lus avant, et un drapeau dit au greffon du OnHide
que la fermeture vient de nous, pour qu'il n'abandonne pas l'edition.

Trois manques du banc l'avaient laisse passer : son Hide ne declenchait
pas OnHide, son SaveEquipmentSet acceptait un nom vide, et son
GearManagerDialogSaveSet_OnClick ne montrait pas la fenetre. Les trois
sont corriges, et le banc echoue bien sur l'ancien code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 17:48:42 +02:00
Adrestie 46245fc04b Gestionnaire : modifier un ensemble garde ses objets et sa place
Ce client n'a pas de ModifyEquipmentSet : SaveEquipmentSet enregistre
l'equipement PORTE. Le chemin retenu equipe donc l'ancien ensemble --
l'equipement porte devient sa liste -- l'enregistre sous le nouveau nom
et la nouvelle icone, efface l'ancien et remet le nouveau a sa place.

C'est asynchrone : EQUIPMENT_SWAP_FINISHED annonce la fin, avec un
abandon au bout de dix secondes. Si l'ensemble est deja porte, on
enchaine directement.

Le Okay de la fenetre est REPRIS et non greffe : un greffon passerait
apres le client, qui aurait deja enregistre l'equipement porte sous ce
nom.

L'ordre d'affichage est tenu dans ForeverUIDB, 3.3.5 n'ayant aucun moyen
de replacer un ensemble dans sa liste.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 17:44:35 +02:00
Adrestie b997c6dcfd Gestionnaire : engrenage et croix rouge au survol d'une carte
Sur le releve de GearSetButtonTemplate : croix 14 x 14 a BOTTOMRIGHT
(-21, 2) sur UI-GroupLoot-Pass-Up, engrenage 16 x 16 a RIGHT sur son
LEFT sur GEAR_64GREY, alpha 0,5 au repos et 1 au survol, texture decalee
de (1, -1) a l'appui. Les deux textures existent deja dans 3.3.5.

Le survol se suit a chaque image et non par OnEnter : ce sont des cadres
fils de la carte, y entrer declencherait son OnLeave. camelot fait de
meme dans PaperDollEquipmentManagerPane_OnUpdate.

La croix appelle CONFIRM_DELETE_EQUIPMENT_SET, la fenetre de validation
du client. L'engrenage choisit l'ensemble puis rouvre la fenetre de
creation : le client la remplit de son nom et de son icone, et son Okay
ecrase au lieu de creer.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 17:36:26 +02:00
Adrestie 9bec5f2fce Gestionnaire : la coche suit vraiment l'ensemble equipe
Deux defauts distincts.

GetEquipmentSetLocations rend une table indexee par emplacement, et
EquipmentManager_UnpackLocation rend joueur, banque, sacs, SLOT. Je ne
lisais que les deux premiers drapeaux : une piece portee dans un AUTRE
emplacement passait pour bonne, d'ou des coches sur des ensembles sans
rapport. Le slot rendu doit valoir la cle.

Et si deux ensembles decrivent le meme equipement, la geometrie ne peut
pas les departager. 3.3.5 n'a aucune notion d'ensemble actif : le dernier
equipe est retenu par un greffon sur UseEquipmentSet, garde dans
ForeverUIDB, et la coche va a celui-la tant qu'il est encore porte.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 17:28:11 +02:00
Adrestie b38e08335a Gestionnaire : la coche longe le bord droit de la carte
camelot ancre sa coche a RIGHT (-23) du bouton, qui chez lui s'arrete 25
px avant le bord de la carte. Ici le bouton couvre toute la carte, si
bien que le meme -23 la ramenait trop vers la gauche : elle passe a -12
du bord droit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 17:23:47 +02:00
Adrestie b23ce860fd Gestionnaire : cartes decalees, retaillees, et choix au-dessus du survol
La liste glisse de 4 vers la droite, la carte descend a 40 de haut (fond
45, le debord de 5 de la source garde) et son fond passe a 174 de large.
Cette largeur est calculee, pas ecrite : l'ecart separateur -> icone
egale l'ecart carte -> bord de la fenetre, 8 de chaque cote.

Le choix et le survol etaient sur le meme calque, ou seul l'ordre de
creation departage. Le survol reste en BORDER, le choix monte en
ARTWORK.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 16:50:05 +02:00
Adrestie fb2b852dea Gestionnaire : la fenetre du client se hissait au-dessus du bouton
GearManagerDialog est declaree toplevel dans le FrameXML et son OnShow
finit par GearManagerDialog:Raise() : a chaque ouverture elle repasse au
sommet de sa strate, apres tout niveau pose une fois pour toutes. D'ou un
bouton qui ne recevait rien malgre un niveau superieur.

SetToplevel(false), puisqu'elle n'est plus une fenetre, et le niveau du
bouton recalcule depuis le sien a chaque passage.

Le banc reproduit desormais Raise et toplevel.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 15:52:11 +02:00
Adrestie 7e01ee0c93 Gestionnaire : "New Set" passe au-dessus de la fenetre du client
GearManagerDialog est etalee sur tout le panneau, elle prend la souris et
elle est posee un cran plus haut : un bouton fils du panneau passait
dessous et ne recevait plus rien. Ceux du client -- Equip, Save -- sont
ses enfants a elle, donc epargnes.

Meme famille de defaut que le modele 3D sur les emplacements
d'equipement.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 15:49: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 023ca7d1fd Gestionnaire : la croix rouge de fermeture s'en va
UIPanelDialogTemplate nomme son bouton $parentClose --
GearManagerDialogClose -- et non $parentCloseButton : le masquer sous le
mauvais nom ne faisait rien. C'est refait a chaque passage, le client
remontrant ses morceaux quand il rouvre sa fenetre.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 14:45:57 +02:00
Adrestie f80f5d46d7 Gestionnaire : bordure decalee d'un pixel de plus, soit 3 au total
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 14:44:30 +02:00
Adrestie 8244265738 Gestionnaire : bordure decalee de 2 px vers la droite
Les deux bords bougent ensemble -- gauche de -1 a -3, droit de -4 a -2 --
sinon la bordure s'elargirait au lieu de glisser.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 14:43:18 +02:00
Adrestie 22407af038 Gestionnaire : la bordure se decoupe au lieu de s'etirer
common-insideframe fait 107 x 107 et porte un motif dans chaque angle :
tendue sur les 233 x 379 du panneau, elle est multipliee par deux en
largeur et trois et demi en hauteur, et tout se brouille.

Neuf tranches, coin de 20 -- mesure sur l'art : le filet occupe 2..12 et
94..104, le motif d'angle s'arrete a 19. Les marges de camelot (TOPLEFT
1,1 et BOTTOMRIGHT -4,2) converties en -1, 1, -4, -2.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 14:41:37 +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