Files
moon-well-ui/data/addon/ForeverUI/ChatConfig.lua
T
Adrestie e6f4b0c704 Infobulles, menu Echap et reglages a la DA de camelot
- infobulles (Tooltips.lua) : decoupe en neuf TooltipDefaultLayout a la
  place du Backdrop de 3.3.5, couleurs du client suivies, infobulles des
  addons reprises, bandeau de comparaison (tooltip-compare-label), croix
  rouge d'ItemRefTooltip
- gabarits communs (Gabarits.lua) : portage en jeu des gabarits valides de
  l'accueil -- cadre de dialogue, en-tete, fenetre translucide, encart,
  croix, boutons rouge / de panneau / argente, barre MinimalScrollBar
  posee sur celle du client, cadre interieur, recopie de texte
- menu Echap (GameMenu.lua) : DialogBorder, en-tete, boutons rouges en
  colonne (ecarts de 20)
- Video, Son et voix, Interface (Settings.lua) : fenetre de camelot, croix
  = HideUIPanel, listes de categories, cases, curseurs, cadres de groupe,
  menus deroulants style 2 (DropDown.lua), onglets MinimalTab ; cadre
  interieur Options_InnerFrame pour les trois fenetres ; Interface a la
  disposition de camelot (listes a -76, fenetre +36)
- raccourcis (Bindings.lua) : fenetre calee sur l'art visible de 3.3.5,
  boutons argentes et lisere du choisi, textes recopies au-dessus
- macros (Macros.lua) : disposition de camelot (338 x 424, portrait,
  onglets du haut, grille 6 x), choix d'icone 525 x 495 en rangees de dix
- configuration du chat (ChatConfig.lua) : DialogBorder, boites en
  decoupe d'infobulle aux couleurs du client, lignes creees ensuite
  reprises, liste des filtres sans lisere
- selecteur de couleur (ColorPicker.lua) : 388 / 331 x 210, places de
  camelot, curseur d'opacite du client en colonne alpha (damier, degrade,
  fleches) ; OpacityFrame en DialogBorder
- art : tooltiplabel, commonbuttonsdropdown, ui-silver-button-select,
  colorpicker (6 entrees d'atlas ajoutees, aucune modifiee)
- banc : vrais types de cadre, OnEnable / OnDisable, OnValueChanged,
  couleurs de Backdrop, degrades ; faux et essais des fenetres reprises

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 05:58:30 +02:00

121 lines
4.6 KiB
Lua

-- ForeverUI : la configuration du chat (ChatConfigFrame), a la DA de
-- camelot (demande de l'utilisateur, 2026-09-28 : « fait le menu et
-- reglages », etape 3).
--
-- RELEVE -- CE QUE LE CLIENT CHARGE (ChatConfigFrame.xml / .lua de 3.3.5) :
-- ChatConfigFrame 645 x 595, <Backdrop> UI-DialogBox, en-tete
-- UI-DialogBox-Header et ChatConfigFrameHeaderText (CHATCONFIG_HEADER,
-- pose a l'ouverture) ;
-- ChatConfigBoxTemplate : <Backdrop> d'infobulle (fond et bord), bord
-- TOOLTIP_DEFAULT_COLOR a 0,5, fond TOOLTIP_DEFAULT_BACKGROUND_COLOR ;
-- les cadres a case et a nuancier (ChatConfigCheckBoxTemplate,
-- ChatConfigSwatchTemplate, et six cadres du journal de combat) : le
-- meme bord, sans fond ;
-- les lignes a case et a nuancier sont creees par ChatConfig_Create-
-- Checkboxes / _CreateTieredCheckboxes / _CreateColorSwatches a
-- PLAYER_ENTERING_WORLD, les onglets des filtres a la demande ;
-- la liste des filtres du journal de combat : FauxScrollFrameTemplate-
-- Light et sa barre.
--
-- RELEVE -- CAMELOT (blizzard_chatframe/mainline/chatconfigframe.xml, le
-- [Family] de camelot) : la meme fenetre, les memes noms et gabarits --
-- ChatConfigFrame : DialogBorderTemplate et DialogHeaderTemplate
-- (headerTextPadding 100) ;
-- ChatConfigBoxTemplate = TooltipBackdropTemplate, bord a 0,5 ;
-- ChatConfigBorderBoxTemplate = TooltipBorderBackdropTemplate (le bord
-- seul), bord a 0,5 ;
-- cases (UI-CheckBox-*), boutons de categorie (UI-Listbox-Highlight2),
-- onglets (ChatFrameTab), nuanciers (ChatFrameColorSwatch) et boutons
-- UIPanelButtonTemplate : l'art de 3.3.5, inchange ;
-- la liste des filtres : MinimalScrollBar.
--
-- CE QUI DIFFERE, ET POURQUOI. « 3.3.5 rhabillee » : places, tailles et
-- logique du client. La fenetre de camelot est plus large (745 x 605) parce
-- qu'elle porte les onglets des fenetres de chat, que 3.3.5 n'a pas.
-- Chaque cadre a bord d'infobulle garde les couleurs que le client lui a
-- donnees ; le fond n'est pose que s'il en avait un.
local ForeverUI = ForeverUI or {}
_G.ForeverUI = ForeverUI
local Gb = ForeverUI.Gabarits
local C = {}
ForeverUI.ConfigChat = C
local N = { entete = 100 }
local function bordInfobulle(f)
local fond = f.GetBackdrop and f:GetBackdrop()
return fond and type(fond.edgeFile) == "string"
and string.find(string.lower(fond.edgeFile), "ui%-tooltip%-border") and fond
end
-- TooltipBackdropTemplate / TooltipBorderBackdropTemplate sur un cadre a
-- <Backdrop> d'infobulle : ses couleurs relues avant, reposees apres
function C.Boite(f)
local fond = bordInfobulle(f)
if not fond or f.foreverNeuf then return end
local r, g, b, a = f:GetBackdropBorderColor()
local cr, cg, cb = f:GetBackdropColor()
local avecFond = fond.bgFile ~= nil
local p = ForeverUI.Tooltips.Habiller(f)
for nom, t in pairs(p) do
if nom == "Center" then
if avecFond then
t:SetVertexColor(cr or 0, cg or 0, cb or 0, 1)
else
t:SetAlpha(0)
end
else
t:SetVertexColor(r or 1, g or 1, b or 1, a or 1)
end
end
end
-- tous les descendants : les boites, et les barres des listes a defilement
-- (MinimalScrollBar n'a pas le lisere d'infobulle de
-- UIPanelScrollBarTemplateLightBorder, $parentBorder : il s'enleve)
function C.Balayer(cadre)
for _, c in ipairs({ cadre:GetChildren() }) do
local nom = c:GetName()
local sb = c:GetObjectType() == "ScrollFrame" and nom and _G[nom .. "ScrollBar"]
if sb and not sb.foreverBarre then
local lisere = _G[sb:GetName() .. "Border"]
if lisere then lisere:SetBackdrop(nil) end
Gb.Barre(sb)
end
C.Boite(c)
C.Balayer(c)
end
end
function C.Habiller()
local f = ChatConfigFrame
if not f or f.foreverHabit then return end
f:SetBackdrop(nil)
local cadre, fond = Gb.CadreDialogue(f)
ChatConfigFrameHeader:SetAlpha(0)
ChatConfigFrameHeaderText:SetAlpha(0)
local entete = Gb.EnTete(f, ChatConfigFrameHeaderText:GetText(), GameFontNormal, N.entete)
local function titre()
entete:Poser(ChatConfigFrameHeaderText:GetText())
end
hooksecurefunc(ChatConfigFrameHeaderText, "SetText", titre)
hooksecurefunc(ChatConfigFrameHeaderText, "SetFormattedText", titre)
f.foreverHabit = { cadre = cadre, fond = fond, entete = entete }
C.Balayer(f)
-- les lignes et les onglets crees ensuite par le client
f:HookScript("OnShow", function(self) C.Balayer(self) end)
for _, nom in ipairs({ "ChatConfig_CreateCheckboxes", "ChatConfig_CreateTieredCheckboxes",
"ChatConfig_CreateColorSwatches" }) do
if type(_G[nom]) == "function" then
hooksecurefunc(nom, function(cadreLignes)
if cadreLignes then C.Balayer(cadreLignes) end
end)
end
end
end
C.Habiller()