-- Neuron is a World of Warcraft® user interface addon. -- Copyright (c) 2017-2021 Britt W. Yazel -- Copyright (c) 2006-2014 Connor H. Chenoweth -- This code is licensed under the MIT license (see LICENSE for details) local addonName = ... local DB, NMM, NBE, NOE, NBTNE, MAS local width, height = 1000, 600 local barNames = {} Neuron.NeuronGUI = Neuron:NewModule("GUI", "AceEvent-3.0", "AceHook-3.0") local NeuronGUI = Neuron.NeuronGUI local L = LibStub("AceLocale-3.0"):GetLocale("Neuron") local NeuronAceGUI = LibStub("AceGUI-3.0") local GUIData = Neuron.registeredGUIData local barOpt = { chk = {}, adj = {}, pri = {}, sec = {}, swatch = {}, vis = {} } local popupData = {} local chkOptions = { [1] = { "AUTOHIDE", L["AutoHide"], 1, "AutoHideBar" }, [2] = { "SHOWGRID", L["Show Grid"], 1, "ShowGridSet" }, [3] = { "SNAPTO", L["SnapTo"], 1, "SnapToBar" }, [4] = { "UPCLICKS", L["Up Clicks"], 1, "UpClicksSet" }, [5] = { "DOWNCLICKS", L["Down Clicks"], 1, "DownClicksSet" }, [6] = { "MULTISPEC", L["Multi Spec"], 1, "MultiSpecSet" }, [7] = { "HIDDEN", L["Hidden"], 1, "ConcealBar" }, [8] = { "SPELLGLOW", L["Spell Alerts"], 1, "SpellGlowSet" }, [9] = { "SPELLGLOW", L["Default Alert"], 1, "SpellGlowSet", "default" }, [10] = { "SPELLGLOW", L["Subdued Alert"], 1, "SpellGlowSet", "alt" }, [11] = { "LOCKBAR", L["Lock Actions"], 1, "LockSet" }, [12] = { "LOCKBAR", L["Unlock on SHIFT"], 0.9, "LockSet", "shift" }, [13] = { "LOCKBAR", L["Unlock on CTRL"], 0.9, "LockSet", "ctrl" }, [14] = { "LOCKBAR", L["Unlock on ALT"], 0.9, "LockSet", "alt" }, [15] = { "TOOLTIPS", L["Enable Tooltips"], 1, "ToolTipSet" }, [16] = { "TOOLTIPS", L["Enhanced"], 0.9, "ToolTipSet", "enhanced" }, [17] = { "TOOLTIPS", L["Hide in Combat"], 0.9, "ToolTipSet", "combat" }, [18] = { "BORDERSTYLE", L["Show Border Style"], 1, "SetBorderStyle"}, } local adjOptions = { [1] = { "SCALE", L["Scale"], 1, "ScaleBar", 0.01, 0.1, 4 }, [2] = { "SHAPE", L["Shape"], 2, "ShapeBar", nil, nil, nil, Neuron.BarShapes }, [3] = { "COLUMNS", L["Columns"], 1, "ColumnsSet", 1 , 0}, [4] = { "ARCSTART", L["Arc Start"], 1, "ArcStartSet", 1, 0, 359 }, [5] = { "ARCLENGTH", L["Arc Length"], 1, "ArcLengthSet", 1, 0, 359 }, [6] = { "HPAD",L["Horiz Padding"], 1, "PadHSet", 0.5 }, [7] = { "VPAD", L["Vert Padding"], 1, "PadVSet", 0.5 }, [8] = { "HVPAD", L["H+V Padding"], 1, "PadHVSet", 0.5 }, [9] = { "STRATA", L["Strata"], 2, "StrataSet", nil, nil, nil, Neuron.STRATAS }, [10] = { "ALPHA", L["Alpha"], 1, "AlphaSet", 0.01, 0, 1 }, [11] = { "ALPHAUP", L["AlphaUp"], 2, "AlphaUpSet", nil, nil, nil, Neuron.AlphaUps }, [12] = { "ALPHAUP", L["AlphaUp Speed"], 1, "AlphaUpSpeedSet", 0.01, 0.01, 1, nil, "%0.0f", 100, "%" }, [13] = { "XPOS", L["X Position"], 1, "XAxisSet", 1, nil, nil, nil, "%0.2f", 1, "" }, [14] = { "YPOS", L["Y Position"], 1, "YAxisSet", 1, nil, nil, nil, "%0.2f", 1, "" }, } local swatchOptions = { [1] = { "BINDTEXT", L["Keybind Label"], 1, "BindTextSet", true, nil, "bindColor" }, [2] = { "MACROTEXT", L["Macro Name"], 1, "MacroTextSet", true, nil, "macroColor" }, [3] = { "COUNTTEXT", L["Stack/Charge Count Label"], 1, "CountTextSet", true, nil, "countColor" }, [4] = { "RANGEIND", L["Out-of-Range Indicator"], 1, "RangeIndSet", true, nil, "rangecolor" }, [5] = { "CDTEXT", L["Cooldown Countdown"], 1, "CDTextSet", true, true, "cdcolor1", "cdcolor2" }, [6] = { "CDALPHA", L["Cooldown Transparency"], 1, "CDAlphaSet", nil, nil }, } local specoveride = Neuron.activeSpec local updater ----------------------------------------------------------------------------- --------------------------INIT FUNCTIONS------------------------------------- ----------------------------------------------------------------------------- --- **OnInitialize**, which is called directly after the addon is fully loaded. --- do init tasks here, like loading the Saved Variables --- or setting up slash commands. function NeuronGUI:OnInitialize() NMM = NeuronMainMenu NBE = NeuronBarEditor NOE = NeuronObjectEditor NBTNE = NeuronButtonEditor DB = Neuron.db.profile MAS = Neuron.MANAGED_ACTION_STATES ---This loads the Neuron interface panel LibStub("AceConfigRegistry-3.0"):ValidateOptionsTable(NeuronGUI.interfaceOptions, addonName) LibStub("AceConfig-3.0"):RegisterOptionsTable(addonName, NeuronGUI.interfaceOptions) NeuronGUI.interfaceOptions.args.profile = LibStub("AceDBOptions-3.0"):GetOptionsTable(Neuron.db) -- Per spec profiles if not Neuron.isWoWClassicEra and not Neuron.isWoWClassic then local LibDualSpec = LibStub('LibDualSpec-1.0') LibDualSpec:EnhanceDatabase(Neuron.db, addonName) --enhance the database object with per spec profile features LibDualSpec:EnhanceOptions(NeuronGUI.interfaceOptions.args.profile, Neuron.db) -- enhance the profiles config panel with per spec profile features end LibStub("AceConfigDialog-3.0"):AddToBlizOptions(addonName, addonName) --for the object ---- editor Neuron.Editors.ACTIONBUTTON = { nil, 550, 350, nil } end --- **OnEnable** which gets called during the PLAYER_LOGIN event, when most of the data provided by the game is already present. --- Do more initialization here, that really enables the use of your addon. --- Register Events, Hook functions, Create Frames, Get information from --- the game that wasn't available in OnInitialize function NeuronGUI:OnEnable() for _,bar in pairs(Neuron.BARIndex) do NeuronGUI:hookHandler(bar.handler) end updater = CreateFrame("Frame", nil, UIParent) updater:SetScript("OnUpdate", function(self, elapsed) NeuronGUI:runUpdater(self, elapsed) end) updater.elapsed = 0 updater:Hide() NeuronGUI:RegisterEvent("ADDON_LOADED") if not Neuron.isWoWClassicEra and not Neuron.isWoWClassic then NeuronGUI:RegisterEvent("PLAYER_SPECIALIZATION_CHANGED") end --LibStub("AceConfig-3.0"):RegisterOptionsTable("Neuron-GUI", NeuronGUI.target_options) LibStub("AceConfig-3.0"):RegisterOptionsTable("Neuron-Flyout", NeuronGUI.flyout_options) end --- **OnDisable**, which is only called when your addon is manually being disabled. --- Unhook, Unregister Events, Hide frames that you created. --- You would probably only use an OnDisable if you want to --- build a "standby" mode, or be able to toggle modules on/off. function NeuronGUI:OnDisable() end ------------------------------------------------- function NeuronGUI:PLAYER_SPECIALIZATION_CHANGED() updater.elapsed = 0 updater:Show() end function NeuronGUI:ADDON_LOADED(name) if name == "Blizzard_PetJournal" then NeuronGUI:hookMountButtons() NeuronGUI:hookPetJournalButtons() end end local function round(num, idp) local mult = 10^(idp or 0) return math.floor(num * mult + 0.5) / mult end function NeuronGUI:SubFramePlainBackdrop_OnLoad(frame) frame:SetBackdrop({ bgFile = "", edgeFile = "Interface\\AddOns\\Neuron\\Images\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 22, insets = {left = 5, right = 5, top = 5, bottom = 5},}) frame:SetBackdropBorderColor(0.35, 0.35, 0.35, 1) frame:SetBackdropColor(0,0,0,0) frame:GetParent().backdrop = frame frame.bg = frame:CreateTexture(nil, "BACKGROUND") frame.bg:SetTexture("Interface\\FriendsFrame\\UI-Toast-Background", true) frame.bg:SetVertexColor(0.65,0.65,0.65,0.85) frame.bg:SetPoint("TOPLEFT", 3, -3) frame.bg:SetPoint("BOTTOMRIGHT", -3, 3) frame.bg:SetHorizTile(true) frame.bg:SetVertTile(true) end function NeuronGUI:SubFrameBlackBackdrop_OnLoad(frame) frame:SetBackdrop({ bgFile = "", edgeFile = "Interface\\AddOns\\Neuron\\Images\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 18, insets = {left = 5, right = 5, top = 5, bottom = 5},}) frame:SetBackdropBorderColor(0.25, 0.25, 0.25, 1) frame:SetBackdropColor(0,0,0,0) frame:GetParent().backdrop = frame frame.bg = frame:CreateTexture(nil, "BACKGROUND") frame.bg:SetTexture("Interface\\FriendsFrame\\UI-Toast-Background", true) frame.bg:SetVertexColor(0.65,0.65,0.65,1) frame.bg:SetPoint("TOPLEFT", 3, -3) frame.bg:SetPoint("BOTTOMRIGHT", -3, 3) frame.bg:SetHorizTile(true) frame.bg:SetVertTile(true) end function NeuronGUI:SubFrameBlankBackdrop_OnLoad(frame) frame:SetBackdrop({ bgFile = "", edgeFile = "Interface\\AddOns\\Neuron\\Images\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 12, insets = {left = 5, right = 5, top = 5, bottom = 5},}) frame:SetBackdropBorderColor(0.25, 0.25, 0.25, 1) frame:SetBackdropColor(0,0,0,0) frame:GetParent().backdrop = frame end function NeuronGUI:SubFrameHoneycombBackdrop_OnLoad(frame) frame:SetBackdrop({ bgFile = "", edgeFile = "Interface\\AddOns\\Neuron\\Images\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 18, insets = {left = 5, right = 5, top = 5, bottom = 5},}) frame:SetBackdropBorderColor(0.25, 0.25, 0.25, 1) frame:SetBackdropColor(0,0,0,0) frame:GetParent().backdrop = frame --[[frame.bg = frame:CreateTexture(nil, "BACKGROUND") frame.bg:SetTexture("Interface\\AddOns\\Neuron\\Images\\honeycomb_small", true) frame.bg:SetVertexColor(0.65,0.65,0.65,1) frame.bg:SetPoint("TOPLEFT", 3, -3) frame.bg:SetPoint("BOTTOMRIGHT", -3, 3) frame.bg:SetHorizTile(true) frame.bg:SetVertTile(true)]] end function NeuronGUI:insertLink(text) local item = GetItemInfo(text) if (NBTNE.macroedit.edit:IsVisible()) then NBTNE.macroedit.edit:SetFocus() if (NBTNE.macroedit.edit:GetText() == "") then if (item) then if (GetItemSpell(text)) then NBTNE.macroedit.edit:Insert(SLASH_USE1.." "..item) else NBTNE.macroedit.edit:Insert(SLASH_EQUIP1.." "..item) end else NBTNE.macroedit.edit:Insert(SLASH_CAST1.." "..text) end else NBTNE.macroedit.edit:Insert(item or text) end end end function NeuronGUI:NeuronPanelTemplates_DeselectTab(tab) tab.left:Show() tab.middle:Show() tab.right:Show() tab.leftdisabled:Hide() tab.middledisabled:Hide() tab.rightdisabled:Hide() tab:Enable() tab:SetDisabledFontObject(GameFontDisableSmall) tab.text:SetPoint("CENTER", tab, "CENTER", (tab.deselectedTextX or 0), (tab.deselectedTextY or 4)) end function NeuronGUI:NeuronPanelTemplates_SelectTab(tab) tab.left:Hide() tab.middle:Hide() tab.right:Hide() tab.leftdisabled:Show() tab.middledisabled:Show() tab.rightdisabled:Show() tab:Disable() tab:SetDisabledFontObject(GameFontHighlightSmall) tab.text:SetPoint("CENTER", tab, "CENTER", (tab.selectedTextX or 0), (tab.selectedTextY or 7)) if (GameTooltip:IsOwned(tab)) then GameTooltip:Hide() end end function NeuronGUI:NeuronPanelTemplates_TabResize(tab, padding, absoluteSize, minWidth, maxWidth, absoluteTextSize) local sideWidths= 2 * tab.left:GetWidth() local width, tabWidth, textWidth if ( absoluteTextSize ) then textWidth = absoluteTextSize else tab.text:SetWidth(0) textWidth = tab.text:GetWidth() end if ( absoluteSize ) then if ( absoluteSize < sideWidths) then width = 1 tabWidth = sideWidths else width = absoluteSize - sideWidths tabWidth = absoluteSize end tab.text:SetWidth(width) else if ( padding ) then width = textWidth + padding else width = textWidth + 24 end if ( maxWidth and width > maxWidth ) then if ( padding ) then width = maxWidth + padding else width = maxWidth + 24 end tab.text:SetWidth(width) else tab.text:SetWidth(0) end if (minWidth and width < minWidth) then width = minWidth end tabWidth = width + sideWidths end tab.middle:SetWidth(width) tab.middledisabled:SetWidth(width) tab:SetWidth(tabWidth) tab.highlighttexture:SetWidth(tabWidth) end --TODO: This should be moved to Neuron-GUI function NeuronGUI:EditBox_PopUpInitialize(popupFrame, data) popupFrame.func = NeuronGUI.PopUp_Update popupFrame.data = data NeuronGUI:PopUp_Update(popupFrame) end function NeuronGUI:PopUp_Update(popupFrame) local data, count, height, width = popupFrame.data, 1, 0, 0 local option, anchor, last, text if (popupFrame.options) then for k,v in pairs(popupFrame.options) do v.text:SetText(""); v:Hide() end end if (not popupFrame.array) then popupFrame.array = {} else wipe(popupFrame.array) end if (not data) then return end for k,v in pairs(data) do if (type(v) == "string") then popupFrame.array[count] = k..","..v else popupFrame.array[count] = k end count = count + 1 end table.sort(popupFrame.array) for i=1,#popupFrame.array do popupFrame.array[i] = gsub(popupFrame.array[i], "%s+", " ") popupFrame.array[i] = gsub(popupFrame.array[i], "^%s+", "") if (not popupFrame.options[i]) then option = CreateFrame("Button", popupFrame:GetName().."Option"..i, popupFrame, "NeuronPopupButtonTemplate") option:SetHeight(20) popupFrame.options[i] = option else option = _G[popupFrame:GetName().."Option"..i] popupFrame.options[i] = option end text = popupFrame.array[i]:match("^[^,]+") or "" option:SetText(text:gsub("^%d+_", "")) option.value = popupFrame.array[i]:match("[^,]+$") if (option:GetTextWidth() > width) then width = option:GetTextWidth() end option:ClearAllPoints() if (not anchor) then option:SetPoint("TOP", popupFrame, "TOP", 0, -5); anchor = option else option:SetPoint("TOP", last, "BOTTOM", 0, -1) end last = option height = height + 21 option:Show() end if (popupFrame.options) then for k,v in pairs(popupFrame.options) do v:SetWidth(width+40) end end popupFrame:SetWidth(width+40) if (height < popupFrame:GetParent():GetHeight()) then popupFrame:SetHeight(popupFrame:GetParent():GetHeight()) else popupFrame:SetHeight(height + 10) end end -- This builds the string of any custom states in the order that they were originaly entered. function NeuronGUI:generateCustomStateList(bar) local start = tonumber(string.match(bar.data.customRange, "^%d+")) local stop = tonumber(string.match(bar.data.customRange, "%d+$")) local customStateList = bar.data.customNames["homestate"]..";" for index = start, stop, 1 do customStateList = customStateList..bar.data.customNames["custom"..index]..";" end return customStateList end function NeuronGUI:UpdateBarGUI(newBar) NeuronGUI:BarListScrollFrameUpdate() local bar = Neuron.CurrentBar if (bar and GUIData[bar.class]) then if (NBE:IsVisible()) then NBE.count.text:SetText(L["Number of Buttons"]..": |cffffffff"..#bar.buttons.."|r") NBE.barname:SetText(bar.data.name) end if (NBE.baropt:IsVisible()) then local yoff = -10 local adjHeight, anchor, last if (NBE.baropt.colorpicker:IsShown()) then NBE.baropt.colorpicker:Hide() end if (GUIData[bar.class].adjOpt) then NBE.baropt.adjoptions:SetPoint("BOTTOMLEFT", NBE.baropt.chkoptions, "BOTTOMRIGHT", 0, GUIData[bar.class].adjOpt) adjHeight = (height-85) - (GUIData[bar.class].adjOpt - 10) else NBE.baropt.adjoptions:SetPoint("BOTTOMLEFT", NBE.baropt.chkoptions, "BOTTOMRIGHT", 0, 30) adjHeight = (height-85) - 20 end for i,f in ipairs(barOpt.chk) do f:ClearAllPoints(); f:Hide() end for i,f in ipairs(barOpt.chk) do if (GUIData[bar.class].chkOpt[f.option]) then if (bar[f.func]) then if (f.primary) then if (f.primary:GetChecked()) then f:Enable() f:SetChecked(bar[f.func](bar, f.modtext, true, nil, true)) f.text:SetTextColor(1,0.82,0) f.disabled = nil else f:SetChecked(false) f:Disable() f.text:SetTextColor(0.5,0.5,0.5) f.disabled = true end else f:SetChecked(bar[f.func](bar, f.modtext, true, nil, true)) end end if (not f.disabled) then if (f.primary) then f:SetPoint("TOPRIGHT", f.parent, "TOPRIGHT", -10, yoff) yoff = yoff-f:GetHeight()-5 else f:SetPoint("TOPRIGHT", f.parent, "TOPRIGHT", -10, yoff) yoff = yoff-f:GetHeight()-5 end f:Show() end end end local yoff1, yoff2= (adjHeight)/7, (adjHeight)/7 local shape for i,f in ipairs(barOpt.adj) do f:ClearAllPoints(); f:Hide() if (bar[f.func] and f.option == "SHAPE") then shape = bar[f.func](bar, nil, true, true) if (shape ~= L["Linear"]) then yoff1 = (adjHeight)/8 end end if (f.optData) then wipe(popupData) for k,v in pairs(f.optData) do popupData[k.."_"..v] = tostring(k) end NeuronGUI:EditBox_PopUpInitialize(f.edit.popup, popupData) end end yoff = -(yoff1/2) for i,f in ipairs(barOpt.adj) do if (f.option == "COLUMNS") then if (shape == L["Linear"]) then f:SetPoint("TOPLEFT", f.parent, "TOPLEFT", 10, yoff) f:Show() yoff = yoff-yoff1 end elseif (f.option == "ARCSTART" or f.option == "ARCLENGTH") then if (shape ~= L["Linear"]) then f:SetPoint("TOPLEFT", f.parent, "TOPLEFT", 10, yoff) f:Show() yoff = yoff-yoff1 end elseif (i >= 9) then if (i==9) then yoff = -(yoff2/2) end f:SetPoint("TOPLEFT", f.parent, "TOP", 10, yoff) f:Show() yoff = yoff-yoff2 else f:SetPoint("TOPLEFT", f.parent, "TOPLEFT", 10, yoff) f:Show() yoff = yoff-yoff1 end if (bar[f.func]) then f.edit.value = nil if (f.format) then f.edit:SetText(format(f.format, bar[f.func](bar, nil, true, true)*f.mult)..f.endtext) else f.edit:SetText(bar[f.func](bar, nil, true, true)) end f.edit:SetCursorPosition(0) end end for i,f in ipairs(barOpt.swatch) do f:ClearAllPoints(); f:Hide() end yoff = -10 for i,f in ipairs(barOpt.swatch) do if (GUIData[bar.class].chkOpt[f.option]) then if (bar[f.func]) then local checked, color1, color2 = bar[f.func](bar, f.modtext, true, nil, true) f:SetChecked(checked) if (color1) then f.swatch1:GetNormalTexture():SetVertexColor((";"):split(color1)) f.swatch1.color = color1 else f.swatch1:GetNormalTexture():SetVertexColor(0,0,0) f.swatch1.color = "0;0;0;0" end if (color2) then f.swatch2:GetNormalTexture():SetVertexColor((";"):split(color2)) f.swatch2.color = color2 else f.swatch2:GetNormalTexture():SetVertexColor(0,0,0) f.swatch2.color = "0;0;0;0" end end if (i >= 5) then if (i == 5) then yoff = -10 end f:SetPoint("TOPRIGHT", f.parent, "TOPRIGHT", -95, yoff) else f:SetPoint("TOPRIGHT", f.parent, "TOP", -95, yoff) end f:Show() yoff = yoff-f:GetHeight()-6 end end end if (NBE.barstates:IsVisible()) then local editor = NBE.barstates.actionedit if (NBE.baropt.colorpicker:IsShown()) then NBE.baropt.colorpicker:Hide() end if (editor:IsVisible()) then if (GUIData[bar.class].stateOpt) then editor.tab1:Enable() editor.tab2:Enable() editor.tab1.text:SetTextColor(0.85, 0.85, 0.85) editor.tab2.text:SetTextColor(0.85, 0.85, 0.85) editor.tab1:Click() editor:SetPoint("BOTTOMRIGHT", NBE.barstates, "TOPRIGHT", 0, -170) else editor.tab3:Click() editor.tab1:Disable() editor.tab2:Disable() editor.tab1.text:SetTextColor(0.4, 0.4, 0.4) editor.tab2.text:SetTextColor(0.4, 0.4, 0.4) editor:SetPoint("BOTTOMRIGHT", NBE.barstates, "TOPRIGHT", 0, -30) end end --Sets bar primaary options for i,f in ipairs(barOpt.pri) do if (f.option == "stance" and ((GetNumShapeshiftForms() < 1 or Neuron.class == "DEATHKNIGHT" or Neuron.class == "PALADIN" or Neuron.class == "HUNTER"))) and not Neuron.class=="SHAMAN" then f:SetChecked(false) f:Disable() f.text:SetTextColor(0.5,0.5,0.5) else f:SetChecked(bar.data[f.option]) f:Enable() f.text:SetTextColor(1,0.82,0) end end --Sets bar secondary options for i,f in ipairs(barOpt.sec) do if (f.stance ) then if (f.stance:GetChecked()) then f:SetChecked(bar.data[f.option]) f:Enable() f.text:SetTextColor(1,0.82,0) else f:SetChecked(false) f:Disable() f.text:SetTextColor(0.5,0.5,0.5) end else f:SetChecked(bar.data[f.option]) end end wipe(popupData) for state, value in pairs(Neuron.STATES) do if (bar.data.paged and state:find("paged")) then popupData[value] = state:match("%d+") elseif (bar.data.stance and state:find("stance")) then popupData[value] = state:match("%d+") end end NeuronGUI:EditBox_PopUpInitialize(barOpt.remap.popup, popupData) NeuronGUI:EditBox_PopUpInitialize(barOpt.remapto.popup, popupData) if (newBar) then barOpt.remap:SetText("") barOpt.remapto:SetText("") end end --Sets bar custom state options local customStateList = "" if (bar and bar.data.customNames) then customStateList = NeuronGUI:generateCustomStateList(bar) end barOpt.customstate:SetText(customStateList) end --Set visisbility buttons NeuronGUI:VisEditorScrollFrameUpdate() NeuronGUI:SecondaryPresetsScrollFrameUpdate() --LibStub("AceConfigDialog-3.0"):Open("Neuron-GUI", NBE.ACEmenu) end function NeuronGUI:UpdateObjectGUI(reset) for editor, data in pairs(Neuron.Editors) do if (data[1]:IsVisible()) then data[4](reset) end end end function NeuronGUI:updateBarName(frame) local bar = Neuron.CurrentBar if (bar) then bar.data.name = frame:GetText() bar.text:SetText(bar.data.name) frame:ClearFocus() NeuronGUI:BarListScrollFrameUpdate() end end function NeuronGUI:resetBarName(frame) local bar = Neuron.CurrentBar if (bar) then frame:SetText(bar.data.name) frame:ClearFocus() end end function NeuronGUI:resetMacroText(frame) local bar = Neuron.CurrentBar if (bar) then frame:SetText(bar.data.name) frame:ClearFocus() end end function NeuronGUI:updateCustomState(frame) local bar = Neuron.CurrentBar local state = frame:GetText() local customStateList = "" bar:SetState("custom", true, false) --turns off custom state to clear any previous stored items if (bar and state ~= "") then bar:SetState("custom "..state, true, true) end if (bar and bar.data.customNames) then customStateList = NeuronGUI:generateCustomStateList(bar) end barOpt.customstate:SetText(customStateList) NeuronGUI.VisEditorScrollFrameUpdate() frame:ClearFocus() end function NeuronGUI:countOnMouseWheel(delta) local bar = Neuron.CurrentBar if (bar) then if (delta > 0) then bar:AddObjectsToBar() else bar:RemoveObjectsFromBar() end end end function NeuronGUI:BarEditor_OnLoad(frame) NeuronGUI:SubFramePlainBackdrop_OnLoad(frame) frame:SetWidth(width) frame:SetHeight(height) --frame:RegisterEvent("ADDON_LOADED") frame:RegisterForDrag("LeftButton", "RightButton") frame.bottom = 0 frame.tabs = {} ---helper function that depends on parents "frame" local function TabsOnClick(cTab, silent) for tab, panel in pairs(frame.tabs) do if (tab == cTab) then tab:SetChecked(true) if (MouseIsOver(cTab)) then PlaySound(SOUNDKIT.IG_CHARACTER_INFO_TAB) end panel:Show() NeuronGUI:UpdateBarGUI() else tab:SetChecked(false) panel:Hide() end end end local f = CreateFrame("CheckButton", nil, frame, "NeuronCheckButtonTemplate1") f:SetWidth(140) f:SetHeight(28) f:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -28, -8.5) --f:SetScript("OnClick", function(self) TabsOnClick(self, true) end) f:SetFrameLevel(frame:GetFrameLevel()+1) f:SetChecked(false) --f.text:SetText(L["Spell Target Options"]) frame.tab3 = f; frame.tabs[f] = frame.targetoptions local f = CreateFrame("CheckButton", nil, frame, "NeuronCheckButtonTemplate1") f:SetWidth(140) f:SetHeight(28) f:SetPoint("RIGHT", frame.tab3, "LEFT", -5, 0) f:SetScript("OnClick", function(self) TabsOnClick(self) end) f:SetFrameLevel(frame:GetFrameLevel()+1) f:SetChecked(false) f.text:SetText(L["Bar States"]) frame.tab2 = f; frame.tabs[f] = frame.barstates f = CreateFrame("CheckButton", nil, frame, "NeuronCheckButtonTemplate1") f:SetWidth(140) f:SetHeight(28) f:SetPoint("RIGHT", frame.tab2, "LEFT", -5, 0) f:SetScript("OnClick", function(self) TabsOnClick(self) end) f:SetFrameLevel(frame:GetFrameLevel()+1) f:SetChecked(true) f.text:SetText(L["General Options"]) frame.tab1 = f; frame.tabs[f] = frame.baropt f = CreateFrame("EditBox", nil,frame, "NeuronEditBoxTemplateSmall") f:SetWidth(160) f:SetHeight(26) f:SetPoint("LEFT", frame.tab1, "LEFT", -3.5, 0) --weirdly I had to change the first "RIGHT" to a "LEFT" when I switched to Ace3-Addon f:SetPoint("TOPLEFT", frame.barlist, "TOPRIGHT", 3.5, 0) f:SetScript("OnEnterPressed", function(self) NeuronGUI:updateBarName(self) end) f:SetScript("OnTabPressed", function(self) NeuronGUI:updateBarName(self) end) f:SetScript("OnEscapePressed", function(self) NeuronGUI:resetBarName(self) end) frame.barname = f NeuronGUI:SubFrameBlackBackdrop_OnLoad(f) f = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate") f:SetWidth(250) f:SetHeight(30) f:SetPoint("BOTTOM", 0, 10) f:SetScript("OnMouseWheel", function(self, delta) NeuronGUI.countOnMouseWheel(self, delta) end) f:EnableMouseWheel(true) frame.count = f local text = f:CreateFontString(nil, "ARTWORK", "DialogButtonNormalText") text:SetPoint("CENTER") text:SetJustifyH("CENTER") text:SetText("Test Object Count: 12") frame.count.text = text f = CreateFrame("Button", nil, frame.count, BackdropTemplateMixin and "BackdropTemplate") f:SetWidth(32) f:SetHeight(40) f:SetPoint("LEFT", text, "RIGHT", 10, -1) f:SetNormalTexture("Interface\\AddOns\\Neuron\\Images\\AdjustOptionRight-Up") f:SetPushedTexture("Interface\\AddOns\\Neuron\\Images\\AdjustOptionRight-Down") f:SetHighlightTexture("Interface\\AddOns\\Neuron\\Images\\AdjustOptionRight-Highlight") f:SetScript("OnClick", function() if (Neuron.CurrentBar) then Neuron.CurrentBar:AddObjectsToBar() end end) f = CreateFrame("Button", nil, frame.count, BackdropTemplateMixin and "BackdropTemplate") f:SetWidth(32) f:SetHeight(40) f:SetPoint("RIGHT", text, "LEFT", -10, -1) f:SetNormalTexture("Interface\\AddOns\\Neuron\\Images\\AdjustOptionLeft-Up") f:SetPushedTexture("Interface\\AddOns\\Neuron\\Images\\AdjustOptionLeft-Down") f:SetHighlightTexture("Interface\\AddOns\\Neuron\\Images\\AdjustOptionLeft-Highlight") f:SetScript("OnClick", function() if (Neuron.CurrentBar) then Neuron.CurrentBar:RemoveObjectsFromBar() end end) end function NeuronGUI:BarList_OnLoad(frame) NeuronGUI:SubFrameHoneycombBackdrop_OnLoad(frame) frame:SetHeight(height-55) end local numShown = 14 function NeuronGUI:BarListScrollFrame_OnLoad(frame) frame.offset = 0 frame.scrollChild = _G[frame:GetName().."ScrollChildFrame"] frame:SetBackdropBorderColor(0.5, 0.5, 0.5) frame:SetBackdropColor(0,0,0,0.5) local button, lastButton, rowButton, count = false, false, false, 0 for i=1,numShown do button = CreateFrame("CheckButton", frame:GetName().."Button"..i, frame:GetParent(), "NeuronScrollFrameButtonTemplate") button.frame = frame:GetParent() button.numShown = numShown button:SetScript("OnClick", function(self) local button for i=1,numShown do button = _G["NeuronBarEditorBarListScrollFrameButton"..i] if (i == self:GetID()) then if (self.alt) then if (self.bar) then Neuron.BAR:CreateNewBar(self.bar) NeuronBarEditorCreate:Click() end self.alt = nil elseif (self.bar) then self.bar:ChangeBar() if (NBE and NBE:IsVisible()) then NeuronGUI:UpdateBarGUI() end end else button:SetChecked(false) end end end) button:SetScript("OnEnter", function(self) if (self.alt) then elseif (self.bar) then self.bar:OnEnter() end end) button:SetScript("OnLeave", function(self) if (self.alt) then elseif (self.bar) then self.bar:OnLeave() end end) button:SetScript("OnShow", function(self) self:SetHeight((self.frame:GetHeight()-10)/self.numShown) end) button.name = button:CreateFontString(button:GetName().."Index", "ARTWORK", "GameFontNormalSmall") button.name:SetPoint("TOPLEFT", button, "TOPLEFT", 5, 0) button.name:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", -5, 0) button.name:SetJustifyH("LEFT") button:SetID(i) button:SetFrameLevel(frame:GetFrameLevel()+2) button:SetNormalTexture("") if (not lastButton) then button:SetPoint("TOPLEFT", 8, -5) button:SetPoint("TOPRIGHT", -15, -5) lastButton = button else button:SetPoint("TOPLEFT", lastButton, "BOTTOMLEFT", 0, 0) button:SetPoint("TOPRIGHT", lastButton, "BOTTOMRIGHT", 0, 0) lastButton = button end end NeuronGUI:BarListScrollFrameUpdate() end function NeuronGUI:BarListScrollFrameUpdate(frame, tableList, alt) if (not NeuronBarEditorBarList:IsVisible()) then return end if (not tableList) then wipe(barNames) for _,bar in pairs(Neuron.BARIndex) do if (bar.data.name) then barNames[bar.data.name] = bar end end tableList = barNames end if (not frame) then frame = NeuronBarEditorBarListScrollFrame end local dataOffset, count, data = FauxScrollFrame_GetOffset(frame), 1, {} local button, text for k in pairs(tableList) do data[count] = k; count = count + 1 end table.sort(data) frame:Show() frame.buttonH = frame:GetHeight()/numShown for i=1,numShown do button = _G["NeuronBarEditorBarListScrollFrameButton"..i] button:SetChecked(false) count = dataOffset + i if (data[count]) then text = data[count] if (tableList[text] == Neuron.CurrentBar) then button:SetChecked(true) end button.alt = alt button.bar = tableList[text] button.name:SetText(text) button:Enable() button:Show() if (alt) then --this is for the create bar menu list if (i>0) then button.name:SetTextColor(0,1,0) button.name:SetJustifyH("CENTER") else button.name:SetJustifyH("CENTER") button:Disable() end else button.name:SetTextColor(1,0.82,0) button.name:SetJustifyH("LEFT") end else button:Hide() end end FauxScrollFrame_Update(frame, #data, numShown, 2) end function NeuronGUI:CreateButton_OnLoad(button) button.type = "create" button.text:SetText(L["Create New Bar"]) end function NeuronGUI:BarEditor_CreateNewBar(button) if (button.type == "create") then local data = {} --{ [L["Select Bar Type"]] = "none" } for class,info in pairs(Neuron.registeredBarData) do data[info.barLabel] = class end NeuronGUI:BarListScrollFrameUpdate(nil, data, true) button.type = "cancel" button.text:SetText(L["Cancel"]) else NeuronGUI:BarListScrollFrameUpdate() button.type = "create" button.text:SetText(L["Create New Bar"]) end end function NeuronGUI:DeleteButton_OnLoad(button) button.parent = button:GetParent() button.parent.delete = button button.type = "delete" button.text:SetText(L["Delete Current Bar"]) end function NeuronGUI:BarEditor_DeleteBar(button) local bar = Neuron.CurrentBar if (bar and button.type == "delete") then button:Hide() button.parent.confirm:Show() button.type = "confirm" else button:Show() button.parent.confirm:Hide() button.type = "delete" end end function NeuronGUI:Confirm_OnLoad(button) button.parent = button:GetParent() button.parent.confirm = button button.title:SetText(L["Confirm"]) end function NeuronGUI:ConfirmYes_OnLoad(button) button.parent = button:GetParent() button.type = "yes" _G[button:GetName().."Text"]:SetText(L["Yes"]) end function NeuronGUI:BarEditor_ConfirmYes(button) local bar = Neuron.CurrentBar if (bar) then bar:DeleteBar() end NeuronBarEditorDelete:Click() end function NeuronGUI:ConfirmNo_OnLoad(button) button.parent = button:GetParent() button.type = "no" _G[button:GetName().."Text"]:SetText(L["No"]) end function NeuronGUI:BarEditor_ConfirmNo(button) NeuronBarEditorDelete:Click() end function NeuronGUI:chkOptionOnClick(button) local bar = Neuron.CurrentBar if (bar and button.func) then bar[button.func](bar, button.modtext, true, button:GetChecked()) end end function NeuronGUI:BarOptions_OnLoad(frame) NeuronGUI:SubFrameHoneycombBackdrop_OnLoad(frame) local f, primary for index, options in ipairs(chkOptions) do f = CreateFrame("CheckButton", nil, frame, "NeuronOptionsCheckButtonTemplate") f:SetID(index) f:SetWidth(18) f:SetHeight(18) f:SetScript("OnClick", function(self) NeuronGUI:chkOptionOnClick(self) end) --f:SetScale(options[2]) f:SetScale(1) f:SetHitRectInsets(-100, 0, 0, 0) f:SetCheckedTexture("Interface\\Addons\\Neuron\\Images\\RoundCheckGreen.tga") f.option = options[1] f.func = options[4] f.modtext = options[5] f.parent = frame if (f.modtext) then f.text:SetFontObject("GameFontNormalSmall") end f.text:ClearAllPoints() f.text:SetPoint("LEFT", -120, 0) f.text:SetText(options[2]) if (f.modtext) then f.primary = primary else primary = f end table.insert(barOpt.chk, f) end end function NeuronGUI:adjOptionOnTextChanged(edit, frame) local bar = Neuron.CurrentBar if (bar) then if (frame.method == 1) then elseif (frame.method == 2 and edit.value) then bar[frame.func](bar, edit.value, true) edit.value = nil end end end function NeuronGUI:adjOptionOnEditFocusLost(edit, frame) edit.hasfocus = nil local bar = Neuron.CurrentBar if (bar) then if (frame.method == 1) then bar[frame.func](bar, edit:GetText(), true) elseif (frame.method == 2) then end end end function NeuronGUI:adjOptionAdd(frame, onupdate) local bar = Neuron.CurrentBar if (bar) then local num = bar[frame.func](bar, nil, true, true) if (num == L["Off"] or num == "---") then num = 0 else num = tonumber(num) end if (num and frame.inc) then if (frame.max and num >= frame.max) then bar[frame.func](bar, frame.max, true, nil, onupdate) if (onupdate) then if (frame.format) then frame.edit:SetText(format(frame.format, frame.max*frame.mult)..frame.endtext) else frame.edit:SetText(frame.max) end end else bar[frame.func](bar, num+frame.inc, true, nil, onupdate) if (onupdate) then if (frame.format) then frame.edit:SetText(format(frame.format, (num+frame.inc)*frame.mult)..frame.endtext) else frame.edit:SetText(num+frame.inc) end end end end end end function NeuronGUI:adjOptionSub(frame, onupdate) local bar = Neuron.CurrentBar if (bar) then local num = bar[frame.func](bar, nil, true, true) if (num == L["Off"] or num == "---") then num = 0 else num = tonumber(num) end if (num and frame.inc) then if (frame.min and num <= frame.min) then bar[frame.func](bar, frame.min, true, nil, onupdate) if (onupdate) then if (frame.format) then frame.edit:SetText(format(frame.format, frame.min*frame.mult)..frame.endtext) else frame.edit:SetText(frame.min) end end else bar[frame.func](bar, num-frame.inc, true, nil, onupdate) if (onupdate) then if (frame.format) then frame.edit:SetText(format(frame.format, (num-frame.inc)*frame.mult)..frame.endtext) else frame.edit:SetText(num-frame.inc) end end end end end end function NeuronGUI:NeuronAdjustOption_AddOnClick(frame, button, down) frame.elapsed = 0 frame.pushed = frame:GetButtonState() if (not down) then if (frame:GetParent():GetParent().addfunc) then frame:GetParent():GetParent().addfunc(frame:GetParent():GetParent()) end end end function NeuronGUI:NeuronAdjustOption_SubOnClick(frame, button, down) frame.elapsed = 0 frame.pushed = frame:GetButtonState() if (not down) then if (frame:GetParent():GetParent().subfunc) then frame:GetParent():GetParent().subfunc(frame:GetParent():GetParent()) end end end function NeuronGUI:adjOptionOnMouseWheel(frame, delta) if (delta > 0) then NeuronGUI:adjOptionAdd(frame) else NeuronGUI:adjOptionSub(frame) end end function NeuronGUI:AdjustableOptions_OnLoad(frame) NeuronGUI:SubFrameHoneycombBackdrop_OnLoad(frame) local f for index, options in ipairs(adjOptions) do f = CreateFrame("Frame", "NeuronGUIAdjOpt"..index, frame, "NeuronAdjustOptionTemplate") f:SetID(index) f:SetWidth(200) f:SetHeight(24) f:SetScript("OnShow", function() end) f:SetScript("OnMouseWheel", function(self, delta) NeuronGUI:adjOptionOnMouseWheel(self, delta) end) f:EnableMouseWheel(true) f.text:SetText(options[2]..":") f.method = options[3] f["method"..options[3]]:Show() f.edit = f["method"..options[3]].edit f.edit.frame = f f.option = options[1] f.func = options[4] f.inc = options[5] f.min = options[6] f.max = options[7] f.optData = options[8] f.format = options[9] f.mult = options[10] f.endtext = options[11] f.parent = frame f.edit:SetScript("OnTextChanged", function(self) NeuronGUI:adjOptionOnTextChanged(self, self.frame) end) f.edit:SetScript("OnEditFocusLost", function(self) NeuronGUI:adjOptionOnEditFocusLost(self, self.frame) end) f.addfunc = (function(self) NeuronGUI:adjOptionAdd(self) end) f.subfunc = (function(self) NeuronGUI:adjOptionSub(self) end) table.insert(barOpt.adj, f) end end function NeuronGUI:visOptionOnClick(button) local bar = Neuron.CurrentBar if (bar and button.func) then bar[button.func](bar, nil, true, button:GetChecked()) end end function NeuronGUI:colorPickerShow(button) if (button.color) then local frame = NBE.baropt.colorpicker frame.updateFunc = function() local bar = Neuron.CurrentBar if (bar) then local r,g,b = NeuronColorPicker:GetColorRGB() local a = NeuronColorPicker.alpha:GetValue() r = round(r,2); g = round(g,2); b = round(b,2); a = 1-round(a,2) if (r and g and b and a) then local value = r..";"..g..";"..b..";"..a bar.data[button.option] = value bar:UpdateObjectData() bar:Update() end end end local r,g,b,a = (";"):split(button.color) if (r and g and b) then NeuronColorPicker:SetColorRGB(r,g,b) end a = tonumber(a) if (a) then NeuronColorPicker.alpha:SetValue(1-a) NeuronColorPicker.alphavalue:SetText(a) end frame:Show() end end function NeuronGUI:VisiualOptions_OnLoad(frame) NeuronGUI:SubFrameHoneycombBackdrop_OnLoad(frame) local f, primary for index, options in ipairs(swatchOptions) do f = CreateFrame("CheckButton", nil, frame, "NeuronOptionsCheckButtonSwatchTemplate") f:SetID(index) f:SetWidth(18) f:SetHeight(18) f:SetScript("OnClick", function(self) NeuronGUI:visOptionOnClick(self) end) f:SetScale(1) f.text:SetText(options[2]..":") f.option = options[1] f.func = options[4] f.parent = frame if (options[5]) then f.swatch1:Show() f.swatch1:SetScript("OnClick", function(self) NeuronGUI:colorPickerShow(self) end) f.swatch1.option = options[7] end if (options[6]) then f.swatch2:Show() f.swatch2:SetScript("OnClick", function(self) NeuronGUI:colorPickerShow(self) end) f.swatch2.option = options[8] end table.insert(barOpt.swatch, f) end end function NeuronGUI:BarEditorColorPicker_OnLoad(frame) NeuronGUI:SubFrameHoneycombBackdrop_OnLoad(frame) end function NeuronGUI:BarEditorColorPicker_OnShow(frame) NeuronColorPicker.frame = frame NeuronColorPicker:ClearAllPoints() NeuronColorPicker:SetParent(frame) NeuronColorPicker:SetPoint("TOPLEFT", 0, -20) NeuronColorPicker:SetPoint("BOTTOMRIGHT") NeuronColorPicker:Show() end function NeuronGUI:setBarActionState(frame) local bar = Neuron.CurrentBar if (bar) then bar:SetState(frame.option, true, frame:GetChecked()) end end function NeuronGUI:SetBarVisibility(button) local bar = Neuron.CurrentBar if (bar) then bar:SetVisibility(button.msg, true) end end function NeuronGUI:remapOnTextChanged(frame) local bar = Neuron.CurrentBar if (bar and bar.data.remap and frame.value) then local map, remap for states in gmatch(bar.data.remap, "[^;]+") do map, remap = (":"):split(states) if (map == frame.value) then barOpt.remapto.value = remap if (bar.data.paged) then barOpt.remapto:SetText(Neuron.STATES["paged"..remap]) elseif (bar.data.stance) then barOpt.remapto:SetText(Neuron.STATES["stance"..remap]) end end end else barOpt.remapto:SetText("") end end function NeuronGUI:remapToOnTextChanged(frame) local bar = Neuron.CurrentBar if (bar and bar.data.remap and frame.value and #frame.value > 0) then local value = barOpt.remap.value bar.data.remap = bar.data.remap:gsub(value..":%d+", value..":"..frame.value) if (bar.data.paged) then bar.paged.registered = false elseif (bar.data.stance) then bar.stance.registered = false end bar.stateschanged = true bar:Update() end end function NeuronGUI:ActionEditor_OnLoad(frame) NeuronGUI:SubFrameHoneycombBackdrop_OnLoad(frame) frame.tabs = {} local function TabsOnClick(cTab, silent) for tab, panel in pairs(frame.tabs) do if (tab == cTab) then if (MouseIsOver(cTab) and not tab.selected) then PlaySound(SOUNDKIT.IG_CHARACTER_INFO_TAB) end panel:Show() tab:SetHeight(33) tab:SetBackdropBorderColor(0.3, 0.3, 0.3, 1) tab:SetBackdropColor(1,1,1,1) tab.text:SetTextColor(1,0.82,0) tab.selected = true else panel:Hide() tab:SetHeight(28) tab:SetBackdropBorderColor(0.2, 0.2, 0.2, 1) tab:SetBackdropColor(0.7,0.7,0.7,1) tab.text:SetTextColor(0.85, 0.85, 0.85) tab.selected = nil end end end local f = CreateFrame("CheckButton", nil, frame, "NeuronCheckButtonTabTemplate") f:SetWidth(160) f:SetHeight(33) f:SetPoint("TOPLEFT", frame, "BOTTOMLEFT",5,4) f:SetScript("OnClick", function(self) TabsOnClick(self) end) f:SetFrameLevel(frame:GetFrameLevel()) f:SetBackdropColor(0.3,0.3,0.3,1) f.text:SetText(L["Preset Action States"]) f.selected = true frame.tab1 = f; frame.tabs[f] = frame.presets f = CreateFrame("CheckButton", nil, frame, "NeuronCheckButtonTabTemplate") f:SetWidth(160) f:SetHeight(28) f:SetPoint("TOPRIGHT", frame, "BOTTOMRIGHT",-5,4) f:SetScript("OnClick", function(self) TabsOnClick(self) end) f:SetFrameLevel(frame:GetFrameLevel()) f.text:SetText(L["Custom Action States"]) frame.tab2 = f; frame.tabs[f] = frame.custom f = CreateFrame("CheckButton", nil, frame, "NeuronCheckButtonTabTemplate") f:SetWidth(160) f:SetHeight(28) f:SetPoint("TOP", frame, "BOTTOM",0,0) f:SetScript("OnClick", function(self) TabsOnClick(self, true) end) f:SetFrameLevel(frame:GetFrameLevel()) f:Hide() frame.tab3 = f; frame.tabs[f] = frame.hidden local states = {} local anchor, last, count local MAS = Neuron.MANAGED_ACTION_STATES --this is confusing, but states comes out to just be a list of the names of the states for state, values in pairs(MAS) do states[values.order] = state end local _, class = UnitClass("player") for index,state in ipairs(states) do if (MAS[state].homestate) then f = CreateFrame("CheckButton", nil, frame.presets.primary, "NeuronOptionsCheckButtonTemplate") f:SetID(index) f:SetWidth(18) f:SetHeight(18) f:SetScript("OnClick", function(self) NeuronGUI:setBarActionState(self) end) --Renames Stance for rogues to Stealth as that is what should really be used if state == "stance" and (class == "ROGUE") then f.text:SetText(L["Stealth"])--:upper()) elseif state == "stance" and (class == "DRUID" or class=="SHAMAN") then f.text:SetText(L["Shapeshift"])--:upper()) else f.text:SetText(MAS[state].localizedName)--:upper()) end f.option = state if (not anchor) then f:SetPoint("TOPLEFT", frame.presets.primary, "TOPLEFT", 10, -10) anchor = f; last = f else f:SetPoint("TOPLEFT", last, "BOTTOMLEFT", 0, -18) last = f end table.insert(barOpt.pri, f) end end anchor, last, count = nil, nil, 1 f = CreateFrame("CheckButton", nil, frame.custom, "NeuronOptionsCheckButtonTemplate") --f:SetID(index) f:SetWidth(18) f:SetHeight(18) f:SetScript("OnClick", function(self) NeuronGUI:setBarActionState(self) end) f.text:SetText(L["Custom"]) f.option = "custom" f:SetPoint("TOPLEFT", frame.custom, "TOPLEFT", 10, -10) table.insert(barOpt.sec, f) f = CreateFrame("EditBox", "$parentRemap", frame.presets, "NeuronDropDownOptionFull") f:SetWidth(165) f:SetHeight(25) f:SetTextInsets(7,3,0,0) f.text:SetText(L["Select a stance to remap:"]) f:SetPoint("BOTTOMLEFT",frame.presets, "BOTTOMLEFT", 7, 8) f:SetPoint("BOTTOMRIGHT", frame.presets.secondary, "BOTTOM", -70, -35) f:SetScript("OnTextChanged", function(self) NeuronGUI:remapOnTextChanged(self) end) f:SetScript("OnEditFocusGained", function(self) self:ClearFocus() end) f.popup:ClearAllPoints() f.popup:SetPoint("BOTTOMLEFT") f.popup:SetPoint("BOTTOMRIGHT") barOpt.remap = f NeuronGUI:SubFrameBlackBackdrop_OnLoad(f) f = CreateFrame("EditBox", "$parentRemapTo", frame.presets, "NeuronDropDownOptionFull") f:SetWidth(160) f:SetHeight(25) f:SetTextInsets(7,3,0,0) f.text:SetText(L["Remap selected stance to:"]) f:SetPoint("BOTTOMLEFT", barOpt.remap, "BOTTOMRIGHT", 25, 0) f:SetPoint("BOTTOMRIGHT", frame.presets.secondary, "BOTTOMRIGHT", -23, -35) f:SetScript("OnTextChanged", function(self) NeuronGUI:remapToOnTextChanged(self) end) f:SetScript("OnEditFocusGained", function(self) self:ClearFocus() end) f.popup:ClearAllPoints() f.popup:SetPoint("BOTTOMLEFT") f.popup:SetPoint("BOTTOMRIGHT") barOpt.remapto = f --Custom State Tabs f = frame.custom f.text = f:CreateFontString(nil, "ARTWORK", "GameFontNormalSmall"); f.text:SetPoint("TOPLEFT", frame.custom, "TOPLEFT", 10, -60) f.text:SetPoint("TOPRIGHT", frame.custom, "TOPRIGHT", -10, -60) f.text:SetJustifyH("CENTER") f.text:SetText(L["Custom_Option"]) f.text:SetWordWrap(true) f = CreateFrame("EditBox", "$parentCostomStateEdit", frame.custom, "NeuronEditBoxTemplateSmall") --f:SetWidth(550) f:SetHeight(26) f:SetPoint("TOPLEFT", frame.custom, "TOPLEFT", 10, -30) f:SetPoint("TOPRIGHT", frame.custom, "TOPRIGHT", -10, -30) f:SetJustifyH("LEFT") f:SetTextInsets(10, 0, 0, 0) f:SetMaxLetters(0) f:SetScript("OnEnterPressed", frame.updateCustomState) f:SetScript("OnTabPressed", frame.updateCustomState) f:SetScript("OnEscapePressed", frame.updateCustomState) frame.search = f barOpt.customstate = f NeuronGUI:SubFrameBlackBackdrop_OnLoad(f) end function NeuronGUI:VisEditor_OnLoad(frame) local f = CreateFrame("CheckButton", nil, frame, "NeuronCheckButtonTabTemplate") f:SetWidth(160) f:SetHeight(25) f:SetPoint("BOTTOMLEFT", frame, "TOPLEFT",5,-5) f:SetPoint("BOTTOMRIGHT", frame, "TOPRIGHT",-5,-5) f:SetFrameLevel(frame:GetFrameLevel()+1) f:SetBackdrop({ bgFile = "Interface\\AddOns\\Neuron\\Images\\UI-Panel-Tab-Background", edgeFile = "Interface\\AddOns\\Neuron\\Images\\UI-Tooltip-Border", tile = false, tileSize = 24, edgeSize = 16, insets = {left = 5, right = 5, top = 5, bottom = 5},}) f:SetBackdropBorderColor(0.35, 0.35, 0.35, 1) --f:SetBackdropColor(0.7,0.7,0.7,1) f:SetBackdropColor(1,1,1,1) --f:SetBackdropColor(0.3,0.3,0.3,1) f.text:SetText(L["Bar Visibility Toggles"]) f.selected = true NeuronGUI:SubFrameHoneycombBackdrop_OnLoad(f) end local numVisShown = 50 function NeuronGUI:VisEditorScrollFrame_OnLoad(frame) frame.offset = 0 frame.scrollChild = _G[frame:GetName().."ScrollChildFrame"] frame:SetBackdropBorderColor(0.5, 0.5, 0.5) frame:SetBackdropColor(0,0,0,0.5) local anchor, button, lastButton, rowButton, count = false, false, false, false, 1 for i=1,numVisShown do button = CreateFrame("CheckButton", frame:GetName().."Button"..i, frame:GetParent(), "NeuronOptionsCheckButtonTemplate") button.frame = frame:GetParent() button.numShown = numVisShown button:SetCheckedTexture("Interface\\Addons\\Neuron\\Images\\RoundCheckGreen.tga") button:SetScript("OnClick", function(self) NeuronGUI:SetBarVisibility(self) end) button:SetScript("OnShow", function(self) self:SetHeight((self.frame:GetHeight()-10)/self.numShown) end) button:SetWidth(18) button:SetHeight(18) button:SetHitRectInsets(0, 0, 0, 0) button:SetFrameLevel(frame:GetFrameLevel()+2) if (not anchor) then button:SetPoint("TOPLEFT", 10, -8) anchor = button; lastButton = button elseif (count == 11) then button:SetPoint("LEFT", anchor, "RIGHT", 125, 0) anchor = button; lastButton = button; count = 1 else button:SetPoint("TOPLEFT", lastButton, "BOTTOMLEFT", 0, -6) lastButton = button end count = count + 1 end NeuronGUI.VisEditorScrollFrameUpdate() end local VisSTateList = {} function NeuronGUI:VisEditorScrollFrameUpdate(frame, tableList, alt) if (not NeuronBarEditorBarStatesVisEditor:IsVisible()) then return end local bar = Neuron.CurrentBar if (not tableList) then wipe(VisSTateList) tableList = Neuron.STATES end if (not frame) then frame = NeuronBarEditorBarStatesVisEditorScrollFrame end local dataOffset, count, data = FauxScrollFrame_GetOffset(frame), 1, {} local button, text local _, class = UnitClass("player") for k in pairs(tableList) do local val = k:match("%d+$") if (val and (k ~= "custom0"))then --Messy workaround to not have 2 stealths for rogues if ((k == "stealth0" or k == "stealth1") and (class == "ROGUE")) then else data[count] = k; count = count + 1 end end end table.sort(data) local customStateData = {} --This adds cusom states to the visability menu, currently disabled untill I get custom state visability to work --[[ if (bar and bar.data.customNames) then local i = 0 for index,state in pairs(bar.data.customNames) do data[count] = state; count = count + 1 customStateData[state] = i; i=i+1 end end ]]-- frame:Show() for i=1,numVisShown do button = _G["NeuronBarEditorBarStatesVisEditorScrollFrameButton"..i] button:SetChecked(false) count = dataOffset + i local _, class = UnitClass("player") if (data[count]) then text = Neuron.STATES[data[count]] or data[count] if customStateData[data[count]] then button.msg ="custom "..customStateData[data[count]] button:SetChecked(not bar.data.hidestates:find("custom"..customStateData[data[count]])) else button.msg = data[count]:match("%a+").." "..data[count]:match("%d+$") button:SetChecked(not bar.data.hidestates:find(data[count])) end --Renames rogues stance0 from Melee to No stealth for the view states list if (data[count] == "stance0" and class == "ROGUE") then text = L["No Stealth"] end button.text:SetText(text) button:Enable() button:Show() button:SetWidth(18) button:SetHeight(18) else button:Hide() end end FauxScrollFrame_Update(frame, #data, numVisShown, 18) end function NeuronGUI:StateList_OnLoad(frame) NeuronGUI:SubFrameHoneycombBackdrop_OnLoad(frame) end local numStatesShown = 20 function NeuronGUI:SecondaryPresetsScrollFrame_OnLoad(frame) frame.offset = 0 frame.scrollChild = _G[frame:GetName().."ScrollChildFrame"] frame:SetBackdropBorderColor(0.5, 0.5, 0.5) frame:SetBackdropColor(0,0,0,0.5) local anchor, button, lastButton, rowButton, count = false, false, false, false, 1 for i=1,numStatesShown do button = CreateFrame("CheckButton", "PresetsScrollFrameButton"..i, frame:GetParent(), "NeuronOptionsCheckButtonTemplate") button.frame = frame:GetParent() button.numShown = numStatesShown button:SetScript("OnClick", function(self) NeuronGUI:setBarActionState(self) end) button:SetScript("OnShow", function(self) self:SetHeight((self.frame:GetHeight()-10)/self.numShown) end) --f = CreateFrame("CheckButton", nil, frame.visscroll, "NeuronOptionsCheckButtonTemplate") --f:SetID(index) button:SetWidth(18) button:SetHeight(18) button:SetHitRectInsets(0, 0, 0, 0) --button:SetID(i) button:SetFrameLevel(frame:GetFrameLevel()+2) if (not anchor) then button:SetPoint("TOPLEFT", 10, -8) anchor = button; lastButton = button elseif (count == 5) then button:SetPoint("LEFT", anchor, "RIGHT", 90, 0) anchor = button; lastButton = button; count = 1 else button:SetPoint("TOPLEFT", lastButton, "BOTTOMLEFT", 0, -8) lastButton = button end count = count + 1 end NeuronGUI.SecondaryPresetsScrollFrameUpdate() end local SecondaryPresetsList = {} function NeuronGUI:SecondaryPresetsScrollFrameUpdate(frame, stateList, alt) if (not NeuronBarEditorBarStatesActionEditor:IsVisible()) then return end local bar = Neuron.CurrentBar if (not stateList) then wipe(SecondaryPresetsList) stateList = Neuron.MANAGED_ACTION_STATES end if (not frame) then frame = NeuronBarEditorBarStatesActionEditorPresetsSecondaryScrollFrame end local statesOffset, states = FauxScrollFrame_GetOffset(frame), {} local button, text local count = 1 local _, class = UnitClass("player") for k,v in pairs(stateList) do if (not MAS[k].homestate and (k ~= "extrabar") and (k ~= "custom")) then if ((class == "ROGUE") and k == "stealth") then else states[count] = k count = count + 1 end end end --Might want to add some checks for states like stealth for classes that don't have stealth. But for now it doesn't break anything to have it show generically table.sort(states) frame:Show() for i=1,numStatesShown do button = _G["PresetsScrollFrameButton"..i] --"NeuronBarEditorBarStatesSecondaryPresetsScrollFrameButton"..i] button:SetChecked(false) count = statesOffset + i if (states[count]) then text = MAS[states[count]].localizedName --:upper() button.option = states[count] button:SetChecked(bar.data[button.option ]) button.text:SetText(text) button:Enable() button:Show() button:SetWidth(18) button:SetHeight(18) else button:Hide() end end FauxScrollFrame_Update(frame, #states, numStatesShown, 18) end function NeuronGUI:BarStates_OnLoad(frame) NeuronGUI:SubFrameHoneycombBackdrop_OnLoad(frame) end --- OnLoad event for Bar editor Spell Target Options frame function NeuronGUI:TargetOptions_OnLoad(frame) --Container Support local content = CreateFrame("Frame",nil, frame, BackdropTemplateMixin and "BackdropTemplate") content:SetPoint("TOPLEFT",10,-5 ) content:SetPoint("BOTTOMRIGHT",-10,5) --This creats a cusomt AceGUI container which lets us imbed a AceGUI menu into our frame. local widget = { frame = frame, content = content, type = "NeuronContainer" } widget["OnRelease"] = function(self) self.status = nil wipe(self.localstatus) end NeuronBarEditor.ACEmenu = widget NeuronAceGUI:RegisterAsContainer(widget) NeuronGUI:SubFrameHoneycombBackdrop_OnLoad(frame) end -- OnLoad event for Bar editor Spell Target Options frame -- This need a lot of work function NeuronGUI:FlyoutOptions_OnLoad(frame) --NeuronButtonEditor.options --Container Support local content = CreateFrame("Frame",nil, frame.options, BackdropTemplateMixin and "BackdropTemplate") content:SetPoint("TOPLEFT",10,-5 ) content:SetPoint("BOTTOMRIGHT",-10,5) --This creats a cusomt AceGUI container which lets us imbed a AceGUI menu into our frame. local widget = { frame = frame.options, content = content, type = "NeuronContainer" } widget["OnRelease"] = function(self) self.status = nil wipe(self.localstatus) end NeuronButtonEditor.ACEmenu = widget NeuronAceGUI:RegisterAsContainer(widget) NeuronGUI:SubFrameHoneycombBackdrop_OnLoad(frame) end function NeuronGUI:ObjectEditor_OnLoad(frame) NeuronGUI:SubFramePlainBackdrop_OnLoad(frame) frame:RegisterForDrag("LeftButton", "RightButton") frame.bottom = 0 frame:SetHeight(height) end function NeuronGUI:ObjectEditor_OnShow(frame) for k,v in pairs(Neuron.Editors) do v[1]:Hide() end if (Neuron.CurrentObject) then local objType = Neuron.CurrentObject.objType if (Neuron.Editors[objType]) then local editor = Neuron.Editors[objType][1] editor:SetParent(frame) editor:SetAllPoints(frame) editor:Show() NOE:SetWidth(Neuron.Editors[objType][2]) NOE:SetHeight(Neuron.Editors[objType][3]) end end end function NeuronGUI:ObjectEditor_OnHide(frame) end function NeuronGUI:ActionList_OnLoad(frame) NeuronGUI:SubFrameHoneycombBackdrop_OnLoad(frame) end function NeuronGUI:ActionListScrollFrame_OnLoad(frame) frame.offset = 0 frame.scrollChild = _G[frame:GetName().."ScrollChildFrame"] frame:SetBackdropBorderColor(0.5, 0.5, 0.5) frame:SetBackdropColor(0,0,0,0.5) local button, lastButton, rowButton, count = false, false, false, 0 for i=1,numShown do button = CreateFrame("CheckButton", frame:GetName().."Button"..i, frame:GetParent(), "NeuronScrollFrameButtonTemplate") button.frame = frame:GetParent() button.numShown = numShown button.elapsed = 0 button:SetScript("OnClick", function(self) NeuronButtonEditor.macroedit.edit:ClearFocus() local button for i=1,numShown do button = _G["NeuronBarEditorBarListScrollFrameButton"..i] if (i == self:GetID()) then if (self.bar) then self.bar:FakeStateChange(self.state) end else button:SetChecked(false) end end end) button:SetScript("OnEnter", function(self) end) button:SetScript("OnLeave", function(self) end) button:SetScript("OnShow", function(self) self.elapsed = 0; self.setheight = true end) button:SetScript("OnUpdate", function(self,elapsed) self.elapsed = self.elapsed + elapsed if (self.setheight and self.elapsed > 0.03) then self:SetHeight((self.frame:GetHeight()-10)/self.numShown) self.setheight = nil end end) button.name = button:CreateFontString(button:GetName().."Index", "ARTWORK", "GameFontNormalSmall") button.name:SetPoint("TOPLEFT", button, "TOPLEFT", 5, 0) button.name:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", -5, 0) button.name:SetJustifyH("LEFT") button:SetID(i) button:SetFrameLevel(frame:GetFrameLevel()+2) button:SetNormalTexture("") if (not lastButton) then button:SetPoint("TOPLEFT", 8, -5) button:SetPoint("TOPRIGHT", -15, -5) lastButton = button else button:SetPoint("TOPLEFT", lastButton, "BOTTOMLEFT", 0, 0) button:SetPoint("TOPRIGHT", lastButton, "BOTTOMRIGHT", 0, 0) lastButton = button end end NeuronGUI:ActionListScrollFrameUpdate() end local stateList = {} function NeuronGUI:ActionListScrollFrameUpdate(frame) if (not NeuronButtonEditorActionList:IsVisible()) then return end local bar, i if (Neuron.CurrentObject and Neuron.CurrentObject.bar) then wipe(stateList) bar = Neuron.CurrentObject.bar stateList["00"..L["Home State"]] = "homestate" for state, values in pairs(MAS) do if (bar.data[state]) then for index, name in pairs(Neuron.STATES) do if (index ~= "laststate" and name ~= ATTRIBUTE_NOOP and values.states:find(index)) then i = index:match("%d+") if (i) then i = values.order..i else i = values.order end if (values.homestate and index == values.homestate) then stateList["00"..name] = "homestate"; stateList["00"..L["Home State"]] = nil elseif (values.order < 10) then stateList["0"..i..name] = index else stateList[i..name] = index end end end end end else wipe(stateList) end if (not frame) then frame = NeuronButtonEditorActionListScrollFrame end local dataOffset, count, data = FauxScrollFrame_GetOffset(frame), 1, {} local button, text for k in pairs(stateList) do data[count] = k; count = count + 1 end table.sort(data) if (bar and bar.data.customNames) then local i = 0 for index,state in pairs(bar.data.customNames) do stateList[state] = index data[count] = state; count = count + 1 end end frame:Show() frame.buttonH = frame:GetHeight()/numShown for i=1,numShown do button = _G["NeuronButtonEditorActionListScrollFrameButton"..i] button:SetChecked(false) count = dataOffset + i if (data[count]) then text = data[count] if (bar and stateList[text] == bar.handler:GetAttribute("fauxstate")) then button:SetChecked(true) end button.bar = bar button.state = stateList[text] button.name:SetText(text:gsub("^%d+","")) button:Enable() button:Show() button.name:SetTextColor(1,0.82,0) button.name:SetJustifyH("CENTER") else button:Hide() end end FauxScrollFrame_Update(frame, #data, numShown, 2) end --TODO REVISIT & CLEAN --- Sets button icon based on current specoveride setting -- @param button -- @param data: -- @returns: Button texture function NeuronGUI:specUpdateIcon(button,state) local texture = "INTERFACE\\ICONS\\INV_MISC_QUESTIONMARK" local buttonSpec = Neuron.activeSpec local data = button.DB[specoveride][state] if (button.bar.data.multiSpec and specoveride ~= buttonSpec) then local spell = data.macro_Text:match("/cast%s+(%C+)") or data.macro_Text:match("/use%s+(%C+)") or data.macro_Text:match("/summonpet%s+(%C+)") or data.macro_Text:match("/equipset%s+(%C+)") or data.macro_Text if (data.macro_Text:match("/cast%s+(%C+)")) then spell = (spell):lower() if (NeuronSpellCache[spell]) then local spell_id = NeuronSpellCache[spell].spellID texture = GetSpellTexture(spell_id) elseif (spell) then texture = GetSpellTexture(spell) end elseif NeuronItemCache[spell] then texture = GetItemIcon("item:"..NeuronItemCache[spell]..":0:0:0:0:0:0:0") end else texture = button.Icon:GetTexture() end return texture end function NeuronGUI:MacroEditorUpdate() if (Neuron.CurrentObject and Neuron.CurrentObject.objType == "ACTIONBUTTON") then local button, NBTNE = Neuron.CurrentObject, NeuronButtonEditor local state = button.bar.handler:GetAttribute("fauxstate") local buttonSpec = Neuron.activeSpec if (button.bar.data.multiSpec) then buttonSpec = specoveride if buttonSpec > 4 then buttonSpec = 1 end --Sets spec tab to current spec NBTNE.spec1:SetChecked(false) NBTNE.spec2:SetChecked(false) NBTNE["spec"..buttonSpec]:SetChecked(true) --Sets current spec marker to proper tab NBTNE.activespc:SetParent(NBTNE["spec"..Neuron.activeSpec]) NBTNE.activespc:SetPoint("LEFT") NBTNE.spec1:Show() NBTNE.spec2:Show() NBTNE.spec3:Show() local player_Class = select(2, UnitClass("player")) if (player_Class == "DEMONHUNTER") then NBTNE.spec1:SetWidth(104) NBTNE.spec2:SetWidth(104) NBTNE.savestate:SetPoint("LEFT", NBTNE.spec2, "RIGHT", 0, 0) NBTNE.spec3:Hide() NBTNE.spec4:Hide() elseif (player_Class == "DRUID") then NBTNE.spec1:SetWidth(62) NBTNE.spec2:SetWidth(62) NBTNE.spec3:SetWidth(62) NBTNE.spec4:SetWidth(62) NBTNE.spec4:Show() NBTNE.savestate:SetPoint("LEFT", NBTNE.spec4, "RIGHT", 0, 0) NBTNE.savestate:SetWidth(62) else NBTNE.spec4:Hide() end else buttonSpec = 1 NBTNE.spec1:Hide() NBTNE.spec2:Hide() NBTNE.spec3:Hide() NBTNE.spec4:Hide() end local data = button.DB[buttonSpec][state] if not data then button.DB[buttonSpec][state] = button:build() data = button.DB[buttonSpec][state] button:UpdateFlyout() button:BuildStateData() button:SetType() end if (data) then NBTNE.macroedit.edit:SetText(data.macro_Text) if (not data.macro_Icon) then NBTNE.macroicon.icon:SetTexture(NeuronGUI:specUpdateIcon(button, state))--button.Icon:GetTexture()) elseif (data.macro_Icon == "BLANK") then NBTNE.macroicon.icon:SetTexture("") else NBTNE.macroicon.icon:SetTexture(data.macro_Icon) end if data.macro_Name then NBTNE.nameedit:SetText(data.macro_Name) end if data.macro_Note then NBTNE.noteedit:SetText(data.macro_Note) end NBTNE.usenote:SetChecked(data.macro_UseNote) else --Neuron:Print("nothinghere") --button.DB[buttonSpec][state] = button:build() --button:build(button.DB[buttonSpec][state]) --Neuron:Print(button.DB[buttonSpec][state]) --end end end end function NeuronGUI:ButtonEditorUpdate(reset) if (reset and Neuron.CurrentObject) then local bar = Neuron.CurrentObject.bar bar.handler:SetAttribute("fauxstate", bar.handler:GetAttribute("activestate")) NeuronButtonEditor.macroicon.icon:SetTexture("") specoveride = Neuron.activeSpec end NeuronGUI:ActionListScrollFrameUpdate() NeuronGUI:MacroEditorUpdate() end function NeuronGUI:ButtonEditor_OnShow(frame) NeuronGUI:ButtonEditorUpdate(true) end function NeuronGUI:ButtonEditor_OnHide(frame) end --- Triggers when macro editor's text box loses focus -- @param self: macro editor frame function NeuronGUI:macroText_OnEditFocusLost() self.hasfocus = nil local button = Neuron.CurrentObject if (button) then button:UpdateFlyout() button:BuildStateData() button:SetType() NeuronGUI:MacroEditorUpdate() end end --- Triggers when text in the macro editor changes -- @param self: macro editor frame function NeuronGUI:macroText_OnTextChanged(frame) if (frame.hasfocus) then local button = Neuron.CurrentObject if(button) then local buttonSpec = ((button.bar.data.multiSpec and specoveride) or 1) local state = button.bar.handler:GetAttribute("fauxstate") if (button and buttonSpec and state) then if button.DB[buttonSpec][state] then button.DB[buttonSpec][state].macro_Text = frame:GetText() button.DB[buttonSpec][state].macro_BlizzMacro = false else --Neuron:Print("nothinghere") --button.DB[buttonSpec][state] = button:build() --button:build(button.DB[buttonSpec][state]) --Neuron:Print(button.DB[buttonSpec][state]) end end end end end --- Triggers when text in the macro editor changes -- @param self: macro editor frame function NeuronGUI:macroButton_Changed(frame, button, down) local object = Neuron.CurrentObject if not object then return end local data = object.data local buttonSpec = ((object.bar.data.multiSpec and specoveride) or 1) local state = object.bar.handler:GetAttribute("fauxstate") --handler to check if viewing non current spec button settings if (specoveride ~= Neuron.activeSpec) then data = object.DB[buttonSpec][state] end if (object and data) then if (frame.texture == "INTERFACE\\ICONS\\INV_MISC_QUESTIONMARK") then data.macro_Icon = false else data.macro_Icon = frame.texture end object:UpdateIcon() NeuronGUI:UpdateObjectGUI() end frame:SetFrameLevel(frame.fl-1) frame.click = true frame.elapsed = 0 frame:GetParent():Hide() frame:SetChecked(false) end --- Triggers when the text in the macro editor's name text box changes -- @param self: macro editor name edit box frame function NeuronGUI:macroNameEdit_OnTextChanged(frame) if not Neuron.CurrentObject then return end if (string.len(frame:GetText()) > 0) then frame.text:Hide() end if (frame.hasfocus) then local button = Neuron.CurrentObject local buttonSpec = ((button.bar.data.multiSpec and specoveride) or 1) local state = button.bar.handler:GetAttribute("fauxstate") if (button and buttonSpec and state) then button.DB[buttonSpec][state].macro_Name = frame:GetText() end button.bar:UpdateObjectData() elseif (string.len(frame:GetText()) <= 0) then frame.text:Show() end end --- Triggers when the text in the macro editor's note text box changes -- @param self: macro editor note edit box frame function NeuronGUI:macroNoteEdit_OnTextChanged(frame) if (string.len(frame:GetText()) > 0) then frame.text:Hide() frame.cb:Show() else frame.cb:Hide() end if (frame.hasfocus) then local button = Neuron.CurrentObject local buttonSpec = ((button.bar.data.multiSpec and specoveride) or 1) local state = button.bar.handler:GetAttribute("fauxstate") if (button and buttonSpec and state) then button.DB[buttonSpec][state].macro_Note = frame:GetText() end end end --TODO Revisit & Check description --- Triggers when macro editor loses focus -- @param self: macro editor frame function NeuronGUI:macroOnEditFocusLost(frame) frame.hasfocus = nil local button = Neuron.CurrentObject if (button) then button:UpdateAll() end if (frame.text and string.len(frame:GetText()) <= 0) then frame.text:Show() end end function NeuronGUI:macroIconOnClick(frame) if (frame.iconlist:IsVisible()) then frame.iconlist:Hide() else frame.iconlist:Show() end if frame.SetChecked then frame:SetChecked(false) end end local IconList = {} function NeuronGUI:updateIconList() wipe(IconList) -- We need to avoid adding duplicate spellIDs from the spellbook tabs for your other specs. local activeIcons = {}; for i = 1, GetNumSpellTabs() do local tab, tabTex, offset, numSpells, _ = GetSpellTabInfo(i); offset = offset + 1; local tabEnd = offset + numSpells; for j = offset, tabEnd - 1 do --to get spell info by slot, you have to pass in a pet argument local spellType, ID = GetSpellBookItemInfo(j, "player"); if (spellType ~= "FUTURESPELL") then local fileID = GetSpellBookItemTexture(j, "player"); if (fileID) then activeIcons[fileID] = true; end end if (spellType == "FLYOUT") then local _, _, numSlots, isKnown = GetFlyoutInfo(ID); if (isKnown and numSlots > 0) then for k = 1, numSlots do local spellID, _, isKnown = GetFlyoutSlotInfo(ID, k) if (isKnown) then local fileID = GetSpellTexture(spellID); if (fileID) then activeIcons[fileID] = true; end end end end end end end local iconListTemp = {}; for fileDataID in pairs(activeIcons) do iconListTemp[#iconListTemp + 1] = fileDataID; end local search if (NeuronButtonEditor.search) then search = NeuronButtonEditor.search:GetText() if (string.len(search) < 1) then search = nil end end GetLooseMacroIcons( iconListTemp ); GetLooseMacroItemIcons( iconListTemp ); GetMacroIcons( iconListTemp ); GetMacroItemIcons( iconListTemp ); for index, icon in ipairs(iconListTemp) do if (search) then --I don't know what this does or why it is important, but we want to avoid GetFileName at all costs, and this doesn't appear to break anything. local icon_path local x = GetItemInfo(icon) local y = GetSpellInfo(icon) if (x) then icon_path = x elseif(y) then icon_path = y else icon_path = icon end if (icon_path and type(icon_path)~="number" and icon_path:lower():find(search:lower())) then --if (icon_path:lower():find(search:lower()) or index == 1) then table.insert(IconList, icon) end else table.insert(IconList, icon) end end end function NeuronGUI:MacroIconListUpdate(frame) if (not frame) then frame = NeuronButtonEditor.iconlist end local numIcons, offset, index, texture, blankSet = #IconList+1, FauxScrollFrame_GetOffset(frame) for i,btn in ipairs(frame.buttons) do index = (offset * 14) + i texture = IconList[index] if (index < numIcons) then btn.icon:SetTexture(texture) btn:Show() btn.texture = texture elseif (not blankSet) then btn.icon:SetTexture("") btn:Show() btn.texture = "BLANK" blankSet = true else btn.icon:SetTexture("") btn:Hide() btn.texture = "INTERFACE\\ICONS\\INV_MISC_QUESTIONMARK" end end FauxScrollFrame_Update(frame, math.ceil(numIcons/14), 1, 1, nil, nil, nil, nil, nil, nil, true) end function NeuronGUI:customPathOnShow(frame) local button = Neuron.CurrentObject if (button) then if (button.data.macro_Icon) then --Needs fixing local text = button.data.macro_Icon frame:SetText(text) else frame:SetText("") end else frame:SetText("") end frame:SetCursorPosition(0) end function NeuronGUI:customDoneOnClick(frame) local button = Neuron.CurrentObject if (button) then local text = frame.frame.custompath:GetText() if (#text > 0) then text = "INTERFACE\\"..text:gsub("\\", "\\") button.data.macro_Icon = text button:UpdateIcon() NeuronGUI:UpdateObjectGUI() end end frame:GetParent():Hide() end --Resets all the fields in the editor for the curently selected buttton function NeuronGUI:ResetButtonFields() local button, NBTNE = Neuron.CurrentObject, NeuronButtonEditor local state = button.bar.handler:GetAttribute("fauxstate") local buttonSpec = ((button.bar.data.multiSpec and specoveride) or 1) local data = button.DB[buttonSpec][state] data.actionID = false data.macro_Text = "" data.macro_Icon = false data.macro_Name = "" data.macro_Note = "" data.macro_BlizzMacro = false data.macro_EquipmentSet = false NBTNE.nameedit:SetText("") NBTNE.noteedit:SetFocus() NBTNE.noteedit:SetText("") NBTNE.macroedit.edit:SetFocus() NBTNE.macroedit.edit:SetText("") NBTNE.macroedit.edit:ClearFocus() end function NeuronGUI:ButtonEditor_OnLoad(frame) ---Helper functions that depend on the parent's "frame" local function SpecOnClick(cTab, silent) for tab, panel in pairs(frame.specs) do if (tab == cTab) then tab:SetChecked(true) if (MouseIsOver(cTab)) then PlaySound(SOUNDKIT.IG_CHARACTER_INFO_TAB) end else tab:SetChecked(false) end tab:SetBackdropBorderColor(.5, .5, .5 , .5) end end local function TabsOnClick(cTab, silent) for tab, panel in pairs(frame.tabs) do if (tab == cTab) then tab:SetChecked(true) if (MouseIsOver(cTab)) then PlaySound(SOUNDKIT.IG_CHARACTER_INFO_TAB) end panel:Show() else tab:SetChecked(false) panel:Hide() end end end frame:RegisterForDrag("LeftButton", "RightButton") Neuron.Editors.ACTIONBUTTON[1] = frame Neuron.Editors.ACTIONBUTTON[4] = NeuronGUI.ButtonEditorUpdate frame.tabs = {} frame.specs = {} local f f = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate") f:SetPoint("TOPLEFT", frame.actionlist, "TOPRIGHT", 10, -10) f:SetPoint("BOTTOMRIGHT", -10, 10) f:SetScript("OnUpdate", function(self,elapsed) if (self.elapsed == 0) then NeuronGUI:UpdateObjectGUI(true) end self.elapsed = elapsed end) f.elapsed = 0 frame.macro = f f = CreateFrame("ScrollFrame", "$parentMacroEditor", frame.macro, "NeuronScrollFrameTemplate2") f:SetPoint("TOPLEFT", frame.macro, "TOPLEFT", 2, -95) f:SetPoint("BOTTOMRIGHT", -2, 20) f.edit:SetWidth(350) f.edit:SetHeight(300) f.edit:SetScript("OnTextChanged", function(self) NeuronGUI:macroText_OnTextChanged(self) end) f.edit:SetScript("OnEditFocusGained", function(self) self.hasfocus = true self:SetText(self:GetText():gsub("#autowrite\n", "")) end) f.edit:SetScript("OnEditFocusLost", function(self)NeuronGUI:macroText_OnEditFocusLost(self) end) frame.macroedit = f f = CreateFrame("Button", "focus", frame.macro, BackdropTemplateMixin and "BackdropTemplate") f:SetPoint("TOPLEFT", frame.macroedit, "TOPLEFT", -10, 10) f:SetPoint("BOTTOMRIGHT", -18, 0) f:SetWidth(350) f:SetHeight(300) f:SetScript("OnClick", function(self) self.macroedit.edit:SetFocus() end) f.macroedit = frame.macroedit frame.macrofocus = f f = CreateFrame("Frame", nil, frame.macroedit, BackdropTemplateMixin and "BackdropTemplate") f:SetPoint("TOPLEFT", -10, 10) f:SetPoint("BOTTOMRIGHT", 4, -20) f:SetFrameLevel(frame.macroedit.edit:GetFrameLevel()-1) frame.macroeditBG = f NeuronGUI:SubFrameBlackBackdrop_OnLoad(f) f = CreateFrame("CheckButton", nil, frame.macro, "NeuronMacroIconButtonTemplate") f:SetID(0) f:SetPoint("BOTTOMLEFT", frame.macroedit, "TOPLEFT", -6, 15) f:SetWidth(54) f:SetHeight(54) f:SetScript("OnEnter", function() end) f:SetScript("OnLeave", function() end) f:SetHighlightTexture("Interface\\Buttons\\ButtonHilight-Square") f.slot:SetVertexColor(0.5,0.5,0.5,1) f.onclick_func = function(self) NeuronGUI:macroIconOnClick(self) end f.onupdate_func = function() end f.elapsed = 0 f.click = false f.parent = frame f.iconlist = frame.iconlist f.iconlist:SetScript("OnShow", function(self) self.scrollbar.scrollStep = 1 NeuronObjectEditor.done:Hide() NeuronGUI:updateIconList() NeuronGUI:MacroIconListUpdate(self) end) f.iconlist:SetScript("OnHide", function() NeuronObjectEditor.done:Show() end) frame.macroicon = f f = CreateFrame("Button", nil, frame.macro, BackdropTemplateMixin and "BackdropTemplate") f:SetPoint("BOTTOMLEFT", frame.macroicon, "BOTTOMRIGHT", 2, -7) f:SetWidth(34) f:SetHeight(34) --f:SetScript("OnClick", function(self) SetActiveSpecGroup(Neuron.activeSpec == 1 and 2 or 1); end) f:SetScript("OnClick", function(self) NeuronGUI:ResetButtonFields(self) end) f:SetScript("OnEnter", function(self) if ( self.tooltipText ) then GameTooltip:SetOwner(self, self.tooltipOwnerPoint or "ANCHOR_RIGHT") GameTooltip:SetText(self.tooltipText) end GameTooltip:Show(); end) f:SetScript("OnLeave", function(self) GameTooltip:Hide(); end) f:SetNormalTexture("Interface\\AddOns\\Neuron\\Images\\UI-RotationRight-Button-Up") f:SetPushedTexture("Interface\\AddOns\\Neuron\\Images\\UI-RotationRight-Button-Down") f:SetHighlightTexture("Interface\\AddOns\\Neuron\\Images\\UI-Common-MouseHilight") f.tooltipText = _G.RESET frame.reset_button = f f = CreateFrame("CheckButton", nil, frame.macro, "NeuronCheckButtonTemplate1") f:SetWidth(68) f:SetHeight(33.5) f:SetPoint("LEFT", frame.reset_button, "RIGHT", -1, 1.25) f:SetScript("OnClick", function(self) SpecOnClick(self); specoveride = 1 ; NeuronGUI:ButtonEditorUpdate() end) f:SetChecked(false) f.text:SetText("Spec1") f.tooltipText = L["Display button for specialization 1"] frame.spec1 = f; frame.specs[f] = frame.spec1 f = CreateFrame("frame", nil, frame.spec1, BackdropTemplateMixin and "BackdropTemplate") f:SetWidth(20) f:SetHeight(20) f:SetPoint("LEFT",10) f.texture = f:CreateTexture(nil, "OVERLAY") f.texture:SetTexture("Interface\\Buttons\\UI-CheckBox-Check") f.texture:SetAlpha(1) f.texture:SetAllPoints() f:Show() frame.activespc = f f = CreateFrame("CheckButton", nil, frame.macro, "NeuronCheckButtonTemplate1") f:SetWidth(68) f:SetHeight(33.5) f:SetPoint("LEFT", frame.spec1, "RIGHT", 0, 0) f:SetScript("OnClick", function(self) SpecOnClick(self); specoveride = 2 ; NeuronGUI:ButtonEditorUpdate() end) f:SetChecked(false) f.text:SetText("Spec2") f.tooltipText = L["Display button for specialization 2"] frame.spec2 = f; frame.specs[f] = frame.spec2 f = CreateFrame("CheckButton", nil, frame.macro, "NeuronCheckButtonTemplate1") f:SetWidth(68) f:SetHeight(33.5) f:SetPoint("LEFT", frame.spec2, "RIGHT", 0, 0) f:SetScript("OnClick", function(self) SpecOnClick(self); specoveride = 3 ; NeuronGUI:ButtonEditorUpdate() end) f:SetChecked(false) f.text:SetText("Spec3") f.tooltipText = L["Display button for specialization 3"] frame.spec3 = f; frame.specs[f] = frame.spec3 f = CreateFrame("CheckButton", nil, frame.macro, "NeuronCheckButtonTemplate1") f:SetWidth(68) f:SetHeight(33.5) f:SetPoint("LEFT", frame.spec3, "RIGHT", 0, 0) f:SetScript("OnClick", function(self) SpecOnClick(self); specoveride = 4 ; NeuronGUI:ButtonEditorUpdate() end) f:SetChecked(false) f.text:SetText("Spec4") f.tooltipText = L["Display button for specialization 4"] frame.spec4 = f; frame.specs[f] = frame.spec4 f = CreateFrame("Button", nil, frame.macro, "UIPanelButtonTemplate")--"NeuronCheckButtonTemplate1") f:SetWidth(104) f:SetHeight(33.5) f:SetPoint("LEFT", frame.spec3, "RIGHT", 0, 0) f:SetScript("OnClick", function() frame.macroedit.edit:ClearFocus() frame.nameedit:ClearFocus() frame.noteedit:ClearFocus() end) f:SetText(_G.SAVE) f.tooltipText = _G.SAVE frame.savestate = f f = CreateFrame("EditBox", nil, frame.macro, BackdropTemplateMixin and "BackdropTemplate") f:SetMultiLine(false) f:SetNumeric(false) f:SetAutoFocus(false) f:SetTextInsets(5,5,5,5) f:SetFontObject("GameFontHighlight") f:SetJustifyH("CENTER") f:SetPoint("TOPLEFT", frame.macroicon, "TOPRIGHT", 5, 3.5) f:SetPoint("BOTTOMRIGHT", frame.macroeditBG, "TOP", -18, 32) f:SetScript("OnTextChanged", function(self) NeuronGUI:macroNameEdit_OnTextChanged(self) end) f:SetScript("OnEditFocusGained", function(self) self.text:Hide() self.hasfocus = true end) f:SetScript("OnEditFocusLost", function(self) if (string.len(self:GetText()) < 1) then self.text:Show() end NeuronGUI:macroOnEditFocusLost(self) end) f:SetScript("OnEscapePressed", function(self) self:ClearFocus() end) f:SetScript("OnTabPressed", function(self) self:ClearFocus() end) frame.nameedit = f f.text = f:CreateFontString(nil, "ARTWORK", "GameFontNormalSmall"); f.text:SetPoint("CENTER") f.text:SetJustifyH("CENTER") f.text:SetText(L["Macro Name"]) f = CreateFrame("Frame", nil, frame.nameedit, BackdropTemplateMixin and "BackdropTemplate") f:SetPoint("TOPLEFT", 0, 0) f:SetPoint("BOTTOMRIGHT", 0, 0) f:SetFrameLevel(frame.nameedit:GetFrameLevel()-1) NeuronGUI:SubFrameBlackBackdrop_OnLoad(f) f = CreateFrame("EditBox", nil, frame.macro, BackdropTemplateMixin and "BackdropTemplate") f:SetMultiLine(false) f:SetMaxLetters(50) f:SetNumeric(false) f:SetAutoFocus(false) f:SetJustifyH("CENTER") f:SetJustifyV("CENTER") f:SetTextInsets(5,5,5,5) f:SetFontObject("GameFontHighlightSmall") f:SetPoint("TOPLEFT", frame.nameedit, "TOPRIGHT", 0, 0) f:SetPoint("BOTTOMRIGHT", frame.macroeditBG, "TOPRIGHT",-16, 32) f:SetScript("OnTextChanged", function(self) NeuronGUI:macroNoteEdit_OnTextChanged(self) end) f:SetScript("OnEditFocusGained", function(self) self.text:Hide() self.hasfocus = true end) f:SetScript("OnEditFocusLost", function(self) if (string.len(self:GetText()) < 1) then self.text:Show() end NeuronGUI:macroOnEditFocusLost(self) end) f:SetScript("OnEscapePressed", function(self) self:ClearFocus() end) f:SetScript("OnTabPressed", function(self) self:ClearFocus() end) frame.noteedit = f f.text = f:CreateFontString(nil, "ARTWORK", "GameFontNormalSmall"); f.text:SetPoint("CENTER", 10, 0) f.text:SetJustifyH("CENTER") f.text:SetText(L["Click here to edit macro note"]) f = CreateFrame("Frame", nil, frame.noteedit, BackdropTemplateMixin and "BackdropTemplate") f:SetPoint("TOPLEFT", 0, 0) f:SetPoint("BOTTOMRIGHT", 15, 0) f:SetFrameLevel(frame.noteedit:GetFrameLevel()-1) NeuronGUI:SubFrameBlackBackdrop_OnLoad(f) f = CreateFrame("CheckButton", nil, frame.macro, "NeuronOptionsCheckButtonTemplate") f:SetID(0) f:SetWidth(16) f:SetHeight(16) f:SetScript("OnShow", function() end) f:SetScript("OnClick", function() end) f:SetPoint("RIGHT", frame.noteedit, "RIGHT", 12, 0) f:SetFrameLevel(frame.noteedit:GetFrameLevel()+1) f:Hide() f.tooltipText = L["Use macro note as button tooltip"] frame.usenote = f frame.noteedit.cb = f frame.iconlist.buttons = {} local count, x, y = 0, 28, -16 for i=1,112 do f = CreateFrame("CheckButton", nil, frame.iconlist, "NeuronMacroIconButtonTemplate") f:SetID(i) f:SetFrameLevel(frame.iconlist:GetFrameLevel()+2) f.slot:SetVertexColor(0.5,0.5,0.5,1) f:SetScript("OnEnter", function(self) self.fl = self:GetFrameLevel() self:SetFrameLevel(self.fl+1) self:GetNormalTexture():SetPoint("TOPLEFT", -7, 7) self:GetNormalTexture():SetPoint("BOTTOMRIGHT", 7, -7) self.slot:SetPoint("TOPLEFT", -10, 10) self.slot:SetPoint("BOTTOMRIGHT", 10, -10) end) f:SetScript("OnLeave", function(self) self:SetFrameLevel(self.fl) self:GetNormalTexture():SetPoint("TOPLEFT", 2, -2) self:GetNormalTexture():SetPoint("BOTTOMRIGHT", -2, 2) self.slot:SetPoint("TOPLEFT", -2, 2) self.slot:SetPoint("BOTTOMRIGHT", 2, -2) end) f.onclick_func = function(self, button, down) NeuronGUI:macroButton_Changed(self, button, down) end count = count + 1 f:SetPoint("CENTER", frame.iconlist, "TOPLEFT", x, y) if (count == 14) then x = 28; y = y - 35; count = 0 else x = x + 35.5 end table.insert(frame.iconlist.buttons, f) end f = CreateFrame("EditBox", nil, frame.iconlist, "NeuronEditBoxTemplateSmall") f:SetWidth(378) f:SetHeight(30) f:SetJustifyH("LEFT") f:SetTextInsets(22, 0, 0, 0) f:SetPoint("TOPLEFT", 8, 36) f:SetScript("OnShow", function(self) self:SetText("") end) f:SetScript("OnEnterPressed", function(self) NeuronGUI:updateIconList(); NeuronGUI:MacroIconListUpdate(); self:ClearFocus(); self.hasfocus = nil; end) f:SetScript("OnTabPressed", function(self) NeuronGUI:updateIconList(); NeuronGUI:MacroIconListUpdate(); self:ClearFocus(); self.hasfocus = nil; end) f:SetScript("OnEscapePressed", function(self) self:SetText(""); NeuronGUI:updateIconList(); NeuronGUI:MacroIconListUpdate(); self:ClearFocus(); self.hasfocus = nil; end) f:SetScript("OnEditFocusGained", function(self) self.text:Hide() self.cancel:Show() self.hasfocus = true end) f:SetScript("OnEditFocusLost", function(self) if (string.len(self:GetText()) < 1) then self.text:Show() self.cancel:Hide() end self.hasfocus = nil end) f:SetScript("OnTextChanged", function(self) if (string.len(self:GetText()) < 1 and not self.hasfocus) then self.text:Show() self.cancel:Hide() end end) frame.search = f frame.search:Hide() --hide search frame because it is broken and returns nonesense NeuronGUI:SubFrameBlackBackdrop_OnLoad(f) f.cancel = CreateFrame("Button", nil, f, BackdropTemplateMixin and "BackdropTemplate") f.cancel:SetWidth(20) f.cancel:SetHeight(20) f.cancel:SetPoint("RIGHT", -3, 0) f.cancel:SetScript("OnClick", function(self) self.parent:SetText("") NeuronGUI:updateIconList() NeuronGUI:MacroIconListUpdate() self.parent:ClearFocus() self.parent.hasfocus = nil end) f.cancel:Hide() f.cancel.tex = f.cancel:CreateTexture(nil, "OVERLAY") f.cancel.tex:SetTexture("Interface\\FriendsFrame\\ClearBroadcastIcon") f.cancel.tex:SetAlpha(0.7) f.cancel.tex:SetAllPoints() f.cancel.parent = f f.searchicon = f:CreateTexture(nil, "OVERLAY") f.searchicon:SetTexture("Interface\\Common\\UI-Searchbox-Icon") f.searchicon:SetPoint("LEFT", 6, -2) f.text = f:CreateFontString(nil, "ARTWORK", "GameFontDisable"); f.text:SetPoint("LEFT", 22, 0) f.text:SetJustifyH("LEFT") f.text:SetText(L["Search"]) f = CreateFrame("Button", nil, frame.iconlist, "NeuronCheckButtonTemplate1") f:SetWidth(122) f:SetHeight(35) f:SetPoint("TOPLEFT", frame.search, "TOPRIGHT", -1, 4) f:SetScript("OnClick", function(self) self:Hide() self.frame.search:Hide() self.frame.customdone:Show() self.frame.customcancel:Show() self.frame.custompath:Show() end) f.text:SetText(L["Custom Icon"]) f.frame = frame frame.customicon = f f = CreateFrame("Button", nil, frame.iconlist, "NeuronCheckButtonTemplate1") f:SetWidth(60) f:SetHeight(35) f:SetPoint("TOPLEFT", frame.search, "TOPRIGHT", -1, 4) f:SetScript("OnClick", function(self) self:Hide() self.frame.customcancel:Hide() self.frame.custompath:Hide() self.frame.customicon:Show() self.frame.search:Show() NeuronGUI:customDoneOnClick(self) end) f:SetFrameLevel(frame.customicon:GetFrameLevel()+1) f:Hide() f.text:SetText(L["Done"]) f.frame = frame frame.customdone = f f = CreateFrame("Button", nil, frame.iconlist, "NeuronCheckButtonTemplate1") f:SetWidth(60) f:SetHeight(35) f:SetPoint("LEFT", frame.customdone, "RIGHT", 0, 0) f:SetScript("OnClick", function(self) self:Hide() self.frame.customdone:Hide() self.frame.custompath:Hide() self.frame.customicon:Show() self.frame.search:Show() end) f:SetFrameLevel(frame.customicon:GetFrameLevel()+1) f:Hide() f.text:SetText(L["Cancel"]) f.frame = frame frame.customcancel = f f = CreateFrame("EditBox", nil, frame.iconlist, "NeuronEditBoxTemplateSmall") f:SetWidth(378) f:SetHeight(30) f:SetJustifyH("LEFT") f:SetPoint("TOPLEFT", frame.search, "TOPLEFT", 0, 0) f:SetScript("OnShow", function(self) NeuronGUI:customPathOnShow(self) end) --f:SetFrameLevel(frame.search:GetFrameLevel()+1) f:Hide() f:SetScript("OnEscapePressed", function(self) NeuronGUI:ButtonEditorIconList_ResetCustom(self.frame) end) f:SetScript("OnEnterPressed", function(self) self:ClearFocus() end) f:SetScript("OnTabPressed", function(self) self:ClearFocus() end) --f:SetScript("OnEditFocusGained", function(self) self.text:Hide() self.cancel:Show() self.hasfocus = true end) --f:SetScript("OnEditFocusLost", function(self) if (string.len(self:GetText()) < 1) then self.text:Show() self.cancel:Hide() end self.hasfocus = nil end) f:SetScript("OnTextChanged", function(self) self:SetText(self:GetText():upper()) end) f.frame = frame frame.custompath = f NeuronGUI:SubFrameBlackBackdrop_OnLoad(f) f.text = f:CreateFontString(nil, "ARTWORK", "GameFontHighlight"); f.text:SetPoint("LEFT", 8, 0) f.text:SetJustifyH("LEFT") f.text:SetText(L["Path"]..": INTERFACE\\") f:SetTextInsets(f.text:GetWidth()+5, 0, 0, 0) f = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate") f:SetPoint("TOPLEFT", frame.actionlist, "TOPRIGHT", 10, -10) f:SetPoint("BOTTOMRIGHT", -10, 10) f:SetScript("OnUpdate", function(self,elapsed) if (self.elapsed == 0) then NeuronGUI:UpdateObjectGUI(true) end self.elapsed = elapsed end) f:Hide() f.elapsed = 0 frame.action = f f = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate") f:SetPoint("TOPLEFT", frame.actionlist, "TOPRIGHT", 10, -25) f:SetPoint("BOTTOMRIGHT", -10, 10) f:SetScript("OnUpdate", function(self,elapsed) if (self.elapsed == 0) then NeuronGUI:UpdateObjectGUI(true) end self.elapsed = elapsed end) f:SetScript("OnShow", function(self) LibStub("AceConfigDialog-3.0"):Open("Neuron-Flyout", NBTNE.ACEmenu) end) f:Hide() f.elapsed = 0 frame.options = f --- /flyout :::::: f = CreateFrame("CheckButton", nil, frame, "NeuronCheckButtonTemplate1") f:SetWidth(150) f:SetHeight(28) f:SetPoint("TOPRIGHT", frame, "TOPLEFT", 287, -10) f:SetScript("OnClick", function(self) TabsOnClick(self) end) f:SetFrameLevel(frame:GetFrameLevel()+1) f:SetChecked(true) f.text:SetText(L["Macro Data"]) frame.tab1 = f; frame.tabs[f] = frame.macro local f = CreateFrame("CheckButton", nil, frame, "NeuronCheckButtonTemplate1") f:SetWidth(150) f:SetHeight(28) f:SetPoint("RIGHT", frame.tab1, "RIGHT", 150, 0) f:SetScript("OnClick", function(self) TabsOnClick(self) end) f:SetFrameLevel(frame:GetFrameLevel()+1) f:SetChecked(false) f.text:SetText(L["Flyout Options"]) frame.tab2 = f; frame.tabs[f] = frame.options end function NeuronGUI:ButtonEditorIconList_ResetCustom(frame) frame.customdone:Hide() frame.customcancel:Hide() frame.custompath:Hide() --frame.search:Show() frame.customicon:Show() end function NeuronGUI:ColorPicker_OnLoad(frame) frame:SetFrameStrata("TOOLTIP") frame.apply.text:SetText(L["Apply"]) frame.cancel.text:SetText(L["Cancel"]) end function NeuronGUI:ColorPicker_OnShow(frame) local r,g,b = frame:GetColorRGB() frame.redvalue:SetText(r); frame.redvalue:SetCursorPosition(0) frame.greenvalue:SetText(g); frame.greenvalue:SetCursorPosition(0) frame.bluevalue:SetText(b); frame.bluevalue:SetCursorPosition(0) frame.hexvalue:SetText(string.upper(string.format("%02x%02x%02x", math.ceil((r*255)), math.ceil((g*255)), math.ceil((b*255))))); frame.hexvalue:SetCursorPosition(0) end function NeuronGUI:ColorPicker_OnColorSelect(frame, r, g, b) frame.redvalue:SetText(r) frame.greenvalue:SetText(g) frame.bluevalue:SetText(b) frame.hexvalue:SetText(string.upper(string.format("%02x%02x%02x", math.ceil((r*255)), math.ceil((g*255)), math.ceil((b*255))))) end function NeuronGUI:MainMenu_OnLoad(frame) NeuronGUI:SubFrameHoneycombBackdrop_OnLoad(frame) frame:SetWidth(width) frame:SetHeight(height) --frame:RegisterEvent("ADDON_LOADED") frame:RegisterForDrag("LeftButton", "RightButton") end --not an optimal solution, but it works for now function NeuronGUI:hookHandler(handler) if not NeuronGUI:IsHooked("OnAttributeChanged") then NeuronGUI:SecureHookScript(handler, "OnAttributeChanged", function(self,name,value) if(Neuron.CurrentObject) then if (NeuronObjectEditor:IsVisible() and self == Neuron.CurrentObject.bar.handler and name == "activestate" and not NeuronButtonEditor.macroedit.edit.hasfocus) then NeuronButtonEditor.macro.elapsed = 0 end end end) end end function NeuronGUI:runUpdater(frame, elapsed) frame.elapsed = elapsed if (frame.elapsed > 0) then NeuronGUI:UpdateBarGUI() NeuronGUI:UpdateObjectGUI() frame:Hide() end end --- ACE GUI OPTION GET & SET FUnctions -- @param self: macro editor frame function NeuronGUI:settingGetter(info) if Neuron.CurrentBar then return Neuron.CurrentBar.data[ info[#info]] end end function NeuronGUI:SetBarCastTarget(value, toggle) if Neuron.CurrentBar then Neuron.CurrentBar:SetCastingTarget(value, true, toggle) end end --/flyout s+,i+:teleport,!drake:linear:top:bottom:1:click local FLYOUTMACRO = { ["types"] = { ["item"] = "item"}, ["keys"] = "", ["shape"] = "LINEAR", ["attach"] = "TOP", ["relative"] = "BOTTOM", ["columns"] = 3, ["mouse"] = "CLICK", } local flyouttypes = {} function NeuronGUI:flyoutSetter(info, value) FLYOUTMACRO[info[#info]]= value end function NeuronGUI:flyoutTypeSetter(info, value) if value then FLYOUTMACRO["types"][info[#info]]= value else FLYOUTMACRO["types"][info[#info]] = nil end end function NeuronGUI:flyoutTypeGetter(info) return FLYOUTMACRO["types"][info[#info]] end function NeuronGUI:flyoutGetter(info) return FLYOUTMACRO[info[#info]] end local finalmacro = "" function NeuronGUI:createflyoutmacro() local macrotypes = "" for name,value in pairs(FLYOUTMACRO["types"]) do macrotypes = macrotypes..","..name end finalmacro = "/flyout "..macrotypes..":"..FLYOUTMACRO["keys"]..":"..FLYOUTMACRO["shape"]..":"..FLYOUTMACRO["attach"]..":"..FLYOUTMACRO["relative"]..":"..FLYOUTMACRO["columns"]..":"..FLYOUTMACRO["mouse"] end --ACE GUI OPTION TABLE for Bar Targeting NeuronGUI.target_options = { name = "Neuron-GUI", type = 'group', args = { selfCast = { order = 10, type = "toggle", name = L["Self-Cast by modifier"], desc = L["Toggle the use of the modifier-based self-cast functionality."], get = function(info) return NeuronGUI:settingGetter(info) end, --getFunc, set = function(info, value) NeuronGUI:SetBarCastTarget("selfCast", value) end, }, setselfcastmod = { order = 20, type = "select", name = L["Self-Cast by modifier"], desc = L["Select the Self-Cast Modifier"], get = function(info) return GetModifiedClick("SELFCAST") end, set = function(info, value) SetModifiedClick("SELFCAST", value) SaveBindings(GetCurrentBindingSet() or 1) Neuron.ACTIONBUTTON:UpdateMacroCastTargets(true) end, values = { NONE = _G.NONE, ALT = _G.ALT_KEY_TEXT, SHIFT = _G.SHIFT_KEY_TEXT, CTRL = _G.CTRL_KEY_TEXT }, }, selfcast_nl = { order = 30, type = "description", name = "", }, focusCast = { order = 50, type = "toggle", name = L["Focus-Cast by modifier"], desc = L["Toggle the use of the modifier-based focus-cast functionality."], get = function(info) return NeuronGUI:settingGetter(info) end, --getFunc, set = function(info, value) NeuronGUI:SetBarCastTarget("focusCast", value) end, }, setfocuscastmod = { order = 60, type = "select", name = L["Focus-Cast by modifier"], desc = L["Select the Focus-Cast Modifier"], get = function(info) return GetModifiedClick("FOCUSCAST") end, set = function(info, value) SetModifiedClick("FOCUSCAST", value) SaveBindings(GetCurrentBindingSet() or 1) Neuron.ACTIONBUTTON:UpdateMacroCastTargets(true) end, values = { NONE = _G.NONE, ALT = _G.ALT_KEY_TEXT, SHIFT = _G.SHIFT_KEY_TEXT, CTRL = _G.CTRL_KEY_TEXT }, }, focuscast_nl = { order = 70, type = "description", name = "", }, rightClickTarget = { order = 80, type = "toggle", name = L["Right-click Self-Cast"], desc = L["Toggle the use of the right-click self-cast functionality."], get = function(info) return NeuronGUI:settingGetter(info) end, --getFunc, set = function(info, value) NeuronGUI:SetBarCastTarget("rightClickTarget", value) end, }, rightclickselfcast_nl = { order = 90, type = "description", name = "", }, mouseOverCast = { order = 180, type = "toggle", name = L["Mouse-Over Casting"], desc = L["Toggle the use of the modifier-based mouse-over cast functionality."], get = function(info) return NeuronGUI:settingGetter(info) end, --getFunc, set = function(info, value) NeuronGUI:SetBarCastTarget("mouseOverCast", value) end, }, mouseovermod = { order = 301, type = "select", name = L["Mouse-Over Casting Modifier"], desc = L["Select a modifier for Mouse-Over Casting"], get = function() return DB.mouseOverMod end, --getFunc, set = function(info, value) DB.mouseOverMod = value Neuron.ACTIONBUTTON:UpdateMacroCastTargets(true) end, values = { NONE = _G.NONE, ALT = _G.ALT_KEY_TEXT, SHIFT = _G.SHIFT_KEY_TEXT, CTRL = _G.CTRL_KEY_TEXT }, }, mouseovermod_desc = { order = 302, type = "description", name = "\n" .. L["Spell_Targeting_Modifier_None_Reminder"], }, } , } NeuronGUI.flyout_options = { name = "Flyout-Options", type = 'group', args = { item = { order = 10, type = "toggle", name = L["Item"], get = function(info) return NeuronGUI:flyoutTypeGetter(info) end, --getFunc, set = function(info, value) NeuronGUI:flyoutTypeSetter(info, value) end, }, spell = { order = 10, type = "toggle", name = L["Spell"], get = function(info) return NeuronGUI:flyoutTypeGetter(info) end, --getFunc, set = function(info, value) NeuronGUI:flyoutTypeSetter(info, value) end, }, mount = { order = 10, type = "toggle", name = L["Mount"], get = function(info) return NeuronGUI:flyoutTypeGetter(info) end, --getFunc, set = function(info, value) NeuronGUI:flyoutTypeSetter(info, value) end, }, companion = { order = 10, type = "toggle", name = L["Companion"], get = function(info) return NeuronGUI:flyoutTypeGetter(info) end, --getFunc, set = function(info, value) NeuronGUI:flyoutTypeSetter(info, value) end, }, types = { order = 10, type = "toggle", name = L["Type"], get = function(info) return NeuronGUI:flyoutTypeGetter(info) end, --getFunc, set = function(info, value) NeuronGUI:flyoutTypeSetter(info, value) end, }, profession = { order = 10, type = "toggle", name = L["Profession"], get = function(info) return NeuronGUI:flyoutTypeGetter(info) end, --getFunc, set = function(info, value) NeuronGUI:flyoutTypeSetter(info, value) end, }, fun = { order = 10, type = "toggle", name = L["Fun"], get = function(info) return NeuronGUI:flyoutTypeGetter(info) end, --getFunc, set = function(info, value) NeuronGUI:flyoutTypeSetter(info, value) end, }, favorite = { order = 10, type = "toggle", name = L["Favorite"], get = function(info) return NeuronGUI:flyoutTypeGetter(info) end, --getFunc, set = function(info, value) NeuronGUI:flyoutTypeSetter(info, value) end, }, keys = { order = 11, type = "input", name = L["Keys"], get = function(info) return NeuronGUI:flyoutGetter(info) end, --getFunc, set = function(info, value) NeuronGUI:flyoutSetter(info, value) end, }, shape = { order = 12, type = "select", name = L["Shape"], get = function(info) return NeuronGUI:flyoutGetter(info) end, --getFunc, set = function(info, value) NeuronGUI:flyoutSetter(info, value) end, values = { LINEAR = "Linear", CIRCULAR = "Circular" }, }, attach = { order = 13, type = "select", name = L["Attach Point"], get = function(info) return NeuronGUI:flyoutGetter(info) end, --getFunc, set = function(info, value) NeuronGUI:flyoutSetter(info, value) end, values = { LEFT = L["Left"], RIGHT = L["Right"],TOP = L["Top"], BOTTOM = L["Bottom"],TOPLEFT = L["Top-Left"], TOPRIGHT = L["Top-Right"], BOTTOMLEFT = L["Bottom-Left"], BOTTOMRIGHT = L["Bottom-Right"], CENTER = L["Center"] }, }, relative = { order = 14, type = "select", name = L["Relative To"]..":", get = function(info) return NeuronGUI:flyoutGetter(info) end, --getFunc, set = function(info, value) NeuronGUI:flyoutSetter(info, value) end, values = { LEFT = L["Left"], RIGHT = L["Right"],TOP = L["Top"], BOTTOM = L["Bottom"],TOPLEFT = L["Top-Left"], TOPRIGHT = L["Top-Right"], BOTTOMLEFT = L["Bottom-Left"], BOTTOMRIGHT = L["Bottom-Right"], CENTER = L["Center"] }, }, columns = { order = 15, type = "range", name = L["Columns"].."/"..L["Radius"], min = -25, max = 25, step = 1, get = function(info) return NeuronGUI:flyoutGetter(info) end, --getFunc, set = function(info, value) NeuronGUI:flyoutSetter(info, value) end, }, mouse = { order = 16, type = "select", name = L["Show On"]..":", get = function(info) return NeuronGUI:flyoutGetter(info) end, --getFunc, set = function(info, value) NeuronGUI:flyoutSetter(info, value) end, values = { CLICK = L["Click"], MOUSE = L["Mouseover"] }, }, generate = { order = 17, type = "execute", name = L["Generate Macro"], func = function() NeuronGUI:createflyoutmacro() end, }, output = { order = 18, type = "input", name = L["Copy and Paste the text below"]..":", get = function(info) return finalmacro end, width = "full" }, }, } --ACE GUI OPTION TABLE NeuronGUI.interfaceOptions = { name = "Neuron", type = 'group', args = { moreoptions={ name = L["Options"], type = "group", order = 0, args={ BlizzardBar = { order = 1, name = L["Display the Blizzard UI"], desc = L["Shows / Hides the Default Blizzard UI"], type = "toggle", set = function() Neuron:ToggleBlizzUI() end, get = function() return DB.blizzbar end, width = "full", }, NeuronMinimapButton = { order = 2, name = L["Display Minimap Button"], desc = L["Toggles the minimap button."], type = "toggle", set = function() Neuron:Minimap_ToggleIcon() end, get = function() return not DB.NeuronIcon.hide end, width = "full" }, }, }, experimental = { name = L["Experimental"], desc = L["Experimental Options"], type = "group", order = 1001, args = { Header = { order = 1, name = L["Experimental Options"], type = "header", }, Warning = { order = 2, type = "description", name = DIM_RED_FONT_COLOR:WrapTextInColorCode(L["Experimental_Options_Warning"]), fontSize = "large", }, importexport={ name = L["Profile"].." "..L["Import"].."/"..L["Export"], type = "group", order = 1, args={ Header = { order = 1, name = L["Profile"].." "..L["Import"].."/"..L["Export"], type = "header", }, Instructions = { order = 2, name = L["ImportExport_Desc"], type = "description", fontSize = "medium", }, TextBox = { order = 3, name = L["Import or Export the current profile:"], desc = DIM_RED_FONT_COLOR:WrapTextInColorCode(L["ImportExport_WarningDesc"]), type = "input", multiline = 22, confirm = function() return L["ImportWarning"] end, validate = false, set = function(self, input) Neuron:SetSerializedAndCompressedProfile(input) end, get = function() return Neuron:GetSerializedAndCompressedProfile() end, width = "full", }, }, }, }, }, }, } Neuron.Editors = {} ---------------------------------------------------------------------------- --------------------------Object Editor------------------------------------- ---------------------------------------------------------------------------- function NeuronGUI:ObjEditor_OnShow(editor) local object = editor.object if (object) then if (object.bar) then editor:SetFrameLevel(object.bar:GetFrameLevel()+1) end end end function NeuronGUI:ObjEditor_OnHide(editor) end function NeuronGUI:ObjEditor_OnEnter(editor) editor.select:Show() GameTooltip:SetOwner(editor, "ANCHOR_RIGHT") GameTooltip:Show() end function NeuronGUI:ObjEditor_OnLeave(editor) if (editor.object ~= Neuron.CurrentObject) then editor.select:Hide() end GameTooltip:Hide() end function NeuronGUI:ObjEditor_OnClick(editor, button) local newObj, newEditor = Neuron.BUTTON:ChangeObject(editor.object) if (button == "RightButton") then if (NeuronObjectEditor) then if (not newObj and NeuronObjectEditor:IsVisible()) then NeuronObjectEditor:Hide() elseif (newObj and newEditor) then Neuron.NeuronGUI:ObjectEditor_OnShow(NeuronObjectEditor); NeuronObjectEditor:Show() else NeuronObjectEditor:Show() end end elseif (newObj and newEditor and NeuronObjectEditor:IsVisible()) then Neuron.NeuronGUI:ObjectEditor_OnShow(NeuronObjectEditor); NeuronObjectEditor:Show() end if (NeuronObjectEditor and NeuronObjectEditor:IsVisible()) then Neuron.NeuronGUI:UpdateObjectGUI() end end function NeuronGUI:ObjEditor_OnEvent(editor, eventName, ...) local event = "ObjEditor_".. eventName if (NeuronGUI[event]) then NeuronGUI[event](NeuronGUI, editor, ...) end end function NeuronGUI:ObjEditor_CreateEditFrame(button) local editor = CreateFrame("Button", button:GetName().."EditFrame", button, "NeuronEditFrameTemplate") setmetatable(editor, { __index = CreateFrame("Button") }) editor:EnableMouseWheel(true) editor:RegisterForClicks("AnyDown") editor:SetAllPoints(button) editor:SetScript("OnShow", function(self) NeuronGUI:ObjEditor_OnShow(self) end) editor:SetScript("OnHide", function(self) NeuronGUI:ObjEditor_OnHide(self) end) editor:SetScript("OnEnter", function(self) NeuronGUI:ObjEditor_OnEnter(self) end) editor:SetScript("OnLeave", function(self) NeuronGUI:ObjEditor_OnLeave(self) end) editor:SetScript("OnClick", function(self, button) NeuronGUI:ObjEditor_OnClick(self, button) end) editor:SetScript("OnEvent", function(self, event, ...) NeuronGUI:ObjEditor_OnEvent(self, event, ...) end) editor.type:SetText(L["Edit"]) editor.object = button editor.editType = "button" button.editor = editor Neuron.EDITIndex[button.class..button.bar.DB.id.."_"..button.id] = editor editor:Hide() end ---------------------------------------------------------------------------- --------------------------Status Bar Editor--------------------------------- ---------------------------------------------------------------------------- local sbOpt = { types = {}, chk = {}, adj = {} } local sbTypes = { { "cast", L["Cast Bar"] }, { "xp", L["XP Bar"] }, { "rep", L["Rep Bar"] }, { "mirror", L["Mirror Bar"] } } local sbchkOptions = { [1] = { "cast", L["Cast Icon"], "UpdateCastIcon", "showIcon" } } local BarTexturesData = {} for i,data in ipairs(Neuron.BarTextures) do BarTexturesData[i] = data[3] end local BarBordersData = {} for i,data in ipairs(Neuron.BarBorders) do BarBordersData[i] = data[1] end local sbadjOptions = { [1] = { "WIDTH", L["Width"], 1, "UpdateWidth", 0.5, 1, nil, nil, "%0.1f", 1, "" }, [2] = { "HEIGHT", L["Height"], 1, "UpdateHeight", 0.5, 1, nil, nil, "%0.1f", 1, "" }, [3] = { "BARFILL", L["Bar Fill"], 2, "UpdateBarFill", nil, nil, nil, BarTexturesData }, [4] = { "BORDER", L["Border"], 2, "UpdateBorder", nil, nil, nil, BarBordersData }, [5] = { "ORIENT", L["Orientation"], 2, "UpdateOrientation", nil, nil, nil, Neuron.BarOrientations }, [6] = { "UNIT_WATCH", L["Unit"], 2, "UpdateUnit", nil, nil, nil, Neuron.BarUnits }, [7] = { "CENTER_TEXT", L["Center Text"], 2, "UpdateCenterText", nil, nil, nil, Neuron.sbStrings }, [8] = { "LEFT_TEXT", L["Left Text"], 2, "UpdateLeftText", nil, nil, nil, Neuron.sbStrings }, [9] = { "RIGHT_TEXT", L["Right Text"], 2, "UpdateRightText", nil, nil, nil, Neuron.sbStrings }, [10] = { "MOUSE_TEXT", L["Mouseover Text"], 2, "UpdateMouseover", nil, nil, nil, Neuron.sbStrings }, [11] = { "TOOLTIP_TEXT", L["Tooltip Text"], 2, "UpdateTooltip", nil, nil, nil, Neuron.sbStrings }, } function NeuronGUI:Status_UpdateEditor() if (NeuronStatusBarEditor and NeuronStatusBarEditor:IsVisible()) then NeuronGUI:StatusBarEditorUpdate() end end function NeuronGUI:StatusBarEditorUpdate(reset) local sb = Neuron.CurrentObject if (sb) then if (NeuronStatusBarEditor:IsVisible()) then local yoff = -10 local anchor, last, adjHeight --local editor = NeuronBarEditor.baropt.editor adjHeight = 200 for i,f in ipairs(sbOpt.types) do if (sb.config.sbType == f.sbType) then f:SetChecked(true) else f:SetChecked(false) end end for i,f in ipairs(sbOpt.chk) do f:ClearAllPoints() f:Hide() end for i,f in ipairs(sbOpt.chk) do if (sb.config.sbType == f.sbType) then f:SetPoint("BOTTOMLEFT", f.parent, "BOTTOMLEFT", 15, 25) f:SetChecked(sb.config[f.index]) f:Show() end end local yoff1, yoff2= (adjHeight)/5, (adjHeight)/5 --local shape if (sb.config.sbType == "cast") then yoff1 = (adjHeight)/6 end for i,f in ipairs(sbOpt.adj) do f:ClearAllPoints(); f:Hide() if (f.optData and f.strTable) then wipe(popupData) for types, data in pairs(f.optData) do if (types == sb.config.sbType) then for k,v in pairs(data) do popupData[k.."_"..v[1]] = tostring(k) end end end NeuronGUI:EditBox_PopUpInitialize(f.edit.popup, popupData) elseif (f.optData) then wipe(popupData) for k,v in pairs(f.optData) do if (k < 10) then popupData["0"..k.."_"..v] = tostring(k) else popupData[k.."_"..v] = tostring(k) end end NeuronGUI:EditBox_PopUpInitialize(f.edit.popup, popupData) end end for i,f in ipairs(sbOpt.adj) do if (i == 6) then if (sb.config.sbType == "cast") then f:SetPoint("TOPLEFT", f.parent, "TOPLEFT", 10, yoff) f:Show() yoff = yoff-yoff1 end elseif (i > 6) then if (i == 7) then yoff = -10 end f:SetPoint("TOPLEFT", f.parent, "TOP", 10, yoff) f:Show() yoff = yoff-yoff2 else f:SetPoint("TOPLEFT", f.parent, "TOPLEFT", 10, yoff) f:Show() yoff = yoff-yoff1 end if (sb[f.func]) then if (f.format) then f.edit:SetText(string.format(f.format, sb[f.func](sb, nil, true, true)*f.mult)..f.endtext) else f.edit:SetText(sb[f.func](sb, nil, true, true) or "") end f.edit:SetCursorPosition(0) end end end end end function NeuronGUI:StatusBarEditor_OnLoad(frame) Neuron.Editors.STATUSBAR = { frame, 625, 250, NeuronGUI.StatusBarEditorUpdate } end function NeuronGUI:StatusBarEditor_OnShow(frame) end function NeuronGUI:StatusBarEditor_OnHide(frame) end function NeuronGUI:sbTypeOnClick(button, down) local sb = Neuron.CurrentObject if (sb) then if (button.sbType == "xp") then sb.config.sbType = button.sbType sb.config.cIndex = 2 sb.config.lIndex = 1 sb.config.rIndex = 1 elseif (button.sbType == "rep") then sb.config.sbType = button.sbType sb.config.cIndex = 2 sb.config.lIndex = 1 sb.config.rIndex = 1 elseif (button.sbType == "cast") then sb.config.sbType = button.sbType sb.config.cIndex = 1 sb.config.lIndex = 2 sb.config.rIndex = 3 elseif (button.sbType == "mirror") then sb.config.sbType = button.sbType sb.config.cIndex = 1 sb.config.lIndex = 2 sb.config.rIndex = 3 end sb:SetType() NeuronGUI:Status_UpdateEditor() end end function NeuronGUI:SB_chkOptionOnClick(frame) local sb = Neuron.CurrentObject if (sb) then sb[frame.func](sb, frame, frame:GetChecked()) end end function NeuronGUI:SB_EditorTypes_OnLoad(frame) local f, anchor, last for index, types in ipairs(sbTypes) do f = CreateFrame("CheckButton", nil, frame, "NeuronOptionsCheckButtonTemplate") f:SetWidth(18) f:SetHeight(18) f:SetScript("OnClick", function(self, down) NeuronGUI:sbTypeOnClick(self, down) end) f.sbType = types[1] f.text:SetText(types[2]) if (not anchor) then f:SetPoint("TOPLEFT", frame, "TOPLEFT", 15, -15) anchor = f; last = f else f:SetPoint("TOPLEFT", last, "BOTTOMLEFT", 0, -15) last = f end table.insert(sbOpt.types, f) end frame.line = frame:CreateTexture(nil, "OVERLAY") frame.line:SetHeight(1) frame.line:SetPoint("LEFT", 8, -40) frame.line:SetPoint("RIGHT", -8, -40) frame.line:SetTexture(0.3, 0.3, 0.3) anchor, last = nil, nil for index, options in ipairs(sbchkOptions) do f = CreateFrame("CheckButton", nil, frame, "NeuronOptionsCheckButtonTemplate") f:SetWidth(18) f:SetHeight(18) f:SetScript("OnClick", function(self) NeuronGUI:SB_chkOptionOnClick(self) end) f.sbType = options[1] f.text:SetText(options[2]) f.func = options[3] f.index = options[4] f.parent = frame table.insert(sbOpt.chk, f) end end function NeuronGUI:SB_adjOptionOnTextChanged(edit, frame) local sb = Neuron.CurrentObject if (sb) then if (frame.method == 1) then elseif (frame.method == 2) then sb[frame.func](sb, edit.value, true) edit:HighlightText(0,0) end end end function NeuronGUI:SB_adjOptionOnEditFocusLost(edit, frame) edit.hasfocus = nil local sb = Neuron.CurrentObject if (sb) then if (frame.method == 1) then sb[frame.func](sb, edit:GetText(), true) elseif (frame.method == 2) then end end end function NeuronGUI:SB_adjOptionAdd(frame, onupdate) local sb = Neuron.CurrentObject if (sb) then local num = sb[frame.func](sb, nil, true, true) if (num == L["Off"] or num == "---") then num = 0 else num = tonumber(num) end if (num) then if (frame.max and num >= frame.max) then sb[frame.func](sb, frame.max, true, nil, onupdate) if (onupdate) then if (frame.format) then frame.edit:SetText(string.format(frame.format, frame.max*frame.mult)..frame.endtext) else frame.edit:SetText(frame.max) end end else sb[frame.func](sb, num+frame.inc, true, nil, onupdate) if (onupdate) then if (frame.format) then frame.edit:SetText(string.format(frame.format, (num+frame.inc)*frame.mult)..frame.endtext) else frame.edit:SetText(num+frame.inc) end end end end end end function NeuronGUI:SB_adjOptionSub(frame, onupdate) local sb = Neuron.CurrentObject if (sb) then local num = sb[frame.func](sb, nil, true, true) if (num == L["Off"] or num == "---") then num = 0 else num = tonumber(num) end if (num) then if (frame.min and num <= frame.min) then sb[frame.func](sb, frame.min, true, nil, onupdate) if (onupdate) then if (frame.format) then frame.edit:SetText(string.format(frame.format, frame.min*frame.mult)..frame.endtext) else frame.edit:SetText(frame.min) end end else sb[frame.func](sb, num-frame.inc, true, nil, onupdate) if (onupdate) then if (frame.format) then frame.edit:SetText(string.format(frame.format, (num-frame.inc)*frame.mult)..frame.endtext) else frame.edit:SetText(num-frame.inc) end end end end end end function NeuronGUI:SB_adjOptionOnMouseWheel(frame, delta) if (delta > 0) then NeuronGUI:SB_adjOptionAdd(frame) else NeuronGUI:SB_adjOptionSub(frame) end end ---this needs to be moved into an AceGUI window function NeuronGUI:SB_AdjustableOptions_OnLoad(frame) frame:RegisterForDrag("LeftButton", "RightButton") local f for index, options in ipairs(sbadjOptions) do f = CreateFrame("Frame", "NeuronSB_GUIAdjOpt"..index, frame, "NeuronAdjustOptionTemplate") f:SetID(index) f:SetWidth(200) f:SetHeight(24) f:SetScript("OnShow", function() end) f:SetScript("OnMouseWheel", function(self, delta) NeuronGUI:SB_adjOptionOnMouseWheel(self, delta) end) f:EnableMouseWheel(true) f.text:SetText(options[2]..":") f.method = options[3] f["method"..options[3]]:Show() f.edit = f["method"..options[3]].edit f.edit.frame = f f.option = options[1] f.func = options[4] f.inc = options[5] f.min = options[6] f.max = options[7] f.optData = options[8] f.format = options[9] f.mult = options[10] f.endtext = options[11] f.parent = frame if (f.optData == Neuron.sbStrings) then f.strTable = true end f.edit:SetScript("OnTextChanged", function(self) NeuronGUI:SB_adjOptionOnTextChanged(self, self.frame) end) f.edit:SetScript("OnEditFocusLost", function(self) NeuronGUI:SB_adjOptionOnEditFocusLost(self, self.frame) end) f.addfunc = function(self) NeuronGUI:SB_adjOptionAdd(self) end f.subfunc = function(self) NeuronGUI:SB_adjOptionSub(self) end table.insert(sbOpt.adj, f) end end function NeuronGUI:SB_CreateEditFrame(button) local editor = CreateFrame("Button", button:GetName().."EditFrame", button, "NeuronEditFrameTemplate") setmetatable(editor, { __index = CreateFrame("Button") }) editor:EnableMouseWheel(true) editor:RegisterForClicks("AnyDown") editor:SetAllPoints(button) editor:SetScript("OnShow", function(self) NeuronGUI:ObjEditor_OnShow(self) end) editor:SetScript("OnHide", function(self) NeuronGUI:ObjEditor_OnHide(self) end) editor:SetScript("OnEnter", function(self) NeuronGUI:ObjEditor_OnEnter(self) end) editor:SetScript("OnLeave", function(self) NeuronGUI:ObjEditor_OnLeave(self) end) editor:SetScript("OnClick", function(self, button) NeuronGUI:ObjEditor_OnClick(self, button) end) editor.type:SetText("") editor.object = button editor.editType = "status" editor.select.TL:ClearAllPoints() editor.select.TL:SetPoint("RIGHT", editor.select, "LEFT", 4, 0) editor.select.TL:SetTexture("Interface\\AddOns\\Neuron\\Images\\flyout.tga") editor.select.TL:SetTexCoord(0.71875, 1, 0, 1) editor.select.TL:SetWidth(16) editor.select.TL:SetHeight(55) editor.select.TR:ClearAllPoints() editor.select.TR:SetPoint("LEFT", editor.select, "RIGHT", -4, 0) editor.select.TR:SetTexture("Interface\\AddOns\\Neuron\\Images\\flyout.tga") editor.select.TR:SetTexCoord(0, 0.28125, 0, 1) editor.select.TR:SetWidth(16) editor.select.TR:SetHeight(55) editor.select.BL:SetTexture("") editor.select.BR:SetTexture("") button.editor = editor Neuron.EDITIndex[button.class..button.bar.DB.id.."_"..button.id] = editor editor:Hide() end