--[[ Author: Jarth Filename: CBs_Helpers.lua ]] -- ------------------------------------------------------------------------------------------------- -- VARIABLES -- ------------------------------------------------------------------------------------------------- local base = CollectionBars local texts = base.Texts ------------------------------------------------------------------------------------------------- -- FUNCTIONS -- ------------------------------------------------------------------------------------------------- function base.GetLocationValue(value) local result if value == texts.Location.Bottom then result = BOTTOM elseif value == (texts.Location.Bottom .. texts.Location.Left) then result = BOTTOMLEFT elseif value == (texts.Location.Bottom .. texts.Location.Right) then result = BOTTOMRIGHT elseif value == texts.Location.Center then result = CENTER elseif value == texts.Location.Left then result = LEFT elseif value == texts.Location.Right then result = RIGHT elseif value == texts.Location.Top then result = TOP elseif value == (texts.Location.Top .. texts.Location.Left) then result = TOPLEFT elseif value == (texts.Location.Top .. texts.Location.Right) then result = TOPRIGHT end return result end function base.GetLocationText(value) local result if value == BOTTOM then result = texts.Location.Bottom elseif value == BOTTOMLEFT then result = (texts.Location.Bottom .. texts.Location.Left) elseif value == BOTTOMRIGHT then result = (texts.Location.Bottom .. texts.Location.Right) elseif value == CENTER then result = texts.Location.Center elseif value == LEFT then result = texts.Location.Left elseif value == RIGHT then result = texts.Location.Right elseif value == TOP then result = texts.Location.Top elseif value == TOPLEFT then result = (texts.Location.Top .. texts.Location.Left) elseif value == TOPRIGHT then result = (texts.Location.Top .. texts.Location.Right) end return result end function base.RestorePosition(category) category.Frame:ClearAnchors() local combineFrame = base.Global.Combine.Frame if not category.Saved.IsCombined or not combineFrame then category.Frame:SetAnchor(category.Saved.Label.PositionTarget, GuiRoot, TOPLEFT, category.Saved.X, category.Saved.Y) elseif category.Saved.IsCombined then if not category.Saved.HideAll then category.Frame:SetAnchorFill(combineFrame) else category.Frame:SetAnchor(TOPLEFT, combineFrame, TOPLEFT, 0, 0) end end end function base.GetLabelPostFix(category) local postFix = texts.Helpers.EmptyString if category.Saved.HideAllEnabled then if not category.Saved.HideAll then postFix = texts.Helpers.Space .. texts.Helpers.Minus else postFix = texts.Helpers.Space .. texts.Helpers.Plus end end return postFix end function base.IsAllSelected(category) local isAllSelected = true for _, collectible in pairs(category.Collection) do if category.Saved.Selected[collectible.Id] == nil then isAllSelected = false break end end return isAllSelected end function base.SelectAll(category, newValue) for _, collectible in pairs(category.Collection) do if newValue == true then category.Saved.Selected[collectible.Id] = newValue else category.Saved.Selected[collectible.Id] = nil end end end function base.GetVersion(showMinor) if showMinor == false or base.Addon.MinorVersion == nil then return tostring(base.Addon.Version) end return tostring(base.Addon.Version) .. texts.Helpers.Dot .. tostring(base.Addon.MinorVersion) end function base.SetAndUpdateAccountSettings(newUseAccountSettings) local accountKey = base.Addon.Name .. texts.Helpers.Lowdash .. texts.Components.Account base.Saved = ZO_SavedVars:NewAccountWide(accountKey, base.Addon.Version, nil, base.Default) if newUseAccountSettings ~= nil then base.Saved.UseAccountSettings = newUseAccountSettings end local useAccountSettings = base.Saved.UseAccountSettings if not useAccountSettings then local characterKey = base.Addon.Name .. texts.Helpers.Lowdash .. texts.Components.Character base.Saved = ZO_SavedVars:New(characterKey, base.Addon.Version, nil, base.Default) base.Saved.UseAccountSettings = useAccountSettings end end function base.ResetAccountSettings() if base.Saved.UseAccountSettings then local accountKey = base.Addon.Name .. texts.Helpers.Lowdash .. texts.Components.Account _G[accountKey] = nil base.Saved = ZO_SavedVars:NewAccountWide(accountKey, base.Addon.Version, nil, base.Default) else local characterKey = base.Addon.Name .. texts.Helpers.Lowdash .. texts.Components.Character _G[characterKey] = nil base.Saved = ZO_SavedVars:New(characterKey, base.Addon.Version, nil, base.Default) end end function base.GetBarWidthHeight(category) local width, height, count = 0, 0, 0 if not category.Saved.HideAll then for key, value in pairs(category.Saved.Selected) do if IsCollectibleUnlocked(key) and IsCollectibleValidForPlayer(key) and value then count = count + 1 end end end local function GetBarMaxCount(constraint) local barConstraintXY = category.Saved[constraint] if category.Saved.IsCombined then barConstraintXY = base.Saved.Combine[constraint] end if barConstraintXY == 0 then barConstraintXY = base.Saved[constraint] end if count < barConstraintXY then barConstraintXY = count end return barConstraintXY end category.BarDepth, category.BarWidth = GetBarMaxCount(texts.Helpers.BarDepth), GetBarMaxCount(texts.Helpers.BarWidth) if count > 0 then local barWidth = math.ceil(count / category.BarDepth) local maxBarWidth = category.BarWidth if maxBarWidth > 0 and maxBarWidth < barWidth then barWidth = maxBarWidth end local isHorizontal = category.Saved.Horizontal width = base.Saved.ButtonXY * (not isHorizontal and barWidth or category.BarDepth) height = base.Saved.ButtonXY * (isHorizontal and barWidth or category.BarDepth) end return width, height end function base.SetFrameSizeIfExists(frame, width, height) if frame ~= nil then frame:SetHeight(height) frame:SetWidth(width) end end function base.HasAny(array) for _ in pairs(array) do return true end return false end function base.SetControlText(control, text) control.SetText(control, text) end