File Details
v0.3.0-bcc
- R
- May 12, 2026
- 58.64 KB
- 4
- 2.5.5
- Classic TBC
File Name
coinscry-v0.3.0-bcc.zip
Supported Versions
- 2.5.5
Coinscry
v0.3.0 (2026-05-12)
Full Changelog Previous Releases
- v0.3.0: M3-D release (TOC + CHANGELOG)
- M3-D: columns + sort + drag-to-resize + qty preview + colored prices
- Qty column widen to 36px; TSM-style colored gold/silver/copper price
- Qty column was 28px, just short for 'x200' (truncated to 'x2...'
on arrow/bullet stacks). Bump to 36px — comfortably fits up to
'x999'. - FormatPrice now emits inline color codes per denomination:
digits white, 'g' yellow, 's' silver-gray, 'c' copper-brown.
Removed the row-wide gold tint that was overriding everything. - Coin jingle on purchase is automatic — WoW plays it when
BuyMerchantItem succeeds, no addon code needed.
- Qty column was 28px, just short for 'x200' (truncated to 'x2...'
- Add per-row buy-qty preview (x1 / xStackSize while Shift held)
New 28-pixel column between the icon and the name showing what
clicking the row right now will buy:- 'x1' by default
- 'xN' where N is row.stackCount, when Shift is currently held
The qty FontString has a fixed width so the Name column doesn't
shift left/right when the modifier changes — only the text content
changes.
Live updates: register MODIFIER_STATE_CHANGED, listen for LSHIFT /
RSHIFT transitions. When the panel is shown, trigger Panel.Refresh
on shift change so all visible rows update at once. Cheap: just a
field assignment per row, no re-filter / re-scan.
- Fix sort indicators: use UI-SortArrow texture, anchor adjacent to text
Two bugs in the sort-indicator implementation:- The Unicode arrows aren't in WoW's default font glyphs and
rendered as tofu boxes. Switch to Blizzard's standard
Interface\Buttons\UI-SortArrow texture (an up-arrow), with
SetTexCoord(0,1,1,0) for vertical flip when sort is descending. - The label FontString was anchored to both LEFT and RIGHT of the
button, so it spanned the full column width regardless of text
length. The indicator anchored to the label's edge therefore
landed at the column edge, not next to the actual text. Fix by
anchoring the label to ONE side only (LEFT for left-justified,
RIGHT for right-justified) — its frame now matches the rendered
string width, and the adjacent-edge indicator anchors to where
the text actually ends.
- The Unicode arrows aren't in WoW's default font glyphs and
- M3-D #3: drag-to-resize handle; visible-row count derives from height
Bottom-right resize grip drags the panel in both axes. Row widgets
are now a pool of MAX_ROWS (25) created up front; how many are
visible is computed from the current scroll-frame height. Layout
auto-refreshes via OnSizeChanged -> Panel.Refresh.- f:SetResizable(true) with SetResizeBounds (retail API) and
SetMinResize fallback (classic). Min size keeps the panel usable:
enough width for dropdowns + columns, and tall enough for ~3 rows
plus the filter controls. - Rows now stretch horizontally with the panel: anchored LEFT and
RIGHT to the scroll area (previously fixed width = PANEL_W - 40).
Cost / iLvl columns stay fixed-width on the right; Name column
absorbs the extra width when the panel is dragged wider. - VisibleRowCount() = floor(scrollFrame_h / ROW_H), capped at
MAX_ROWS. Used by UpdateRows and FauxScrollFrame_Update. - Panel size persisted in CoinscryCharDB.panelSize and restored on
next CreatePanel call. - Hint line right margin trimmed by 10px so it doesn't sit under
the resize grip texture.
- f:SetResizable(true) with SetResizeBounds (retail API) and
- M3-D #2: clickable sort headers
Column headers (Item / ilvl / Cost) are now Button frames with
click-to-sort behavior. Click a header to sort ascending by that
column; click the same header again to flip to descending; click
a different header to switch column and reset to ascending.- Active column shows a ▲ / ▼ indicator next to its label (left
of the label for right-aligned columns, right of the label for
left-aligned Item header). - Hover lightens the header label.
- Sort happens in Filters.SortRows (Filters.lua), called after
Filters.Apply in Refresh. State lives in state.sortKey /
state.sortAscending; both fields covered by Filters.NewState so
Panel.ResetFilters wipes them on each MERCHANT_SHOW. - Sort keys: name (lowercased string), itemLevel (number, 0 for
nil), price (copper amount). Extended-cost items sort by their
gold-price component; items with no gold price cluster at one
end. Good enough for v1.
- Active column shows a ▲ / ▼ indicator next to its label (left
- M3-D #1: column-based row layout + header strip
Refactor each row from 'icon + Name + Price' into a four-column
layout: icon | Name | iLvl | Cost. Header strip sits above the
scroll area with 'Item', 'ilvl', 'Cost' labels lined up over their
respective row columns.- Column geometry centralized as constants (COL_ICON_W, COL_ILVL_W,
COL_COST_W, COL_GAP, COL_RIGHT_PAD) so future width changes only
need to touch one place. - Cost / iLvl right-aligned with fixed widths; Name fills the
remaining horizontal space between icon and ilvl with SetWordWrap
false so long names truncate cleanly. - TOP_RESERVED bumped by HEADER_H (18px) to make room.
- iLvl column displays itemLevel when > 0; blank otherwise (so
items where ilvl isn't meaningful — like food / reagents — don't
show 0).
No sort yet (commit #2 makes headers clickable). No resize yet
(commit #3).
- Column geometry centralized as constants (COL_ICON_W, COL_ILVL_W,

