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.

5731 lines
189 KiB

-- ------------------------------------------------------------------------- --
-- Project: Executive Assistant - To-Do/Task List Manager
-- Author: VincentSDSH
-- ------------------------------------------------------------------------- --
local AddonName = ...
local debug = ExecAssist.debug
local charList, revCharList = {}, {}
local LibQTip = LibStub("LibQTip-1.0.7.3.5.3ExecAssistMod")
local LSM = LibStub("LibSharedMedia-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale(AddonName)
local mainOpts, ClickMap, TaskAndCharMaintenance, HelpPanel -- TACM is dynamically created, pruned, and maintained so it's made context-local but it still needs to be self.[*] aware so it's loaded in regOptions, mainOpts has a FirstTimeUser prune, ClickMap is updated to match the dynamic map changes
local GROUP_IDENTIFIER, TASK_IDENTIFIER = "g", "t"
local MOVE_UP, MOVE_DOWN = "UP", "DOWN"
local frameStrataOptions = {"BACKGROUND", "LOW", "MEDIUM", "HIGH", "DIALOG", "TOOLTIP"}
-- Initialize Options: reg opt tables & add to blizz opts
local function simpleTcopy(tOri) local tNew = {} if tOri then for i=1,#tOri do tNew[i]=tOri[i] end end return tNew end
local amalgam = {}
local clickmapOrder = {"HELP", "CONFIG", "CLICKMAP", "ClickMap_Config", "TACM", "STYLEMGR", "TOOLTIP CONFIG", "TASKWIN CONFIG", "RESET", "reset_Manual", "ToggleTaskWindow", "ShowDataBrokerTT", "ToggleShowTWControlButtons", "ToggleTooltipTips", "purgePurgables" }
function ExecAssist:clickmapExtend(moduleKey, moduleClickMap, func)
--[ moduleKey ] ------------------------------------------------
-- moduleKey = "NewTestModule"
--[ moduleClickMap ]--------------------------------------------
-- moduleClickMap = {
-- ["code"] = nil, ["m"] = false, ["s"] = nil, ["a"] = nil, ["c"] = nil, ["notify"] = true,
-- ["name"] = "My Name",
-- ["desc"] = "My Description",
-- ["func"] = function() debug("WOOHOO!!") end, -- pity you can't save inlines, in a way
-- }
if moduleClickMap and func then
table.insert(clickmapOrder, moduleKey)
local cmStem = self.db.global.clickmap
if not cmStem[moduleKey] then cmStem[moduleKey] = moduleClickMap; cmStem[moduleKey].isModule = true end
cmStem[moduleKey]["func"] = func
end
end
function ExecAssist:amalgamExtend(k, v) if k and v then amalgam.args[k] = v end end -- adds new control panels
function ExecAssist:helpExtend(k, v) if k and v then HelpPanel.args[k] = v end end -- adds new help panels
function ExecAssist:taskTypeExtend(newTaskType)
if newTaskType then
for k, v in pairs(newTaskType) do
self.taskTypes[k] = v
end
end
end
function ExecAssist:regOptions()
local sdbg, sdbc = self.db.global, self.db.char
local ttStem, cfgOpts = sdbg.tooltip, sdbg.Options.configConfig
local twStem = self:getHandle_TaskWindow()
local SM = ttStem.SM
local function mkHeader(hdrName, numOrder, label) -- Give Me Similar Headers Or Give Me Death ----
return {
order = true and numOrder or 0,
type = "description",
fontSize = "large",
name = function()
-- :doUpdateStatusField() placed /here/ is a full-on cheat to update the status field when tabs change
-- Not the worst kludge/cheat I've done in the past few decades but there really seems no way to
-- trap cleanly the opt-table change in the standard Ace library. And this /is/ simple and clean...
-- There MIGHT be a better way but for now I'm just gonna be a bad, bad bear.
self:doUpdateStatusField( label or hdrName, true )
return hdrName:cf("fuglyYellow").."\n"
end
}
end
self.optValues = L.optsTable_base
-- AceLocale loads before the icons table is ready so gotta sneak these in
-- Reset Times List: 60min intervals and 30min intervals. Realtime toggle may be added one day.
-- Change which of the two lines below are remarked out by moving the two --s
self.optValues["ResetTimesList"] = {"00:00", "01:00", "02:00", "03:00", "04:00", "05:00", "06:00", "07:00", "08:00", "09:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00", "17:00", "18:00", "19:00", "20:00", "21:00", "22:00", "23:00"}
-- self.optValues["ResetTimesList"] = {}; local RTL = self.optValues.ResetTimesList; for i=0,23 do local j = i>9 and tostring(i) or ("0"..tostring(i)); table.insert(RTL, j..":00"); table.insert(RTL, j..":30") end
self.optValues["GroupDisplayModes"] = {
self:mkLink(self.icons.ldb_showGroups, 16).." "..L.optsTable_GroupDisplayModes_1,
self:mkLink(self.icons.ldb_showALLgroups, 16).." "..L.optsTable_GroupDisplayModes_2,
self:mkLink(self.icons.ldb_ShowOnlySelectedGroup, 16).." "..L.optsTable_GroupDisplayModes_3,
self:mkLink(self.icons.ldb_hideGroups, 16).." "..L.optsTable_GroupDisplayModes_4
}
self.optValues["GroupDisplayModes_GTP"] = {
self:mkLink(self.icons.ldb_showALLgroups, 16).." "..L.optsTable_GroupDisplayModes_2,
self:mkLink(self.icons.ldb_hideGroups, 16).." "..L.optsTable_GroupDisplayModes_4
}
self.optValues["ldbIcons_GET"] = { self:mkLink(self.icons.defaultLDBIcon, 16) .. " " ..L.optsTable_ldbIcons_GET_1,
self:mkLink(self.icons.enabled, 16) .. " " ..L.optsTable_ldbIcons_GET_2,
self:mkLink(self.icons.used, 16) .. " " ..L.optsTable_ldbIcons_GET_3
}
self.optValues["tooltipDisplay"] = {self:mkLink(self.icons.ldb_tt_PGT, 16).." "..L.optsTable_tooltipDisplay_1, self:mkLink(self.icons.ldb_tt_GTP, 16).." "..L.optsTable_tooltipDisplay_2}
-- Options Tables
blizzy_Opts = {
type = "group",
order = 10,
name = self:mkLink(self.icons.enabled, 22).." "..L.appName,
args = {
introspacer = { order = 4, type = "description", name = " "},
intro = {
order = 5,
type = "description",
fontSize = "medium",
name = (L.mainOpts_intro):cf("cream"):format(
L.appName:cf("EAtan", "cream"),
L.libExecAssist:cf("lightgray", "cream"),
L.Interns_intro:cf("grass","cream"),
L.appName:cf("EAtan", "cream"),
L.Interns_intro:cf("grass","cream"),
L.Interns_intro:cf("grass","cream"),
L.cmdline_ea:cf("cyan", "cream"),
L.cmdline_exa:cf("cyan")
),
},
spacer2 = { hidden = sdbg.hideHelp, order = 4, type = "description", name = " "},
FirstTimeUser = {
hidden = sdbg.hideHelp,
type = "group",
inline = true,
name = "First Time User",
order = 5,
args = {
intro = {
order = 3,
type = "description",
fontSize = "large",
name = function()
local LappName = L.appName:cf("EAtan", "cream")
local Lhelp = (L.HelpAndInformation):cf("EAblue", "cream")
return (L.FirstTimeUser):cf("cream"):format(LappName,("Getting Started"):cf("EAblue", "cream"), Lhelp, LappName, Lhelp, ("Click Map"):cf("EAblue", "cream"), LappName)
end,
},
removeMsg = {
type = "execute",
name = ("Hide This Message"):cf("white"),
order = 40,
width = "full",
func = function() self.db.global.hideHelp = true; mainOpts.args.FirstTimeUser = nil end, -- dynamic prune
},
},
},
quickDirections = {
type = "group",
order = 10,
name = " ",
inline = true,
args = {
intro1 = {
order = 1,
type = "description",
fontSize = "medium",
name = (L.blizzyOpts_blurb):format(
L.appName:cf("EAtan", "cream"),
L.blizzyOpts_buttonName_config:cf("cyan", "cream"),
L.blizzyOpts_buttonName_help:cf("cyan", "cream"),
L.blizzyOpts_buttonName_clickmap:cf("cyan", "cream")
),
},
-- IOFC must come before GMBC b/c GameMenu is hidden when IOF is shown, when closed, the Game Menu re-openes
-- if IOF opened from there; calling GMBC:Click() has no harmful effects regardless of Game Menu status.
configure = {
type = "execute",
name = (L.blizzyOpts_buttonName_config):cf("white"),
order = 50,
func = function() GameTooltip:Hide(); InterfaceOptionsFrameCancel:Click(); GameMenuButtonContinue:Click(); self:doLoadConfig(); end,
},
help = {
type = "execute",
name = (L.blizzyOpts_buttonName_help):cf("white"),
order = 60,
func = function() GameTooltip:Hide(); InterfaceOptionsFrameCancel:Click(); GameMenuButtonContinue:Click(); self:doLoadHelp(); end,
},
ClickMap = {
type = "execute",
name = (L.blizzyOpts_buttonName_clickmap):cf("white"),
order = 70,
func = function() GameTooltip:Hide(); InterfaceOptionsFrameCancel:Click(); GameMenuButtonContinue:Click(); self:configureClickMap(); end,
},
}
},
verionData = {
order = 20,
type = "description",
fontSize = "medium",
name = ((L.versionData):cf("cream")):format(GetAddOnMetadata(AddonName, 'Version'):cf("grass", "cream"), self.wowVer:cf("grass", "cream"), L.authorName:cf("EAtan")),
},
},
}
mainOpts = {
--hdr = {order=0, type="header", name="<header name>"},
type = "group",
order = 10,
name = self:mkLink(self.icons.enabled, 22).." "..L.appName,
args = {
header = mkHeader(L.appName, 0, L.MainOpts_Label),
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.mainOpts_intro:format(
L.appName:cf("EAtan", "cream"),
L.libExecAssist:cf("EAblue", "cream"),
L.Interns_intro:cf("afternoon", "cream"),
L.appName:cf("EAtan", "cream"),
L.Interns_intro:cf("afternoon", "cream"),
L.Interns_intro:cf("afternoon", "cream"),
L.cmdline_ea:cf("cyan", "cream"),
L.cmdline_exa:cf("cyan", "cream")
):cf("cream"),
},
introspacer = { order = 2, type = "description", name = " "},
verionData = {
order = 3,
type = "description",
fontSize = "medium",
name = ((L.versionData):cf("cream")):format(GetAddOnMetadata(AddonName, 'Version'):cf("grass", "cream"), self.wowVer:cf("grass"), L.authorName:cf("EAtan")),
},
spacer2 = { hidden = sdbg.hideHelp, order = 4, type = "description", name = " "},
FirstTimeUser = {
hidden = sdbg.hideHelp,
type = "group",
inline = true,
name = "First Time User",
order = 50,
args = {
intro = {
order = 3,
type = "description",
fontSize = "large",
name = function()
local LappName = L.appName:cf("EAtan", "cream")
local Lhelp = (L.HelpAndInformation):cf("EAblue", "cream")
return (L.FirstTimeUser):cf("cream"):format(LappName,("Getting Started"):cf("EAblue", "cream"), Lhelp, LappName, Lhelp, ("Click Map"):cf("EAblue", "cream"), LappName)
end,
},
removeMsg = {
type = "execute",
name = ("Hide This Message"):cf("white"),
order = 40,
width = "full",
func = function() self.db.global.hideHelp = true; mainOpts.args.FirstTimeUser = nil; blizzy_Opts.args.FirstTimeUser = nil end, -- dynamic prune
},
},
},
ldbAnchors = {
type = "group",
inline = true,
name = " ",
order = 100,
args = {
hideMinimapIcon = {
order = 20,
type = "toggle",
name = L.HideMapIcon,
get = function(info) return sdbc.DBIconTable.hide end,
set = function(info, value)
local MM = sdbc.DBIconTable
MM.hide = value
if MM.hide then
LibStub("LibDBIcon-1.0"):Hide(AddonName)
else
LibStub("LibDBIcon-1.0"):Show(AddonName)
end
end,
},
ldbIcon = {
name = L.ldbIcon_Name,
desc = L.ldbIcon_desc,
type = "select",
width= "double",
order = 30,
values = self.optValues.ldbIcons_GET,
get = function()
for i = 1, #self.optValues.ldbIcons_SET do
if sdbg.Options.ldbIcon == self.optValues.ldbIcons_SET[i] then
return i
end
end
end,
set = function(i, v) sdbg.Options.ldbIcon = self.optValues.ldbIcons_SET[v]; self.meatPopcicle.icon = self.icons[self.optValues.ldbIcons_SET[v]] end,
},
ldbLabel = {
name = "Label for DataBroker",
desc = "Allows you to use a shortened Label for DataBroker addons as 'Executive Assistant' is fairly long",
type = "input",
width = "double",
order = 40,
get = function() return sdbg.Options.ldbLabel end,
set = function(info, value)
value = value:trim()
if value == "" then
sdbg.Options.ldbLabel = L.appName
else
sdbg.Options.ldbLabel = value
ExecAssist.meatPopcicle.label = value
end
end
}
},
},
AutomaticResetsGroup = {
type = "group",
inline = true,
name = "Automatic Resets",
order = 100,
args = {
intro = {
order = 3,
type = "description",
fontSize = "medium",
name = (L.AutoReset_Name_1):cf("cream"):format( L.AutoReset_Name_2:cf("white", "cream"))
},
DailyResetTime = {
type = "select",
name = L.LocalDailyResetTime,
desc = L.LocalDailyResetDesc,
values = self.optValues.ResetTimesList,
order = 20,
get = function(i) return sdbg.Options.DailyResetTime end,
set = function(i, v)
sdbg.Options.DailyResetTime = v
sdbg.nextDailyReset = self:happyDaily( time() )
sdbg.nextWeeklyReset = self:happyWeekly( time() ) -- weekly needs to get the new reset time too
end,
},
WeeklyResetDay = {
type = "select",
name = L.WeeklyResetDay,
desc = L.LocalDailyResetDesc,
values = self.optValues.DaysOfWeek,
order = 40,
style = "dropdown",
get = function(i) return sdbg.Options.WeeklyResetDay end,
set = function(i, v)
sdbg.Options.WeeklyResetDay = v
sdbg.nextWeeklyReset = self:happyWeekly( time() )
end,
},
showLoginAlerts = {
type = "toggle",
name = L.showLoginAlerts_name,
desc = L.showLoginAlerts_desc,
width = "double",
order = 50,
get = function() return sdbg.Options.showLoginAlerts end,
set = function(i, v) sdbg.Options.showLoginAlerts = v end,
}
},
},
saveCollapseMapGroup = {
type = "group",
inline = true,
name = "Expand / Collapse",
order=110,
args = {
saveCollapseMap = {
type = "toggle",
name = L.saveCollapseMap_name,
desc = L.saveCollapseMap_desc,
order=10,
width="full",
get = function() return sdbg.Options.SaveCollapseMap end,
set = function(i, v) sdbg.Options.SaveCollapseMap = v; if not v then self.db.char.map = {["char"] = nil, ["TW"] = nil, ["GTP"] = nil} end end,
},
tooltip_defaultCollapse = {
disabled = function() return sdbg.Options.SaveCollapseMap end,
type = "toggle",
name = L.defaultCollapse_name,
desc = L.defaultCollapse_desc,
width="double",
order = 20,
get = function() return ttStem.defaultCollapse end,
set = function(i, v) ttStem.defaultCollapse = v end,
},
taskWindow_defaultCollapse = {
disabled = function() return sdbg.Options.SaveCollapseMap end,
type = "toggle",
name = L.twdefaultCollapse_name,
desc = L.twdefaultCollapse_desc,
width="double",
order = 30,
get = function() return twStem.defaultCollapse end,
set = function(i, v) twStem.defaultCollapse = v end,
},
}
},
configConfig = {
type = "group",
inline = true,
name = L.configConfig_name,
order = 120,
args = {
scale = {
type = "range",
name = L.scale_name,
desc = L.scale_desc,
min = .1, max = 2, step = .1,
get = function(info) return cfgOpts.scale end,
set = function(info, value)
cfgOpts.scale = value
self.aceDlg.frame:SetScale( value)
end,
order = 10,
width = "double",
},
width = {
type = "range",
name = L.width_name,
min = 100, max = 4096, step = 10,
get = function(info) return cfgOpts.width end,
set = function(info, value)
cfgOpts.width = value
self.Dialog:SetDefaultSize(self.opts.f_reg, cfgOpts.width, cfgOpts.height )
end,
order = 40,
width = "normal",
},
height = {
type = "range",
name = L.height_name,
min = 100, max = 2048, step = 10,
get = function(info) return cfgOpts.height end,
set = function(info, value)
cfgOpts.height = value
self.Dialog:SetDefaultSize(self.opts.f_reg, cfgOpts.width, cfgOpts.height )
end,
order = 50,
width = "normal",
},
}
},
},
}
HelpPanel = {
type = "group",
order = 20,
name = self:mkLink(self.icons.used, 22).." "..L.configLabels_Help,
args = {
header = mkHeader(L.HelpAndInformation),
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = (L.helpPanel_intro):cf("cream"):format( (L.appName):cf("EAtan", "cream"), (L.gettingstarted):cf("EAblue", "cream")),
},
introspacer = {order = 2,type = "description",name = " "},
gettingStarted = {
type = "group",
name = "Getting Started",
order=10,
args = {
hdr = {order=0, type="header", name=L.GettingStarted_Title},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = (L.GettingStarted_Body):cf("cream"):format(
L.appName:cf("EAtan", "cream"),
L.GettingStarted_CAPS:cf("white", "cream"),
L.ClickMap_Name:cf("EAblue", "cream"),
L.appName:cf("EAtan", "cream"),
L.ClickMap_Name:cf("EAblue", "cream"),
L.Configuration:cf("EAblue", "cream"),
L.configLabels_TaskMaint:cf("EAblue", "cream"),
L.configLabels_Help:cf("EAblue", "cream"),
L.ClickMapConfigDialog:cf("EAblue", "cream"),
L.TACM:cf("EAblue", "cream"),
L.IsItReally:cf("white", "cream"),
L.appName:cf("EAtan", "cream"),
L.FIRSTCONSIDERATIONS:cf("white", "cream"),
L.appName:cf("EAtan", "cream")
),
},
firstConsideration = {
type = "group",
name = L.FirstConsiderations_Label,
order=0,
args = {
hdr = {order=0, type="header", name=L.FirstConsiderations_Label},
nowThatYouHaveStarted = {
order = 20,
type = "description",
fontSize = "medium",
name = (L.FirstConsiderations_Body):cf("cream"):format(
L.FileCabinet:cf("EAtan", "cream"), L.appName:cf("EAtan", "cream"), L.FileCabinet:cf("EAblue", "cream"),
L.COLLAPSEEXPAND:cf("afternoon", "cream"),
L.appName:cf("EAtan", "cream"),
L.MainConfigPanel:cf("EAblue", "cream"),
L.BUTTONPOSITIONS:cf("afternoon", "cream"),
L.configLabels_ToolTip:cf("EAblue", "cream"),
L.configLabels_TaskWindow:cf("EAblue", "cream"),
L.TASKWINDOWREDUNDANT:cf("afternoon", "cream"),
L.TOOLTIPISREDUNDANT:cf("afternoon", "cream"),
L.TOOLTIPISDISTRACTING:cf("afternoon", "cream"),
L.clickmap_ShowDataBrokerTT_name:cf("grass", "cream"),
L.configLabels_TaskWindow:cf("EAblue", "cream"),
L.FONTSANDSIZES:cf("afternoon", "cream"),
L.StyleManager_Label:cf("EAblue", "cream"),
L.SpecialTypeHighlights:cf("EAblue", "cream")
)
},
}
},
UsefulTricks = {
type = "group",
name = L.usefulTricks,
order=0,
args = {
hdr = {order=0, type="header", name="Useful Tricks"},
UsefulTricks = {
order = 30,
type = "description",
fontSize = "medium",
name = (L.gettingstarted_usefultricks):cf("cream"):format(
L.appName:cf("EAtan", "cream"),
L.SpecialTypes:cf("EAblue", "cream"),
L.SpecialTypes:cf("EAblue", "cream")
),
},
}
},
}
},
MainOpts = {
type = "group",
name = L.MainOpts_Label,
order=15,
args = {
hdr = {order=0, type="header", name=L.MainOpts_Label},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = (L.MainOpts_Help):cf("cream"):format(
L.HideMinimapIcon:cf("cyan", "cream"),
L.SelectDataBroker:cf("cyan", "cream"),
L.AutomaticResets:cf("cyan", "cream"),
L.showLoginAlerts_name:cf("cyan", "cream"), L.showLoginAlerts_desc,
L.ExpandCollapse:cf("cyan", "cream"),
L.appName:cf("EAtan", "cream"),
L.SaveGroupCollapseExpand:cf("cyan", "cream"),
L.CollapseTooltipGroups:cf("cyan", "cream"),
L.CollapseTaskWindowGroups:cf("cyan", "cream"),
L.configConfig_name:cf("cyan", "cream"),
L.scale_name:cf("afternoon", "cream"),
L.width_name:cf("afternoon", "cream"),
L.height_name:cf("afternoon", "cream")
),
},
},
},
ClickMap = {
type = "group",
name = L.ClickMap_Name,
order=20,
args = {
hdr = {order=0, type="header", name=L.ClickMap_Name},
expand = {
order = 20,
type = "description",
fontSize = "medium",
name = (L.CLickMap_Help):cf("cream"):format(
L.ClickMap_Name:cf("EAblue", "cream"),
L.appName:cf("EAtan", "cream"),
L.Configuration:cf("cyan", "cream"),
L.ConfigureClickmap:cf("afternoon", "cream"),
L.ClickMapConfiguration:cf("grass", "cream"),
L.ClickMap_Name:cf("EAblue", "cream"),
L.Display:cf("cyan", "cream"),
L.ClickMap_Name:cf("EAblue", "cream")
),
},
},
},
SpecialTypes = {
type = "group",
name = L.SpecialTypes,
order=29,
args = {
hdr = {order=0, type="header", name=L.SpecialTypes},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.SpecialTypes_help:cf("cream"):format(
L.spctype_TASK:cf("white", "cream"), L.spctype_aw:cf("cyan", "cream"),
L.spctype_TASK:cf("white", "cream"), L.spctype_pwc:cf("cyan", "cream"),
L.spctype_TASK:cf("white", "cream"), L.spctype_reminder:cf("cyan", "cream"), L.spctype_pwc:cf("cyan", "cream"),
L.spctype_GROUP:cf("white", "cream"), L.spctype_i:cf("cyan", "cream"),
L.spctype_GROUP:cf("white", "cream"), L.spctype_cmt:cf("cyan", "cream"),
L.spctype_GROUP:cf("white", "cream"), L.spctype_zg:cf("cyan", "cream")
),
},
AccountWide = {
type = "group",
name = L.AccountWideTask_HelpLabel,
order=10,
args = {
hdr = {order=0, type="header", name = L.AccountWideTask_HelpLabel},
intro = {
order = 1, -- |cffff9966 |r |cff6699ff |r
type = "description",
fontSize = "medium",
name = L.AccountWideTask_Help:cf("cream"):format(L.PurgableTask_HelpLabel:cf("EAblue", "cream")),
},
}
},
Purgable = {
type = "group",
name = L.PurgableTask_HelpLabel,
order=22,
args = {
hdr = {order=0, type="header", name = L.PurgableTask_HelpLabel},
intro = {
order = 1, -- |cffff9966 |r |cff6699ff |r
type = "description",
fontSize = "medium",
name = L.PurgableTask_Help:cf("cream"):format(
L.PurgableTask_HelpLabel:cf("cyan", "cream"),
L.PurgePurgables:cf("grass", "cream"),
L.configLabels_ClickMap:cf("sky", "cream"),
L.configLabels_ResetOpts:cf("sky", "cream"),
L.appName:cf("EAtan", "cream")
)
},
cmdLineExample = {
type = "group",
name = L.PurgableTask_cmdilne_HelpLabel,
order=20,
args = {
hdr = {order=0, type="header", name = L.PurgableTask_cmdilne_HelpLabel},
intro = {
order = 1, -- |cffff9966 |r |cff6699ff |r
type = "description",
fontSize = "medium",
name = function()
local slashEA = L.slashEA:cf("grass", "cream")
local paraTask = L.paraTask:cf("cyan", "cream")
local paraMytask = L.paraMytask:cf("lilac", "cream")
local paraAW = L.paraAW:cf("afternoon", "cream")
local paraVector = L.paraVector:cf("attn", "cream")
return L.PurgableTask_cmdilne_Help:cf("cream"):format(
slashEA, paraMytask,
slashEA, paraMytask,
slashEA, paraTask, paraAW,
slashEA, paraTask, paraVector,
slashEA, paraTask, paraAW,
slashEA, paraTask, paraVector,
slashEA, paraMytask,
slashEA, paraTask, paraAW,
slashEA, paraTask, paraVector,
paraTask, paraMytask, paraMytask, paraVector,
paraAW
)
end,
},
},
}
}
},
Reminder = {
type = "group",
name = L.ReminderTask_HelpLabel,
order=23,
args = {
hdr = {order=0, type="header", name = L.ReminderTask_HelpLabel},
intro = {
order = 1, -- |cffff9966 |r |cff6699ff |r
type = "description",
fontSize = "medium",
name = L.ReminderTask_Help:cf("cream"):format(
L.Reminder_shortName:cf("cyan", "cream"),
L.PurgableTask:cf("grass", "cream"),
L.reminder_NextTrigger:cf("afternoon", "cream"),
L.PurgableTask:cf("grass", "cream"),
L.resetType_typeCalendar:cf("sky", "cream"),
L.configLabels_TaskMaint:cf("sky", "cream"),
L.ResetType_HelpHeader:cf("sky", "cream")
),
},
}
},
InvisibleGroup = {
type = "group",
name = L.InvisibleGroup_HelpLabel,
order=30,
args = {
hdr = {order=0, type="header", name = L.InvisibleGroup_HelpLabel},
intro = {
order = 1, -- |cffff9966 |r |cff6699ff |r
type = "description",
fontSize = "medium",
name = function()
local ig_aw = L.ig_AW:cf("afternoon", "cream")
local ig_purg = L.ig_purg:cf("purple", "cream")
return L.InvisibleGroup_Help:cf("cream"):format(
L.InvisibleGroup_HelpLabel:cf("cyan", "cream"),
L.G1:cf("EAtan", "cream"),
ig_aw, ig_purg,
ig_aw, ig_purg,
ig_aw, ig_purg,
L.G2:cf("EAtan", "cream"),
ig_purg, L.task_1:cf("white", "cream"), L.task_2:cf("white", "cream"),
L.G3:cf("EAtan", "cream"),
ig_purg,
L.G4:cf("EAtan", "cream"),
ig_purg,
ig_aw, ig_purg,
L.G1:cf("EAtan", "cream"),
ig_aw, ig_purg,
ig_aw, ig_purg,
ig_aw, ig_purg,
ig_purg, L.task_1:cf("white", "cream"), L.task_2:cf("white", "cream"),
ig_aw, ig_purg,
L.InvisibleGroup_HelpLabel:cf("cyan", "cream")
)
end,
},
}
},
CommandLineTarget = {
type = "group",
name = L.CommandLineTarget ,
order=30,
args = {
hdr = {order=0, type="header", name = L.CommandLineTarget},
intro = {
order = 1, -- |cffff9966 |r |cff6699ff |r
type = "description",
fontSize = "medium",
name = L.CommandLineTarget_Help:cf("cream"):format(
L.TACM:cf("EAblue", "cream"),
L.eaSetGroup:cf("grass", "cream"),
L.CLC:cf("attn", "cream")
),
},
}
},
ZoomGroup = {
type = "group",
name = L.ZoomGroup_Label,
order=30,
args = {
hdr = {order=0, type="header", name = L.ZoomGroup_Label},
intro = {
order = 1, -- |cffff9966 |r |cff6699ff |r
type = "description",
fontSize = "medium",
name = L.ZoomGroup_Help:cf("cream"):format( L.DisplayInterface:cf("EAblue", "cream") ),
},
}
},
}
},
iconHelpTACM = {
type = "group",
name = L.TACM,
order=30,
args = {
hdr = {order=0, type="header", name="Getting Started"},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = (L.TACM_help):cf("cream"):format(
L.appName:cf("EAtan", "cream"),
L.AddOnce_UseMany:cf("afternoon", "cream"),
L.forExample_1:cf("cyan", "cream"),
L.forExample_2:cf("cyan", "cream")
),
},
BasicConfiguration = {
type = "group",
name = L.BasicConfigurationLabel,
order=5,
args = {
hdr = {order=0, type="header", name=L.BasicConfigurationLabel},
intro = {
order = 1, -- |cffff9966 |r
type = "description",
fontSize = "medium",
name = L.BasicConfiguration_Help:cf("cream"):format(
L.DisplayPOVChar:cf("cyan", "cream"),
L.button_Reset:cf("cyan", "cream"),
L.button_Remove:cf("cyan", "cream"),
L.appName:cf("EAtan", "cream"),
L.ignoreChar_name:cf("cyan", "cream"),
L.HideChar_ifNoIncomplete_name:cf("cyan", "cream"),
L.Tooltip_label:cf("afternoon", "cream"),
L.EntryField:cf("cyan", "cream"),
L.gpcolor:cf("cyan", "cream"),
L.Reorganization_ControlName:cf("cyan", "cream"),
L.Reorganization_HelpLabel:cf("EAblue", "cream"),
L.Reorganization_HelpLabel:cf("EAblue", "cream")
)
},
}
},
GroupOptions = {
type = "group",
name = L.GroupOptionsLabel,
order=7,
args = {
hdr = {order=0, type="header", name=L.GroupOptionsLabel},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.GroupOptions_Help:cf("cream"):format(
L.MoveUp:cf("cyan", "cream"),
L.MoveDown:cf("cyan", "cream"),
L.DeleteGroup:cf("cyan", "cream"),
L.AddTask:cf("cyan", "cream"),
L.AddGroup:cf("cyan", "cream"),
L.GroupOptions_help:cf("afternoon", "cream"),
L.DefaultForAllChars:cf("cyan", "cream"),
L.ForThisChar:cf("cyan", "cream"),
L.NB:cf("white", "cream"),
L.Invisible:cf("cyan", "cream"),
L.CmdLineTarget:cf("cyan", "cream"),
L.RenameGroup:cf("cyan", "cream"),
L.HideDays_help:cf("cyan", "cream")
)
},
}
},
TaskOptions = {
type = "group",
name = L.TaskOption_HelpLabel,
order=10,
args = {
hdr = {order=0, type="header", name = L.TaskOption_HelpLabel},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.TaskOptions_Help:cf("cream"):format(
L.TaskOptions_TaskActions:cf("afternoon", "cream"),
L.MoveUp:cf("cyan", "cream"),
L.MoveDown:cf("cyan", "cream"),
L.plusTask:cf("cyan", "cream"),
L.DeleteTask:cf("cyan", "cream"),
L.TaskOptions_TaskOptions:cf("afternoon", "cream"),
L.DefaultForAllChars:cf("cyan", "cream"),
L.ForThisChar:cf("cyan", "cream"),
L.NB:cf("white", "cream"),
L.taskName:cf("cyan", "cream"),
L.ResetType_HelpLabel:cf("cyan", "cream"), L.ResetType_HelpHeader:cf("sky", "cream"),
L.awTask_Help:cf("cyan", "cream"),
L.HideDays_help:cf("cyan", "cream")
),
},
}
},
Reorganization = {
type = "group",
name = L.Reorganization_HelpLabel,
order=11,
args = {
hdr = {order=0, type="header", name = L.Reorganization_HelpLabel},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.Reorganization_Help:cf("cream"):format(
L.TaskOption_HelpLabel:cf("sky", "cream"),
L.GroupOptionsLabel:cf("sky", "cream"),
L.Reorganization_ControlName:cf("cyan", "cream"),
L.BasicConfigurationLabel:cf("cyan", "cream"),
L.Reorg_ReorgMode:cf("afternoon", "cream"),
L.Reorg_GroupTaskConfigMode:cf("afternoon", "cream"),
L.Reorg_ReorgMode:cf("afternoon", "cream"), --
L.Reorg_GA:cf("grass", "cream"),
L.Rerog_TA:cf("grass", "cream"),
L.reorg_ReorgTitle:cf("cyan", "cream"), --
L.reorg_PickUp:cf("cyan", "cream"),
L.reorg_PutDown:cf("cyan", "cream"),
L.reorg_PutInRoot:cf("cyan", "cream")
)
},
}
},
ResetTypes = {
type = "group",
name = L.ResetType_HelpHeader,
order=20,
args = {
hdr = {order=0, type="header", name = L.ResetType_HelpHeader},
intro = {
order = 1, -- |cffff9966 |r |cff6699ff |r
type = "description",
fontSize = "medium",
name = L.ResetType_Help:cf("cream"):format(
L.appName:cf("EAtan", "cream"),
L.autoReset:cf("afternoon", "cream"),
L.LocalDailyResetTime:cf("grass", "cream"),
L.WeeklyResetDay:cf("grass", "cream")
),
},
hdr2 = {order=3, type="header", name = L.ResetCategory_Automatic},
intro2 = {
order = 4, -- |cffff9966 |r |cff6699ff |r
type = "description",
fontSize = "medium",
name = L.ResetType_Help_Automatic:cf("cream"):format(
L.resetType_typeLogin:cf("cyan", "cream"),
L.resetType_typeDaily:cf("cyan", "cream"),
L.resetType_typeWeekly:cf("cyan", "cream"),
L.resetType_typeCalendar:cf("cyan", "cream"),
L.reminder_NextTrigger:cf("grass", "cream"),
L.indentS, L.reminder_LastTrigger:cf("sky", "cream"),
L.reminder_OffsetDays:cf("afternoon", "cream"),
L.reminder_NextTrigger:cf("cream", "cream"),
L.reminder_NextTrigger:cf("grass", "cream"),
L.indentS, L.reminder_NextTrigger:cf("sky", "cream")
),
},
hdr3 = {order=5, type="header", name = L.ResetCategory_Other},
intro3 = {
order = 6, -- |cffff9966 |r |cff6699ff |r
type = "description",
fontSize = "medium",
name = L.ResetType_Help_Other:cf("cream"):format(
L.resetType_typePurgable:cf("cyan", "cream"),
L.Clickmap_Label:cf("sky", "cream"),
L.resetType_typeReminder:cf("cyan", "cream"),
L.PurgableTask:cf("grass", "cream"),
L.indentS,
L.reminder_NextTrigger:cf("sky", "cream"),
L.PurgableTask:cf("grass", "cream"),
L.resetType_typeManual:cf("cyan", "cream")
),
},
}
},
DefaultSpecialFlags = {
type = "group",
name = L.StyleMgr_DefaultSpecialFlags_HelpHeader,
order=25,
args = {
hdr = {order=0, type="header", name = L.StyleMgr_DefaultSpecialFlags_HelpHeader},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.StyleMgr_DefaultSpecialFlags_Help:cf("cream"):format(
L.configLabels_StyleMgr:cf("EAblue", "cream"),
L.StyleMgr_cmdline:cf("defaultStyleMgr_cmdLineTarget", "cream"),
L.StyleMgr_Invisible:cf("defaultStyleMgr_hidden", "cream"),
L.StyleMgr_Zoom:cf("defaultStyleMgr_snowflake", "cream"),
L.StyleMgr_AcctWide:cf("defaultStyleMgr_acctwide", "cream"),
L.StyleMgr_Purgeable:cf("defaultStyleMgr_purgable", "cream")
),
},
}
},
UseThisChar = {
type = "group",
name = L.UseThisChar_Label:format( self:mkLink(self.icons.used, 32)),
order=30,
args = {
hdr = {order=0, type="header", name=L.UseThisChar_header},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.UseThisChar_help:cf("cream"):format(self:mkLink(self.icons.used, 58), L.UseThisChar_H:cf("white", "cream")),
},
}
},
DoNotUseThisChar = {
type = "group",
name = L.DoNotUseThisChar_Label:format(self:mkLink(self.icons.notused, 32)),
order=40,
args = {
hdr = {order=0, type="header", name=L.DoNotUseThisChar_header},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.DoNotUseThisChar_help:cf("cream"):format(self:mkLink(self.icons.notused, 58), L.DoNotUseThisChar_H:cf("white", "cream")),
},
}
},
UseThisChar_reminder = {
type = "group",
name = L.UseThisChar_Label:format( self:mkLink(self.icons.used_R, 32)),
order=44,
args = {
hdr = {order=0, type="header", name=L.UseThisChar_header},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.UseThisChar_help_R:cf("cream"):format(self:mkLink(self.icons.used_R, 58), L.resetType_typeReminder:cf("grass", "cream"), L.SpecialTypes:cf("cyan", "cream"), L.UseThisChar_H:cf("white", "cream")),
},
}
},
DoNotUseThisChar_reminder = {
type = "group",
name = L.DoNotUseThisChar_Label:format(self:mkLink(self.icons.notused_R, 32)),
order=45,
args = {
hdr = {order=0, type="header", name=L.DoNotUseThisChar_header},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.DoNotUseThisChar_help_R:cf("cream"):format(self:mkLink(self.icons.notused_R, 58), L.resetType_typeReminder:cf("grass", "cream"), L.SpecialTypes:cf("cyan", "cream"), L.DoNotUseThisChar_H:cf("white", "cream")),
},
}
},
GroupDisabled = {
type = "group",
name = L.GroupDisabled_Label:format(self:mkLink(self.icons.disabledGroup, 32)),
order=50,
args = {
hdr = {order=0, type="header", name=L.GroupDisabled_header},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.GroupDisabled_help:cf("cream"):format(self:mkLink(self.icons.disabledGroup, 58), L.GroupDisabled_H:cf("white", "cream")),
},
}
},
}
},
StyleManager = {
type = "group",
name = L.StyleManager_Label,
order=40,
args = {
hdr = {order=0, type="header", name=L.StyleManager_Label},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.StyleManager_Intro:cf("cream"):format(
L.StyleManager_Label:cf("EAblue", "cream")
),
},
FontsAndColors = {
type = "group",
name = L.FontsAndColors,
order=0,
args = {
hdr = {order=9, type="header", name=L.Fonts_hdr},
introf = {
order = 10,
type = "description",
fontSize = "medium",
name = L.Fonts_help:cf("cream"):format(
L.Font_1:cf("cyan", "cream"),
L.Font_2:cf("cyan", "cream"),
L.Font_3:cf("cyan", "cream")
),
},
hdr2 = {order=19, type="header", name=L.Colors_hdr },
introc = {
order = 20,
type = "description",
fontSize = "medium",
name = L.Colors_help:cf("cream"):format(
L.color_1:cf("cyan", "cream"),
L.color_2:cf("cyan", "cream"),
L.color_3:cf("cyan", "cream")
),
},
}
},
SpecialTypeControls = {
type = "group",
name = L.SpecialTypeControls,
order=30,
args = {
hdr = {order=0, type="header", name=L.SpecialTypeControls},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.SpecialTypeControls_help:cf("cream"):format(
L.SpecialTypeControls:cf("EAblue", "cream"),
L.STcontrols_us:cf("cyan", "cream"),
L.STcontrols_rd:cf("cyan", "cream"),
L.STcontrols_ut:cf("cyan", "cream"),
L.st_us_1:cf("grass", "cream"),
L.st_us_2:cf("grass", "cream"),
L.st_us_3:cf("grass", "cream"),
L.st_us_4:cf("grass", "cream"),
L.STcontrols_ttu:cf("cyan", "cream"),
L.STcontrols_ttu:cf("cyan", "cream"),
L.STcontrols_uc:cf("cyan", "cream"),
L.st_us_1:cf("grass", "cream"),
L.st_uc_2:cf("grass", "cream"),
L.st_uc_3:cf("grass", "cream"),
L.st_uc_4:cf("grass", "cream"),
L.st_uc_5:cf("grass", "cream"),
L.STcontrols_ctbu:cf("cyan", "cream")
),
},
}
},
}
},
DisplayInterface = {
type = "group",
name = L.DisplayInterface,
order=45,
args = {
hdr = {order=0, type="header", name=L.di_GettingStarted_L},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = (L.DisplayInterface_Intro):cf("cream"):format(
L.appName:cf("EAtan", "cream"),
L.you:cf("white", "cream"),
L.appName:cf("EAtan", "cream"),
L.appName:cf("EAtan", "cream"),
L.DT:cf("afternoon", "cream"),
L.AQ:cf("afternoon", "cream"),
L.appName:cf("EAtan", "cream")
),
},
Similar = {
type = "group",
name = L.Similar,
order=10,
args = {
hdr = {order=0, type="header", name=L.Similar},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.DisplayInterface_SimilarIntro:cf("cream"):format(
L.di_Group:cf("white", "cream"),
L.di_Task:cf("white", "cream"),
self:mkLink(self.icons.ldb_showGroups, 16),
self:mkLink(self.icons.ldb_hideGroups, 16),
self:mkLink(self.icons.ldb_ShowOnlySelectedGroup, 16)
)
},
}
},
Different = {
type = "group",
name = L.Different,
order=20,
args = {
hdr = {order=0, type="header", name=L.Different},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.DisplayInterface_DifferentIntro:cf("cream"):format(
L.GroupDisplayModes:cf("grass", "cream"),
L.Diff_TaskWindow:cf("cyan", "cream"),
L.Diff_Tooltip:cf("cyan", "cream"),
L.Diff_Tooltip:cf("cyan", "cream"),
L.Diff_TaskWindow:cf("afternoon", "cream"),
self:mkLink(self.icons.tw_config, 16),
L.Diff_Tooltip:cf("afternoon", "cream"),
self:mkLink(self.icons.ldb_showALLgroups, 16),
L.TACM_longLabel:cf("EAblue", "cream"),
self:mkLink(self.icons.ldb_OneChar, 16), self:mkLink(self.icons.ldb_AllChar, 16),
self:mkLink(self.icons.ldb_tt_PGT, 16), self:mkLink(self.icons.ldb_tt_GTP, 16)
)
},
}
},
Completed = {
type = "group",
name = self:mkLink(self.icons.ldb_Complete, 22).." "..L.Complete,
order=30,
args = {
hdr = {order=0, type="header", name=L.Complete_full},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = self:mkLink(self.icons.ldb_Complete, 58)..
L.Complete_help:cf("cream"),
},
}
},
NotComplete = {
type = "group",
name = self:mkLink(self.icons.ldb_Incomplete, 22).." "..L.NotComplete,
order=40,
args = {
hdr = {order=0, type="header", name=L.NotComplete_full},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = self:mkLink(self.icons.ldb_Incomplete, 58)..
L.NotComplete_help:cf("cream"),
},
}
},
GroupDisplayModes = {
type = "group",
name = self:mkLink(self.icons.ldb_showGroups, 16)..""..self:mkLink(self.icons.ldb_showALLgroups, 16)..""..self:mkLink(self.icons.ldb_ShowOnlySelectedGroup, 16)..""..self:mkLink(self.icons.ldb_hideGroups, 16).." "..L.GroupDisplayModes,
order=100,
args = {
hdr = {order=0, type="header", name=L.GroupDisplayModes},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = self:mkLink(self.icons.ldb_showGroups, 58).." "..self:mkLink(self.icons.ldb_showALLgroups, 58).." "..self:mkLink(self.icons.ldb_ShowOnlySelectedGroup, 58).." "..self:mkLink(self.icons.ldb_hideGroups, 58)..
L.DisplayInterface_GroupDisplayModes:cf("cream"):format(
L.appName:cf("EAtan", "cream"),
L.Diff_TaskWindow:cf("grass", "cream"),
L.Diff_Tooltip:cf("grass", "cream"),
self:mkLink(self.icons.ldb_showGroups, 22), L.GroupDisplayModes_1:cf("white", "cream"),
L.SpecialTypes:cf("EAblue", "cream"),
self:mkLink(self.icons.ldb_showALLgroups, 22), L.GroupDisplayModes_2:cf("white", "cream"),
L.GroupDisplayModes_1:cf("cyan", "cream"), L.InvisAsNorm:cf("lilac", "cream"),
L.Ifyoudonotuse:cf("afternoon", "cream"), L.GroupDisplayModes_1:cf("cyan", "cream"),
self:mkLink(self.icons.ldb_ShowOnlySelectedGroup, 22), L.GroupDisplayModes_3:cf("white", "cream"),
L.GroupDisplayModes_1:cf("cyan", "cream"), L.SpecialTypes:cf("EAblue", "cream"),
self:mkLink(self.icons.ldb_hideGroups, 22), L.GroupDisplayModes_4:cf("white", "cream")
),
},
}
},
layoutType = {
type = "group",
name = self:mkLink(self.icons.ldb_tt_PGT, 16).." "..self:mkLink(self.icons.ldb_tt_GTP, 16).." "..L.LayoutType,
order=110,
args = {
hdr = {order=0, type="header", name=L.LayoutType},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = self:mkLink(self.icons.ldb_tt_PGT, 58).." "..self:mkLink(self.icons.ldb_tt_GTP, 58)..
L.LayoutType_help:cf("cream"):format(
L.appName:cf("EAtan", "cream"), L.Diff_Tooltip:cf("grass", "cream"),
self:mkLink(self.icons.ldb_tt_PGT, 22), L.TaskByChar:cf("white", "cream"),
self:mkLink(self.icons.ldb_tt_GTP, 22), L.CharByTask:cf("white", "cream")
),
},
}
},
CharDisplay = {
type = "group",
name = self:mkLink(self.icons.ldb_OneChar, 16).." "..self:mkLink(self.icons.ldb_AllChar, 16).." "..L.DispChars,
order=120,
args = {
hdr = {order=0, type="header", name=L.DispChars},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = self:mkLink(self.icons.ldb_OneChar, 58).." "..self:mkLink(self.icons.ldb_AllChar, 58)..
L.DispChars_help:cf("cream"):format(
L.appName:cf("EAtan", "cream"), L.Diff_Tooltip:cf("grass", "cream"),
self:mkLink(self.icons.ldb_OneChar, 22), L.CurrentChar:cf("white", "cream"),
self:mkLink(self.icons.ldb_AllChar, 22), L.AllChars:cf("white", "cream")
),
},
}
},
}
},
ToolTip = {
type = "group",
name = L.Tooltip_label,
order=200,
args = {
hdr = {order=0, type="header", name = L.di_GettingStarted_L},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.ToolTip_GettingStarted:cf("cream"):format(
L.TooltipConfig:cf("cyan", "cream"),
L.Diff_Tooltip:cf("grass", "cream"),
L.DisplayInterface:cf("EAblue", "cream")
),
},
Configuration = {
type = "group",
name = L.TooltipConfig,
order=10,
args = {
hdr = {order=0, type="header", name = L.TooltipConfig},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.TooltipConfig_Help:cf("cream"):format(
L.useDataBrokerTooltip:cf("grass", "cream"),
L.CharSpecificI:cf("EAtan", "cream"), L.CharSpecific:cf("acyan", "cream"), L.CharSpecificO:cf("EAtan", "cream"),
L.ClickMap_Name:cf("EAblue", "cream"),
L.AutoHideDelay_name:cf("cyan", "cream"),
L.tooltipButtonLocation_name:cf("cyan", "cream"),
L.enableTooltipTips_name:cf("cyan", "cream"),
L.ClickMap_Name:cf("EAblue", "cream"),
L.default_tooltipType_name:cf("cyan", "cream"),
L.LayoutType:cf("grass", "cream"),
L.Diff_TaskWindow:cf("afternoon", "cream"),
L.CharByTask:cf("lilac", "cream"),
L.LayoutType:cf("EAblue", "cream"),
L.groupDisplayButton_name_TaskByChar_h:cf("cyan", "cream"),
L.groupDisplayButton_name_CharByTask_h:cf("cyan", "cream"),
L.Diff_TaskWindow:cf("afternoon", "cream"),
L.GroupDisplayModes:cf("grass", "cream"),
L.DisplayInterface:cf("EAblue", "cream"),
L.OnlyCurrentChar:cf("cyan", "cream"),
L.DispChars:cf("grass", "cream"),
L.DisplayInterface:cf("EAblue", "cream"),
L.HideCharHeader_OnlyCurrentChar_name:cf("cyan", "cream"),
L.defaultExpandSelf_name:cf("cyan", "cream"),
L.HideEmptyGroups_name:cf("cyan", "cream"),
L.HideChar_ifNoIncomplete_name:cf("cyan", "cream"),
L.twshowChecked_name:cf("cyan", "cream"),
L.ShowServerNames_name:cf("cyan", "cream"),
L.appName:cf("EAtan", "cream"),
L.allChars_GroupCharNames_name,
L.useMouseoverHighlight_name:cf("cyan", "cream"),
L.displayCounts:cf("cyan", "cream"),
L.useCounts_onHeaders_name:cf("attn", "cream"),
L.useCounts_onLDB_name:cf("attn", "cream"),
L.twshowChecked_name:cf("cyan", "cream"),
L.twrightMouseOnTask_togglesShowChecked_name:cf("cyan", "cream")
),
},
}
},
Completed = {
type = "group",
name = self:mkLink(self.icons.ldb_Complete, 22).." "..L.Complete,
order=30,
args = {
hdr = {order=0, type="header", name=L.Complete_full},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = self:mkLink(self.icons.ldb_Complete, 58)..
L.Complete_help:cf("cream"),
},
}
},
NotComplete = {
type = "group",
name = self:mkLink(self.icons.ldb_Incomplete, 22).." "..L.NotComplete,
order=40,
args = {
hdr = {order=0, type="header", name=L.NotComplete_full},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = self:mkLink(self.icons.ldb_Incomplete, 58)..
L.NotComplete_help:cf("cream"),
},
}
},
GroupDisplayModes = {
type = "group",
name = self:mkLink(self.icons.ldb_showGroups, 16)..""..self:mkLink(self.icons.ldb_showALLgroups, 16)..""..self:mkLink(self.icons.ldb_ShowOnlySelectedGroup, 16)..""..self:mkLink(self.icons.ldb_hideGroups, 16).." "..L.GroupDisplayModes,
order=100,
args = {
hdr = {order=0, type="header", name=L.GroupDisplayModes},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = self:mkLink(self.icons.ldb_showGroups, 58).." "..self:mkLink(self.icons.ldb_showALLgroups, 58).." "..self:mkLink(self.icons.ldb_ShowOnlySelectedGroup, 58).." "..self:mkLink(self.icons.ldb_hideGroups, 58)..
L.DisplayInterface_GroupDisplayModes:cf("cream"):format(
L.appName:cf("EAtan", "cream"),
L.Diff_TaskWindow:cf("grass", "cream"),
L.Diff_Tooltip:cf("grass", "cream"),
self:mkLink(self.icons.ldb_showGroups, 22), L.GroupDisplayModes_1:cf("white", "cream"),
L.SpecialTypes:cf("EAblue", "cream"),
self:mkLink(self.icons.ldb_showALLgroups, 22), L.GroupDisplayModes_2:cf("white", "cream"),
L.GroupDisplayModes_1:cf("cyan", "cream"), L.InvisAsNorm:cf("lilac", "cream"),
L.Ifyoudonotuse:cf("afternoon", "cream"), L.GroupDisplayModes_1:cf("cyan", "cream"),
self:mkLink(self.icons.ldb_ShowOnlySelectedGroup, 22), L.GroupDisplayModes_3:cf("white", "cream"),
L.GroupDisplayModes_1:cf("cyan", "cream"), L.SpecialTypes:cf("EAblue", "cream"),
self:mkLink(self.icons.ldb_hideGroups, 22), L.GroupDisplayModes_4:cf("white", "cream")
),
},
}
},
layoutType = {
type = "group",
name = self:mkLink(self.icons.ldb_tt_PGT, 16).." "..self:mkLink(self.icons.ldb_tt_GTP, 16).." "..L.LayoutType,
order=110,
args = {
hdr = {order=0, type="header", name=L.LayoutType},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = self:mkLink(self.icons.ldb_tt_PGT, 58).." "..self:mkLink(self.icons.ldb_tt_GTP, 58)..
L.LayoutType_help:cf("cream"):format(
L.appName:cf("EAtan", "cream"), L.Diff_Tooltip:cf("grass", "cream"),
self:mkLink(self.icons.ldb_tt_PGT, 22), L.TaskByChar:cf("white", "cream"),
self:mkLink(self.icons.ldb_tt_GTP, 22), L.CharByTask:cf("white", "cream")
),
},
}
},
CharDisplay = {
type = "group",
name = self:mkLink(self.icons.ldb_OneChar, 16).." "..self:mkLink(self.icons.ldb_AllChar, 16).." "..L.DispChars,
order=120,
args = {
hdr = {order=0, type="header", name=L.DispChars},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = self:mkLink(self.icons.ldb_OneChar, 58).." "..self:mkLink(self.icons.ldb_AllChar, 58)..
L.DispChars_help:cf("cream"):format(
L.appName:cf("EAtan", "cream"), L.Diff_Tooltip:cf("grass", "cream"),
self:mkLink(self.icons.ldb_OneChar, 22), L.CurrentChar:cf("white", "cream"),
self:mkLink(self.icons.ldb_AllChar, 22), L.AllChars:cf("white", "cream")
),
},
}
},
}
},
TaskWindow = {
type = "group",
name = "Task Window",
order=300,
args = {
hdr = {order=0, type="header", name=L.di_GettingStarted_L},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.TaskWindow_GettingStarted:cf("cream"):format(
L.TaskWindowConfig:cf("cyan", "cream"),
L.Diff_TaskWindow:cf("grass", "cream"),
L.DisplayInterface:cf("EAblue", "cream")
),
},
Configuration = {
type = "group",
name = L.TaskWindowConfig,
order=10,
args = {
hdr = {order=0, type="header", name = L.TaskWindowConfig},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = function()
local TaskWindow = L.Diff_TaskWindow:cf("afternoon", "cream")
return L.TaskWindowConfig_Help:cf("cream"):format(
L.useTaskWindow :cf("grass", "cream"),
L.CharSpecific:cf("acyan", "cream"),
TaskWindow,
L.ClickMap_Name:cf("EAblue", "cream"),
L.rememberToggleState_name:cf("cyan", "cream"),
L.perCharTaskPositionWindow_name:cf("cyan", "cream"),
L.CharSpecific:cf("acyan", "cream"),
TaskWindow,
L.twButtonLocation_name:cf("cyan", "cream"),
TaskWindow,
L.twenableTooltips_name:cf("cyan", "cream"),
TaskWindow, TaskWindow,
L.twuseMouseoverHighlight_name:cf("cyan", "cream"),
L.twhideDuringCombat_name:cf("cyan", "cream"),
TaskWindow,
L.twOpacity_Normal_name:cf("cyan", "cream"),
L.twOpacity_Mouseover_name:cf("cyan", "cream"),
TaskWindow,
L.winPosition:cf("cyan", "cream"),
L.relPos_name:cf("cyan", "cream"),
TaskWindow, TaskWindow, TaskWindow, TaskWindow,
L.locked_name:cf("cyan", "cream"),
TaskWindow,
L.useDragFrame_Name:cf("cyan", "cream"),
TaskWindow,
L.HideEmptyGroups_name:cf("cyan", "cream"),
L.widthMethod_name:cf("cyan", "cream"), L.widthMethod_desc,
L.twFixedWidth_name:cf("cyan", "cream"), L.twFixedWidth_desc,
L.displayCounts:cf("cyan", "cream"),
L.twuseCounts_onHeaders_name:cf("cyan", "cream"),
L.twshowChecked_name:cf("cyan", "cream"),
L.twrightMouseOnTask_togglesShowChecked_name:cf("cyan", "cream"),
L.hideTW_ifHideCompTaks_andNoUncompTasks_name:cf("cyan", "cream"),
L.twuseCounts_onHeaders_name:cf("cyan", "cream"),
L.StrataName:cf("cyan", "cream"),
L.WindowStyle:cf("cyan", "cream"),
TaskWindow)
end,
},
}
},
GroupDisplayModes = {
type = "group",
name = self:mkLink(self.icons.ldb_showGroups, 16)..""..self:mkLink(self.icons.ldb_ShowOnlySelectedGroup, 16)..""..self:mkLink(self.icons.ldb_hideGroups, 16).." "..L.GroupDisplayModes,
order=100,
args = {
hdr = {order=0, type="header", name=L.GroupDisplayModes},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = self:mkLink(self.icons.ldb_showGroups, 58).." "..self:mkLink(self.icons.ldb_ShowOnlySelectedGroup, 58).." "..self:mkLink(self.icons.ldb_hideGroups, 58)..
L.DisplayInterface_GroupDisplayModes_short:cf("cream"):format(
L.appName:cf("EAtan", "cream"),
L.Diff_TaskWindow:cf("grass", "cream"),
L.Diff_Tooltip:cf("grass", "cream"),
self:mkLink(self.icons.ldb_showGroups, 22), L.GroupDisplayModes_1:cf("white", "cream"),
L.SpecialTypes:cf("EAblue", "cream"),
self:mkLink(self.icons.ldb_ShowOnlySelectedGroup, 22), L.GroupDisplayModes_3:cf("white", "cream"),
L.GroupDisplayModes_1:cf("cyan", "cream"), L.SpecialTypes:cf("EAblue", "cream"),
self:mkLink(self.icons.ldb_hideGroups, 22), L.GroupDisplayModes_4:cf("white", "cream")
),
},
}
},
Completed = {
type = "group",
name = self:mkLink(self.icons.ldb_Complete, 22).." "..L.Complete,
order=30,
args = {
hdr = {order=0, type="header", name=L.Complete_full},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = self:mkLink(self.icons.ldb_Complete, 58)..
L.Complete_help:cf("cream"),
},
}
},
NotComplete = {
type = "group",
name = self:mkLink(self.icons.ldb_Incomplete, 22).." "..L.NotComplete,
order=40,
args = {
hdr = {order=0, type="header", name=L.NotComplete_full},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = self:mkLink(self.icons.ldb_Incomplete, 58)..
L.NotComplete_help:cf("cream"),
},
}
},
}
},
ColorCodes = {
type = "group",
name = L.ColorCodes_Label,
order=305,
args = {
hdr1 = {order=0, type="header", name = L.ColorCodes_header1},
intro1 = {
order = 1,
type = "description",
fontSize = "medium",
name = L.ColorCodes_help1:cf("cream"):format(
L.cc__double_forward_slash:cf("white", "cream"),
L.cc__pipe:cf("white", "cream"),
L.cc__slash_124:cf("white", "cream"),
L.cc__urgent:cf("hard_red", "cream")
),
},
hdr2 = {order=10, type="header", name = L.ColorCodes_header2},
intro2 = {
order = 11,
type = "description",
fontSize = "medium",
name = L.ColorCodes_help2:cf("cream"):format(
L.cc__pipe:cf("white", "cream"),
L.cc__char_124:cf("white", "cream"),
L.cc__slash_124:cf("white", "cream"),
L.highlightWord_display:cf("sunshine", "cream"),
L.cc_hexcode_slash:cf("white", "cream"),
L.cc_hexcode_pipe:cf("white", "cream"),
L.cc_hexcode_pipe:cf("white", "cream"),
L.cc_hexcode_slash:cf("white", "cream")
),
},
hdr3 = {order=20, type="header", name = L.ColorCodes_header3},
intro3 = {
order = 21,
type = "description",
fontSize = "medium",
name = L.ColorCodes_help3:cf("cream"):format(
L.cc_EscapeSequence:cf("EAblue", "cream"),
L.cc_Colorization:cf("grass", "cream"),
L.cc_Alpha:cf("cyan", "cream"),
L.cc_Red:cf("sunshine", "cream"),
L.cc_Green:cf("sunshine", "cream"),
L.cc_Blue:cf("sunshine", "cream"),
L.cc_Text:cf("cyan", "cream"),
L.cc_EscapeSequence:cf("EAblue", "cream"),
L.cc_ColorizationStop:cf("grass", "cream"),
L.cc_EscapeSequence:cf("EAblue", "cream"),
L.cc_Colorization:cf("grass", "cream"),
L.cc_Alpha:cf("cyan", "cream"),
L.cc_Red:cf("sunshine", "cream"),
L.cc_Green:cf("sunshine", "cream"),
L.cc_Blue:cf("sunshine", "cream"),
L.cc_Text:cf("cyan", "cream"),
L.cc_ColorizationStop:cf("grass", "cream"),
L.highlightWord_Colorized:cf("colorizeExample", "cream")
),
},
hdr4 = {order=30, type="header", name = L.ColorCodes_header4},
intro4 = {
order = 31,
type = "description",
fontSize = "medium",
name = L.ColorCodes_help4:cf("cream"),
},
}
},
CommandLine = {
type = "group",
name = L.CommandLine_Label,
order=310,
args = {
hdr1 = {order=0, type="header", name = L.CommandLine_Label},
intro0 = {
order = 09, type = "description", fontSize = "medium",
name = (L.CommandLineHelp_Introduction):cf("cream"):format(L.cmdline_ea:cf("white","cream"), L.cmdline_exa:cf("white","cream")).."\n\n"
},
intro10 = {
order = 19, type = "description", fontSize = "medium",
name = "config - "..(L.CommandLineHelp_config):cf("cream").."\n"
},
intro20 = {
order = 29, type = "description", fontSize = "medium",
name = "manage - "..(L.CommandLineHelp_manage):cf("cream").."\n"
},
intro30 = {
order = 39, type = "description", fontSize = "medium",
name = "task - "..(L.CommandLineHelp_task):cf("cream").."\n"
},
intro40 = {
order = 49, type = "description", fontSize = "medium",
name = "mytask - "..(L.CommandLineHelp_mytask):cf("cream").."\n"
},
intro50 = {
order = 59, type = "description", fontSize = "medium",
name = "setgroup - "..(L.CommandLineHelp_setgroup):cf("cream").."\n"
},
intro60 = {
order = 69, type = "description", fontSize = "medium",
name = "npc - "..(L.CommandLineHelp_npc):cf("cream").."\n"
}
}
},
ResetAutoreset = {
type = "group",
name = L.ResetAutoreset,
order=400,
args = {
hdr = {order=0, type="header", name=L.ResetAutoreset},
intro = {
order = 1, -- |cffff9966 |r
type = "description",
fontSize = "medium",
name = L.ResetAutoreset_help:cf("cream"):format(
L.ResetAutoreset:cf("EAblue", "cream"),
L.resetManualOnly:cf("afternoon", "cream"),
L.resetDailyAutomatic:cf("afternoon", "cream"),
L.resetWeeklyAutomatic:cf("afternoon", "cream"),
L.resetAll:cf("afternoon", "cream"),
L.PurgePurgables:cf("afternoon", "cream"),
L.ClickMap_Name:cf("EAblue", "cream")
),
},
}
},
NPC = {
type = "group",
name = L.NPC_help_Label,
order=310,
args = {
hdr = {order=0, type="header", name=L.NPC_help_Label},
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.NPC_help_Body:cf("cream"):format(
L.CommandLine_Label:cf("EAblue", "cream")
),
},
}
},
FileCabinet = {
type = "group",
name = L.FileCabinet,
order=10000,
args = {
hdr = {order=0, type="header", name=L.FileCabinet},
intro = {
order = 1, -- |cffff9966 |r
type = "description",
fontSize = "medium",
name = (L.FileCabinet_intro):cf("cream"):format(L.FileCabinet:cf("EAtan", "cream"), L.appName:cf("EAtan", "cream"), L.FileCabinet:cf("EAtan", "cream"), L.FileCabinet_NB:cf("afternoon", "cream")),
},
}
},
},
}
ClickMap = {
type = "group",
order = 30,
name = L.configLabels_ClickMap,
args = {
header = mkHeader(L.Clickmap_Label .. (L.ClickMap_LabelExtended):cf("cream")),
ldbClickMap = {
type = "group",
inline = true,
name = "",
order = 10,
args = {
whatIsAClickMap = {
type = "group",
inline = true,
name = L.WhatIsAClickMap,
order = 1,
args = {
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = (L.whatIsAClickMap):cf("cream"):format((L.clickmap):cf("EAtan", "cream"), L.appName:cf("EAtan", "cream"), (L.ImChg):cf("white", "cream"), L.appName:cf("EAtan", "cream"), L.ClickMapConfiguration:cf("EAblue", "cream")),
},
},
},
configure = {
type = "execute",
name = (L.ConfigureClickmap):cf("white"),
order = 40,
width = "full",
func = function() self:configureClickMap(); self.Dialog:Close(self.opts.f_reg); GameTooltip:Hide(); end,
},
handlerClickMap = {
type = "group",
inline = true,
name = "",
order = 901,
args = { -- arg list is dynamically built by ExecAssist:build_clickmapOptions()
},
},
},
},
gateClickMap = {
hidden=true, -- hmm... this needs to be baked in more deeply. The error response (e.g., shift key needed for other-than-logged-in-char
-- in the example) would have to be map-aware as would any tooltips... and to-gate-arrival keys would have to be precluded
-- (i.e., if LM to start routine, RM=true;s=nil;a=nil;ctrl=nil cannot be a clickmap option -- WELL, in truth if you wanted
-- a full pass-through it /could/ but it feels more like just a really efficient way to annoy the user.
-- And it may not be either that popular ANYway or, worse, it is and it's just hard to understand well enough to use properly.
type = "group",
inline = true,
name = "",
order = 10,
args = {
Intro = {
type = "group",
inline = true,
name = "How is this Click-Map different?",
order = 1,
args = {
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = ("This type of %s is a way for you to configure how certain special actions are performed. For example, in the tooltip allows toggling objectives' complete state characters other than that logged in if the SHIFT key is held when left-clicked. This map pairs user-entered configurations with program gates, allowing you to use ALT rather than SHIFT or a different mouse button, etc. Select the mouse & key profile for an action and %s compares the mouse & key state to the stored profile, if they match, the gated action occurs."):cf("cream"):format(("Click-Map"):cf("EAtan", "cream"), L.appName:cf("EAtan", "cream")),
},
},
},
handlerClickMap = {
type = "group",
inline = true,
name = "",
order = 901,
args = { -- arg list is dynamically built by ExecAssist:build_clickmapOptions()
},
},
},
},
}
}
TaskAndCharMaintenance = {
type = "group",
order = 40,
name = L.configLabels_TaskMaint,
args = {
header = mkHeader(L.TACM_longLabel),
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = (L.TACM_intro):cf("cream"):format(
L.TACM_intro_TasksAndGroups:cf("grass", "cream"),
L.TACM_intro_global:cf("grass", "cream"),
L.TACM_intro_checkmarks:cf("cyan", "cream"),
L.TACM_intro_selectedchar:cf("cyan", "cream")
),
},
selectChar_Group = {
type = "group",
name = " ",
desc = " ",
inline = true,
order = 10,
args = {
charSelect = {
name = L.charSelect_name,
desc = L.charSelect_desc,
type = "select",
width= "double",
order = 10,
values = function()
charList, revCharList = {}, {}
local charStem = self.db.global.charStem
if self.db.global.tooltip.AllChar_GroupCharNames then
for k, v in pairs(charStem) do
table.insert(charList, k)
revCharList[k] = #charList
end
else
for k, v in pairs(charStem) do
table.insert(charList, k)
end
function compareCharacters(a, b)
local aServer = string.match(a, [[.* - (.*)]])
local bServer = string.match(b, [[.* - (.*)]])
if aServer ~= bServer then
return aServer < bServer
end
return a < b
end
table.sort(charList, compareCharacters)
for k, v in pairs(charList) do
revCharList[v] = k
end
end
return charList
end,
get = function() return revCharList[self.userConfigDisplay] end,
set = function(i, v) self.userConfigDisplay = charList[v]; end,
},
resetChar = {
name = L.resetChar_name,
desc = L.resetChar_desc,
type = "execute",
width="half",
order = 13,
func = function() sdbg.charStem[self.userConfigDisplay].agg = {}; sdbg.charStem[self.userConfigDisplay].ignoreChar = nil end,
},
removeChar = {
name = L.removeChar_name,
desc = L.removeChar_desc,
type = "execute",
width="half",
order = 16,
disabled = function() if self.userCurrent == self.userConfigDisplay then return true end end,
func = function() sdbg.charStem[self.userConfigDisplay] = nil; self.userConfigDisplay = self.userCurrent; self:mkCharList() end,
},
ignoreChar = {
name = L.ignoreChar_name, -- L.ignoreChar_name = "Ignore Character"
desc = L.ignoreChar_desc, -- L.ignoreChar_desc = "Ignore Character will auto-force all root-Groups to be 'disabled for this character'\n\nUnchecking Ignore Character WILL NOT re-enable root-Groups, you will have to do that manually.\n\nNota Bene: you WILL be able to CREATE specific tasks for the character (e.g., /ea task +charname), they will simply be in a disabled group."
type = "toggle",
-- width="half",
order = 20,
--disabled = function() if self.userCurrent == self.userConfigDisplay then return true end end,
get = function() return sdbg.charStem[self.userConfigDisplay].ignoreChar end,
set = function(i, v)
sdbg.charStem[self.userConfigDisplay].ignoreChar = v
if v then
self:processIgnoredCharacters()
if sdbg.useCounts_onLDB then self:ldb_refreshCounts() end
end
end
},
},
},
addGroup_Group = {
type = "group",
name = "", -- Even blank, it makes a visual container...but it takes up room. Ponder, ponder...
desc = "",
inline = true,
order = 90,
args = {
newGroupName = {
name = L.newGroupName_name,
desc = L.newGroupName_desc,
type = "input",
width= "double",
order = 10,
get = function() return nil end, -- want it to remain blank
set = function(i, v)
local groupID = self:AddGroup(v:gsub("//", "|"), self.db.global.groupStem.agg["garden"]) -- NB: THIS add will always be in the .garden, nil will default it to .garden
local p = simpleTcopy(Genealogy)
table.insert(p, 1, {["id"] = "TaskMaint"})
table.insert(p, {["id"] = groupID, ["oo"] = 0})
self:fauxAceConfig_SelectGroup_tableAware(self.opts.f_reg, p)
self:processIgnoredCharacters()
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
GroupColor = {
order = 20,
type = "color",
name = L.GroupColor_config_name,
desc = L.GroupColor_config_desc,
get = function()
local col = sdbg.Options.cfg_groupColor
return col.r, col.g, col.b
end,
set = function(info, r, g, b)
local col = sdbg.Options.cfg_groupColor
col.r = r or 0
col.g = g or 0
col.b = b or 0
end,
},
Reorg = {
name = L.Reorganization_ControlName ,
desc = L.Reorganization_desc,
type = "toggle",
order = 22,
get = function() return ExecAssist.isReorging end,
set = function(i, v)
ExecAssist.isReorging = v;
self:loadGroups_toOptionsTable();
if not v then
ExecAssist.reorgObjectName = nil;
ExecAssist.reorgObjectID = nil;
self:loadGroups_toOptionsTable() -- Ugly but needed to clear the moving-text. Gotta be a better way.
end
end,
},
},
},
}
}
local StyleMgr = {
type = "group",
order = 50,
name = L.configLabels_StyleMgr,
args = {
header = mkHeader(L.StyleManager_Name),
Fonts = {
type = "group",
inline = true,
name = "Fonts",
order = 10,
args = {
hFont = {
type="group",
name="",
order=10,
args={
headerfont = {
type = "select",
name = L.headerfont,
values = LSM:List("font"),
get = function(info)
for i, v in next, LSM:List("font") do
if v == ttStem.header_font then return i end
end
end,
set = function(info, value)
local list = LSM:List("font")
ttStem.header_font = list[value]
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
order = 20,
width = "normal",
},
headerfontSize = {
type = "range",
name = L.fontsize,
min = 6, max = 30, step = 1,
get = function(info) return ttStem.header_size end,
set = function(info, value)
ttStem.header_size = value
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
order = 21,
width = "normal",
},
},
},
sFont = {
type="group",
name="",
order=20,
args={
standardfont = {
type = "select",
name = L.standardFont,
values = LSM:List("font"),
get = function()
for i, v in next, LSM:List("font") do
if v == ttStem.standard_font then return i end
end
end,
set = function(i, v)
local list = LSM:List("font")
ttStem.standard_font = list[v]
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
order = 10,
width = "normal",
},
standardfontSize = {
type = "range",
name = L.fontsize,
min = 6, max = 30, step = 1,
get = function(i) return ttStem.standard_size end,
set = function(i, v)
ttStem.standard_size = v
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
order = 11,
width = "normal",
},
},
},
snowflakeFont = {
type="group",
name="",
order=40,
args={
selectedgpfont = {
type = "select",
name = L.selectedgpfont,
values = LSM:List("font"),
get = function(info)
for i, v in next, LSM:List("font") do
if v == ttStem.snowflake_font then return i end
end
end,
set = function(info, value)
local list = LSM:List("font")
ttStem.snowflake_font = list[value]
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
order = 20,
width = "normal",
},
selectedgpfontSize = {
type = "range",
name = L.fontsize,
min = 6, max = 30, step = 1,
get = function(info) return ttStem.snowflake_size end,
set = function(info, value)
ttStem.snowflake_size = value
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
order = 21,
width = "normal",
},
},
},
},
},
Colors = {
type = "group",
inline = true,
name = L.normalColors,
order = 20,
args = {
GroupColor = {
order = 10,
type = "color",
name = L.GroupColor_name,
desc = L.GroupColor_desc,
get = function()
local col = ttStem.color_Group
return col.r, col.g, col.b
end,
set = function(info, r, g, b)
local col = ttStem.color_Group
col.r = r or 0
col.g = g or 0
col.b = b or 0
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
TaskNameColor = {
order = 20,
type = "color",
name = L.TaskNameColor_name,
desc = L.TaskNameColor_desc,
get = function()
local col = ttStem.color_TaskName
return col.r, col.g, col.b
end,
set = function(info, r, g, b)
local col = ttStem.color_TaskName
col.r = r or 0
col.g = g or 0
col.b = b or 0
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
countColor = {
order = 30,
type = "color",
name = L.countColor_group_,
desc = L.countColor_group_,
get = function()
local col = ttStem.color_taskCounts
return col.r, col.g, col.b
end,
set = function(info, r, g, b)
local col = ttStem.color_taskCounts
col.r = r or 0
col.g = g or 0
col.b = b or 0
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
},
},
EscapeCodes = {
type = "group",
inline = true,
name = L.escapeCodes_Label,
order = 20,
args = {
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = L.escapeCodes_Intro:cf("cream"):format(
L.appName:cf("EAtan", "cream"),
L.cc__double_forward_slash:cf("white", "cream"),
L.cc__pipe:cf("white", "cream"),
L.cc__slash_124:cf("white", "cream")
),
},
colorizationHelp = {
type = "execute",
name = (L.ColorizingNames_Help):cf("white"),
order = 11, width="full",
func = function() ExecAssist:doLoadHelp("ColorCodes"); GameTooltip:Hide(); end,
},
},
},
specialTypes = {
type = "group",
inline = true,
name = L.specialTypes_name,
order = 40,
args = {
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = ((L.specialTypes_intro):cf("cream")):format(
(L.AcctWide):cf("EAtan", "cream") ,
(L.PurgeWhenComplete):cf("EAtan", "cream") ,
(L.CommandLineEntryTarget):cf("EAtan", "cream") ,
(L.HiddenFromDisplay):cf("EAtan", "cream") ,
(L.quoteSelected):cf("EAtan", "cream"),
(L.PleaseNote):cf("white", "cream"),
(L.TACM):cf("EAblue", "cream")
),
},
task_AccountWide = { -- SM.acctwide.
type = "group",
inline = true,
name = L.task_AccountWide,
order = 10,
args = {
useStyle = {
name = L.UseStyle,
desc = "",
type = "toggle",
width="double",
order = 1,
get = function() return SM.acctwide.useStyle end,
set = function(i, v)
SM.acctwide.useStyle = v
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
resetDefault = {
type = "execute",
name = (L.resetDefault):cf("white"),
order = 5,
func = function()
SM.acctwide= self:rCopyTable(self.DBDefaults.global.tooltip.SM.acctwide)
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
textGroup = {type="group",order=10,inline=true,name="",
args={
useText = {
type = "select",
name = L.useText_name,
desc = L.useText_desc,
values = self.optValues.SM_useText,
order = 5,
get = function(i) return SM.acctwide.useText end,
set = function(i, v) SM.acctwide.useText = v; if sdbc.useTaskWindow then self:UpdateWindow() end end,
width = "normal",
},
useText_text = {
name = L.text,
disabled = function() return (SM.acctwide.useText == 1) end,
type = "input",
width= "half",
order = 20,
get = function() return SM.acctwide.useText_text end, -- want it to remain blank
set = function(i, v)
SM.acctwide.useText_text = v:trim() ~= "" and v or "*"
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
}
},
useColor = {
type = "select",
name = L.useColor_name,
desc = L.useColor_desc,
values = self.optValues.SM_useColor,
order = 25,
get = function(i) return SM.acctwide.useColor end,
set = function(i, v) SM.acctwide.useColor = v
if v==2 then -- force other controls active
if SM.acctwide.useText==1 then SM.acctwide.useText=2 end
end
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
width = "normal",
},
Color = {
order = 30,
type = "color",
name = L.color,
desc = "",
disabled = function() return SM.acctwide.SM_useColor==1 end,
get = function()
local col = SM.acctwide.color
return col.r, col.g, col.b
end,
set = function(info, r, g, b)
local col = SM.acctwide.color
col.r = r or 0
col.g = g or 0
col.b = b or 0
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
}
},
task_Purgable = { -- SM.purgable.
type = "group",
inline = true,
name = L.PurgableTask,
order = 20,
args = {
useStyle = {
name = L.UseStyle,
desc = "",
type = "toggle",
width="double",
order = 1,
get = function() return SM.purgable.useStyle end,
set = function(i, v)
SM.purgable.useStyle = v
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
resetDefault = {
type = "execute",
name = (L.resetDefault):cf("white"),
order = 5,
func = function() SM.purgable= self:rCopyTable(self.DBDefaults.global.tooltip.SM.purgable); if sdbc.useTaskWindow then self:UpdateWindow() end end,
},
textGroup = {type="group",order=10,inline=true,name="",
args={
useText = {
type = "select",
name = L.useText_name,
desc = L.useText_desc,
values = self.optValues.SM_useText,
order = 5,
get = function(i) return SM.purgable.useText end,
set = function(i, v) SM.purgable.useText = v ; if sdbc.useTaskWindow then self:UpdateWindow() end end,
width = "normal",
},
useText_text = {
name = L.text,
type = "input",
disabled = function() return (SM.purgable.useText == 1) end,
width= "half",
order = 20,
get = function() return SM.purgable.useText_text end, -- want it to remain blank
set = function(i, v)
SM.purgable.useText_text = v:trim() ~= "" and v or "*"
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
}
},
useColor = {
type = "select",
name = L.useColor_name,
desc = L.useColor_desc,
values = self.optValues.SM_useColor,
order = 25,
get = function(i) return SM.purgable.useColor end,
set = function(i, v) SM.purgable.useColor = v
if v==2 then -- force other controls active
if SM.purgable.useText==1 then SM.purgable.useText=2 end
end
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
width = "normal",
},
Color = {
order = 30,
type = "color",
name = L.color,
desc = "",
disabled = function() return SM.purgable.SM_useColor==1 end,
get = function()
local col = SM.purgable.color
return col.r, col.g, col.b
end,
set = function(info, r, g, b)
local col = SM.purgable.color
col.r = r or 0
col.g = g or 0
col.b = b or 0
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
}
},
group_Invisible = { -- SM.hidden.
type = "group",
inline = true,
name = L.InvisibleGroup,
order = 30,
args = {
useStyle = {
name = L.UseStyle,
desc = "",
type = "toggle",
width="double",
order = 1,
get = function() return SM.hidden.useStyle end,
set = function(i, v) SM.hidden.useStyle = v ; if sdbc.useTaskWindow then self:UpdateWindow() end end,
},
resetDefault = {
type = "execute",
name = (L.resetDefault):cf("white"),
order = 5,
func = function() SM.hidden= self:rCopyTable(self.DBDefaults.global.tooltip.SM.hidden); if sdbc.useTaskWindow then self:UpdateWindow() end end,
},
textGroup = {type="group",order=10,inline=true,name="",
args={
useText = {
type = "select",
name = L.useText_name,
desc = L.useText_desc,
values = self.optValues.SM_useText,
order = 5,
get = function(i) return SM.hidden.useText end,
set = function(i, v) SM.hidden.useText = v ; if sdbc.useTaskWindow then self:UpdateWindow() end end,
width = "normal",
},
useText_text = {
name = L.text,
disabled = function() return (SM.hidden.useText == 1) end,
type = "input",
width= "half",
order = 20,
get = function() return SM.hidden.useText_text end, -- want it to remain blank
set = function(i, v)
SM.hidden.useText_text = v:trim() ~= "" and v or "*"
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
}
},
useColor = {
type = "select",
name = L.useColor_name,
desc = L.useColor_desc,
values = self.optValues.SM_useColor,
order = 25,
get = function(i) return SM.hidden.useColor end,
set = function(i, v) SM.hidden.useColor = v
if v==2 then -- force other controls active
if SM.hidden.useText==1 then SM.hidden.useText=2 end
end
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
width = "normal",
},
Color = {
order = 30,
type = "color",
name = L.color,
desc = "",
disabled = function() return SM.hidden.SM_useColor==1 end,
get = function()
local col = SM.hidden.color
return col.r, col.g, col.b
end,
set = function(info, r, g, b)
local col = SM.hidden.color
col.r = r or 0
col.g = g or 0
col.b = b or 0
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
}
},
group_cmdLineTarget= { -- SM.cmdLineTarget.
type = "group",
inline = true,
name = L.CommandLineTarget_SM,
order = 40,
args = {
useStyle = {
name = L.UseStyle,
desc = "",
type = "toggle",
width="double",
order = 1,
get = function() return SM.cmdLineTarget.useStyle end,
set = function(i, v) SM.cmdLineTarget.useStyle = v ; if sdbc.useTaskWindow then self:UpdateWindow() end end,
},
resetDefault = {
type = "execute",
name = (L.resetDefault):cf("white"),
order = 5,
func = function() SM.cmdLineTarget= self:rCopyTable(self.DBDefaults.global.tooltip.SM.cmdLineTarget) ; if sdbc.useTaskWindow then self:UpdateWindow() end end,
},
textGroup = {type="group",order=10,inline=true,name="",
args={
useText = {
type = "select",
name = L.useText_name,
desc = L.useText_desc,
values = self.optValues.SM_useText,
order = 5,
get = function(i) return SM.cmdLineTarget.useText end,
set = function(i, v) SM.cmdLineTarget.useText = v ;if sdbc.useTaskWindow then self:UpdateWindow() end end,
width = "normal",
},
useText_text = {
name = L.text,
disabled = function() return (SM.cmdLineTarget.useText == 1) end,
type = "input",
width= "half",
order = 20,
get = function() return SM.cmdLineTarget.useText_text end, -- want it to remain blank
set = function(i, v)
SM.cmdLineTarget.useText_text = v:trim() ~= "" and v or "*"
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
}
},
useColor = {
type = "select",
name = L.useColor_name,
desc = L.useColor_desc,
values = self.optValues.SM_useColor,
order = 25,
get = function(i) return SM.cmdLineTarget.useColor end,
set = function(i, v) SM.cmdLineTarget.useColor = v
if v==2 then -- force other controls active
if SM.cmdLineTarget.useText==1 then SM.cmdLineTarget.useText=2 end
end
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
width = "normal",
},
Color = {
order = 30,
type = "color",
name = L.color,
desc = "",
disabled = function() return SM.cmdLineTarget.SM_useColor==1 end,
get = function()
local col = SM.cmdLineTarget.color
return col.r, col.g, col.b
end,
set = function(info, r, g, b)
local col = SM.cmdLineTarget.color
col.r = r or 0
col.g = g or 0
col.b = b or 0
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
}
},
group_snowflake = { -- SM.snowflake.
type = "group",
inline = true,
name = L.ZoomGroup_SM,
order = 50,
args = {
useStyle = {
name = L.UseStyle,
desc = "",
type = "toggle",
width="double",
order = 1,
get = function() return SM.snowflake.useStyle end,
set = function(i, v) SM.snowflake.useStyle = v; if sdbc.useTaskWindow then self:UpdateWindow() end end,
},
resetDefault = {
type = "execute",
name = (L.resetDefault):cf("white"),
order = 5,
func = function() SM.snowflake= self:rCopyTable(self.DBDefaults.global.tooltip.SM.snowflake); if sdbc.useTaskWindow then self:UpdateWindow() end end,
},
textGroup = {type="group",order=10,inline=true,name="",
args={
useText = {
type = "select",
name = L.useText_name,
desc = L.useText_desc,
values = self.optValues.SM_useText,
order = 5,
get = function(i) return SM.snowflake.useText end,
set = function(i, v) SM.snowflake.useText = v; if sdbc.useTaskWindow then self:UpdateWindow() end end,
width = "normal",
},
useText_text = {
name = L.text,
disabled = function() return (SM.snowflake.useText == 1) end,
type = "input",
width= "half",
order = 20,
get = function() return SM.snowflake.useText_text end, -- want it to remain blank
set = function(i, v)
SM.snowflake.useText_text = v:trim() ~= "" and v or "*"
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
}
},
useColor = {
type = "select",
name = L.useColor_name,
desc = L.useColor_desc,
values = self.optValues.SM_useColor,
order = 25,
get = function(i) return SM.snowflake.useColor end,
set = function(i, v) SM.snowflake.useColor = v
if v==2 then -- force other controls active
if SM.snowflake.useText==1 then SM.snowflake.useText=2 end
end
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
width = "normal",
},
Color = {
order = 30,
type = "color",
name = L.color,
desc = "",
disabled = function() return SM.snowflake.SM_useColor==1 end,
get = function()
local col = SM.snowflake.color
return col.r, col.g, col.b
end,
set = function(info, r, g, b)
local col = SM.snowflake.color
col.r = r or 0
col.g = g or 0
col.b = b or 0
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
}
},
},
},
},
}
local TooltipDisplay = {
type = "group",
order = 60,
name = L.configLabels_ToolTip,
args = {
header = mkHeader(L.TooltipOptions),
useDataBrokerTooltip = {
name = L.useDataBrokerTooltip,
desc = "",
type = "toggle",
width="double",
order = 1,
get = function() return sdbc.useDataBrokerTooltip end,
set = function(i, v) sdbc.useDataBrokerTooltip = v end,
},
autoHideDelay = {
type = "range",
name = L.AutoHideDelay_name,
desc = L.AutoHideDelay_desc,
step = .01, min = .01, max = 2,
isPercent = false,
get = function() return ttStem.AutoHideDelay end,
set = function(i, v) ttStem.AutoHideDelay = v end,
order = 5,
disabled = function() return not sdbc.useDataBrokerTooltip end,
},
intro = {
type="group",
order=10,
inline=true,
name = L.FontsAndColors,
args = {
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = ((L.TooltipIntro):cf("cream")):format( (L.StyleManager_Label):cf("EAblue", "cream") ),
},
},
},
tooltipButtonLocation = {
type = "select",
name = L.tooltipButtonLocation_name,
desc = L.tooltipButtonLocation_desc,
order = 20,
values = self.optValues.tooltipButtonPos,
get = function(i) return ttStem.tooltipButtonPos end,
set = function(i, v) ttStem.tooltipButtonPos = v end,
},
enableTooltipTooltips = {
name = L.enableTooltipTips_name,
desc = L.enableTooltipTips_desc,
type = "toggle",
width="double",
order = 30,
get = function() return ttStem.enableTooltipTooltips end,
set = function(i, v) ttStem.enableTooltipTooltips = v end,
},
default_tooltipType = {
type = "select",
name = L.default_tooltipType_name,
desc = L.default_tooltipType_desc,
values = self.optValues.tooltipDisplay, -- internal codes != English Codes
order = 40,
get = function(i) return self.db.global.tooltip.default_tooltipType=="PGT" and 1 or 2 end,
set = function(i, v)
if v == 1 then
ttStem.default_tooltipType = "PGT"
else
ttStem.default_tooltipType = "GTP"
end
end,
width = "double",
},
groupDisplayButton = {
type = "group",
name = L.GroupDisplayModes,
inline=true,
order=60,
args = {
intro = {
order = 0,
type = "description",
fontSize = "medium",
name = (L.groupDisplayButton_intro):cf("cream"):format( L.appName:cf("EAtan", "cream")),
},
-- TASK BY CHARACTER
TaskByCharacter = {
type = "group",
name = L.groupDisplayButton_name_TaskByChar,
inline=true,
order=61,
args = {
default_groupDisplay = {
type = "select",
name = L.defaultGroupDisplay_name,
desc = L.defaultGroupDisplay_desc,
values = self.optValues.GroupDisplayModes,
get = function(i) return ttStem.default_GroupDisplayMode_PGT or 1 end,
set = function(i, v) ttStem.default_GroupDisplayMode_PGT = v end,
order = 1,
width = "double",
},
ShowGroupNames = {
name = self:mkLink(self.icons.ldb_showGroups)..L.ShowGroupNames_Name,
desc = "",
type = "toggle",
width="double",
order = 10,
get = function() return ttStem.ShowGroupNames_PGT end,
set = function(i, v) ttStem.ShowGroupNames_PGT = v end,
},
HideGroupNames = {
name = self:mkLink(self.icons.ldb_hideGroups)..L.HideGroupNames,
desc = "",
type = "toggle",
width="double",
order = 40,
get = function() return ttStem.HideGroupNames_PGT end,
set = function(i, v) ttStem.HideGroupNames_PGT = v end,
},
ShowALLGroupNames = {
name = self:mkLink(self.icons.ldb_showALLgroups)..L.ShowAllGroupNames_name,
desc = L.ShowAllGroupNames_desc,
type = "toggle",
width="full",
order = 20,
get = function() return ttStem.ShowAllGroups_PGT end,
set = function(i, v) ttStem.ShowAllGroups_PGT = v end,
},
ShowOnlySelectedGroup = {
name = self:mkLink(self.icons.ldb_ShowOnlySelectedGroup)..L.ShowOnlySelectedGroup_Name,
desc = L.ShowOnlySelectedGroup_desc,
type = "toggle",
width="double",
order = 30,
get = function() return ttStem.ShowOnlySelectedGroup_PGT end,
set = function(i, v) ttStem.ShowOnlySelectedGroup_PGT = v end,
},
}
},
-- CHARACTER BY TASK
CharacterByTask = {
type = "group",
name = L.groupDisplayButton_name_CharByTask, -- L.groupDisplayButton_name,
inline=true,
order=62,
args = {
default_groupDisplay = {
type = "select",
name = L.defaultGroupDisplay_name,
desc = L.defaultGroupDisplay_desc,
values = self.optValues.GroupDisplayModes_GTP,
get = function(i) return ttStem.default_GroupDisplayMode_GTP or 1 end,
set = function(i, v) ttStem.default_GroupDisplayMode_GTP = v end,
order = 1,
width = "double",
},
HideGroupNames = {
name = self:mkLink(self.icons.ldb_hideGroups)..L.HideGroupNames,
desc = "",
type = "toggle",
width="double",
order = 40,
get = function() return ttStem.HideGroupNames_GTP end,
set = function(i, v) ttStem.HideGroupNames_GTP = v end,
},
ShowALLGroupNames = {
name = self:mkLink(self.icons.ldb_showALLgroups)..L.ShowAllGroupNames_name,
desc = L.ShowAllGroupNames_desc,
type = "toggle",
width="full",
order = 20,
get = function() return ttStem.ShowAllGroups_GTP end,
set = function(i, v) ttStem.ShowAllGroups_GTP = v end,
},
}
},
}
},
PGT = {
type = "group",
name = L.PGT_name,
inline = true,
order= 90,
args = {
OnlyCurrentChar = {
name = L.OnlyCurrentChar,
desc = "",
type = "toggle",
width="double",
order = 10,
get = function() return ttStem.OnlyCurrentChar end,
set = function(i, v) ttStem.OnlyCurrentChar = v end,
},
HideCharHeader_OnlyCurrentChar = {
name = L.HideCharHeader_OnlyCurrentChar_name,
desc = "",
type = "toggle",
width="double",
order = 20,
get = function() return ttStem.HideCharHeader_OnlyCurrentChar end,
set = function(i, v) ttStem.HideCharHeader_OnlyCurrentChar = v end,
},
defaultExpandSelf = {
name = L.defaultExpandSelf_name,
desc = L.defaultExpandSelf_desc,
type = "toggle",
width="double",
order = 65,
get = function() return ttStem.defaultExpandSelf end,
set = function(i, v) ttStem.defaultExpandSelf = v end,
},
hideemptygroups = {
name = L.HideEmptyGroups_name,
desc = L.HideEmptyGroups_desc,
type = "toggle",
width="double",
order = 80,
get = function() return ttStem.HideEmptyGroups end,
set = function(i, v) ttStem.HideEmptyGroups = v end,
},
HideChar_ifNoIncomplete = {
name = L.HideChar_ifNoIncomplete_name,
desc = L.HideChar_ifNoIncomplete_desc,
type = "toggle",
width="full",
order = 90,
get = function() return ttStem.HideChar_ifNoIncomplete end,
set = function(i, v) ttStem.HideChar_ifNoIncomplete = v end,
},
},
},
Options = {
type = "group",
inline = true,
name = "Options",
order = 100,
args = {
ShowServerNames = {
name = L.ShowServerNames_name,
desc = L.ShowServerNames_desc,
type = "toggle",
width="full",
order = 40,
get = function() return ttStem.ShowServerNames end,
set = function(i, v) ttStem.ShowServerNames = v end,
},
allChars_GroupCharNames = {
name = L.allChars_GroupCharNames_name,
desc = L.allChars_GroupCharNames_desc,
type = "toggle",
width="full",
order = 40,
get = function() return ttStem.AllChar_GroupCharNames end,
set = function(i, v) ttStem.AllChar_GroupCharNames = v; ExecAssist:mkCharList() end,
},
useMouseoverHighlight = {
name = L.useMouseoverHighlight_name,
desc = L.useMouseoverHighlight_desc,
type = "toggle",
width="double",
order = 45,
get = function() return ttStem.useMouseoverHighlight end,
set = function(i, v) ttStem.useMouseoverHighlight = v end,
},
counts = {
type = "group",
name = "Display Task Counts...",
desc = "",
inline = true,
order= 80,
args = {
onHeaders = {
type = "group",
name = "",
inline = true,
order= 10,
args = {
useCounts_onHeaders = {
name = L.useCounts_onHeaders_name,
desc = L.useCounts_onHeaders_desc,
type = "toggle",
order = 10,
get = function() return ttStem.useCounts_onHeaders end,
set = function(i, v) ttStem.useCounts_onHeaders = v end,
},
displayType_onHeaders = {
type = "select",
name = L.displayType_onHeaders_name,
desc = L.displayType_onHeaders_desc,
order = 20,
values = self.optValues.counts_DispTypes,
get = function() return ttStem.displayType_onHeaders end,
set = function(i, v)ttStem.displayType_onHeaders = v end,
},
},
},
onLDB = {
type = "group",
name = "",
desc = "",
inline = true,
order= 50,
args = {
useCounts_onLDB = {
name = L.useCounts_onLDB_name,
desc = L.useCounts_onLDB_desc,
type = "toggle",
order = 50,
get = function() return ttStem.useCounts_onLDB end,
set = function(i, v)
ttStem.useCounts_onLDB = v
if v then self:ldb_refreshCounts()
else self.meatPopcicle.text = ""
end
end,
},
displayType_onLDB = {
type = "select",
name = L.displayType_onLDB_name,
desc = L.displayType_onLDB_desc,
order = 60,
values = self.optValues.counts_DispTypes,
get = function() return ttStem.displayType_onLDB end,
set = function(i, v) ttStem.displayType_onLDB = v; self:ldb_refreshCounts() end,
},
},
},
},
},
checkingOptions = {
type = "group",
name = L.CompletedTasks,
inline = true,
order= 90,
args = {
showChecked = {
name = L.showChecked_name,
desc = L.showChecked_desc,
type = "toggle",
width="double",
order = 50,
get = function() return ttStem.showChecked end,
set = function(i, v) ttStem.showChecked = v end,
},
rightMouseOnTask_togglesShowChecked = {
name = L.rightMouseOnTask_name,
desc = L.rightMouseOnTask_desc,
type = "toggle",
width="double",
order = 60,
get = function() return ttStem.rightMouse_togglesShowChecked end,
set = function(i, v) ttStem.rightMouse_togglesShowChecked = v end,
},
}
},
styleNPC = {
type = "group",
name = L.NPC_StyleNPC_name,
desc = "",
inline = true,
order = 90,
args = {
npcColor = {
order = 10,
type = "color",
name = L.NPC_npcColor_name,
desc = L.NPC_npcColor_desc,
hasAlpha = true,
get = function()
local col = ttStem.npc.npcColor
return col.r, col.g, col.b, col.a
end,
set = function(info, r, g, b, a)
local col = ttStem.npc.npcColor
col.r = r or 0.4; col.g = g or 0.4; col.b = b or 0.4; col.a = a or 1
end,
},
}
},
styleTooltip = {
type = "group",
name = L.styleTooltip_name,
desc = "",
inline = true,
order= 100,
args = {
styleTooltip = {
name = L.StyleTooltip,
desc = L.StyleTooltip,
type = "toggle",
width="full",
order = 10,
get = function() return ttStem.tooltipStyle.useStyle end,
set = function(i, v) ttStem.tooltipStyle.useStyle = v end,
},
background = {
type = "select",
name = L.Background,
order=20,
disabled = function() return not ttStem.tooltipStyle.useStyle end,
width = "double",
dialogControl = "LSM30_Background",
values = LSM:HashTable("background"),
get = function() return ttStem.tooltipStyle.bgFile end,
set = function(i, v) ttStem.tooltipStyle.bgFile = v end,
},
backgroundColor = {
order = 25,
disabled = function() return not ttStem.tooltipStyle.useStyle end,
type = "color",
name = L.BackgroundColor,
hasAlpha = true,
get = function()
local col = ttStem.tooltipStyle.bgcolor
return col.r, col.g, col.b, col.a
end,
set = function(info, r, g, b, a)
local col = ttStem.tooltipStyle.bgcolor
col.r = r or 0; col.g = g or 0; col.b = b or 0; col.a = a or 1
end,
},
border = {
type = "select",
name = L.Border,
order=30,
disabled = function() return not ttStem.tooltipStyle.useStyle end,
width = "double",
dialogControl = "LSM30_Border",
values = LSM:HashTable("border"),
get = function() return ttStem.tooltipStyle.edgeFile end,
set = function(i, v) ttStem.tooltipStyle.edgeFile = v end,
},
borderColor = {
order = 40,
disabled = function() return not ttStem.tooltipStyle.useStyle end,
type = "color",
name = L.BorderColor,
hasAlpha = true,
get = function()
local col = ttStem.tooltipStyle.bdrcolor
return col.r, col.g, col.b, col.a
end,
set = function(info, r, g, b, a)
local col = ttStem.tooltipStyle.bdrcolor
col.r = r or 0; col.g = g or 0; col.b = b or 0; col.a = a or 1
end,
},
-- ["edge_size"] = 6,
edge_size = {
type = "range",
name = L.BorderEdgeSize,
desc = L.BorderEdgeSize,
step = 1, min = 1, max = 1024,
isPercent = false,
get = function() return ttStem.tooltipStyle.edgeSize end,
set = function(i, v) ttStem.tooltipStyle.edgeSize = v end,
order = 50,
disabled = function() return not ttStem.tooltipStyle.useStyle end,
},
-- ["edge_inset"] = 1,
edge_inset = {
type = "range",
name = L.BorderInset,
desc = L.BorderInset,
step = 1, min = 1, max = 1024,
isPercent = false,
get = function() return ttStem.tooltipStyle.insets end,
set = function(i, v) ttStem.tooltipStyle.insets = v end,
order = 60,
disabled = function() return not ttStem.tooltipStyle.useStyle end,
},
interiorHeader = {
order = 61,
type = "header",
name = L.TextShadow,
},
FontShadow = {
order = 70,
type = "color",
hasAlpha = true,
name = L.FontShadowColor,
get = function()
local col = ttStem.fontshadow.shadowcolor
return col.r, col.g, col.b, col.a
end,
set = function(info, r, g, b, a)
local col = ttStem.fontshadow.shadowcolor
col.r = r or 0
col.g = g or 0
col.b = b or 0
col.a = a or 1
end,
},
X_offset = {
type = "range",
name = L.FontShadowXOffset,
order=80,
min = -10, max = 15, step = .5, isPercent = false,
get = function() return ttStem.fontshadow.offset.x end,
set = function(i, v) ttStem.fontshadow.offset.x = v end,
},
Y_offset = {
type = "range",
name = L.FontShadowYOffset,
order=90,
min = -15, max = 10, step = .5, isPercent = false,
get = function() return ttStem.fontshadow.offset.y end,
set = function(i, v) ttStem.fontshadow.offset.y = v end,
},
},
},
},
},
},
}
local TasklistWindow = {
type = "group",
order = 70,
name = L.configLabels_TaskWindow,
args = {
header = mkHeader(L.TaskWindow_Label),
useTaskWindow = {
name = L.useTaskWindow,
desc = "",
type = "toggle",
order = 1,
get = function() return sdbc.useTaskWindow end,
set = function(i, v)
sdbc.useTaskWindow = v
if v then -- use Task Window
if not self.taskWindow then self:CreateTaskWindow()
else self:doToggleTaskWindow()
end
if twStem.toggleState_ToggledOff then twStem.toggleState_ToggledOff = false end
self:registerCombatEvents(self:getHandle_TaskWindow().hideincombat)
else -- do not, and hide the existing
self:registerCombatEvents(false)
self:doToggleTaskWindow(true)
end
end,
},
ifUsed_isHidden = {
name = L.ifUsed_isHidden_name,
desc = L.ifUsed_isHidden_desc,
type = "toggle",
order = 2,
disabled = function() return not sdbc.useTaskWindow end,
get = function() return ExecAssist:getHandle_TaskWindow().toggleState_ToggledOff end,
set = function(i, v)
ExecAssist:doToggleTaskWindow()
end,
},
rememberToggleState = {
name = L.rememberToggleState_name,
desc = L.rememberToggleState_desc,
type = "toggle",
disabled = function() return not sdbc.useTaskWindow end,
width="double",
order = 5,
get = function() return twStem.useRemembered_toggleState end,
set = function(i, v) twStem.useRemembered_toggleState = v end,
},
intro = {
type="group",
order=9,
inline=true,
name = L.FontsAndColors,
args = {
intro = {
order = 1,
type = "description",
fontSize = "medium",
name = ((L.TooltipIntro):cf("cream")):format( (L.StyleManager_Label):cf("EAblue", "cream") ),
},
},
},
Options = {
type = "group",
inline = true,
name = L.Options,
order = 10,
args = {
perCharTaskPositionWindow = {
name = L.perCharTaskPositionWindow_name,
desc = L.perCharTaskPositionWindow_desc,
type = "toggle",
width="double",
order = 20,
get = function() return sdbc.CharSpecificTaskWindow end,
set = function(i, v)
sdbc.CharSpecificTaskWindow = v
if v then
sdbc.taskWindow = self:rCopyTable(self.db.global.taskWindow) -- copy global TW to charspec TW
twStem = self:getHandle_TaskWindow()
self:UpdateWindow()
else
twStem = self:getHandle_TaskWindow()
self:UpdateWindow(true)
self:taskWindow_toggleMoving(twStem, true) -- twStem, reReadStem (no toggle)
self.db.char.taskWindow = nil
end
end,
},
ButtonLocation = {
type = "select",
name = L.twButtonLocation_name,
desc = L.twButtonLocation_desc,
order = 30,
values = self.optValues.tooltipButtonPos,
get = function(i) return twStem.ButtonPos end,
set = function(i, v) twStem.ButtonPos = v; if sdbc.useTaskWindow then self:UpdateWindow() end end,
},
enableTooltips = {
name = L.twenableTooltips_name,
desc = L.twenableTooltips_desc,
type = "toggle",
width="double",
order = 40,
get = function() return twStem.enableTooltipTooltips end,
set = function(i, v) twStem.enableTooltipTooltips = v end,
},
useMouseoverHighlight = {
name = L.twuseMouseoverHighlight_name,
desc = L.twuseMouseoverHighlight_desc,
type = "toggle",
width="double",
order = 60,
get = function() return twStem.useMouseoverHighlight end,
set = function(i, v) twStem.useMouseoverHighlight = v ;
if self.taskWindow then
for k, b in pairs(self.taskWindow.ctrlButtons) do
if v then b:SetHighlightTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight")
else b:SetHighlightTexture("")
end
end
local BL = self.taskWindow.buttons
for i=1,#BL do
if v then BL[i]:SetHighlightTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight")
else BL[i]:SetHighlightTexture("")
end
end
end
end,
},
hideDuringCombat = {
name = L.twhideDuringCombat_name,
desc = L.twhideDuringCombat_desc,
type = "toggle",
order = 70,
get = function() return twStem.hideincombat end,
set = function(i, v)
twStem.hideincombat = v
self:registerCombatEvents(v) -- registers or unregisters combat events
end,
},
Opacity_Normal = {
type = "range",
name = L.twOpacity_Normal_name,
desc = L.twOpacity_Normal_desc,
order=80,
min = 0, max = 1, step = .005, isPercent = true,
get = function() return twStem.opacity_faded end,
set = function(i, v) twStem.opacity_faded = v; if self.taskWindow then self.taskWindow:SetAlpha(v) end end, -- dynamically set since unlkely mouse-over during it
},
Opacity_mouseover = {
type = "range",
name = L.twOpacity_Mouseover_name,
desc = L.twOpacity_Mouseover_desc,
order=90,
min = .1, max = 1, step = .005, isPercent = true,
get = function() return twStem.opacity_mouseover end,
set = function(i, v) twStem.opacity_mouseover = v end,
},
hideemptygroups = {
name = L.HideEmptyGroups_name,
desc = L.HideEmptyGroups_desc,
type = "toggle",
width="double",
order = 200,
get = function() return twStem.HideEmptyGroups end,
set = function(i, v) twStem.HideEmptyGroups = v; if sdbc.useTaskWindow then self:UpdateWindow() end end,
},
hidebuttons = {
name = L.HideTaskWindowControlButtons_name,
desc = L.HideTaskWindowControlButtons_desc,
type = "toggle",
width="double",
order = 230,
get = function() return twStem.hidebuttons end,
set = function(i, v) self:doToggleShowTWControlButtons() end,
},
winPosition = {
name = L.winPosition,
type = "group",
order = 250,
args = {
relPos = {
name = L.relPos_name,
desc = L.relPos_desc,
type = "select",
width="double",
order=10,
values = self.optValues.relativePoints,
get = function() return twStem.pos.idx end,
set = function(i, v)
twStem.pos.idx = v
twStem.pos.relTW = self.optValues.relativePoints[v]
self:setTaskWindowPos(twStem.pos.relTW)
end
},
locked = {
name = L.locked_name,
desc = L.locked_desc,
type = "toggle",
order=20,
width="half",
get = function() return twStem.locked end,
set = function(i, v)
self:taskWindow_toggleMoving(twStem)
end,
},
useDragFrame = {
name = L.useDragFrame_Name,
desc = L.useDragFrame_Desc,
type = "toggle",
order=30,
width="half",
get = function() return twStem.useDragFrame end,
set = function(i, v)
twStem.useDragFrame = v
self:dragFrame_Peek_A_Boo(twStem)
end,
},
},
},
},
},
checkingOptions = {
type = "group",
name = L.CompletedTasks,
desc = "",
inline = true,
order= 40,
args = {
showChecked = {
name = L.twshowChecked_name,
desc = L.twshowChecked_desc,
type = "toggle",
width="double",
order = 50,
get = function() return twStem.showChecked end,
set = function(i, v)
twStem.showChecked = v;
if sdbc.useTaskWindow then
if not v and twStem.hideTW_ifHideCompTaks_andNoUncompTasks then
self:ldb_refreshCounts() -- gets counts then decides what to do with the base TW via :queryToggleTW_zeroUncomp_whileHideCompTasks()
end
self:UpdateWindow()
end
end,
},
rightMouseOnTask_togglesShowChecked = {
name = L.twrightMouseOnTask_togglesShowChecked_name,
desc = L.twrightMouseOnTask_togglesShowChecked_desc,
type = "toggle",
width="double",
order = 60,
get = function() return twStem.rightMouse_togglesShowChecked end,
set = function(i, v) twStem.rightMouse_togglesShowChecked = v end,
},
hideTW_ifHideCompTaks_andNoUncompTasks = {
name = L.hideTW_ifHideCompTaks_andNoUncompTasks_name,
desc = L.hideTW_ifHideCompTaks_andNoUncompTasks_desc,
type = "toggle",
width="full",
order = 65,
get = function() return twStem.hideTW_ifHideCompTaks_andNoUncompTasks end,
set = function(i, v)
twStem.hideTW_ifHideCompTaks_andNoUncompTasks = v
if v then
self:ldb_refreshCounts() -- gets counts then decides what to do with the base TW via :queryToggleTW_zeroUncomp_whileHideCompTasks()
else
if sdbc.useTaskWindow and not self.taskWindow:IsShown() then
self:doToggleTaskWindow()
end
end
end,
},
}
},
counts = {
type = "group",
name = L.displayCounts,
desc = "",
inline = true,
order= 80,
args = {
onHeaders = {
type = "group",
name = "",
desc = "",
inline = true,
order= 10,
args = {
useCounts_onHeaders = {
name = L.twuseCounts_onHeaders_name,
desc = L.twuseCounts_onHeaders_desc,
type = "toggle",
order = 10,
get = function() return twStem.useCounts_onHeaders end,
set = function(i, v) twStem.useCounts_onHeaders = v; if sdbc.useTaskWindow then self:UpdateWindow() end end,
},
displayType_onHeaders = {
type = "select",
name = L.twdisplayType_onHeaders_name,
desc = L.twdisplayType_onHeaders_desc,
order = 20,
values = self.optValues.counts_DispTypes,
get = function() return twStem.displayType_onHeaders end,
set = function(i, v)twStem.displayType_onHeaders = v; if sdbc.useTaskWindow then self:UpdateWindow() end end,
},
},
},
},
},
TaskWindowWidth = {
type = "group",
name = "Task Window Width",
desc = "",
inline = true,
order= 90,
args = {
widthMethod = {
name = L.widthMethod_name,
desc = L.widthMethod_desc,
type = "select",
order = 230,
values = L.widthMethod_values,
get = function() return twStem.widthMethod end,
set = function(i, v) twStem.widthMethod = v ;
self:UpdateWindow()
end,
},
MaxWidth = {
type = "range",
name = L.twFixedWidth_name,
desc = L.twFixedWidth_desc,
disabled = function()
if twStem.widthMethod == 1 then return true
else return false
end
end,
order=235,
min = 120, max = 800, step = 1, isPercent = false,
get = function() return twStem.FixedWidth_FontString end,
set = function(i, v) twStem.FixedWidth_FontString = v; self:UpdateWindow()
end,
},
},
},
Strata = {
type = "group",
inline = true,
name = L.StrataName,
order = 930,
args = {
widthMethod = {
name = L.strata_name,
desc = L.strata_desc,
type = "select",
order = 230,
values = frameStrataOptions,
get = function() for i = 1, #frameStrataOptions do if twStem.strata == frameStrataOptions[i] then return i end end return 2 end,
set = function(i, v)
twStem.strata = frameStrataOptions[v]
self:UpdateWindow()
end,
},
},
},
WindowStyle = {
type = "group",
inline = true,
name = L.WindowStyle,
order = 930,
args = {
background = {
type = "select",
name = L.background,
order=10,
dialogControl = "LSM30_Background",
values = LSM:HashTable("background"),
get = function() return twStem.style.background end,
set = function(i, v)
twStem.style.background = v
if sdbc.useTaskWindow then self:StyleTaskWindow() end
end,
},
BackdropColor = {
order = 20,
type = "color",
name = L.BackdropColor,
hasAlpha = true,
width="double",
get = function()
local col = twStem.style.bgcolor
return col.r, col.g, col.b, col.a
end,
set = function(info, r, g, b, a)
local col = twStem.style.bgcolor
col.r = r or 0
col.g = g or 0
col.b = b or 0
col.a = a or 1
if sdbc.useTaskWindow then self:StyleTaskWindow() end
end,
},
Border = {
type = "select",
name = L.Border,
order=30,
dialogControl = "LSM30_Border",
values = LSM:HashTable("border"),
get = function() return twStem.style.border end,
set = function(i, v)
twStem.style.border = v
if sdbc.useTaskWindow then self:StyleTaskWindow() end
end,
},
BorderColor = {
order = 40,
type = "color",
name = L.BorderColor,
hasAlpha = true,
get = function()
local col = twStem.style.bdrcolor
return col.r, col.g, col.b, col.a
end,
set = function(info, r, g, b, a)
local col = twStem.style.bdrcolor
col.r = r or 0
col.g = g or 0
col.b = b or 0
col.a = a or 1
if sdbc.useTaskWindow then self:StyleTaskWindow() end
end,
},
interiorHeader = {
order = 60,
type = "header",
name = L.TextShadow,
},
FontShadow = {
order = 70,
type = "color",
hasAlpha = true,
name = L.FontShadowColor,
get = function()
local col = twStem.fontshadow.shadowcolor
return col.r, col.g, col.b, col.a
end,
set = function(info, r, g, b, a)
local col = twStem.fontshadow.shadowcolor
col.r = r or 0
col.g = g or 0
col.b = b or 0
col.a = a or 1
if sdbc.useTaskWindow then self:setFontStringShadow() end
end,
},
X_offset = {
type = "range",
name = L.FontShadowXOffset,
order=80,
min = -10, max = 15, step = .5, isPercent = false,
get = function() return twStem.fontshadow.offset.x end,
set = function(i, v)
twStem.fontshadow.offset.x = v
if sdbc.useTaskWindow then self:setFontStringShadow() end
end,
},
Y_offset = {
type = "range",
name = L.FontShadowYOffset,
order=90,
min = -15, max = 10, step = .5, isPercent = false,
get = function() return twStem.fontshadow.offset.y end,
set = function(i, v)
twStem.fontshadow.offset.y = v
if sdbc.useTaskWindow then self:setFontStringShadow() end
end,
},
},
},
},
}
local ResetOpts = {
type = "group",
order = 90,
name = L.configLabels_ResetOpts,
args = {
header = mkHeader(L.ResetOpts_Label),
ManualResetsGroup = {
type = "group",
inline = true,
name = "Manual Resets",
order = 50,
args = {
intro = {
order = 3,
type = "description",
fontSize = "medium",
name = (L.ResetIntro):cf("cream"),
},
ResetManualTasks = {
type = "execute",
name = (L.resetManualOnly):cf("white"),
order = 20,
width = "double",
func = function() self:resetTasks(nil, nil, true) end,
},
ResetDailyTasks = {
type = "execute",
name = (L.resetDailyAutomatic):cf("white"),
order = 30,
width = "double",
func = function() self:resetTasks(true, nil, nil) end,
},
ResetWeeklyTasks = {
type = "execute",
name = (L.resetWeeklyAutomatic):cf("white"),
order = 40,
width = "double",
func = function() self:resetTasks(nil, true, nil) end,
},
ResetALLTasks = {
type = "execute",
name = (L.resetAll):cf("white"),
desc = L.resetAll_desc,
order = 50,
width = "double",
func = function() self:resetTasks(true, true, true, true, true, true, true) end,
},
PurgePurgables = {
type = "execute",
name = (L.PurgePurgables):cf("white"),
order = 60,
width = "double",
func = function() self:resetTasks(nil, nil, nil, true) end,
},
},
},
},
}
amalgam = { -- glue 'em together
type = "group",
childGroups = "tab",
name = L.appName,
args = {
mainOpts = mainOpts,
HelpPanel = HelpPanel,
ClickMap = ClickMap,
TaskMaint = TaskAndCharMaintenance,
StyleMgr = StyleMgr,
ToolTip = TooltipDisplay,
TaskWindow = TasklistWindow,
CmdLine = CmdLine,
ResetOpts = ResetOpts,
}
}
-- Register Options Tables
self.opts = {
f_reg = "ExecAssistConfig",
f_MainOpts = "mainOpts",
f_Help = "HelpPanel",
f_ClickMap = "ClickMap",
f_TaskMaint = "TaskMaint",
f_StyleMgr = "StyleMgr",
f_ToolTip = "ToolTip",
f_TaskWindow = "TaskWindow",
f_CmdLine = "CmdLine",
f_ResetOpts = "ResetOpts",
}
local opts = self.opts
local RegOpts = LibStub("AceConfigRegistry-3.0")
RegOpts:RegisterOptionsTable(AddonName, blizzy_Opts) --------- Blizzy Opts -
self.Dialog:AddToBlizOptions(AddonName, L.appName) -----------------------
local cfgOpts = sdbg.Options.configConfig
RegOpts:RegisterOptionsTable( opts.f_reg, amalgam ) -- ExecAssist Opts -----
self.Dialog:SetDefaultSize( opts.f_reg, cfgOpts.width, cfgOpts.height ) ---
end
-- Click-Map Funcs
local function decode(SvcOpts)
local rc = ""
if SvcOpts.m then
if SvcOpts.m == "LeftButton" then rc=(L.LEFTMOUSE):cf("white") else rc=(L.RIGHTMOUSE):cf("white") end
if SvcOpts.s then rc=rc..(" +"..L.SHIFT):cf("grass") end
if SvcOpts.a then rc=rc..(" +"..L.ALT ):cf("lilac") end
if SvcOpts.c then rc=rc..(" +"..L.CTRL ):cf("cyan") end
end
return rc
end
function ExecAssist:build_clickmapOptions()
local cmStem, cmOrder = self.db.global.clickmap, clickmapOrder -- self.db.global.clickmapOrder
local cmOpt = ClickMap.args.ldbClickMap.args.handlerClickMap
if cmOpt.args then cmOpt.args = {} end
local i=0
local svcInfo, SvcOpts
for j = 1,#cmOrder do
i=i+5
svcInfo = self:get_clickmapService(cmOrder[j]) -- cmSvcTag
SvcOpts = cmStem[cmOrder[j]]
local rcKeys = decode(SvcOpts)
if rcKeys == "" then rcKeys = ("<%s>"):cf("cream"):format(L.notset) end
cmOpt.args["name"..tostring(i)] = {
type = "description",
name = ("%s"):cf("cyan"):format(svcInfo.name),
order = 1+i,
fontSize = "medium",
width="full",
}
cmOpt.args["Keys"..tostring(i)] = {
type = "description",
name = rcKeys,
width= "double",
fontSize = "medium",
order = 2+i,
}
cmOpt.args["notify"..tostring(i)] = {
type = "description",
name = ("(%s)"):cf("EAtan"):format( (SvcOpts.notify and L.notify or L.silent):cf("cream", "EAtan")),
order = 3+i,
fontSize = "medium",
width = "normal",
}
cmOpt.args["spc"..tostring(i)] = {
type = "description",
name = " ",
order = 4+i,
fontSize = "medium",
width="full",
}
end
end
function ExecAssist:configureClickMap()
local tooltipStem = self.db.global.tooltip
local twStem = self:getHandle_TaskWindow()
-- tooltips ---------------------------------
helpMsg = {
["B"] = L.clickmap_tooltip_keys,
["C"] = L.clickmap_tooltip_clear,
["D"] = L.clickmap_tooltip_notify,
["E"] = L.clickmap_tooltip_notify,
}
local function button_OnLeave()
self.configClickMap.tooltip:Release("ExecAssist_ClickMapTooltip")
self.configClickMap.tooltip=nil
end
local function button_OnEnter(key, msg)
local tooltipStem = self.db.global.tooltip
if not self.configClickMap.tooltip then
self.configClickMap.tooltip = LibQTip:Acquire("ExecAssist_ClickMapTooltip")
end
tooltip = self.configClickMap.tooltip
tooltip:Clear()
tooltip:SetCellMarginH(0); tooltip:SetCellMarginV(0)
local tf = CreateFont("tiptipFont"); tf:SetFont(LSM:Fetch("font", tooltipStem.header_font), tooltipStem.header_size, ""); tooltip:SetFont(tf)
tooltip:SetScale(1)
tooltip:SetBackdropColor(0, 0, 0, 1)
tooltip:SetAutoHideDelay(.25, self.configClickMap )
tooltip:SmartAnchorTo(self.configClickMap)
tooltip:SetColumnLayout(1)
tooltip:AddLine()
tooltip:SetCell(1, 1, true and msg or helpMsg[key])
tooltip:UpdateScrolling()
tooltip:Show()
end -----------------------------------------
if not self.configClickMap then
self.configClickMap = CreateFrame("Frame", "ExecAssist_configClickMap", UIParent, "BackdropTemplate")
self.configClickMap.bMap = {}
local cm = self.configClickMap
cm:SetHeight(200); cm:SetWidth(670) -- reduce shuffle when changing orientations
cm:SetPoint("CENTER", UIParent, "CENTER", 0, 0)
cm:SetMovable(true)
cm:SetScript("OnMouseDown", function(_, button) cm:StartMoving() end)
cm:SetScript("OnMouseUp", function(_, button) cm:StopMovingOrSizing(); end)
cm:SetFrameStrata("DIALOG")
local bgFrame = {bgFile = AceGUIWidgetLSMlists.background["Solid"]}
cm:SetBackdrop(bgFrame); cm:SetBackdropColor(0, 0, 0, 1)
-- fonts for fontstrings
local hf, kf, sf = CreateFont("headerFont_map"), CreateFont("keyFont_map") , CreateFont("standardFont_map")
hf:SetJustifyH("CENTER"); hf:SetJustifyV("MIDDLE")
hf:SetFont(LSM:Fetch("font", "Friz Quadrata TT"), 14, "")
kf:SetFont(LSM:Fetch("font", "Friz Quadrata TT"), 11, "")
sf:SetFont(LSM:Fetch("font", "Friz Quadrata TT"), 10, "")
cm.tA = CreateFrame("Button", nil, cm, "BackdropTemplate")
cm.tB = CreateFrame("Button", nil, cm, "BackdropTemplate")
cm.tZ = CreateFrame("Button", nil, cm, "BackdropTemplate")
local bgFrame2 = {bgFile = AceGUIWidgetLSMlists.background["Blizzard Tooltip"]}
cm.tZ:SetBackdrop(bgFrame2); cm.tZ:SetBackdropColor(7, 0, 0, .5)
cm.tA:SetPoint("TOPLEFT", cm, "TOPLEFT", 5, -5)
cm.tB:SetPoint("TOPRIGHT", cm, "TOPRIGHT", -5, -5)
cm.tZ:SetPoint("BOTTOM", cm, "BOTTOM", 0, 5)
cm.tA:SetWidth(330) cm.tA:SetHeight(20)
cm.tB:SetWidth(330) cm.tB:SetHeight(20)
cm.tZ:SetWidth(cm:GetWidth()) cm.tZ:SetHeight(20)
cm.tA.f = cm:CreateFontString(nil, Overlay)
cm.tB.f = cm:CreateFontString(nil, Overlay)
cm.tZ.f = cm:CreateFontString(nil, Overlay)
cm.tA.f:SetFontObject(hf)
cm.tB.f:SetFontObject(hf)
cm.tZ.f:SetFontObject(hf)
cm.tA.f:SetText(L.clickmap_config)
cm.tB.f:SetText(L.appName)
cm.tZ.f:SetText(L.clickmap_config_close)
cm.tA.f:SetAllPoints(cm.tA)
cm.tB.f:SetAllPoints(cm.tB)
cm.tZ.f:SetAllPoints(cm.tZ)
local EAtan = self:Marker("EAtan")
local cream = self:Marker("cream")
cm.tA.f:SetTextColor(cream.r, cream.g, cream.b)
cm.tB.f:SetTextColor(EAtan.r, EAtan.g, EAtan.b)
cm.tZ.f:SetTextColor(EAtan.r, EAtan.g, EAtan.b)
cm.tA:SetScript("OnMouseDown", function(_, button) cm:StartMoving() end)
cm.tA:SetScript("OnMouseUp", function(_, button) cm:StopMovingOrSizing(); end)
cm.tB:SetScript("OnMouseDown", function(_, button) cm:StartMoving() end)
cm.tB:SetScript("OnMouseUp", function(_, button) cm:StopMovingOrSizing(); end)
cm.tZ:SetScript("OnClick", function(theButton, side)
PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_OFF)
self:build_clickmapOptions()
cm:Hide()
end)
-- -------------------------------------------------- --
local function mkEntry(cmSvcTag, SvcOpts)
local M = self.configClickMap.bMap
local svcInfo = self:get_clickmapService(cmSvcTag)
M[cmSvcTag] = {
["A"] = CreateFrame("Button", nil, cm, "BackdropTemplate"),
["B"] = CreateFrame("Button", nil, cm, "BackdropTemplate"),
["C"] = CreateFrame("Button", nil, cm, "BackdropTemplate"),
["D"] = CreateFrame("Button", nil, cm, "BackdropTemplate"),
["E"] = CreateFrame("Button", nil, cm, "BackdropTemplate"),
}
local A, B, C, D, E = M[cmSvcTag].A, M[cmSvcTag].B, M[cmSvcTag].C, M[cmSvcTag].D, M[cmSvcTag].E
A.f, B.f, C.f, D.f = A:CreateFontString(nil, Overlay), B:CreateFontString(nil, Overlay), C:CreateFontString(nil, Overlay), D:CreateFontString(nil, Overlay)
A.f:SetFontObject(sf); B.f:SetFontObject(kf); C.f:SetFontObject(sf); D.f:SetFontObject(sf)
A.f:SetPoint("LEFT", A, "LEFT", 2, 0); B.f:SetPoint("CENTER", B, "CENTER", 2, 0); C.f:SetPoint("CENTER", C, "CENTER", 2, 0); D.f:SetPoint("CENTER", D, "CENTER", 2, 0)
local bgFrame = {
bgFile = "Interface\\ChatFrame\\ChatFrameBackground",
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
tile = true, tileSize = 16, edgeSize = 16,
insets = { left = 3, right = 3, top = 3, bottom = 3 }
}
B:SetBackdrop(bgFrame); B:SetBackdropColor(.2, .2, .2, .5); B:SetBackdropBorderColor(cream.r, cream.g, cream.b, 1)
C:SetBackdrop(bgFrame); C:SetBackdropColor(.8, 0, 0, .5); C:SetBackdropBorderColor(cream.r, cream.g, cream.b, 1)
D:SetBackdrop(bgFrame); D:SetBackdropColor(EAtan.r-.4, EAtan.g-.4, EAtan.b-.4, .5); D:SetBackdropBorderColor(cream.r, cream.g, cream.b, 1)
A:SetHeight(20); A:SetWidth(340); A.cmSvcTag = cmSvcTag; A.msg = svcInfo.desc;
B:SetHeight(20); B:SetWidth(190); B.cmSvcTag = cmSvcTag;
C:SetHeight(20); C:SetWidth(50); C.cmSvcTag = cmSvcTag;
D:SetHeight(20); D:SetWidth(60); D.cmSvcTag = cmSvcTag;
E:SetHeight(20); E:SetWidth(20); E.cmSvcTag = cmSvcTag;
B:RegisterForClicks("LeftButtonUp", "RightButtonUp")
C:RegisterForClicks("LeftButtonUp", "RightButtonUp")
D:RegisterForClicks("LeftButtonUp", "RightButtonUp")
E:RegisterForClicks("LeftButtonUp", "RightButtonUp")
A.f:SetText(("%s"):cf("white"):format(svcInfo.name))
B.f:SetText( decode(SvcOpts) )
C.f:SetText(L.clear)
D.f:SetText(L.notify)
E:SetNormalTexture(SvcOpts.notify and self.icons.ldb_Complete or self.icons.ldb_Incomplete)
E:SetPoint("TOPLEFT", D, "TOPRIGHT", 0, 0); D:SetPoint("TOPLEFT", C, "TOPRIGHT", 0, 0); C:SetPoint("TOPLEFT", B, "TOPRIGHT", 0, 0); B:SetPoint("TOPLEFT", A, "TOPRIGHT", 0, 0)
local function toggleNotify(cmSvcTag)
local tag = self.db.global.clickmap[cmSvcTag]
tag.notify = not tag.notify
M[cmSvcTag].E:SetNormalTexture(SvcOpts.notify and self.icons.ldb_Complete or self.icons.ldb_Incomplete)
end
A:SetScript("OnEnter", function() button_OnEnter("A", A.msg) end); B:SetScript("OnEnter", function() button_OnEnter("B") end); C:SetScript("OnEnter", function() button_OnEnter("C") end); D:SetScript("OnEnter", function() button_OnEnter("D") end); E:SetScript("OnEnter", function() button_OnEnter("E") end)
A:SetScript("OnLeave", function() button_OnLeave() end); B:SetScript("OnLeave", function() button_OnLeave() end); C:SetScript("OnLeave", function() button_OnLeave() end); D:SetScript("OnLeave", function() button_OnLeave() end); E:SetScript("OnLeave", function() button_OnLeave() end)
B:SetScript("OnClick", function(theButton, mouseButton)
local cmStem = self.db.global.clickmap
local tag = cmStem[theButton.cmSvcTag]
local shift = IsShiftKeyDown()
local alt = IsAltKeyDown()
local control = IsControlKeyDown()
local isBusy = self:isBusy_clickmapServiceHandle(mouseButton, shift, alt, control)
if isBusy then -- if Busy but used by a Module not Loaded,
local h_cmService = self.db.global.clickmap[isBusy]
if h_cmService.isModule then
if not self.loadedModules[isBusy] then
local busySvc = cmStem[isBusy]
busySvc.m = nil
busySvc.s = nil
busySvc.a = nil
busySvc.c = nil
busySvc.code = nil
isBusy = false
end
end
end
if isBusy then -- if true, item was busy and should not be set
self:alert( (L.ClickMapAlert):format(
(mouseButton..(shift and " +"..L.cm_shift_name or "")..(alt and " +"..L.cm_alt_name or "")..(control and " +"..L.cm_ctrl_name or "")):cf("EAblue", "cream"),
(cmStem[isBusy].name):cf("EAtan", "cream")
)
)
PlaySound(SOUNDKIT.RAID_WARNING)
else
PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON)
tag.m = mouseButton
tag.s = shift
tag.a = alt
tag.c = control
tag.code = self.formatClick(mouseButton, shift, alt, control)
M[theButton.cmSvcTag].B.f:SetText( decode(tag) )
self:alert(L.KeyCombinationSet.." :: "..tag.name)
self:build_clickmapServiceIndex()
end
end)
C:SetScript("OnClick", function(theButton, side)
local tag = self.db.global.clickmap[theButton.cmSvcTag]
tag.code = nil; tag.m = nil; tag.s = nil; tag.a = nil; tag.c = nil; tag.notify=true
M[theButton.cmSvcTag].B.f:SetText("")
PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON)
self:build_clickmapServiceIndex()
end)
D:SetScript("OnClick", function(theButton, side) PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON); toggleNotify(theButton.cmSvcTag) end)
E:SetScript("OnClick", function(theButton, side) PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON); toggleNotify(theButton.cmSvcTag) end)
return A
end
local cmStem, cmOrder = self.db.global.clickmap, clickmapOrder -- self.db.global.clickmapOrder
local cmOpt = ClickMap.args.ldbClickMap.args.handlerClickMap
local i=0
local lastObj
local svcInfo, SvcOpts
for j = 1,#cmOrder do
i=i+1
local line = mkEntry(cmOrder[j], cmStem[cmOrder[j]])
if not lastObj then line:SetPoint("TOPLEFT", cm.tA, "BOTTOMLEFT", 0, -2)
else line:SetPoint("TOPLEFT", lastObj, "BOTTOMLEFT", 0, -2)
end
lastObj = line
end
cm:SetHeight( (i*22) + 54 )
-- -------------------------------------------------- --
end
self.configClickMap:Show()
end
-- Sanity Functions
function ExecAssist:getBehavior_isEnabled_OverrideOrDefault(user, elementID)
local charStem = self.db.global.charStem[user]
local E, returnValue
-- This check is element agnostic.
E = self.db.global.groupStem.agg[elementID] -- 1: Enabled, 2: Disabled
if E.defaultEnabled then returnValue = true
else returnValue = false
end
if charStem.agg[elementID] and charStem.agg[elementID].userOverride then
if charStem.agg[elementID].userOverride == 2 then -- ENABLE
returnValue = true
elseif charStem.agg[elementID].userOverride == 3 then -- DISABLE
returnValue = false
-- else -- value is nil or 1 :: default behavior
end
end
return returnValue
end
local function getUniqueElementID(eType)
local function mkNewID(eType) return eType..tostring(math.random(999999)) end;
local aggStem = ExecAssist.db.global.groupStem.agg;
local eID = mkNewID(eType);
while aggStem[eID] do eID = mkNewID end;
return eID
end
local function hardPrune_TACM(Genealogy)
-- Does a hard-prune of the TACM OptTable for removing groups and tasks (or anything in the 'Genealogy' table passed)
local G, pos = Genealogy, TaskAndCharMaintenance.args
for i = 1, #G do
if i==#G then
pos[G[i].id] = nil
else
pos = pos[G[i].id].args
end
end
return pos
end
function ExecAssist:semiSmart_regrow(Genealogy)
-- Prunes part of the optTable and regrows it (move up/down/etc, anything sibling related that isn't properly updated)
-- Doesn't work in the Garden b/c of nil-parentage
local pos = hardPrune_TACM(Genealogy)
local G = simpleTcopy(Genealogy)
local optOrder = G[#G].oo
local groupID = table.remove(G, #G).id -- Have to take out the last gene b/c it's passed to AddSingleGroup to be 'combined'
pos[ groupID ] = self:AddSingleGroup(groupID, optOrder, G )
end
-- Reorganize Funcs
function ExecAssist:reorg_PickUp(hElement_move)
-- Store object Vital Operational Data
ExecAssist.reorgObjectID = hElement_move.id;
if hElement_move.id:isGroup() then
ExecAssist.reorgObjectName = (L.reorg_group):cf("white")..hElement_move.listName:cf("cream")
else
ExecAssist.reorgObjectName = (L.reorg_task):cf("white")..hElement_move.taskName:cf("cream")
end
-- Ug, horribly bruit force; the control doesn't refresh with other data change...have to rebuild all elements to have it diplay. blech.
self:loadGroups_toOptionsTable()
end
function ExecAssist:reorg_SetDown(hGroup)
local agg = self.db.global.groupStem.agg
local hReorgItem = agg[ExecAssist.reorgObjectID]
local hFormerParentGroup = agg[hReorgItem.p]
-- Wipe Element Hook Storage
ExecAssist.reorgObjectID = nil
ExecAssist.reorgObjectName = nil
if hFormerParentGroup.id ~= hGroup.id then -- if adding back to the same parent, we just need to clear the reorg objectid
-- Unadoption: Remove object from former parent Display Order
for i=1,#hFormerParentGroup.DO do if hFormerParentGroup.DO[i] == hReorgItem.id then table.remove(hFormerParentGroup.DO, i) end end
-- Adoption
table.insert(hGroup.DO, hReorgItem.id) -- Add to New Parent Display Order
hReorgItem.p = hGroup.id -- Reassign Reorged Item's Parent
-- Update Counts, as things have shifted around
self:ldb_refreshCounts()
-- Update Window if used
self:UpdateWindow()
-- Ug, horribly bruit force; should use smart-pruner/-regrower
self:loadGroups_toOptionsTable()
end
end
-- Move Func
function ExecAssist:moveElement(hElement, direction) -- MOVE_UP, MOVE_DOWN (works for Tasks and Groups)
local DO = self.db.global.groupStem.agg[hElement.p].DO
local tmp
if IsShiftKeyDown() then -- move to TOP or BOTTOM
for i=1,#DO do
if DO[i] == hElement.id then
table.remove(DO, i)
break;
end
end
if direction==MOVE_UP then table.insert(DO, 1, hElement.id)
elseif direction==MOVE_DOWN then table.insert(DO, hElement.id) -- bottom
else alert("Bad Shift+Move Parameter: "..tostring(direction).." (developer must need more sleep or coffee or both)")
end
else
for i=1,#DO do
if DO[i] == hElement.id then
if direction==MOVE_UP then tmp = DO[i-1]; DO[i-1] = DO[i]
elseif direction==MOVE_DOWN then tmp = DO[i+1]; DO[i+1] = DO[i]
else alert("Bad Move Parameter: "..tostring(direction).." (developer must need more sleep or coffee or both)")
end
DO[i] = tmp
break;
end
end
end
if self.db.char.useTaskWindow then self:UpdateWindow() end
end
-- Add Funcs
function ExecAssist:AddGroup(groupName, hParent, noProgeny) -- hParent = handle group creating the child Group
local groupStem = self.db.global.groupStem
local groupID = getUniqueElementID(GROUP_IDENTIFIER)
if not hParent then hParent = groupStem.agg["garden"] end
-- Add Default Group
local hGroup = self:rCopyTable(self.prototype.Group)
groupStem.agg[groupID] = hGroup
hGroup.listName = groupName or "Default New Group Name";
hGroup.p = hParent.id
hGroup.id = groupID
-- Insert in proper Display Order
table.insert(hParent.DO, groupID) -- adds the group to the bottom...
-- Add 1st Task
if not noProgeny then self:AddTask(groupID, nil, hGroup) end -- sending hGroup & no pos key, mk @ bottom of group
-- Update GroupMaintenance var
self:loadGroups_toOptionsTable()
if self.db.char.useTaskWindow then self:UpdateWindow() end
return groupID -- only the ID tag needs to be returned as a para for :fauxAceConfig_SelectGroup_tableAware()
end
function ExecAssist:AddTask(hGroup, positioning_taskID, suppressRefresh_cmdline)
if type(hGroup) == "string" then hGroup = self.db.global.groupStem.agg[hGroup] end
local taskID = getUniqueElementID(TASK_IDENTIFIER)
local hTask = self:rCopyTable(self.prototype.Task)
self.db.global.groupStem.agg[taskID] = hTask
hTask.p = hGroup.id
hTask.id = taskID
if positioning_taskID then for i=1,#hGroup.DO do if hGroup.DO[i] == positioning_taskID then table.insert(hGroup.DO, i+1, taskID) end end
else table.insert(hGroup.DO, taskID) -- adds to display order bottom
end
-- Update Counts
self:ldb_refreshCounts()
if self.db.char.useTaskWindow and not suppressRefresh_cmdline then self:UpdateWindow() end
return hTask
end
-- Delete Funcs
function ExecAssist:notifyInterns_ofDelete(trashbin) -- table
-- I really dislike this but some modules store states in ExecAssist and need to know when those states 'change'
-- due to deletion of the relevant tasks, even if it's just knowing to 'reassess' its innards. Intern Modules can
-- build a reactive list to cut down the activity but it's still pretty brutal. Really needs a better architecture.
for name, module in self:IterateModules() do
module:intern_elementDeletionHandler(trashbin) -- table
end
end
function ExecAssist:DeleteGroup(hGroup, Genealogy, noDOupdate, trashBin) -- remove all associated flags in charStem
-- noDOupdate is used when deleting child groups to keep them from pruning themselves from parent DOs
local groupStem = self.db.global.groupStem
local aggStem = groupStem.agg
local DO = hGroup.DO
local parentDO = aggStem[hGroup.p].DO
if not trashBin then trashBin = {} end
table.insert(trashBin, hGroup.id)
-- check cmdLine Target
if groupStem.cmdLineTarget == hGroup.id then groupStem.cmdLineTarget = nil end
-- process the display order,
for i=1,#DO do
if DO[i]:isGroup() then -- run recursively, no G, suppress Parent Update, send the garbage pail
self:DeleteGroup(aggStem[DO[i]], nil, true, trashBin)
else
table.insert(trashBin, DO[i]) -- for cleaning charStem/acctwideStem
aggStem[DO[i]] = nil -- Bedtime for Bonzo
end
end
local groupID = hGroup.id -- suicide note (yeah, I know that hGroup hangs around after aggStem is pruned)
aggStem[hGroup.id] = nil -- good buy cruel world
if not noDOupdate then
-- remove from parent
for i=1,#parentDO do if parentDO[i] == groupID then table.remove(parentDO, i); break; end end
-- Remove group from active OptTable
hardPrune_TACM(Genealogy)
-- Garbage Collection: clean groups and task fragments from charStem and acctwideStem
self:GarbageCollection(trashBin)
-- Update Counts
self:ldb_refreshCounts() -- can't guarantee a delete-task was run
self:UpdateWindow()
-- self:notifyInterns_ofDelete(groupID)
end
end
function ExecAssist:DeleteTask(hTask, Genealogy) -- remove all associated flags in charStem
local aggStem = self.db.global.groupStem.agg
local hGroup = aggStem[hTask.p]
local taskID, groupID = hTask.id, hTask.p -- store so we can nix hTask
-- Remove group from Display Order
for i=1,#hGroup.DO do if hGroup.DO[i] == taskID then table.remove(hGroup.DO, i) end end
local p = simpleTcopy(Genealogy)
table.insert(p, {["id"] = hTask.id, ["oo"] = 0}) -- put the chicken on the chopping block
hardPrune_TACM(p)
-- clean out charStem and aggStem
self:GarbageCollection({hTask.id})
-- Remove Group from db and Options Table
aggStem[hTask.id] = nil -- nuke
-- Update Counts
self:ldb_refreshCounts()
self:UpdateWindow()
end
-- Garbage Collection
function ExecAssist:GarbageCollection(trashBin)
local sdbg = self.db.global
local charStem_base, AWagg = sdbg.charStem, sdbg.acctwideStem.agg
local sv_charList = self.db.sv.char
-- empty out charStem agglomerations and sv.char collapseMap entries
for charName, charStem in pairs(charStem_base) do
for i=1,#trashBin do
if charStem.agg[trashBin[i]] then charStem.agg[trashBin[i]] = nil end
local sv_charList = sv_charList[charName]
if sv_charList then
local map = sv_charList.map
if map then
if map.char then map.char.PGT[trashBin[i]] = nil end
if map.TW then map.TW.PGT[trashBin[i]] = nil end
if map.GTP then map.GTP[trashBin[i]] = nil end
end
end
end
end
-- Cleanup Fragmental Data
for i=1,#trashBin do
-- empty out account wide agglomeration
if AWagg[trashBin[i]] then AWagg[trashBin[i]] = nil end
end
-- Notify Interns of Deletion
self:notifyInterns_ofDelete(trashBin)
trashBin = nil
end
-- ------------------------------------------------------------------------------------ --
-- ------------------------------------------------------------------------------------ --
function ExecAssist:getState_GroupEnabledForUser(userConfigDisplay, Genealogy)
-- This routine is called /entirely/ too often and gBiEOOD() is just spammed... Have to see about
-- setting a group-local I-Am-Off-You-Should-Be-Too var that the tasks can read instad of banging
-- this like it gives away free espresso
for i=#Genealogy, 1, -1 do
if not self:getBehavior_isEnabled_OverrideOrDefault(userConfigDisplay, Genealogy[i].id) then return false end
end
return true
end
function ExecAssist:loadGroups_toOptionsTable()
local garden = self.db.global.groupStem.agg["garden"].DO -- NB: Garden is /always/ a group, if the user wants a simple list then can make 1 group w/ hide the group in the display
local optOrder = 0
-- Prune Options Table of Task Groups so they aren't duplicated or lingering after removal.
-- Not exactly best-practice but there doesn't seem to be any other way but using hammers, bloody immature frameworks
local safetable = {["header"] = true, ["intro"]=true, ["addGroup_Group"]=true, ["selectChar_Group"]=true, ["prefooter"]=true, ["footer"]=true}
for k,v in pairs(TaskAndCharMaintenance.args) do if not safetable[k] then TaskAndCharMaintenance.args[k] = nil end end
-- Reload from garden
for i=1, #garden do
local Genealogy = {}
local groupID = garden[i]
optOrder = optOrder+10
TaskAndCharMaintenance.args[ groupID ] = self:AddSingleGroup(groupID, optOrder, Genealogy )
end
end
function ExecAssist:AddSingleGroup(groupID, optOrder, Genealogy)
local sdbg = self.db.global
local ttStem = sdbg.tooltip
local G = simpleTcopy(Genealogy)
local hGroup = sdbg.groupStem.agg[groupID]
table.insert(G, {["id"] = groupID, ["oo"] = optOrder}) -- Each time this routine is called, it copies and grows the parental history so that child groups and tasks know can be all nice and spiffy to the user
hGroup.G = G -- store genealogy in group handle; this lets command-line entries use the semi-smart pruner to add option table entries for them w/o regrowing the entire hierarchy (gotta save those .0036 miliseconds) We could reverse-engineer the genealogy using hGroup.p but the regrower needs the .oo (option order index) which, itself, could also be reverse-engineered... so this is a choice of more storage vs more places for code to break and reinventing an already invented wheel. And it remains an option if storage costs mount.
return {
type = "group",
icon = function()
if self:getState_GroupEnabledForUser(self.userConfigDisplay, Genealogy) then
if self:getBehavior_isEnabled_OverrideOrDefault(self.userConfigDisplay, groupID) then
return self.icons.used
else
return self.icons.notused
end
else
return self.icons.disabledGroup
end
end,
name = function()
local s_groupName
local H, cmT = "", ""
if hGroup.hideFromDisplay then
if ttStem.SM.hidden.useStyle then
if ttStem.SM.hidden.useText > 1 then
H = ttStem.SM.hidden.useText_text
else
H = "(I)"
end
if ttStem.SM.hidden.useColor > 1 then
H = H:cfc(self:tbl_pcColorToHex(ttStem.SM.hidden.color))
else
H = H:cfc("ff9966")
end
else
H = ("(I)"):cfc("ff9966")
end
end
if hGroup.cmdLineTarget then
if ttStem.SM.cmdLineTarget.useStyle then
if ttStem.SM.cmdLineTarget.useText > 1 then
cmT = ttStem.SM.cmdLineTarget.useText_text
else
cmT = "[T]"
end
if ttStem.SM.acctwide.useColor > 1 then
cmT = cmT:cfc(self:tbl_pcColorToHex(ttStem.SM.cmdLineTarget.color))
else
cmT = cmT:cfc("ffff00")
end
else
cmT = ("[T]"):cfc("ffff00")
end
end
if hGroup.hideFromDisplay and ttStem.SM.hidden.useStyle and ttStem.SM.hidden.useColor == 3 then
s_groupName = hGroup.listName:cfc(self:tbl_pcColorToHex(ttStem.SM.hidden.color))
elseif hGroup.cmdLineTarget and ttStem.SM.cmdLineTarget.useStyle and ttStem.SM.cmdLineTarget.useColor == 3 then
s_groupName = hGroup.listName:cfc(self:tbl_pcColorToHex(ttStem.SM.cmdLineTarget.color))
else
s_groupName = hGroup.listName:cfc(self:tbl_pcColorToHex(sdbg.Options.cfg_groupColor)) -- v0.9.9 regression fix (should not have been ttStem.color_Group)
end
return (H..cmT.." "..s_groupName)
end,
order = optOrder,
args = self:loadTasks_toGroup_inOptionsTable( groupID, G, optOrder, gpGroup_optOrder )
}
end
function ExecAssist:TargetIsInLineage(hGroup)
local agg, hpGroup = self.db.global.groupStem.agg, {}
while hpGroup.id ~= "garden" do
hpGroup = agg[ hGroup.p ]
if hpGroup.id == ExecAssist.reorgObjectID then return true
else hGroup = hpGroup
end
end
end
function ExecAssist:loadTasks_toGroup_inOptionsTable(groupID, Genealogy)
local sdbc, sdbg = self.db.char, self.db.global
local hGroup = sdbg.groupStem.agg[groupID]
-- Add Group Options
local T = {
whoami = {
hidden=not ExecAssist.db.sv.debug,
order=0,
width="full",
fontSize = "large",
name="GroupID: "..hGroup.p.." / GroupID: "..hGroup.id,
type="description",
},
-- group 1
hdr0 = {order=2, type="header", hidden = not ExecAssist.isReorging, name=L.reorg_ReorgTitle},
ReorgNameDisplay = {
order = 4,
type = "description",
hidden = not ExecAssist.reorgObjectName,
fontSize = "medium",
name = ("%s: %s"):cf("cream"):format(
(L.reorg_Moving):cf("grass", "cream"),
(true and ExecAssist.reorgObjectName or ""):cf("grass", "cream")
),
},
reorg_PickUpObject = {
name = L.reorg_PickUp,
desc = L.reorg_PickUp_desc,
type = "execute",
hidden = not ExecAssist.isReorging,
disabled = function() end,
order = 5,
width="half",
func = function(info) self:reorg_PickUp(hGroup) end,
},
reorg_PutDownObject = {
name = L.reorg_PutDown,
desc = L.reorg_PutDown_desc,
type = "execute",
hidden = function () return (not ExecAssist.isReorging) or (not ExecAssist.reorgObjectID) end,
disabled = function() return ExecAssist.reorgObjectID==hGroup.id or self:TargetIsInLineage(hGroup) end,
order = 6,
width="normal",
func = function() self:reorg_SetDown(hGroup) end,
},
reorg_PutInRoot = {
name = L.reorg_PutInRoot,
desc = L.reorg_PutInRoot_desc,
type = "execute",
hidden = function(info) return (not ExecAssist.isReorging) or (not ExecAssist.reorgObjectID) or ( ExecAssist.reorgObjectID ~= info[#info-1]) end,
disabled = function() if hGroup.p == "garden" then return true end end,
order = 6,
width="normal",
func = function() self:reorg_SetDown(ExecAssist.db.global.groupStem.agg["garden"]); self:processIgnoredCharacters() end,
},
hdr1 = {order=9, type="header", hidden = ExecAssist.isReorging, name=L.groupactions},
UP_moveGroup = {
name = "^^^",
desc = L.UP_moveGroup,
type = "execute",
hidden = ExecAssist.isReorging,
disabled = function()
local DO = self.db.global.groupStem.agg[hGroup.p].DO
if DO[1] == groupID then return true end
end,
order = 10,
width="half",
func = function()
self:moveElement(hGroup, MOVE_UP)
local p = simpleTcopy(Genealogy)
if #p >= 2 then
table.remove(p, #p)
self:semiSmart_regrow(p)
else -- When moving the Garden, we have to move everything anyway & 'garden' isn't a 'real' tree element
-- ideally it'd just be swapping order= but, alas...
self:loadGroups_toOptionsTable()
end
end,
},
DOWN_moveGroup = {
name = "vvv",
desc = L.DOWN_moveGroup,
type = "execute",
hidden = ExecAssist.isReorging,
disabled = function()
local DO = self.db.global.groupStem.agg[hGroup.p].DO
if DO[#DO] == groupID then return true end
end,
order = 11,
width="half",
func = function()
self:moveElement(hGroup, MOVE_DOWN)
local p = simpleTcopy(Genealogy)
if #p >= 2 then
table.remove(p, #p)
self:semiSmart_regrow(p)
else -- When moving the Garden, we have to move everything anyway & 'garden' isn't a 'real' tree element
self:loadGroups_toOptionsTable()
end
end,
},
deleteGroup = {
name = L.deleteGroup_name,
desc = L.deleteGroup_desc,
type = "execute",
hidden = ExecAssist.isReorging,
order = 100,
func = function()
if IsShiftKeyDown() then
self:DeleteGroup(hGroup, Genealogy)
local p = simpleTcopy(Genealogy)
table.insert(p, 1, {["id"] = "TaskMaint"})
p[#p] = nil
self:fauxAceConfig_SelectGroup_tableAware(self.opts.f_reg, p)
else
self:alert(L.Delete_SafetyMeasureMessage)
end
end,
},
addTask = {
name = L.addTaskg_name,
desc = L.addTaskg_desc,
width="normal",
type = "execute",
hidden = ExecAssist.isReorging,
order= 120,
func = function()
local hTask_NEW = ExecAssist:AddTask(hGroup);
self:semiSmart_regrow(Genealogy)
local p = simpleTcopy(Genealogy)
table.insert(p, 1, {["id"] = "TaskMaint"})
table.insert(p, {["id"] = hTask_NEW.id})
self:fauxAceConfig_SelectGroup_tableAware(self.opts.f_reg, p)
end,
},
addGroup = {
name = L.addGroup_name,
desc = L.addGroup_desc,
width="normal",
type = "execute",
hidden = ExecAssist.isReorging,
order= 125,
func = function()
local groupID = ExecAssist:AddGroup(nil, hGroup)
local p = simpleTcopy(Genealogy)
table.insert(p, 1, {["id"] = "TaskMaint"})
table.insert(p, {["id"] = groupID})
self:fauxAceConfig_SelectGroup_tableAware(self.opts.f_reg, p)
end,
},
-- group 2
hdr2 = {order=204, type="header", name="Group Options"},
byDefault_groupIs = {
name = L.byDefault_groupIs_name,
desc = L.byDefault_groupIs_desc,
type="select",
order = 205,
values = self.optValues.EnableDisable,
get = function()
if hGroup.defaultEnabled then
return 1
else
return 2
end
end,
set = function(i, v)
if v==1 then
hGroup.defaultEnabled = true
else
hGroup.defaultEnabled = false
end
local charStem = self.db.global.charStem[self.userConfigDisplay]
if self.db.global.tooltip.useCounts_onLDB then self:ldb_refreshCounts() end
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
byUser_groupIs = {
name = L.byUser_groupIs,
desc = "",
type = "select",
order= 210,
disabled = function()
return self:isCharIgnored(self.userConfigDisplay, sdbg.charStem[self.userConfigDisplay]) -- this stops an 'ignored' user from having groups "enabled" (NB: This is an over-correction as it applies to ALL groups and not just those in the root.
end,
hidden = function()
local p = simpleTcopy(Genealogy)
table.remove(p, #p)
return not self:getState_GroupEnabledForUser(self.userConfigDisplay, p)
end,
values = self.optValues.userOverrideEnableDisable,
get = function()
local charStem = sdbg.charStem[self.userConfigDisplay]
if charStem.agg[groupID] and charStem.agg[groupID].userOverride then
return charStem.agg[groupID].userOverride
else
return 1
end
end,
set = function(i, v)
local charStem = self.db.global.charStem[self.userConfigDisplay]
if v==1 and charStem.agg[groupID] then charStem.agg[groupID].userOverride = nil -- 1:default / no override
else
if not charStem.agg[groupID] then charStem.agg[groupID] = {} end
charStem.agg[groupID].userOverride = v
end
if sdbg.tooltip.useCounts_onLDB then self:ldb_refreshCounts() end
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
hideFromDisplay = { -- only applies to group-child-groups, not garden-child-groups
hidden = function() return #Genealogy <= 1 end,
name = L.hideFromDisplay_name,
desc = L.hideFromDisplay_desc,
type = "toggle",
order = 212,
get = function() return hGroup.hideFromDisplay end,
set = function(i, v) hGroup.hideFromDisplay = v; if sdbc.useTaskWindow then self:UpdateWindow() end end,
},
cmdLineTarget = {
name = L.cmdLineTarget_name,
desc = L.cmdLineTarget_desc,
type = "toggle",
order = 214,
get = function() return hGroup.cmdLineTarget end,
set = function(i, v)
local groupStem = self.db.global.groupStem
local old_groupID = groupStem.cmdLineTarget -- nix previous target if there
if old_groupID then groupStem.agg[old_groupID].cmdLineTarget = nil; end
if v then
groupStem.cmdLineTarget = groupID
else
groupStem.cmdLineTarget = nil
end
hGroup.cmdLineTarget = v;
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
-- group 3
spacer1 = {order = 219,type = "description", width="full", name = " "},
groupName = {
name = L.groupName_rename_name,
desc = L.groupName_rename_desc,
type = "input",
width="full",
order = 220,
get = function() return hGroup.listName:gsub("|", "//") end,
set = function(i, v) hGroup.listName = v:gsub("//", "|"); if sdbc.useTaskWindow then self:UpdateWindow() end end,
},
-- group 5
hideDays = {
name = L.hideDays_group_name,
desc = L.hideDays_group_desc,
type = "multiselect",
order = 240,
values = self.optValues.DaysOfWeek,
get = function(info, k) return hGroup.hideDays[k] end,
set = function(info, k, v) hGroup.hideDays[k] = v ; if sdbc.useTaskWindow then self:UpdateWindow() end end,
},
-- group 6
Export = {
order = 250,
inline = true,
hidden = not IsAddOnLoaded(self.FC),
name = "Export",
desc = "Desc",
type = "group",
args = {
groupName = {
name = "Export Group: Name",
desc = "Export Group: Name",
type = "input",
width="full",
order = 10,
get = function() return hGroup.exportName end,
set = function(i, v) hGroup.exportName = v:trim() end,
},
reorg_PickUpObject = {
name = "Export-o-potomus",
desc = "Export-o-potomus",
disabled = function() return hGroup.exportName==nil or hGroup.exportName:trim() == "" end,
type = "execute",
order = 20,
width="full",
func = function()
FileCabinet:ExportGroup(hGroup)
end,
},
}
}
}
local groupDO = self.db.global.groupStem.agg[groupID].DO -- group Handle
for i=1, #groupDO do
if groupDO[i]:isGroup() then -- send back to do the group thing
T[groupDO[i]] = self:AddSingleGroup(groupDO[i], i, Genealogy)
else -- do the task thing
T[groupDO[i]] = self:AddSingleTask(groupDO[i], i, Genealogy)
end
end
return T
end
function ExecAssist:primeDateBased_TaskTypes(hTask)
if not hTask.resetDate_Next then
hTask.resetDate_Last = self:happyMidnight(time(), true)
hTask.resetDate_Next = self:happyMidnight(time(), true)
hTask.offsetDays = 1
end
if hTask.resetType==L.CalendarAutomatic then
-- If resetting to 'resettable calendar' it MIGHT be from Calendar so we have to reassert the _Next from the _Last reset date
hTask.resetDate_Next = self:happyMidnight(hTask.resetDate_Last + (86400 * hTask.offsetDays), true)
end
end
function ExecAssist:quickTaskEntry_SingleTask_Setup()
-- NB: Scructure duplication from line2 of :AddSingleTask()
self.quickTaskEntry_Opts = {
type = "group",
order = 10,
name = self:mkLink(self.icons.enabled, 22).." "..L.appName.. "- Quick Task Entry",
args = {
}
}
-- Register Options Table
local opts = self.quickTaskEntry_Opts
local RegOpts = LibStub("AceConfigRegistry-3.0")
RegOpts:RegisterOptionsTable( opts, opts ) -- ExecAssist Opts -
self.Dialog:SetDefaultSize( opts, 650, 400 ) -------------------
end
function ExecAssist:quickTaskEntry_SingleTask(hTask)
local sdbc = self.db.char
if not hTask then hTask = self:getFreshTaskStem() end
self.quickTaskEntry_Opts.args = {
-- line 2
hdr2 = {order=80, type="header", name="Task Options"},
byDefault_taskIs = {
name = L.byDefault_taskIs_name,
desc = L.byDefault_taskIs_desc,
type="select",
order = 90,
values = self.optValues.EnableDisable,
get = function()
if hTask.defaultEnabled then
return 1
else
return 2
end
end,
set = function(i, v)
if v==1 then
hTask.defaultEnabled = true
else
hTask.defaultEnabled = false
end
local sdbc = self.db.global
if sdbc.tooltip.useCounts_onLDB then self:ldb_refreshCounts() end
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
byUser_taskIs = {
name = L.byUser_taskIs,
desc = "",
type = "select",
order= 95,
-- hidden = function() return not self:getState_GroupEnabledForUser(self.userConfigDisplay, Genealogy) end,
values = self.optValues.userOverrideEnableDisable,
get = function()
local charStem = self.db.global.charStem[self.userConfigDisplay]
if charStem.agg[taskID] and charStem.agg[taskID].userOverride then
return charStem.agg[taskID].userOverride
else
return 1
end
end,
set = function(i, v)
local charStem = self.db.global.charStem[self.userConfigDisplay]
if v==1 and charStem.agg[taskID] then charStem.agg[taskID].userOverride = nil -- 1:default / no override
else
if not charStem.agg[taskID] then charStem.agg[taskID] = {} end
charStem.agg[taskID].userOverride = v
end
if self.db.global.tooltip.useCounts_onLDB then self:ldb_refreshCounts() end
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
-- line 3
taskName = {
name = L.taskName,
desc = "",
type = "input",
width="full",
order = 100,
get = function() return hTask.taskName:gsub("|", "//") end,
set = function(i, v) hTask.taskName = v:gsub("//", "|"); if sdbc.useTaskWindow then self:UpdateWindow() end end,
},
extCreate = {order=105, type="description", hidden = not hTask.extCreate,
name = function()
if self.loadedModules[hTask.extCreate] then
return ("%s: %s (%s)"):format(
L.managedByModule_Prefix :cf("EAtan", "white"),
tostring(hTask.extCreate):cf("cream"),
(L.optsTable_base.EnableDisable[1]):cf("hard_green", "cream")
)
elseif hTask.extCreate and IsAddOnLoaded( hTask.extCreate ) then
return ("%s: Addon %s (%s)"):format(
L.managedByModule_Prefix :cf("EAtan", "white"),
tostring(hTask.extCreate):cf("cream"),
(L.optsTable_base.EnableDisable[1]):cf("hard_green", "cream")
)
else
return ("%s: %s (%s)"):format(
L.managedByModule_Prefix :cf("EAtan", "white"),
tostring(hTask.extCreate):cf("cream"),
(L.optsTable_base.EnableDisable[2]):cf("hard_red", "cream")
)
end
end,
},
resetType= {
name = L.resetType_name,
desc = L.resetType_desc,
type="select",
order = 110,
disabled = not self.isAvail_taskType[hTask.resetType],
values = self.isAvail_taskType[hTask.resetType] and self.taskTypes_Index or L.optsTable_missingmodule_table,
get = function()
local resetType = hTask.resetType
local ResetTypes = self.taskTypes_Index
if self.isAvail_taskType[resetType] then
for i=1, #ResetTypes do
if ResetTypes[i] == resetType then
return i
end
end
else
return 1 --only one option in missingmodule_table: L.optsTable_missingmodule_label
end
end,
set = function(i, v)
hTask.resetType = self.taskTypes_Index[v]
hTask.extCreate = self.taskTypes[hTask.resetType].module -- should nil this if an internal is used, so DON'T FUCK WITH EXTERNALS!
if hTask.resetType==L.Reminder or hTask.resetType==L.CalendarAutomatic then
self:primeDateBased_TaskTypes(hTask)
end
if sdbc.useTaskWindow then self:UpdateWindow() end
-- self:semiSmart_regrow(Genealogy)
ExecAssist:quickTaskEntry_SingleTask(hTask)
end,
},
AcctWide = {
name = L.task_AcctWide_name,
desc = L.task_AcctWide_desc,
type = "toggle",
order = 120,
get = function() return hTask.isAcctWide end,
set = function(i, v) hTask.isAcctWide = v ; if sdbc.useTaskWindow then self:UpdateWindow() end end, -- NB: forgoing garbage collection atm...
},
-- Calendar and Date Management
CalHeader1 = {order=200, type="header", name=L.reminder_LastTrigger, hidden = hTask.resetType ~= L.CalendarAutomatic}, -- [7]
day_last = {
hidden = hTask.resetType ~= L.CalendarAutomatic,
name = L.Day,
type="select",
width = "half",
order = 210,
values = self.optValues.Days,
get = function()
return date("*t", hTask.resetDate_Last).day
end,
set = function(i, v)
local d = date("*t", hTask.resetDate_Last)
d.day = v
hTask.resetDate_Last = self:happyMidnight(time(d), true)
hTask.resetDate_Next = self:happyMidnight(time(d) + (86400 * hTask.offsetDays), true)
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
month_last = {
hidden = hTask.resetType ~= L.CalendarAutomatic,
name = L.Month,
type="select",
width = "half",
order = 220,
values = self.optValues.Months,
get = function()
return date("*t", hTask.resetDate_Last).month
end,
set = function(i, v)
local d = date("*t", hTask.resetDate_Last)
d.month = v
hTask.resetDate_Last = self:happyMidnight(time(d), true)
hTask.resetDate_Next = self:happyMidnight(time(d) + (86400 * hTask.offsetDays), true)
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
year_last = {
hidden = hTask.resetType ~= L.CalendarAutomatic,
name = L.Year,
type="select",
width = "half",
order = 230,
values = self.optValues.Year,
get = function()
local y = tostring(date("*t", hTask.resetDate_Last).year)
local Year = self.optValues.Year
for i=1, #Year do if Year[i] == y then return i end end
return
end,
set = function(i, v)
local d = date("*t", hTask.resetDate_Last)
d.year = tonumber(self.optValues.Year[v])
hTask.resetDate_Last = self:happyMidnight(time(d), true)
hTask.resetDate_Next = self:happyMidnight(time(d) + (86400 * hTask.offsetDays) , true)
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
offsetDays = {
hidden = hTask.resetType ~= L.CalendarAutomatic,
order=240,
name = L.reminder_OffsetDays,
desc = L.reminder_OffsetDays_desc,
type="range",
min=1,
max=365,
step=1,
isPercent=false,
get = function()
return true and hTask.offsetDays or 1
end,
set = function(i, v)
local d = date("*t", hTask.resetDate_Last)
hTask.offsetDays = v
hTask.resetDate_Next = self:happyMidnight(time(d) + (86400 * hTask.offsetDays) , true)
end,
},
CalHeader2 = {order=300, type="header", name=L.reminder_NextTrigger, hidden = (hTask.resetType ~= L.Reminder) and (hTask.resetType ~= L.CalendarAutomatic)}, --[6]
ReminderIntro = {
order = 305,
type = "description",
hidden = hTask.resetType ~= L.Reminder,
fontSize = "medium",
name = ("'Reminder' Tasks will be hidden until the target date when they will reappear as a Purgable Task"),
},
day = {
name = L.Day,
type="select",
hidden = (hTask.resetType ~= L.Reminder) and (hTask.resetType ~= L.CalendarAutomatic),
disabled = hTask.resetType == L.CalendarAutomatic,
width = "half",
order = 310,
values = self.optValues.Days,
get = function()
return date("*t", hTask.resetDate_Next).day
end,
set = function(i, v)
local d = date("*t", hTask.resetDate_Next)
d.day = v
hTask.resetDate_Next = self:happyMidnight(time(d), true)
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
month = {
name = L.Month,
type="select",
width = "half",
hidden = (hTask.resetType ~= L.Reminder) and (hTask.resetType ~= L.CalendarAutomatic),
disabled = hTask.resetType == L.CalendarAutomatic,
order = 320,
values = self.optValues.Months,
get = function()
return date("*t", hTask.resetDate_Next).month
end,
set = function(i, v)
local d = date("*t", hTask.resetDate_Next)
d.month = v
hTask.resetDate_Next = self:happyMidnight(time(d), true)
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
year = {
name = L.Year,
type="select",
hidden = (hTask.resetType ~= L.Reminder) and (hTask.resetType ~= L.CalendarAutomatic),
disabled = hTask.resetType == L.CalendarAutomatic,
width = "half",
order = 330,
values = self.optValues.Year,
get = function()
local y = tostring(date("*t", hTask.resetDate_Next).year)
local Year = self.optValues.Year
for i=1, #Year do if Year[i] == y then return i end end
return
end,
set = function(i, v)
local d = date("*t", hTask.resetDate_Next)
d.year = tonumber(self.optValues.Year[v])
hTask.resetDate_Next = self:happyMidnight(time(d), true)
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
calGroup = {
hidden = true,
type = "group",
name = "Calendar",
inline=true,
order = 500,
args = {}
},
}
PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON)
self.Dialog:Open(self.quickTaskEntry_Opts)
self.Dialog.OpenFrames[self.quickTaskEntry_Opts]:SetStatusText(
(L.statusText):cf("cream"):format(
L.StatusField_appName:cf("EAtan", "cream"),
GetAddOnMetadata(AddonName, 'Version'):cf("grass", "cream"),
L.authorName:cf("EAtan"),
("Panel"):cf("cyan", "white"),
("Quick Task Entry"):cf("grass", "cream")
)
)
end
function ExecAssist:AddSingleTask(taskID, optOrder, Genealogy, pGroup_optOrder)
local hTask = self.db.global.groupStem.agg[taskID]
local sdbc = self.db.char
local task_optTable = {
icon = function()
if self:getState_GroupEnabledForUser(self.userConfigDisplay, Genealogy) then
if self:getBehavior_isEnabled_OverrideOrDefault(self.userConfigDisplay, taskID) then
if hTask.resetType == L.Reminder then return self.icons.used_R
else return self.icons.used
end
else
if hTask.resetType == L.Reminder then return self.icons.notused_R
else return self.icons.notused
end
end
else
return self.icons.disabledGroup
end
end,
type = "group",
name = function()
local ttStem = self.db.global.tooltip
local s_taskName
local aw, pur = "", ""
if hTask.isAcctWide then
if ttStem.SM.acctwide.useStyle then
if ttStem.SM.acctwide.useText > 1 then
aw = ttStem.SM.acctwide.useText_text
else
aw = "[aw]"
end
if ttStem.SM.acctwide.useColor > 1 then
aw = aw:cfc(self:tbl_pcColorToHex(ttStem.SM.acctwide.color))
else
aw = aw:cfc("00ffff")
end
else
aw = ("[aw]"):cfc("00ffff")
end
end
if hTask.resetType == L.Purgable then
if ttStem.SM.purgable.useStyle then
if ttStem.SM.purgable.useText > 1 then
pur = ttStem.SM.purgable.useText_text
else
pur = "[P]"
end
if ttStem.SM.purgable.useColor > 1 then
pur = pur:cfc(self:tbl_pcColorToHex(ttStem.SM.purgable.color))
else
pur = pur:cfc("ff0088")
end
else
pur = ("[P]"):cfc("ff0088")
end
end
if hTask.isAcctWide and ttStem.SM.acctwide.useStyle and ttStem.SM.acctwide.useColor == 3 then
s_taskName = hTask.taskName:cfc(self:tbl_pcColorToHex(ttStem.SM.acctwide.color))
elseif hTask.resetType == L.Purgable and ttStem.SM.purgable.useStyle and ttStem.SM.purgable.useColor == 3 then
s_taskName = hTask.taskName:cfc(self:tbl_pcColorToHex(ttStem.SM.purgable.color))
else
s_taskName = hTask.taskName:cfc(self:tbl_pcColorToHex(ttStem.color_TaskName))
end
return (aw..pur.." "..s_taskName)
end,
order = optOrder,
args = {
whoami = {
hidden=not ExecAssist.db.sv.debug,
order=0,
width="full",
fontSize = "large",
name="GroupID: "..hTask.p.." / TaskID: "..taskID,
type="description",
},
-- line 1
hdr0 = {order=33, type="header", hidden = not ExecAssist.isReorging, name=L.reorg_ReorgTitle},
ReorgNameDisplay = {
order = 34,
type = "description",
hidden = not ExecAssist.reorgObjectName,
fontSize = "medium",
name = ("%s: %s"):cf("cream"):format(
(L.reorg_Moving):cf("grass", "cream"),
(true and ExecAssist.reorgObjectName or ""):cf("grass", "cream")
),
},
reorg_PickUpObject = {
name = L.reorg_PickUp,
desc = L.reorg_PickUp_desc,
type = "execute",
hidden = not ExecAssist.isReorging,
disabled = function() end,
order = 35,
width="half",
func = function() self:reorg_PickUp(hTask) end,
},
hdr1 = {order=39, type="header", hidden = ExecAssist.isReorging, name=L.taskactions},
UP_moveTask = {
name = "^^^",
desc = L.UP_moveTask,
type = "execute",
hidden = ExecAssist.isReorging,
disabled = function()
local DO = self.db.global.groupStem.agg[hTask.p].DO
if DO[1] == taskID then return true end
end,
order = 40,
width="half",
func = function() self:moveElement(hTask, MOVE_UP); self:semiSmart_regrow(Genealogy) end,
},
DOWN_moveTask = {
name = "vvv",
desc = L.DOWN_moveTask,
type = "execute",
hidden = ExecAssist.isReorging,
disabled = function()
local DO = self.db.global.groupStem.agg[hTask.p].DO
if DO[#DO] == taskID then return true end
end,
order = 50,
width="half",
func = function() self:moveElement(hTask, MOVE_DOWN); self:semiSmart_regrow(Genealogy) end,
},
addTask = {
name = L.task_addTask_name,
desc = L.task_addTask_desc,
width="half",
type = "execute",
hidden = ExecAssist.isReorging,
order = 60,
func = function()
local hTask_NEW = self:AddTask(hTask.p, taskID); -- hTask.id
self:semiSmart_regrow(Genealogy)
local p = simpleTcopy(Genealogy)
table.insert(p, 1, {["id"] = "TaskMaint"})
table.insert(p, {["id"] = hTask_NEW.id})
self:fauxAceConfig_SelectGroup_tableAware(self.opts.f_reg, p)
end,
},
deleteTask = {
name = L.task_deleteTask_name,
desc = L.task_deleteTask_desc,
width="half",
type = "execute",
hidden = ExecAssist.isReorging,
order = 70,
func = function()
if IsShiftKeyDown() then
self:DeleteTask(hTask, Genealogy)
local p = simpleTcopy(Genealogy)
table.insert(p, 1, {["id"] = "TaskMaint"})
self:fauxAceConfig_SelectGroup_tableAware(self.opts.f_reg, p)
else
self:alert(L.Delete_SafetyMeasureMessage)
end
end,
},
-- line 2
hdr2 = {order=80, type="header", name="Task Options"},
byDefault_taskIs = {
name = L.byDefault_taskIs_name,
desc = L.byDefault_taskIs_desc,
type="select",
order = 90,
values = self.optValues.EnableDisable,
get = function()
if hTask.defaultEnabled then
return 1
else
return 2
end
end,
set = function(i, v)
if v==1 then
hTask.defaultEnabled = true
else
hTask.defaultEnabled = false
end
local sdbc = self.db.global
if sdbc.tooltip.useCounts_onLDB then self:ldb_refreshCounts() end
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
byUser_taskIs = {
name = L.byUser_taskIs,
desc = "",
type = "select",
order= 95,
hidden = function() return not self:getState_GroupEnabledForUser(self.userConfigDisplay, Genealogy) end,
values = self.optValues.userOverrideEnableDisable,
get = function()
local charStem = self.db.global.charStem[self.userConfigDisplay]
if charStem.agg[taskID] and charStem.agg[taskID].userOverride then
return charStem.agg[taskID].userOverride
else
return 1
end
end,
set = function(i, v)
local charStem = self.db.global.charStem[self.userConfigDisplay]
if v==1 and charStem.agg[taskID] then charStem.agg[taskID].userOverride = nil -- 1:default / no override
else
if not charStem.agg[taskID] then charStem.agg[taskID] = {} end
charStem.agg[taskID].userOverride = v
end
if self.db.global.tooltip.useCounts_onLDB then self:ldb_refreshCounts() end
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
-- line 3
taskName = {
name = L.taskName,
desc = "",
type = "input",
width="full",
order = 100,
get = function() return hTask.taskName:gsub("|", "//") end,
set = function(i, v) hTask.taskName = v:gsub("//", "|"); if sdbc.useTaskWindow then self:UpdateWindow() end end,
},
extCreate = {order=105, type="description", hidden = not hTask.extCreate,
name = function()
if self.loadedModules[hTask.extCreate] then
return ("%s: %s (%s)"):format(
L.managedByModule_Prefix :cf("EAtan", "white"),
tostring(hTask.extCreate):cf("cream"),
(L.optsTable_base.EnableDisable[1]):cf("hard_green", "cream")
)
elseif hTask.extCreate and IsAddOnLoaded( hTask.extCreate ) then
return ("%s: Addon %s (%s)"):format(
L.managedByModule_Prefix :cf("EAtan", "white"),
tostring(hTask.extCreate):cf("cream"),
(L.optsTable_base.EnableDisable[1]):cf("hard_green", "cream")
)
else
return ("%s: %s (%s)"):format(
L.managedByModule_Prefix :cf("EAtan", "white"),
tostring(hTask.extCreate):cf("cream"),
(L.optsTable_base.EnableDisable[2]):cf("hard_red", "cream")
)
end
end,
},
resetType= {
name = L.resetType_name,
desc = L.resetType_desc,
type="select",
order = 110,
disabled = not self.isAvail_taskType[hTask.resetType],
values = self.isAvail_taskType[hTask.resetType] and self.taskTypes_Index or L.optsTable_missingmodule_table,
get = function()
local resetType = hTask.resetType
local ResetTypes = self.taskTypes_Index
if self.isAvail_taskType[resetType] then
for i=1, #ResetTypes do
if ResetTypes[i] == resetType then
return i
end
end
else
return 1 --only one option in missingmodule_table: L.optsTable_missingmodule_label
end
end,
set = function(i, v)
hTask.resetType = self.taskTypes_Index[v]
hTask.extCreate = self.taskTypes[hTask.resetType].module -- should nil this if an internal is used, so DON'T FUCK WITH EXTERNALS!
if hTask.resetType==L.Reminder or hTask.resetType==L.CalendarAutomatic then
self:primeDateBased_TaskTypes(hTask)
end
if sdbc.useTaskWindow then self:UpdateWindow() end
self:semiSmart_regrow(Genealogy)
end,
},
AcctWide = {
name = L.task_AcctWide_name,
desc = L.task_AcctWide_desc,
type = "toggle",
order = 120,
get = function() return hTask.isAcctWide end,
set = function(i, v) hTask.isAcctWide = v ; if sdbc.useTaskWindow then self:UpdateWindow() end end, -- NB: forgoing garbage collection atm...
},
-- Calendar and Date Management
CalHeader1 = {order=200, type="header", name=L.reminder_LastTrigger, hidden = hTask.resetType ~= L.CalendarAutomatic}, -- [7]
day_last = {
hidden = hTask.resetType ~= L.CalendarAutomatic,
name = L.Day,
type="select",
width = "half",
order = 210,
values = self.optValues.Days,
get = function()
return date("*t", hTask.resetDate_Last).day
end,
set = function(i, v)
local d = date("*t", hTask.resetDate_Last)
d.day = v
hTask.resetDate_Last = self:happyMidnight(time(d), true)
hTask.resetDate_Next = self:happyMidnight(time(d) + (86400 * hTask.offsetDays), true)
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
month_last = {
hidden = hTask.resetType ~= L.CalendarAutomatic,
name = L.Month,
type="select",
width = "half",
order = 220,
values = self.optValues.Months,
get = function()
return date("*t", hTask.resetDate_Last).month
end,
set = function(i, v)
local d = date("*t", hTask.resetDate_Last)
d.month = v
hTask.resetDate_Last = self:happyMidnight(time(d), true)
hTask.resetDate_Next = self:happyMidnight(time(d) + (86400 * hTask.offsetDays), true)
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
year_last = {
hidden = hTask.resetType ~= L.CalendarAutomatic,
name = L.Year,
type="select",
width = "half",
order = 230,
values = self.optValues.Year,
get = function()
local y = tostring(date("*t", hTask.resetDate_Last).year)
local Year = self.optValues.Year
for i=1, #Year do if Year[i] == y then return i end end
return
end,
set = function(i, v)
local d = date("*t", hTask.resetDate_Last)
d.year = tonumber(self.optValues.Year[v])
hTask.resetDate_Last = self:happyMidnight(time(d), true)
hTask.resetDate_Next = self:happyMidnight(time(d) + (86400 * hTask.offsetDays) , true)
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
offsetDays = {
hidden = hTask.resetType ~= L.CalendarAutomatic,
order=240,
name = L.reminder_OffsetDays,
desc = L.reminder_OffsetDays_desc,
type="range",
min=1,
max=365,
step=1,
isPercent=false,
get = function()
return true and hTask.offsetDays or 1
end,
set = function(i, v)
local d = date("*t", hTask.resetDate_Last)
hTask.offsetDays = v
hTask.resetDate_Next = self:happyMidnight(time(d) + (86400 * hTask.offsetDays) , true)
end,
},
CalHeader2 = {order=300, type="header", name=L.reminder_NextTrigger, hidden = (hTask.resetType ~= L.Reminder) and (hTask.resetType ~= L.CalendarAutomatic)}, --[6]
ReminderIntro = {
order = 305,
type = "description",
hidden = hTask.resetType ~= L.Reminder,
fontSize = "medium",
name = ("'Reminder' Tasks will be hidden until the target date when they will reappear as a Purgable Task"),
},
day = {
name = L.Day,
type="select",
hidden = (hTask.resetType ~= L.Reminder) and (hTask.resetType ~= L.CalendarAutomatic),
disabled = hTask.resetType == L.CalendarAutomatic,
width = "half",
order = 310,
values = self.optValues.Days,
get = function()
return date("*t", hTask.resetDate_Next).day
end,
set = function(i, v)
local d = date("*t", hTask.resetDate_Next)
d.day = v
hTask.resetDate_Next = self:happyMidnight(time(d), true)
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
month = {
name = L.Month,
type="select",
width = "half",
hidden = (hTask.resetType ~= L.Reminder) and (hTask.resetType ~= L.CalendarAutomatic),
disabled = hTask.resetType == L.CalendarAutomatic,
order = 320,
values = self.optValues.Months,
get = function()
return date("*t", hTask.resetDate_Next).month
end,
set = function(i, v)
local d = date("*t", hTask.resetDate_Next)
d.month = v
hTask.resetDate_Next = self:happyMidnight(time(d), true)
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
year = {
name = L.Year,
type="select",
hidden = (hTask.resetType ~= L.Reminder) and (hTask.resetType ~= L.CalendarAutomatic),
disabled = hTask.resetType == L.CalendarAutomatic,
width = "half",
order = 330,
values = self.optValues.Year,
get = function()
local y = tostring(date("*t", hTask.resetDate_Next).year)
local Year = self.optValues.Year
for i=1, #Year do if Year[i] == y then return i end end
return
end,
set = function(i, v)
local d = date("*t", hTask.resetDate_Next)
d.year = tonumber(self.optValues.Year[v])
hTask.resetDate_Next = self:happyMidnight(time(d), true)
if sdbc.useTaskWindow then self:UpdateWindow() end
end,
},
calGroup = {
hidden = true,
type = "group",
name = "Calendar",
inline=true,
order = 500,
args = {}
},
-- line 4
hideDays= {
name = L.task_hideDays_name,
desc = L.task_hideDays_desc,
type = "multiselect",
order = 600,
values = self.optValues.DaysOfWeek,
get = function(info, k) return hTask.hideDays[k] end,
set = function(info, k, v) hTask.hideDays[k] = v ; if sdbc.useTaskWindow then self:UpdateWindow() end end,
},
},
}
-- Allow Module Injection
if hTask.extCreate then -- hTask.extCreate contains MODULE module var
if self.loadedModules[hTask.extCreate] then
local module = self:GetModule(hTask.extCreate)
if module then
local injControls = module:intern_getInjectedControls(hTask)
if injControls then for k, v in pairs(injControls) do task_optTable.args[k] = v end end
end
end
end
return task_optTable
end
function ExecAssist:fauxAceConfig_SelectGroup_tableAware(appKey, p)
-- AceConfigDialog's :SelectGroup doesn't take a table but rather a string of parameters
-- You can unpack (not table.unpack, not table.explode, just unpack) but you can't unpack and get just 1 sub-element (.id)
local t = {}
for n = 1, #p do table.insert(t, p[n].id) end
self.Dialog:SelectGroup(appKey, unpack(t) )
end