Thread Tools Display Modes
01-12-15, 03:15 PM   #1
flow0284
A Cyclonian
Join Date: Jan 2015
Posts: 40
Need help to integrate Addon-Options

Hi all,

I'm not really good in addon programming and I need some help from you guys.
I maintain a very little milling addon called MillButton. Some users send me Mails with the idea to add some addon options to select the herbs (grouped by wow expansion) that the users want to mill when they use the addon.

Phanx already tried to helo me on a WoWAce, but I don't understand his example code.

If there was anyone who wants to help me, it would be very nice if he speaks german.

In attached files you can see my Addon.
Attached Files
File Type: zip MillButton.zip (12.6 KB, 206 views)
  Reply With Quote
01-12-15, 03:54 PM   #2
Phanx
Cat.
 
Phanx's Avatar
AddOn Author - Click to view addons
Join Date: Mar 2006
Posts: 5,617
For reference, here is what I posted on WowAce:

Originally Posted by Phanx
You can see an example of a fully native (using Blizz templates only, no libraries) config panel with tabs here:
https://github.com/Phanx/CleanCompar...ptions.lua#L30
It's pretty lightweight, and wouldn't be too hard to adapt to your idea.

Another (somewhat bloated) option would be to use the AceConfig libraries:
1. Define an options table.
2. Register the options table with AceConfig-Registry.
3. Tell AceConfig-Dialog to make a config panel for your options table in the Interface Options window.
__________________
Retired author of too many addons.
Message me if you're interested in taking over one of my addons.
Don’t message me about addon bugs or programming questions.
  Reply With Quote
01-12-15, 11:52 PM   #3
10leej
A Molten Giant
 
10leej's Avatar
AddOn Author - Click to view addons
Join Date: Feb 2011
Posts: 583
Originally Posted by Phanx View Post
For reference, here is what I posted on WowAce:
Oh come on Phanx no need to chase the poor soul down
__________________
Tweets YouTube Website
  Reply With Quote
01-13-15, 02:38 AM   #4
Duugu
Premium Member
 
Duugu's Avatar
AddOn Author - Click to view addons
Join Date: Nov 2006
Posts: 851
Das funktioniert grundsätzlich eigentlich ganz einfach. Am Beispiel von Phanx-Code grob erklärt:

Zuerst erstellst Du einfach ein Frame das später in den Blizzard Interfaceoptionen eingeblendet wird wenn jemand die Optionen für Dein Addon aufruft.

Lua Code:
  1. local Options = CreateFrame("Frame", ADDON.."Options", InterfaceOptionsFramePanelContainer)

Und dann fügst Du dieses Frame den Interfaceoptionen hinzu.

Lua Code:
  1. Options.name = GetAddOnMetadata(ADDON, "Title") or ADDON
  2. InterfaceOptions_AddCategory(Options)
  3. Addon.OptionsPanel = Options
Jetzt musst Du Dein Options-Frame nur noch mit den gewünschten Einstellungselementen füllen und diese entsprechend der aktuellen Einstellungen konfigurieren.

Lua Code:
  1. Options:SetScript("OnShow", function()
  2. --hier werden verschiedene Elemente erstellt und konfiguriert. zum Beispiel ein Titel:
  3.     local Title = Options:CreateFontString("$parentTitle", "ARTWORK", "GameFontNormalLarge")
  4.     Title:SetPoint("TOPLEFT", 16, -16)
  5.     Title:SetText(Options.name)
  6. --danach werden dann Unterkategorien erstellt. Aber ich würde sagen Du versuchst erstmal Optionen ohne Unterkategorien/Registerkarten zu bauen bevor Du Dich damit beschäftigst. :)
  7.  
  8. -- und dann kommen noch die Funktionen für die Standardbuttons die es bei den Optionen für jede Addon gibt (Ok, Abbrechen, Reset)
  9.     function Options.okay()
  10.     --was auch immer bei denen Optionen passieren soll wenn jemand auf ok klickt
  11.     end
  12.     function Options.cancel()
  13.     --was auch immer bei denen Optionen passieren soll wenn jemand auf abbrechen klickt
  14.     end
  15.  
  16. --und mit dieser Funktion werden die einzelnen optionselemente bei der anzeige aktualisiert
  17.     function Options.refresh()
  18.     --deine optionselemente entsprechend der aktuellen Einstellungen konfigurieren
  19.     end
  20. end)
Und zum Schluss wird dann noch ein Slash-Befehl registriert der das Optionsfenster öffnet:

Lua Code:
  1. SLASH_CLEANCOMPARE1 = "/ccompare"
  2. SlashCmdList.CLEANCOMPARE = function() InterfaceOptionsFrame_OpenToCategory(Options) end

Ich hoffe das erhellt die Sache ein wenig. Ansonsten frag einfach noch mal nach.
  Reply With Quote
01-13-15, 12:33 PM   #5
flow0284
A Cyclonian
Join Date: Jan 2015
Posts: 40
Ok das hat schonmal ein klein wenig Licht in die große Dunkelkammer gebracht.

Ich glaube ich habe aber doch vorher noch ein gaaanz anderes Problem.
Bevor ich mir gedanken mache wie ich die Optionen grafisch darstelle muss ich erst einmal hinbekommen meine künftigen Optionen zu speichern, oder?

Ich habe mir gedacht dazu eine Tabelle "MillButton_Defaults", in der die Standardeinstellungen vorgegeben sind, anzulegen. In dieser Tabelle möchte ich je WoW Erweiterung eine Untertabelle haben in der dann per ItemID nur über true und false angegeben wird, ob man das Kraut zu dieser ItemID immer mahlen will oder nicht.

Hier mal die Tabelle wie ich sie mir Momanten vorstelle (Damit es übersichtlich bleibt, nicht alle Kräuter):

Lua Code:
  1. MillButton_Defaults = {
  2.     ["Options"] = {
  3.         ["version"] = "6.0.3 - 2.0",
  4.         ["extended"] = true --für die Optionale Chatausgabe der übersrpungenen Kräuter (entfällt evtl.)
  5.     },
  6.     ["Classic"] = {
  7.         [765] = true, --Silberblatt
  8.         [785]   = true --Maguskönigskraut
  9.     },
  10.     ["The Burning Crusade"] = {
  11.         [22785] = true, --Teufelsgras
  12.         [22786] = true --Traumwinde
  13.     },
  14.     ["Wrath of the Lich King"] = {
  15.         [36901] = true, --Goldklee
  16.         [39970] = true --Feuerblatt
  17.     },
  18.     ["Cataclysm"] = {
  19.         [52983] = true, --Aschenblüte
  20.         [52984] = true --Sturmwinde
  21.     },
  22.     ["Mists of Pandaria"] = {
  23.         [72234] = true, --Teepflanze
  24.         [89639] = true --Entweihtes Kraut
  25.     },
  26.     ["Warlords of Draenor"] = {
  27.         [109124] = true, --Frostwurz
  28.         [109125] = true --Feuerwurz
  29.     },
  30. };

Die den jeweiligen Namen der Erweiterungen wollte ich für die Titel der Tabs hernehmen.

Bitte habt nachsicht mit mir Frischling

Last edited by flow0284 : 01-13-15 at 02:12 PM.
  Reply With Quote
01-13-15, 05:44 PM   #6
Duugu
Premium Member
 
Duugu's Avatar
AddOn Author - Click to view addons
Join Date: Nov 2006
Posts: 851
Originally Posted by flow0284 View Post
Ok das hat schonmal ein klein wenig Licht in die große Dunkelkammer gebracht.

Ich glaube ich habe aber doch vorher noch ein gaaanz anderes Problem.
Bevor ich mir gedanken mache wie ich die Optionen grafisch darstelle muss ich erst einmal hinbekommen meine künftigen Optionen zu speichern, oder?

Ich habe mir gedacht dazu eine Tabelle "MillButton_Defaults", in der die Standardeinstellungen vorgegeben sind, anzulegen. In dieser Tabelle möchte ich je WoW Erweiterung eine Untertabelle haben in der dann per ItemID nur über true und false angegeben wird, ob man das Kraut zu dieser ItemID immer mahlen will oder nicht.
Oh. Ich dachte dieser Punkt ist bereits erledigt. Oke. Dann wird das wohl ein längerer Weg.

Die Tabelle für die Standardeinstellungen ist natürlich ok. Aber ich denke Du solltest Dir erstmal ein paar grundsätzliche Fragen dazu stellen wie Du die Einstellungen speicherst und das dann so weit implementieren das es funktioniert. Willst Du verschiedene Profile? Mit Einstellungen pro Char oder für alle gleich?

Da ich nicht weiss wie weit Du mit dem Thema bist hilft Dir vielleicht diese Beschreibung: http://wow.gamepedia.com/Saving_vari..._game_sessions
Ist leider wieder englisch. Erklärt aber wie das funktioniert.
  Reply With Quote
01-13-15, 05:55 PM   #7
flow0284
A Cyclonian
Join Date: Jan 2015
Posts: 40
Die Einstellungen sollten pro Char gespeichert werden. Damit habe ich auch vorhin schon mal recht Erfolgreich experimentiert.

Ich werfe aber später trotzdem einen Blick auf deinen Link.
  Reply With Quote
01-13-15, 09:31 PM   #8
Phanx
Cat.
 
Phanx's Avatar
AddOn Author - Click to view addons
Join Date: Mar 2006
Posts: 5,617
Lua Code:
  1. -- und dann kommen noch die Funktionen für die Standardbuttons die es bei den Optionen für jede Addon gibt (Ok, Abbrechen, Reset)
  2.     function Options.okay()
  3.     --was auch immer bei denen Optionen passieren soll wenn jemand auf ok klickt
  4.     end
  5.     function Options.cancel()
  6.     --was auch immer bei denen Optionen passieren soll wenn jemand auf abbrechen klickt
  7.     end

Normalerweise soll man diese Funktionen nicht definieren. Die Einstellungenfenster wird oft bei der ESC-Taste geschlossen, und dies ruft die "cancel"-Funktion anstelle der "okay"-Funktion, obwohl der Benutzer wahrscheinlich nicht beabsichtigt, um seine Änderungen abzubrechen.
__________________
Retired author of too many addons.
Message me if you're interested in taking over one of my addons.
Don’t message me about addon bugs or programming questions.
  Reply With Quote
01-14-15, 11:40 AM   #9
flow0284
A Cyclonian
Join Date: Jan 2015
Posts: 40
Originally Posted by Duugu View Post
Da ich nicht weiss wie weit Du mit dem Thema bist hilft Dir vielleicht diese Beschreibung: http://wow.gamepedia.com/Saving_vari..._game_sessions
Ist leider wieder englisch. Erklärt aber wie das funktioniert.
Mit Hilfe dieser Seite habe ich es gestern immerhin schon hinbekommen aus den Standardeistellungen aus der internen Tabelle die "SavedVariables" erstellen zu lassen.

In meiner .toc habe ich
Code:
## SavedVariablesPerCharacter: MillButtonDB
hinzugefügt. Ich denke es ist Benutzerfreundlicher wenn man pro Char einstellen kann was man mahlen will (vorausgesetzt man hat mehrere Chars mit Inschriftenkunde).

In meiner MillButton.lua habe ich das hier hinzugefügt:
Lua Code:
  1. local frame = CreateFrame("Frame")
  2. frame:RegisterEvent("ADDON_LOADED")
  3. frame:RegisterEvent("PLAYER_LOGOUT")
  4.  
  5. frame:SetScript("OnEvent", function(self, event, arg1)
  6.     if event == "ADDON_LOADED" and arg1 == "MillButton" then
  7.         if MillButtonDB == nil then
  8.             MillButtonDB = MillButton_Defaults
  9.             --DEFAULT_CHAT_FRAME:AddMessage("|cFF00FF00MillButton: |r Default settings loaded")
  10.         else
  11.             --DEFAULT_CHAT_FRAME:AddMessage("|cFF00FF00MillButton: |r Settings loaded")
  12.  
  13.         end
  14.     end
  15. end)

Für den (sehr wahrscheinlichen) Fall das die Defaultsettings mal wegen einer neuen Erweiterung oder ähnlichem erweitert oder geändert werden, so muss ja dann auch die "Datenbank" MillButtonDB erweitert werden. Hier sollen aber die Benutzereinstellungen nicht geändert werden, sofern das möglich ist.


Auf der Arbeit kam mir noch die Idee das Addon irgendwie in Abhängigkeit des vorhandenen Berufes nur zu aktivieren. Hier habe ich aber auch noch gar keine Ahnung wie das dann funktionieren könnte.

Lieber eines nach dem anderen.
  Reply With Quote
01-16-15, 06:16 PM   #10
flow0284
A Cyclonian
Join Date: Jan 2015
Posts: 40
Mal ein Update meine Hilfegesuches:

Meine Variablen werden mittlerweile pro Char gespeichert.
Im Blizzard OptionsFrame habe ich es geschafft mein Addon anzeigen zu lassen, das Umschalten zwischen "Extended" und "Normal" funktioniert und wird auch gespeichert.

Unterhalb des Optioneneintrags meines Addons habe ich es auch geschafft pro WoW Erweiterung eine Sub-Kategorie anzulegen.

Leider bekomme ich es nicht hin, jetzt noch diese Unterkategorien mit meinen restlichen Daten zu füllen.

Aufbau der Tabelle mit den Default_Options:
http://pastebin.com/kkJAzPRd

Hier der Aufbau meines Optionframes:
http://pastebin.com/uQm1tHT9
  Reply With Quote
01-24-15, 10:33 AM   #11
flow0284
A Cyclonian
Join Date: Jan 2015
Posts: 40
Ich bekomms einfach nicht hin. Ich glaub ich lass es sein und lege zumindest diese Idee auf Eis.

Trotzdem Danke Euch beiden für die Hilfestellungen.
  Reply With Quote
02-23-15, 11:46 AM   #12
flow0284
A Cyclonian
Join Date: Jan 2015
Posts: 40
Ok ich versuche es nochmal. Leider komme ich partou nicht weiter. Ich bekomme es einfach nicht hin, den Inhalt meiner Datenbank in die Optionspanels zu packen.

Ich hoffe mir kann da echt einer weiterhelfen.
Attached Files
File Type: zip MillButton.zip (13.4 KB, 187 views)
  Reply With Quote
02-23-15, 12:47 PM   #13
Duugu
Premium Member
 
Duugu's Avatar
AddOn Author - Click to view addons
Join Date: Nov 2006
Posts: 851
Originally Posted by flow0284 View Post
Ich bekomme es einfach nicht hin, den Inhalt meiner Datenbank in die Optionspanels zu packen.
Heyho

Das ist leider eine echt magere Beschreibung des Problems.
Du musst in den Panels doch nur passende Widgets zur Anzeige der Daten erstellen und dann bei OnShow über diese die jeweils passenden Daten anzeigen lassen.
Wie hast Du das bisher probiert und was genau ist dabei schiefgelaufen oder unklar?
  Reply With Quote
02-23-15, 05:05 PM   #14
flow0284
A Cyclonian
Join Date: Jan 2015
Posts: 40
In Zeile 78 versuchte ich jetzt die letzten Tage die Kräuter anzeigen zu lassen. Entweder hab ich meine Tabelle nicht richtig aufgebaut, versuche es am falschen Ort oder keine Ahnung. Den Aufbau der Tabelle hatte ich vor einigen Wochen bereits kurz dargestellt.


Lua Code:
  1. local Options = CreateFrame("Frame", ADDON.."Options", InterfaceOptionsFramePanelContainer)
  2. Options.name = GetAddOnMetadata(ADDON, "Title") or ADDON
  3. InterfaceOptions_AddCategory(Options)
  4. Addon.OptionsPanel = Options
  5.  
  6. Options:SetScript("OnShow", function()
  7.     local Title = Options:CreateFontString("$parentTitle", "ARTWORK", "GameFontNormalLarge")
  8.     Title:SetPoint("TOPLEFT", 16, -16)
  9.     Title:SetText(Options.name)
  10.    
  11.     local Notes = Options:CreateFontString("$parentSubText", "ARTWORK", "GameFontHighlightSmall")
  12.     Notes:SetPoint("TOPLEFT", Title, "BOTTOMLEFT", 0, -8)
  13.     Notes:SetPoint("RIGHT", -32, 0)
  14.     Notes:SetHeight(8)
  15.     Notes:SetJustifyH("LEFT")
  16.     Notes:SetJustifyV("TOP")
  17.     Notes:SetText("Version: "..GetAddOnMetadata(ADDON, "Version"))
  18.        
  19.     local OptionPanel = CreateFrame("Frame", nil, Options)
  20.     OptionPanel:SetPoint("TOPLEFT", Notes, "BOTTOMLEFT", 0, -24)
  21.     OptionPanel:SetPoint("BOTTOMRIGHT", Options, -16, 16)
  22.     OptionPanel:SetBackdrop({
  23.         bgFile = "Interface\\ChatFrame\\ChatFrameBackground",
  24.         edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
  25.         tile = true, tileSize = 16, edgeSize = 16,
  26.         insets= { left = 3, right = 3, top = 5, bottom = 3 }
  27.     })
  28.     OptionPanel:SetBackdropColor(0.1, 0.1, 0.1, 0.5)
  29.     OptionPanel:SetBackdropBorderColor(0.4, 0.4, 0.4)
  30.    
  31.     local myCheckButton = CreateFrame("CheckButton", "myCheckButton_GlobalName", OptionPanel, "ChatConfigCheckButtonTemplate")
  32.     myCheckButton:SetPoint("TOPLEFT", 16, -16)
  33.     myCheckButton_GlobalNameText:SetText("MillButton Extended")
  34.     myCheckButton.tooltip = "This is where you place MouseOver Text."
  35.     myCheckButton:SetScript("OnClick",
  36.     function()
  37.         PlaySound("igMainMenuOptionCheckBoxOn" or "igMainmenuOptionCheckBoxOff")
  38.         local isChecked = myCheckButton:GetChecked()
  39.         if isChecked == true then
  40.             MillButtonSettings.extended = true
  41.             print(MillButtonSettings.extended)
  42.         else
  43.             MillButtonSettings.extended = false
  44.             print(MillButtonSettings.extended)
  45.         end        
  46.     end)
  47.     myCheckButton:SetChecked(MillButtonSettings.extended)
  48.    
  49.     for i = 1, #MillButtonExpansions do
  50.         -- Make a child panel
  51.         local Options_Child = CreateFrame("Frame", ADDON.."Child", Options)
  52.         Options_Child.name = MillButtonExpansions[i]
  53.         Options_Child.id = i
  54.         -- Specify childness of this panel (this puts it under the little red [+], instead of giving it a normal AddOn category)
  55.         Options_Child.parent = Options.name
  56.         -- Add the child to the Interface Options
  57.         InterfaceOptions_AddCategory(Options_Child)
  58.        
  59.         local Title = Options_Child:CreateFontString("$parentTitle", "ARTWORK", "GameFontNormalLarge")
  60.         Title:SetPoint("TOPLEFT", 16, -16)
  61.         Title:SetText(Options_Child.name)
  62.        
  63.         local SubOptionPanel = CreateFrame("Frame", nil, Options_Child)
  64.         SubOptionPanel:SetPoint("TOPLEFT", Title, "BOTTOMLEFT", 0, -24)
  65.         SubOptionPanel:SetPoint("BOTTOMRIGHT", Options_Child, -16, 16)
  66.         SubOptionPanel:SetBackdrop({
  67.             bgFile = "Interface\\ChatFrame\\ChatFrameBackground",
  68.             edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
  69.             tile = true, tileSize = 16, edgeSize = 16,
  70.             insets= { left = 3, right = 3, top = 5, bottom = 3 }
  71.         })
  72.         SubOptionPanel:SetBackdropColor(0.1, 0.1, 0.1, 0.5)
  73.         SubOptionPanel:SetBackdropBorderColor(0.4, 0.4, 0.4)
  74.        
  75.         Options_Child:SetScript("OnShow",
  76.             function()
  77.             PlaySound("igMainMenuOptionCheckBoxOn" or "igMainmenuOptionCheckBoxOff")
  78.             --code für die kräuter
  79.         end)
  80.        
  81.     end
  82.    
  83.     Options:SetScript("OnShow", nil)
  84.        
  85. end)
  Reply With Quote
02-23-15, 05:08 PM   #15
Duugu
Premium Member
 
Duugu's Avatar
AddOn Author - Click to view addons
Join Date: Nov 2006
Posts: 851
Ja zeig her den code für die Kräuter!

Oder hast Du überhaupt gar keine Idee wie Du das machen sollst? Ich steh auf dem Schlauch.
  Reply With Quote
02-24-15, 03:12 AM   #16
gmarco
An Onyxian Warder
 
gmarco's Avatar
AddOn Author - Click to view addons
Join Date: Dec 2009
Posts: 362
Come mai tutti scrivono in tedesco ? :-)
__________________
This is Unix-Land. In quiet nights, you can hear the Windows machines reboot.
  Reply With Quote
02-24-15, 05:31 AM   #17
Duugu
Premium Member
 
Duugu's Avatar
AddOn Author - Click to view addons
Join Date: Nov 2006
Posts: 851
Perché qui a quanto pare solo tedeschi discutono.
  Reply With Quote
02-24-15, 12:20 PM   #18
flow0284
A Cyclonian
Join Date: Jan 2015
Posts: 40
Originally Posted by Duugu View Post
Ja zeig her den code für die Kräuter!

Oder hast Du überhaupt gar keine Idee wie Du das machen sollst? Ich steh auf dem Schlauch.
Ganz ehrlich meine die nicht geklappt hatten habe ich nach dem Fehlschlägen rückgängig gemacht gehabt.
Mittlerweile habe ich gar keine Idee mehr, zumal ich neuling bin. Ich erwarte keinen fertigen Code von jemand hier aber eine verständliche Hilfestellung wäre klasse.
  Reply With Quote
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
02-24-15, 02:58 PM   #20
flow0284
A Cyclonian
Join Date: Jan 2015
Posts: 40
Baoh vielen vielen Dank!

WoW mochte das "each" in den beiden Schleifen nicht aber was ich jetzt noch nicht verstehe ist, was WoW gegen das "self." hier meckert WoW jetzt noch.

/edit: Ja mit Checkboxen wollte ich das auch machen.

/edit2: ich glaub ich sollte mal wieder richtig ausschalfen...

ich muss aus
Lua Code:
  1. Options_Child:SetScript("OnShow",
  2.             function()

Lua Code:
  1. Options_Child:SetScript("OnShow",
  2.             function(self)
machen...

ich denke mal das "Smoothe"
Lua Code:
  1. local tFS = Smoothe:CreateFontString(nil, "OVERLAY")
bei den helpers ist falsch und müsste, wenn ich mich nicht irre Addon:... sein. Allerdings meckert mir WoW dann: "attempt to call method 'CreateFontString' (a nil value)"

Last edited by flow0284 : 02-24-15 at 03:43 PM.
  Reply With Quote

WoWInterface » Developer Discussions » Lua/XML Help » Need help to integrate Addon-Options

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off