Mercurial > wow > devian
comparison UI.lua @ 36:bec37163b7fe v2.0-beta
rewrote the blocks for '/dvn tag' and SetChannel to be more predictable; currently follows:
/dvn tag <source> <dest>
if <dest> matches a channel, then the tag for <source> is added or removed
if <dest> is a string and it doesn't match a channel, then that channel is created with <dest> as a signature
if <dest> is a number that doesn't match a channel index, then <dest> is set to <highest valid index + 1>, the channel is created under that, and <source> is used as its signature
SetChannel(cinfo, key)
start with an empty table t_info that is filled in as follows:
if key doesn't match a valid index/signature, then a channel is being created
if key does match a valid index, then a channel is being updated
if cinfo is a string, then only the signature value is imposed
if cinfo is a table, the values from that table are imposed
if a channel is being created, then the new channel info is filled in from primary channel, the index is auto-generated, and the signature value is checked for collision, and the information is passed through CreateConsole to form internal assignments
if a channel is being updated, then t_info is populated from the channel data, and any internal table assignments are switched over to t_info
the old tables sink into garbage collection
| author | Nenue |
|---|---|
| date | Sun, 27 Dec 2015 08:19:45 -0500 |
| parents | 3304455a3f45 |
| children | d432f49e340e |
comparison
equal
deleted
inserted
replaced
| 35:3304455a3f45 | 36:bec37163b7fe |
|---|---|
| 12 | 12 |
| 13 | 13 |
| 14 | 14 |
| 15 local DEVIAN_FRAME = 'DevianConsole' | 15 local DEVIAN_FRAME = 'DevianConsole' |
| 16 local DEVIAN_DOCK_FRAME = 'DevianDockFrame' | 16 local DEVIAN_DOCK_FRAME = 'DevianDockFrame' |
| 17 local MSG_NEED_DEV_MODE = 'Must be in development mode to use this function.' | |
| 18 | 17 |
| 19 | 18 |
| 20 local function Console_MinMax(self) | 19 local function Console_MinMax(self) |
| 21 if self.minimized then | 20 if self.minimized then |
| 22 self:Maximize() | 21 self:Maximize() |
| 79 db.enabled = self:IsVisible() and true or nil | 78 db.enabled = self:IsVisible() and true or nil |
| 80 db.active = self.active and true or nil | 79 db.active = self.active and true or nil |
| 81 --print('save:', db.signature, 'min=', db.minimized, ' enabled=', db.enabled, ' active = ', db.active, 'x=', db.x, 'y=', db.y, 'h=', db.height, 'w=', db.width) | 80 --print('save:', db.signature, 'min=', db.minimized, ' enabled=', db.enabled, ' active = ', db.active, 'x=', db.x, 'y=', db.y, 'h=', db.height, 'w=', db.width) |
| 82 self:SetPoint('TOPLEFT', UIParent, 'TOPLEFT', db.x, db.y) | 81 self:SetPoint('TOPLEFT', UIParent, 'TOPLEFT', db.x, db.y) |
| 83 self:SetWidth(db.width) | 82 self:SetWidth(db.width) |
| 84 end | |
| 85 | |
| 86 -- Console frame toggler | |
| 87 -- @paramsig [...] | |
| 88 -- @param ... one or more space-seperated channel keys | |
| 89 local function Console_Toggle(input) | |
| 90 local db = D.db | |
| 91 if db.workspace == 1 then | |
| 92 return D:Print(MSG_NEED_DEV_MODE) | |
| 93 end | |
| 94 local search = {} | |
| 95 local n = 0 | |
| 96 if D:GetArgs(input,1) then | |
| 97 repeat | |
| 98 key, n = D:GetArgs(input,1,n) | |
| 99 if D.sig[key] then | |
| 100 table.insert(search, D.sig[key]) | |
| 101 elseif D.console[key] then | |
| 102 table.insert(search, D.console[key]) | |
| 103 end | |
| 104 until n == 1e9 | |
| 105 else | |
| 106 search = D.console | |
| 107 end | |
| 108 | |
| 109 db.enabled = (not db.enabled) and true or nil | |
| 110 for i, c in ipairs(search) do | |
| 111 --print(i,c.index) | |
| 112 if db.enabled then | |
| 113 c.enabled = true | |
| 114 c:Show() | |
| 115 if db.current_channel == c.index then | |
| 116 c:ToFront() | |
| 117 end | |
| 118 c:Save() | |
| 119 else | |
| 120 c:Hide() | |
| 121 end | |
| 122 end | |
| 123 | |
| 124 if db.enabled then | |
| 125 D:Print('toggled on?') | |
| 126 else | |
| 127 D:Print('toggled off?') | |
| 128 end | |
| 129 end | 83 end |
| 130 | 84 |
| 131 --- Brings the console to the front. | 85 --- Brings the console to the front. |
| 132 -- Frame method used to bring a console frame to the front of the display stack. | 86 -- Frame method used to bring a console frame to the front of the display stack. |
| 133 local function Console_ToFront(c) | 87 local function Console_ToFront(c) |
| 140 c:Raise() | 94 c:Raise() |
| 141 c:SetAlpha(db.frontalpha) | 95 c:SetAlpha(db.frontalpha) |
| 142 c.out.backdrop:SetTexture(unpack(db.frontdrop)) | 96 c.out.backdrop:SetTexture(unpack(db.frontdrop)) |
| 143 c.out.backdrop:SetGradientAlpha(unpack(db.frontgrad)) | 97 c.out.backdrop:SetGradientAlpha(unpack(db.frontgrad)) |
| 144 c.out.backdrop:SetBlendMode(db.frontblend) | 98 c.out.backdrop:SetBlendMode(db.frontblend) |
| 99 c.dropmenu.icon:SetVertexColor(unpack(db.headerfontcolor)) | |
| 100 c.title:SetTextColor(unpack(db.headerfontcolor)) | |
| 145 db.current_channel = c.index | 101 db.current_channel = c.index |
| 146 | 102 |
| 147 for _, part in pairs(c.border) do | 103 for _, part in pairs(c.border) do |
| 148 part:SetTexture(unpack(db.frontborder)) | 104 part:SetTexture(unpack(db.frontborder)) |
| 149 end | 105 end |
| 156 --print(db.backblend) | 112 --print(db.backblend) |
| 157 bc:SetAlpha(db.backalpha) | 113 bc:SetAlpha(db.backalpha) |
| 158 bc.out.backdrop:SetTexture(unpack(db.backdrop)) | 114 bc.out.backdrop:SetTexture(unpack(db.backdrop)) |
| 159 bc.out.backdrop:SetGradientAlpha(unpack(db.backgrad)) | 115 bc.out.backdrop:SetGradientAlpha(unpack(db.backgrad)) |
| 160 bc.out.backdrop:SetBlendMode(db.backblend) | 116 bc.out.backdrop:SetBlendMode(db.backblend) |
| 117 bc.dropmenu.icon:SetVertexColor(unpack(db.backborder)) | |
| 118 bc.title:SetTextColor(unpack(db.backborder)) | |
| 161 | 119 |
| 162 for _, part in pairs(bc.border) do | 120 for _, part in pairs(bc.border) do |
| 163 part:SetTexture(unpack(db.backborder)) | 121 part:SetTexture(unpack(db.backborder)) |
| 164 end | 122 end |
| 165 end | 123 end |
| 217 | 175 |
| 218 --print('create(2)') | 176 --print('create(2)') |
| 219 for k,v in pairs(vars) do | 177 for k,v in pairs(vars) do |
| 220 f[k] = v | 178 f[k] = v |
| 221 --@debug@ | 179 --@debug@ |
| 222 print(' f['..type(k)..' '..tostring(k)..'] = '..type(v)..' '..tostring(v)) | 180 --print(' f['..type(k)..' '..tostring(k)..'] = '..type(v)..' '..tostring(v)) |
| 223 end | 181 end |
| 224 | 182 |
| 225 f:SetPoint('TOPLEFT', UIParent, 'TOPLEFT', vars.x, vars.y) | 183 f:SetPoint('TOPLEFT', UIParent, 'TOPLEFT', vars.x, vars.y) |
| 226 f:SetSize(vars.width, vars.height) | 184 f:SetSize(vars.width, vars.height) |
| 227 f:Lower() | 185 f:Lower() |
| 228 f.out:SetFont(db.font, db.fontsize, db.fontoutline) | 186 f.out:SetFont(db.font, db.fontsize, db.fontoutline) |
| 229 if (db.current_channel == i) then | 187 if (db.current_channel == i) then |
| 230 f.out.backdrop:SetTexture(unpack(db.frontdrop)) | 188 f.out.backdrop:SetTexture(unpack(db.frontdrop)) |
| 189 f.dropmenu.icon:SetVertexColor(unpack(db.headerfontcolor)) | |
| 190 f.title:SetTextColor(unpack(db.headerfontcolor)) | |
| 231 else | 191 else |
| 232 f.out.backdrop:SetTexture(unpack(db.backdrop)) | 192 f.out.backdrop:SetTexture(unpack(db.backdrop)) |
| 233 end | 193 end |
| 234 | |
| 235 | |
| 236 | 194 |
| 237 f.Save = Console_Save | 195 f.Save = Console_Save |
| 238 f.Minimize = Console_Minimize | 196 f.Minimize = Console_Minimize |
| 239 f.Maximize = Console_Maximize | 197 f.Maximize = Console_Maximize |
| 240 f.MinMax = Console_MinMax | 198 f.MinMax = Console_MinMax |
| 241 f.ToFront = Console_ToFront | 199 f.ToFront = Console_ToFront |
| 242 f.Toggle = D.Console_Toggle | 200 f.Toggle = D.Console_Toggle |
| 243 f:SetScript('OnMouseDown', Console_MouseDown) | 201 f:SetScript('OnMouseDown', Console_MouseDown) |
| 244 f:SetScript('OnMouseUp', Console_MouseUp) | 202 f:SetScript('OnMouseUp', Console_MouseUp) |
| 203 | |
| 204 | |
| 205 UIDropDownMenu_Initialize(f.menuFrame, function() | |
| 206 local info = { { | |
| 207 text= "Close", | |
| 208 value = "OptClose", | |
| 209 func = function () | |
| 210 f.enabled = nil | |
| 211 f:Hide() | |
| 212 f:Save() | |
| 213 end }, | |
| 214 { | |
| 215 text = "Dock", | |
| 216 value = "OptDock", | |
| 217 func = function() print('Dvn', 'docking shenanary') end } | |
| 218 } | |
| 219 for _, v in ipairs(info) do | |
| 220 UIDropDownMenu_AddButton(v) | |
| 221 end | |
| 222 end, 'MENU') | |
| 245 | 223 |
| 246 if vars.minimized then | 224 if vars.minimized then |
| 247 f:Minimize() | 225 f:Minimize() |
| 248 else | 226 else |
| 249 f:Maximize() | 227 f:Maximize() |
| 266 -- @usage channel = D:SetChannel({x = 200, y = 100}, 4) -- updates channel #4 | 244 -- @usage channel = D:SetChannel({x = 200, y = 100}, 4) -- updates channel #4 |
| 267 function D:SetChannel(cinfo, key) | 245 function D:SetChannel(cinfo, key) |
| 268 local db = self.db | 246 local db = self.db |
| 269 local t_info = {} | 247 local t_info = {} |
| 270 local channel, isNew, id, sig, t_id | 248 local channel, isNew, id, sig, t_id |
| 249 --@debug@ | |
| 250 print('setchan(0) cinfo, key', cinfo, key)--@end-debug@ | |
| 271 -- obtain source data | 251 -- obtain source data |
| 272 if tonumber(key) ~= nil and db.channels[key] then | 252 if tonumber(key) ~= nil and db.channels[key] then |
| 273 id = tonumber(key) | 253 id = tonumber(key) |
| 274 elseif D.sigID[tostring(key)] then | 254 elseif D.sigID[tostring(key)] then |
| 275 id = D.sigID[tostring(key)] | 255 id = D.sigID[tostring(key)] |
| 279 end | 259 end |
| 280 local dbvars = db.channels[id] | 260 local dbvars = db.channels[id] |
| 281 t_id = id -- overridden later if new | 261 t_id = id -- overridden later if new |
| 282 t_info.index = t_id -- | 262 t_info.index = t_id -- |
| 283 --@debug@ | 263 --@debug@ |
| 284 --print('setchan(1) cinfo, key, id=', cinfo, key, id)--@end-debug@ | 264 print('setchan(1) cinfo, key, id=', cinfo, key, id)--@end-debug@ |
| 285 | 265 |
| 286 | 266 |
| 287 -- obtain config info | 267 -- obtain config info |
| 288 if type(cinfo) == 'string' then | 268 if type(cinfo) == 'string' then |
| 289 sig = cinfo | 269 sig = cinfo |
| 297 else -- old sig | 277 else -- old sig |
| 298 sig = db.channels[id].signature | 278 sig = db.channels[id].signature |
| 299 end | 279 end |
| 300 t_info.signature = sig | 280 t_info.signature = sig |
| 301 --@debug@ | 281 --@debug@ |
| 302 --print('setchan(2) sig,id,isNew=', sig, id, isNew)--@end-debug@ | 282 print('setchan(2) sig,id,isNew=', sig, id, isNew)--@end-debug@ |
| 303 | 283 |
| 304 for k,v in pairs(cinfo) do -- allow all cinfo to pass | 284 for k,v in pairs(cinfo) do -- allow all cinfo to pass |
| 305 t_info[k] = v | 285 t_info[k] = v |
| 306 end | 286 end |
| 307 | 287 |
| 322 result = sig .. i | 302 result = sig .. i |
| 323 i = i + 1 | 303 i = i + 1 |
| 324 end | 304 end |
| 325 t_info.signature = result | 305 t_info.signature = result |
| 326 end | 306 end |
| 327 t_id = db.max_channel + 1 | 307 t_id = self.max_channel + 1 |
| 328 t_info.index = t_id | 308 t_info.index = t_id |
| 329 --@debug@ | 309 --@debug@ |
| 330 --print('setchan(3a) isNew, sig, t_info.signature=', isNew, sig, t_info.signature)--@end-debug@ | 310 print('setchan(3a) t_id, isNew, sig, t_info.signature=', t_id, isNew, sig, t_info.signature)--@end-debug@ |
| 331 else | 311 else |
| 332 --@debug@ | 312 --@debug@ |
| 333 --print('setchan(3b) isNew, sig, t_info.signature=', isNew, sig, t_info.signature)--@end-debug@ | 313 print('setchan(3b) t_id, isNew, sig, t_info.signature=', t_id, isNew, sig, t_info.signature)--@end-debug@ |
| 334 end | 314 end |
| 335 | 315 |
| 336 local channel | 316 local channel |
| 337 if not self.console[t_id] then -- create a frame | 317 if not self.console[t_id] then -- create a frame |
| 338 if isNew then -- position the channel frame | 318 if isNew then -- position the channel frame |
| 339 t_info.x = t_info.x + 20 | 319 self.max_channel = t_id |
| 340 t_info.y = t_info.y - 20 | 320 db.max_channel = t_id |
| 341 db.channels[t_id] = t_info | 321 t_info.x = t_info.x + 20 |
| 342 --@debug@ | 322 t_info.y = t_info.y - 20 |
| 343 print('setchan(4a)', 't_id, x, y=', t_id, t_info.x, t_info.y)--@end-debug@ | 323 db.channels[t_id] = t_info |
| 324 --@debug@ | |
| 325 print('setchan(4a)', 't_id, x, y=', t_id, t_info.x, t_info.y)--@end-debug@ | |
| 344 end | 326 end |
| 345 channel = CreateConsole(t_id, t_info) | 327 channel = CreateConsole(t_id, t_info) |
| 346 self.console[t_id] = channel | 328 self.console[t_id] = channel |
| 347 self.sig[t_info.signature] = channel | 329 self.sig[t_info.signature] = channel |
| 348 self.sigID[t_info.signature] = t_id | 330 self.sigID[t_info.signature] = t_id |
