View Single Post
02-25-15, 02:19 PM   #28
Duugu
Premium Member
 
Duugu's Avatar
AddOn Author - Click to view addons
Join Date: Nov 2006
Posts: 851
Ah, nach genauerem Durchgehen fällt mir auf, dass es gar nicht an self:GetParent().name liegt, sondern an self.itemID.

Rausfinden kannst Du das, wenn Du im OnClick-Handler ein paar test-prints einfügst:
Lua Code:
  1. checkboxObj:SetScript("OnClick", function(self)
  2.     print(self:GetParent().name)
  3.     print(self.itemID)
  4.     MillButton_Herblist[self:GetParent().name][self.itemID] = self:GetChecked()
  5. end)
Dann wird nämlich beim ersten wie geplant der Name der Erweiterung ausgegeben und beim zweiten Nil.
Das liegt daran, dass "self" ja eine Referenz auf das Checkbox-Objekt ist, und wir nirgendwo das Attribut itemID dafür festlegen.
Das lässt sich so lösen (Zeile 9):
Lua Code:
  1. --alle kräuter der jeweiligen untertabelle durchgehen und jeweils eine checkbox erstellen
  2.                 --ankerpunkt für die erste checkbox
  3.                 local tAnchorPointY = -10
  4.                 for itemID, optionValue in pairs(MillButton_Herblist[expansion]) do
  5.                     --name des krauts für das label der checkbox holen
  6.                     local itemName = GetItemInfo(itemID)
  7.                     --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
  8.                     self.herbCheckboxes[itemID] = Addon:CreateOptionsCheckButton(self, itemName)
  9.                     self.herbCheckboxes[itemID].itemID = itemID
  10.                     --passend anordnen
  11.                     self.herbCheckboxes[itemID]:SetPoint("TOPLEFT", self.parent, "TOPLEFT", 10, tAnchorPointY)
  12.                     --ankerpunkt für die nächste checkbox
  13.                     tAnchorPointY = tAnchorPointY - self.herbCheckboxes[itemID]:GetHeight()
  14.                 end
  15.  
  16.             --alle inhalte self.herbCheckboxes durchgehen und den aktuellen wert (checked/nicht checked bzw. true/false) für die checkbox entsprechend der db festlegen
  17.             for itemID, checkboxObj in pairs(self.herbCheckboxes) do
  18.                 --wert der checkbox entsprechend der tabelle festlegen
  19.                 checkboxObj:SetChecked(MillButton_Herblist[expansion][itemID])
  20.                 --bei wertänderung in der db speichern
  21.                 checkboxObj:SetScript("OnClick", function(self)
  22.                     MillButton_Herblist[self:GetParent().name][self.itemID] = self:GetChecked()
  23.                 end)
  24.             end

Wie die Anzahl kann mir da eigentlich egal sein?!
Wie soll ich denn sonst diesen Umbruch machen?
Na, Du zählst einfach mit und rechnest alle 19 mal etwas auf den x-Offset drauf.

Lua Code:
  1. local tAnchorPointY = -10
  2.                local tAnchorPointX  = 0
  3.                local tAnchorPointCount  = 0
  4.                 for itemID, optionValue in pairs(MillButton_Herblist[expansion]) do
  5.                     --name des krauts für das label der checkbox holen
  6.                     local itemName = GetItemInfo(itemID)
  7.                     --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
  8.                     self.herbCheckboxes[itemID] = Addon:CreateOptionsCheckButton(self, itemName)
  9.                     self.herbCheckboxes[itemID].itemID = itemID
  10.                     --passend anordnen
  11.                     self.herbCheckboxes[itemID]:SetPoint("TOPLEFT", self.parent, "TOPLEFT", tAnchorPointX, tAnchorPointY)
  12.                     --ankerpunkt für die nächste checkbox
  13.                     tAnchorPointY = tAnchorPointY - self.herbCheckboxes[itemID]:GetHeight()
  14.                     tAnchorPointCount = tAnchorPointCount + 1
  15.                     if tAnchorPointCount > 19 then
  16.                                         tAnchorPointX = tAnchorPointX + 50
  17.                                         tAnchorPointY = -10
  18.                                         tAnchorPointCount = 0
  19.                     end
  20.                 end

Das kann man natürlich anders deutlich eleganter lösen, aber ich dachte mir so ists vielleicht erstmal an ersichtlichsten.

[e]
Wenn wir noch weiter darüber diskutieren wäre es gut, wenn Du irgendwo Deinen aktuellen Code einmal komplett bereitstellst. Sonst wird der aktuelle Stand langsam schwer nachvollziehbar.
[e2]
Bei erneutem Lesen bin ich mir unsicher, ob das ganze überhaupt für Dich nachvollziehbar ist oder Du nur das was ich geschrieben habe als Black-Box nutzt. Also z. B. was self.GetParent().name macht und sowas. Wenn Dir also was unklar ist oder Du Fragen hast, dann frag. Es macht langfristig ja nur wenig Sinn wenn Du überhaupt nicht nachvollziehen kannst was einzelne Teile machen und sie nur einfach so verwendest.

Last edited by Duugu : 02-25-15 at 02:23 PM.
  Reply With Quote