Advertisement
Infus

Untitled

Jul 26th, 2016
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 36.87 KB | None | 0 0
  1. commit 4dd62c269fe196c4534baa74cc828117c2201b7a
  2. Author: Infus <infus@squorn.de>
  3. Date:   Wed Jul 27 02:33:35 2016 +0200
  4.  
  5.     Fix
  6.  
  7. diff --git a/WeakAuras/libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua b/WeakAuras/libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua
  8. index 3612fe8..f35d8d9 100644
  9. --- a/WeakAuras/libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua
  10. +++ b/WeakAuras/libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua
  11. @@ -4,7 +4,7 @@
  12.  -- @release $Id: AceConfigDialog-3.0.lua 1139 2016-07-03 07:43:51Z nevcairiel $
  13.  
  14.  local LibStub = LibStub
  15. -local MAJOR, MINOR = "AceConfigDialog-3.0", 61
  16. +local MAJOR, MINOR = "AceConfigDialog-3.0", 62
  17.  local AceConfigDialog, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
  18.  
  19.  if not AceConfigDialog then return end
  20. @@ -50,17 +50,17 @@ local function CreateDispatcher(argCount)
  21.         local xpcall, eh = ...
  22.         local method, ARGS
  23.         local function call() return method(ARGS) end
  24. -  
  25. +
  26.         local function dispatch(func, ...)
  27.              method = func
  28.              if not method then return end
  29.              ARGS = ...
  30.              return xpcall(call, eh)
  31.         end
  32. -  
  33. +
  34.         return dispatch
  35.     ]]
  36. -  
  37. +
  38.     local ARGS = {}
  39.     for i = 1, argCount do ARGS[i] = "arg"..i end
  40.     code = code:gsub("ARGS", tconcat(ARGS, ", "))
  41. @@ -75,7 +75,7 @@ end})
  42.  Dispatchers[0] = function(func)
  43.     return xpcall(func, errorhandler)
  44.  end
  45. -
  46. +
  47.  local function safecall(func, ...)
  48.     return Dispatchers[select("#", ...)](func, ...)
  49.  end
  50. @@ -197,11 +197,11 @@ local allIsLiteral = {
  51.  local function GetOptionsMemberValue(membername, option, options, path, appName, ...)
  52.     --get definition for the member
  53.     local inherits = isInherited[membername]
  54. -  
  55. +
  56.  
  57.     --get the member of the option, traversing the tree if it can be inherited
  58.     local member
  59. -  
  60. +
  61.     if inherits then
  62.         local group = options
  63.         if group[membername] ~= nil then
  64. @@ -216,7 +216,7 @@ local function GetOptionsMemberValue(membername, option, options, path, appName,
  65.     else
  66.         member = option[membername]
  67.     end
  68. -  
  69. +
  70.     --check if we need to call a functon, or if we have a literal value
  71.     if ( not allIsLiteral[membername] ) and ( type(member) == "function" or ((not stringIsLiteral[membername]) and type(member) == "string") ) then
  72.         --We have a function to call
  73. @@ -225,13 +225,13 @@ local function GetOptionsMemberValue(membername, option, options, path, appName,
  74.         local handler
  75.         local group = options
  76.         handler = group.handler or handler
  77. -      
  78. +
  79.         for i = 1, #path do
  80.             group = GetSubOption(group, path[i])
  81.             info[i] = path[i]
  82.             handler = group.handler or handler
  83.         end
  84. -      
  85. +
  86.         info.options = options
  87.         info.appName = appName
  88.         info[0] = appName
  89. @@ -241,8 +241,8 @@ local function GetOptionsMemberValue(membername, option, options, path, appName,
  90.         info.type = option.type
  91.         info.uiType = "dialog"
  92.         info.uiName = MAJOR
  93. -  
  94. -       local a, b, c ,d
  95. +
  96. +       local a, b, c ,d
  97.         --using 4 returns for the get of a color type, increase if a type needs more
  98.         if type(member) == "function" then
  99.             --Call the function
  100. @@ -259,8 +259,8 @@ local function GetOptionsMemberValue(membername, option, options, path, appName,
  101.         return a,b,c,d
  102.     else
  103.         --The value isnt a function to call, return it
  104. -       return member  
  105. -   end
  106. +       return member
  107. +   end
  108.  end
  109.  
  110.  --[[calls an options function that could be inherited, method name or function ref
  111. @@ -344,7 +344,7 @@ end
  112.  local function BuildSortedOptionsTable(group, keySort, opts, options, path, appName)
  113.     tempOrders = new()
  114.     tempNames = new()
  115. -  
  116. +
  117.     if group.plugins then
  118.         for plugin, t in pairs(group.plugins) do
  119.             for k, v in pairs(t) do
  120. @@ -360,7 +360,7 @@ local function BuildSortedOptionsTable(group, keySort, opts, options, path, appN
  121.             end
  122.         end
  123.     end
  124. -  
  125. +
  126.     for k, v in pairs(group.args) do
  127.         if not opts[k] then
  128.             tinsert(keySort, k)
  129. @@ -391,7 +391,7 @@ local function DelTree(tree)
  130.  end
  131.  
  132.  local function CleanUserData(widget, event)
  133. -  
  134. +
  135.     local user = widget:GetUserDataTable()
  136.  
  137.     if user.path then
  138. @@ -431,7 +431,7 @@ end
  139.  -- - Gets a status table for the given appname and options path.
  140.  -- @param appName The application name as given to `:RegisterOptionsTable()`
  141.  -- @param path The path to the options (a table with all group keys)
  142. --- @return
  143. +-- @return
  144.  function AceConfigDialog:GetStatusTable(appName, path)
  145.     local status = self.Status
  146.  
  147. @@ -465,7 +465,7 @@ end
  148.  function AceConfigDialog:SelectGroup(appName, ...)
  149.     local path = new()
  150.  
  151. -  
  152. +
  153.     local app = reg:GetOptionsTable(appName)
  154.     if not app then
  155.         error(("%s isn't registed with AceConfigRegistry, unable to open config"):format(appName), 2)
  156. @@ -477,9 +477,9 @@ function AceConfigDialog:SelectGroup(appName, ...)
  157.         status.groups = {}
  158.     end
  159.     status = status.groups
  160. -   local treevalue
  161. -   local treestatus
  162. -  
  163. +   local treevalue
  164. +   local treestatus
  165. +
  166.     for n = 1, select("#",...) do
  167.         local key = select(n, ...)
  168.  
  169. @@ -506,12 +506,12 @@ function AceConfigDialog:SelectGroup(appName, ...)
  170.             --the selected group will be overwritten if a child is the final target but still needs to be open
  171.             treestatus.selected = treevalue
  172.             treestatus.groups[treevalue] = true
  173. -          
  174. +
  175.         end
  176. -      
  177. +
  178.         --move to the next group in the path
  179.         group = GetSubOption(group, key)
  180. -       if not group then
  181. +       if not group then
  182.             break
  183.         end
  184.         tinsert(path, key)
  185. @@ -521,10 +521,10 @@ function AceConfigDialog:SelectGroup(appName, ...)
  186.         end
  187.         status = status.groups
  188.     end
  189. -  
  190. +
  191.     del(path)
  192.     reg:NotifyChange(appName)
  193. -end   
  194. +end
  195.  
  196.  local function OptionOnMouseOver(widget, event)
  197.     --show a tooltip/set the status bar to the desc text
  198. @@ -539,14 +539,14 @@ local function OptionOnMouseOver(widget, event)
  199.     local desc = GetOptionsMemberValue("desc", opt, options, path, appName)
  200.     local usage = GetOptionsMemberValue("usage", opt, options, path, appName)
  201.     local descStyle = opt.descStyle
  202. -  
  203. +
  204.     if descStyle and descStyle ~= "tooltip" then return end
  205. -  
  206. +
  207.     GameTooltip:SetText(name, 1, .82, 0, true)
  208. -  
  209. +
  210.     if opt.type == "multiselect" then
  211.         GameTooltip:AddLine(user.text, 0.5, 0.5, 0.8, true)
  212. -   end
  213. +   end
  214.     if type(desc) == "string" then
  215.         GameTooltip:AddLine(desc, 1, 1, 1, true)
  216.     end
  217. @@ -679,7 +679,7 @@ local function ActivateControl(widget, event, ...)
  218.             end
  219.         end
  220.     end
  221. -  
  222. +
  223.     local success
  224.     if validated and option.type ~= "execute" then
  225.         if type(validate) == "string" then
  226. @@ -694,7 +694,7 @@ local function ActivateControl(widget, event, ...)
  227.             if not success then validated = false end
  228.         end
  229.     end
  230. -  
  231. +
  232.     local rootframe = user.rootframe
  233.     if type(validated) == "string" then
  234.         --validate function returned a message to display
  235. @@ -707,7 +707,7 @@ local function ActivateControl(widget, event, ...)
  236.         del(info)
  237.         return true
  238.     elseif not validated then
  239. -       --validate returned false  
  240. +       --validate returned false
  241.         if rootframe.SetStatusText then
  242.             if usage then
  243.                 rootframe:SetStatusText(name..": "..usage)
  244. @@ -725,7 +725,7 @@ local function ActivateControl(widget, event, ...)
  245.         del(info)
  246.         return true
  247.     else
  248. -      
  249. +
  250.         local confirmText = option.confirmText
  251.         --call confirm func/method
  252.         if type(confirm) == "string" then
  253. @@ -766,10 +766,10 @@ local function ActivateControl(widget, event, ...)
  254.                         confirmText = confirmText.." - "..desc
  255.                     end
  256.                 end
  257. -              
  258. +
  259.                 local iscustom = user.rootframe:GetUserData("iscustom")
  260.                 local rootframe
  261. -              
  262. +
  263.                 if iscustom then
  264.                     rootframe = user.rootframe
  265.                 end
  266. @@ -806,7 +806,7 @@ local function ActivateControl(widget, event, ...)
  267.         --full refresh of the frame, some controls dont cause this on all events
  268.         if option.type == "color" then
  269.             if event == "OnValueConfirmed" then
  270. -              
  271. +
  272.                 if iscustom then
  273.                     AceConfigDialog:Open(user.appName, user.rootframe, unpack(basepath))
  274.                 else
  275. @@ -1075,7 +1075,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
  276.                     else
  277.                         GroupContainer = gui:Create("SimpleGroup")
  278.                     end
  279. -                  
  280. +
  281.                     GroupContainer.width = "fill"
  282.                     GroupContainer:SetLayout("flow")
  283.                     container:AddChild(GroupContainer)
  284. @@ -1084,14 +1084,14 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
  285.             else
  286.                 --Control to feed
  287.                 local control
  288. -              
  289. +
  290.                 local name = GetOptionsMemberValue("name", v, options, path, appName)
  291. -              
  292. +
  293.                 if v.type == "execute" then
  294. -                  
  295. +
  296.                     local imageCoords = GetOptionsMemberValue("imageCoords",v, options, path, appName)
  297.                     local image, width, height = GetOptionsMemberValue("image",v, options, path, appName)
  298. -                  
  299. +
  300.                     if type(image) == "string" or type(image) == "number" then
  301.                         control = gui:Create("Icon")
  302.                         if not width then
  303. @@ -1126,7 +1126,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
  304.                         geterrorhandler()(("Invalid Custom Control Type - %s"):format(tostring(controlType)))
  305.                         control = gui:Create(v.multiline and "MultiLineEditBox" or "EditBox")
  306.                     end
  307. -                  
  308. +
  309.                     if v.multiline and control.SetNumLines then
  310.                         control:SetNumLines(tonumber(v.multiline) or 4)
  311.                     end
  312. @@ -1145,15 +1145,15 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
  313.                     local value = GetOptionsMemberValue("get",v, options, path, appName)
  314.                     control:SetValue(value)
  315.                     control:SetCallback("OnValueChanged",ActivateControl)
  316. -                  
  317. +
  318.                     if v.descStyle == "inline" then
  319.                         local desc = GetOptionsMemberValue("desc", v, options, path, appName)
  320.                         control:SetDescription(desc)
  321.                     end
  322. -                  
  323. +
  324.                     local image = GetOptionsMemberValue("image", v, options, path, appName)
  325.                     local imageCoords = GetOptionsMemberValue("imageCoords", v, options, path, appName)
  326. -                  
  327. +
  328.                     if type(image) == "string" or type(image) == "number" then
  329.                         if type(imageCoords) == "table" then
  330.                             control:SetImage(image, unpack(imageCoords))
  331. @@ -1240,9 +1240,9 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
  332.                 elseif v.type == "multiselect" then
  333.                     local values = GetOptionsMemberValue("values", v, options, path, appName)
  334.                     local disabled = CheckOptionDisabled(v, options, path, appName)
  335. -                  
  336. +
  337.                     local controlType = v.dialogControl or v.control
  338. -                  
  339. +
  340.                     local valuesort = new()
  341.                     if values then
  342.                         for value, text in pairs(values) do
  343. @@ -1250,7 +1250,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
  344.                         end
  345.                     end
  346.                     tsort(valuesort)
  347. -                  
  348. +
  349.                     if controlType then
  350.                         control = gui:Create(controlType)
  351.                         if not control then
  352. @@ -1314,9 +1314,9 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
  353.                         control:ResumeLayout()
  354.                         control:DoLayout()
  355.  
  356. -                      
  357. +
  358.                     end
  359. -                  
  360. +
  361.                     del(valuesort)
  362.  
  363.                 elseif v.type == "color" then
  364. @@ -1341,7 +1341,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
  365.                 elseif v.type == "description" then
  366.                     control = gui:Create("Label")
  367.                     control:SetText(name)
  368. -                  
  369. +
  370.                     local fontSize = GetOptionsMemberValue("fontSize",v, options, path, appName)
  371.                     if fontSize == "medium" then
  372.                         control:SetFontObject(GameFontHighlight)
  373. @@ -1350,10 +1350,10 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
  374.                     else -- small or invalid
  375.                         control:SetFontObject(GameFontHighlightSmall)
  376.                     end
  377. -                  
  378. +
  379.                     local imageCoords = GetOptionsMemberValue("imageCoords",v, options, path, appName)
  380.                     local image, width, height = GetOptionsMemberValue("image",v, options, path, appName)
  381. -                  
  382. +
  383.                     if type(image) == "string" or type(image) == "number" then
  384.                         if not width then
  385.                             width = GetOptionsMemberValue("imageWidth",v, options, path, appName)
  386. @@ -1398,9 +1398,10 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin
  387.                     end
  388.  
  389.                     InjectInfo(control, options, v, path, rootframe, appName)
  390. +                   control.rowStart = GetOptionsMemberValue("rowStart", v, options, path, appName);
  391.                     container:AddChild(control)
  392.                 end
  393. -              
  394. +
  395.             end
  396.         end
  397.         tremove(path)
  398. @@ -1425,7 +1426,7 @@ local function TreeOnButtonEnter(widget, event, uniquevalue, button)
  399.     local option = user.option
  400.     local path = user.path
  401.     local appName = user.appName
  402. -  
  403. +
  404.     local feedpath = new()
  405.     for i = 1, #path do
  406.         feedpath[i] = path[i]
  407. @@ -1440,7 +1441,7 @@ local function TreeOnButtonEnter(widget, event, uniquevalue, button)
  408.  
  409.     local name = GetOptionsMemberValue("name", group, options, feedpath, appName)
  410.     local desc = GetOptionsMemberValue("desc", group, options, feedpath, appName)
  411. -  
  412. +
  413.     GameTooltip:SetOwner(button, "ANCHOR_NONE")
  414.     if widget.type == "TabGroup" then
  415.         GameTooltip:SetPoint("BOTTOM",button,"TOP")
  416. @@ -1449,11 +1450,11 @@ local function TreeOnButtonEnter(widget, event, uniquevalue, button)
  417.     end
  418.  
  419.     GameTooltip:SetText(name, 1, .82, 0, true)
  420. -  
  421. +
  422.     if type(desc) == "string" then
  423.         GameTooltip:AddLine(desc, 1, 1, 1, true)
  424.     end
  425. -  
  426. +
  427.     GameTooltip:Show()
  428.  end
  429.  
  430. @@ -1464,25 +1465,25 @@ end
  431.  
  432.  local function GroupExists(appName, options, path, uniquevalue)
  433.     if not uniquevalue then return false end
  434. -  
  435. +
  436.     local feedpath = new()
  437.     local temppath = new()
  438.     for i = 1, #path do
  439.         feedpath[i] = path[i]
  440.     end
  441. -  
  442. +
  443.     BuildPath(feedpath, ("\001"):split(uniquevalue))
  444. -  
  445. +
  446.     local group = options
  447.     for i = 1, #feedpath do
  448.         local v = feedpath[i]
  449.         temppath[i] = v
  450.         group = GetSubOption(group, v)
  451. -      
  452. -       if not group or group.type ~= "group" or CheckOptionHidden(group, options, temppath, appName) then
  453. +
  454. +       if not group or group.type ~= "group" or CheckOptionHidden(group, options, temppath, appName) then
  455.             del(feedpath)
  456.             del(temppath)
  457. -           return false
  458. +           return false
  459.         end
  460.     end
  461.     del(feedpath)
  462. @@ -1605,7 +1606,7 @@ function AceConfigDialog:FeedGroup(appName,options,container,rootframe,path, isR
  463.             tab:SetCallback("OnGroupSelected", GroupSelected)
  464.             tab:SetCallback("OnTabEnter", TreeOnButtonEnter)
  465.             tab:SetCallback("OnTabLeave", TreeOnButtonLeave)
  466. -          
  467. +
  468.             local status = AceConfigDialog:GetStatusTable(appName, path)
  469.             if not status.groups then
  470.                 status.groups = {}
  471. @@ -1625,7 +1626,7 @@ function AceConfigDialog:FeedGroup(appName,options,container,rootframe,path, isR
  472.                     break
  473.                 end
  474.             end
  475. -          
  476. +
  477.             container:AddChild(tab)
  478.  
  479.         elseif grouptype == "select" then
  480. @@ -1648,7 +1649,7 @@ function AceConfigDialog:FeedGroup(appName,options,container,rootframe,path, isR
  481.             if firstgroup then
  482.                 select:SetGroup((GroupExists(appName, options, path,status.groups.selected) and status.groups.selected) or firstgroup)
  483.             end
  484. -          
  485. +
  486.             select.width = "fill"
  487.             select.height = "fill"
  488.  
  489. @@ -1660,14 +1661,14 @@ function AceConfigDialog:FeedGroup(appName,options,container,rootframe,path, isR
  490.             local tree = gui:Create("TreeGroup")
  491.             InjectInfo(tree, options, group, path, rootframe, appName)
  492.             tree:EnableButtonTooltips(false)
  493. -          
  494. +
  495.             tree.width = "fill"
  496.             tree.height = "fill"
  497.  
  498.             tree:SetCallback("OnGroupSelected", GroupSelected)
  499.             tree:SetCallback("OnButtonEnter", TreeOnButtonEnter)
  500.             tree:SetCallback("OnButtonLeave", TreeOnButtonLeave)
  501. -          
  502. +
  503.             local status = AceConfigDialog:GetStatusTable(appName, path)
  504.             if not status.groups then
  505.                 status.groups = {}
  506. @@ -1708,7 +1709,7 @@ local function RefreshOnUpdate(this)
  507.         end
  508.         this.closing[appName] = nil
  509.     end
  510. -  
  511. +
  512.     if this.closeAll then
  513.         for k, v in pairs(AceConfigDialog.OpenFrames) do
  514.             if not this.closeAllOverride[k] then
  515. @@ -1718,7 +1719,7 @@ local function RefreshOnUpdate(this)
  516.         this.closeAll = nil
  517.         wipe(this.closeAllOverride)
  518.     end
  519. -  
  520. +
  521.     for appName in pairs(this.apps) do
  522.         if AceConfigDialog.OpenFrames[appName] then
  523.             local user = AceConfigDialog.OpenFrames[appName]:GetUserDataTable()
  524. @@ -1803,10 +1804,10 @@ function AceConfigDialog:Open(appName, container, ...)
  525.     local options = app("dialog", MAJOR)
  526.  
  527.     local f
  528. -  
  529. +
  530.     local path = new()
  531.     local name = GetOptionsMemberValue("name", options, options, path, appName)
  532. -  
  533. +
  534.     --If an optional path is specified add it to the path table before feeding the options
  535.     --as container is optional as well it may contain the first element of the path
  536.     if type(container) == "string" then
  537. @@ -1816,7 +1817,7 @@ function AceConfigDialog:Open(appName, container, ...)
  538.     for n = 1, select("#",...) do
  539.         tinsert(path, (select(n, ...)))
  540.     end
  541. -  
  542. +
  543.     local option = options
  544.     if type(container) == "table" and container.type == "BlizOptionsGroup" and #path > 0 then
  545.         for i = 1, #path do
  546. @@ -1824,7 +1825,7 @@ function AceConfigDialog:Open(appName, container, ...)
  547.         end
  548.         name = format("%s - %s", name, GetOptionsMemberValue("name", option, options, path, appName))
  549.     end
  550. -  
  551. +
  552.     --if a container is given feed into that
  553.     if container then
  554.         f = container
  555. @@ -1918,19 +1919,19 @@ end
  556.  -- @param name A descriptive name to display in the options tree (defaults to appName)
  557.  -- @param parent The parent to use in the interface options tree.
  558.  -- @param ... The path in the options table to feed into the interface options panel.
  559. --- @return The reference to the frame registered into the Interface Options.
  560. +-- @return The reference to the frame registered into the Interface Options.
  561.  function AceConfigDialog:AddToBlizOptions(appName, name, parent, ...)
  562.     local BlizOptions = AceConfigDialog.BlizOptions
  563. -  
  564. +
  565.     local key = appName
  566.     for n = 1, select("#", ...) do
  567.         key = key.."\001"..select(n, ...)
  568.     end
  569. -  
  570. +
  571.     if not BlizOptions[appName] then
  572.         BlizOptions[appName] = {}
  573.     end
  574. -  
  575. +
  576.     if not BlizOptions[appName][key] then
  577.         local group = gui:Create("BlizOptionsGroup")
  578.         BlizOptions[appName][key] = group
  579. diff --git a/WeakAuras/libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua b/WeakAuras/libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua
  580. index cf81973..a3301fc 100644
  581. --- a/WeakAuras/libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua
  582. +++ b/WeakAuras/libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua
  583. @@ -4,12 +4,12 @@
  584.  -- * Valid **uiTypes**: "cmd", "dropdown", "dialog". This is verified by the library at call time. \\
  585.  -- * The **uiName** field is expected to contain the full name of the calling addon, including version, e.g. "FooBar-1.0". This is verified by the library at call time.\\
  586.  -- * The **appName** field is the options table name as given at registration time \\
  587. ---
  588. +--
  589.  -- :IterateOptionsTables() (and :GetOptionsTable() if only given one argument) return a function reference that the requesting config handling addon must call with valid "uiType", "uiName".
  590.  -- @class file
  591.  -- @name AceConfigRegistry-3.0
  592.  -- @release $Id: AceConfigRegistry-3.0.lua 1139 2016-07-03 07:43:51Z nevcairiel $
  593. -local MAJOR, MINOR = "AceConfigRegistry-3.0", 16
  594. +local MAJOR, MINOR = "AceConfigRegistry-3.0", 17
  595.  local AceConfigRegistry = LibStub:NewLibrary(MAJOR, MINOR)
  596.  
  597.  if not AceConfigRegistry then return end
  598. @@ -33,7 +33,7 @@ local error, assert = error, assert
  599.  
  600.  
  601.  AceConfigRegistry.validated = {
  602. -   -- list of options table names ran through :ValidateOptionsTable automatically.
  603. +   -- list of options table names ran through :ValidateOptionsTable automatically.
  604.     -- CLEARED ON PURPOSE, since newer versions may have newer validators
  605.     cmd = {},
  606.     dropdown = {},
  607. @@ -91,6 +91,7 @@ local basekeys={
  608.     func=optmethodfalse,
  609.     arg={["*"]=true},
  610.     width=optstring,
  611. +   rowStart=optbool
  612.  }
  613.  
  614.  local typedkeys={
  615. @@ -145,8 +146,8 @@ local typedkeys={
  616.     select={
  617.         values=ismethodtable,
  618.         style={
  619. -           ["nil"]=true,
  620. -           ["string"]={dropdown=true,radio=true},
  621. +           ["nil"]=true,
  622. +           ["string"]={dropdown=true,radio=true},
  623.             _="string: 'dropdown' or 'radio'"
  624.         },
  625.         control=optstring,
  626. @@ -203,13 +204,13 @@ local function validate(options,errlvl,...)
  627.     if type(options.type)~="string" then
  628.         err(".type: expected a string, got a "..type(options.type), errlvl,...)
  629.     end
  630. -  
  631. +
  632.     -- get type and 'typedkeys' member
  633.     local tk = typedkeys[options.type]
  634.     if not tk then
  635.         err(".type: unknown type '"..options.type.."'", errlvl,...)
  636.     end
  637. -  
  638. +
  639.     -- make sure that all options[] are known parameters
  640.     for k,v in pairs(options) do
  641.         if not (tk[k] or basekeys[k]) then
  642. @@ -302,7 +303,7 @@ function AceConfigRegistry:RegisterOptionsTable(appName, options, skipValidation
  643.                 AceConfigRegistry:ValidateOptionsTable(options, appName, errlvl)    -- upgradable
  644.                 AceConfigRegistry.validated[uiType][appName] = true
  645.             end
  646. -           return options
  647. +           return options
  648.         end
  649.     elseif type(options)=="function" then
  650.         AceConfigRegistry.tables[appName] = function(uiType, uiName, errlvl)
  651. @@ -340,7 +341,7 @@ function AceConfigRegistry:GetOptionsTable(appName, uiType, uiName)
  652.     if not f then
  653.         return nil
  654.     end
  655. -  
  656. +
  657.     if uiType then
  658.         return f(uiType,uiName,1)   -- get the table for us
  659.     else
  660. diff --git a/WeakAuras/libs/AceGUI-3.0/AceGUI-3.0.lua b/WeakAuras/libs/AceGUI-3.0/AceGUI-3.0.lua
  661. index 9853644..5daad7b 100644
  662. --- a/WeakAuras/libs/AceGUI-3.0/AceGUI-3.0.lua
  663. +++ b/WeakAuras/libs/AceGUI-3.0/AceGUI-3.0.lua
  664. @@ -1,6 +1,6 @@
  665.  --- **AceGUI-3.0** provides access to numerous widgets which can be used to create GUIs.
  666.  -- AceGUI is used by AceConfigDialog to create the option GUIs, but you can use it by itself
  667. --- to create any custom GUI. There are more extensive examples in the test suite in the Ace3
  668. +-- to create any custom GUI. There are more extensive examples in the test suite in the Ace3
  669.  -- stand-alone distribution.
  670.  --
  671.  -- **Note**: When using AceGUI-3.0 directly, please do not modify the frames of the widgets directly,
  672. @@ -25,7 +25,7 @@
  673.  -- @class file
  674.  -- @name AceGUI-3.0
  675.  -- @release $Id: AceGUI-3.0.lua 1102 2013-10-25 14:15:23Z nevcairiel $
  676. -local ACEGUI_MAJOR, ACEGUI_MINOR = "AceGUI-3.0", 34
  677. +local ACEGUI_MAJOR, ACEGUI_MINOR = "AceGUI-3.0", 35
  678.  local AceGUI, oldminor = LibStub:NewLibrary(ACEGUI_MAJOR, ACEGUI_MINOR)
  679.  
  680.  if not AceGUI then return end -- No upgrade needed
  681. @@ -51,7 +51,7 @@ AceGUI.LayoutRegistry = AceGUI.LayoutRegistry or {}
  682.  AceGUI.WidgetBase = AceGUI.WidgetBase or {}
  683.  AceGUI.WidgetContainerBase = AceGUI.WidgetContainerBase or {}
  684.  AceGUI.WidgetVersions = AceGUI.WidgetVersions or {}
  685. -
  686. +
  687.  -- local upvalues
  688.  local WidgetRegistry = AceGUI.WidgetRegistry
  689.  local LayoutRegistry = AceGUI.LayoutRegistry
  690. @@ -71,17 +71,17 @@ local function CreateDispatcher(argCount)
  691.         local xpcall, eh = ...
  692.         local method, ARGS
  693.         local function call() return method(ARGS) end
  694. -  
  695. +
  696.         local function dispatch(func, ...)
  697.             method = func
  698.             if not method then return end
  699.             ARGS = ...
  700.             return xpcall(call, eh)
  701.         end
  702. -  
  703. +
  704.         return dispatch
  705.     ]]
  706. -  
  707. +
  708.     local ARGS = {}
  709.     for i = 1, argCount do ARGS[i] = "arg"..i end
  710.     code = code:gsub("ARGS", tconcat(ARGS, ", "))
  711. @@ -96,7 +96,7 @@ end})
  712.  Dispatchers[0] = function(func)
  713.     return xpcall(func, errorhandler)
  714.  end
  715. -
  716. +
  717.  local function safecall(func, ...)
  718.     return Dispatchers[select("#", ...)](func, ...)
  719.  end
  720. @@ -108,7 +108,7 @@ do
  721.     -- Internal Storage of the objects changed, from an array table
  722.     -- to a hash table, and additionally we introduced versioning on
  723.     -- the widgets which would discard all widgets from a pre-29 version
  724. -   -- anyway, so we just clear the storage now, and don't try to
  725. +   -- anyway, so we just clear the storage now, and don't try to
  726.     -- convert the storage tables to the new format.
  727.     -- This should generally not cause *many* widgets to end up in trash,
  728.     -- since once dialogs are opened, all addons should be loaded already
  729. @@ -118,7 +118,7 @@ do
  730.     if oldminor and oldminor < 29 and AceGUI.objPools then
  731.         AceGUI.objPools = nil
  732.     end
  733. -  
  734. +
  735.     AceGUI.objPools = AceGUI.objPools or {}
  736.     local objPools = AceGUI.objPools
  737.     --Returns a new instance, if none are available either returns a new table or calls the given contructor
  738. @@ -126,11 +126,11 @@ do
  739.         if not WidgetRegistry[type] then
  740.             error("Attempt to instantiate unknown widget type", 2)
  741.         end
  742. -      
  743. +
  744.         if not objPools[type] then
  745.             objPools[type] = {}
  746.         end
  747. -      
  748. +
  749.         local newObj = next(objPools[type])
  750.         if not newObj then
  751.             newObj = WidgetRegistry[type]()
  752. @@ -180,12 +180,12 @@ function AceGUI:Create(type)
  753.             widget.OnAcquire = widget.Aquire
  754.             widget.Aquire = nil
  755.         end
  756. -      
  757. +
  758.         if rawget(widget, "Release") then
  759. -           widget.OnRelease = rawget(widget, "Release")
  760. +           widget.OnRelease = rawget(widget, "Release")
  761.             widget.Release = nil
  762.         end
  763. -      
  764. +
  765.         if widget.OnAcquire then
  766.             widget:OnAcquire()
  767.         else
  768. @@ -267,18 +267,18 @@ end
  769.  --[[
  770.     Widgets must provide the following functions
  771.         OnAcquire() - Called when the object is acquired, should set everything to a default hidden state
  772. -      
  773. +
  774.     And the following members
  775.         frame - the frame or derivitive object that will be treated as the widget for size and anchoring purposes
  776.         type - the type of the object, same as the name given to :RegisterWidget()
  777. -      
  778. +
  779.     Widgets contain a table called userdata, this is a safe place to store data associated with the wigdet
  780.     It will be cleared automatically when a widget is released
  781.     Placing values directly into a widget object should be avoided
  782. -  
  783. +
  784.     If the Widget can act as a container for other Widgets the following
  785.         content - frame or derivitive that children will be anchored to
  786. -      
  787. +
  788.     The Widget can supply the following Optional Members
  789.         :OnRelease() - Called when the object is Released, should remove any additional anchors and clear any data
  790.         :OnWidthSet(width) - Called when the width of the widget is changed
  791. @@ -294,21 +294,21 @@ end
  792.  -- Widget Base Template --
  793.  --------------------------
  794.  do
  795. -   local WidgetBase = AceGUI.WidgetBase
  796. -  
  797. +   local WidgetBase = AceGUI.WidgetBase
  798. +
  799.     WidgetBase.SetParent = function(self, parent)
  800.         local frame = self.frame
  801.         frame:SetParent(nil)
  802.         frame:SetParent(parent.content)
  803.         self.parent = parent
  804.     end
  805. -  
  806. +
  807.     WidgetBase.SetCallback = function(self, name, func)
  808.         if type(func) == "function" then
  809.             self.events[name] = func
  810.         end
  811.     end
  812. -  
  813. +
  814.     WidgetBase.Fire = function(self, name, ...)
  815.         if self.events[name] then
  816.             local success, ret = safecall(self.events[name], self, name, ...)
  817. @@ -317,7 +317,7 @@ do
  818.             end
  819.         end
  820.     end
  821. -  
  822. +
  823.     WidgetBase.SetWidth = function(self, width)
  824.         self.frame:SetWidth(width)
  825.         self.frame.width = width
  826. @@ -325,7 +325,7 @@ do
  827.             self:OnWidthSet(width)
  828.         end
  829.     end
  830. -  
  831. +
  832.     WidgetBase.SetRelativeWidth = function(self, width)
  833.         if width <= 0 or width > 1 then
  834.             error(":SetRelativeWidth(width): Invalid relative width.", 2)
  835. @@ -333,7 +333,7 @@ do
  836.         self.relWidth = width
  837.         self.width = "relative"
  838.     end
  839. -  
  840. +
  841.     WidgetBase.SetHeight = function(self, height)
  842.         self.frame:SetHeight(height)
  843.         self.frame.height = height
  844. @@ -341,7 +341,7 @@ do
  845.             self:OnHeightSet(height)
  846.         end
  847.     end
  848. -  
  849. +
  850.     --[[ WidgetBase.SetRelativeHeight = function(self, height)
  851.         if height <= 0 or height > 1 then
  852.             error(":SetRelativeHeight(height): Invalid relative height.", 2)
  853. @@ -353,47 +353,47 @@ do
  854.     WidgetBase.IsVisible = function(self)
  855.         return self.frame:IsVisible()
  856.     end
  857. -  
  858. +
  859.     WidgetBase.IsShown= function(self)
  860.         return self.frame:IsShown()
  861.     end
  862. -      
  863. +
  864.     WidgetBase.Release = function(self)
  865.         AceGUI:Release(self)
  866.     end
  867. -  
  868. +
  869.     WidgetBase.SetPoint = function(self, ...)
  870.         return self.frame:SetPoint(...)
  871.     end
  872. -  
  873. +
  874.     WidgetBase.ClearAllPoints = function(self)
  875.         return self.frame:ClearAllPoints()
  876.     end
  877. -  
  878. +
  879.     WidgetBase.GetNumPoints = function(self)
  880.         return self.frame:GetNumPoints()
  881.     end
  882. -  
  883. +
  884.     WidgetBase.GetPoint = function(self, ...)
  885.         return self.frame:GetPoint(...)
  886. -   end
  887. -  
  888. +   end
  889. +
  890.     WidgetBase.GetUserDataTable = function(self)
  891.         return self.userdata
  892.     end
  893. -  
  894. +
  895.     WidgetBase.SetUserData = function(self, key, value)
  896.         self.userdata[key] = value
  897.     end
  898. -  
  899. +
  900.     WidgetBase.GetUserData = function(self, key)
  901.         return self.userdata[key]
  902.     end
  903. -  
  904. +
  905.     WidgetBase.IsFullHeight = function(self)
  906.         return self.height == "fill"
  907.     end
  908. -  
  909. +
  910.     WidgetBase.SetFullHeight = function(self, isFull)
  911.         if isFull then
  912.             self.height = "fill"
  913. @@ -401,11 +401,11 @@ do
  914.             self.height = nil
  915.         end
  916.     end
  917. -  
  918. +
  919.     WidgetBase.IsFullWidth = function(self)
  920.         return self.width == "fill"
  921.     end
  922. -      
  923. +
  924.     WidgetBase.SetFullWidth = function(self, isFull)
  925.         if isFull then
  926.             self.width = "fill"
  927. @@ -413,29 +413,29 @@ do
  928.             self.width = nil
  929.         end
  930.     end
  931. -  
  932. +
  933.  -- local function LayoutOnUpdate(this)
  934.  --     this:SetScript("OnUpdate",nil)
  935.  --     this.obj:PerformLayout()
  936.  -- end
  937. -  
  938. +
  939.     local WidgetContainerBase = AceGUI.WidgetContainerBase
  940. -      
  941. +
  942.     WidgetContainerBase.PauseLayout = function(self)
  943.         self.LayoutPaused = true
  944.     end
  945. -  
  946. +
  947.     WidgetContainerBase.ResumeLayout = function(self)
  948.         self.LayoutPaused = nil
  949.     end
  950. -  
  951. +
  952.     WidgetContainerBase.PerformLayout = function(self)
  953.         if self.LayoutPaused then
  954.             return
  955.         end
  956.         safecall(self.LayoutFunc, self.content, self.children)
  957.     end
  958. -  
  959. +
  960.     --call this function to layout, makes sure layed out objects get a frame to get sizes etc
  961.     WidgetContainerBase.DoLayout = function(self)
  962.         self:PerformLayout()
  963. @@ -443,7 +443,7 @@ do
  964.  --         self.frame:SetScript("OnUpdate", LayoutOnUpdate)
  965.  --     end
  966.     end
  967. -  
  968. +
  969.     WidgetContainerBase.AddChild = function(self, child, beforeWidget)
  970.         if beforeWidget then
  971.             local siblingIndex = 1
  972. @@ -451,7 +451,7 @@ do
  973.                 if widget == beforeWidget then
  974.                     break
  975.                 end
  976. -               siblingIndex = siblingIndex + 1
  977. +               siblingIndex = siblingIndex + 1
  978.             end
  979.             tinsert(self.children, siblingIndex, child)
  980.         else
  981. @@ -461,7 +461,7 @@ do
  982.         child.frame:Show()
  983.         self:DoLayout()
  984.     end
  985. -  
  986. +
  987.     WidgetContainerBase.AddChildren = function(self, ...)
  988.         for i = 1, select("#", ...) do
  989.             local child = select(i, ...)
  990. @@ -471,7 +471,7 @@ do
  991.         end
  992.         self:DoLayout()
  993.     end
  994. -  
  995. +
  996.     WidgetContainerBase.ReleaseChildren = function(self)
  997.         local children = self.children
  998.         for i = 1,#children do
  999. @@ -479,7 +479,7 @@ do
  1000.             children[i] = nil
  1001.         end
  1002.     end
  1003. -  
  1004. +
  1005.     WidgetContainerBase.SetLayout = function(self, Layout)
  1006.         self.LayoutFunc = AceGUI:GetLayout(Layout)
  1007.     end
  1008. @@ -503,7 +503,7 @@ do
  1009.             end
  1010.         end
  1011.     end
  1012. -  
  1013. +
  1014.     local function ContentResize(this)
  1015.         if this:GetWidth() and this:GetHeight() then
  1016.             this.width = this:GetWidth()
  1017. @@ -515,7 +515,7 @@ do
  1018.     setmetatable(WidgetContainerBase, {__index=WidgetBase})
  1019.  
  1020.     --One of these function should be called on each Widget Instance as part of its creation process
  1021. -  
  1022. +
  1023.     --- Register a widget-class as a container for newly created widgets.
  1024.     -- @param widget The widget class
  1025.     function AceGUI:RegisterAsContainer(widget)
  1026. @@ -531,7 +531,7 @@ do
  1027.         widget:SetLayout("List")
  1028.         return widget
  1029.     end
  1030. -  
  1031. +
  1032.     --- Register a widget-class as a widget.
  1033.     -- @param widget The widget class
  1034.     function AceGUI:RegisterAsWidget(widget)
  1035. @@ -558,11 +558,11 @@ end
  1036.  -- @param Version The version of the widget
  1037.  function AceGUI:RegisterWidgetType(Name, Constructor, Version)
  1038.     assert(type(Constructor) == "function")
  1039. -   assert(type(Version) == "number")
  1040. -  
  1041. +   assert(type(Version) == "number")
  1042. +
  1043.     local oldVersion = WidgetVersions[Name]
  1044.     if oldVersion and oldVersion >= Version then return end
  1045. -  
  1046. +
  1047.     WidgetVersions[Name] = Version
  1048.     WidgetRegistry[Name] = Constructor
  1049.  end
  1050. @@ -631,7 +631,7 @@ AceGUI:RegisterLayout("List",
  1051.         local width = content.width or content:GetWidth() or 0
  1052.         for i = 1, #children do
  1053.             local child = children[i]
  1054. -          
  1055. +
  1056.             local frame = child.frame
  1057.             frame:ClearAllPoints()
  1058.             frame:Show()
  1059. @@ -640,22 +640,22 @@ AceGUI:RegisterLayout("List",
  1060.             else
  1061.                 frame:SetPoint("TOPLEFT", children[i-1].frame, "BOTTOMLEFT")
  1062.             end
  1063. -          
  1064. +
  1065.             if child.width == "fill" then
  1066.                 child:SetWidth(width)
  1067.                 frame:SetPoint("RIGHT", content)
  1068. -              
  1069. +
  1070.                 if child.DoLayout then
  1071.                     child:DoLayout()
  1072.                 end
  1073.             elseif child.width == "relative" then
  1074.                 child:SetWidth(width * child.relWidth)
  1075. -              
  1076. +
  1077.                 if child.DoLayout then
  1078.                     child:DoLayout()
  1079.                 end
  1080.             end
  1081. -          
  1082. +
  1083.             height = height + (frame.height or frame:GetHeight() or 0)
  1084.         end
  1085.         safecall(content.obj.LayoutFinished, content.obj, nil, height)
  1086. @@ -691,18 +691,18 @@ AceGUI:RegisterLayout("Flow",
  1087.         local rowheight = 0
  1088.         local rowoffset = 0
  1089.         local lastrowoffset
  1090. -      
  1091. +
  1092.         local width = content.width or content:GetWidth() or 0
  1093. -      
  1094. +
  1095.         --control at the start of the row
  1096.         local rowstart
  1097.         local rowstartoffset
  1098.         local lastrowstart
  1099.         local isfullheight
  1100. -      
  1101. +
  1102.         local frameoffset
  1103.         local lastframeoffset
  1104. -       local oversize
  1105. +       local oversize
  1106.         for i = 1, #children do
  1107.             local child = children[i]
  1108.             oversize = nil
  1109. @@ -710,17 +710,17 @@ AceGUI:RegisterLayout("Flow",
  1110.             local frameheight = frame.height or frame:GetHeight() or 0
  1111.             local framewidth = frame.width or frame:GetWidth() or 0
  1112.             lastframeoffset = frameoffset
  1113. -           -- HACK: Why did we set a frameoffset of (frameheight / 2) ?
  1114. +           -- HACK: Why did we set a frameoffset of (frameheight / 2) ?
  1115.             -- That was moving all widgets half the widgets size down, is that intended?
  1116.             -- Actually, it seems to be neccessary for many cases, we'll leave it in for now.
  1117.             -- If widgets seem to anchor weirdly with this, provide a valid alignoffset for them.
  1118.             -- TODO: Investigate moar!
  1119.             frameoffset = child.alignoffset or (frameheight / 2)
  1120. -          
  1121. +
  1122.             if child.width == "relative" then
  1123.                 framewidth = width * child.relWidth
  1124.             end
  1125. -          
  1126. +
  1127.             frame:Show()
  1128.             frame:ClearAllPoints()
  1129.             if i == 1 then
  1130. @@ -737,7 +737,7 @@ AceGUI:RegisterLayout("Flow",
  1131.             else
  1132.                 -- if there isn't available width for the control start a new row
  1133.                 -- if a control is "fill" it will be on a row of its own full width
  1134. -               if usedwidth == 0 or ((framewidth) + usedwidth > width) or child.width == "fill" then
  1135. +               if usedwidth == 0 or ((framewidth) + usedwidth > width) or child.width == "fill" or child.rowStart then
  1136.                     if isfullheight then
  1137.                         -- a previous row has already filled the entire height, there's nothing we can usefully do anymore
  1138.                         -- (maybe error/warn about this?)
  1139. @@ -759,11 +759,11 @@ AceGUI:RegisterLayout("Flow",
  1140.                 else
  1141.                     --handles cases where the new height is higher than either control because of the offsets
  1142.                     --math.max(rowheight-rowoffset+frameoffset, frameheight-frameoffset+rowoffset)
  1143. -                  
  1144. +
  1145.                     --offset is always the larger of the two offsets
  1146.                     rowoffset = math_max(rowoffset, frameoffset)
  1147.                     rowheight = math_max(rowheight, rowoffset + (frameheight / 2))
  1148. -                  
  1149. +
  1150.                     frame:SetPoint("TOPLEFT", children[i-1].frame, "TOPRIGHT", 0, frameoffset - lastframeoffset)
  1151.                     usedwidth = framewidth + usedwidth
  1152.                 end
  1153. @@ -772,11 +772,11 @@ AceGUI:RegisterLayout("Flow",
  1154.             if child.width == "fill" then
  1155.                 safelayoutcall(child, "SetWidth", width)
  1156.                 frame:SetPoint("RIGHT", content)
  1157. -              
  1158. +
  1159.                 usedwidth = 0
  1160.                 rowstart = frame
  1161.                 rowstartoffset = frameoffset
  1162. -              
  1163. +
  1164.                 if child.DoLayout then
  1165.                     child:DoLayout()
  1166.                 end
  1167. @@ -785,7 +785,7 @@ AceGUI:RegisterLayout("Flow",
  1168.                 rowstartoffset = rowoffset
  1169.             elseif child.width == "relative" then
  1170.                 safelayoutcall(child, "SetWidth", width * child.relWidth)
  1171. -              
  1172. +
  1173.                 if child.DoLayout then
  1174.                     child:DoLayout()
  1175.                 end
  1176. @@ -794,20 +794,20 @@ AceGUI:RegisterLayout("Flow",
  1177.                     frame:SetPoint("RIGHT", content)
  1178.                 end
  1179.             end
  1180. -          
  1181. +
  1182.             if child.height == "fill" then
  1183.                 frame:SetPoint("BOTTOM", content)
  1184.                 isfullheight = true
  1185.             end
  1186.         end
  1187. -      
  1188. +
  1189.         --anchor the last row, if its full height needs a special case since  its height has just been changed by the anchor
  1190.         if isfullheight then
  1191.             rowstart:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -height)
  1192.         elseif rowstart then
  1193.             rowstart:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -(height + (rowoffset - rowstartoffset) + 3))
  1194.         end
  1195. -      
  1196. +
  1197.         height = height + rowheight + 3
  1198.         safecall(content.obj.LayoutFinished, content.obj, nil, height)
  1199.     end)
  1200. diff --git a/WeakAurasOptions/WeakAurasOptions.lua b/WeakAurasOptions/WeakAurasOptions.lua
  1201. index 45ff269..df61836 100644
  1202. --- a/WeakAurasOptions/WeakAurasOptions.lua
  1203. +++ b/WeakAurasOptions/WeakAurasOptions.lua
  1204. @@ -526,6 +526,7 @@ function WeakAuras.ConstructOptions(prototype, data, startorder, subPrefix, subS
  1205.          options["use_"..name] = {
  1206.            type = "toggle",
  1207.            name = arg.display,
  1208. +          rowStart = true,
  1209.            desc = function()
  1210.              local v = trigger["use_"..realname];
  1211.              if(v == true) then
  1212. @@ -572,6 +573,7 @@ function WeakAuras.ConstructOptions(prototype, data, startorder, subPrefix, subS
  1213.            order = order,
  1214.            hidden = hidden,
  1215.            desc = arg.desc,
  1216. +          rowStart = true,
  1217.            get = function() return trigger["use_"..realname]; end,
  1218.            set = function(info, v)
  1219.              trigger["use_"..realname] = v;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement