diff --git a/WeightsWatcher.xml b/WeightsWatcher.xml
index ac5d44e..4cc118c 100644
--- a/WeightsWatcher.xml
+++ b/WeightsWatcher.xml
@@ -208,7 +208,7 @@
</Anchors>
<Scripts>
<OnShow>
- scrollBarUpdate(self, ww_config.leftPanel.scrollContainer, ww_weightFrameTable, 20, 0, 27)
+ scrollBarUpdate(self, ww_config.leftPanel.scrollContainer, 20, 0, 27)
</OnShow>
<OnVerticalScroll>
FauxScrollFrame_OnVerticalScroll(self, offset, 20, self:GetScript("OnShow"))
@@ -340,7 +340,7 @@
</Anchors>
<Scripts>
<OnShow>
- scrollBarUpdate(self, ww_config.rightPanel.scrollContainer, ww_statFrameTable, 20, -30, 25)
+ scrollBarUpdate(self, ww_config.rightPanel.scrollContainer, 20, -30, 25)
</OnShow>
<OnVerticalScroll>
FauxScrollFrame_OnVerticalScroll(self, offset, 20, self:GetScript("OnShow"))
@@ -520,7 +520,7 @@
local error = StaticPopup_Show("WW_WEIGHT_EXISTS", classNames[class], name)
else
setWeight(class, name, self:GetParent().statList)
- for _, classFrame in ipairs(ww_classFrameTable) do
+ for _, classFrame in ipairs(ww_config.leftPanel.scrollFrame.categories) do
if classFrame.class == class then
local children = {classFrame:GetChildren()}
configSelectWeight(children[classFrame:GetNumChildren()])
diff --git a/config.lua b/config.lua
index 4e58b53..41c82b1 100644
--- a/config.lua
+++ b/config.lua
@@ -2,12 +2,6 @@ if not WeightsWatcher then
WeightsWatcher = AceLibrary("AceAddon-2.0"):new("AceEvent-2.0", "AceHook-2.1")
end
-ww_weightButtonTable = {}
-ww_categoryFrameTable = {}
-ww_statFrameTable = {}
-ww_classFrameTable = {}
-ww_weightFrameTable = {}
-
StaticPopupDialogs["WW_CONFIRM_WEIGHT_DELETE"] = {
text = "Are you sure you want to delete the %s weight named \"%s\"?",
button1 = "Delete",
@@ -85,26 +79,26 @@ function validateNumber(newChar, newText)
return false
end
-function scrollBarUpdate(scrollFrame, scrolledFrame, buttonTable, buttonHeight, initialOffset, numShown)
+function scrollBarUpdate(scrollFrame, scrolledFrame, buttonHeight, initialOffset, numShown)
local i
local offset = FauxScrollFrame_GetOffset(scrollFrame)
offset = offset / 5
- if numShown > #(buttonTable) then
- numShown = #(buttonTable)
+ if numShown > #(scrollFrame.shown) then
+ numShown = #(scrollFrame.shown)
end
- if offset > #(buttonTable) - numShown then
- offset = #(buttonTable) - numShown
+ if offset > #(scrollFrame.shown) - numShown then
+ offset = #(scrollFrame.shown) - numShown
end
- FauxScrollFrame_Update(scrollFrame, #(buttonTable), numShown, buttonHeight * 5)
+ FauxScrollFrame_Update(scrollFrame, #(scrollFrame.shown), numShown, buttonHeight * 5)
scrolledFrame:SetPoint("TOPLEFT", 0, initialOffset + buttonHeight * offset)
for i = 1, offset do
- buttonTable[i]:Hide()
+ scrollFrame.shown[i]:Hide()
end
for i = offset + 1, offset + numShown do
- buttonTable[i]:Show()
+ scrollFrame.shown[i]:Show()
end
- for i = offset + numShown + 1, #(buttonTable) do
- buttonTable[i]:Hide()
+ for i = offset + numShown + 1, #(scrollFrame.shown) do
+ scrollFrame.shown[i]:Hide()
end
end
@@ -120,11 +114,10 @@ function configSelectWeight(weightFrame)
ww_config.rightPanel:Show()
end
--- TODO: fix this for collapsed categories!
function configResetWeight()
local value
- for _, frame in pairs(ww_statFrameTable) do
+ for _, frame in pairs(ww_config.rightPanel.scrollFrame.stats) do
if frame.statName then
value = ww_config.rightPanel.statList[frame.statName]
if not value then
@@ -142,7 +135,7 @@ end
function configSaveWeight()
local number
- for _, frame in pairs(ww_statFrameTable) do
+ for _, frame in pairs(ww_config.rightPanel.scrollFrame.stats) do
if frame.statName then
number = frame.statValue:GetNumber()
if number == 0 then
@@ -171,12 +164,12 @@ function deleteWeight()
end
end
if not weight.category.collapsed then
- for _, classFrame in ipairs(ww_classFrameTable) do
+ for _, classFrame in ipairs(ww_config.leftPanel.scrollFrame.categories) do
if classFrame.position > weight.category.position then
classFrame.position = classFrame.position - 1
end
end
- table.remove(ww_weightFrameTable, weight.category.position + weight.position)
+ table.remove(ww_config.leftPanel.scrollFrame.shown, weight.category.position + weight.position)
weight.category:SetHeight(20 * weight.category.length)
end
weight:Hide()
@@ -229,7 +222,7 @@ function setWeight(class, weight, statList)
local weightFrame, position
if not ww_vars.weightsList[class][weight] then
- for _, classFrame in ipairs(ww_classFrameTable) do
+ for _, classFrame in ipairs(ww_config.leftPanel.scrollFrame.categories) do
if classFrame.class == class then
position = classFrame.length
weightFrame = CreateFrame("Frame", weight, classFrame, "ww_weightFrame")
@@ -243,8 +236,8 @@ function setWeight(class, weight, statList)
weightFrame:Hide()
else
classFrame:SetHeight(20 * classFrame.length)
- table.insert(ww_weightFrameTable, classFrame.position + position, weightFrame)
- for _, class in ipairs(ww_classFrameTable) do
+ table.insert(ww_config.leftPanel.scrollFrame.shown, classFrame.position + position, weightFrame)
+ for _, class in ipairs(ww_config.leftPanel.scrollFrame.categories) do
if class.position > classFrame.position then
class.position = class.position + 1
end
@@ -273,10 +266,10 @@ function loadClassButtons()
end
end
- createScrollableTieredList(classes, ww_config.leftPanel.scrollFrame, ww_config.leftPanel.scrollContainer, ww_classFrameTable, ww_weightFrameTable, "ww_weightFrame", 20)
+ createScrollableTieredList(classes, ww_config.leftPanel.scrollFrame, ww_config.leftPanel.scrollContainer, "ww_weightFrame", 20)
local _, class = UnitClass("player")
- for _, classFrame in ipairs(ww_classFrameTable) do
+ for _, classFrame in ipairs(ww_config.leftPanel.scrollFrame.categories) do
classFrame.class = revClassLookup[classFrame.text:GetText()]
if classFrame.class ~= class then
classFrame.text:Click()
@@ -285,30 +278,35 @@ function loadClassButtons()
end
function loadStatButtons()
- createScrollableTieredList(trackedStats, ww_config.rightPanel.scrollFrame, ww_config.rightPanel.scrollContainer, ww_categoryFrameTable, ww_statFrameTable, "ww_statFrame", 20)
+ local stats = {}
+
+ createScrollableTieredList(trackedStats, ww_config.rightPanel.scrollFrame, ww_config.rightPanel.scrollContainer, "ww_statFrame", 20)
- for _, categoryFrame in ipairs(ww_categoryFrameTable) do
+ for _, categoryFrame in ipairs(ww_config.rightPanel.scrollFrame.categories) do
local children = {categoryFrame:GetChildren()}
for i, statFrame in ipairs(children) do
if statFrame.name then
+ table.insert(stats, statFrame)
statFrame.statName = string.lower(statFrame.name)
end
end
end
+
+ ww_config.rightPanel.scrollFrame.stats = stats
end
-- Creates a tiered list that can be scrolled
-- template is a table of key-value pairs with keys as the categories and values as a table of elements
-- scrollFrame is the scrollframe that controls scrolledFrame
--- NOTE: scrollFrame's OnShow must update the scrollbar
+-- NOTE: scrollFrame must have an OnShow handler that updates the scrollbar
-- scrolledFrame is the frame that will hold everything
--- categoryTable is the table that will hold the categories and their information
--- elementTable is the table that will hold the elements
-- elementType is the element template type
-- elementHeight is the height of each element
-function createScrollableTieredList(template, scrollFrame, scrolledFrame, categoryTable, elementTable, elementType, elementHeight)
+function createScrollableTieredList(template, scrollFrame, scrolledFrame, elementType, elementHeight)
local categoryFrame, elementFrame
+ scrollFrame.categories = {}
+ scrollFrame.shown = {}
for i, category in ipairs(template) do
--for each category print the header and then the print the list of stats
categoryFrame = CreateFrame("Frame", category, scrolledFrame, "ww_categoryFrame")
@@ -318,26 +316,26 @@ function createScrollableTieredList(template, scrollFrame, scrolledFrame, catego
if i == 1 then
categoryFrame:SetPoint("TOPLEFT")
else
- categoryFrame:SetPoint("TOPLEFT", categoryTable[i - 1], "BOTTOMLEFT")
+ categoryFrame:SetPoint("TOPLEFT", scrollFrame.categories[i - 1], "BOTTOMLEFT")
end
categoryFrame.text:SetScript("OnClick",
function(self)
- toggleCollapse(self:GetParent(), categoryTable, elementTable, elementHeight,
+ toggleCollapse(self:GetParent(), scrollFrame, elementHeight,
function()
scrollFrame:GetScript("OnShow")(scrollFrame)
end)
end)
- table.insert(categoryTable, categoryFrame)
- table.insert(elementTable, categoryFrame.text)
- categoryFrame.position = #(elementTable)
+ table.insert(scrollFrame.categories, categoryFrame)
+ table.insert(scrollFrame.shown, categoryFrame.text)
+ categoryFrame.position = #(scrollFrame.shown)
for j, element in ipairs(template[category]) do
- elementFrame = CreateFrame("Frame", element, categoryTable[i], elementType)
+ elementFrame = CreateFrame("Frame", element, scrollFrame.categories[i], elementType)
elementFrame.position = j
elementFrame.category = categoryFrame
elementFrame.text:SetText(element)
elementFrame.name = element
elementFrame:SetPoint("TOPLEFT", 0, -elementHeight * j)
- table.insert(elementTable, elementFrame)
+ table.insert(scrollFrame.shown, elementFrame)
categoryFrame.length = categoryFrame.length + 1
end
@@ -346,17 +344,17 @@ function createScrollableTieredList(template, scrollFrame, scrolledFrame, catego
end
end
-function toggleCollapse(categoryFrame, categoryTable, elementTable, elementHeight, scrollBarUpdateFunction)
+function toggleCollapse(categoryFrame, scrollFrame, elementHeight, scrollBarUpdateFunction)
if categoryFrame.length == 1 then
return
end
if categoryFrame.collapsed then
for i, stat in ipairs({categoryFrame:GetChildren()}) do
if stat.name then
- table.insert(elementTable, categoryFrame.position + i - 1, stat)
+ table.insert(scrollFrame.shown, categoryFrame.position + i - 1, stat)
end
end
- for _, category in ipairs(categoryTable) do
+ for _, category in ipairs(scrollFrame.categories) do
if category.position > categoryFrame.position then
category.position = category.position + categoryFrame.length - 1
end
@@ -367,10 +365,10 @@ function toggleCollapse(categoryFrame, categoryTable, elementTable, elementHeigh
for _, stat in ipairs({categoryFrame:GetChildren()}) do
if stat.name then
stat:Hide()
- table.remove(elementTable, categoryFrame.position + 1)
+ table.remove(scrollFrame.shown, categoryFrame.position + 1)
end
end
- for _, category in ipairs(categoryTable) do
+ for _, category in ipairs(scrollFrame.categories) do
if category.position > categoryFrame.position then
category.position = category.position - categoryFrame.length + 1
end