Compare with Previous | Blame | View Log
ItemRackOpt = { Icons = {}, -- list of all icons possible for a set Inv = {}, -- 0-19 currently chosen items per slot HoldInv = {}, -- 0-19 ItemRackOpt.Inv held when picking set SetList = {}, -- numerically-indexed list of set names selectedIcon = 0, prevFrame = nil, -- previous subframe a frame should return to (ItemRackOptSubFrame1-x) numSubFrames = 8, -- number of subframes slotOrder = {1,2,3,15,5,4,19,9,16,17,18,0,14,13,12,11,8,7,6,10,6,7,8,11,12,13,14,0,18,17,16,9,19,4,5,15,3,2}, currentMarquee = 1, } ItemRack.CheckButtonLabels = { ["ItemRackOptItemStatsPriorityText"] = "Priority", ["ItemRackOptItemStatsKeepEquippedText"] = "Pause Queue", ["ItemRackOptQueueEnableText"] = "Auto Queue This Slot", ["ItemRackOptSetsHideCheckButtonText"] = "Hide", ["ItemRackOptShowHelmText"] = "Helm", ["ItemRackOptShowCloakText"] = "Cloak", ["ItemRackOptEventEditBuffAnyMountText"] = "Any mount", ["ItemRackOptEventEditBuffUnequipText"] = "Unequip when buff fades", ["ItemRackOptEventEditBuffNotInPVPText"] = "Except in PVP instances", ["ItemRackOptEventEditStanceUnequipText"] = "Unequip on leaving stance", ["ItemRackOptEventEditZoneUnequipText"] = "Unequip on leaving zone", ["ItemRackOptEventEditStanceNotInPVPText"] = "Except in PVP instances", } function ItemRackOpt.InvOnEnter(self) local id = self:GetID() if ItemRack.IsTimerActive("SlotMarquee") then _G["ItemRackOptInv"..id.."Icon"]:SetVertexColor(1,1,1,1) return end local menuDock,mainDock,menuOrient = "TOPRIGHT","TOPLEFT","HORIZONTAL" if id==0 or (id>=16 and id<=18) then menuDock,mainDock,menuOrient = "TOPLEFT","BOTTOMLEFT","VERTICAL" elseif id>=6 and id<=14 and id~=9 then menuDock,mainDock = "TOPLEFT","TOPRIGHT" end ItemRack.DockWindows(menuDock,_G["ItemRackOptInv"..id],mainDock,menuOrient) ItemRack.BuildMenu(id,ItemRackSettings.EquipOnSetPick=="OFF" and 1) ItemRack.IDTooltip(self,ItemRackOpt.Inv[id].id) end function ItemRackOpt.InvOnLeave(self) ItemRack.ClearTooltip() if ItemRack.IsTimerActive("SlotMarquee") then _G["ItemRackOptInv"..self:GetID().."Icon"]:SetVertexColor(.25,.25,.25,1) end end function ItemRackOpt.OnLoad(self) table.insert(UISpecialFrames,"ItemRackOptFrame") ItemRackOptInv0:SetScale(.8) for i=0,19 do ItemRackOpt.Inv[i] = {} ItemRackOpt.HoldInv[i] = {} end ItemRackOpt.PopulateInitialIcons() ItemRackOpt.PopulateEventList() ItemRackOptSetsCurrentSet:EnableMouse(0) ItemRackOptFrameTitle:SetText("IR "..ItemRack.Version) -- OptInfo: this table drives the scrollable options. must be defined after xml defined (so buttons are non-nil) -- type = "label", "check", "number", "slider", "button" : what type of option element -- optset = ItemRackUser or ItemRackSettings : which table setting exists in -- variable = "Var" : index of the optset. ie, ItemRackUser.Locked is optset ItemRackUser, variable "Locked" -- depend = "Var" : option depends on optset["Var"]=="ON" -- label = "string" : text of option -- tooltip = "string" : tooltip shown on option -- button = frame : reference to the button shown on the option (editbox, slider or actual button) -- combatlock = 1/nil : whether option can be changed in combat (key bindings, hide when ooc, etc) ItemRackOpt.OptInfo = { {type="label",label=(UnitName("player")).."'s Settings"}, {type="check",optset=ItemRackUser,variable="Locked",label="Lock Buttons",tooltip="Prevent buttons and menus from being moved."}, {type="check",optset=ItemRackUser,variable="EnableEvents",label="Enable events",tooltip="Enable events to automatically swap gear."}, {type="check",optset=ItemRackUser,variable="EnableQueues",label="Enable auto queues",tooltip="Enables auto queues to automatically swap gear."}, {type="number",optset=ItemRackUser,variable="ButtonSpacing",button=ItemRackOptButtonSpacing,label="Button spacing",tooltip="Padding distance between buttons.",combatlock=1}, {type="slider",button=ItemRackOptButtonSpacingSlider,variable="ButtonSpacing",label="Button spacing",tooltip="Padding distance between buttons.", min=0, max=24, step=1, form="%d",combatlock=1}, {type="number",optset=ItemRackUser,variable="Alpha",button=ItemRackOptAlpha,label="Transparency",tooltip="Transparency (alpha) of the buttons and menu."}, {type="slider",button=ItemRackOptAlphaSlider,variable="Alpha",label="Transparency",tooltip="Transparency (alpha) of the buttons and menu.", min=.1, max=1, step=.05, form="%.2f"}, {type="number",optset=ItemRackUser,variable="MainScale",button=ItemRackOptMainScale,label="Button scale",tooltip="Scale size of the item buttons.",combatlock=1}, {type="slider",button=ItemRackOptMainScaleSlider,variable="MainScale",label="Button scale",tooltip="Scale size of the item buttons.", min=.5, max=2, step=.05, form="%.2f",combatlock=1}, {type="number",optset=ItemRackUser,variable="MenuScale",button=ItemRackOptMenuScale,label="Menu scale",tooltip="Scale size of the menu in relation to the button it's docked to."}, {type="slider",button=ItemRackOptMenuScaleSlider,variable="MenuScale",label="Menu scale",tooltip="Scale size of the menu.", min=.5, max=2, step=.05, form="%.2f"}, {type="check",optset=ItemRackUser,variable="SetMenuWrap",label="Set menu wrap",tooltip="Check this to set a fixed value when the menu wraps to a new row. Uncheck to let ItemRack decide."}, {type="number",optset=ItemRackUser,variable="SetMenuWrapValue",depend="SetMenuWrap",button=ItemRackOptSetMenuWrapValue,label="When to wrap",tooltip="When 'Set menu wrap' checked, this is the number of menu items before wrapping to a new row/column."}, {type="slider",optset=ItemRackUser,button=ItemRackOptSetMenuWrapValueSlider,depend="SetMenuWrap",variable="SetMenuWrapValue",label="When to wrap",tooltip="When 'Set menu wrap' checked, this is the number of menu items before wrapping to a new row/column.", min=1, max=30, step=1, form="%d"}, {type="label",label="Global Settings"}, {type="check",optset=ItemRackSettings,variable="MenuOnShift",label="Menu on Shift",tooltip="Only show menu while Shift is held down."}, {type="check",optset=ItemRackSettings,variable="MenuOnRight",label="Menu on right click",tooltip="Open menu by right clicking buttons.",combatlock=1}, {type="check",optset=ItemRackSettings,variable="HideOOC",label="Hide out of combat",tooltip="Hide the buttons while out of combat.",combatlock=1}, {type="check",optset=ItemRackSettings,variable="Notify",label="Notify when ready",tooltip="Announce when an item you used comes off cooldown."}, {type="check",optset=ItemRackSettings,variable="NotifyThirty",label="Notify at 30",tooltip="Announce when an item you used is at 30 seconds cooldown."}, {type="check",optset=ItemRackSettings,variable="NotifyChatAlso",label="Notify chat also",tooltip="Send cooldown notifications to chat also."}, {type="check",optset=ItemRackSettings,variable="ShowTooltips",label="Show tooltips",tooltip="Show tooltips like the one you're reading now."}, {type="check",optset=ItemRackSettings,variable="TinyTooltips",depend="ShowTooltips",label="Tiny Tooltips",tooltip="Shrink item tooltips to display only name, cooldown and durability."}, {type="check",optset=ItemRackSettings,variable="TooltipFollow",depend="ShowTooltips",label="Tooltips at pointer",tooltip="Show tooltips near the mouse."}, {type="check",optset=ItemRackSettings,variable="CooldownCount",label="Cooldown numbers",tooltip="Display the cooldown time as a number over items."}, {type="check",optset=ItemRackSettings,variable="LargeNumbers",depend="CooldownCount",label="Large numbers",tooltip="Use a larger font for cooldown numbers."}, {type="check",optset=ItemRackSettings,variable="Cooldown90",depend="CooldownCount",label="Countdown at 90",tooltip="Use seconds instead of minutes starting at 90 seconds remaining."}, {type="check",optset=ItemRackSettings,variable="AllowEmpty",label="Allow empty slots",tooltip="Add an empty slot to menus of equipped items."}, {type="check",optset=ItemRackSettings,variable="AllowHidden",label="Allow hidden items",tooltip="Enable Alt+clicking of menu items to hide/show them in the menu. Hold Alt as you enter a menu to show all."}, {type="check",optset=ItemRackSettings,variable="HideTradables",label="Hide tradables",tooltip="Prevent tradable items from showing up in the menu."}, {type="check",optset=ItemRackSettings,variable="ShowMinimap",label="Show minimap button",tooltip="Show the minimap button to access options or change sets."}, {type="check",optset=ItemRackSettings,variable="SquareMinimap",depend="ShowMinimap",label="Square minimap",tooltip="If you use a square minimap, make the button drag along square edge."}, {type="check",optset=ItemRackSettings,variable="MinimapTooltip",depend="ShowMinimap",label="Show minimap tooltip",tooltip="If tooltips enabled, show what mouse clicks will do when clicking the minimap button."}, {type="check",optset=ItemRackSettings,variable="TrinketMenuMode",label="TrinketMenu mode",tooltip="When mouseover of either trinket slot, open anchored to the top trinket. Left click of a menu item will equip to the top trinket. Right click will equip to the bottom trinket."}, {type="check",optset=ItemRackSettings,variable="AnchorOther",depend="TrinketMenuMode",label="Anchor other trinket",tooltip="In TrinketMenu mode, trinket menus dock to the top trinket. Check this to anchor them to the bottom trinket."}, {type="check",optset=ItemRackSettings,variable="EquipToggle",label="Toggle sets on equip",tooltip="When a set is equipped, if it's already equipped, unequip it."}, {type="check",optset=ItemRackSettings,variable="ShowHotKeys",label="Show key bindings",tooltip="Display key bindings on buttons"}, {type="check",optset=ItemRackSettings,variable="EquipOnSetPick",label="Equip in options",tooltip="Check this to equip sets and items when selecting items in options or from the dropdown in the Sets tab."}, {type="check",optset=ItemRackSettings,variable="CharacterSheetMenus",label="Character sheet menus",tooltip="While this is checked, mouseover of slots on the character sheet will pop out a menu of items that can go in that slot."}, {type="check",optset=ItemRackSettings,variable="DisableAltClick",label="Disable Alt+Click",tooltip="Alt+Click on buttons dragged from the character sheet toggles auto queue for that slot. Check this to disable that behavior. (ie to use Alt+click to self cast instead.)",combatlock=1}, {type="label",label=""}, {type="button",button=ItemRackOptKeyBindings,label="Slot Key Bindings",tooltip="Set key bindings to use slots.",combatlock=1}, {type="button",button=ItemRackOptResetBar,label="Reset Buttons",tooltip="Remove all buttons and restore to default alpha and scale.",combatlock=1}, {type="button",button=ItemRackOptResetEvents,label="Reset Events",tooltip="Restore default events or wipe all events to default settings."}, {type="button",button=ItemRackOptResetEverything,label="Reset Everything",tooltip="Wipe all settings, sets and events to restore mod to a default state.",combatlock=1}, } ItemRackOpt.InitializeSliders() ItemRackOpt.TabOnClick(self,1) -- start at tab 1 (config) ItemRackOptBindFrame:EnableMouseWheel(1) ItemRack.CreateTimer("SlotMarquee",ItemRackOpt.SlotMarquee,.1,1) for i in pairs(ItemRack.CheckButtonLabels) do _G[i]:SetText(ItemRack.CheckButtonLabels[i]) _G[i]:SetTextColor(1,1,1,1) end ItemRackOpt.TriStateCheckSetState(ItemRackOptShowHelm,nil) ItemRackOpt.TriStateCheckSetState(ItemRackOptShowCloak,nil) end function ItemRackOpt.InitializeSliders() local opt,button for i=1,#(ItemRackOpt.OptInfo) do opt = ItemRackOpt.OptInfo[i] if opt.type=="slider" then opt.button:SetMinMaxValues(opt.min,opt.max) opt.button:SetValueStep(opt.step) opt.button:SetValue(ItemRackUser[opt.variable]) _G[opt.button:GetName().."Min"]:SetText(string.format(opt.form,opt.min)) _G[opt.button:GetName().."Max"]:SetText(string.format(opt.form,opt.max)) opt.button.form = opt.form opt.button.min = opt.min opt.button.max = opt.max ItemRackOpt.UpdateSlider(opt.variable) end end end function ItemRackOpt.OnShow(setname) for i=0,19 do ItemRackOpt.Inv[i].id = ItemRack.GetID(i) end if ItemRackUser.CurrentSet and ItemRackUser.Sets[ItemRackUser.CurrentSet] then ItemRackOptSetsName:SetText(ItemRackUser.CurrentSet) ItemRackOpt.selectedIcon = ItemRackUser.Sets[ItemRackUser.CurrentSet].icon for i=0,19 do ItemRackOpt.Inv[i].selected = ItemRackUser.Sets[ItemRackUser.CurrentSet].equip[i] and 1 or nil end else ItemRackOptSetsName:SetText("") ItemRackOpt.selectedIcon = ItemRackOpt.Icons[math.random(#(ItemRackOpt.Icons)-20)+20] end ItemRackOpt.UpdateInv() ItemRackOptSubFrame5:Hide() ItemRackOpt.ListScrollFrameUpdate() end function ItemRackOpt.ChangeEditingSet() local setname = ItemRackUser.CurrentSet if setname and ItemRackUser.Sets[setname] then local set = ItemRackUser.Sets[setname].equip for i=0,19 do if set[i] then ItemRackOpt.Inv[i].id = set[i] ItemRackOpt.Inv[i].selected = 1 else ItemRackOpt.Inv[i].selected = nil ItemRackOpt.Inv[i].id = ItemRack.GetID(i) end end ItemRackOptSetsName:SetText(setname) ItemRackOpt.selectedIcon = ItemRackUser.Sets[setname].icon ItemRackOpt.UpdateInv() ItemRackOptSubFrame5:Hide() end end function ItemRackOpt.UpdateInv() if ItemRack.IsTimerActive("SlotMarquee") then return end local icon,texture,border,item for i=0,19 do icon = _G["ItemRackOptInv"..i.."Icon"] border = _G["ItemRackOptInv"..i.."Border"] border:Hide() if ItemRackOpt.Inv[i].id~=0 then _,texture = ItemRack.GetInfoByID(ItemRackOpt.Inv[i].id) --pass the button's ItemRack-style ID to a function that retrieves the texture for the item if ItemRackOpt.Inv[i].selected and ItemRack.GetCountByID(ItemRackOpt.Inv[i].id)==0 then if ItemRack.FindInBank(ItemRackOpt.Inv[i].id) then border:SetVertexColor(.3,.5,1) else border:SetVertexColor(1,.1,.1) end _G["ItemRackOptInv"..i.."Border"]:Show() end else _,texture = GetInventorySlotInfo(ItemRack.SlotInfo[i].name) end icon:SetTexture(texture) item = _G["ItemRackOptInv"..i] item:UnlockHighlight() if ItemRackOpt.Inv[i].selected then icon:SetVertexColor(1,1,1) if ItemRackOpt.Inv[i].id==0 then item:LockHighlight() end else icon:SetVertexColor(.25,.25,.25) end end ItemRackOpt.PopulateInvIcons() ItemRackOpt.ValidateSetButtons() ItemRackOptSetsCurrentSetIcon:SetTexture(ItemRackOpt.selectedIcon) end function ItemRackOpt.ToggleInvSelect(self) local id = self:GetID() self:SetChecked(0) if ItemRack.IsTimerActive("SlotMarquee") or ItemRackOptSubFrame4:IsVisible() then if ItemRackOptSubFrame6:IsVisible() then ItemRackOpt.BindSlot(id) else ItemRackOpt.SetupQueue(id) end elseif IsShiftKeyDown() then ItemRack.ChatLinkID(ItemRackOpt.Inv[id].id) else ItemRackOpt.Inv[id].selected = not ItemRackOpt.Inv[id].selected ItemRackOpt.UpdateInv() end end -- central function for handling the buttons throughout options UI function ItemRackOpt.ButtonOnClick(self) local button = self:GetName() if button=="ItemRackOptToggleInvAll" then local state = not ItemRackOpt.Inv[1].selected for i=0,19 do ItemRackOpt.Inv[i].selected = state end ItemRackOpt.UpdateInv() elseif button=="ItemRackOptClose" then ItemRackOptFrame:Hide() elseif button=="ItemRackOptSetsSaveButton" then ItemRackOpt.SaveSet() elseif button=="ItemRackOptSetsDeleteButton" then ItemRackOpt.DeleteSet() ItemRackOpt.ValidateSetButtons() elseif button=="ItemRackOptSetsBindButton" then ItemRackOpt.BindSet() elseif button=="ItemRackOptSetsDropDownButton" then ItemRackOptSubFrame5:Show() elseif button=="ItemRackOptSetListClose" then ItemRackOptSubFrame5:Hide() elseif button=="ItemRackOptSlotBindCancel" then ItemRackOptSubFrame6:Hide() elseif button=="ItemRackOptBindCancel" then ItemRackOptBindFrame:Hide() elseif button=="ItemRackOptBindUnbind" then ItemRackOpt.UnbindKey() ItemRackOptBindFrame:Hide() elseif button=="ItemRackOptKeyBindings" then ItemRackOptSubFrame6:Show() elseif button=="ItemRackOptSortListClose" then ItemRackOptSubFrame7:Hide() elseif button=="ItemRackOptResetBar" then ItemRack.ResetButtons() elseif button=="ItemRackOptResetEverything" then ItemRack.ResetEverything() elseif button=="ItemRackOptEventEdit" then ItemRackOptSubFrame8:Show() elseif button=="ItemRackOptEventEditCancel" then ItemRackOptSubFrame8:Hide() elseif button=="ItemRackOptEventNew" then ItemRackOpt.EventSelected = nil ItemRackOpt.EventListScrollFrameUpdate() ItemRackOpt.ValidateEventListButtons() ItemRackOptSubFrame8:Show() elseif button=="ItemRackOptEventEditSave" then ItemRackOpt.EventEditSave() elseif button=="ItemRackOptEventDelete" then ItemRackOpt.EventEditDelete() elseif button=="ItemRackOptEventEditExpand" then ItemRackOpt.ToggleEventEditor() elseif button=="ItemRackFloatingEditorClose" then ItemRackFloatingEditor:Hide() elseif button=="ItemRackOptResetEvents" then ItemRack.ResetEvents() elseif button=="ItemRackFloatingEditorSave" then ItemRackFloatingEditor:Hide() ItemRackOpt.EventEditSave() elseif button=="ItemRackFloatingEditorTest" then RunScript(ItemRackFloatingEditorEditBox:GetText()) elseif button=="ItemRackFloatingEditorUndo" then ItemRackFloatingEditorEditBox:SetText(ItemRackOptEventEditScriptEditBox:GetText()) end end --[[ Icon choices ]] function ItemRackOpt.PopulateInvIcons() local texture for i=0,19 do if ItemRackOpt.Inv[i].id and ItemRackOpt.Inv[i].id~=0 then _,texture = ItemRack.GetInfoByID(ItemRackOpt.Inv[i].id) else _,texture = GetInventorySlotInfo(ItemRack.SlotInfo[i].name) end ItemRackOpt.Icons[i+1] = texture end ItemRackOpt.SetsIconScrollFrameUpdate() end function ItemRackOpt.PopulateInitialIcons() ItemRackOpt.Icons = {} for i=0,19 do table.insert(ItemRackOpt.Icons,"Interface\\Icons\\INV_Misc_QuestionMark") end ItemRackOpt.PopulateInvIcons() table.insert(ItemRackOpt.Icons,"Interface\\Icons\\INV_Banner_02") table.insert(ItemRackOpt.Icons,"Interface\\Icons\\INV_Banner_03") RefreshPlayerSpellIconInfo() local numMacros = #GetMacroIcons(MACRO_ICON_FILENAMES) for i=1,numMacros do table.insert(ItemRackOpt.Icons,"Interface\\Icons\\"..GetSpellorMacroIconInfo(i)) end end function ItemRackOpt.SetsIconScrollFrameUpdate() local item, texture, idx local offset = FauxScrollFrame_GetOffset(ItemRackOptSetsIconScrollFrame) FauxScrollFrame_Update(ItemRackOptSetsIconScrollFrame, ceil(#(ItemRackOpt.Icons)/5),5,28) for i=1,25 do item = _G["ItemRackOptSetsIcon"..i] idx = (offset*5) + i if idx<=#(ItemRackOpt.Icons) then texture = ItemRackOpt.Icons[idx] _G["ItemRackOptSetsIcon"..i.."Icon"]:SetTexture(texture) item:Show() if texture==ItemRackOpt.selectedIcon then item:LockHighlight() else item:UnlockHighlight() end else item:Hide() end end end function ItemRackOpt.SetsIconOnClick(self) local idx = self:GetID() + FauxScrollFrame_GetOffset(ItemRackOptSetsIconScrollFrame)*5 ItemRackOpt.selectedIcon = ItemRackOpt.Icons[idx] ItemRackOptSetsCurrentSetIcon:SetTexture(ItemRackOpt.selectedIcon) ItemRackOpt.SetsIconScrollFrameUpdate() end function ItemRackOpt.SaveSet() ItemRackOptSetsName:ClearFocus() local setname = ItemRackOptSetsName:GetText() ItemRackUser.Sets[setname] = ItemRackUser.Sets[setname] or {} local set = ItemRackUser.Sets[setname] set.icon = ItemRackOpt.selectedIcon set.oldset = nil set.old = {} set.equip = {} for i=0,19 do if ItemRackOpt.Inv[i].selected then set.equip[i] = ItemRackOpt.Inv[i].id end end ItemRackOpt.ValidateSetButtons() end function ItemRackOpt.ValidateSetButtons() ItemRackOptSetsSaveButton:Disable() ItemRackOptSetsBindButton:Disable() ItemRackOptSetsDeleteButton:Disable() ItemRackOptSetsHideCheckButton:Disable() ItemRackOptSetsHideCheckButtonText:SetTextColor(.5,.5,.5,1) ItemRackOptSetsHideCheckButton:SetChecked(0) ItemRackOpt.TriStateCheckSetState(ItemRackOptShowHelm,nil) ItemRackOpt.TriStateCheckSetState(ItemRackOptShowCloak,nil) ItemRackOptShowHelm:Disable() ItemRackOptShowCloak:Disable() local setname = ItemRackOptSetsName:GetText() if string.len(setname)>0 then for i=0,19 do if ItemRackOpt.Inv[i].selected then ItemRackOptSetsSaveButton:Enable() break end end end if ItemRackUser.Sets[setname] then ItemRackOptSetsDeleteButton:Enable() ItemRackOptSetsBindButton:Enable() ItemRackOptSetsHideCheckButton:Enable() ItemRackOptSetsHideCheckButtonText:SetTextColor(1,1,1,1) ItemRackOptSetsHideCheckButton:SetChecked(ItemRack.IsHidden(setname)) ItemRackOptSetsCurrentSetIcon:SetTexture(ItemRackUser.Sets[setname].icon) ItemRackOpt.TriStateCheckSetState(ItemRackOptShowHelm,ItemRackUser.Sets[setname].ShowHelm) ItemRackOpt.TriStateCheckSetState(ItemRackOptShowCloak,ItemRackUser.Sets[setname].ShowCloak) ItemRackOptShowHelm:Enable() ItemRackOptShowCloak:Enable() end end function ItemRackOpt.LoadSet() ItemRackOptSetsName:ClearFocus() local setname = ItemRackOptSetsName:GetText() if ItemRackUser.Sets[setname] then local set = ItemRackUser.Sets[setname].equip for i=0,19 do ItemRackOpt.Inv[i].selected = nil if set[i] then ItemRackOpt.Inv[i].id = set[i] ItemRackOpt.Inv[i].selected = 1 end end ItemRackOpt.selectedIcon = ItemRackUser.Sets[setname].icon ItemRackOpt.UpdateInv() end end function ItemRackOpt.DeleteSet() ItemRackUser.Sets[ItemRackOptSetsName:GetText()] = nil ItemRackOpt.PopulateSetList() ItemRack.CleanupEvents() ItemRackOpt.PopulateEventList() end function ItemRackOpt.HideSet() local setname = ItemRackOptSetsName:GetText() if setname and ItemRackUser.Sets[setname] then if ItemRackOptSetsHideCheckButton:GetChecked() then ItemRack.AddHidden(setname) else ItemRack.RemoveHidden(setname) end end end function ItemRackOpt.MakeEscable(frame,add) local found for i in pairs(UISpecialFrames) do if UISpecialFrames[i]==frame then found = i end end if not found and add=="add" then table.insert(UISpecialFrames,frame) elseif found and add=="remove" then table.remove(UISpecialFrames,found) end end function ItemRackOpt.SaveInv() for i=0,19 do ItemRackOpt.HoldInv[i].id = ItemRackOpt.Inv[i].id ItemRackOpt.HoldInv[i].selected = ItemRackOpt.Inv[i].selected end end function ItemRackOpt.RestoreInv() for i=0,19 do ItemRackOpt.Inv[i].id = ItemRackOpt.HoldInv[i].id ItemRackOpt.Inv[i].selected = ItemRackOpt.HoldInv[i].selected end ItemRackOpt.UpdateInv() end -- when set chooser dropdown shown function ItemRackOpt.PickSetOnShow() -- remove ItemRack_SetsFrame from UISpecialFrames and add ItemRack_Sets_SetSelect ItemRackOpt.MakeEscable("ItemRackOptSubFrame5","add") ItemRackOpt.MakeEscable("ItemRackOptFrame","remove") ItemRackOpt.HideCurrentSubFrame(5) ItemRackOpt.SaveInv() ItemRackOpt.PopulateSetList() end -- when set chooser dropdown hidden function ItemRackOpt.PickSetOnHide() -- remove ItemRack_Sets_SetSelect from UISpecialFrames and add ItemRack_SetsFrame ItemRackOpt.MakeEscable("ItemRackOptSubFrame5","remove") ItemRackOpt.MakeEscable("ItemRackOptFrame","add") ItemRackOpt.ShowPrevSubFrame() if ItemRackOpt.EventSelected and ItemRackOpt.prevFrame==ItemRackOptSubFrame3 then local event = ItemRackOpt.EventList[ItemRackOpt.EventSelected][1] -- if going back to events frame and selected event is enabled with no set, unenable it if not ItemRackUser.Events.Set[event] then ItemRackUser.Events.Enabled[event] = nil ItemRackOpt.PopulateEventList() -- ItemRack.Print("That event can't be enabled without choosing a set.") end end ItemRackOpt.RestoreInv() end function ItemRackOpt.SetListOnEnter(self) _G[self:GetName().."Highlight"]:Show() local set = ItemRackUser.Sets[ItemRackOpt.SetList[self:GetID()+FauxScrollFrame_GetOffset(ItemRackOptSetListScrollFrame)]].equip for i=0,19 do if set[i] then ItemRackOpt.Inv[i].id = set[i] ItemRackOpt.Inv[i].selected = 1 else ItemRackOpt.Inv[i].id = ItemRackOpt.HoldInv[i].id ItemRackOpt.Inv[i].selected = nil end end ItemRackOpt.UpdateInv() end function ItemRackOpt.SetListScrollFrameUpdate() local item, texture, idx local offset = FauxScrollFrame_GetOffset(ItemRackOptSetListScrollFrame) FauxScrollFrame_Update(ItemRackOptSetListScrollFrame, #(ItemRackOpt.SetList), 10, 24) for i=1,10 do item = _G["ItemRackOptSetList"..i] idx = offset + i if idx<=#(ItemRackOpt.SetList) then _G["ItemRackOptSetList"..i.."Name"]:SetText(ItemRackOpt.SetList[idx]) _G["ItemRackOptSetList"..i.."Icon"]:SetTexture(ItemRackUser.Sets[ItemRackOpt.SetList[idx]].icon) _G["ItemRackOptSetList"..i.."Key"]:SetText(ItemRackUser.Sets[ItemRackOpt.SetList[idx]].key) if ItemRack.IsHidden(ItemRackOpt.SetList[idx]) then _G["ItemRackOptSetList"..i.."Name"]:SetTextColor(.7,.7,.7,1) else _G["ItemRackOptSetList"..i.."Name"]:SetTextColor(1,1,1,1) end item:Show() else item:Hide() end end end function ItemRackOpt.PopulateSetList() for i in pairs(ItemRackOpt.SetList) do ItemRackOpt.SetList[i] = nil end for i in pairs(ItemRackUser.Sets) do if not string.match(i,"^~") then --do not list internal sets, prefixed with ~ table.insert(ItemRackOpt.SetList,i) end end table.sort(ItemRackOpt.SetList) ItemRackOpt.SetListScrollFrameUpdate() end -- when a set is chosen in the set list function ItemRackOpt.SelectSetList(self) local setname = ItemRackOpt.SetList[self:GetID()+FauxScrollFrame_GetOffset(ItemRackOptSetListScrollFrame)] for i=0,19 do ItemRackOpt.HoldInv[i].id = ItemRackOpt.Inv[i].id ItemRackOpt.HoldInv[i].selected = ItemRackOpt.Inv[i].selected end if ItemRackOpt.prevFrame==ItemRackOptSubFrame3 then -- fill out event info if picking an event's set local event = ItemRackOpt.EventList[ItemRackOpt.EventSelected][1] if not ItemRackUser.Events.Set[event] then ItemRackUser.Events.Enabled[event] = 1 end ItemRackUser.Events.Set[event] = setname ItemRackOpt.PopulateEventList() else -- fill out set build info if picking a set (ItemRackOptSubFrame2) ItemRackOpt.selectedIcon = ItemRackUser.Sets[setname].icon ItemRackOptSetsName:SetText(setname) if ItemRackSettings.EquipOnSetPick=="ON" then ItemRack.EquipSet(setname) end end ItemRackOptSubFrame5:Hide() ItemRackOpt.UpdateInv() end --[[ Options list ]] function ItemRackOpt.ListScrollFrameUpdate() local offset = FauxScrollFrame_GetOffset(ItemRackOptListScrollFrame) FauxScrollFrame_Update(ItemRackOptListScrollFrame, #(ItemRackOpt.OptInfo),11,24) for i=1,#(ItemRackOpt.OptInfo) do if ItemRackOpt.OptInfo[i].button then ItemRackOpt.OptInfo[i].button:SetFrameLevel(ItemRackOptList1:GetFrameLevel()+1) ItemRackOpt.OptInfo[i].button:Hide() end end local item,idx,opt,button,lock for i=1,11 do button = _G["ItemRackOptList"..i] _G["ItemRackOptList"..i.."Label"]:Hide() _G["ItemRackOptList"..i.."CheckText"]:Hide() _G["ItemRackOptList"..i.."CheckButton"]:Hide() _G["ItemRackOptList"..i.."NumberLabel"]:Hide() _G["ItemRackOptList"..i.."Underline"]:Hide() idx = offset+i if idx<=#(ItemRackOpt.OptInfo) then opt = ItemRackOpt.OptInfo[idx] lock = ItemRack.inCombat and opt.combatlock button:SetAlpha(lock and .5 or 1) if opt.type=="label" then item = _G["ItemRackOptList"..i.."Label"] item:SetText(opt.label) item:Show() if string.len(opt.label)>1 then _G["ItemRackOptList"..i.."Underline"]:Show() end elseif opt.type=="check" then item = _G["ItemRackOptList"..i.."CheckText"] item:SetWidth(opt.depend and 116 or 128) item:SetText(opt.label) if opt.depend and opt.optset[opt.depend]=="OFF" then item:SetTextColor(.5,.5,.5,1) else item:SetTextColor(1,1,1,1) end item:Show() item = _G["ItemRackOptList"..i.."CheckButton"] item:SetChecked(opt.optset[opt.variable]=="ON" and 1 or 0) if lock or (opt.depend and opt.optset[opt.depend]=="OFF") then item:Disable() else item:Enable() end item:Show() elseif opt.type=="number" then item = _G["ItemRackOptList"..i.."NumberLabel"] item:SetText(opt.label) if opt.depend and opt.optset[opt.depend]=="OFF" then item:SetTextColor(.5,.5,.5,1) opt.button:EnableMouse(0) opt.button:SetAlpha(.5) else item:SetTextColor(1,1,1,1) opt.button:EnableMouse(lock and 0 or 1) opt.button:SetAlpha(lock and .5 or 1) end item:Show() opt.button:SetPoint("LEFT",item,"RIGHT",16,-1) opt.button:Show() elseif opt.type=="slider" then opt.button:SetPoint("LEFT",button,"LEFT",32,4) if opt.depend and opt.optset[opt.depend]=="OFF" then opt.button:EnableMouse(0) opt.button:SetAlpha(.5) else opt.button:EnableMouse(lock and 0 or 1) opt.button:SetAlpha(lock and .5 or 1) end opt.button:Show() elseif opt.type=="button" then opt.button:SetPoint("LEFT",button,"LEFT",16,0) opt.button:EnableMouse(lock and 0 or 1) opt.button:SetAlpha(lock and .5 or 1) opt.button:Show() end button:Show() else button:Hide() end end end function ItemRackOpt.SliderValueChanged(self) local name = string.match(self:GetName(),"ItemRackOpt(.+)Slider") if ItemRackUser[name] and ItemRackOpt.OptInfo then ItemRackUser[name] = self:GetValue() ItemRackOpt.UpdateSlider(name) end end function ItemRackOpt.UpdateSlider(name) if ItemRackOpt.OptInfo then local slider = _G["ItemRackOpt"..name.."Slider"] local value = ItemRackUser[name] local number = _G["ItemRackOpt"..name] if slider and value and number then number:SetText(string.format(slider.form or "%s",value)) if name=="ButtonSpacing" then ItemRack.ConstructLayout() elseif name=="Alpha" then ItemRack.ReflectAlpha() elseif name=="MenuScale" then ItemRack.ReflectMenuScale() elseif name=="MainScale" then ItemRack.ReflectMainScale(1) end end end end function ItemRackOpt.NumberEditBoxOnEnter(self) self:ClearFocus() local name = string.match(self:GetName(),"ItemRackOpt(.+)") local newValue = tonumber(self:GetText()) local slider = _G[self:GetName().."Slider"] if newValue and newValue>=slider.min and newValue<=slider.max then ItemRackUser[name] = newValue slider:SetValue(newValue) end ItemRackOpt.UpdateSlider(name) end function ItemRackOpt.NumberEditBoxOnEscape(self) self:ClearFocus() ItemRackOpt.UpdateSlider(string.match(self:GetName(),"ItemRackOpt(.+)")) end function ItemRackOpt.OptListCheckButtonOnClick(self,override) local button = override and override or self local check = button:GetChecked() and "ON" or "OFF" local idx = button:GetParent():GetID() + FauxScrollFrame_GetOffset(ItemRackOptListScrollFrame) local opt = ItemRackOpt.OptInfo[idx] if opt and opt.variable then opt.optset[opt.variable] = check end if opt.variable=="MenuOnRight" then ItemRack.ReflectMenuOnRight() elseif opt.variable=="HideOOC" then ItemRack.ReflectHideOOC() elseif opt.variable=="CooldownCount" then for i in pairs(ItemRackUser.Buttons) do _G["ItemRackButton"..i.."Time"]:SetText("") end for i=1,#(ItemRack.Menu) do if _G["ItemRackMenu"..i] then _G["ItemRackMenu"..i.."Time"]:SetText("") end end ItemRack.WriteButtonCooldowns() ItemRack.WriteMenuCooldowns() elseif opt.variable=="LargeNumbers" then ItemRack.ReflectCooldownFont() elseif opt.variable=="ShowMinimap" or opt.variable=="SquareMinimap" then ItemRack.MoveMinimap() elseif opt.variable=="EnableQueues" then ItemRack.UpdateCombatQueue() elseif opt.variable=="ShowHotKeys" then ItemRack.KeyBindingsChanged() elseif opt.variable=="EnableEvents" then ItemRack.RegisterEvents() elseif opt.variable=="DisableAltClick" then ItemRack.UpdateDisableAltClick() end ItemRackOpt.ListScrollFrameUpdate() end function ItemRackOpt.OptListOnEnter(self,id) if id and type(id)=="number" then local idx = id + FauxScrollFrame_GetOffset(ItemRackOptListScrollFrame) if ItemRackOpt.OptInfo[idx].tooltip then ItemRack.OnTooltip(self,ItemRackOpt.OptInfo[idx].label,ItemRackOpt.OptInfo[idx].tooltip) end else for i=1,#(ItemRackOpt.OptInfo) do if ItemRackOpt.OptInfo[i].button==id then ItemRack.OnTooltip(self,ItemRackOpt.OptInfo[i].label,ItemRackOpt.OptInfo[i].tooltip) break end end end end function ItemRackOpt.OptListOnClick(self) local check = _G[self:GetName().."CheckButton"] if check and check:IsVisible() and check:IsEnabled()==1 then check:SetChecked(not check:GetChecked()) ItemRackOpt.OptListCheckButtonOnClick(self,check) end end --[[ Tabs ]] function ItemRackOpt.TabOnClick(self,override) ItemRackOptBindFrame:Hide() for i=ItemRackOpt.numSubFrames,1,-1 do _G["ItemRackOptSubFrame"..i]:Hide() end local which = override or self:GetID() local tab,frame for i=1,4 do tab = _G["ItemRackOptTab"..i] if which==i then tab:Disable() tab:EnableMouse(0) _G["ItemRackOptSubFrame"..i]:Show() else tab:Enable() tab:EnableMouse(1) end end end --[[ Bindings frame ]] -- hides currently shown subframes except one if passed (ie, ItemRackOpt.HideCurrentSubFrame(5) to hide all but set picker) function ItemRackOpt.HideCurrentSubFrame(except) local frame,prev for i=ItemRackOpt.numSubFrames,1,-1 do if i~=except then frame = _G["ItemRackOptSubFrame"..i] if frame:IsVisible() then frame:Hide() prev = prev or frame end end end ItemRackOpt.prevFrame = prev end function ItemRackOpt.ShowPrevSubFrame() if ItemRackOpt.prevFrame then ItemRackOpt.prevFrame:Show() else ItemRackOptSubFrame1:Show() end end function ItemRackOpt.BindSet() local setname = ItemRackOptSetsName:GetText() ItemRackOpt.Binding = { type="Set", name="Set \""..setname.."\"", buttonName="ItemRack"..UnitName("player")..GetRealmName()..setname } ItemRackOpt.Binding.button = _G[buttonName] or CreateFrame("Button",ItemRackOpt.Binding.buttonName,nil,"SecureActionButtonTemplate") ItemRackOptBindFrame:Show() end function ItemRackOpt.BindFrameOnShow() if not ItemRackOpt.Binding then return end ItemRackOpt.HideCurrentSubFrame() ItemRackOpt.Binding.currentKey=GetBindingKey("CLICK "..ItemRackOpt.Binding.buttonName..":LeftButton") or "Not bound" ItemRackOptBindFrameBindee:SetText(ItemRackOpt.Binding.name) ItemRackOptBindFrameCurrently:SetText("Currently: "..ItemRackOpt.Binding.currentKey) end function ItemRackOpt.BindFrameOnHide() ItemRackOpt.ShowPrevSubFrame() ItemRackOpt.ReconcileSetBindings() ItemRackOpt.Binding = nil end function ItemRackOpt.BindFrameOnKeyDown(self,key) if key=="ESCAPE" then self:Hide() return end local screenshotKey = GetBindingKey("SCREENSHOT"); if ( screenshotKey and key == screenshotKey ) then Screenshot(); return; end local button -- Convert the mouse button names if ( key == "LeftButton" ) then button = "BUTTON1" elseif ( key == "RightButton" ) then button = "BUTTON2" elseif ( key == "MiddleButton" ) then button = "BUTTON3" elseif ( key == "Button4" ) then button = "BUTTON4" elseif ( key == "Button5" ) then button = "BUTTON5" end local keyPressed if ( button ) then if ( button == "BUTTON1" or button == "BUTTON2" ) then return; end keyPressed = button; else keyPressed = key; end if keyPressed=="UNKNOWN" or keyPressed=="LSHIFT" or keyPressed=="RSHIFT" or keyPressed=="LCTRL" or keyPressed=="RCTRL" or keyPressed=="LALT" or keyPressed=="RALT" then return end if ( IsShiftKeyDown() ) then keyPressed = "SHIFT-"..keyPressed end if ( IsControlKeyDown() ) then keyPressed = "CTRL-"..keyPressed end if ( IsAltKeyDown() ) then keyPressed = "ALT-"..keyPressed end if keyPressed then ItemRackOpt.Binding.keyPressed = keyPressed local oldAction = GetBindingAction(keyPressed) if oldAction~="" and keyPressed~=ItemRackOpt.Binding.currentKey then StaticPopupDialogs["ItemRackCONFIRMBINDING"] = { text = NORMAL_FONT_COLOR_CODE..ItemRackOpt.Binding.keyPressed..FONT_COLOR_CODE_CLOSE.." is currently bound to "..NORMAL_FONT_COLOR_CODE..(GetBindingText(oldAction,"BINDING_NAME_") or "")..FONT_COLOR_CODE_CLOSE.."\n\nDo you want to bind "..NORMAL_FONT_COLOR_CODE..keyPressed..FONT_COLOR_CODE_CLOSE.." to "..NORMAL_FONT_COLOR_CODE..ItemRackOpt.Binding.name..FONT_COLOR_CODE_CLOSE.."?", button1 = "Yes", button2 = "No", timeout = 0, hideOnEscape = 1, OnAccept = ItemRackOpt.SetKeyBinding, OnCancel = ItemRackOpt.ResetBindFrame } ItemRackOptBindFrame:EnableKeyboard(0) -- turn off keyboard catching ItemRackOptBindFrame:EnableMouse(0) -- and mouse ItemRackOptBindCancel:Disable() ItemRackOptBindUnbind:Disable() StaticPopup_Show("ItemRackCONFIRMBINDING") else ItemRackOpt.SetKeyBinding() end end end function ItemRackOpt.SetKeyBinding() if not InCombatLockdown() and ItemRackOpt.Binding.keyPressed then ItemRackOpt.UnbindKey() SetBindingClick(ItemRackOpt.Binding.keyPressed,ItemRackOpt.Binding.buttonName) else ItemRack.Print("Sorry, you can't bind keys while in combat.") end ItemRackOpt.ResetBindFrame() ItemRackOptBindFrame:Hide() end function ItemRackOpt.ResetBindFrame() ItemRackOptBindFrame:EnableKeyboard(1) ItemRackOptBindFrame:EnableMouse(1) ItemRackOptBindCancel:Enable() ItemRackOptBindUnbind:Enable() end function ItemRackOpt.UnbindKey() if not InCombatLockdown() and ItemRackOpt.Binding.buttonName then local action = "CLICK "..ItemRackOpt.Binding.buttonName..":LeftButton" while GetBindingKey(action) do SetBinding(GetBindingKey(action)) end end if ItemRackOpt.prevFrame==ItemRackOptSubFrame6 then ItemRackOpt.prevFrame = nil end end function ItemRackOpt.ReconcileSetBindings() local buttonName,key for i in pairs(ItemRackUser.Sets) do ItemRackUser.Sets[i].key = nil buttonName = "ItemRack"..UnitName("player")..GetRealmName()..i if _G[buttonName] then key = GetBindingKey("CLICK "..buttonName..":LeftButton") if key and key~="" then ItemRackUser.Sets[i].key = key end end end ItemRack.SetSetBindings() end --[[ Slot bindings ]] function ItemRackOpt.SlotBindFrameOnShow() ItemRackOpt.MakeEscable("ItemRackOptSubFrame6","add") ItemRackOpt.MakeEscable("ItemRackOptFrame","remove") ItemRackOpt.HideCurrentSubFrame(6) ItemRackOpt.StartMarquee() end function ItemRackOpt.SlotBindFrameOnHide() ItemRackOpt.MakeEscable("ItemRackOptSubFrame6","remove") ItemRackOpt.MakeEscable("ItemRackOptFrame","add") ItemRackOpt.ShowPrevSubFrame() ItemRackOpt.StopMarquee() end function ItemRackOpt.StartMarquee() ItemRackOpt.SaveInv() for i=0,19 do ItemRackOpt.Inv[i].selected = nil end ItemRackOptToggleInvAll:Hide() ItemRackOpt.UpdateInv() ItemRack.StartTimer("SlotMarquee") end function ItemRackOpt.StopMarquee() ItemRack.StopTimer("SlotMarquee") _G["ItemRackOptInv"..ItemRackOpt.slotOrder[ItemRackOpt.currentMarquee+1]]:UnlockHighlight() ItemRackOpt.RestoreInv() ItemRackOptToggleInvAll:Show() end function ItemRackOpt.SlotMarquee() _G["ItemRackOptInv"..ItemRackOpt.slotOrder[ItemRackOpt.currentMarquee+1]]:UnlockHighlight() ItemRackOpt.currentMarquee = mod(ItemRackOpt.currentMarquee+1,#(ItemRackOpt.slotOrder)) _G["ItemRackOptInv"..ItemRackOpt.slotOrder[ItemRackOpt.currentMarquee+1]]:LockHighlight() end function ItemRackOpt.BindSlot(slot) ItemRackOpt.Binding = { type="Slot", name=ItemRack.SlotInfo[slot].real, buttonName="ItemRackButton"..slot } ItemRackOpt.Binding.button = _G[buttonName] ItemRackOptBindFrame:Show() end --[[ Auto queues ]] function ItemRackOpt.QueuesFrameOnShow() ItemRackOpt.StartMarquee() end function ItemRackOpt.QueuesFrameOnHide() ItemRackOpt.StopMarquee() end function ItemRackOpt.SlotQueueFrameOnShow() ItemRackOpt.MakeEscable("ItemRackOptSubFrame7","add") ItemRackOpt.MakeEscable("ItemRackOptFrame","remove") ItemRackOpt.HideCurrentSubFrame(7) for i=0,19 do _G["ItemRackOptInv"..i]:Hide() end ItemRackOptToggleInvAll:Hide() end function ItemRackOpt.SlotQueueFrameOnHide() ItemRackOpt.MakeEscable("ItemRackOptSubFrame7","remove") ItemRackOpt.MakeEscable("ItemRackOptFrame","add") ItemRackOpt.ShowPrevSubFrame() for i=0,19 do _G["ItemRackOptInv"..i]:Show() end ItemRackOptToggleInvAll:Show() end function ItemRackOpt.SetupQueue(id) if not ItemRackUser.Queues[id] then ItemRackUser.Queues[id] = {} end ItemRackOpt.SelectedSlot = id ItemRackOpt.SortSelected = nil ItemRackOptSlotQueueName:SetText(ItemRack.SlotInfo[id].real) ItemRackOpt.PopulateSortList(id) ItemRackOpt.ValidateSortButtons() ItemRackOptSubFrame7:Show() end function ItemRackOpt.PopulateSortList(slot) local sortList = ItemRackUser.Queues[slot] ItemRack.DockWindows("TOPLEFT",ItemRackOptInv1,"TOPRIGHT") ItemRack.BuildMenu(slot,1) -- make a dummy menu to fetch all wearable items for that slot ItemRackMenuFrame:Hide() for i=1,#(ItemRack.Menu) do ItemRackOpt.AddToSortList(sortList,ItemRack.Menu[i]) -- insert new items from menu (in bags/inventory) end ItemRackOptSortListScrollFrameScrollBar:SetValue(0) ItemRackOpt.SortListScrollFrameUpdate() end function ItemRackOpt.AddToSortList(sortList,id) local found for i=1,#(sortList) do found = found or sortList[i]==id end if not found then table.insert(sortList,id) end end function ItemRackOpt.SortListScrollFrameUpdate() local item, name, texture, quality, idx local slot = ItemRackOpt.SelectedSlot local sortList = slot and ItemRackUser.Queues[slot] local offset = FauxScrollFrame_GetOffset(ItemRackOptSortListScrollFrame) FauxScrollFrame_Update(ItemRackOptSortListScrollFrame, sortList and #(sortList) or 0, 11, 24) for i=1,11 do item = _G["ItemRackOptSortList"..i] idx = offset + i if sortList and idx<=#(sortList) then if sortList[idx]==0 then name,texture,quality = "-- stop queue here --","Interface\\Buttons\\UI-GroupLoot-Pass-Up",1 else name,texture,_,quality = ItemRack.GetInfoByID(sortList[idx]) end _G["ItemRackOptSortList"..i.."Name"]:SetText(name) _G["ItemRackOptSortList"..i.."Icon"]:SetTexture(texture) _G["ItemRackOptSortList"..i.."Name"]:SetTextColor(GetItemQualityColor(quality or 1)) item:Show() if idx==ItemRackOpt.SortSelected then ItemRackOpt.LockHighlight(item) else ItemRackOpt.UnlockHighlight(item) end else item:Hide() end end end function ItemRackOpt.LockHighlight(frame) if type(frame)=="string" then frame = _G[frame] end if not frame then return end frame.lockedHighlight = 1 _G[frame:GetName().."Highlight"]:Show() end function ItemRackOpt.UnlockHighlight(frame) if type(frame)=="string" then frame = _G[frame] end if not frame then return end frame.lockedHighlight = nil _G[frame:GetName().."Highlight"]:Hide() end function ItemRackOpt.SortListOnClick(self) local idx = FauxScrollFrame_GetOffset(ItemRackOptSortListScrollFrame) + self:GetID() if ItemRackOpt.SortSelected == idx then ItemRackOpt.SortSelected = nil else ItemRackOpt.SortSelected = idx end ItemRackOpt.SortListScrollFrameUpdate() ItemRackOpt.ValidateSortButtons() end function ItemRackOpt.ValidateSortButtons() local selected = ItemRackOpt.SortSelected local list = ItemRackUser.Queues[ItemRackOpt.SelectedSlot] ItemRackOptSortMoveTop:Enable() ItemRackOptSortMoveUp:Enable() ItemRackOptSortMoveDown:Enable() ItemRackOptSortMoveBottom:Enable() if not selected or #(list)<2 then -- none selected, disable all ItemRackOptSortMoveTop:Disable() ItemRackOptSortMoveUp:Disable() ItemRackOptSortMoveDown:Disable() ItemRackOptSortMoveBottom:Disable() elseif selected==1 then ItemRackOptSortMoveTop:Disable() ItemRackOptSortMoveUp:Disable() elseif selected == #(list) then ItemRackOptSortMoveDown:Disable() ItemRackOptSortMoveBottom:Disable() end local idx = FauxScrollFrame_GetOffset(ItemRackOptSortListScrollFrame) if selected and list[selected] and list[selected]~=0 then ItemRackOptSortMoveDelete:Enable() -- display delay/priority/etc ItemRackOptItemStatsFrame:Show() ItemRackOptSlotQueueName:Hide() ItemRackOptQueueEnable:Hide() local baseID = ItemRack.GetIRString(list[selected],true) ItemRackOptItemStatsPriority:SetChecked(ItemRackItems[baseID] and ItemRackItems[baseID].priority or 0) ItemRackOptItemStatsKeepEquipped:SetChecked(ItemRackItems[baseID] and ItemRackItems[baseID].keep or 0) ItemRackOptItemStatsDelay:SetText((ItemRackItems[baseID] and ItemRackItems[baseID].delay) or 0) else ItemRackOptSortMoveDelete:Disable() ItemRackOptItemStatsFrame:Hide() ItemRackOptSlotQueueName:Show() ItemRackOptQueueEnable:Show() end if not IsShiftKeyDown() and selected then -- keep selected visible on list, moving thumb as needed, unless shift is down local parent = ItemRackOptSortListScrollFrameScrollBar local offset if selected <= idx then offset = (selected==1) and 0 or (parent:GetValue() - (parent:GetHeight() / 2)) parent:SetValue(offset) PlaySound("UChatScrollButton") elseif selected >= (idx+12) then offset = (selected==#(list)) and ItemRackOptSortListScrollFrame:GetVerticalScrollRange() or (parent:GetValue() + (parent:GetHeight() / 2)) parent:SetValue(offset) PlaySound("UChatScrollButton"); end end ItemRackOptQueueEnable:SetChecked(ItemRackUser.QueuesEnabled[ItemRackOpt.SelectedSlot]) end function ItemRackOpt.SortMove(self) local dir = ((self==ItemRackOptSortMoveUp) and -1) or ((self==ItemRackOptSortMoveTop) and "top") or ((self==ItemRackOptSortMoveDown) and 1) or ((self==ItemRackOptSortMoveBottom) and "bottom") local list = ItemRackUser.Queues[ItemRackOpt.SelectedSlot] local idx1 = ItemRackOpt.SortSelected if dir then local idx2 = ((dir=="top") and 1) or ((dir=="bottom") and #(list)) or idx1+dir local temp = list[idx1] if tonumber(dir) then list[idx1] = list[idx2] list[idx2] = temp elseif dir=="top" then table.remove(list,idx1) table.insert(list,1,temp) elseif dir=="bottom" then table.remove(list,idx1) table.insert(list,temp) end ItemRackOpt.SortSelected = idx2 elseif self==ItemRackOptSortMoveDelete then table.remove(list,idx1) ItemRackOpt.SortSelected = nil end ItemRackOpt.ValidateSortButtons() ItemRackOpt.SortListScrollFrameUpdate() end function ItemRackOpt.SortListOnEnter(self) _G[self:GetName().."Highlight"]:Show() local idx = FauxScrollFrame_GetOffset(ItemRackOptSortListScrollFrame) + self:GetID() local list = ItemRackUser.Queues[ItemRackOpt.SelectedSlot] if list[idx] then if list[idx]==0 then ItemRack.OnTooltip(self,"Stop Queue Here","Move this to mark an explicit end to an order. ie, if you have a clickable trinket with a passive effect, and would like to use the passive effect if no better trinkets are off cooldown.") else ItemRack.IDTooltip(self,list[idx]) end end end function ItemRackOpt.SortListOnLeave(self) GameTooltip:Hide() if not self.lockedHighlight then _G[self:GetName().."Highlight"]:Hide() end end -- if an ItemRackItems has no non-default values, remove the entry function ItemRackOpt.ItemStatsCleanup(id) if ItemRackItems[id] then local item = ItemRackItems[id] if not item.delay and not item.priority and not item.keep then ItemRackItems[id] = nil end end end function ItemRackOpt.ItemStatsDelayOnTextChanged(self) local baseID = ItemRack.GetIRString(ItemRackUser.Queues[ItemRackOpt.SelectedSlot][ItemRackOpt.SortSelected],true) local value = tonumber(self:GetText() or "") or 0 if value~=0 then if not ItemRackItems[baseID] then ItemRackItems[baseID] = {} end ItemRackItems[baseID].delay = value else if ItemRackItems[baseID] then ItemRackItems[baseID].delay = nil end ItemRackOpt.ItemStatsCleanup(baseID) end end function ItemRackOpt.ItemStatsCheckOnClick(self) local baseID = ItemRack.GetIRString(ItemRackUser.Queues[ItemRackOpt.SelectedSlot][ItemRackOpt.SortSelected],true) local value = self:GetChecked() local which = self==ItemRackOptItemStatsPriority and "priority" or "keep" if value then if not ItemRackItems[baseID] then ItemRackItems[baseID] = {} end ItemRackItems[baseID][which] = 1 else if ItemRackItems[baseID] then ItemRackItems[baseID][which] = nil end ItemRackOpt.ItemStatsCleanup(baseID) end end function ItemRackOpt.QueueEnableSlotOnClick(self) ItemRackUser.QueuesEnabled[ItemRackOpt.SelectedSlot] = self:GetChecked() ItemRack.UpdateCombatQueue() end --[[ Show/Hide/Ignore Helm/Cloak tristate checkbuttons ]] -- sets the state of a checkbutton to nil, 0 or 1 function ItemRackOpt.TriStateCheckSetState(button,value) local label = _G[button:GetName().."Text"] button.tristate = value if not value then button:SetCheckedTexture("Interface\\Buttons\\UI-CheckBox-Check") button:SetChecked(0) label:SetTextColor(.5,.5,.5) elseif value==0 then button:SetCheckedTexture("Interface\\RAIDFRAME\\ReadyCheck-NotReady") button:SetChecked(1) label:SetTextColor(1,1,1) elseif value==1 then button:SetCheckedTexture("Interface\\Buttons\\UI-CheckBox-Check") button:SetChecked(1) label:SetTextColor(1,1,1) end end -- rotates a checkbutton from indeterminate->unchecked->checked (for show helm/cloak) function ItemRackOpt.TriStateCheckOnClick(self) local newstate if not self.tristate then newstate = 1 -- nil->1 (show) elseif self.tristate==0 then newstate = nil -- 0->nil (ignore) elseif self.tristate==1 then newstate = 0 -- 1->0 (hide) end ItemRackOpt.TriStateCheckSetState(self,newstate) local setname = ItemRackOptSetsName:GetText() if setname and ItemRackUser.Sets[setname] then local which = self==ItemRackOptShowHelm and "ShowHelm" or "ShowCloak" ItemRackUser.Sets[setname][which] = newstate end ItemRackOpt.TriStateCheckTooltip(self) end function ItemRackOpt.TriStateCheckTooltip(self) local tristate_names = { ["nil"] = "Ignore", ["0"] = "Hide", ["1"] = "Show" } local which = self==ItemRackOptShowHelm and "Helm" or "Cloak" ItemRack.OnTooltip(self,which..": "..tristate_names[tostring(self.tristate)],"This determines if the "..string.lower(which).." is shown or hidden when equipped.\n\124TInterface\\Buttons\\UI-CheckBox-Up:22\124t = Ignore\n\124TInterface\\Buttons\\UI-CheckBox-Check:22\124t = Show\n\124TInterface\\RAIDFRAME\\ReadyCheck-NotReady:22\124t = Hide") end --[[ Events ]] ItemRackOpt.EventList = {} function ItemRackOpt.PopulateEventList() local list = ItemRackOpt.EventList local events = ItemRackEvents local user = ItemRackUser.Events -- if an event is selected, save it as oldevent local oldevent = ItemRackOpt.EventSelected and list[ItemRackOpt.EventSelected][1] or nil ItemRackOpt.EventSelected = nil local safeToRegister = 1 -- assume it's safe to register events for i in pairs(list) do list[i] = nil end local setname for i in pairs(events) do if user.Set[i] then setname = user.Set[i] elseif events[i].Type=="Script" and user.Enabled[i] then setname = "zzz" -- give it a fake set name for sorting purposes else setname = nil end if user.Enabled[i] and not setname then safeToRegister = nil end table.insert(list,{i,events[i].Type,user.Enabled[i],setname}) end local function sortbyset(e1,e2) if e1 and e2 and e1[4] and not e2[4] then return true -- sort by set defined elseif e1 and e2 and e1[4] and e2[4] and e1[1]<e2[1] then return true -- sort set-defined by alpha elseif e1 and e2 and not e1[4] and not e2[4] and e1[1]<e2[1] then return true -- sort set-undefined by alpha else return false end end table.sort(ItemRackOpt.EventList,sortbyset) -- find oldevent if it existed if oldevent then for i=1,#(list) do if list[i][1]==oldevent then ItemRackOpt.EventSelected = i break end end end ItemRackOpt.EventListScrollFrameUpdate() ItemRackOpt.ValidateEventListButtons() if safeToRegister then ItemRack.RegisterEvents() end end function ItemRackOpt.EventListScrollFrameUpdate() local item, icon, texture, idx local offset = FauxScrollFrame_GetOffset(ItemRackOptEventListScrollFrame) local list = ItemRackOpt.EventList FauxScrollFrame_Update(ItemRackOptEventListScrollFrame, #(list), 9, 24) for i=1,9 do item = _G["ItemRackOptEventList"..i] idx = offset + i if idx<=#(list) then _G["ItemRackOptEventList"..i.."Name"]:SetText(list[idx][1]) icon = _G["ItemRackOptEventList"..i.."Icon"] if list[idx][2]=="Script" then texture = "Interface\\AddOns\\ItemRackOptions\\ItemRackScriptIcon" elseif ItemRackUser.Events.Set[list[idx][1]] then texture = ItemRackUser.Sets[ItemRackUser.Events.Set[list[idx][1]]].icon else texture = "Interface\\Icons\\INV_Misc_QuestionMark" end icon:SetNormalTexture(texture) icon:SetPushedTexture(texture) _G["ItemRackOptEventList"..i.."Enabled"]:SetChecked(ItemRackUser.Events.Enabled[list[idx][1]]) if idx==ItemRackOpt.EventSelected then ItemRackOpt.LockHighlight(item) else ItemRackOpt.UnlockHighlight(item) end item:Show() else item:Hide() end end end function ItemRackOpt.EventListOnClick(self) local idx = FauxScrollFrame_GetOffset(ItemRackOptEventListScrollFrame) + self:GetID() if ItemRackOpt.EventSelected == idx then ItemRackOpt.EventSelected = nil else ItemRackOpt.EventSelected = idx end ItemRackOpt.EventListScrollFrameUpdate() ItemRackOpt.ValidateEventListButtons() end function ItemRackOpt.EventListOnDoubleClick(self) ItemRackOpt.EventSelected = nil ItemRackOpt.EventListOnClick(self) ItemRackOptSubFrame8:Show() end function ItemRackOpt.EventListOnEnter(self,child) local idx = FauxScrollFrame_GetOffset(ItemRackOptEventListScrollFrame) + (child and self:GetParent():GetID() or self:GetID()) local eventName = ItemRackOpt.EventList[idx][1] local eventType = ItemRackOpt.EventList[idx][2] local event = ItemRackEvents[eventName] local desc = "|cFFBBBBBBEquips a set when " if eventType=="Buff" then if event.Anymount then desc = desc.."riding any mount." else desc = desc.."gaining the buff "..event.Buff end elseif eventType=="Stance" then if event.Stance == 0 then desc = desc.."leaving forms." else desc = desc.."entering stance:"..event.Stance.."." end elseif eventType=="Zone" then desc = desc.."entering one of the following zones:" for i in pairs(event.Zones) do desc = desc.."\n"..i end else desc = "|cFFBBBBBBScript event triggered on "..event.Trigger local comment = string.match(event.Script,"--%[%[(.+)%]%]") if comment then desc = desc.."\n"..comment end end if event.NotInPVP then desc = desc.."\n|cFF888888Except in PVP instances." end if event.Unequip then desc = desc.."\n|cFF888888Unequips when condition ends." end ItemRack.OnTooltip(self,eventName,desc) _G[(child and self:GetParent():GetName() or self:GetName()).."Highlight"]:Show() end function ItemRackOpt.EventListOnLeave(self,child) GameTooltip:Hide() if child and not self:GetParent().lockedHighlight then _G[self:GetParent():GetName().."Highlight"]:Hide() elseif not child and not self.lockedHighlight then _G[self:GetName().."Highlight"]:Hide() end end function ItemRackOpt.ValidateEventListButtons() if ItemRackOpt.EventSelected then ItemRackOptEventEdit:Enable() ItemRackOptEventDelete:Enable() else ItemRackOptEventEdit:Disable() ItemRackOptEventDelete:Disable() end end function ItemRackOpt.EventListIconOnClick(self) local idx = FauxScrollFrame_GetOffset(ItemRackOptEventListScrollFrame) + self:GetParent():GetID() ItemRackOpt.EventSelected = idx ItemRackOpt.EventListScrollFrameUpdate() ItemRackOpt.ValidateEventListButtons() if ItemRackOpt.EventList[ItemRackOpt.EventSelected][2]~="Script" then ItemRackOptSubFrame5:Show() -- Buff, Stance or Zone event, go pick a set else ItemRackOptSubFrame8:Show() -- Script event, go straight to editing it end end function ItemRackOpt.EventListEnabledOnClick(self) local idx = FauxScrollFrame_GetOffset(ItemRackOptEventListScrollFrame) + self:GetParent():GetID() ItemRackOpt.EventSelected = idx local checked = self:GetChecked() ItemRackUser.Events.Enabled[ItemRackOpt.EventList[idx][1]] = checked if checked then ItemRackUser.EnableEvents = "ON" ItemRack.ReflectEventsRunning() end if checked and ItemRackOpt.EventList[idx][2]~="Script" and not ItemRackUser.Events.Set[ItemRackOpt.EventList[idx][1]] then -- if an event without a set is being checked, choose a set ItemRackOpt.EventListIconOnClick(self) end if not checked then ItemRackOpt.EventSelected = nil end ItemRackOpt.PopulateEventList() end function ItemRackOpt.EventEditOnShow() ItemRackOpt.MakeEscable("ItemRackOptSubFrame8","add") ItemRackOpt.MakeEscable("ItemRackOptFrame","remove") ItemRackOpt.HideCurrentSubFrame(8) ItemRackOpt.EventEditPopulateFrame() end function ItemRackOpt.EventEditOnHide() ItemRackFloatingEditor:Hide() ItemRackOpt.MakeEscable("ItemRackOptSubFrame8","remove") ItemRackOpt.MakeEscable("ItemRackOptFrame","add") ItemRackOptEventEditPickTypeFrame:Hide() ItemRackOpt.ShowPrevSubFrame() end function ItemRackOpt.EventEditClearFrame() ItemRackOptEventEditNameEdit:SetText("") ItemRackOptEventEditTypeDropText:SetText("Pick one") ItemRackOptEventEditBuffName:SetText("") ItemRackOptEventEditBuffAnyMount:SetChecked(0) ItemRackOptEventEditBuffUnequip:SetChecked(0) ItemRackOptEventEditBuffNotInPVP:SetChecked(0) ItemRackOptEventEditStanceName:SetText("") ItemRackOptEventEditStanceUnequip:SetChecked(0) ItemRackOptEventEditStanceNotInPVP:SetChecked(0) ItemRackOptEventEditZoneEditBox:SetText("") ItemRackOptEventEditZoneUnequip:SetChecked(0) ItemRackOptEventEditScriptTrigger:SetText("") ItemRackOptEventEditScriptEditBox:SetText("") end function ItemRackOpt.EventEditPopulateFrame() local idx = ItemRackOpt.EventSelected local eventName = idx and ItemRackOpt.EventList[idx][1] or "" local event = ItemRackEvents[eventName] ItemRackOpt.EventEditClearFrame() if idx and event then ItemRackOptEventEditNameEdit:SetText(eventName) ItemRackOptEventEditNameEdit:SetCursorPosition(0) ItemRackOptEventEditTypeDropText:SetText(event.Type) ItemRackOptEventEditBuffName:SetText(event.Buff or "") ItemRackOptEventEditBuffName:SetCursorPosition(0) if event.Anymount then ItemRackOptEventEditBuffAnyMount:SetChecked(1) ItemRackOptEventEditBuffName:SetText("Any mount") end ItemRackOptEventEditBuffUnequip:SetChecked(event.Unequip) ItemRackOptEventEditBuffNotInPVP:SetChecked(event.NotInPVP) ItemRackOptEventEditStanceName:SetText(event.Stance or "") ItemRackOptEventEditStanceUnequip:SetChecked(event.Unequip) ItemRackOptEventEditStanceNotInPVP:SetChecked(event.NotInPVP) ItemRackOptEventEditZoneEditBox:SetText(ItemRackOpt.ConvertZoneTableToList(event.Zones)) ItemRackOptEventEditZoneEditBox:SetCursorPosition(0) ItemRackOptEventEditZoneUnequip:SetChecked(event.Unequip) ItemRackOptEventEditScriptTrigger:SetText(event.Trigger or "") ItemRackOptEventEditScriptTrigger:SetCursorPosition(0) ItemRackOptEventEditScriptEditBox:SetText(event.Script or "") ItemRackOptEventEditScriptEditBox:SetCursorPosition(0) else ItemRackOptEventEditNameEdit:SetFocus() end ItemRackOpt.EventEditAnyMountChanged() ItemRackOpt.EventEditDisplayType() end function ItemRackOpt.EventEditDisplayType() local eventType = ItemRackOptEventEditTypeDropText:GetText() or "" ItemRackOptEventEditBuffFrame:Hide() ItemRackOptEventEditStanceFrame:Hide() ItemRackOptEventEditZoneFrame:Hide() ItemRackOptEventEditScriptFrame:Hide() local eventFrame = _G["ItemRackOptEventEdit"..eventType.."Frame"] if eventFrame then eventFrame:Show() end ItemRackOpt.EventEditValidateButtons() end function ItemRackOpt.ConvertZoneTableToList(t) local list = "" if t then for i in pairs(t) do list = list..i.."\n" end end return list end function ItemRackOpt.ConvertZoneListToTable(list,t) list=list.."\n" for line in string.gmatch(list,"(.-)\n") do if strlen(line)>0 then t[line] = 1 end end end function ItemRackOpt.EventEditTypeDropDownOnClick() local pickFrame = ItemRackOptEventEditPickTypeFrame if pickFrame:IsVisible() then ItemRackOptEventEditPickTypeFrame:Hide() else ItemRackOptEventEditPickTypeFrame:Show() end end function ItemRackOpt.EventEditPickTypeOnClick(self) ItemRackOptEventEditPickTypeFrame:Hide() ItemRackOptEventEditTypeDropText:SetText(self:GetText()) ItemRackOpt.EventEditDisplayType() end function ItemRackOpt.EventEditAnyMountChanged() local item = ItemRackOptEventEditBuffName if ItemRackOptEventEditBuffAnyMount:GetChecked() then item:EnableMouse(0) item:SetTextColor(.5,.5,.5) item:ClearFocus() else item:EnableMouse(1) item:SetTextColor(1,1,1) end ItemRackOpt.EventEditValidateButtons() end function ItemRackOpt.EventEditValidateButtons() local safe = 1 -- default to assume event edit form is filled out ok local test if strlen(ItemRackOptEventEditNameEdit:GetText())<1 then safe = nil end test = ItemRackOptEventEditTypeDropText:GetText() if test~="Buff" and test~="Stance" and test~="Zone" and test~="Script" then safe = nil end local eventType = ItemRackOptEventEditTypeDropText:GetText() if eventType=="Buff" then if ItemRackOptEventEditBuffAnyMount:GetChecked() then safe = 1 else test = ItemRackOptEventEditBuffName:GetText() if test=="Any mount" or strlen(test)<1 then safe = nil end end elseif eventType=="Stance" then if strlen(ItemRackOptEventEditStanceName:GetText())<1 then safe = nil end elseif eventType=="Zone" then if strlen(ItemRackOptEventEditZoneEditBox:GetText())<1 then safe = nil end elseif eventType=="Script" then test = ItemRackFloatingEditor:IsVisible() and ItemRackFloatingEditorEditBox:GetText() or ItemRackOptEventEditScriptEditBox:GetText() if strlen(ItemRackOptEventEditScriptTrigger:GetText())<1 then safe = nil elseif strlen(test)<1 then safe = nil end end if safe then ItemRackOptEventEditSave:Enable() else ItemRackOptEventEditSave:Disable() end return safe end function ItemRackOpt.EventEditSave(override) if ItemRackFloatingEditor:IsVisible() then ItemRackFloatingEditor:Hide() end local eventNameEdit = ItemRackOptEventEditNameEdit eventNameEdit:SetFocus() -- grab focus from whatever had it eventNameEdit:ClearFocus() -- and clear it (so ESC works with static popups) local eventName = eventNameEdit:GetText() if not override then -- if override is set, this was run via a static popup local oldName = ItemRackOpt.EventSelected and ItemRackOpt.EventList[ItemRackOpt.EventSelected][1] or "" if (not ItemRackOpt.EventSelected and ItemRackEvents[eventName]) or (ItemRackEvents[eventName] and oldName~=eventName) then StaticPopupDialogs["ItemRackConfirmEventOverwrite"] = { text = "An event with that name already exists.\nDo you want to overwrite it?", button1 = "Yes", button2 = "No", timeout = 0, hideOnEscape = 1, whileDead = 1, OnAccept = function() StaticPopupDialogs["ItemRackConfirmEventOverwrite"].OnCancel() ItemRackOpt.EventEditSave(1) end, OnCancel = function() ItemRackOptEventEditSave:Enable() ItemRackOptEventEditCancel:Enable() end } ItemRackOptEventEditSave:Disable() ItemRackOptEventEditCancel:Disable() StaticPopup_Show("ItemRackConfirmEventOverwrite") return end end ItemRackEvents[eventName] = {} local event=ItemRackEvents[eventName] event.Type = ItemRackOptEventEditTypeDropText:GetText() if event.Type=="Buff" then event.Anymount = ItemRackOptEventEditBuffAnyMount:GetChecked() event.Buff = ItemRackOptEventEditBuffName:GetText() event.Unequip = ItemRackOptEventEditBuffUnequip:GetChecked() event.NotInPVP = ItemRackOptEventEditBuffNotInPVP:GetChecked() elseif event.Type=="Stance" then event.Stance = ItemRackOptEventEditStanceName:GetText() if tonumber(event.Stance) then event.Stance = tonumber(event.Stance) end event.Unequip = ItemRackOptEventEditStanceUnequip:GetChecked() event.NotInPVP = ItemRackOptEventEditStanceNotInPVP:GetChecked() elseif event.Type=="Zone" then event.Unequip = ItemRackOptEventEditZoneUnequip:GetChecked() event.Zones = {} ItemRackOpt.ConvertZoneListToTable(ItemRackOptEventEditZoneEditBox:GetText(),event.Zones) elseif event.Type=="Script" then event.Trigger = ItemRackOptEventEditScriptTrigger:GetText() event.Script = ItemRackOptEventEditScriptEditBox:GetText() ItemRackUser.Events.Enabled[eventName] = 1 ItemRackUser.EnableEvents = "ON" ItemRack.ReflectEventsRunning() end ItemRack.Print("Event \""..eventName.."\" saved.") ItemRackOptSubFrame8:Hide() ItemRackOpt.PopulateEventList() -- select this new event in the event list for i=1,#(ItemRackOpt.EventList) do if ItemRackOpt.EventList[i][1]==eventName then ItemRackOpt.EventSelected = i break end end ItemRackOpt.EventListScrollFrameUpdate() ItemRackOpt.ValidateEventListButtons() end function ItemRackOpt.EventEditDelete(override) local eventName = ItemRackOpt.EventList[ItemRackOpt.EventSelected][1] if ItemRackUser.Events.Set[eventName] or ItemRackUser.Events.Enabled[eventName] then ItemRackUser.Events.Set[eventName] = nil ItemRackUser.Events.Enabled[eventName] = nil ItemRackOpt.EventSelected = nil ItemRackOpt.PopulateEventList() return end if not override then StaticPopupDialogs["ItemRackConfirmEventDelete"] = { text = "Are you sure you want to delete the event \""..eventName.."\"?", button1 = "Yes", button2 = "No", timeout = 0, hideOnEscape = 1, whileDead = 1, OnAccept = function() StaticPopupDialogs["ItemRackConfirmEventDelete"].OnCancel() ItemRackOpt.EventEditDelete(1) end, OnCancel = function() ItemRackOptEventNew:Enable() ItemRackOpt.ValidateEventListButtons() end } ItemRackOptEventEdit:Disable() ItemRackOptEventDelete:Disable() ItemRackOptEventNew:Disable() StaticPopup_Show("ItemRackConfirmEventDelete") return end ItemRackEvents[eventName] = nil ItemRackOpt.EventSelected = nil ItemRack.CleanupEvents() ItemRackOpt.PopulateEventList() ItemRack.Print("Event \""..eventName.."\" deleted.") end function ItemRackOpt.ToggleEventEditor() if not ItemRackFloatingEditor:IsVisible() then ItemRackFloatingEditorEditBox:SetWidth(ItemRackFloatingEditor:GetWidth()-50) ItemRackFloatingEditorEditBox:SetText(ItemRackOptEventEditScriptEditBox:GetText()) ItemRackOpt.MakeEscable("ItemRackFloatingEditor","add") ItemRackOpt.MakeEscable("ItemRackOptSubFrame8","remove") ItemRackOptEventEditScriptEditBox:HighlightText() ItemRackOptEventEditScriptEditLabel:Hide() ItemRackOptEventEditScriptEditBackdrop:Hide() ItemRackOptEventEditScriptEditScrollFrame:Hide() ItemRackFloatingEditor:Show() else ItemRackFloatingEditor:Hide() end end function ItemRackOpt.FloatingEditorOnHide() ItemRackOpt.MakeEscable("ItemRackFloatingEditor","remove") if ItemRackOptEventEditScriptFrame:IsVisible() then ItemRackOpt.MakeEscable("ItemRackOptSubFrame8","add") end ItemRackOptEventEditScriptEditBox:SetText(ItemRackFloatingEditorEditBox:GetText()) ItemRackOptEventEditScriptEditLabel:Show() ItemRackOptEventEditScriptEditBackdrop:Show() ItemRackOptEventEditScriptEditScrollFrame:Show() end