Quantcast
local NAME, ADDON = ...

ADDON.formatters = ADDON.formatters or {}

ADDON.formatters['horizontal'] = {}

local formatter = ADDON.formatters['horizontal']
formatter.__index = formatter

function formatter:Format(container)
    local settings = ADDON.settings.formatter.horizontal

    local list = container.containers

    local maxCols = settings.cols
    local h = container.padding

    local x = container.padding
    local mH = 0
    local mW = 0
    local cnt = 0
    local lastH = 0

    for v in ADDON.utils:PairsByKey(list, ADDON.sorters.containers[settings.sorter]) do
        if v:IsEmpty() then
            v:Hide()
        else
            v:Show()
            local numItems = v.name == EMPTY and 1 or v:Count()

            if cnt ~= 0 and (cnt + numItems) > maxCols then
                x = container.padding
                h = h + mH + container.spacing
                cnt = 0
                mH = 0
            end

            if numItems > maxCols then
                v:Arrange(maxCols)
            else
                v:Arrange(numItems)
            end

            v:SetParent(container)
            v:ClearAllPoints()
            v:SetPoint('TOPLEFT', x, -h)

            mH = math.max(mH, v:GetHeight())
            mW = math.max(mW, x + v:GetWidth())
            x = x + container.spacing + v:GetWidth()

            cnt = cnt + numItems
            lastH = v:GetHeight()
        end
    end

    container:SetSize(
        mW + container.padding,
        h + container.padding + lastH
    )
end