if not WeakAuras.IsLibsOK() then return end local AddonName = ... local Private = select(2, ...) local function setCorner(corner, point, relativeTo, x, y, width, height) corner:ClearAllPoints() corner:SetPoint(point, relativeTo, x, y) corner:SetSize(width, height) end local function setEdge(edge, point1, relativeTo1, point2, relativeTo2, width, height) edge:ClearAllPoints() edge:SetSize(width, height) edge:SetPoint(point1, relativeTo1, point2, 0, 0) edge:SetPoint(point2, relativeTo2, point1, 0, 0) end local function UpdateNineSliceBorders(frame) local NineSlice = frame.NineSlice local PortaitMode = frame:GetFrameLayoutType() == "PortraitMode" local topLeftCorner = PortaitMode and NineSlice.TopLeftCorner or NineSlice.TopLeftCornerNoPortrait local topEdgeRelativeTo = PortaitMode and NineSlice.TopLeftCorner or NineSlice.TopLeftCornerNoPortrait local leftEdgeRelativeTo = PortaitMode and NineSlice.TopLeftCorner or NineSlice.TopLeftCornerNoPortrait -- Top Left Corner setCorner(topLeftCorner, "TOPLEFT", NineSlice, -13, 16, 75, 75) -- Top Right Corner setCorner(NineSlice.TopRightCorner, "TOPRIGHT", NineSlice, 4, 16, 75, 75) -- Bottom Left Corner setCorner(NineSlice.BottomLeftCorner, "BOTTOMLEFT", NineSlice, -13, -3, 32, 32) -- Bottom Right Corner setCorner(NineSlice.BottomRightCorner, "BOTTOMRIGHT", NineSlice, 4, -3, 32, 32) -- Top Edge setEdge(NineSlice.TopEdge, "TOPLEFT", topEdgeRelativeTo, "TOPRIGHT", NineSlice.TopRightCorner, 32, 75) -- Bottom Edge setEdge(NineSlice.BottomEdge, "BOTTOMLEFT", NineSlice.BottomLeftCorner, "BOTTOMRIGHT", NineSlice.BottomRightCorner, 32, 32) -- Left Edge setEdge(NineSlice.LeftEdge, "TOPLEFT", leftEdgeRelativeTo, "BOTTOMLEFT", NineSlice.BottomLeftCorner, 75, 8) -- Right Edge setEdge(NineSlice.RightEdge, "TOPLEFT", NineSlice.TopRightCorner, "BOTTOMLEFT", NineSlice.BottomRightCorner, 75, 8) end local function InputBoxInstructions_OnTextChanged(self) if self:GetText() == "" then self.Instructions:Show(); else self.Instructions:Hide(); end end local function InputBoxInstructions_UpdateColorForEnabledState(self, color) if color then self:SetTextColor(color.r, color.g, color.b, color.a); end end local function InputBoxInstructions_OnDisable(self) InputBoxInstructions_UpdateColorForEnabledState(self, self.disabledColor); end local function InputBoxInstructions_OnEnable(self) InputBoxInstructions_UpdateColorForEnabledState(self, self.enabledColor); end local function SearchBoxTemplate_OnEditFocusLost(self) if ( self:GetText() == "" ) then self.searchIcon:SetVertexColor(0.6, 0.6, 0.6); self.clearButton:Hide(); end end local function SearchBoxTemplate_OnEditFocusGained(self) self.searchIcon:SetVertexColor(1.0, 1.0, 1.0); self.clearButton:Show(); end function WA_SearchBoxTemplate_OnTextChanged(self) if ( not self:HasFocus() and self:GetText() == "" ) then self.searchIcon:SetVertexColor(0.6, 0.6, 0.6); self.clearButton:Hide(); else self.searchIcon:SetVertexColor(1.0, 1.0, 1.0); self.clearButton:Show(); end InputBoxInstructions_OnTextChanged(self); end local function SearchBoxTemplate_ClearText(self) self:SetText(""); self:ClearFocus(); end local function SearchBoxTemplateClearButton_OnClick(self) PlaySound("igMainMenuOptionCheckBoxOn"); SearchBoxTemplate_ClearText(self:GetParent()); end local function GetParentName(frame) return frame:GetName() or frame end WeakAuras.XMLTemplates = { -- InputBoxTemplate (Retail 11.1.7 (61967)) ["InputBoxTemplate"] = function(frame) frame:EnableMouse(true) -- Left Texture local left = frame:CreateTexture(nil, "BACKGROUND") left:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\CommonSearch") left:SetSize(8, 20) left:SetPoint("LEFT", frame, "LEFT", -5, 0) left:SetTexCoord(0.886719, 0.949219, 0.335938, 0.648438) frame.Left = left -- Right Texture local right = frame:CreateTexture(nil, "BACKGROUND") right:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\CommonSearch") right:SetSize(8, 20) right:SetPoint("RIGHT", frame, "RIGHT", 0, 0) right:SetTexCoord(0.00390625, 0.0664062, 0.664062, 0.976562) frame.Right = right -- Middle Texture (zwischen Left und Right) local middle = frame:CreateTexture(nil, "BACKGROUND") middle:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\CommonSearch") middle:SetSize(10, 20) middle:SetTexCoord(0.00390625, 0.878906, 0.335938, 0.648438) middle:SetPoint("LEFT", left, "RIGHT") middle:SetPoint("RIGHT", right, "LEFT") frame.Middle = middle -- FontString frame:SetFontObject("ChatFontNormal") -- Scripts frame:SetScript("OnEscapePressed", function(self) EditBox_ClearFocus(self) end) frame:SetScript("OnEditFocusLost", function(self) EditBox_ClearHighlight(self) end) frame:SetScript("OnEditFocusGained", function(self) EditBox_HighlightText(self) end) end, -- InputBoxInstructionsTemplate (Retail 11.1.7 (61967)) ["InputBoxInstructionsTemplate"] = function(frame) WeakAuras.XMLTemplates["InputBoxTemplate"](frame) -- Inherits from InputBoxTemplate --[[ Optional frame.disabledColor = { r = 0.35, g = 0.35, b = 0.35, a = 1 } frame.enabledColor = { r = 1, g = 1, b = 1, a = 1 } ]] -- Instructions FontString local instructions = frame:CreateFontString(nil, "ARTWORK", "GameFontDisableSmall") instructions:SetJustifyH("LEFT") instructions:SetJustifyV("MIDDLE") instructions:SetAllPoints(frame) instructions:SetTextColor(0.35, 0.35, 0.35) frame.Instructions = instructions -- Skripts frame:SetScript("OnTextChanged", InputBoxInstructions_OnTextChanged) frame:SetScript("OnDisable", InputBoxInstructions_OnDisable) frame:SetScript("OnEnable", InputBoxInstructions_OnEnable) -- FontObject frame:SetFontObject("GameFontHighlightSmall") end, -- SearchBoxTemplate (Retail 11.1.7 (61967)) ["SearchBoxTemplate"] = function(frame) WeakAuras.XMLTemplates["InputBoxInstructionsTemplate"](frame) -- Inherits from InputBoxInstructionsTemplate frame:SetAutoFocus(false) frame:SetTextInsets(16, 20, 0, 0); frame.instructionText = SEARCH frame.Instructions:SetText(frame.instructionText); frame.Instructions:ClearAllPoints(); frame.Instructions:SetPoint("TOPLEFT", frame, "TOPLEFT", 16, 0); frame.Instructions:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -20, 0); -- Search-Icon local searchIcon = frame:CreateTexture(GetParentName(frame) .. "SearchIcon", "OVERLAY") searchIcon:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\CommonSearch") searchIcon:SetSize(10, 10) searchIcon:SetPoint("LEFT", 1, -1) searchIcon:SetTexCoord(0.0742188, 0.167969, 0.664062, 0.851562) searchIcon:SetVertexColor(0.6, 0.6, 0.6); frame.searchIcon = searchIcon -- Clear-Button local clearButton = CreateFrame("Button", GetParentName(frame) .. "ClearButton", frame) clearButton:SetSize(17, 17) clearButton:SetPoint("RIGHT", -3, 0) clearButton:Hide() frame.clearButton = clearButton local texture = clearButton:CreateTexture(nil, "ARTWORK") texture:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\CommonSearch") texture:SetAlpha(0.5) texture:SetSize(10, 10) texture:SetPoint("TOPLEFT", 3, -3) texture:SetTexCoord(0.175781, 0.253906, 0.664062, 0.820312) clearButton.texture = texture -- Clear-Button Scripts clearButton:SetScript("OnEnter", function(self) self.texture:SetAlpha(1.0) end) clearButton:SetScript("OnLeave", function(self) self.texture:SetAlpha(0.5) end) clearButton:SetScript("OnMouseDown", function(self) if self:IsEnabled() then self.texture:SetPoint("TOPLEFT", self, "TOPLEFT", 4, -4) end end) clearButton:SetScript("OnMouseUp", function(self) self.texture:SetPoint("TOPLEFT", self, "TOPLEFT", 3, -3) end) clearButton:SetScript("OnClick", SearchBoxTemplateClearButton_OnClick) -- EditBox Scripts frame:SetScript("OnEscapePressed", EditBox_ClearFocus) frame:SetScript("OnEnterPressed", EditBox_ClearFocus) frame:SetScript("OnEditFocusLost", SearchBoxTemplate_OnEditFocusLost) frame:SetScript("OnEditFocusGained", SearchBoxTemplate_OnEditFocusGained) frame:SetScript("OnTextChanged", WA_SearchBoxTemplate_OnTextChanged) end, -- PortraitFrameTemplate (Retail 11.1.7 (61967)) -- This is an empty frame with space for a portrait/icon in the top left corner. ["PortraitFrameTemplate"] = function(frame) frame:SetSize(338, 424) -- NineSlice Borders local nineSlice = CreateFrame("Frame", nil, frame) nineSlice:SetAllPoints(frame) nineSlice:SetFrameLevel(125) frame.NineSlice = nineSlice -- Top Left Corner local topLeftCorner = nineSlice:CreateTexture(nil, "OVERLAY") topLeftCorner:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\UIFrameMetal2x") topLeftCorner:SetSize(75, 75) topLeftCorner:SetPoint("TOPLEFT", frame, "TOPLEFT", -13, 16) topLeftCorner:SetTexCoord(0.00195312, 0.294922, 0.298828, 0.591797) nineSlice.TopLeftCorner = topLeftCorner -- Top Left Corner No Portrait local topLeftCornerNoPortrait = nineSlice:CreateTexture(nil, "OVERLAY") topLeftCornerNoPortrait:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\UIFrameMetal2x") topLeftCornerNoPortrait:SetSize(75, 75) topLeftCornerNoPortrait:SetPoint("TOPLEFT", frame, "TOPLEFT", -8, 16) topLeftCornerNoPortrait:SetTexCoord(0.00195312, 0.294922, 0.00195312, 0.294922) topLeftCornerNoPortrait:Hide() nineSlice.TopLeftCornerNoPortrait = topLeftCornerNoPortrait -- Top Right Corner local topRightCorner = nineSlice:CreateTexture(nil, "OVERLAY") topRightCorner:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\UIFrameMetal2x") topRightCorner:SetSize(75, 75) topRightCorner:SetPoint("TOPRIGHT", frame, "TOPRIGHT", 4, 16) topRightCorner:SetTexCoord(0.298828, 0.591797, 0.00195312, 0.294922) nineSlice.TopRightCorner = topRightCorner -- Bottom Left Corner local bottomLeftCorner = nineSlice:CreateTexture(nil, "OVERLAY") bottomLeftCorner:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\UIFrameMetal2x") bottomLeftCorner:SetSize(32, 32) bottomLeftCorner:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT", -13, -3) bottomLeftCorner:SetTexCoord(0.298828, 0.423828, 0.298828, 0.423828) nineSlice.BottomLeftCorner = bottomLeftCorner -- Bottom Right Corner local bottomRightCorner = nineSlice:CreateTexture(nil, "OVERLAY") bottomRightCorner:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\UIFrameMetal2x") bottomRightCorner:SetSize(32, 32) bottomRightCorner:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", 4, -3) bottomRightCorner:SetTexCoord(0.427734, 0.552734, 0.298828, 0.423828) nineSlice.BottomRightCorner = bottomRightCorner -- Top Edge local topEdge = nineSlice:CreateTexture(nil, "OVERLAY") topEdge:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\UIFrameMetalHorizontal2x") topEdge:SetSize(32, 75) topEdge:SetPoint("TOPLEFT", topLeftCorner, "TOPRIGHT", 0, 0) topEdge:SetPoint("TOPRIGHT", topRightCorner, "TOPLEFT", 0, 0) topEdge:SetHorizTile(true) topEdge:SetTexCoord(0.0, 1.0, 0.00390625, 0.589844) nineSlice.TopEdge = topEdge -- Bottom Edge local bottomEdge = nineSlice:CreateTexture(nil, "OVERLAY") bottomEdge:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\UIFrameMetalHorizontal2x") bottomEdge:SetSize(32, 32) bottomEdge:SetPoint("BOTTOMLEFT", bottomLeftCorner, "BOTTOMRIGHT", 0, 0) bottomEdge:SetPoint("BOTTOMRIGHT", bottomRightCorner, "BOTTOMLEFT", 0, 0) bottomEdge:SetHorizTile(true) bottomEdge:SetTexCoord(0.0, 0.5, 0.597656, 0.847656) nineSlice.BottomEdge = bottomEdge -- Left Edge local leftEdge = nineSlice:CreateTexture(nil, "OVERLAY") leftEdge:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\UIFrameMetalVertical2x") leftEdge:SetSize(75, 8) leftEdge:SetPoint("TOPLEFT", topLeftCorner, "BOTTOMLEFT", 0, 0) leftEdge:SetPoint("BOTTOMLEFT", bottomLeftCorner, "TOPLEFT", 0, 0) leftEdge:SetVertTile(true) leftEdge:SetTexCoord(0.00195312, 0.294922, 0.0, 1.0) nineSlice.LeftEdge = leftEdge -- Right Edge local rightEdge = nineSlice:CreateTexture(nil, "OVERLAY") rightEdge:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\UIFrameMetalVertical2x") rightEdge:SetSize(75, 8) rightEdge:SetPoint("TOPLEFT", topRightCorner, "BOTTOMLEFT", 0, 0) rightEdge:SetPoint("BOTTOMLEFT", bottomRightCorner, "TOPLEFT", 0, 0) rightEdge:SetVertTile(true) rightEdge:SetTexCoord(0.298828, 0.591797, 0.0, 1.0) nineSlice.RightEdge = rightEdge -- Portrait Container local portraitContainer = CreateFrame("Frame", nil, frame) portraitContainer:SetSize(1, 1) portraitContainer:SetPoint("TOPLEFT") portraitContainer:SetFrameLevel(120) frame.PortraitContainer = portraitContainer -- Portrait local portrait = portraitContainer:CreateTexture(nil, "ARTWORK") portrait:SetSize(62, 62) portrait:SetPoint("TOPLEFT", portraitContainer, "TOPLEFT", -5, 7) portraitContainer.portrait = portrait -- Title Container local titleContainer = CreateFrame("Frame", nil, frame) titleContainer:SetSize(0, 20) titleContainer:SetPoint("TOPLEFT", frame, "TOPLEFT", 58, -1) titleContainer:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -24, -1) titleContainer:SetFrameLevel(126) frame.TitleContainer = titleContainer -- Title Text local titleText = titleContainer:CreateFontString(GetParentName(frame) .. "TitleText", "OVERLAY", "GameFontNormal") titleText:SetText("") titleText:SetWordWrap(false) titleText:SetPoint("TOP", titleContainer, "TOP", 0, -5) titleText:SetPoint("LEFT", titleContainer, "LEFT") titleText:SetPoint("RIGHT", titleContainer, "RIGHT") titleContainer.TitleText = titleText -- Close Button local closeButton = CreateFrame("Button", nil, frame, "UIPanelCloseButton") closeButton:SetSize(24, 24) closeButton:SetPoint("TOPRIGHT", frame, "TOPRIGHT", 0, 0) closeButton:SetFrameLevel(128) frame.CloseButton = closeButton closeButton:SetNormalTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\redbutton2x") closeButton:GetNormalTexture():SetTexCoord(0.152344, 0.292969, 0.0078125, 0.304688) closeButton:SetPushedTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\redbutton2x") closeButton:GetPushedTexture():SetTexCoord(0.152344, 0.292969, 0.320312, 0.617188) closeButton:SetDisabledTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\redbutton2x") closeButton:GetDisabledTexture():SetTexCoord(0.152344, 0.292969, 0.632812, 0.929688) closeButton:SetHighlightTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\redbutton2x", "ADD") closeButton:GetHighlightTexture():SetTexCoord(0.449219, 0.589844, 0.0078125, 0.304688) -- Background local bgTexture = frame:CreateTexture(nil, "BACKGROUND") bgTexture:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\UI-Background-Rock") bgTexture:SetHorizTile(true) bgTexture:SetVertTile(true) bgTexture:SetPoint("TOPLEFT", frame, "TOPLEFT", 2, -21) bgTexture:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -2, 2) frame.Bg = bgTexture -- Border local topTileStreaks = frame:CreateTexture(nil, "BORDER") topTileStreaks:SetTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\UIFrameHorizontal") topTileStreaks:SetSize(256, 43) topTileStreaks:SetPoint("TOPLEFT", frame, "TOPLEFT", 6, -21) topTileStreaks:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -2, -21) topTileStreaks:SetHorizTile(true) topTileStreaks:SetTexCoord(0.0, 1.0, 0.0078125, 0.34375) frame.TopTileStreaks = topTileStreaks -- Mixin frame.Bg:SetVertexColor(0.5882, 0.6275, 0.6706, 0.8) -- approx. PANEL_BACKGROUND_COLOR #ff1f1e21 frame.layoutType = "PortraitMode" frame.ShowPortrait = function(self) self.PortraitContainer:Show(); self.NineSlice.TopLeftCorner:Show(); self.NineSlice.TopLeftCornerNoPortrait:Hide(); self.layoutType = "PortraitMode" end frame.HidePortrait = function(self) self.PortraitContainer:Hide(); self.NineSlice.TopLeftCorner:Hide(); self.NineSlice.TopLeftCornerNoPortrait:Show(); self.layoutType = "NoPortraitMode" end frame.GetFrameLayoutType = function(self) return self.layoutType or self:GetParent().layoutType; end -- update NineSlice Borders on SizeChanged, since they like to be scuffed when the frame is resized frame:SetScript("OnSizeChanged", function(self) UpdateNineSliceBorders(self); end) end, -- MaximizeMinimizeButtonFrameTemplate (Retail 11.1.7 (61967)) ["MaximizeMinimizeButtonFrameTemplate"] = function(frame) frame:SetSize(24, 24) frame:SetFrameLevel(127) -- Maximize Button local maximizeButton = CreateFrame("Button", "MaximizeButton", frame) maximizeButton:SetAllPoints(frame) maximizeButton:Hide() frame.MaximizeButton = maximizeButton maximizeButton:SetNormalTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\redbutton2x") maximizeButton:GetNormalTexture():SetTexCoord(0.300781, 0.441406, 0.0078125, 0.304688) maximizeButton:SetPushedTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\redbutton2x") maximizeButton:GetPushedTexture():SetTexCoord(0.300781, 0.441406, 0.320312, 0.617188) maximizeButton:SetDisabledTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\redbutton2x") maximizeButton:GetDisabledTexture():SetTexCoord(0.300781, 0.441406, 0.632812, 0.929688) maximizeButton:SetHighlightTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\redbutton2x", "ADD") maximizeButton:GetHighlightTexture():SetTexCoord(0.449219, 0.589844, 0.0078125, 0.304688) -- Minimize Button local minimizeButton = CreateFrame("Button", "MinimizeButton", frame) minimizeButton:SetAllPoints(frame) frame.MinimizeButton = minimizeButton minimizeButton:SetNormalTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\redbutton2x") minimizeButton:GetNormalTexture():SetTexCoord(0.00390625, 0.144531, 0.0078125, 0.304688) minimizeButton:SetPushedTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\redbutton2x") minimizeButton:GetPushedTexture():SetTexCoord(0.00390625, 0.144531, 0.320312, 0.617188) minimizeButton:SetDisabledTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\redbutton2x") minimizeButton:GetDisabledTexture():SetTexCoord(0.00390625, 0.144531, 0.632812, 0.929688) minimizeButton:SetHighlightTexture("Interface\\AddOns\\WeakAuras\\Media\\Textures\\redbutton2x", "ADD") minimizeButton:GetHighlightTexture():SetTexCoord(0.449219, 0.589844, 0.0078125, 0.304688) -- Mixin frame.isMinimized = false frame.OnShow = function(self) if self.isMinimized then self:SetMaximizedLook() else self:SetMinimizedLook() end end frame.IsMinimized = function(self) return self.isMinimized end frame.SetOnMaximizedCallback = function(self, callback) self.maximizedCallback = callback end frame.SetOnMinimizedCallback = function(self, callback) self.minimizedCallback = callback end frame.Maximize = function(self, skipCallback) if self.maximizedCallback and not skipCallback then self:maximizedCallback() end self.isMinimized = false self:SetMinimizedLook() end frame.Minimize = function(self, skipCallback) if self.minimizedCallback and not skipCallback then self:minimizedCallback() end self.isMinimized = true self:SetMaximizedLook() end frame.SetMinimizedLook = function(self) self.MaximizeButton:Hide() self.MinimizeButton:Show() end frame.SetMaximizedLook = function(self) self.MaximizeButton:Show() self.MinimizeButton:Hide() end frame:SetScript("OnShow", function(self) self:OnShow(); end) maximizeButton:SetScript("OnClick", function(self) self:GetParent():Maximize(); PlaySound("igMainMenuOptionCheckBoxOn"); end) minimizeButton:SetScript("OnClick", function(self) self:GetParent():Minimize(); PlaySound("igMainMenuOptionCheckBoxOn"); end) end, }