Quantcast
WoWInterface - View Single Post - Need help to integrate Addon-Options
View Single Post
02-24-15, 01:33 PM   #19
Duugu
Premium Member
 
Duugu's Avatar
AddOn Author - Click to view addons
Join Date: Nov 2006
Posts: 851
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:
  1. ...
  2.     for i = 1, #MillButtonExpansions do
  3.         -- Make a child panel
  4.         local Options_Child = CreateFrame("Frame", ADDON.."Child", Options)
  5.         Options_Child.name = MillButtonExpansions[i]
  6.         Options_Child.id = i
  7.         -- Specify childness of this panel (this puts it under the little red [+], instead of giving it a normal AddOn category)
  8.         Options_Child.parent = Options.name
  9.         -- Add the child to the Interface Options
  10.         InterfaceOptions_AddCategory(Options_Child)
  11.        
  12.         local Title = Options_Child:CreateFontString("$parentTitle", "ARTWORK", "GameFontNormalLarge")
  13.         Title:SetPoint("TOPLEFT", 16, -16)
  14.         Title:SetText(Options_Child.name)
  15.        
  16.         local SubOptionPanel = CreateFrame("Frame", nil, Options_Child)
  17.         SubOptionPanel:SetPoint("TOPLEFT", Title, "BOTTOMLEFT", 0, -24)
  18.         SubOptionPanel:SetPoint("BOTTOMRIGHT", Options_Child, -16, 16)
  19.         SubOptionPanel:SetBackdrop({
  20.             bgFile = "Interface\\ChatFrame\\ChatFrameBackground",
  21.             edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
  22.             tile = true, tileSize = 16, edgeSize = 16,
  23.             insets= { left = 3, right = 3, top = 5, bottom = 3 }
  24.         })
  25.         SubOptionPanel:SetBackdropColor(0.1, 0.1, 0.1, 0.5)
  26.         SubOptionPanel:SetBackdropBorderColor(0.4, 0.4, 0.4)
  27.  
  28.        
  29.        
  30.         Options_Child:SetScript("OnShow",
  31.             function()
  32.             PlaySound("igMainMenuOptionCheckBoxOn" or "igMainmenuOptionCheckBoxOff")
  33.             local expansion = Options_Child.name
  34.             print(expansion.." clicked")
  35.  
  36.             --wenn noch keine checkboxen vorhanden dann erstmal erstellen
  37.             if not self.herbCheckboxes then
  38.                 self.herbCheckboxes = {}
  39.                 --alle kräuter der jeweiligen untertabelle durchgehen und jeweils eine checkbox erstellen
  40.                 for each itemID, optionValue in pairs(MillButton_Herblist[expansion]) do
  41.                     --name des krauts für das label der checkbox holen
  42.                     local itemName = GetItemInfo(itemID)
  43.                     --ankerpunkt für die erste checkbox
  44.                     local tAnchorPointY = -10
  45.                     --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
  46.                     self.herbCheckboxes[itemID] = Addon:CreateOptionsCheckButton(self, itemName)
  47.                     --passend anordnen
  48.                     self.herbCheckboxes[itemID]:SetPoint("TOPLEFT", self.parent, "TOPLEFT", 10, tAnchorPointY)
  49.                     --ankerpunkt für die nächste checkbox
  50.                     tAnchorPointY = tAnchorPointY - self.itemID:GetHeight()
  51.                 end
  52.             end
  53.  
  54.            
  55.             --alle inhalte self.herbCheckboxes durchgehen und den aktuellen wert (checked/nicht checked bzw. true/false) für die checkbox entsprechend der db festlegen
  56.             for each itemID, checkboxObj in pairs(self.herbCheckboxes) do
  57.                 --wert der checkbox entsprechend der tabelle festlegen
  58.                 checkboxObj:SetChecked(MillButton_Herblist[expansion][itemID])
  59.                 --bei wertänderung in der db speichern
  60.                 checkboxObj:SetScript("OnClick", function()
  61.                     MillButton_Herblist[self:GetParent().name][self.itemID] = self:GetChecked()
  62.                 end)
  63.             end
  64.            
  65.         end)
  66.        
  67.     end
  68.    
  69.     Options:SetScript("OnShow", nil)
  70.        
  71. end)
  72.    
  73. SLASH_MILLBUTTON1 = "/millbutton"
  74. SLASH_MILLBUTTON2 = "/mbtn"
  75. SlashCmdList.MILLBUTTON = function() InterfaceOptionsFrame_OpenToCategory(Options) end
  76.  
  77. [[-- HELPERS--]]
  78. function Addon:CreateOptionsCheckButton(pParentFrame, pLabelText)
  79.     local tCheckBoxFrame = CreateFrame("CheckButton", nil, pParentFrame)
  80.     tCheckBoxFrame:SetWidth(25)
  81.     tCheckBoxFrame:SetHeight(25)
  82.     tCheckBoxFrame:SetNormalTexture("Interface\\Buttons\\UI-CheckBox-Up")
  83.     tCheckBoxFrame:SetPushedTexture("Interface\\Buttons\\UI-CheckBox-Down")
  84.     tCheckBoxFrame:SetHighlightTexture("Interface\\Buttons\\UI-CheckBox-Highlight")
  85.     tCheckBoxFrame:SetCheckedTexture("Interface\\Buttons\\UI-CheckBox-Check")
  86.     tCheckBoxFrame:SetDisabledCheckedTexture("Interface\\Buttons\\UI-CheckBox-Check-Disabled")
  87.     tCheckBoxFrame:SetFrameStrata("HIGH")
  88.     tCheckBoxFrame:Show()
  89.  
  90.     local tFS = Smoothe:CreateFontString(nil, "OVERLAY")        
  91.     tCheckBoxFrame.FS = tFS
  92.     tFS:SetFont("Fonts\\ARIALN.TTF", 12)
  93.     tFS:SetFontObject(GameFontNormalSmall)
  94.     tFS:SetText(pLabelText)
  95.     tFS:SetTextColor(1, 1, 1, 1)
  96.     tFS:SetJustifyH("LEFT")
  97.     tFS:SetJustifyV("TOP")
  98.     tFS:SetPoint("LEFT", tCheckBoxFrame, "RIGHT", 0, 0)
  99.     tFS:Show()
  100.  
  101.     return tCheckBoxFrame
  102. end
  103. ...

Last edited by Duugu : 02-24-15 at 01:39 PM.
  Reply With Quote