|
|
|
---@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")
|
|
|
|
-- ~~| 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
|
|
|
|
local GetScreenWidth, GetScreenHeight = GetScreenWidth, GetScreenHeight
|
|
|
|
local GetCombatRatingBonus = GetCombatRatingBonus
|
|
|
|
-- ~~| Button |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
local Type = "DiesalButton"
|
|
|
|
local Version = 5
|
|
|
|
-- ~~| Button Stylesheets |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
local Stylesheet = {
|
|
|
|
["text-color"] = {
|
|
|
|
type = "Font",
|
|
|
|
color = "b8c2cc",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
local wireFrame = {
|
|
|
|
["frame-white"] = {
|
|
|
|
type = "outline",
|
|
|
|
layer = "OVERLAY",
|
|
|
|
color = "ffffff",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
-- ~~| Button Methods |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
---@class Diesal.GUI.Button.Methods
|
|
|
|
---@field OnAcquire fun(self: Diesal.GUI.Object.Button)
|
|
|
|
---@field OnRelease fun(self: Diesal.GUI.Object.Button)
|
|
|
|
---@field ApplySettings fun(self: Diesal.GUI.Object.Button): boolean | nil
|
|
|
|
---@field SetText fun(self: Diesal.GUI.Object.Button, text: string)
|
|
|
|
---@field Disable fun(self: Diesal.GUI.Object.Button)
|
|
|
|
---@field Enable fun(self: Diesal.GUI.Object.Button)
|
|
|
|
---@field RegisterForClicks fun(self: Diesal.GUI.Object.Button, ...)
|
|
|
|
local methods = {
|
|
|
|
["OnAcquire"] = function(self)
|
|
|
|
self:ApplySettings()
|
|
|
|
self:SetStylesheet(Stylesheet)
|
|
|
|
self:Enable()
|
|
|
|
-- self:SetStylesheet(wireFrameSheet)
|
|
|
|
self:Show()
|
|
|
|
end,
|
|
|
|
["OnRelease"] = function(self) end,
|
|
|
|
["ApplySettings"] = function(self)
|
|
|
|
local settings = self.settings
|
|
|
|
local frame = self.frame
|
|
|
|
|
|
|
|
self:SetWidth(settings.width)
|
|
|
|
self:SetHeight(settings.height)
|
|
|
|
end,
|
|
|
|
["SetText"] = function(self, text)
|
|
|
|
self.text:SetText(text)
|
|
|
|
end,
|
|
|
|
["Disable"] = function(self)
|
|
|
|
self.settings.disabled = true
|
|
|
|
self.frame:Disable()
|
|
|
|
end,
|
|
|
|
["Enable"] = function(self)
|
|
|
|
self.settings.disabled = false
|
|
|
|
self.frame:Enable()
|
|
|
|
end,
|
|
|
|
["RegisterForClicks"] = function(self, ...)
|
|
|
|
self.frame:RegisterForClicks(...)
|
|
|
|
end,
|
|
|
|
}
|
|
|
|
|
|
|
|
---@class DiesalButton : Diesal.GUI.Object.Button
|
|
|
|
|
|
|
|
-- ~~| Button Constructor |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
local function Constructor(name)
|
|
|
|
---@class Diesal.GUI.Object.Button : Diesal.GUI.ObjectBase, Diesal.GUI.Button.Methods
|
|
|
|
---@field text Diesal.GUI.Region.FontString
|
|
|
|
---@field settings { disabled: boolean, height: number, width: number }
|
|
|
|
local self = DiesalGUI:Create(Type, true)
|
|
|
|
local frame = CreateFrame("Button", name, DiesalGUI.UIParent)
|
|
|
|
self.frame = frame
|
|
|
|
self.defaults = {
|
|
|
|
height = 32,
|
|
|
|
width = 32,
|
|
|
|
}
|
|
|
|
-- ~~ Events ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
-- OnAcquire, OnRelease, OnHeightSet, OnWidthSet
|
|
|
|
-- OnClick, OnEnter, OnLeave, OnDisable, OnEnable
|
|
|
|
-- ~~ Construct ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
local text = self:CreateRegion("FontString", "text", frame)
|
|
|
|
text:SetPoint("TOPLEFT", 4, -1) -- sits below center when rendered off by 1 pixel, fuck you blizzard
|
|
|
|
text:SetPoint("BOTTOMRIGHT", -4, 0)
|
|
|
|
text:SetJustifyV("MIDDLE")
|
|
|
|
text:SetJustifyH("CENTER")
|
|
|
|
frame:SetFontString(text)
|
|
|
|
|
|
|
|
---@param this Button
|
|
|
|
---@param button mouseButton
|
|
|
|
frame:SetScript("OnClick", function(this, button, ...)
|
|
|
|
DiesalGUI:OnMouse(this, button)
|
|
|
|
|
|
|
|
self:FireEvent("OnClick", button, ...)
|
|
|
|
end)
|
|
|
|
frame:SetScript("OnEnter", function(this)
|
|
|
|
self:FireEvent("OnEnter")
|
|
|
|
end)
|
|
|
|
frame:SetScript("OnLeave", function(this)
|
|
|
|
self:FireEvent("OnLeave")
|
|
|
|
end)
|
|
|
|
frame:SetScript("OnDisable", function(this)
|
|
|
|
self:FireEvent("OnDisable")
|
|
|
|
end)
|
|
|
|
frame:SetScript("OnEnable", function(this)
|
|
|
|
self:FireEvent("OnEnable")
|
|
|
|
end)
|
|
|
|
-- ~~ 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)
|