You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

146 lines
5.2 KiB

---@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 |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~| WoW Upvalues |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~| ComboBoxItem |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
local Type = "DiesalComboBoxItem"
local Version = 2
-- ~~| ComboBoxItem Stylesheets |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
local Stylesheet = {
["frame-hover"] = {
type = "texture",
layer = "HIGHLIGHT",
color = "b3d9ff",
alpha = 0.05,
},
}
-- ~~| ComboBoxItem Locals |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~| ComboBoxItem Methods |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
---@class Diesal.GUI.ComboBoxItem.Methods
local methods = {
["OnAcquire"] = function(self)
self:ApplySettings()
self:SetStylesheet(Stylesheet)
-- self:SetStylesheet(wireFrameSheet)
self:Show()
end,
["OnRelease"] = function(self)
self.check:Hide()
end,
["ApplySettings"] = function(self)
if not self.settings.key then
return
end
local settings = self.settings
local comboBoxSettings = settings.parentObject.settings
local text = self.text
if settings.position == 1 then
self:SetPoint("TOPLEFT")
self:SetPoint("RIGHT")
else
self:SetPoint("TOPLEFT", settings.parentObject.children[settings.position - 1].frame, "BOTTOMLEFT", 0, 0)
self:SetPoint("RIGHT")
end
self:SetHeight(comboBoxSettings.dropdownButtonWidth)
self:SetText(settings.value)
end,
["SetText"] = function(self, text)
self.text:SetText(text)
end,
["OnClick"] = function(self)
local settings = self.settings
local comboBox = settings.parentObject
local comboBoxSettings = comboBox.settings
local comboBoxItems = comboBox.children
for i = 1, #comboBoxItems do
comboBoxItems[i]:SetSelected(false)
end
self:SetSelected(true)
comboBox.dropdown:Hide()
comboBox:SetText(settings.value)
comboBox:FireEvent("OnValueSelected", settings.key, settings.value)
end,
["SetSelected"] = function(self, selected)
if selected then
self.settings.parentObject.settings.selectedKey = self.settings.key
self.settings.selected = true
self.check:Show()
else
self.settings.selected = false
self.check:Hide()
end
end,
}
---@class Diesal.GUI.ComboBoxItem.Settings
---@field parentObject Diesal.GUI.Object.ComboBox
---@field position number
---@field key string
---@field value string
---@field selected boolean
---@class DiesalComboBoxItem : Diesal.GUI.Object.ComboBox.Item
local function Constructor()
---@class Diesal.GUI.Object.ComboBox.Item : Diesal.GUI.ObjectBase, Diesal.GUI.ComboBoxItem.Methods
---@field text FontString
---@field check Texture
---@field settings Diesal.GUI.ComboBoxItem.Settings
local self = DiesalGUI:Create(Type, true)
local frame = CreateFrame("Button", nil, DiesalGUI.UIParent)
self.frame = frame
self.defaults = {}
frame:SetScript("OnClick", function(this, button)
self:OnClick()
end)
frame:SetScript("OnEnter", function(this) end)
frame:SetScript("OnLeave", function(this) end)
local text = self:CreateRegion("FontString", "text", frame)
text:SetPoint("TOPLEFT", 12, -2)
text:SetPoint("BOTTOMRIGHT", 0, 0)
--text:SetJustifyH("TOP")
text:SetJustifyH("LEFT")
text:SetWordWrap(false)
local check = self:CreateRegion("Texture", "check", frame) --[[ @as Texture ]]
DiesalStyle:StyleTexture(check, {
type = "texture",
position = { 2, nil, 0, nil },
height = 16,
width = 16,
image = { "DiesalGUIcons", { 10, 5, 16, 256, 128 }, "FFFF00" },
})
check:Hide()
-- ~~ 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)