From 79698d9084b8e13b45cb25cd64a71cedcc5c4d39 Mon Sep 17 00:00:00 2001 From: James Whitehead II Date: Thu, 12 Feb 2009 18:57:18 +0000 Subject: [PATCH] * Anchoring code is here, maybe --- Libs/tekKonfigAboutPanel.lua | 115 +++++++++++ Libs/tekKonfigScroll.lua | 80 ++++++++ NinjaLogo.tga | Bin 0 -> 26519 bytes NinjaPanel.lua | 468 ++++++++++++++++++++++++++++++------------ NinjaPanel.toc | 5 + 5 files changed, 542 insertions(+), 126 deletions(-) create mode 100644 Libs/tekKonfigAboutPanel.lua create mode 100644 Libs/tekKonfigScroll.lua create mode 100644 NinjaLogo.tga diff --git a/Libs/tekKonfigAboutPanel.lua b/Libs/tekKonfigAboutPanel.lua new file mode 100644 index 0000000..98022b4 --- /dev/null +++ b/Libs/tekKonfigAboutPanel.lua @@ -0,0 +1,115 @@ + +local lib, oldminor = LibStub:NewLibrary("tekKonfig-AboutPanel", 5) +if not lib then return end + + +function lib.new(parent, addonname) + local frame = CreateFrame("Frame", nil, InterfaceOptionsFramePanelContainer) + frame.name, frame.parent, frame.addonname = parent and "About" or addonname, parent, addonname + frame:Hide() + frame:SetScript("OnShow", lib.OnShow) + InterfaceOptions_AddCategory(frame) + return frame +end + + +local editbox = CreateFrame('EditBox', nil, UIParent) +editbox:Hide() +editbox:SetAutoFocus(true) +editbox:SetHeight(32) +editbox:SetFontObject('GameFontHighlightSmall') +lib.editbox = editbox + +local left = editbox:CreateTexture(nil, "BACKGROUND") +left:SetWidth(8) left:SetHeight(20) +left:SetPoint("LEFT", -5, 0) +left:SetTexture("Interface\\Common\\Common-Input-Border") +left:SetTexCoord(0, 0.0625, 0, 0.625) + +local right = editbox:CreateTexture(nil, "BACKGROUND") +right:SetWidth(8) right:SetHeight(20) +right:SetPoint("RIGHT", 0, 0) +right:SetTexture("Interface\\Common\\Common-Input-Border") +right:SetTexCoord(0.9375, 1, 0, 0.625) + +local center = editbox:CreateTexture(nil, "BACKGROUND") +center:SetHeight(20) +center:SetPoint("RIGHT", right, "LEFT", 0, 0) +center:SetPoint("LEFT", left, "RIGHT", 0, 0) +center:SetTexture("Interface\\Common\\Common-Input-Border") +center:SetTexCoord(0.0625, 0.9375, 0, 0.625) + +editbox:SetScript("OnEscapePressed", editbox.ClearFocus) +editbox:SetScript("OnEnterPressed", editbox.ClearFocus) +editbox:SetScript("OnEditFocusLost", editbox.Hide) +editbox:SetScript("OnEditFocusGained", editbox.HighlightText) +editbox:SetScript("OnTextChanged", function(self) + self:SetText(self:GetParent().val) + self:HighlightText() +end) + + +function lib.OpenEditbox(self) + editbox:SetText(self.val) + editbox:SetParent(self) + editbox:SetPoint("LEFT", self) + editbox:SetPoint("RIGHT", self) + editbox:Show() +end + + +local fields = {"Version", "Author", "X-Category", "X-License", "X-Email", "X-Website", "X-Credits"} +local haseditbox = {["Version"] = true, ["X-Website"] = true, ["X-Email"] = true} +local function HideTooltip() GameTooltip:Hide() end +local function ShowTooltip(self) + GameTooltip:SetOwner(self, "ANCHOR_TOPRIGHT") + GameTooltip:SetText("Click and press Ctrl-C to copy") +end +function lib.OnShow(frame) + local notes = GetAddOnMetadata(frame.addonname, "Notes") + + local title = frame:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge") + title:SetPoint("TOPLEFT", 16, -16) + title:SetText((frame.parent or frame.addonname).." - About") + + local subtitle = frame:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall") + subtitle:SetHeight(32) + subtitle:SetPoint("TOPLEFT", title, "BOTTOMLEFT", 0, -8) + subtitle:SetPoint("RIGHT", parent, -32, 0) + subtitle:SetNonSpaceWrap(true) + subtitle:SetJustifyH("LEFT") + subtitle:SetJustifyV("TOP") + subtitle:SetText(notes) + + local anchor + for _,field in pairs(fields) do + local val = GetAddOnMetadata(frame.addonname, field) + if val then + local title = frame:CreateFontString(nil, "ARTWORK", "GameFontNormalSmall") + title:SetWidth(75) + if not anchor then title:SetPoint("TOPLEFT", subtitle, "BOTTOMLEFT", -2, -8) + else title:SetPoint("TOPLEFT", anchor, "BOTTOMLEFT", 0, -6) end + title:SetJustifyH("RIGHT") + title:SetText(field:gsub("X%-", "")) + + local detail = frame:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall") + detail:SetPoint("LEFT", title, "RIGHT", 4, 0) + detail:SetPoint("RIGHT", -16, 0) + detail:SetJustifyH("LEFT") + detail:SetText((haseditbox[field] and "|cff9999ff" or "").. val) + + if haseditbox[field] then + local button = CreateFrame("Button", nil, frame) + button:SetAllPoints(detail) + button.val = val + button:SetScript("OnClick", lib.OpenEditbox) + button:SetScript("OnEnter", ShowTooltip) + button:SetScript("OnLeave", HideTooltip) + end + + anchor = title + end + end + + frame:SetScript("OnShow", nil) +end diff --git a/Libs/tekKonfigScroll.lua b/Libs/tekKonfigScroll.lua new file mode 100644 index 0000000..18ad71a --- /dev/null +++ b/Libs/tekKonfigScroll.lua @@ -0,0 +1,80 @@ + +local lib, oldminor = LibStub:NewLibrary("tekKonfig-Scroll", 2) +if not lib then return end + +lib.bg = { + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, + tileSize = 16, + edgeSize = 12, + insets = { left = 0, right = 0, top = 5, bottom = 5 } +} + +-- Creates a scrollbar +-- Parent is required, offset and step are optional +function lib.new(parent, offset, step) + local f = CreateFrame("Slider", nil, parent) + f:SetWidth(16) + + f:SetPoint("TOPRIGHT", 0 - (offset or 0), -16 - (offset or 0)) + f:SetPoint("BOTTOMRIGHT", 0 - (offset or 0), 16 + (offset or 0)) + + local up = CreateFrame("Button", nil, f) + up:SetPoint("BOTTOM", f, "TOP") + up:SetWidth(16) up:SetHeight(16) + up:SetNormalTexture("Interface\\Buttons\\UI-ScrollBar-ScrollUpButton-Up") + up:SetPushedTexture("Interface\\Buttons\\UI-ScrollBar-ScrollUpButton-Down") + up:SetDisabledTexture("Interface\\Buttons\\UI-ScrollBar-ScrollUpButton-Disabled") + up:SetHighlightTexture("Interface\\Buttons\\UI-ScrollBar-ScrollUpButton-Highlight") + + up:GetNormalTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4) + up:GetPushedTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4) + up:GetDisabledTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4) + up:GetHighlightTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4) + up:GetHighlightTexture():SetBlendMode("ADD") + + up:SetScript("OnClick", function(self) + local parent = self:GetParent() + parent:SetValue(parent:GetValue() - (step or parent:GetHeight()/2)) + PlaySound("UChatScrollButton") + end) + + local down = CreateFrame("Button", nil, f) + down:SetPoint("TOP", f, "BOTTOM") + down:SetWidth(16) down:SetHeight(16) + down:SetNormalTexture("Interface\\Buttons\\UI-ScrollBar-ScrollDownButton-Up") + down:SetPushedTexture("Interface\\Buttons\\UI-ScrollBar-ScrollDownButton-Down") + down:SetDisabledTexture("Interface\\Buttons\\UI-ScrollBar-ScrollDownButton-Disabled") + down:SetHighlightTexture("Interface\\Buttons\\UI-ScrollBar-ScrollDownButton-Highlight") + + down:GetNormalTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4) + down:GetPushedTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4) + down:GetDisabledTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4) + down:GetHighlightTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4) + down:GetHighlightTexture():SetBlendMode("ADD") + + down:SetScript("OnClick", function(self) + local parent = self:GetParent() + parent:SetValue(parent:GetValue() + (step or parent:GetHeight()/2)) + PlaySound("UChatScrollButton") + end) + + f:SetThumbTexture("Interface\\Buttons\\UI-ScrollBar-Knob") + local thumb = f:GetThumbTexture() + thumb:SetWidth(16) thumb:SetHeight(24) + thumb:SetTexCoord(1/4, 3/4, 1/8, 7/8) + + f:SetScript("OnValueChanged", function(self, value) + local min, max = self:GetMinMaxValues() + if value == min then up:Disable() else up:Enable() end + if value == max then down:Disable() else down:Enable() end + end) + + local border = CreateFrame("Frame", nil, f) + border:SetPoint("TOPLEFT", up, -5, 5) + border:SetPoint("BOTTOMRIGHT", down, 5, -3) + border:SetBackdrop(lib.bg) + border:SetBackdropBorderColor(TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g, TOOLTIP_DEFAULT_COLOR.b, 0.5) + + return f, up, down, border +end diff --git a/NinjaLogo.tga b/NinjaLogo.tga new file mode 100644 index 0000000000000000000000000000000000000000..ea214975e4eafbc0db30b9c95c15e717169bf8c1 GIT binary patch literal 26519 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