------------------------------------------------------------------------------- -- Localized Lua globals. ------------------------------------------------------------------------------- local _G = getfenv(0) local table = _G.table local string = _G.string ------------------------------------------------------------------------------- -- AddOn namespace. ------------------------------------------------------------------------------- local LibStub = LibStub local MODNAME = "Ackis Recipe List" local addon = LibStub("AceAddon-3.0"):GetAddon(MODNAME) -- Set up the private intra-file namespace. local private = select(2, ...) ------------------------------------------------------------------------------- -- Table cache mechanism ------------------------------------------------------------------------------- do local table_cache = {} -- Returns a table function private.AcquireTable() local tbl = table.remove(table_cache) or {} return tbl end -- Cleans the table and stores it in the cache function private.ReleaseTable(tbl) if not tbl then return end table.wipe(tbl) table.insert(table_cache, tbl) end end -- do block ------------------------------------------------------------------------------- -- Sort functions ------------------------------------------------------------------------------- do addon.sorted_recipes = {} local recipe_list = private.recipe_list local sorted_recipes = addon.sorted_recipes local function Sort_SkillAsc(a, b) local reca, recb = recipe_list[a], recipe_list[b] if reca.skill_level == recb.skill_level then return reca.name < recb.name else return reca.skill_level < recb.skill_level end end local function Sort_SkillDesc(a, b) local reca, recb = recipe_list[a], recipe_list[b] if reca.skill_level == recb.skill_level then return reca.name < recb.name else return recb.skill_level < reca.skill_level end end local function Sort_NameAsc(a, b) return recipe_list[a].name < recipe_list[b].name end local function Sort_NameDesc(a, b) return recipe_list[a].name > recipe_list[b].name end local RECIPE_SORT_FUNCS = { ["SkillAscending"] = Sort_SkillAsc, ["SkillDescending"] = Sort_SkillDesc, ["NameAscending"] = Sort_NameAsc, ["NameDescending"] = Sort_NameDesc, } -- Sorts the recipe_list according to configuration settings. function private.SortRecipeList(recipe_list) local sort_type = addon.db.profile.sorting local skill_view = addon.db.profile.skill_view local sort_func = RECIPE_SORT_FUNCS[(skill_view and "Skill" or "Name")..sort_type] or Sort_NameAsc table.wipe(sorted_recipes) for n, v in pairs(recipe_list) do table.insert(sorted_recipes, n) end table.sort(sorted_recipes, sort_func) end end -- do ------------------------------------------------------------------------------- -- Sets show and hide scripts as well as text for a tooltip for the given frame. ------------------------------------------------------------------------------- do local HIGHLIGHT_FONT_COLOR = _G.HIGHLIGHT_FONT_COLOR local function Show_Tooltip(frame, motion) GameTooltip:SetOwner(frame, "ANCHOR_RIGHT") GameTooltip:SetText(frame.tooltip_text, HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b) GameTooltip:Show() end local function Hide_Tooltip() GameTooltip:Hide() end function private.SetTooltipScripts(frame, textLabel) frame.tooltip_text = textLabel frame:SetScript("OnEnter", Show_Tooltip) frame:SetScript("OnLeave", Hide_Tooltip) end end -- do ------------------------------------------------------------------------------- -- Generic function for creating buttons. ------------------------------------------------------------------------------- do -- I hate stretchy buttons. Thanks very much to ckknight for this code -- (found in RockConfig) -- when pressed, the button should look pressed local function button_OnMouseDown(self) if self:IsEnabled() then self.left:SetTexture([[Interface\Buttons\UI-Panel-Button-Down]]) self.middle:SetTexture([[Interface\Buttons\UI-Panel-Button-Down]]) self.right:SetTexture([[Interface\Buttons\UI-Panel-Button-Down]]) end end -- when depressed, return to normal local function button_OnMouseUp(self) if self:IsEnabled() then self.left:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) self.middle:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) self.right:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) end end local function button_Disable(self) self.left:SetTexture([[Interface\Buttons\UI-Panel-Button-Disabled]]) self.middle:SetTexture([[Interface\Buttons\UI-Panel-Button-Disabled]]) self.right:SetTexture([[Interface\Buttons\UI-Panel-Button-Disabled]]) self:__Disable() self:EnableMouse(false) end local function button_Enable(self) self.left:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) self.middle:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) self.right:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) self:__Enable() self:EnableMouse(true) end function private.GenericCreateButton(name, parent, height, width, font_object, label, justify_h, tip_text, noTextures) local button = CreateFrame("Button", name, parent) button:SetHeight(height) button:SetWidth(width) if noTextures == 0 then button:SetHighlightTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight") elseif noTextures == 1 then local left = button:CreateTexture(nil, "BACKGROUND") button.left = left left:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) local middle = button:CreateTexture(nil, "BACKGROUND") button.middle = middle middle:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) local right = button:CreateTexture(nil, "BACKGROUND") button.right = right right:SetTexture([[Interface\Buttons\UI-Panel-Button-Up]]) left:SetPoint("TOPLEFT") left:SetPoint("BOTTOMLEFT") left:SetWidth(12) left:SetTexCoord(0, 0.09375, 0, 0.6875) right:SetPoint("TOPRIGHT") right:SetPoint("BOTTOMRIGHT") right:SetWidth(12) right:SetTexCoord(0.53125, 0.625, 0, 0.6875) middle:SetPoint("TOPLEFT", left, "TOPRIGHT") middle:SetPoint("BOTTOMRIGHT", right, "BOTTOMLEFT") middle:SetTexCoord(0.09375, 0.53125, 0, 0.6875) button:SetScript("OnMouseDown", button_OnMouseDown) button:SetScript("OnMouseUp", button_OnMouseUp) button.__Enable = button.Enable button.__Disable = button.Disable button.Enable = button_Enable button.Disable = button_Disable local highlight = button:CreateTexture(nil, "OVERLAY", "UIPanelButtonHighlightTexture") button:SetHighlightTexture(highlight) elseif noTextures == 2 then button:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up") button:SetPushedTexture("Interface\\Buttons\\UI-PlusButton-Down") button:SetHighlightTexture("Interface\\Buttons\\UI-PlusButton-Hilight") button:SetDisabledTexture("Interface\\Buttons\\UI-PlusButton-Disabled") elseif noTextures == 3 then button:SetNormalTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Up") button:SetPushedTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Down") button:SetHighlightTexture("Interface\\Buttons\\UI-PlusButton-Hilight") button:SetDisabledTexture("Interface\\Buttons\\UI-PlusButton-Disabled") end if font_object then local text = button:CreateFontString(nil, "ARTWORK") button:SetFontString(text) button.text = text text:SetPoint("LEFT", button, "LEFT", 7, 0) text:SetPoint("RIGHT", button, "RIGHT", -7, 0) text:SetJustifyH(justify_h) text:SetFontObject(font_object) text:SetText(label) end if tip_text and tip_text ~= "" then private.SetTooltipScripts(button, tip_text) end return button end end -- do