From 53679d748f2b75a48fc18e13ebeac906f34a0845 Mon Sep 17 00:00:00 2001 From: Ofrex <30585460+Ofrex@users.noreply.github.com> Date: Sun, 29 Jan 2023 19:05:24 +0000 Subject: [PATCH] StdUI libs and UI lua Added StdUI libs and Ui.lua, also shadowpriest.lua to scripts --- libs/LibStub/LibStub.luac | Bin 0 -> 1652 bytes libs/StdUi.zip | Bin 0 -> 60236 bytes libs/StdUi/.gitignore | 2 + libs/StdUi/StdUi.lua | 297 +++++++++++ libs/StdUi/StdUi.xml | 30 ++ libs/StdUi/StdUiBuilder.lua | 267 ++++++++++ libs/StdUi/StdUiConfig.lua | 95 ++++ libs/StdUi/StdUiGrid.lua | 139 +++++ libs/StdUi/StdUiLayout.lua | 211 ++++++++ libs/StdUi/StdUiPosition.lua | 133 +++++ libs/StdUi/StdUiUtil.lua | 318 ++++++++++++ libs/StdUi/media/Checkers.tga | Bin 0 -> 2604 bytes libs/StdUi/widgets/Autocomplete.lua | 285 ++++++++++ libs/StdUi/widgets/Basic.lua | 72 +++ libs/StdUi/widgets/Button.lua | 126 +++++ libs/StdUi/widgets/Checkbox.lua | 288 ++++++++++ libs/StdUi/widgets/ColorPicker.lua | 323 ++++++++++++ libs/StdUi/widgets/ContextMenu.lua | 265 ++++++++++ libs/StdUi/widgets/Dropdown.lua | 283 ++++++++++ libs/StdUi/widgets/EditBox.lua | 390 ++++++++++++++ libs/StdUi/widgets/Label.lua | 88 ++++ libs/StdUi/widgets/ProgressBar.lua | 77 +++ libs/StdUi/widgets/Scroll.lua | 598 +++++++++++++++++++++ libs/StdUi/widgets/ScrollTable.lua | 778 ++++++++++++++++++++++++++++ libs/StdUi/widgets/Slider.lua | 295 +++++++++++ libs/StdUi/widgets/Spell.lua | 173 +++++++ libs/StdUi/widgets/Tab.lua | 223 ++++++++ libs/StdUi/widgets/Table.lua | 145 ++++++ libs/StdUi/widgets/Tooltip.lua | 174 +++++++ libs/StdUi/widgets/Window.lua | 121 +++++ scripts/shadowpriest.lua | 417 +++++++++++++++ ui.lua | 301 +++++++++++ 32 files changed, 6914 insertions(+) create mode 100644 libs/LibStub/LibStub.luac create mode 100644 libs/StdUi.zip create mode 100644 libs/StdUi/.gitignore create mode 100755 libs/StdUi/StdUi.lua create mode 100755 libs/StdUi/StdUi.xml create mode 100755 libs/StdUi/StdUiBuilder.lua create mode 100755 libs/StdUi/StdUiConfig.lua create mode 100755 libs/StdUi/StdUiGrid.lua create mode 100755 libs/StdUi/StdUiLayout.lua create mode 100755 libs/StdUi/StdUiPosition.lua create mode 100755 libs/StdUi/StdUiUtil.lua create mode 100755 libs/StdUi/media/Checkers.tga create mode 100755 libs/StdUi/widgets/Autocomplete.lua create mode 100755 libs/StdUi/widgets/Basic.lua create mode 100755 libs/StdUi/widgets/Button.lua create mode 100755 libs/StdUi/widgets/Checkbox.lua create mode 100755 libs/StdUi/widgets/ColorPicker.lua create mode 100755 libs/StdUi/widgets/ContextMenu.lua create mode 100755 libs/StdUi/widgets/Dropdown.lua create mode 100755 libs/StdUi/widgets/EditBox.lua create mode 100755 libs/StdUi/widgets/Label.lua create mode 100755 libs/StdUi/widgets/ProgressBar.lua create mode 100755 libs/StdUi/widgets/Scroll.lua create mode 100755 libs/StdUi/widgets/ScrollTable.lua create mode 100755 libs/StdUi/widgets/Slider.lua create mode 100755 libs/StdUi/widgets/Spell.lua create mode 100755 libs/StdUi/widgets/Tab.lua create mode 100755 libs/StdUi/widgets/Table.lua create mode 100755 libs/StdUi/widgets/Tooltip.lua create mode 100755 libs/StdUi/widgets/Window.lua create mode 100644 scripts/shadowpriest.lua create mode 100644 ui.lua diff --git a/libs/LibStub/LibStub.luac b/libs/LibStub/LibStub.luac new file mode 100644 index 0000000000000000000000000000000000000000..0f737d3548058b42f964a7a725777f406691bfb0 GIT binary patch literal 1652 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%0DP&bhzJ6j3)2@Q&U@B9%%q0=`mvxd$ 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 M_jUzPEfCQE1FH7vJpcdz literal 0 HcmV?d00001 diff --git a/libs/StdUi/.gitignore b/libs/StdUi/.gitignore new file mode 100644 index 0000000..8aa70a8 --- /dev/null +++ b/libs/StdUi/.gitignore @@ -0,0 +1,2 @@ +.idea +tests \ No newline at end of file diff --git a/libs/StdUi/StdUi.lua b/libs/StdUi/StdUi.lua new file mode 100755 index 0000000..3cd08ac --- /dev/null +++ b/libs/StdUi/StdUi.lua @@ -0,0 +1,297 @@ +local MAJOR, MINOR = 'StdUi', 5; +--- @class StdUi +local StdUi = LibStub:NewLibrary(MAJOR, MINOR); + +if not StdUi then + return +end + +local TableInsert = tinsert; + +StdUi.moduleVersions = {}; +if not StdUiInstances then + StdUiInstances = {StdUi}; +else + TableInsert(StdUiInstances, StdUi); +end + +function StdUi:NewInstance() + local instance = CopyTable(self); + instance:ResetConfig(); + TableInsert(StdUiInstances, instance); + return instance; +end + +function StdUi:RegisterModule(module, version) + self.moduleVersions[module] = version; +end + +function StdUi:UpgradeNeeded(module, version) + if not self.moduleVersions[module] then + return true; + end + + return self.moduleVersions[module] < version; +end + +function StdUi:RegisterWidget(name, func) + if not self[name] then + self[name] = func; + return true; + end + + return false; +end + +function StdUi:InitWidget(widget) + widget.isWidget = true; + + function widget:GetChildrenWidgets() + local children = {widget:GetChildren()}; + local result = {}; + for i = 1, #children do + local child = children[i]; + if child.isWidget then + TableInsert(result, child); + end + end + + return result; + end +end + +function StdUi:SetObjSize(obj, width, height) + if width then + obj:SetWidth(width); + end + + if height then + obj:SetHeight(height); + end +end + +function StdUi:SetTextColor(fontString, colorType) + colorType = colorType or 'normal'; + if fontString.SetTextColor then + local c = self.config.font.color[colorType]; + fontString:SetTextColor(c.r, c.g, c.b, c.a); + end +end + +StdUi.SetHighlightBorder = function(self) + if self.target then + self = self.target; + end + + if self.isDisabled then + return + end + + local hc = self.stdUi.config.highlight.color; + if not self.origBackdropBorderColor then + self.origBackdropBorderColor = {self:GetBackdropBorderColor()}; + end + self:SetBackdropBorderColor(hc.r, hc.g, hc.b, 1); +end + +StdUi.ResetHighlightBorder = function(self) + if self.target then + self = self.target; + end + + if self.isDisabled then + return + end + + local hc = self.origBackdropBorderColor; + if hc then + self:SetBackdropBorderColor(unpack(hc)); + end +end + +function StdUi:HookHoverBorder(object) + if not object.SetBackdrop then + Mixin(object, BackdropTemplateMixin) + end + object:HookScript('OnEnter', self.SetHighlightBorder); + object:HookScript('OnLeave', self.ResetHighlightBorder); +end + +function StdUi:ApplyBackdrop(frame, type, border, insets) + local config = frame.config or self.config; + local backdrop = { + bgFile = config.backdrop.texture, + edgeFile = config.backdrop.texture, + edgeSize = 1, + }; + if insets then + backdrop.insets = insets; + end + if not frame.SetBackdrop then + Mixin(frame, BackdropTemplateMixin) + end + frame:SetBackdrop(backdrop); + + type = type or 'button'; + border = border or 'border'; + + if config.backdrop[type] then + frame:SetBackdropColor( + config.backdrop[type].r, + config.backdrop[type].g, + config.backdrop[type].b, + config.backdrop[type].a + ); + end + + if config.backdrop[border] then + frame:SetBackdropBorderColor( + config.backdrop[border].r, + config.backdrop[border].g, + config.backdrop[border].b, + config.backdrop[border].a + ); + end +end + +function StdUi:ClearBackdrop(frame) + if not frame.SetBackdrop then + Mixin(frame, BackdropTemplateMixin) + end + frame:SetBackdrop(nil); +end + +function StdUi:ApplyDisabledBackdrop(frame, enabled) + if frame.target then + frame = frame.target; + end + + if enabled then + self:ApplyBackdrop(frame, 'button', 'border'); + self:SetTextColor(frame, 'normal'); + if frame.label then + self:SetTextColor(frame.label, 'normal'); + end + + if frame.text then + self:SetTextColor(frame.text, 'normal'); + end + frame.isDisabled = false; + else + self:ApplyBackdrop(frame, 'buttonDisabled', 'borderDisabled'); + self:SetTextColor(frame, 'disabled'); + if frame.label then + self:SetTextColor(frame.label, 'disabled'); + end + + if frame.text then + self:SetTextColor(frame.text, 'disabled'); + end + frame.isDisabled = true; + end +end + +function StdUi:HookDisabledBackdrop(frame) + local this = self; + hooksecurefunc(frame, 'Disable', function(self) + this:ApplyDisabledBackdrop(self, false); + end); + + hooksecurefunc(frame, 'Enable', function(self) + this:ApplyDisabledBackdrop(self, true); + end); +end + +function StdUi:StripTextures(frame) + for i = 1, frame:GetNumRegions() do + local region = select(i, frame:GetRegions()); + + if region and region:GetObjectType() == 'Texture' then + region:SetTexture(nil); + end + end +end + +function StdUi:MakeDraggable(frame, handle) + frame:SetMovable(true); + frame:EnableMouse(true); + frame:RegisterForDrag('LeftButton'); + frame:SetScript('OnDragStart', frame.StartMoving); + frame:SetScript('OnDragStop', frame.StopMovingOrSizing); + + if handle then + handle:EnableMouse(true); + handle:SetMovable(true); + handle:RegisterForDrag('LeftButton'); + + handle:SetScript('OnDragStart', function(self) + frame.StartMoving(frame); + end); + + handle:SetScript('OnDragStop', function(self) + frame.StopMovingOrSizing(frame); + end); + end +end + +-- Make a frame resizable +function StdUi:MakeResizable(frame, direction) + -- Possible resize directions and handle rotation values + local anchorDirections = { + ["TOP"] = 0, + ["TOPRIGHT"] = 1.5708, + ["RIGHT"] = 0, + ["BOTTOMRIGHT"] = 0, + ["BOTTOM"] = 0, + ["BOTTOMLEFT"] = -1.5708, + ["LEFT"] = 0, + ["TOPLEFT"] = 3.1416, + } + + direction = string.upper(direction); + + -- Return if invalid direction + if not anchorDirections[direction] then return false end + + frame:SetResizable(true); + + -- Create the resize anchor + local anchor = CreateFrame("Button", nil, frame); + anchor:SetPoint(direction, frame, direction); + + -- Attach side anchor to adjacent sides of frame + if direction == "TOP" or direction == "BOTTOM" then + anchor:SetHeight(self.config.resizeHandle.height); + anchor:SetPoint("LEFT", frame, "LEFT", self.config.resizeHandle.width, 0); + anchor:SetPoint("RIGHT", frame, "RIGHT", self.config.resizeHandle.width*-1, 0); + elseif direction == "LEFT" or direction == "RIGHT" then + anchor:SetWidth(self.config.resizeHandle.width); + anchor:SetPoint("TOP", frame, "TOP", 0, self.config.resizeHandle.height*-1); + anchor:SetPoint("BOTTOM", frame, "BOTTOM", 0, self.config.resizeHandle.height); + else + -- Set the corner anchor textures + anchor:SetNormalTexture(self.config.resizeHandle.texture.normal); + anchor:SetHighlightTexture(self.config.resizeHandle.texture.highlight); + anchor:SetPushedTexture(self.config.resizeHandle.texture.pushed); + + -- Set size and rotate corner anchor + anchor:SetSize(self.config.resizeHandle.width, self.config.resizeHandle.height); + anchor:GetNormalTexture():SetRotation(anchorDirections[direction]); + anchor:GetHighlightTexture():SetRotation(anchorDirections[direction]); + anchor:GetPushedTexture():SetRotation(anchorDirections[direction]); + end + + -- Resize anchor click handlers + anchor:SetScript("OnMouseDown", function(self, button) + if button == "LeftButton" then + frame:StartSizing(direction); + frame:SetUserPlaced(true); + end + end) + anchor:SetScript("OnMouseUp", function(self, button) + if button == "LeftButton" then + frame:StopMovingOrSizing(); + end + end) +end + diff --git a/libs/StdUi/StdUi.xml b/libs/StdUi/StdUi.xml new file mode 100755 index 0000000..f3e03e0 --- /dev/null +++ b/libs/StdUi/StdUi.xml @@ -0,0 +1,30 @@ + +