Mercurial > wow > devian
diff Devian.lua @ 35:3304455a3f45
code organizing; UI stuff is in the UI script, Devian prime just deals with config and print
corner menu elements placed and hooked, still needs follow-up code
author | Nenue |
---|---|
date | Sun, 27 Dec 2015 03:51:17 -0500 |
parents | 7441f3bce940 |
children | bec37163b7fe |
line wrap: on
line diff
--- a/Devian.lua Sun Dec 27 02:33:06 2015 -0500 +++ b/Devian.lua Sun Dec 27 03:51:17 2015 -0500 @@ -10,9 +10,6 @@ local D = _G.Devian local WORKSPACE_ON, WORKSPACE_OFF = 1, 2 local PLAYER_REALM = UnitName("player") .. '-' .. GetRealmName() -local DEVIAN_FRAME = 'DevianConsole' -local DEVIAN_DOCK_FRAME = 'DevianDockFrame' -local MSG_NEED_DEV_MODE = 'Must be in development mode to use this function.' local print = _G.print local db local defaults = { @@ -45,7 +42,6 @@ last_workspace = 2 -- default workspace to alternate with when just "/dvn" is issued } - local function ScanAddOnList(cmd, ...) local list_state @@ -88,13 +84,15 @@ D:Print('No entry for argument #'..i..': '..tostring(args[i])) return end - oldprint(i, '->', ch.index, '-', ch.signature) + --@debug@ + --print(i, '->', ch.index, '-', ch.signature)--@end-debug@ if i > 2 then table.insert(worklist, ch.index) else target = ch - oldprint('arg1', args[2], target) + --@debug@ + --print('arg1', args[2], target)--@end-debug@ end end D:Print("Docking |cFF88FFFF"..table.concat(worklist, "|r, |cFF88FFFF").."|r with |cFFFFFF00"..target.index..', '..target.signature.."|r.") @@ -221,179 +219,6 @@ end -local function Console_MinMax(self) - if self.minimized then - self:Maximize() - else - self:Minimize() - end -end - -local function Console_Minimize(self) - self:SetHeight(20) - self:SetMaxResize(GetScreenWidth(),20) - self.minimized = true - self.out:Hide() - self:Save() -end - -local function Console_Maximize(self) - local db = db.channels[self.index] - self:SetHeight(db.height) - self:SetMaxResize(GetScreenWidth(),GetScreenHeight()) - self.minimized = nil - self.out:Show() - self:Save() -end - - -local function Console_Save(self) - local db = db.channels[self.index] - if self.x then - db.x = self.x - else - db.x = self:GetLeft() - end - - if self.y then - db.y = self.y - else - db.y = (self:GetTop() - GetScreenHeight()) - end - - if self.width then - db.width = self.width - else - db.width = self:GetWidth() - end - - if not self.minimized then - if self.height then - db.height = self.height - else - db.height = self:GetHeight() - end - self:SetHeight(db.height) - end - - db.dockedTo = self.dockedTo - db.docked = self.docked - - db.minimized = self.minimized and true or nil - db.enabled = self:IsVisible() and true or nil - db.active = self.active and true or nil - --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) - self:SetPoint('TOPLEFT', UIParent, 'TOPLEFT', db.x, db.y) - self:SetWidth(db.width) -end - --- Console frame toggler --- @paramsig [...] --- @param ... one or more space-seperated channel keys -local function Console_Toggle(input) - if db.workspace == 1 then - return D:Print(MSG_NEED_DEV_MODE) - end - local search = {} - local n = 0 - if D:GetArgs(input,1) then - repeat - key, n = D:GetArgs(input,1,n) - if D.sig[key] then - table.insert(search, D.sig[key]) - elseif D.console[key] then - table.insert(search, D.console[key]) - end - until n == 1e9 - else - search = D.console - end - - db.enabled = (not db.enabled) and true or nil - for i, c in ipairs(search) do - --print(i,c.index) - if db.enabled then - c.enabled = true - c:Show() - if db.current_channel == c.index then - c:ToFront() - end - c:Save() - else - c:Hide() - end - end - - if db.enabled then - D:Print('toggled on?') - else - D:Print('toggled off?') - end -end - ---- Brings the console to the front. --- Frame method used to bring a console frame to the front of the display stack. -local function Console_ToFront(c) - --print(D.raise_ct, 'Raising', c.signature) - --print(unpack(db.frontdrop)) - --print(unpack(db.frontgrad)) - --print(db.frontblend) - -- D.raise_ct = D.raise_ct + 1 - c:Raise() - c:SetAlpha(db.frontalpha) - c.out.backdrop:SetTexture(unpack(db.frontdrop)) - c.out.backdrop:SetGradientAlpha(unpack(db.frontgrad)) - c.out.backdrop:SetBlendMode(db.frontblend) - db.current_channel = c.index - - for _, part in pairs(c.border) do - part:SetTexture(unpack(db.frontborder)) - end - - for id, bc in pairs(D.console) do - if id ~= c.index then - --print(D.raise_ct, 'Lowering', bc.signature) - --print(unpack(db.backdrop)) - --print(unpack(db.backgrad)) - --print(db.backblend) - bc:SetAlpha(db.backalpha) - bc.out.backdrop:SetTexture(unpack(db.backdrop)) - bc.out.backdrop:SetGradientAlpha(unpack(db.backgrad)) - bc.out.backdrop:SetBlendMode(db.backblend) - - for _, part in pairs(bc.border) do - part:SetTexture(unpack(db.backborder)) - end - end - - end - -end - -local function Console_MouseDown(self, button, up) - if button == 'LeftButton' then - if up then - self:StopMovingOrSizing() - self:ToFront() - self.x = nil - self.y = nil - self.width = nil - self.height = nil - self:Save() - elseif self.out.grip:IsMouseOver() then - self:StartSizing() - else - self:StartMoving() - end - else - if up then - self:MinMax() - end - end -end -local function Console_MouseUp(self, button) - return Console_MouseDown(self, button, true) -end --- Creates a Devian-style output. -- The first argument describes the channel to output on, and the remaining arguments are concatenated in a manner similar to default print() @@ -472,177 +297,7 @@ end ---- Constructs the frame object for a console channel --- Initializes the console channel at a specified index. --- Configuration data can be overridden by passing a desired settings table. --- @param i Numeric index of the channel as it manifests in db.channels --- @param vars Optional settings table to be used. -local function CreateConsole(i, vars) - if tonumber(i) == nil or math.floor(i) ~= i then - error('Non-integer index value.') - end - if not vars then - vars = db.channels[i] and db.channels[i] or db.channels[db.primary_channel] - end - local f - if vars.docked then - f = CreateFrame('Frame','DevianDockFrame' .. i, DEVIAN_DOCK_FRAME) - else - f= CreateFrame('Frame', 'DevianChannelFrame' .. i, UIParent, DEVIAN_FRAME) - end - --@debug@ - --print(f:GetName()) - --print('create(2)') - for k,v in pairs(vars) do - f[k] = v - --@debug@ - --print(' f['..type(k)..' '..tostring(k)..'] = '..type(v)..' '..tostring(v)) - end - - f:SetPoint('TOPLEFT', UIParent, 'TOPLEFT', vars.x, vars.y) - f:SetSize(vars.width, vars.height) - f:Lower() - f.out:SetFont(db.font, db.fontsize, db.fontoutline) - if (db.current_channel == i) then - f.out.backdrop:SetTexture(unpack(db.frontdrop)) - else - f.out.backdrop:SetTexture(unpack(db.backdrop)) - end - - - - f.Save = Console_Save - f.Minimize = Console_Minimize - f.Maximize = Console_Maximize - f.MinMax = Console_MinMax - f.ToFront = Console_ToFront - f.Toggle = D.Console_Toggle - f:SetScript('OnMouseDown', Console_MouseDown) - f:SetScript('OnMouseUp', Console_MouseUp) - - if vars.minimized then - f:Minimize() - else - f:Maximize() - end - if db.enabled and f.enabled then - f:Show() - end - - return f -end - ---- Updates console information and returns the handle of the channel object that was worked on. --- When key is nil or not a valid handle, a new channel is created using whatever signature can be found in cinfo. --- The signature can be passed as a string, or as a table entry under the key 'signature' --- If the signature of a new channel is also a tag, the channel will be added to that tag --- @param cinfo string signature of a new channel, or a table of config variables to be imposed on the channel --- @param key string signature or index number of channel to operate on --- @usage channel = D:SetChannel('new', nil) -- creates a new channel --- @usage channel = D:SetChannel({x = 200, y = 100}, 4) -- updates channel #4 -function D:SetChannel(cinfo, key) - local t_info = {} - local channel, isNew, id, sig, t_id - -- obtain source data - if tonumber(key) ~= nil and db.channels[key] then - id = tonumber(key) - elseif D.sigID[tostring(key)] then - id = D.sigID[tostring(key)] - else - id = db.primary_channel - isNew = true - end - local dbvars = db.channels[id] - t_id = id -- overridden later if new - t_info.index = t_id -- - --@debug@ - --print('setchan(1) cinfo, key, id=', cinfo, key, id)--@end-debug@ - - - -- obtain config info - if type(cinfo) == 'string' then - sig = cinfo - cinfo = {signature = sig} - elseif type(cinfo) ~= 'table' then -- stop here if a table wans't passed - error('Expecting table of string as arg1') - elseif cinfo.signature then -- new sig - sig = cinfo.signature - elseif isNew then -- new channel sig - sig = 'Ch' - else -- old sig - sig = db.channels[id].signature - end - t_info.signature = sig - --@debug@ - --print('setchan(2) sig,id,isNew=', sig, id, isNew)--@end-debug@ - - for k,v in pairs(cinfo) do -- allow all cinfo to pass - t_info[k] = v - end - - local blocked = { -- ignore these vars: - ['docked'] = true, -- table - ['dockedTo'] = true, -- table-related - ['signature'] = true} -- already determined - for k,v in pairs(dbvars) do - if not t_info[k] and not blocked[k] then -- already set or blocked? - t_info[k] = v - end - end - -- new channel overrides - if isNew then - if D.sigID[sig]then -- find a non-clashing signature - local result, i = sig, 1 - while D.sigID[result] do - result = sig .. i - i = i + 1 - end - t_info.signature = result - end - t_id = db.max_channel + 1 - t_info.index = t_id - --@debug@ - --print('setchan(3a) isNew, sig, t_info.signature=', isNew, sig, t_info.signature)--@end-debug@ - else - --@debug@ - --print('setchan(3b) isNew, sig, t_info.signature=', isNew, sig, t_info.signature)--@end-debug@ - end - - local channel - if not self.console[t_id] then -- create a frame - if isNew then -- position the channel frame - t_info.x = t_info.x + 20 - t_info.y = t_info.y - 20 - db.channels[t_id] = t_info - --@debug@ - print('setchan(4a)', 't_id, x, y=', t_id, t_info.x, t_info.y)--@end-debug@ - end - channel = CreateConsole(t_id, t_info) - self.console[t_id] = channel - self.sig[t_info.signature] = channel - self.sigID[t_info.signature] = t_id - self.IDsig[t_id] = t_info.signature - - end - channel = self.console[t_id] - if channel.minimized then - channel:Minimize() - else - channel:Maximize() - end - - if channel.enabled and db.enabled then -- hide or show last since Min/Max mess with visibility - print('setchan(5a) enable') - channel:Show() - else - print('setchan(5a) disable') - channel:Hide() - end - --@debug@ - --print('setchan(end); c:IsVisible(), c.enabled, db.enabled=', channel:IsVisible(), channel.enabled, db.enabled)--@end-debug@ - return channel -end function D:PrintHelp() D:Print("|cFFFFFF00/dvn|r", @@ -724,7 +379,9 @@ if db.workspace == 1 then return end - + ----------------------------------------------------------------------- + self.db = db + self.channels = db.channels self.max_channel = 0 self.num_channels = 0 self.console = {}