Ah. Ok.
Also erstmal wäre die Frage wie Du die ganzen Kräuter anzeigen lassen willst. Am einfachsten wäre natürlich eine Checkbox für jedes Kraut zu machen. Allerdings sind das ja teilweise eine ganze Menge. Könnte also unübersichtlich werden.
Was gäbs noch? Eine Scrollist, ein Dropdown, oder Buttons für jedes Kraut. Auf jeden Fall solltest Du vorher erstmal überlegen wie das Anzeigekonzept aussehen soll.
Am einfachsten wäre wie gesagt, einfach für jedes Kraut in jedem Panel eine Checkbox zu erstellen.
Das würde ich ungefähr so wie unten machen.
Aber Vorsicht: das hab ich trocken runtergeschrieben und nicht ausprobiert. Muss also nicht direkt so ohne Fehler funktionieren.
Nur um die Richtung aufzuzeigen.
Lua Code:
...
for i = 1, #MillButtonExpansions do
-- Make a child panel
local Options_Child = CreateFrame("Frame", ADDON.."Child", Options)
Options_Child.name = MillButtonExpansions[i]
Options_Child.id = i
-- Specify childness of this panel (this puts it under the little red [+], instead of giving it a normal AddOn category)
Options_Child.parent = Options.name
-- Add the child to the Interface Options
InterfaceOptions_AddCategory(Options_Child)
local Title = Options_Child:CreateFontString("$parentTitle", "ARTWORK", "GameFontNormalLarge")
Title:SetPoint("TOPLEFT", 16, -16)
Title:SetText(Options_Child.name)
local SubOptionPanel = CreateFrame("Frame", nil, Options_Child)
SubOptionPanel:SetPoint("TOPLEFT", Title, "BOTTOMLEFT", 0, -24)
SubOptionPanel:SetPoint("BOTTOMRIGHT", Options_Child, -16, 16)
SubOptionPanel:SetBackdrop({
bgFile = "Interface\\ChatFrame\\ChatFrameBackground",
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
tile = true, tileSize = 16, edgeSize = 16,
insets= { left = 3, right = 3, top = 5, bottom = 3 }
})
SubOptionPanel:SetBackdropColor(0.1, 0.1, 0.1, 0.5)
SubOptionPanel:SetBackdropBorderColor(0.4, 0.4, 0.4)
Options_Child:SetScript("OnShow",
function()
PlaySound("igMainMenuOptionCheckBoxOn" or "igMainmenuOptionCheckBoxOff")
local expansion = Options_Child.name
print(expansion.." clicked")
--wenn noch keine checkboxen vorhanden dann erstmal erstellen
if not self.herbCheckboxes then
self.herbCheckboxes = {}
--alle kräuter der jeweiligen untertabelle durchgehen und jeweils eine checkbox erstellen
for each itemID, optionValue in pairs(MillButton_Herblist[expansion]) do
--name des krauts für das label der checkbox holen
local itemName = GetItemInfo(itemID)
--ankerpunkt für die erste checkbox
local tAnchorPointY = -10
--checkbox erstellen (siehe helper function unten) und für späteren zugriff referenz auf checkbox-objekt mit itemid vom kraut als index in herbCheckboxes speichern
self.herbCheckboxes[itemID] = Addon:CreateOptionsCheckButton(self, itemName)
--passend anordnen
self.herbCheckboxes[itemID]:SetPoint("TOPLEFT", self.parent, "TOPLEFT", 10, tAnchorPointY)
--ankerpunkt für die nächste checkbox
tAnchorPointY = tAnchorPointY - self.itemID:GetHeight()
end
end
--alle inhalte self.herbCheckboxes durchgehen und den aktuellen wert (checked/nicht checked bzw. true/false) für die checkbox entsprechend der db festlegen
for each itemID, checkboxObj in pairs(self.herbCheckboxes) do
--wert der checkbox entsprechend der tabelle festlegen
checkboxObj:SetChecked(MillButton_Herblist[expansion][itemID])
--bei wertänderung in der db speichern
checkboxObj:SetScript("OnClick", function()
MillButton_Herblist[self:GetParent().name][self.itemID] = self:GetChecked()
end)
end
end)
end
Options:SetScript("OnShow", nil)
end)
SLASH_MILLBUTTON1 = "/millbutton"
SLASH_MILLBUTTON2 = "/mbtn"
SlashCmdList.MILLBUTTON = function() InterfaceOptionsFrame_OpenToCategory(Options) end
[[-- HELPERS--]]
function Addon:CreateOptionsCheckButton(pParentFrame, pLabelText)
local tCheckBoxFrame = CreateFrame("CheckButton", nil, pParentFrame)
tCheckBoxFrame:SetWidth(25)
tCheckBoxFrame:SetHeight(25)
tCheckBoxFrame:SetNormalTexture("Interface\\Buttons\\UI-CheckBox-Up")
tCheckBoxFrame:SetPushedTexture("Interface\\Buttons\\UI-CheckBox-Down")
tCheckBoxFrame:SetHighlightTexture("Interface\\Buttons\\UI-CheckBox-Highlight")
tCheckBoxFrame:SetCheckedTexture("Interface\\Buttons\\UI-CheckBox-Check")
tCheckBoxFrame:SetDisabledCheckedTexture("Interface\\Buttons\\UI-CheckBox-Check-Disabled")
tCheckBoxFrame:SetFrameStrata("HIGH")
tCheckBoxFrame:Show()
local tFS = Smoothe:CreateFontString(nil, "OVERLAY")
tCheckBoxFrame.FS = tFS
tFS:SetFont("Fonts\\ARIALN.TTF", 12)
tFS:SetFontObject(GameFontNormalSmall)
tFS:SetText(pLabelText)
tFS:SetTextColor(1, 1, 1, 1)
tFS:SetJustifyH("LEFT")
tFS:SetJustifyV("TOP")
tFS:SetPoint("LEFT", tCheckBoxFrame, "RIGHT", 0, 0)
tFS:Show()
return tCheckBoxFrame
end
...