diff --git a/ui_layout.lua b/ui_layout.lua index 5a93ca4..53a3174 100644 --- a/ui_layout.lua +++ b/ui_layout.lua @@ -29,7 +29,7 @@ function AA.Layout() local bw = math.floor((pw - 18) / 2) local bh = ph - 90 AA.COLS = math.max(1, math.floor((bw - 37) / AA.CELL)) - AA.GROWS = math.max(1, math.floor((bh - 30) / AA.CELL)) + AA.GROWS = math.max(1, math.floor((bh - 68) / AA.CELL)) AA.BI:SetWidth(bw) AA.BI:SetHeight(bh) AA.BB:SetWidth(bw) @@ -44,7 +44,7 @@ function AA.Layout() b:ClearAllPoints() local r = math.floor((i - 1) / AA.COLS) local c = math.mod(i - 1, AA.COLS) - b:SetPoint("TOPLEFT", B, "TOPLEFT", 9 + c * AA.CELL, -28 - r * AA.CELL) + b:SetPoint("TOPLEFT", B, "TOPLEFT", 9 + c * AA.CELL, -66 - r * AA.CELL) end end diff --git a/ui_panel.lua b/ui_panel.lua index 08cac86..4901f96 100644 --- a/ui_panel.lua +++ b/ui_panel.lua @@ -114,10 +114,12 @@ local function MakeBox(ttl, scrollName) B.empty:SetPoint("CENTER", B, "CENTER", 0, 0) B.empty:SetWidth(220) B.empty:Hide() + B.ttl = ttl + B.bagBtns = {} B.list = {} B.cells = {} B.sf = CreateFrame("ScrollFrame", scrollName, B, "FauxScrollFrameTemplate") - B.sf:SetPoint("TOPLEFT", B, "TOPLEFT", 0, -24) + B.sf:SetPoint("TOPLEFT", B, "TOPLEFT", 0, -62) B.sf:SetPoint("BOTTOMRIGHT", B, "BOTTOMRIGHT", -26, 4) B.sf:SetScript("OnVerticalScroll", function() FauxScrollFrame_OnVerticalScroll(AA.CELL, function() UpdateGrid(B) end) @@ -130,6 +132,66 @@ end AA.BI = MakeBox("Inventory", "AdeAltsInvScroll") AA.BB = MakeBox("Bank", "AdeAltsBankScroll") +-- one small button per bag: icon with "used/size" underneath +local function MakeBagBtn(B, i) + local b = CreateFrame("Button", nil, B) + b:SetWidth(36) + b:SetHeight(36) + b:SetPoint("TOPLEFT", B, "TOPLEFT", 6 + (i - 1) * 37, -25) + b.icon = b:CreateTexture(nil, "ARTWORK") + b.icon:SetWidth(22) + b.icon:SetHeight(22) + b.icon:SetPoint("TOP", b, "TOP", 0, 0) + b.icon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + b.txt = b:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") + b.txt:SetPoint("TOP", b.icon, "BOTTOM", 0, -1) + b:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square") + b:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:AddLine(this.label or "Bag") + GameTooltip:AddLine(this.used .. " of " .. this.size .. " slots used (" .. (this.size - this.used) .. " free)", 1, 1, 1) + GameTooltip:Show() + end) + b:SetScript("OnLeave", function() GameTooltip:Hide() end) + B.bagBtns[i] = b + return b +end + +local function FillColor(used, size) + local f = size > 0 and used / size or 0 + if f >= 0.95 then return "|cffff4040" elseif f >= 0.75 then return "|cffffd100" end + return "|cff40ff40" +end + +-- info: "size:used:bagItemId~..." (nil = not cached); bank: true for the bank box +function AA.ShowBagStrip(B, info, bank) + local n, tu, ts = 0, 0, 0 + if info and info ~= "" then + for size, used, id in string.gfind(info, "(%d+):(%d+):(%d+)") do + n = n + 1 + size, used, id = tonumber(size), tonumber(used), tonumber(id) + tu, ts = tu + used, ts + size + local b = B.bagBtns[n] or MakeBagBtn(B, n) + b.size, b.used = size, used + if id > 0 then + b.icon:SetTexture(AA.ItemTex(id)) + b.label = AA.ItemName(id) + else + b.icon:SetTexture("Interface\\Buttons\\Button-Backpack-Up") + b.label = bank and "Bank" or "Backpack" + end + b.txt:SetText(FillColor(used, size) .. used .. "/" .. size .. "|r") + b:Show() + end + end + for i = n + 1, table.getn(B.bagBtns) do B.bagBtns[i]:Hide() end + if n > 0 then + B.title:SetText(B.ttl .. " " .. FillColor(tu, ts) .. tu .. "/" .. ts .. "|r") + else + B.title:SetText(B.ttl) + end +end + function AA.SetBoxList(B, list) B.list = list or {} AA.ResetScroll(B.sf) diff --git a/ui_show.lua b/ui_show.lua index e2bb92b..e517ace 100644 --- a/ui_show.lua +++ b/ui_show.lua @@ -81,6 +81,7 @@ local function ShowBags(c) AA.BB:Show() AA.BI.empty:Hide() AA.SetBoxList(AA.BI, c.inv) + AA.ShowBagStrip(AA.BI, c.invBags, false) if c.invTs and c.invTs > 0 then AA.BI.note:SetText("updated " .. AA.Ago(c.invTs)) else @@ -92,9 +93,11 @@ local function ShowBags(c) AA.BB.empty:Hide() if c.bankTs and c.bankTs > 0 then AA.SetBoxList(AA.BB, c.bank) + AA.ShowBagStrip(AA.BB, c.bankBags, true) AA.BB.note:SetText("updated " .. AA.Ago(c.bankTs)) else AA.SetBoxList(AA.BB, {}) + AA.ShowBagStrip(AA.BB, nil, true) AA.BB.note:SetText("") AA.BB.empty:SetText("Bank not cached yet.\nOpen the bank on this character once.") AA.BB.empty:Show()