|
|
|
---@type Tinkr, Bastion
|
|
|
|
Tinkr, Bastion = ...
|
|
|
|
|
|
|
|
---@type Diesal.GUI
|
|
|
|
local DiesalGUI = LibStub("DiesalGUI-2.0")
|
|
|
|
---@type Diesal.Tools
|
|
|
|
local DiesalTools = LibStub("DiesalTools-2.0")
|
|
|
|
---@type Diesal.Style
|
|
|
|
local DiesalStyle = LibStub("DiesalStyle-2.0")
|
|
|
|
|
|
|
|
-- ~~| Diesal Upvalues |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
local Colors = DiesalStyle.Colors
|
|
|
|
local HSL, ShadeColor, TintColor = DiesalTools.HSL, DiesalTools.ShadeColor, DiesalTools.TintColor
|
|
|
|
-- ~~| Lua Upvalues |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
local type, tonumber, select = type, tonumber, select
|
|
|
|
local pairs, ipairs, next = pairs, ipairs, next
|
|
|
|
local min, max = math.min, math.max
|
|
|
|
-- ~~| WoW Upvalues |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
local CreateFrame, UIParent, GetCursorPosition = CreateFrame, UIParent, GetCursorPosition
|
|
|
|
-- ~~| Button |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
local Type = "DiesalIconToggle"
|
|
|
|
local Version = 1
|
|
|
|
-- ~~| Button Stylesheets |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
local Stylesheet = {
|
|
|
|
["frame-background"] = {
|
|
|
|
type = "texture",
|
|
|
|
layer = "BACKGROUND",
|
|
|
|
color = "000000",
|
|
|
|
alpha = 0.60,
|
|
|
|
position = -2,
|
|
|
|
},
|
|
|
|
["frame-inline"] = {
|
|
|
|
type = "outline",
|
|
|
|
layer = "BORDER",
|
|
|
|
color = "000000",
|
|
|
|
alpha = 0.6,
|
|
|
|
position = -2,
|
|
|
|
},
|
|
|
|
["frame-outline"] = {
|
|
|
|
type = "outline",
|
|
|
|
layer = "BORDER",
|
|
|
|
color = "FFFFFF",
|
|
|
|
alpha = 0.1,
|
|
|
|
position = -1,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
local checkBoxStyle = {
|
|
|
|
base = {
|
|
|
|
type = "font",
|
|
|
|
color = Colors.UI_A400,
|
|
|
|
},
|
|
|
|
disabled = {
|
|
|
|
type = "font",
|
|
|
|
color = HSL(Colors.UI_Hue, Colors.UI_Saturation, 0.35) --[[@as string]],
|
|
|
|
},
|
|
|
|
enabled = {
|
|
|
|
type = "font",
|
|
|
|
color = Colors.UI_A400,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
local wireFrame = {
|
|
|
|
["frame-white"] = {
|
|
|
|
type = "outline",
|
|
|
|
layer = "OVERLAY",
|
|
|
|
color = "ffffff",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
-- ~~| Button Methods |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
---@class Diesal.GUI.IconToggle.Methods
|
|
|
|
local methods = {
|
|
|
|
---@param self Diesal.GUI.Object.IconToggle
|
|
|
|
OnAcquire = function(self)
|
|
|
|
self:ApplySettings()
|
|
|
|
self:SetStylesheet(Stylesheet)
|
|
|
|
self:Enable()
|
|
|
|
-- self:SetStylesheet(wireFrameSheet)
|
|
|
|
self.label:SetFontObject(DiesalFontNormal)
|
|
|
|
self.label:SetText()
|
|
|
|
self:Show()
|
|
|
|
end,
|
|
|
|
|
|
|
|
---@param self Diesal.GUI.Object.IconToggle
|
|
|
|
OnRelease = function(self) end,
|
|
|
|
|
|
|
|
---@param self Diesal.GUI.Object.IconToggle
|
|
|
|
ApplySettings = function(self)
|
|
|
|
local settings = self.settings
|
|
|
|
local frame = self.frame
|
|
|
|
|
|
|
|
self:SetWidth(settings.width)
|
|
|
|
self:SetHeight(settings.height)
|
|
|
|
self.check:SetFont(DiesalFontNormal:GetFont(), settings.height + 1, "")
|
|
|
|
end,
|
|
|
|
|
|
|
|
---@param self Diesal.GUI.Object.IconToggle
|
|
|
|
---@param value boolean
|
|
|
|
SetChecked = function(self, value)
|
|
|
|
self.settings.checked = value
|
|
|
|
self.check:SetText(value and DiesalStyle.FontAwesomeIcon("check-square") or DiesalStyle.FontAwesomeIcon("square"))
|
|
|
|
self.frame:SetChecked(value)
|
|
|
|
|
|
|
|
self[self.settings.disabled and "Disable" or "Enable"](self)
|
|
|
|
end,
|
|
|
|
|
|
|
|
---@param self Diesal.GUI.Object.IconToggle
|
|
|
|
GetChecked = function(self)
|
|
|
|
return self.settings.checked
|
|
|
|
end,
|
|
|
|
|
|
|
|
---@param self Diesal.GUI.Object.IconToggle
|
|
|
|
Disable = function(self)
|
|
|
|
self.settings.disabled = true
|
|
|
|
local r, g, b = DiesalTools.GetColor(checkBoxStyle.disabled.color)
|
|
|
|
---@cast r number
|
|
|
|
---@cast g number
|
|
|
|
---@cast b number
|
|
|
|
self.check:SetTextColor(r, g, b, 1)
|
|
|
|
--DiesalStyle:StyleTexture(self.check, self.checkBoxStyle and self.checkBoxStyle.disabled or checkBoxStyle.disabled)
|
|
|
|
self.frame:Disable()
|
|
|
|
end,
|
|
|
|
|
|
|
|
---@param self Diesal.GUI.Object.IconToggle
|
|
|
|
Enable = function(self)
|
|
|
|
self.settings.disabled = false
|
|
|
|
local r, g, b = DiesalTools.GetColor(checkBoxStyle.enabled.color)
|
|
|
|
---@cast r number
|
|
|
|
---@cast g number
|
|
|
|
---@cast b number
|
|
|
|
self.check:SetTextColor(r, g, b, 1)
|
|
|
|
--DiesalStyle:StyleTexture(self.check, self.checkBoxStyle and self.checkBoxStyle.enabled or checkBoxStyle.enabled)
|
|
|
|
self.frame:Enable()
|
|
|
|
end,
|
|
|
|
|
|
|
|
---@param self Diesal.GUI.Object.IconToggle
|
|
|
|
---@param ... any
|
|
|
|
RegisterForClicks = function(self, ...)
|
|
|
|
self.frame:RegisterForClicks(...)
|
|
|
|
end,
|
|
|
|
|
|
|
|
---@param self Diesal.GUI.Object.IconToggle
|
|
|
|
---@param text? string
|
|
|
|
SetText = function(self, text)
|
|
|
|
self.label:SetText(text)
|
|
|
|
self.frame:SetHitRectInsets(0, -self.label:GetWidth(), 0, 0)
|
|
|
|
end,
|
|
|
|
}
|
|
|
|
|
|
|
|
---@alias DiesalIconToggle Diesal.GUI.Object.Toggle
|
|
|
|
|
|
|
|
---@class Diesal.GUI.Object.IconToggle.CheckBox.Style
|
|
|
|
---@field base {type: "font", color: string}
|
|
|
|
---@field disabled {type: "font", color: string}
|
|
|
|
---@field enabled {type: "texture", color: string}}
|
|
|
|
|
|
|
|
---@class Diesal.GUI.IconToggle.Settings
|
|
|
|
---@field height number
|
|
|
|
---@field width number
|
|
|
|
---@field checked boolean
|
|
|
|
---@field disabled boolean
|
|
|
|
---@field tooltip? string
|
|
|
|
|
|
|
|
-- ~~| Button Constructor |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
local function Constructor()
|
|
|
|
---@class Diesal.GUI.Object.IconToggle : Diesal.GUI.ObjectBase, Diesal.GUI.IconToggle.Methods
|
|
|
|
---@field check Diesal.GUI.Region.FontString
|
|
|
|
---@field settings Diesal.GUI.IconToggle.Settings
|
|
|
|
---@field checkBoxStyle? Diesal.GUI.Object.IconToggle.CheckBox.Style
|
|
|
|
---@field label FontString
|
|
|
|
local self = DiesalGUI:Create(Type, true)
|
|
|
|
local frame = CreateFrame("CheckButton", nil, DiesalGUI.UIParent)
|
|
|
|
local fontString = self:CreateRegion("FontString", "label", frame)
|
|
|
|
self.frame = frame
|
|
|
|
|
|
|
|
local c, a = 0.5, 0.5
|
|
|
|
local tex = frame:CreateTexture(nil, "BACKGROUND")
|
|
|
|
tex:SetAllPoints()
|
|
|
|
tex:SetColorTexture(0, 0, 0, 0)
|
|
|
|
|
|
|
|
-- ~~ Default Settings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
self.defaults = {
|
|
|
|
height = 12,
|
|
|
|
width = 12,
|
|
|
|
}
|
|
|
|
|
|
|
|
-- ~~ Events ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
-- OnAcquire, OnRelease, OnHeightSet, OnWidthSet
|
|
|
|
-- OnValueChanged, OnEnter, OnLeave, OnDisable, OnEnable
|
|
|
|
-- ~~ Construct ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
--local check = self:CreateRegion("Texture", "check", frame)
|
|
|
|
local check = self:CreateRegion("FontString", "check", frame)
|
|
|
|
check:SetAllPoints(frame, true)
|
|
|
|
--check:SetAllPoints(frame, true)
|
|
|
|
check:SetFont(DiesalFontNormal:GetFont(), self.defaults.height, "")
|
|
|
|
-- Setting self.check again is pointless when CreateRegion already does it....
|
|
|
|
-- self.check = check
|
|
|
|
|
|
|
|
--DiesalStyle:StyleTexture(check, self.checkBoxStyle and self.checkBoxStyle.base or checkBoxStyle.base)
|
|
|
|
--frame:SetCheckedTexture(check)
|
|
|
|
frame:SetScript("OnClick", function(this, button, ...)
|
|
|
|
DiesalGUI:OnMouse(this, button)
|
|
|
|
|
|
|
|
if not self.settings.disabled then
|
|
|
|
self:SetChecked(not self.settings.checked)
|
|
|
|
|
|
|
|
if self.settings.checked then
|
|
|
|
PlaySound(856)
|
|
|
|
else
|
|
|
|
PlaySound(857)
|
|
|
|
end
|
|
|
|
|
|
|
|
self:FireEvent("OnValueChanged", self.settings.checked)
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
frame:SetScript("OnEnter", function(this)
|
|
|
|
if self.settings.tooltip then
|
|
|
|
GameTooltip:SetOwner(this, "ANCHOR_TOPLEFT", 0, 2)
|
|
|
|
GameTooltip:AddLine(self.settings.tooltip)
|
|
|
|
GameTooltip:Show()
|
|
|
|
end
|
|
|
|
self:FireEvent("OnEnter")
|
|
|
|
check:SetTextColor(c, c, c, a)
|
|
|
|
--tex:SetColorTexture(c, c, c, a)
|
|
|
|
-- SetCursor([[Interface\Cursor\Cast]])
|
|
|
|
end)
|
|
|
|
|
|
|
|
frame:SetScript("OnLeave", function(this)
|
|
|
|
if self.settings.tooltip then
|
|
|
|
GameTooltip:Hide()
|
|
|
|
end
|
|
|
|
self:FireEvent("OnLeave")
|
|
|
|
--tex:SetColorTexture(0, 0, 0, 0)
|
|
|
|
-- SetCursor(nil)
|
|
|
|
end)
|
|
|
|
|
|
|
|
frame:SetScript("OnDisable", function(this)
|
|
|
|
self:FireEvent("OnDisable")
|
|
|
|
end)
|
|
|
|
frame:SetScript("OnEnable", function(this)
|
|
|
|
self:FireEvent("OnEnable")
|
|
|
|
end)
|
|
|
|
|
|
|
|
fontString:SetPoint("LEFT", frame, "RIGHT", 5, 0)
|
|
|
|
fontString:SetHeight(15)
|
|
|
|
fontString:SetWordWrap(false)
|
|
|
|
|
|
|
|
-- ~~ Methods ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
self:SetMethods(methods)
|
|
|
|
self:SetObj(self.frame)
|
|
|
|
--[[ for method, func in pairs(methods) do
|
|
|
|
self[method] = func
|
|
|
|
end ]]
|
|
|
|
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
return self
|
|
|
|
end
|
|
|
|
|
|
|
|
DiesalGUI:RegisterObjectConstructor(Type, Constructor, Version)
|