mirror of
https://github.com/Lacustat/Freewood-OctoWoW-Mail.git
synced 2026-11-06 08:18:57 +00:00
0.1.153: Mailinglisten-Zeile ohne ueberlagerte Knoepfe, Rechtsklick auf Taschen-Item haengt es an den Brief an
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016onJCSHLwhs9udhC9ZLzk9
This commit is contained in:
+55
-7
@@ -23,6 +23,12 @@ local panes = {}
|
||||
local picks = {} -- Senden-Reiter: gewaehlte Staepel { id, count, key }
|
||||
local picker
|
||||
|
||||
-- Breite einer Zeile: aus dem Rahmen gelesen, nicht von der Kindbreite abhaengig (die ist beim ersten Zeichnen manchmal zu klein)
|
||||
local function RowWidth(scroll, minW)
|
||||
local w = scroll and scroll.GetWidth and scroll:GetWidth() or 0
|
||||
return math.max((w or 0) - 14, minW or 200)
|
||||
end
|
||||
|
||||
local function T(key) return FW.L[key] or key end
|
||||
|
||||
------------------------------------------------------------------------
|
||||
@@ -200,7 +206,7 @@ local function BuildPicker()
|
||||
local row = Row(i)
|
||||
row:ClearAllPoints()
|
||||
row:SetPoint("TOPLEFT", p.scroll.child, "TOPLEFT", 0, -((i - 1) * 36))
|
||||
row:SetPoint("TOPRIGHT", p.scroll.child, "TOPRIGHT", 0, -((i - 1) * 36))
|
||||
row:SetWidth(RowWidth(p.scroll))
|
||||
FillItem(row, d.id, d.count)
|
||||
if d.extra then row.name:SetText(row.name:GetText() .. " |cff8a8f9a(" .. T("MAIL_PICK_EXTRA") .. ")|r") end
|
||||
if self.mode == "list" then
|
||||
@@ -330,7 +336,7 @@ local function BuildInbox(parent)
|
||||
row.inboxIndex = m.hasItem and m.i or nil
|
||||
row:ClearAllPoints()
|
||||
row:SetPoint("TOPLEFT", f.scroll.child, "TOPLEFT", 0, -((i - 1) * (ROW_H + ROW_GAP)))
|
||||
row:SetPoint("TOPRIGHT", f.scroll.child, "TOPRIGHT", 0, -((i - 1) * (ROW_H + ROW_GAP)))
|
||||
row:SetWidth(RowWidth(f.scroll))
|
||||
if m.itemTex then
|
||||
row.icon:SetTexture(m.itemTex)
|
||||
elseif m.money > 0 then
|
||||
@@ -465,7 +471,7 @@ local function BuildSend(parent)
|
||||
end
|
||||
row:ClearAllPoints()
|
||||
row:SetPoint("TOPLEFT", itemScroll.child, "TOPLEFT", 0, -((i - 1) * 34))
|
||||
row:SetPoint("TOPRIGHT", itemScroll.child, "TOPRIGHT", 0, -((i - 1) * 34))
|
||||
row:SetWidth(RowWidth(itemScroll))
|
||||
FillItem(row, pk.id, pk.count)
|
||||
row.remove:SetScript("OnClick", function()
|
||||
table.remove(picks, i)
|
||||
@@ -582,6 +588,8 @@ local function BuildLists(parent)
|
||||
row:SetHeight(LIST_ROW_H)
|
||||
row.name = UI.CreateLabel(row, "", { font = "heading", size = 14, color = "goldLight" })
|
||||
row.name:SetPoint("TOPLEFT", row, "TOPLEFT", 12, -12)
|
||||
row.name:SetWidth(170)
|
||||
row.name:SetWordWrap(false)
|
||||
row.items = UI.CreateButton(row, "", 130, 24, function()
|
||||
if row.entry then OpenPicker("list", row.entry, function() f.Refresh() end) end
|
||||
end, "default")
|
||||
@@ -589,14 +597,14 @@ local function BuildLists(parent)
|
||||
row.now = UI.CreateButton(row, T("MAIL_LISTS_NOW"), 120, 24, function()
|
||||
if row.entry then Mail:SendLists(row.entry, false) end
|
||||
end, "default")
|
||||
row.now:SetPoint("LEFT", row.items, "RIGHT", 8, 0)
|
||||
row.now:SetPoint("TOPLEFT", row, "TOPLEFT", 328, -8)
|
||||
row.remove = UI.CreateButton(row, "X", 26, 24, function()
|
||||
if row.entry then Mail:RemoveList(row.entry) end
|
||||
end, "danger")
|
||||
row.remove:SetPoint("TOPRIGHT", row, "TOPRIGHT", -8, -8)
|
||||
row.remove:SetPoint("TOPLEFT", row, "TOPLEFT", 456, -8)
|
||||
UI.AttachTooltip(row.remove, function() return T("MAIL_LISTS_REMOVE") end, "")
|
||||
row.selfNote = UI.CreateLabel(row, T("MAIL_LISTS_SELF"), { size = 11, color = "textDim" })
|
||||
row.selfNote:SetPoint("LEFT", row.items, "RIGHT", 8, 0)
|
||||
row.selfNote:SetPoint("TOPLEFT", row, "TOPLEFT", 328, -13)
|
||||
|
||||
row.auto = UI.CreateCheckbox(row, T("MAIL_LISTS_AUTO"), function() return row.entry and row.entry.auto end, function(v)
|
||||
if row.entry then row.entry.auto = v and true or false end
|
||||
@@ -626,7 +634,7 @@ local function BuildLists(parent)
|
||||
row.entry = e
|
||||
row:ClearAllPoints()
|
||||
row:SetPoint("TOPLEFT", scroll.child, "TOPLEFT", 0, -((i - 1) * (LIST_ROW_H + ROW_GAP)))
|
||||
row:SetPoint("TOPRIGHT", scroll.child, "TOPRIGHT", 0, -((i - 1) * (LIST_ROW_H + ROW_GAP)))
|
||||
row:SetWidth(RowWidth(scroll, 495))
|
||||
row.name:SetText(e.name)
|
||||
row.items:SetLabel(string.format(T("MAIL_LISTS_ITEMS"), #e.ids))
|
||||
local me = Mail.IsSelf(e.name)
|
||||
@@ -749,6 +757,46 @@ local function BuildWindow()
|
||||
return f
|
||||
end
|
||||
|
||||
-- Rechtsklick auf ein Item in den Taschen: wird dem Brief angehaengt (nur bei unserem Fenster; sonst waere es "benutzen")
|
||||
local function StackKey(bag, slot)
|
||||
local seen = {}
|
||||
for _, s in ipairs(Mail.BagStacks()) do
|
||||
if not s.locked then
|
||||
local base = s.id .. ":" .. s.count
|
||||
seen[base] = (seen[base] or 0) + 1
|
||||
if s.bag == bag and s.slot == slot then return s.id, s.count, base .. ":" .. seen[base] end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function Intercept(bag, slot)
|
||||
if not (Mail.open and Mail.Replacing() and window and window:IsShown()) then return false end
|
||||
if CursorHasItem and CursorHasItem() then return false end
|
||||
if Mail.busy then return true end
|
||||
local id, count, key = StackKey(tonumber(bag), tonumber(slot))
|
||||
if not id then return true end
|
||||
local found
|
||||
for k, pk in ipairs(picks) do
|
||||
if pk.key == key then found = k end
|
||||
end
|
||||
if found then table.remove(picks, found) else picks[#picks + 1] = { id = id, count = count, key = key } end
|
||||
SelectTab("send")
|
||||
if picker and picker:IsShown() then picker:Fill() end
|
||||
return true
|
||||
end
|
||||
|
||||
local function WrapUse(owner, name)
|
||||
local orig = owner and owner[name]
|
||||
if type(orig) ~= "function" then return end
|
||||
owner[name] = function(bag, slot, ...)
|
||||
local ok, handled = pcall(Intercept, bag, slot)
|
||||
if ok and handled then return end
|
||||
return orig(bag, slot, ...)
|
||||
end
|
||||
end
|
||||
WrapUse(_G, "UseContainerItem")
|
||||
if _G.C_Container then WrapUse(_G.C_Container, "UseContainerItem") end
|
||||
|
||||
local function RefreshCurrent()
|
||||
local pane = panes[current]
|
||||
if window and window:IsShown() and pane and pane.Refresh then pane.Refresh() end
|
||||
|
||||
Reference in New Issue
Block a user