vanilla-wow-addons – Rev 1
?pathlinks?
--[[
Helper functions for the GUI elements of FlexBar
Last Modified
04/09/2005 Initial version
08/21/2005 Small change to FB_ScriptsDelete - fully delete a script
--]]
local util = Utility_Class:New()
local OldToggleGameMenu = ToggleGameMenu
local panels = {
["FBScriptsFrame"] = { "FBMenuScript", "FBScriptsMenu" },
["FBEventEditorFrame"] = { "FBIfOpsMenu", "FBEEDDMenu" },
["FBOptionsFrame"] = {},
["FBPerformanceFrame"] = {},
["FBAutoItemsFrame"] = {},
}
-- Hooking GUI escape press to close my menus as I couldn't figure out how
-- to get them to behave like UI dropdowns
function ToggleGameMenu(clicked)
--
local index,panel,menus
local nomenushowing = true
local nopanelshowing = true
for panel,menus in pairs(panels) do
for index2, menu in ipairs(menus) do
if getglobal(menu):IsVisible() then
getglobal(menu):Hide()
nomenushowing = false
end
end
end
if nomenushowing then
for panel,menus in pairs(panels) do
if getglobal(panel):IsVisible() then
getglobal(panel):Hide()
nopanelshowing = false
end
end
end
if nopanelshowing and nomenushowing then
if FBMenu1:IsVisible() then
FBMenu1:Hide()
else
OldToggleGameMenu( clicked )
end
end
end
-- Register our panels
UIPanelWindows["FBScriptsFrame"] = { area = "center", pushable = 0 };
UIPanelWindows["FBEventEditorFrame"] = { area = "center", pushable = 0 };
UIPanelWindows["FBPerformanceFrame"] = { area = "center", pushable = 0 };
UIPanelWindows["FBOptionsFrame"] = { area = "center", pushable = 0 };
UIPanelWindows["FBAutoItemsFrame"] = { area = "center", pushable = 0 };
function FB_GUI_Main_Menu()
-- display a menu of ui panels
FB_Menu_Display("FBMenu1",FBGUIPanelsList, FB_GUIPanelsCallBack,
5, 240, "UIParent", "CENTER", "CENTER", 0, 0)
end
function FB_GUIPanelsCallBack(value,action)
-- display appropriate panel
if action ~= "click" then return end
if value == "Event Editor" then
FB_DisplayEventEditor()
elseif value == "Script Editor" then
FB_ShowScripts()
elseif value == "Global Options" then
FB_ShowGlobalOptions()
elseif value == "Auto Items" then
FB_DisplayAutoItems()
elseif value == "Performance Options" then
FB_Show_PerformanceOptions()
end
end
function FB_Show_Scripts_Dropdown()
-- Display menu of available scripts
local scripts = {}
local index, value
for index, value in pairs(FBScripts) do
table.insert(scripts,index)
end
table.sort(scripts, function(v1,v2) return string.lower(v1) < string.lower(v2) end)
local callback = function(value, action, name, button)
if action == "click" then
ScriptNameEditBox:SetText(value)
getglobal(name):GetParent():Hide()
if button=="RightButton" then FB_Scripts_Load() end
end
end
FB_Menu_Display("FBMenuScript",scripts,callback,FBToggles["dropdown"],300,"ScriptNameEditBox","TOPLEFT","BOTTOMLEFT",-6,0)
FBScriptsEditBox:ClearFocus()
ScriptNameEditBox:ClearFocus()
end
function FB_ShowScripts()
-- Show Scripts frame
FBScriptsFrame:Show()
FBScriptsEditBox:SetFocus()
end
function FB_Scripts_Delete()
-- Delete script named in ScriptNameEditBox
local scriptname = ScriptNameEditBox:GetText()
if scriptname and scriptname ~= "" then
FBTextChunks[scriptname] = nil
FBScripts[scriptname] = nil
message("Script " .. scriptname .. " deleted")
else
message("Script " .. scriptname .. " not found")
end
FB_DisplayScripts()
end
function FB_Scripts_Save()
-- Save current text in text editor under name in ScriptNameEditBox
local scriptname = ScriptNameEditBox:GetText()
if scriptname and scriptname ~= "" then
local text = FBScriptsEditBox:GetText()
FBScripts[scriptname]=FBScriptsEditBox:GetText()
if string.len(text) > 512 then
FBTextChunks[scriptname] = {}
local index
local len = 511
for index = 1,string.len(text),512 do
if index + len > string.len(text) then
len = string.len(text) - index
end
local chunk = string.sub(text,index,index+len)
table.insert(FBTextChunks[scriptname], chunk)
end
else
FBTextChunks[scriptname] = nil
end
else
message("Please specify a script name")
end
FB_DisplayScripts()
end
function FB_Scripts_Load()
-- Load named script into script editor
local scriptname = ScriptNameEditBox:GetText()
if scriptname and scriptname ~= "" then
FBScriptsEditBox:SetText(FBScripts[scriptname])
FBScriptsEditBox:SetFocus();
else
message("Script " .. scriptname .. " not found")
end
end
function FB_Scripts_List()
-- Show scripts list - OBSOLETE
if FBScriptsMenu:IsVisible() then
FBScriptsMenu:Hide()
else
FBScriptsMenu:Show()
FB_DisplayScripts()
end
end
function FB_Scripts_Import()
-- Search for config from FBScripts and import into straight text format
local temp = getglobal(ScriptNameEditBox:GetText())
if not temp then
message(ScriptNameEditBox .. " not found")
else
local index, value
local text = ""
for index, value in ipairs(temp) do
text = text .. value .. "\n"
end
FBScriptsEditBox:SetText(text)
end
end
function FB_Scripts_TextChanged(editbox)
-- Text changed, cursor may have changed, reset scroll frame
local scrollframe = editbox:GetParent():GetParent()
local scrollbar = getglobal(scrollframe:GetName().."ScrollBar")
scrollframe:UpdateScrollChildRect();
local scrollmin, scrollmax = scrollbar:GetMinMaxValues();
if ( scrollmax > 0 and (this.max ~= scrollmax) ) then
this.max = scrollmax;
-- scrollbar:SetValue(scrollmax);
end
end
function FB_Scripts_OnCursorChanged(editbox)
-- Cursor has moved, scroll frame appropriately
local scrollframe = editbox:GetParent():GetParent()
local scrollbar = getglobal(scrollframe:GetName().."ScrollBar")
local scrollamt = scrollbar:GetValue()/arg4
local scrollmin, scrollmax = scrollbar:GetMinMaxValues()
local linenumber = -(arg2/arg4)
if linenumber-math.floor(linenumber) > .5 then
linenumber = math.ceil(linenumber)
else
linenumber = math.floor(linenumber)
end
local page = math.floor(linenumber/17) + 1
scrollbar:SetValue((page-1) * 17 * arg4)
if ((page-1)*17*arg4) > (scrollmax - (arg4/2)) then
scrollbar:SetValue(scrollmax)
end
editbox.pagenumber = page
editbox.linenumber = linenumber
local status = "(%d | %d)"
FBScriptsStatusText:SetText(format(status,editbox.linenumber+1,editbox:GetNumLetters()))
scrollframe:UpdateScrollChildRect();
end
function FB_Scripts_ExportEvents()
local i, j, k, target, subtarget, event, text
text = ""
for i, event in ipairs(FBEvents) do
text = text..tostring(event["command"]).." on='"..tostring(event["on"]).."'"
if event["target"] ~= nil then
text = text.." target='[ "
for j, target in pairs(event["target"]) do
if type(target) == "string" then text = text.."\""..target.."\" "
elseif type(target) == "number" then text = text..target.." " end
end
text = text.."]'"
end
text = text.."\n"
end
FBScriptsEditBox:SetText(text)
end
function FB_Scripts_ExportPositions()
local btn, state, export
export = ''
for btn, state in pairs(FBState) do
if type(state) == "table" then
export = export.. string.format("moveabs button=%d xx=%d yy=%d\n", btn, state.xcoord, state.ycoord)
end
end
FBScriptsEditBox:SetText(export)
end
function FB_Scripts_ExportSetup()
local i, j, btn, state, formatb, masscommands, attrib, key, val, export
export = "show button=1-120\ndisable button=1-120 state='off'\n"
masscommands = {}
masscommands.hidden = {}
masscommands.scale = {}
masscommands.locked = {}
masscommands.lockedicon = {}
masscommands.hotkeytext = {}
masscommands.text2 = {}
masscommands.text3 = {}
masscommands.group = {}
masscommands.justifytext = {}
masscommands.justifytext2 = {}
masscommands.justifytext3 = {}
masscommands.icon = {}
masscommands.hotkeycolor = {}
masscommands.text2color = {}
masscommands.text3color = {}
masscommands.hidegrid = {}
masscommands.disabled = {}
formatb = {}
formatb.hotkeytext = "text button=[ %s ] text='%s'\n"
formatb.text2 = "text2 button=[ %s ] text='%s'\n"
formatb.text3 = "text3 button=[ %s ] text='%s'\n"
formatb.hidden = "hide button=[ %s ]\n"
formatb.scale = "scale button=[ %s ] scale=%s\n"
formatb.fade = "fade button=[ %s ] alpha=%d\n"
formatb.icon = "shade button=[ %s ] color=[ %s]\n"
formatb.justifytext = "justifytext button=[ %s ] pos='%s'\n"
formatb.justifytext2 = "justifytext2 button=[ %s ] pos='%s'\n"
formatb.justifytext3 = "justifytext3 button=[ %s ] pos='%s'\n"
formatb.hotkeycolor = "shadetext button=[ %s ] color=[ %s]\n"
formatb.text2color = "shadetext2 button=[ %s ] color=[ %s]\n"
formatb.text3color = "shadetext3 button=[ %s ] color=[ %s]\n"
formatb.hidegrid = "hidegrid button=[ %s ]\n"
formatb.locked = "lock button=[ %s ]\n"
formatb.lockedicon = "lockicon button=[ %s ]\n"
formatb.disabled = "disable button=[ %s ] state='on'\n"
formatb.remap = "remap button=[ %s ] base=%d\n"
formatb.group = "group button=[ %s ] anchor=%d\n"
for btn, state in pairs(FBState) do
if type(state)=="table" then
for key, val in pairs(state) do
if masscommands[key] ~= nil then
if key == "scale" then val = val * 10 end
if type(val) == "table" then
local tempval = ''
i = 1
while i <= table.getn(val) do
tempval = tempval .. val[i]*10 .." "
i = i + 1
end
val = tempval
end
if masscommands[key][val] == nil then
masscommands[key][val] = {}
end
table.insert(masscommands[key][val], btn)
end
end
end
end
for attrib, val in pairs(masscommands) do
--FB_ReportToUser("'"..attrib.."'")
for state, key in val do
btn = ''
--FB_ReportToUser(" ".. tostring(state))
for i, j in pairs(key) do
btn = btn..j.." "
end
if state ~= nil and state ~= '' then
export = export..string.format(formatb[attrib], btn, state)
end
end
end
FBScriptsEditBox:SetText(export)
end
function FB_Scripts_ExportActions()
local i, action, text
text = ""
--FB_ReportToUser("Exporting Actions")
for i, action in pairs(FBSavedProfile[FBProfileName].FlexActions) do
-- Ensure the target button is cleared
text = text..string.format("runscript script='PickupAction(%d);PutItemInBackpack();'\nclearflex id=%d\n", i, i)
--FB_ReportToUser("Action "..i)
if action.action == "script" then
text = text..string.format("flexscript id=%d script='%s' texture='%s' name='%s'\n",
i,
string.gsub(action.script, "'", "\'"),
string.gsub(action.texture, "'", "\'"),
string.gsub(action.name, "'", "\'"))
elseif action.action == "macro" then
text = text..string.format("flexmacro id=%d macro='%s' texture='%s' name='%s'\n",
i,
string.gsub(action.macro, "'", "\'"),
string.gsub(action.texture, "'", "\'"),
string.gsub(action.name, "'", "\'"))
elseif action.action == "pet" then
text = text..string.format("flexpet id=%d petid=%d\n", i, action.id)
elseif action.action == "settexture" then
text = text..string.format("settexture id=%d texture='%s'\n", i, action.texture)
end
end
FBScriptsEditBox:SetText(text)
end
function FB_Set_PerformanceOptions()
-- Set labels and initial values from performance options table
local index, value
FBEventToggleInfo["sortlist"] = {}
for index,value in pairs(FBEventToggleInfo) do
if index ~= "sortlist" then
table.insert(FBEventToggleInfo["sortlist"],{ index, value["desc"] })
end
end
table.sort(FBEventToggleInfo["sortlist"],function(v1,v2) return v1[2] < v2[2] end)
local count = 1
for index,value in pairs(FBEventToggleInfo["sortlist"]) do
if count > 34 then break end
local event = FBEventToggleInfo[value[1]]
if string.sub(event["desc"],1,3) ~= "XXX" then
local button = getglobal("FBPerfBtn"..count)
local label = getglobal("FBPerfBtn"..count.."Label")
label:SetText(string.sub(event["desc"],5))
button:SetText(FBEventToggles[value[1]])
if FBEventToggles[value[1]] == "off" and event["timer"] then
FBTimers[event["timer"]]:Pause()
elseif FBEventToggles[value[1]] ~= "off" and event["timer"] then
FBTimers[event["timer"]]:Start()
end
button:Show()
count = count+1
end
end
for index = count,34 do
local button = getglobal("FBPerfBtn"..index)
button:Hide()
end
end
function FB_Show_PerformanceOptions()
-- Show Performance Options frame
table.sort(FBEventToggles, function(v1,v2) return v1["desc"] < v2["desc"] end)
FB_Set_PerformanceOptions()
FBPerformanceFrame:Show()
end
function FB_Performance_Changed(button)
-- set new performance level for event group
local label = getglobal(button:GetName().."Label")
local index,value
FBEventToggleInfo["sortlist"]["lowlist"] = nil
for index,value in pairs(FBEventToggleInfo["sortlist"]) do
if string.sub(value[2],5) == label:GetText() then
if FBEventToggles[value[1]] == "off" then
FBEventToggles[value[1]] = "low"
elseif FBEventToggles[value[1]] == "low" then
FBEventToggles[value[1]] = "high"
else
FBEventToggles[value[1]] = "off"
end
end
end
FB_Set_PerformanceOptions()
end
function FB_LoadOptionsClick(button)
-- Set loadtype
local label = getglobal(button:GetName() .. "Label")
if button:GetText() == "safe" then
button:SetText("std")
elseif button:GetText() == "std" then
button:SetText("fast")
else
button:SetText("safe")
end
FBToggles["loadtype"] = string.lower(button:GetText())
end
function FB_DropDownOptionsClick(button)
-- Set loadtype
local label = getglobal(button:GetName() .. "Label")
if button:GetText() == "5" then
button:SetText("10")
elseif button:GetText() == "10" then
button:SetText("15")
else
button:SetText("5")
end
FBToggles["dropdown"] = tonumber(button:GetText())
end
function FB_ShowGlobalOptions()
-- load global options
FBOptionsFrame:Show()
if FBToggles["notooltips"] and not FBTooltipsOption:GetChecked() then
FBTooltipsOption:SetChecked(1)
end
if FBToggles["verbose"] and not FBVerboseOption:GetChecked() then
FBVerboseOption:SetChecked(1)
end
if FBToggles["forceshading"] and not FBShadingOption:GetChecked() then
FBShadingOption:SetChecked(1)
end
if FBToggles["autoperf"] and not FBAutoPerformanceOption:GetChecked() then
FBAutoPerformanceOption:SetChecked(1)
end
FBLoadOptionsButton:SetText(FBToggles["loadtype"])
FBDropDownOptionsButton:SetText(FBToggles["dropdown"])
end
function FB_Menu_Display(menuname, valuelist, callback, maxitems, width, parentframe, menuanchor, parentanchor, dx, dy)
-- Show a menu with the attached list of values and using the provided callback.
local menu = getglobal(menuname)
if not menu then return end
if not valuelist and not menu.list then return end
if not callback and not menu.callback then return end
local index
if valuelist then
menu.CurrentItem = 1
menu.list = util:TableCopy(valuelist)
local index, value
menu.list.n = 0
for index, value in ipairs(menu.list) do
menu.list.n = menu.list.n + 1
end
end
if maxitems then
if maxitems < 3 then maxitems = 3 end
if maxitems > 25 then maxitems = 25 end
menu.maxitems = maxitems
end
if callback then menu.callback = callback end
if maxitems then
if menu.list.n <= maxitems then maxitems = menu.list.n end
menu:SetHeight((maxitems * 15) + 20)
local index
for index = maxitems+1,25 do
local item = getglobal(menu:GetName()..index)
item:Hide()
end
end
getglobal(menu:GetName().."ScrollDown"):Show()
getglobal(menu:GetName().."ScrollUp"):Show()
if maxitems and (menu.list.n <= maxitems) then
getglobal(menu:GetName().."ScrollDown"):Hide()
getglobal(menu:GetName().."ScrollUp"):Hide()
end
if width then
if width < 100 then width = 100 end
menu:SetWidth(width)
local index
for index = 1, menu.maxitems do
local item = getglobal(menu:GetName()..index)
local text = getglobal(item:GetName().."Label")
item:SetWidth(width - 32)
text:SetWidth(width - 32)
end
end
if parentframe then
if not menuanchor then menuanchor = "TOPLEFT" end
if not parentanchor then parentanchor = "TOPLEFT" end
if not dx then dx = 0 end
if not dy then dy = 0 end
menu:ClearAllPoints()
menu:SetPoint(menuanchor, parentframe, parentanchor, dx, dy)
menu:SetFrameLevel(getglobal(parentframe):GetFrameLevel() + 50)
local index
getglobal(menu:GetName().."ScrollUp"):SetFrameLevel(menu:GetFrameLevel()+5)
getglobal(menu:GetName().."ScrollDown"):SetFrameLevel(menu:GetFrameLevel()+5)
getglobal(menu:GetName().."CloseButton"):SetFrameLevel(menu:GetFrameLevel()+5)
for index = 1, menu.maxitems do
local item = getglobal(menu:GetName()..index)
local text = getglobal(item:GetName().."Label")
item:SetFrameLevel(menu:GetFrameLevel()+5)
end
end
if (menu.CurrentItem + (menu.maxitems - 1)) > menu.list.n then menu.CurrentItem = menu.list.n - (menu.maxitems - 1) end
if menu.CurrentItem < 1 then menu.CurrentItem = 1 end
for index = 0, menu.maxitems - 1 do
local button = getglobal(menu:GetName()..(index+1))
local label = getglobal(button:GetName().."Label")
if menu.list[index+menu.CurrentItem] then
label:SetText(menu.list[index+menu.CurrentItem])
button:Show()
else
button:Hide()
end
end
menu:Show()
end
-- Functions for the Event Editor
function FB_DisplayEventEditor()
-- Load event list into Event editor
if FBEvents.n < 11 then FBEventEditorFrame.FirstEvent = 1 end
if FBEventEditorFrame.FirstEvent > 1 and
FBEventEditorFrame.FirstEvent + 9 > FBEvents.n then
FBEventEditorFrame.FirstEvent = FBEvents.n - 9
end
if FBEventEditorFrame.FirstEvent < 1 then FBEventEditorFrame.FirstEvent = 1 end
local index
for index = 0,9 do
local eventframe = getglobal("FBEventEditorFrame"..index+1)
local eventnum = getglobal(eventframe:GetName().."Number")
if FBEvents[index+FBEventEditorFrame.FirstEvent] then
local event = FBEvents[index+FBEventEditorFrame.FirstEvent]
eventnum:SetText(tostring(index+FBEventEditorFrame.FirstEvent))
local eventon = getglobal(eventframe:GetName().."Event")
eventon:SetText(tostring(event["on"]))
local eventtarget = getglobal(eventframe:GetName().."Target")
eventtarget:SetText(string.gsub(tostring(event["targettext"]),"Target=",""))
local eventcommand = getglobal(eventframe:GetName().."Command")
eventcommand:SetText(tostring(event["command"]))
eventframe:Show()
else
eventframe:Hide()
end
end
FB_EventEditor_DisplayNewEvent()
FBEventEditorFrame:Show()
end
function FB_MoveEventDown(eventnumber)
-- move an event down the list
if eventnumber < FBEvents.n then
local temp = FBEvents[eventnumber+1]
FBEvents[eventnumber+1] = FBEvents[eventnumber]
FBEvents[eventnumber] = temp
end
FBSavedProfile[FBProfileName].Events = util:TableCopy(FBEvents)
FB_CreateQuickDispatch()
FB_DisplayEventEditor()
end
function FB_MoveEventUp(eventnumber)
-- move an event Up the list
if eventnumber > 1 then
local temp = FBEvents[eventnumber-1]
FBEvents[eventnumber-1] = FBEvents[eventnumber]
FBEvents[eventnumber] = temp
end
FBSavedProfile[FBProfileName].Events = util:TableCopy(FBEvents)
FB_CreateQuickDispatch()
FB_DisplayEventEditor()
end
function FB_DeleteEvent(eventnumber)
-- move an event down the list
table.remove(FBEvents, eventnumber)
FBSavedProfile[FBProfileName].Events = util:TableCopy(FBEvents)
FB_CreateQuickDispatch()
FB_DisplayEventEditor()
FBEventEditorFrameEventEdit:SetFocus()
end
function FB_InsertEvent(eventnumber)
-- Insert an event in the list
FBEventEditorFrameModeLabel:SetText("Inserting")
FBEventEditorFrameEventNumberLabel:SetText(tostring(eventnumber))
FB_Clear_Fields()
FB_Hide_Parameters()
FBEventEditorFrameTargetMenu:Hide()
FBEventEditorFrameEventEdit:SetFocus()
end
function FB_EditEvent(eventnumber,name)
-- Edit an event in the list
local list = {"Event","Target","If","In","TName","TToggle","P1","P2","P3","P4","P5","P6","P7","P8","P9","P10"}
FBEventEditorFrameModeLabel:SetText("Editing")
FBEventEditorFrameEventNumberLabel:SetText(tostring(eventnumber))
FB_Clear_Fields()
FB_Hide_Parameters()
local commandtext = getglobal(name.."Command"):GetText()
local target = getglobal(name.."Target"):GetText()
local event = getglobal(name.."Event"):GetText()
local firsti,lasti,command = string.find(commandtext,"(%w+) ")
local msg = string.sub(commandtext,lasti+1)
local args = FBcmd:GetParameters(msg)
args["target"] = FBEvents[eventnumber]["target"]
FBEventEditorFrameEventEdit:SetText("'"..string.lower(event).."'")
FBEventEditorFrameCommandEdit:SetText(string.lower(command))
FB_Set_Parameters(command)
local index,value
local i,v
for i,v in ipairs(list) do
local label = getglobal("FBEventEditorFrame"..v.."Label"):GetText()
if string.sub(label,-1,-1) == "=" then label = string.sub(label,1,-2) end
if string.sub(label,1,1) == "[" then label = string.sub(label,2,-2) end
if args[string.lower(label)] then
if type(args[string.lower(label)]) == "string" then
getglobal("FBEventEditorFrame"..v.."Edit"):SetText("'"..args[string.lower(label)].."'")
elseif type(args[string.lower(label)]) == "number" then
getglobal("FBEventEditorFrame"..v.."Edit"):SetText(args[string.lower(label)])
elseif type(args[string.lower(label)]) == "table" then
local i2, v2
local text = "["
for i2,v2 in args[string.lower(label)] do
if type(v2) == "string" then
text = text .. "'"..v2.."' "
else
text = text .. tostring(v2) .. " "
end
end
text = text .. "]"
getglobal("FBEventEditorFrame"..v.."Edit"):SetText(text)
end
getglobal("FBEventEditorFrame"..v.."Label"):Show()
getglobal("FBEventEditorFrame"..v.."Edit"):Show()
if getglobal("FBEventEditorFrame"..v.."Menu") then getglobal("FBEventEditorFrame"..v.."Menu"):Show() end
end
end
if IsShiftKeyDown() then
FB_EventEditor_DisplayNewEvent(true)
FBEventEditorFrameModeLabel:SetText("Inserting")
else
FBEventEditorFrameP1Edit:SetFocus()
FBEventEditorFrameTargetMenu:Show()
end
end
local fieldlist = {"Event","Target","If","Command","In","TName","TToggle","P1","P2","P3","P4","P5","P6","P7","P8","P9","P10"}
function FB_EventEditor_MenuDropDown(name)
-- drop menu down for named dropdown button
if FBEEDDMenu:IsVisible() then
FBEEDDMenu:Hide()
FBIfOpsMenu:Hide()
return
end
local label = string.gsub(name,"Menu","Label")
local editbox = getglobal(string.gsub(name,"Menu","Edit"))
local labeltext = string.lower(getglobal(label):GetText())
if string.sub(labeltext,-1,-1) == "=" then labeltext = string.sub(labeltext,1,-2) end
if string.sub(labeltext,1,1) == "[" then labeltext = string.sub(labeltext,2,-2) end
FBEventEditorFrame.CurrentEdit = editbox
FB_Menu_Display("FBEEDDMenu",FBGUIParamValues[labeltext](),
FBGUIParamCallbacks[labeltext],
FBToggles["dropdown"],200,name,"TOPRIGHT","BOTTOMRIGHT",0,0)
if labeltext == "if" then
FB_Menu_Display("FBIfOpsMenu",FBGUIParamValues[labeltext.."ops"](),
FBGUIParamCallbacks[labeltext],
FBToggles["dropdown"],50,name,"TOPRIGHT","BOTTOMRIGHT",-200,0)
end
local index,field
for index, field in ipairs(fieldlist) do
getglobal("FBEventEditorFrame"..field.."Edit"):ClearFocus()
end
end
function FB_EventEditor_NextEditBox(name)
-- find the next edit box to go to.
local index, value
local found = false
for index,value in ipairs(fieldlist) do
if found and getglobal("FBEventEditorFrame"..value.."Label"):IsVisible() then
getglobal("FBEventEditorFrame"..value.."Edit"):SetFocus()
return
end
if string.find(string.sub(name,19),value.."Edit") then
found = true
if value == "Command" and FBEventEditorFrameCommandEdit:GetText() then
FB_Set_Parameters(string.lower(FBEventEditorFrameCommandEdit:GetText()))
elseif value == "Event" and FBEventEditorFrameEventEdit:GetText() then
FBEventEditorFrameTargetMenu:Show()
end
end
end
getglobal("FBEventEditorFrameEventEdit"):SetFocus()
end
function FB_EventEditor_DisplayNewEvent(fromedit)
-- Set up for adding a new event
if not FBEvents.n then FBEvents.n = 0 end
local nextevent = FBEvents.n + 1
FBEventEditorFrameEventNumberLabel:SetText(tostring(nextevent))
if not fromedit then
FB_Clear_Fields()
FB_Hide_Parameters()
FBEventEditorFrameTargetMenu:Hide()
end
FBEventEditorFrameEventEdit:SetFocus()
FBEventEditorFrameModeLabel:SetText("Adding")
end
function FB_Hide_Parameters()
-- hide the parameter list until it is populated
local index
for index = 1,10 do
getglobal("FBEventEditorFrameP"..index.."Label"):Hide()
getglobal("FBEventEditorFrameP"..index.."Edit"):Hide()
getglobal("FBEventEditorFrameP"..index.."Menu"):Hide()
end
end
function FB_Clear_Fields()
-- clear all fields of values
local list = {"Event","Target","If","In","TName","TToggle","P1","P2","P3","P4","P5","P6","P7","P8","P9","P10"}
local index, value
for index,value in ipairs(list) do
getglobal("FBEventEditorFrame"..value.."Edit"):SetText("")
end
FBEventEditorFrameCommandEdit:SetText("")
end
function FB_Set_Parameters(value)
-- Set up the parameters for the given command
FB_Hide_Parameters()
local command,param,index
for index,param in ipairs(FBGUIParamList[value]) do
getglobal("FBEventEditorFrameP"..index.."Label"):Show()
getglobal("FBEventEditorFrameP"..index.."Label"):SetText(param)
getglobal("FBEventEditorFrameP"..index.."Edit"):Show()
getglobal("FBEventEditorFrameP"..index.."Edit"):SetText("")
getglobal("FBEventEditorFrameP"..index.."Menu"):Show()
end
end
function FB_EventEditor_SaveEvent()
-- Create an event command from the current fields
local list = {"Event","Target","If","In","TName","TToggle","P1","P2","P3","P4","P5","P6","P7","P8","P9","P10"}
local ef = FBEventEditorFrame:GetName()
local command = getglobal(ef.."CommandEdit"):GetText() .. " "
local value, index
for index,value in pairs(list) do
local label = getglobal(ef..value.."Label"):GetText()
local edit = getglobal(ef..value.."Edit"):GetText()
if getglobal(ef..value.."Label"):IsVisible() and label and label ~="" then
if string.sub(label,1,1) == "[" then label = string.sub(label,2,-2) end
if string.sub(label,-1,-1) ~= "=" then label = label.."=" end
command = command .. label .. edit .. " "
end
end
FBcmd:Dispatch(command)
local eventnum = tonumber(getglobal(ef.."EventNumberLabel"):GetText())
local mode = getglobal(ef.."ModeLabel"):GetText()
if mode == "Editing" then
FBEvents[eventnum] = FBEvents[FBEvents.n]
table.remove(FBEvents, FBEvents.n)
elseif mode == "Inserting" then
table.insert(FBEvents,eventnum,FBEvents[FBEvents.n])
table.remove(FBEvents, FBEvents.n)
end
FBSavedProfile[FBProfileName].Events = util:TableCopy(FBEvents)
FB_CreateQuickDispatch()
getglobal(ef.."ModeLabel"):SetText("Adding")
FB_EventEditor_DisplayNewEvent()
FB_DisplayEventEditor()
end
function FB_GetItems()
-- Generate a list of items in ID slots
local index
local autoitemlist = {}
FB_MoneyToggle();
for index = 1,120 do
local count = GetActionCount(index)
if count and count > 0 then
FlexBarTooltip:SetAction(index)
local name = FlexBarTooltipTextLeft1:GetText()
table.insert(autoitemlist,{index,name,count})
elseif FBSavedProfile[FBProfileName].FlexActions[index] and
FBSavedProfile[FBProfileName].FlexActions[index]["action"] == "autoitem" then
table.insert(autoitemlist,{index,
FBSavedProfile[FBProfileName].FlexActions[index]["name"],
0 })
end
end
FB_MoneyToggle();
autoitemlist.n = 0
for index in ipairs(autoitemlist) do
autoitemlist.n = index
end
return autoitemlist
end
function FB_DisplayAutoItems()
-- display current items in frame
if not FBAutoItemsFrame.FirstItem then FBAutoItemsFrame.FirstItem = 1 end
local items = FB_GetItems()
if FBAutoItemsFrame.FirstItem + 4 > items.n then FBAutoItemsFrame.FirstItem = items.n - 4 end
if FBAutoItemsFrame.FirstItem < 1 then FBAutoItemsFrame.FirstItem = 1 end
local first = FBAutoItemsFrame.FirstItem
local index
for index = 1,5 do
local pos = index+first-1
if items[pos] then
local checkbox = getglobal("FBAutoItemsFrame"..index.."On")
local label = getglobal("FBAutoItemsFrame"..index.."Label")
local idlabel = getglobal("FBAutoItemsFrame"..index.."IDLabel")
local countlabel = getglobal("FBAutoItemsFrame"..index.."CountLabel")
if FBSavedProfile[FBProfileName].FlexActions[items[pos][1]] and
FBSavedProfile[FBProfileName].FlexActions[items[pos][1]]["action"] == "autoitem" then
checkbox:SetChecked(1)
else
checkbox:SetChecked(0)
end
label:SetText(items[pos][2])
countlabel:SetText(items[pos][3])
idlabel:SetText(items[pos][1])
getglobal("FBAutoItemsFrame"..index):Show()
else
getglobal("FBAutoItemsFrame"..index):Hide()
end
end
FBAutoItemsFrame:Show()
end
function FB_AutoItemOnClick(number,checkbox,parent)
-- Toggle auto item
local first = FBAutoItemsFrame.FirstItem or 1
local pos = number+first-1
if checkbox:GetChecked() then
local name = getglobal(parent:GetName().."Label"):GetText()
local idlabel = getglobal(parent:GetName().."IDLabel"):GetText()
local id = tonumber(idlabel)
local countlabel = getglobal(parent:GetName().."CountLabel"):GetText()
local count = tonumber(countlabel)
if not FBSavedProfile[FBProfileName].FlexActions[id] then
FBSavedProfile[FBProfileName].FlexActions[id] = {}
end
FBSavedProfile[FBProfileName].FlexActions[id]["action"] = "autoitem"
FBSavedProfile[FBProfileName].FlexActions[id]["name"] = name
FBSavedProfile[FBProfileName].FlexActions[id]["count"] = count
FBSavedProfile[FBProfileName].FlexActions[id]["texture"] = GetActionTexture(id)
else
local idlabel = getglobal(parent:GetName().."IDLabel"):GetText()
local id = tonumber(idlabel)
FBSavedProfile[FBProfileName].FlexActions[id] = nil
local buttonnum
for buttonnum = 1,FBNumButtons do
local button = FB_GetWidgets(buttonnum)
if button:GetID() == id then
FlexBarButton_Update(button)
FlexBarButton_UpdateUsable(button)
end
end
FB_DisplayAutoItems()
end
local id = tonumber(idlabel)
local index
for index = 1,120 do
local button = FB_GetWidgets(index)
if button:GetID() == id then
local profile = FBSavedProfile[FBProfileName]
local action = profile.FlexActions[id]
local state = profile[index].State
if action then
state["savedgrid"] = state["hidegrid"]
state["hidegrid"] = nil
else
state["hidegrid"] = state["savedgrid"]
state["savedgrid"] = nil
end
FBState[index]["savedgrid"] = state["savedgrid"]
FBState[index]["hidegrid"] = state["hidegrid"]
FB_ApplyGrid(index)
FlexBarButton_Update(button)
FlexBarButton_UpdateUsable(button)
end
end
end