annotate libKT/libKT-1.0.lua @ 2:f7a0898d293c

adding library files, toc files, and a missing XML to versioning
author Nenue
date Tue, 21 Jun 2016 08:10:36 -0400
parents
children
rev   line source
Nenue@2 1 --[[ Implements
Nenue@2 2 -- KT.register(frame) to hook the following (all optional):
Nenue@2 3 -- frame:init() run immediately after KT sets itself up
Nenue@2 4 -- frame:profile("Name-TruncatedRealm") called the first time SavedVars data becomes available
Nenue@2 5 -- frame:variables() called by PLAYER_ENTERING_WORLD
Nenue@2 6 -- frame:event(event, ...) replaces the event callback
Nenue@2 7 -- frame:ui() called by /ui when activating
Nenue@2 8 ]]--
Nenue@2 9
Nenue@2 10 --GLOBALS: LibKT, KrakTool, KTErrorFrame, LibKTError, SlashCmdList, SLASH_RL1, SLASH_UI1
Nenue@2 11 local CreateFrame, debugstack, tostring, select = CreateFrame, debugstack, tostring, select
Nenue@2 12 local print, max, unpack, tinsert = print, max, unpack, tinsert
Nenue@2 13 local ipairs, xpcall = ipairs, xpcall
Nenue@2 14 local UI_TOGGLE = false
Nenue@2 15
Nenue@2 16 KrakTool = CreateFrame('Frame', 'KrakTool', UIParent)
Nenue@2 17 LibKT = select(2, ...)
Nenue@2 18 local KT = LibKT
Nenue@2 19 KT.handler = KrakTool
Nenue@2 20 KT.frames = {}
Nenue@2 21
Nenue@2 22 SLASH_RL1 = "/rl"
Nenue@2 23 SlashCmdList.RL = function ()
Nenue@2 24 ReloadUI()
Nenue@2 25 end
Nenue@2 26
Nenue@2 27 SLASH_UI1 = "/ui"
Nenue@2 28 SlashCmdList.UI = function ()
Nenue@2 29 if UI_TOGGLE then
Nenue@2 30 UI_TOGGLE = false
Nenue@2 31 else
Nenue@2 32 UI_TOGGLE = true
Nenue@2 33 end
Nenue@2 34 for i, frame in pairs(KT.frames) do
Nenue@2 35 if UI_TOGGLE then
Nenue@2 36 if frame.close then
Nenue@2 37 frame.close()
Nenue@2 38 else
Nenue@2 39 frame:Hide()
Nenue@2 40 end
Nenue@2 41 else
Nenue@2 42 if frame.ui then
Nenue@2 43 frame.ui()
Nenue@2 44 end
Nenue@2 45 frame:Show()
Nenue@2 46 end
Nenue@2 47 end
Nenue@2 48 end
Nenue@2 49
Nenue@2 50 LibKTError = function(msg)
Nenue@2 51 local dstack = debugstack()
Nenue@2 52 :gsub("Interface\\AddOns\\",'~\\')
Nenue@2 53 :gsub("<(.-)>", function(a) return '|cFF00FFFF<'.. a ..'>|r' end)
Nenue@2 54 KTErrorFrame.errmsg:SetText(msg)
Nenue@2 55 KTErrorFrame.debugstack:SetText(dstack)
Nenue@2 56 KTErrorFrame:SetHeight(KTErrorFrame.debugstack:GetStringHeight() + KTErrorFrame.errmsg:GetStringHeight() + 12)
Nenue@2 57 KTErrorFrame:Show()
Nenue@2 58 end
Nenue@2 59
Nenue@2 60 local initStack = {}
Nenue@2 61 local eventStub = function(self, event, ...)
Nenue@2 62 local isHandled
Nenue@2 63 local nodebug
Nenue@2 64
Nenue@2 65 if self.event then
Nenue@2 66 nodebug = self.event(self, event, ...)
Nenue@2 67 end
Nenue@2 68
Nenue@2 69 if self[event] then
Nenue@2 70 nodebug = nodebug or self[event](self, event, ...)
Nenue@2 71 self.missed = 0
Nenue@2 72 self.handled = self.handled + 1
Nenue@2 73 isHandled = true
Nenue@2 74 else
Nenue@2 75 self.firstEvent = false
Nenue@2 76 self.unhandled = self.unhandled + 1
Nenue@2 77 self.missed = self.missed + 1
Nenue@2 78 end
Nenue@2 79
Nenue@2 80 if nodebug then
Nenue@2 81 return
Nenue@2 82 end
Nenue@2 83
Nenue@2 84 print(self:GetName(), event, ...)
Nenue@2 85
Nenue@2 86 -- debug outputs
Nenue@2 87 if self.status then
Nenue@2 88 self.status:SetText(event .. '\n|cFF00FF00' .. self.handled .. '|r |cFFFF8800' .. self.missed .. '|r |cFFFF4400' .. self.unhandled .. '|r')
Nenue@2 89 if isHandled then
Nenue@2 90 self.status:SetTextColor(0,1,0)
Nenue@2 91 if self.log then
Nenue@2 92 local logtext = event
Nenue@2 93 for i = 1, select('#',...) do
Nenue@2 94 logtext = logtext .. '\n' .. i .. ':' .. tostring(select(i,...))
Nenue@2 95 end
Nenue@2 96 self.log:SetText('|cFFFFFF00last|r\n' .. logtext)
Nenue@2 97 local newWidth = self.log:GetStringWidth()
Nenue@2 98
Nenue@2 99 if self.logfirst then
Nenue@2 100 if not self.firstEvent then
Nenue@2 101 self.firstEvent = event
Nenue@2 102 self.logfirst:SetText('|cFF00FF88first|r\n' .. logtext)
Nenue@2 103 end
Nenue@2 104
Nenue@2 105 newWidth = newWidth + self.logfirst:GetStringWidth()
Nenue@2 106 end
Nenue@2 107 if self.logdiff then
Nenue@2 108 if not event ~= self.firstEvent then
Nenue@2 109 self.firstEvent = event
Nenue@2 110 self.logdiff:SetText('|cFF0088FFdiff|r\n' .. logtext)
Nenue@2 111 end
Nenue@2 112 newWidth = newWidth + self.logdiff:GetStringWidth()
Nenue@2 113 end
Nenue@2 114 --self:SetWidth(newWidth)
Nenue@2 115 end
Nenue@2 116 else
Nenue@2 117 self.status:SetTextColor(1,0,0)
Nenue@2 118 end
Nenue@2 119 end
Nenue@2 120 end
Nenue@2 121
Nenue@2 122 KT.register = function(frame, name, noGUI)
Nenue@2 123 if not name then
Nenue@2 124 name = frame:GetName()
Nenue@2 125 end
Nenue@2 126
Nenue@2 127 KT.frames[name] = frame
Nenue@2 128 frame:SetScript('OnEvent', eventStub)
Nenue@2 129 frame.unhandled = 0
Nenue@2 130 frame.missed = 0
Nenue@2 131 frame.handled = 0
Nenue@2 132 frame.firstEvent = false
Nenue@2 133 tinsert(initStack, frame)
Nenue@2 134
Nenue@2 135 if noGUI then
Nenue@2 136 return
Nenue@2 137 end
Nenue@2 138
Nenue@2 139 frame.UIPanelAnchor = {'TOPLEFT', frame, 'TOPLEFT', 12, -12 }
Nenue@2 140 frame.UIPanelGrowth = {'TOPLEFT', 'TOPRIGHT', 14, 0}
Nenue@2 141 frame.button = KT.button
Nenue@2 142 frame.uibutton = KT.uibutton
Nenue@2 143 frame.tab = KT.tab
Nenue@2 144 frame.print = KT.print
Nenue@2 145
Nenue@2 146 return KT
Nenue@2 147 end
Nenue@2 148
Nenue@2 149 KT.handler:RegisterEvent('VARIABLES_LOADED')
Nenue@2 150 KT.handler:SetScript('OnEvent', function(self, event, ...)
Nenue@2 151 print('KrakTool', event, ...)
Nenue@2 152 if not LibKTDB then
Nenue@2 153 LibKTDB = {}
Nenue@2 154 end
Nenue@2 155 KT.db = LibKTDB
Nenue@2 156
Nenue@2 157 KT.db.runcount = KT.db.runcount or 1
Nenue@2 158 KT.db.runcount = KT.db.runcount + 1
Nenue@2 159 print(KT.db.runcount)
Nenue@2 160
Nenue@2 161 for i, frame in ipairs(initStack) do
Nenue@2 162 print('|cFF00FF00', i, '|r', frame:GetName())
Nenue@2 163 if frame.init then
Nenue@2 164 xpcall(frame.init, LibKTError)
Nenue@2 165 end
Nenue@2 166 end
Nenue@2 167
Nenue@2 168 self:RegisterEvent('PLAYER_ENTERING_WORLD')
Nenue@2 169 self:SetScript('OnEvent', function()
Nenue@2 170 for i, frame in ipairs(initStack) do
Nenue@2 171 print('|cFF00FFFF', i, '|r', frame:GetName())
Nenue@2 172 if frame.variables then
Nenue@2 173 xpcall(frame.variables, LibKTError)
Nenue@2 174 end
Nenue@2 175 end
Nenue@2 176 end)
Nenue@2 177 end)
Nenue@2 178
Nenue@2 179 KT.print = function(module, ...)
Nenue@2 180 print('|cFF00FFFF'..module:GetName()..'|r:', ...)
Nenue@2 181 end
Nenue@2 182
Nenue@2 183 --- Button generators
Nenue@2 184
Nenue@2 185 local GetButtonTemplate = function(name, parent, template, onClick)
Nenue@2 186 if _G[name] then
Nenue@2 187 return _G[name]
Nenue@2 188 end
Nenue@2 189
Nenue@2 190 local button = CreateFrame('Button', name, parent, template)
Nenue@2 191 button:SetScript('OnMouseUp', onClick)
Nenue@2 192 return button
Nenue@2 193 end
Nenue@2 194
Nenue@2 195 local SetButtonAnchor = function(self, collector, anchor, growth)
Nenue@2 196 if self:GetID() == 0 then
Nenue@2 197 self:SetID(#collector)
Nenue@2 198 print('registered TabButton #', self:GetID())
Nenue@2 199 end
Nenue@2 200
Nenue@2 201 if self:GetID() == 1 then
Nenue@2 202 self:SetPoint(unpack(anchor))
Nenue@2 203 else
Nenue@2 204 growth[2] = collector[self:GetID()-1]
Nenue@2 205 self:SetPoint(unpack(growth))
Nenue@2 206 end
Nenue@2 207 end
Nenue@2 208
Nenue@2 209 KT.tab = function(self, name, tooltip, texture, coords)
Nenue@2 210 local button = GetButtonTemplate(name, self, 'KTTabButton', self.SelectTab)
Nenue@2 211 button.icon:SetTexture(texture)
Nenue@2 212 button.tooltip = tooltip
Nenue@2 213 button:SetSize(unpack(self.tabSize))
Nenue@2 214 if coords then
Nenue@2 215 button.icon:SetTexCoord(unpack(coords))
Nenue@2 216 end
Nenue@2 217 SetButtonAnchor(button, self.tabButtons, self.tabAnchor, self.tabGrowth)
Nenue@2 218 return button
Nenue@2 219 end
Nenue@2 220
Nenue@2 221 KT.button = function(self, name, text, tooltip, onClick)
Nenue@2 222 local button = GetButtonTemplate(name, self, 'KTButton', onClick)
Nenue@2 223
Nenue@2 224 button.tooltip = tooltip
Nenue@2 225 button:SetText(text)
Nenue@2 226 button:SetWidth(max(button:GetWidth(), button:GetFontString():GetStringWidth() + 12))
Nenue@2 227
Nenue@2 228 SetButtonAnchor(button, self.controls, self.controlsAnchor, self.controlsGrowth)
Nenue@2 229 return button
Nenue@2 230 end
Nenue@2 231
Nenue@2 232 KT.uibutton = function(self, name, text, tooltip, onClick, texture, coords)
Nenue@2 233 local button = GetButtonTemplate(name, self, 'KTUIPanelButton', onClick)
Nenue@2 234
Nenue@2 235 button.tooltip = tooltip
Nenue@2 236 button:SetText(text)
Nenue@2 237 button.icon:SetTexture(texture)
Nenue@2 238 button:SetWidth(button:GetFontString():GetStringWidth() + button.icon:GetWidth()/1.5)
Nenue@2 239 if coords then
Nenue@2 240 button.icon:SetTexCoord(unpack(coords))
Nenue@2 241 end
Nenue@2 242 SetButtonAnchor(button, self.UIPanels, self.UIPanelAnchor, self.UIPanelGrowth)
Nenue@2 243 return button
Nenue@2 244 end