From af14e0810659c5779cbe0fa7dee375c8208adfea Mon Sep 17 00:00:00 2001 From: Tercio Jose Date: Thu, 21 Jan 2021 17:52:08 -0300 Subject: [PATCH] General fixes --- Libs/DF/fw.lua | 2 +- Libs/DF/panel.lua | 209 ++++++++++++++++++++++++++++++++++++++++++++ Libs/DF/spells.lua | 5 ++ boot.lua | 8 +- functions/coach.lua | 2 +- functions/pack.lua | 8 +- 6 files changed, 227 insertions(+), 7 deletions(-) diff --git a/Libs/DF/fw.lua b/Libs/DF/fw.lua index 7f332674f..f25816c8e 100644 --- a/Libs/DF/fw.lua +++ b/Libs/DF/fw.lua @@ -1,6 +1,6 @@ -local dversion = 230 +local dversion = 232 local major, minor = "DetailsFramework-1.0", dversion local DF, oldminor = LibStub:NewLibrary (major, minor) diff --git a/Libs/DF/panel.lua b/Libs/DF/panel.lua index 66691c862..6a23be189 100644 --- a/Libs/DF/panel.lua +++ b/Libs/DF/panel.lua @@ -10030,3 +10030,212 @@ function DF:SetPointOffsets(frame, xOffset, yOffset) end end +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +--> list box + +DF.ListboxFunctions = { + scrollRefresh = function(self, data, offset, totalLines) + for i = 1, totalLines do + local index = i + offset + local lineData = data[index] --what is shown in the textentries, array + if (lineData) then + local line = self:GetLine(i) + line.dataIndex = index + line.deleteButton:SetClickFunction(DF.ListboxFunctions.deleteEntry, data, index) + + local amountEntries = #lineData + for o = 1, amountEntries do + local textEntry = line.widgets[o] + textEntry.dataTable = lineData + textEntry.dataTableIndex = o + local text = lineData[o] + textEntry:SetText(text) + end + end + end + end, + + addEntry = function(self) + local frameCanvas = self:GetParent() + local data = frameCanvas.data + local newEntry = {} + for i = 1, frameCanvas.headerLength do + tinsert(newEntry, "") + end + tinsert(data, newEntry) + frameCanvas.scrollBox:Refresh() + end, + + deleteEntry = function(self, button, data, index) + tremove(data, index) + --get the line, get the scrollframe + self:GetParent():GetParent():Refresh() + end, + + createScrollLine = function(self, index) + local listBox = self:GetParent() + local line = CreateFrame("frame", self:GetName().. "line_" .. index, self, "BackdropTemplate") + + line:SetPoint("topleft", self, "topleft", 1, -((index-1)*(self.lineHeight+1)) - 1) + line:SetSize(self:GetWidth() - 28, self.lineHeight) -- -28 space for the scrollbar + + local options = listBox.options + line:SetBackdrop(options.line_backdrop) + line:SetBackdropColor(unpack(options.line_backdrop_color)) + + DF:Mixin(line, DF.HeaderFunctions) + + line.widgets = {} + + for i = 1, (listBox.headerLength+1) do --+1 to add the delete button + local headerColumn = listBox.headerTable[i] + + if (headerColumn.isDelete) then + local deleteButton = DF:CreateButton(line, DF.ListboxFunctions.deleteEntry, 20, self.lineHeight, "X", listBox.data, index, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate ("font", "ORANGE_FONT_TEMPLATE")) + line.deleteButton = deleteButton + line:AddFrameToHeaderAlignment(deleteButton) + + elseif (headerColumn.text) then + local template = DF.table.copy({}, DF:GetTemplate("dropdown", "OPTIONS_DROPDOWN_TEMPLATE")) + template.backdropcolor = {0.1, 0.1, 0.1, .7} + local textEntry = DF:CreateTextEntry(line, function()end, headerColumn.width, self.lineHeight, nil, nil, nil, template) + textEntry:SetHook("OnEditFocusGained", function() textEntry:HighlightText(0) end) + textEntry:SetHook("OnEditFocusLost", function() + textEntry:HighlightText(0, 0) + local text = textEntry.text + local dataTable = textEntry.dataTable + dataTable[textEntry.dataTableIndex] = text + end) + tinsert(line.widgets, textEntry) + line:AddFrameToHeaderAlignment(textEntry) + end + end + + line:AlignWithHeader(listBox.header, "left") + return line + end, +} + + +local listbox_options = { + width = 800, + height = 600, + auto_width = true, + line_height = 16, + line_backdrop = {bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}, + line_backdrop_color = {.3, .3, .3, .8}, +} + +--@parent: parent frame +--@name: name of the frame to be created +--@data: table with current data to fill the column, this table are also used for values changed or added +--@options: table with options to overwrite the default setting from 'listbox_options' +--@header: a table to create a header widget +--@header_options: a table with options to overwrite the default header options +function DF:CreateListBox(parent, name, data, options, headerTable, headerOptions) + + options = options or {} + name = name or "ListboxUnamed_" .. (math.random(100000, 1000000)) + + --canvas + local frameCanvas = CreateFrame("scrollframe", name, parent, "BackdropTemplate") + DF:Mixin(frameCanvas, DF.ListboxFunctions) + DF:Mixin(frameCanvas, DF.OptionsFunctions) + DF:Mixin(frameCanvas, DF.LayoutFrame) + frameCanvas.headerTable = headerTable + + if (not data or type(data) ~= "table") then + error("CreateListBox() parameter 3 'data' must be a table.") + end + + frameCanvas.data = data + frameCanvas.lines = {} + DF:ApplyStandardBackdrop(frameCanvas) + frameCanvas:BuildOptionsTable(listbox_options, options) + + --> header + --check for default values in the header + headerTable = headerTable or { + {text = "Spell Name", width = 70}, + {text = "Spell Id", width = 70}, + } + headerOptions = headerOptions or { + padding = 2, + } + + --each header is an entry in the data, if the header has 4 indexes the data has sub tables with 4 indexes as well + frameCanvas.headerLength = #headerTable + + --add the detele line column into the header frame + tinsert(headerTable, {text = "Delete", width = 50, isDelete = true}) --isDelete signals the createScrollLine() to make the delete button for the line + + local header = DF:CreateHeader(frameCanvas, headerTable, headerOptions) + --set the header point + header:SetPoint("topleft", frameCanvas, "topleft", 5, -5) + frameCanvas.header = header + + --> auto size + if (frameCanvas.options.auto_width) then + local width = 10 --padding 5 on each side + width = width + 20 --scrollbar reserved space + local headerPadding = headerOptions.padding or 0 + + for _, header in pairs(headerTable) do + if (header.width) then + width = width + header.width + headerPadding + end + end + + frameCanvas.options.width = width + frameCanvas:SetWidth(width) + end + + local width = frameCanvas.options.width + local height = frameCanvas.options.height + + frameCanvas:SetSize(frameCanvas.options.width, height) + + --> scroll frame + local lineHeight = frameCanvas.options.line_height + local lineAmount = floor(height / lineHeight) + + -- -12 is padding: 5 on top, 7 bottom, 2 header scrollbar blank space | -24 to leave space to the add button + local scrollBox = DF:CreateScrollBox(frameCanvas, "$parentScrollbox", frameCanvas.scrollRefresh, data, width-4, height - header:GetHeight() - 12 - 24, lineAmount, lineHeight) + scrollBox:SetPoint("topleft", header, "bottomleft", 0, -2) + scrollBox:SetPoint("topright", header, "bottomright", 0, -2) -- -20 for the scrollbar + DF:ReskinSlider(scrollBox) + scrollBox.lineHeight = lineHeight + scrollBox.lineAmount = lineAmount + frameCanvas.scrollBox = scrollBox + + for i = 1, lineAmount do + scrollBox:CreateLine(frameCanvas.createScrollLine) + end + + scrollBox:Refresh() + + --> add line button + local addLineButton = DF:CreateButton(frameCanvas, DF.ListboxFunctions.addEntry, 80, 20, "Add", nil, nil, nil, nil, nil, nil, DF:GetTemplate("button", "OPTIONS_BUTTON_TEMPLATE"), DF:GetTemplate("font", "ORANGE_FONT_TEMPLATE")) + addLineButton:SetPoint("topleft", scrollBox, "bottomleft", 0, -4) + + return frameCanvas +end + +--[=[ -- test case + + local pframe = ListBoxTest or CreateFrame("frame", "ListBoxTest", UIParent) + pframe:SetSize(900, 700) + pframe:SetPoint("left") + + local data = {{254154, "spell name 1", 45}, {299154, "spell name 2", 05}, {354154, "spell name 3", 99}} + local headerTable = { + {text = "spell id", width = 120}, + {text = "spell name", width = 180}, + {text = "number", width = 90}, + } + + local listbox = DetailsFramework:CreateListBox(pframe, "$parentlistbox", data, nil, headerTable, nil) + listbox:SetPoint("topleft", pframe, "topleft", 10, -10) + +--]=] + diff --git a/Libs/DF/spells.lua b/Libs/DF/spells.lua index 921ba1e70..66f358c96 100644 --- a/Libs/DF/spells.lua +++ b/Libs/DF/spells.lua @@ -948,6 +948,11 @@ DF.FoodIDs = { [308419] = 1, -- (periodicaly damage) Smothered Shank [327715] = 1, -- (speed) Fried Bonefish + --feasts + [327706] = 2, --strength +20 + [327707] = 2, --stamina +20 + [327708] = 2, --intellect +20 + [327709] = 2, --agility +20 } DF.PotionIDs = { diff --git a/boot.lua b/boot.lua index be9a2da22..6f5fdf7b6 100644 --- a/boot.lua +++ b/boot.lua @@ -4,8 +4,8 @@ _ = nil _detalhes = LibStub("AceAddon-3.0"):NewAddon("_detalhes", "AceTimer-3.0", "AceComm-3.0", "AceSerializer-3.0", "NickTag-1.0") - _detalhes.build_counter = 8154 - _detalhes.alpha_build_counter = 8154 --if this is higher than the regular counter, use it instead + _detalhes.build_counter = 8156 + _detalhes.alpha_build_counter = 8156 --if this is higher than the regular counter, use it instead _detalhes.game_version = "v9.0.2" _detalhes.userversion = "v9.0.2." .. _detalhes.build_counter _detalhes.realversion = 144 --core version, this is used to check API version for scripts and plugins (see alias below) @@ -28,6 +28,10 @@ do local Loc = _G.LibStub("AceLocale-3.0"):GetLocale( "Details" ) local news = { + {"v9.0.2.8156.144", "January 21th, 2021"}, + "Added more foods into the Ready Check plugin.", + "Fixed some issues with the coach fearure.", + {"v9.0.2.8154.144", "January 14th, 2021"}, "Added total damage bars into the player list in the Breakdown window.", "Added 'Square' or 'Roll' mode to Details! Streamer plugin, to change the statusbar mode to Squares, visit the options panel for the plugin.", diff --git a/functions/coach.lua b/functions/coach.lua index a56fffb5d..e18b76ffe 100644 --- a/functions/coach.lua +++ b/functions/coach.lua @@ -539,7 +539,7 @@ function Details.Coach.WelcomePanel() hasAssistantsTexture:SetTexCoord(0, 0.5, 0, 0.5) end - local isInCorrectGroup = false + local isInCorrectGroup = true --debug for i = 1, numRaidMembers do local name, rank, subgroup, level, class, fileName, zone, online, isDead, role, isML = GetRaidRosterInfo(i) if (name == playerName) then diff --git a/functions/pack.lua b/functions/pack.lua index df47c23e4..4f4c83c02 100644 --- a/functions/pack.lua +++ b/functions/pack.lua @@ -461,9 +461,11 @@ function Details.packFunctions.PackDamage(combatObject) local allPlayerNames = {} for i = 1, 20 do local name, _, subgroup = GetRaidRosterInfo(i) - name = Ambiguate(name, "none") - if (name and subgroup <= 4) then - tinsert(allPlayerNames, name) + if (name) then --maybe the group has less than 20 players + name = Ambiguate(name, "none") + if (name and subgroup <= 4) then + tinsert(allPlayerNames, name) + end end end table.sort(allPlayerNames, function(t1, t2) return t1 < t2 end)