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