You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
5.1 KiB

-- ------------------------------------------------------------------------- --
-- Project: Executive Assistant - To-Do/Task List Manager
-- Author: VincentSDSH
-- ------------------------------------------------------------------------- --
local AddonName = ...
local debug = ExecAssist.debug
local L = LibStub('AceLocale-3.0'):GetLocale(AddonName)
-- makes text hyperlinks for graphics to be used inline
function ExecAssist:mkLink(path, size) return ("\124T"..path..":%d:%d:1:0\124t"):format(size, size) end
-- alert
function ExecAssist:alert(msg, r, g, b)
DEFAULT_CHAT_FRAME:AddMessage( (L.appName):cf("EAtan")..(": "):cf("EAblue")..tostring(msg), r or 1, g or 1, b or .8);
end
-- crayons (defined colors)
local Crayons = {
["stop"] = "|r",
["white"] = "FFFFFF",
["black"] = "000000",
["EAtan"] = "ff9966", -- orange
["EAblue"] = "6699ff", -- unoraange
["sunshine"] = "ffff00",
["afternoon"] = "dddd00",
["lightgray"] = "cccccc",
["fuglyYellow"] = "FEDF0B",
["dullRed"] = "aa0000",
["hard_red"] = "ff0000",
["hard_blue"] = "0000ff",
["hard_green"] = "00ff00",
["defaultStyleMgr_acctwide"] = "00efef", -- 0, 0.94, 0.94),
["defaultStyleMgr_purgable"] = "ff007f", -- 1, 0, 0.5),
["defaultStyleMgr_hidden"] = "ba9bc6", -- 0.73, 0.61, 0.78),
["defaultStyleMgr_cmdLineTarget"] = "548984", -- 0.33, 0.54, 0.52),
["defaultStyleMgr_snowflake"] = "ff7c66", -- 1, 0.49, 0.4),
-- whites
["cream"] = "deb887",
-- purples
["lilac"] = "d1c4e7",
["purple"] = "8b87de",
-- greens
["grass"] = "aede87",
-- blues
["sky"] = "87afde",
["cyan"] = "87d8de",
["attn"] = "ff0088",
["acyan"] = "00dddd",
["bcyan"] = "dd00dd",
["colorizeExample"] = "ff6699",
}
-- converts
local function dec2hex(dec) return string.format("%02x", dec) end
function ExecAssist:pcColorToHex(r, g, b) return dec2hex(r*255)..dec2hex(g*255)..dec2hex(b*255) end
function ExecAssist:tbl_pcColorToHex(tbl) return dec2hex(tbl.r*255)..dec2hex(tbl.g*255)..dec2hex(tbl.b*255) end
local function hex2pc(crayon)
local rx, gx, bx = crayon:sub(1,2), crayon:sub(3,4), crayon:sub(5, 6)
return tonumber(rx, 16) / tonumber("ff", 16), tonumber(gx, 16) / tonumber("ff", 16), tonumber(bx, 16) / tonumber("ff", 16)
end
function ExecAssist:Marker(crayon) -- :tbl_hex2pc(crayon)
local r, g, b = hex2pc(Crayons[crayon])
return {["r"] = r, ["g"] = g, ["b"] = b}
end
-- plumbing functions
function ExecAssist:rCopyTable(O)
-- Recursive table copy, handles metatables and avoids __pairs metamethod
local O_type = type(O)
local C
if O_type == 'table' then
C = {}
for O_key, O_value in next, O, nil do
C[ExecAssist:rCopyTable(O_key)] = ExecAssist:rCopyTable(O_value)
end
setmetatable(C, ExecAssist:rCopyTable(getmetatable(O)))
else -- numbers, strings, small dancing frogs named Hector, booleans, etc, etc
C = O
end
return C
end
function ExecAssist:extendStringFunc()
-- Extending the string class in this way (adding functions to the string metatable)... Lua 5.2 Reference Manual:
-- "You can replace the metatable of tables using the setmetatable function. You cannot change the metatable of other types from Lua"
-- One may make a table of the string metatable and extend /that/ but not replace the metatable on a string itself; it'd be safer in
-- this implementation but it is what it is and the data aren't in tables. :trim() should be universal and :rpad() might maaaybe
-- have a conflict but the others (isTask, isGroup, cf (color formatter), cfc (color formatter constrained) ) should be unique
-- enough to avoid conflict. *wince*
-- string.trim = function(str) return (str:gsub("^%s*(.-)%s*$", "%1")) end
string.isGroup = function(data) if data and #data>0 then return (data:sub(1,1) == "g") and true or false else return false end end
string.isTask = function(data) if data and #data>0 then return (data:sub(1,1) == "t") and true or false else return false end end
-- color formatter
string.cf = function(data, startColor, endColor) return ("%s%s%s"):format("|cff"..Crayons[startColor], tostring(data), endcolor==false and "|r" or ((endColor and ("|cff"..Crayons[endColor])) or "|r")) end
-- color formatter curtailed
string.cfc = function(data, Color) return ("%s%s%s"):format("|cff"..Color, tostring(data), "|r") end -- only used for start/stop not start-continue colors
string.rpad = function(str, len, chr) if not chr then chr = " " end return str..string.rep(chr, len-#str) end
--[[ Removing Unused Extenders -------------------- --
-- string.lpad = function(str, len, chr) if not chr then chr = " " end return string.rep(chr, len-#str)..str end
-- string.whatIs = function(data) if data and #data>0 then return data:sub(1,1) else return false end end
--]] -------------------- Removing Unused Extenders --
end
-- event handling
function ExecAssist:Register(E, F)
if (not self.EventsRegistered[E]) then
self.EventsRegistered[E] = true
self:RegisterEvent(E, F)
end
end
function ExecAssist:Unregister(E)
if (self.EventsRegistered[E]) then
self.EventsRegistered[E] = false
self:UnregisterEvent(E)
end
end