diff --git a/CHANGELOG.txt b/CHANGELOG.txt index f047b27..37a88ff 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -2,15 +2,47 @@ ChangeLogs: --------------------------- -EMA Version: v8.1.5-Release-v2.0(0122) +EMA Version: v8.2.0-Release-v2.1(0127) +Game Version: 8.2.0 +Release Date: 26/6/2019 + +## Core + - Updated Ace3 + - Updated SharedMediaWidgets + - Updated LibSharedMedia-3.0 + + + +## Message + - Fixed 8.2 Sound changes + - Added new sound EMA Warning (from jamba-extras) + - Had to added blizzard own Riad warning Sound for libsheardmedia to work. (hacky) + + + + + + +--------------------------- + +EMA Version: v8.1.5-Release-v2.1(0126) Game Version: 8.1.5 -Release Date: 21/4/2019 +Release Date: 8/6/2019 +## Core + - Updated Ace3 + - Updated LibSharedMedia-3.0 ## Item-Use - - Will now Disaply Item count to 9999 before it * out + - Will now Disaply Item count to 9999 before it * out Issue #20 + +## Interaction + - Fixed a Bug not telling Team when you loot a Epic/Rare BoE items +## Toon + - Fixed Issue #70 + --------------------------- EMA Version: v8.1.5-Release-v2.0(0121) diff --git a/Core/Message.lua b/Core/Message.lua index a56ba3f..88a8853 100644 --- a/Core/Message.lua +++ b/Core/Message.lua @@ -28,8 +28,8 @@ local EMAHelperSettings = LibStub:GetLibrary( "EMAHelperSettings-1.0" ) local Media = LibStub("LibSharedMedia-3.0") -- Built in Sounds -Media:Register("sound", "EMA: RaidWarning", "Sound\\interface\\RaidWarning.ogg") - +Media:Register("sound", "EMA: RaidWarning", "Interface\\Addons\\EMA\\Media\\Sounds\\raidwarning.ogg" ) +Media:Register("sound", "EMA: Warning", "Interface\\Addons\\EMA\\Media\\Sounds\\Warning.ogg") -- Constants and Locale for this module. EMA.moduleName = "Message" @@ -886,6 +886,7 @@ end local function PlayMessageSound( soundToPlay ) + --EMA:Print("test", Media:Fetch( 'sound', soundToPlay ) ) PlaySoundFile( Media:Fetch( 'sound', soundToPlay ), "Ambience" ) end @@ -946,7 +947,8 @@ local function ProcessReceivedMessage( sender, areaName, message, suppressSender -- Do nothing! Mute means eat the message. end if areaType.usesSound == true and area.soundToPlay ~= "None" then - PlayMessageSound(area.soundToPlay) + --EMA:Print("test", area.soundToPlay ) + PlayMessageSound(area.soundToPlay ) end end diff --git a/EMA.toc b/EMA.toc index 754a91f..da37bbd 100644 --- a/EMA.toc +++ b/EMA.toc @@ -1,8 +1,8 @@ -## Interface: 80100 +## Interface: 80200 ## Title: EMA ## Notes: Ebony's MultiBoxing Assistant ## Author: Jennifer Calladine 'Ebony' -## Version: v8.1.5-Release-v2.0(0121) +## Version: v8.1.5-Release-v2.1(0127) ## SavedVariables: CoreProfileDB, CommunicationsProfileDB, TeamProfileDB, TagProfileDB, MessageProfileDB, CurrProfileDB, DisplayTeamProfileDB, FollowProfileDB, GuildProfileDB, InteractionProfileDB, ItemUseProfileDB, PurchaseProfileDB, QuestProfileDB, QuestWatcherProfileDB, SellProfileDB, TalkProfileDB, ToonProfileDB, TradeProfileDB, MailProfileDB, ISBoxerProfileDB #Libs diff --git a/GUI/AceGUIContainer-EMAWindow.lua b/GUI/AceGUIContainer-EMAWindow.lua index 635e7b4..4072ecf 100644 --- a/GUI/AceGUIContainer-EMAWindow.lua +++ b/GUI/AceGUIContainer-EMAWindow.lua @@ -50,7 +50,7 @@ Scripts -------------------------------------------------------------------------------]] local function Button_OnClick(frame) --7.3 PlaySound Update. - PlaySound(PlaySoundKitID and "gsTitleOptionExit" or 799) -- SOUNDKIT.GS_TITLE_OPTION_EXIT + PlaySound(799) -- SOUNDKIT.GS_TITLE_OPTION_EXIT frame.obj:Hide() end diff --git a/Libs/AceAddon-3.0/AceAddon-3.0.lua b/Libs/AceAddon-3.0/AceAddon-3.0.lua index e9d4154..2b2a00e 100644 --- a/Libs/AceAddon-3.0/AceAddon-3.0.lua +++ b/Libs/AceAddon-3.0/AceAddon-3.0.lua @@ -6,29 +6,29 @@ -- * **OnEnable** which gets called during the PLAYER_LOGIN event, when most of the data provided by the game is already present. -- * **OnDisable**, which is only called when your addon is manually being disabled. -- @usage --- -- A small (but complete) addon, that doesn't do anything, +-- -- A small (but complete) addon, that doesn't do anything, -- -- but shows usage of the callbacks. -- local MyAddon = LibStub("AceAddon-3.0"):NewAddon("MyAddon") --- +-- -- function MyAddon:OnInitialize() --- -- do init tasks here, like loading the Saved Variables, +-- -- do init tasks here, like loading the Saved Variables, -- -- or setting up slash commands. -- end --- +-- -- function MyAddon:OnEnable() -- -- Do more initialization here, that really enables the use of your addon. --- -- Register Events, Hook functions, Create Frames, Get information from +-- -- Register Events, Hook functions, Create Frames, Get information from -- -- the game that wasn't available in OnInitialize -- end -- -- function MyAddon:OnDisable() -- -- Unhook, Unregister Events, Hide frames that you created. --- -- You would probably only use an OnDisable if you want to +-- -- You would probably only use an OnDisable if you want to -- -- build a "standby" mode, or be able to toggle modules on/off. -- end -- @class file -- @name AceAddon-3.0.lua --- @release $Id: AceAddon-3.0.lua 1184 2018-07-21 14:13:14Z nevcairiel $ +-- @release $Id: AceAddon-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $ local MAJOR, MINOR = "AceAddon-3.0", 12 local AceAddon, oldminor = LibStub:NewLibrary(MAJOR, MINOR) @@ -75,7 +75,7 @@ end local Enable, Disable, EnableModule, DisableModule, Embed, NewModule, GetModule, GetName, SetDefaultModuleState, SetDefaultModuleLibraries, SetEnabledState, SetDefaultModulePrototype -- used in the addon metatable -local function addontostring( self ) return self.name end +local function addontostring( self ) return self.name end -- Check if the addon is queued for initialization local function queuedForInitialization(addon) @@ -88,14 +88,14 @@ local function queuedForInitialization(addon) end --- Create a new AceAddon-3.0 addon. --- Any libraries you specified will be embeded, and the addon will be scheduled for +-- Any libraries you specified will be embeded, and the addon will be scheduled for -- its OnInitialize and OnEnable callbacks. -- The final addon object, with all libraries embeded, will be returned. -- @paramsig [object ,]name[, lib, ...] -- @param object Table to use as a base for the addon (optional) -- @param name Name of the addon object to create -- @param lib List of libraries to embed into the addon --- @usage +-- @usage -- -- Create a simple addon object -- MyAddon = LibStub("AceAddon-3.0"):NewAddon("MyAddon", "AceEvent-3.0") -- @@ -115,10 +115,10 @@ function AceAddon:NewAddon(objectorname, ...) if type(name)~="string" then error(("Usage: NewAddon([object,] name, [lib, lib, lib, ...]): 'name' - string expected got '%s'."):format(type(name)), 2) end - if self.addons[name] then + if self.addons[name] then error(("Usage: NewAddon([object,] name, [lib, lib, lib, ...]): 'name' - Addon '%s' already exists."):format(name), 2) end - + object = object or {} object.name = name @@ -128,7 +128,7 @@ function AceAddon:NewAddon(objectorname, ...) for k, v in pairs(oldmeta) do addonmeta[k] = v end end addonmeta.__tostring = addontostring - + setmetatable( object, addonmeta ) self.addons[name] = object object.modules = {} @@ -136,7 +136,7 @@ function AceAddon:NewAddon(objectorname, ...) object.defaultModuleLibraries = {} Embed( object ) -- embed NewModule, GetModule methods self:EmbedLibraries(object, select(i,...)) - + -- add to queue of addons to be initialized upon ADDON_LOADED tinsert(self.initializequeue, object) return object @@ -147,7 +147,7 @@ end -- Throws an error if the addon object cannot be found (except if silent is set). -- @param name unique name of the addon object -- @param silent if true, the addon is optional, silently return nil if its not found --- @usage +-- @usage -- -- Get the Addon -- MyAddon = LibStub("AceAddon-3.0"):GetAddon("MyAddon") function AceAddon:GetAddon(name, silent) @@ -202,7 +202,7 @@ end -- @paramsig name[, silent] -- @param name unique name of the module -- @param silent if true, the module is optional, silently return nil if its not found (optional) --- @usage +-- @usage -- -- Get the Addon -- MyAddon = LibStub("AceAddon-3.0"):GetAddon("MyAddon") -- -- Get the Module @@ -225,23 +225,23 @@ local function IsModuleTrue(self) return true end -- @param name unique name of the module -- @param prototype object to derive this module from, methods and values from this table will be mixed into the module (optional) -- @param lib List of libraries to embed into the addon --- @usage +-- @usage -- -- Create a module with some embeded libraries -- MyModule = MyAddon:NewModule("MyModule", "AceEvent-3.0", "AceHook-3.0") --- +-- -- -- Create a module with a prototype -- local prototype = { OnEnable = function(self) print("OnEnable called!") end } -- MyModule = MyAddon:NewModule("MyModule", prototype, "AceEvent-3.0", "AceHook-3.0") function NewModule(self, name, prototype, ...) if type(name) ~= "string" then error(("Usage: NewModule(name, [prototype, [lib, lib, lib, ...]): 'name' - string expected got '%s'."):format(type(name)), 2) end if type(prototype) ~= "string" and type(prototype) ~= "table" and type(prototype) ~= "nil" then error(("Usage: NewModule(name, [prototype, [lib, lib, lib, ...]): 'prototype' - table (prototype), string (lib) or nil expected got '%s'."):format(type(prototype)), 2) end - + if self.modules[name] then error(("Usage: NewModule(name, [prototype, [lib, lib, lib, ...]): 'name' - Module '%s' already exists."):format(name), 2) end - + -- modules are basically addons. We treat them as such. They will be added to the initializequeue properly as well. -- NewModule can only be called after the parent addon is present thus the modules will be initialized after their parent is. local module = AceAddon:NewAddon(fmt("%s_%s", self.name or tostring(self), name)) - + module.IsModule = IsModuleTrue module:SetEnabledState(self.defaultModuleState) module.moduleName = name @@ -256,24 +256,24 @@ function NewModule(self, name, prototype, ...) if not prototype or type(prototype) == "string" then prototype = self.defaultModulePrototype or nil end - + if type(prototype) == "table" then local mt = getmetatable(module) mt.__index = prototype setmetatable(module, mt) -- More of a Base class type feel. end - + safecall(self.OnModuleCreated, self, module) -- Was in Ace2 and I think it could be a cool thing to have handy. self.modules[name] = module tinsert(self.orderedModules, module) - + return module end --- Returns the real name of the addon or module, without any prefix. -- @name //addon//:GetName --- @paramsig --- @usage +-- @paramsig +-- @usage -- print(MyAddon:GetName()) -- -- prints "MyAddon" function GetName(self) @@ -285,8 +285,8 @@ end -- and enabling all modules of the addon (unless explicitly disabled).\\ -- :Enable() also sets the internal `enableState` variable to true -- @name //addon//:Enable --- @paramsig --- @usage +-- @paramsig +-- @usage -- -- Enable MyModule -- MyAddon = LibStub("AceAddon-3.0"):GetAddon("MyAddon") -- MyModule = MyAddon:GetModule("MyModule") @@ -306,8 +306,8 @@ end -- and disabling all modules of the addon.\\ -- :Disable() also sets the internal `enableState` variable to false -- @name //addon//:Disable --- @paramsig --- @usage +-- @paramsig +-- @usage -- -- Disable MyAddon -- MyAddon = LibStub("AceAddon-3.0"):GetAddon("MyAddon") -- MyAddon:Disable() @@ -320,7 +320,7 @@ end -- Short-hand function that retrieves the module via `:GetModule` and calls `:Enable` on the module object. -- @name //addon//:EnableModule -- @paramsig name --- @usage +-- @usage -- -- Enable MyModule using :GetModule -- MyAddon = LibStub("AceAddon-3.0"):GetAddon("MyAddon") -- MyModule = MyAddon:GetModule("MyModule") @@ -338,7 +338,7 @@ end -- Short-hand function that retrieves the module via `:GetModule` and calls `:Disable` on the module object. -- @name //addon//:DisableModule -- @paramsig name --- @usage +-- @usage -- -- Disable MyModule using :GetModule -- MyAddon = LibStub("AceAddon-3.0"):GetAddon("MyAddon") -- MyModule = MyAddon:GetModule("MyModule") @@ -357,7 +357,7 @@ end -- @name //addon//:SetDefaultModuleLibraries -- @paramsig lib[, lib, ...] -- @param lib List of libraries to embed into the addon --- @usage +-- @usage -- -- Create the addon object -- MyAddon = LibStub("AceAddon-3.0"):NewAddon("MyAddon") -- -- Configure default libraries for modules (all modules need AceEvent-3.0) @@ -376,7 +376,7 @@ end -- @name //addon//:SetDefaultModuleState -- @paramsig state -- @param state Default state for new modules, true for enabled, false for disabled --- @usage +-- @usage -- -- Create the addon object -- MyAddon = LibStub("AceAddon-3.0"):NewAddon("MyAddon") -- -- Set the default state to "disabled" @@ -396,7 +396,7 @@ end -- @name //addon//:SetDefaultModulePrototype -- @paramsig prototype -- @param prototype Default prototype for the new modules (table) --- @usage +-- @usage -- -- Define a prototype -- local prototype = { OnEnable = function(self) print("OnEnable called!") end } -- -- Set the default prototype @@ -428,8 +428,8 @@ end --- Return an iterator of all modules associated to the addon. -- @name //addon//:IterateModules --- @paramsig --- @usage +-- @paramsig +-- @usage -- -- Enable all modules -- for name, module in MyAddon:IterateModules() do -- module:Enable() @@ -438,13 +438,13 @@ local function IterateModules(self) return pairs(self.modules) end -- Returns an iterator of all embeds in the addon -- @name //addon//:IterateEmbeds --- @paramsig +-- @paramsig local function IterateEmbeds(self) return pairs(AceAddon.embeds[self]) end --- Query the enabledState of an addon. -- @name //addon//:IsEnabled --- @paramsig --- @usage +-- @paramsig +-- @usage -- if MyAddon:IsEnabled() then -- MyAddon:Disable() -- end @@ -489,20 +489,20 @@ end -- - Initialize the addon after creation. -- This function is only used internally during the ADDON_LOADED event --- It will call the **OnInitialize** function on the addon object (if present), +-- It will call the **OnInitialize** function on the addon object (if present), -- and the **OnEmbedInitialize** function on all embeded libraries. --- +-- -- **Note:** Do not call this function manually, unless you're absolutely sure that you know what you are doing. -- @param addon addon object to intialize function AceAddon:InitializeAddon(addon) safecall(addon.OnInitialize, addon) - + local embeds = self.embeds[addon] for i = 1, #embeds do local lib = LibStub:GetLibrary(embeds[i], true) if lib then safecall(lib.OnEmbedInitialize, lib, addon) end end - + -- we don't call InitializeAddon on modules specifically, this is handled -- from the event handler and only done _once_ end @@ -510,7 +510,7 @@ end -- - Enable the addon after creation. -- Note: This function is only used internally during the PLAYER_LOGIN event, or during ADDON_LOADED, -- if IsLoggedIn() already returns true at that point, e.g. for LoD Addons. --- It will call the **OnEnable** function on the addon object (if present), +-- It will call the **OnEnable** function on the addon object (if present), -- and the **OnEmbedEnable** function on all embeded libraries.\\ -- This function does not toggle the enable state of the addon itself, and will return early if the addon is disabled. -- @@ -520,12 +520,12 @@ end function AceAddon:EnableAddon(addon) if type(addon) == "string" then addon = AceAddon:GetAddon(addon) end if self.statuses[addon.name] or not addon.enabledState then return false end - + -- set the statuses first, before calling the OnEnable. this allows for Disabling of the addon in OnEnable. self.statuses[addon.name] = true - + safecall(addon.OnEnable, addon) - + -- make sure we're still enabled before continueing if self.statuses[addon.name] then local embeds = self.embeds[addon] @@ -533,7 +533,7 @@ function AceAddon:EnableAddon(addon) local lib = LibStub:GetLibrary(embeds[i], true) if lib then safecall(lib.OnEmbedEnable, lib, addon) end end - + -- enable possible modules. local modules = addon.orderedModules for i = 1, #modules do @@ -545,24 +545,24 @@ end -- - Disable the addon -- Note: This function is only used internally. --- It will call the **OnDisable** function on the addon object (if present), +-- It will call the **OnDisable** function on the addon object (if present), -- and the **OnEmbedDisable** function on all embeded libraries.\\ -- This function does not toggle the enable state of the addon itself, and will return early if the addon is still enabled. -- --- **Note:** Do not call this function manually, unless you're absolutely sure that you know what you are doing. +-- **Note:** Do not call this function manually, unless you're absolutely sure that you know what you are doing. -- Use :Disable on the addon itself instead. -- @param addon addon object to enable function AceAddon:DisableAddon(addon) if type(addon) == "string" then addon = AceAddon:GetAddon(addon) end if not self.statuses[addon.name] then return false end - + -- set statuses first before calling OnDisable, this allows for aborting the disable in OnDisable. self.statuses[addon.name] = false - + safecall( addon.OnDisable, addon ) - + -- make sure we're still disabling... - if not self.statuses[addon.name] then + if not self.statuses[addon.name] then local embeds = self.embeds[addon] for i = 1, #embeds do local lib = LibStub:GetLibrary(embeds[i], true) @@ -574,12 +574,12 @@ function AceAddon:DisableAddon(addon) self:DisableAddon(modules[i]) end end - + return not self.statuses[addon.name] -- return true if we're disabled end --- Get an iterator over all registered addons. --- @usage +-- @usage -- -- Print a list of all installed AceAddon's -- for name, addon in AceAddon:IterateAddons() do -- print("Addon: " .. name) @@ -587,7 +587,7 @@ end function AceAddon:IterateAddons() return pairs(self.addons) end --- Get an iterator over the internal status registry. --- @usage +-- @usage -- -- Print a list of all enabled addons -- for name, status in AceAddon:IterateAddonStatus() do -- if status then @@ -613,7 +613,7 @@ local function onEvent(this, event, arg1) AceAddon:InitializeAddon(addon) tinsert(AceAddon.enablequeue, addon) end - + if IsLoggedIn() then while(#AceAddon.enablequeue > 0) do local addon = tremove(AceAddon.enablequeue, 1) diff --git a/Libs/AceBucket-3.0/AceBucket-3.0.lua b/Libs/AceBucket-3.0/AceBucket-3.0.lua index 5d42530..514c05e 100644 --- a/Libs/AceBucket-3.0/AceBucket-3.0.lua +++ b/Libs/AceBucket-3.0/AceBucket-3.0.lua @@ -1,28 +1,28 @@ --- A bucket to catch events in. **AceBucket-3.0** provides throttling of events that fire in bursts and -- your addon only needs to know about the full burst. --- +-- -- This Bucket implementation works as follows:\\ -- Initially, no schedule is running, and its waiting for the first event to happen.\\ -- The first event will start the bucket, and get the scheduler running, which will collect all --- events in the given interval. When that interval is reached, the bucket is pushed to the --- callback and a new schedule is started. When a bucket is empty after its interval, the scheduler is +-- events in the given interval. When that interval is reached, the bucket is pushed to the +-- callback and a new schedule is started. When a bucket is empty after its interval, the scheduler is -- stopped, and the bucket is only listening for the next event to happen, basically back in its initial state. --- --- In addition, the buckets collect information about the "arg1" argument of the events that fire, and pass those as a +-- +-- In addition, the buckets collect information about the "arg1" argument of the events that fire, and pass those as a -- table to your callback. This functionality was mostly designed for the UNIT_* events.\\ -- The table will have the different values of "arg1" as keys, and the number of occurances as their value, e.g.\\ -- { ["player"] = 2, ["target"] = 1, ["party1"] = 1 } -- --- **AceBucket-3.0** can be embeded into your addon, either explicitly by calling AceBucket:Embed(MyAddon) or by +-- **AceBucket-3.0** can be embeded into your addon, either explicitly by calling AceBucket:Embed(MyAddon) or by -- specifying it as an embeded library in your AceAddon. All functions will be available on your addon object -- and can be accessed directly, without having to explicitly call AceBucket itself.\\ -- It is recommended to embed AceBucket, otherwise you'll have to specify a custom `self` on all calls you -- make into AceBucket. -- @usage -- MyAddon = LibStub("AceAddon-3.0"):NewAddon("BucketExample", "AceBucket-3.0") --- +-- -- function MyAddon:OnEnable() --- -- Register a bucket that listens to all the HP related events, +-- -- Register a bucket that listens to all the HP related events, -- -- and fires once per second -- self:RegisterBucketEvent({"UNIT_HEALTH", "UNIT_MAXHEALTH"}, 1, "UpdateHealth") -- end @@ -34,7 +34,7 @@ -- end -- @class file -- @name AceBucket-3.0.lua --- @release $Id: AceBucket-3.0.lua 1185 2018-07-21 14:15:16Z nevcairiel $ +-- @release $Id: AceBucket-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $ local MAJOR, MINOR = "AceBucket-3.0", 4 local AceBucket, oldminor = LibStub:NewLibrary(MAJOR, MINOR) @@ -79,7 +79,7 @@ end -- send the bucket to the callback function and schedule the next FireBucket in interval seconds local function FireBucket(bucket) local received = bucket.received - + -- we dont want to fire empty buckets if next(received) ~= nil then local callback = bucket.callback @@ -88,11 +88,11 @@ local function FireBucket(bucket) else safecall(callback, received) end - + for k in pairs(received) do received[k] = nil end - + -- if the bucket was not empty, schedule another FireBucket in interval seconds bucket.timer = AceTimer.ScheduleTimer(bucket, FireBucket, bucket.interval, bucket) else -- if it was empty, clear the timer and wait for the next event @@ -101,16 +101,16 @@ local function FireBucket(bucket) end -- BucketHandler ( event, arg1 ) --- +-- -- callback func for AceEvent -- stores arg1 in the received table, and schedules the bucket if necessary local function BucketHandler(self, event, arg1) if arg1 == nil then arg1 = "nil" end - + self.received[arg1] = (self.received[arg1] or 0) + 1 - + -- if we are not scheduled yet, start a timer on the interval for our bucket to be cleared if not self.timer then self.timer = AceTimer.ScheduleTimer(self, FireBucket, self.interval, self) @@ -125,14 +125,14 @@ end -- isMessage(boolean) - register AceEvent Messages instead of game events local function RegisterBucket(self, event, interval, callback, isMessage) -- try to fetch the librarys - if not AceEvent or not AceTimer then + if not AceEvent or not AceTimer then AceEvent = LibStub:GetLibrary("AceEvent-3.0", true) AceTimer = LibStub:GetLibrary("AceTimer-3.0", true) if not AceEvent or not AceTimer then error(MAJOR .. " requires AceEvent-3.0 and AceTimer-3.0", 3) end end - + if type(event) ~= "string" and type(event) ~= "table" then error("Usage: RegisterBucket(event, interval, callback): 'event' - string or table expected.", 3) end if not callback then if type(event) == "string" then @@ -144,7 +144,7 @@ local function RegisterBucket(self, event, interval, callback, isMessage) if not tonumber(interval) then error("Usage: RegisterBucket(event, interval, callback): 'interval' - number expected.", 3) end if type(callback) ~= "string" and type(callback) ~= "function" then error("Usage: RegisterBucket(event, interval, callback): 'callback' - string or function or nil expected.", 3) end if type(callback) == "string" and type(self[callback]) ~= "function" then error("Usage: RegisterBucket(event, interval, callback): 'callback' - method not found on target object.", 3) end - + local bucket = next(bucketCache) if bucket then bucketCache[bucket] = nil @@ -152,9 +152,9 @@ local function RegisterBucket(self, event, interval, callback, isMessage) bucket = { handler = BucketHandler, received = {} } end bucket.object, bucket.callback, bucket.interval = self, callback, tonumber(interval) - + local regFunc = isMessage and AceEvent.RegisterMessage or AceEvent.RegisterEvent - + if type(event) == "table" then for _,e in pairs(event) do regFunc(bucket, e, "handler") @@ -162,10 +162,10 @@ local function RegisterBucket(self, event, interval, callback, isMessage) else regFunc(bucket, event, "handler") end - + local handle = tostring(bucket) AceBucket.buckets[handle] = bucket - + return handle end @@ -177,7 +177,7 @@ end -- @usage -- MyAddon = LibStub("AceAddon-3.0"):NewAddon("MyAddon", "AceBucket-3.0") -- MyAddon:RegisterBucketEvent("BAG_UPDATE", 0.2, "UpdateBags") --- +-- -- function MyAddon:UpdateBags() -- -- do stuff -- end @@ -193,7 +193,7 @@ end -- @usage -- MyAddon = LibStub("AceAddon-3.0"):NewAddon("MyAddon", "AceBucket-3.0") -- MyAddon:RegisterBucketEvent("SomeAddon_InformationMessage", 0.2, "ProcessData") --- +-- -- function MyAddon:ProcessData() -- -- do stuff -- end @@ -208,17 +208,17 @@ function AceBucket:UnregisterBucket(handle) if bucket then AceEvent.UnregisterAllEvents(bucket) AceEvent.UnregisterAllMessages(bucket) - + -- clear any remaining data in the bucket for k in pairs(bucket.received) do bucket.received[k] = nil end - + if bucket.timer then AceTimer.CancelTimer(bucket, bucket.timer) bucket.timer = nil end - + AceBucket.buckets[handle] = nil -- store our bucket in the cache bucketCache[bucket] = true @@ -240,10 +240,10 @@ end -- embedding and embed handling local mixins = { "RegisterBucketEvent", - "RegisterBucketMessage", + "RegisterBucketMessage", "UnregisterBucket", "UnregisterAllBuckets", -} +} -- Embeds AceBucket into the target object making the functions from the mixins list available on target:.. -- @param target target object to embed AceBucket in diff --git a/Libs/AceComm-3.0/AceComm-3.0.lua b/Libs/AceComm-3.0/AceComm-3.0.lua index 9a38979..242d92c 100644 --- a/Libs/AceComm-3.0/AceComm-3.0.lua +++ b/Libs/AceComm-3.0/AceComm-3.0.lua @@ -2,14 +2,14 @@ -- It'll automatically split the messages into multiple parts and rebuild them on the receiving end.\\ -- **ChatThrottleLib** is of course being used to avoid being disconnected by the server. -- --- **AceComm-3.0** can be embeded into your addon, either explicitly by calling AceComm:Embed(MyAddon) or by +-- **AceComm-3.0** can be embeded into your addon, either explicitly by calling AceComm:Embed(MyAddon) or by -- specifying it as an embeded library in your AceAddon. All functions will be available on your addon object -- and can be accessed directly, without having to explicitly call AceComm itself.\\ -- It is recommended to embed AceComm, otherwise you'll have to specify a custom `self` on all calls you -- make into AceComm. -- @class file -- @name AceComm-3.0 --- @release $Id: AceComm-3.0.lua 1174 2018-05-14 17:29:49Z h.leppkes@gmail.com $ +-- @release $Id: AceComm-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $ --[[ AceComm-3.0 @@ -52,7 +52,7 @@ AceComm.multipart_origprefixes = nil AceComm.multipart_reassemblers = nil -- the multipart message spool: indexed by a combination of sender+distribution+ -AceComm.multipart_spool = AceComm.multipart_spool or {} +AceComm.multipart_spool = AceComm.multipart_spool or {} --- Register for Addon Traffic on a specified prefix -- @param prefix A printable character (\032-\255) classification of the message (typically AddonName or AddonNameEvent), max 16 characters @@ -90,7 +90,7 @@ function AceComm:SendCommMessage(prefix, text, distribution, target, prio, callb type(text)=="string" and type(distribution)=="string" and (target==nil or type(target)=="string" or type(target)=="number") and - (prio=="BULK" or prio=="NORMAL" or prio=="ALERT") + (prio=="BULK" or prio=="NORMAL" or prio=="ALERT") ) then error('Usage: SendCommMessage(addon, "prefix", "text", "distribution"[, "target"[, "prio"[, callbackFn, callbackarg]]])', 2) end @@ -105,7 +105,7 @@ function AceComm:SendCommMessage(prefix, text, distribution, target, prio, callb return callbackFn(callbackArg, sent, textlen) end end - + local forceMultipart if match(text, "^[\001-\009]") then -- 4.1+: see if the first character is a control character -- we need to escape the first character with a \004 @@ -150,17 +150,17 @@ do local compost = setmetatable({}, {__mode = "k"}) local function new() local t = next(compost) - if t then + if t then compost[t]=nil for i=#t,3,-1 do -- faster than pairs loop. don't even nil out 1/2 since they'll be overwritten t[i]=nil end return t end - + return {} end - + local function lostdatawarning(prefix,sender,where) DEFAULT_CHAT_FRAME:AddMessage(MAJOR..": Warning: lost network data regarding '"..tostring(prefix).."' from '"..tostring(sender).."' (in "..where..")") end @@ -168,14 +168,14 @@ do function AceComm:OnReceiveMultipartFirst(prefix, message, distribution, sender) local key = prefix.."\t"..distribution.."\t"..sender -- a unique stream is defined by the prefix + distribution + sender local spool = AceComm.multipart_spool - + --[[ - if spool[key] then + if spool[key] then lostdatawarning(prefix,sender,"First") -- continue and overwrite end --]] - + spool[key] = message -- plain string for now end @@ -183,7 +183,7 @@ do local key = prefix.."\t"..distribution.."\t"..sender -- a unique stream is defined by the prefix + distribution + sender local spool = AceComm.multipart_spool local olddata = spool[key] - + if not olddata then --lostdatawarning(prefix,sender,"Next") return @@ -204,14 +204,14 @@ do local key = prefix.."\t"..distribution.."\t"..sender -- a unique stream is defined by the prefix + distribution + sender local spool = AceComm.multipart_spool local olddata = spool[key] - + if not olddata then --lostdatawarning(prefix,sender,"End") return end spool[key] = nil - + if type(olddata) == "table" then -- if we've received a "next", the spooled data will be a table for rapid & garbage-free tconcat tinsert(olddata, message) diff --git a/Libs/AceComm-3.0/ChatThrottleLib.lua b/Libs/AceComm-3.0/ChatThrottleLib.lua index 01088f6..ad21af4 100644 --- a/Libs/AceComm-3.0/ChatThrottleLib.lua +++ b/Libs/AceComm-3.0/ChatThrottleLib.lua @@ -3,7 +3,7 @@ -- -- Manages AddOn chat output to keep player from getting kicked off. -- --- ChatThrottleLib:SendChatMessage/:SendAddonMessage functions that accept +-- ChatThrottleLib:SendChatMessage/:SendAddonMessage functions that accept -- a Priority ("BULK", "NORMAL", "ALERT") as well as prefix for SendChatMessage. -- -- Priorities get an equal share of available bandwidth when fully loaded. @@ -118,7 +118,7 @@ end ----------------------------------------------------------------------- --- Recycling bin for pipes +-- Recycling bin for pipes -- A pipe is a plain integer-indexed queue of messages -- Pipes normally live in Rings of pipes (3 rings total, one per priority) @@ -169,7 +169,7 @@ end -- Initialize queues, set up frame for OnUpdate, etc -function ChatThrottleLib:Init() +function ChatThrottleLib:Init() -- Set up queues if not self.Prio then @@ -356,8 +356,8 @@ function ChatThrottleLib.OnUpdate(this,delay) -- See how many of our priorities have queued messages (we only have 3, don't worry about the loop) local n = 0 for prioname,Prio in pairs(self.Prio) do - if Prio.Ring.pos or Prio.avail < 0 then - n = n + 1 + if Prio.Ring.pos or Prio.avail < 0 then + n = n + 1 end end diff --git a/Libs/AceConfig-3.0/AceConfig-3.0.lua b/Libs/AceConfig-3.0/AceConfig-3.0.lua index a99ddf7..5071cdc 100644 --- a/Libs/AceConfig-3.0/AceConfig-3.0.lua +++ b/Libs/AceConfig-3.0/AceConfig-3.0.lua @@ -3,7 +3,7 @@ -- as well as associate it with a slash command. -- @class file -- @name AceConfig-3.0 --- @release $Id: AceConfig-3.0.lua 1161 2017-08-12 14:30:16Z funkydude $ +-- @release $Id: AceConfig-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $ --[[ AceConfig-3.0 @@ -45,7 +45,7 @@ local pcall, error, type, pairs = pcall, error, type, pairs function AceConfig:RegisterOptionsTable(appName, options, slashcmd) local ok,msg = pcall(cfgreg.RegisterOptionsTable, self, appName, options) if not ok then error(msg, 2) end - + if slashcmd then if type(slashcmd) == "table" then for _,cmd in pairs(slashcmd) do diff --git a/Libs/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.lua b/Libs/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.lua index 33f9fe1..5113875 100644 --- a/Libs/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.lua +++ b/Libs/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.lua @@ -1,7 +1,7 @@ --- AceConfigCmd-3.0 handles access to an options table through the "command line" interface via the ChatFrames. -- @class file -- @name AceConfigCmd-3.0 --- @release $Id: AceConfigCmd-3.0.lua 1161 2017-08-12 14:30:16Z funkydude $ +-- @release $Id: AceConfigCmd-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $ --[[ AceConfigCmd-3.0 @@ -63,7 +63,7 @@ local funcmsg = "expected function or member name" -- pickfirstset() - picks the first non-nil value and returns it -local function pickfirstset(...) +local function pickfirstset(...) for i=1,select("#",...) do if select(i,...)~=nil then return select(i,...) @@ -120,7 +120,7 @@ local function callfunction(info, tab, methodtype, ...) info.arg = tab.arg info.option = tab info.type = tab.type - + if type(method)=="function" then return method(info, ...) else @@ -131,7 +131,7 @@ end -- do_final() - do the final step (set/execute) along with validation and confirmation local function do_final(info, inputpos, tab, methodtype, ...) - if info.validate then + if info.validate then local res = callmethod(info,inputpos,tab,"validate",...) if type(res)=="string" then usererr(info, inputpos, "'"..strsub(info.input, inputpos).."' - "..res) @@ -139,7 +139,7 @@ local function do_final(info, inputpos, tab, methodtype, ...) end end -- console ignores .confirm - + callmethod(info,inputpos,tab,methodtype, ...) end @@ -152,8 +152,8 @@ local function getparam(info, inputpos, tab, depth, paramname, types, errormsg) if val~=nil then if val==false then val=nil - elseif not types[type(val)] then - err(info, inputpos, "'" .. paramname.. "' - "..errormsg) + elseif not types[type(val)] then + err(info, inputpos, "'" .. paramname.. "' - "..errormsg) end info[paramname] = val info[paramname.."_at"] = depth @@ -166,13 +166,13 @@ end local dummytable={} local function iterateargs(tab) - if not tab.plugins then - return pairs(tab.args) + if not tab.plugins then + return pairs(tab.args) end - + local argtabkey,argtab=next(tab.plugins) local v - + return function(_, k) while argtab do k,v = next(argtab, k) @@ -206,18 +206,18 @@ local function showhelp(info, inputpos, tab, depth, noHead) if not noHead then print("|cff33ff99"..info.appName.."|r: Arguments to |cffffff78/"..info[0].."|r "..strsub(info.input,1,inputpos-1)..":") end - + local sortTbl = {} -- [1..n]=name local refTbl = {} -- [name]=tableref - + for k,v in iterateargs(tab) do if not refTbl[k] then -- a plugin overriding something in .args tinsert(sortTbl, k) refTbl[k] = v end end - - tsort(sortTbl, function(one, two) + + tsort(sortTbl, function(one, two) local o1 = refTbl[one].order or 100 local o2 = refTbl[two].order or 100 if type(o1) == "function" or type(o1) == "string" then @@ -240,7 +240,7 @@ local function showhelp(info, inputpos, tab, depth, noHead) if o1==o2 then return tostring(one)<tostring(two) end -- compare names return o1<o2 end) - + for i = 1, #sortTbl do local k = sortTbl[i] local v = refTbl[k] @@ -327,7 +327,7 @@ local function keybindingValidateFunc(text) return s end --- handle() - selfrecursing function that processes input->optiontable +-- handle() - selfrecursing function that processes input->optiontable -- - depth - starts at 0 -- - retfalse - return false rather than produce error if a match is not found (used by inlined groups) @@ -346,16 +346,16 @@ local function handle(info, inputpos, tab, depth, retfalse) local oldfunc,oldfunc_at = getparam(info,inputpos,tab,depth,"func",functypes,funcmsg) local oldvalidate,oldvalidate_at = getparam(info,inputpos,tab,depth,"validate",functypes,funcmsg) --local oldconfirm,oldconfirm_at = getparam(info,inputpos,tab,depth,"confirm",functypes,funcmsg) - + ------------------------------------------------------------------- -- Act according to .type of this table - + if tab.type=="group" then ------------ group -------------------------------------------- - + if type(tab.args)~="table" then err(info, inputpos) end if tab.plugins and type(tab.plugins)~="table" then err(info,inputpos) end - + -- grab next arg from input local _,nextpos,arg = (info.input):find(" *([^ ]+) *", inputpos) if not arg then @@ -363,11 +363,11 @@ local function handle(info, inputpos, tab, depth, retfalse) return end nextpos=nextpos+1 - + -- loop .args and try to find a key with a matching name for k,v in iterateargs(tab) do if not(type(k)=="string" and type(v)=="table" and type(v.type)=="string") then err(info,inputpos, "options table child '"..tostring(k).."' is malformed") end - + -- is this child an inline group? if so, traverse into it if v.type=="group" and pickfirstset(v.cmdInline, v.inline, false) then info[depth+1] = k @@ -383,8 +383,8 @@ local function handle(info, inputpos, tab, depth, retfalse) return handle(info,nextpos,v,depth+1) end end - - -- no match + + -- no match if retfalse then -- restore old infotable members and return false to indicate failure info.handler,info.handler_at = oldhandler,oldhandler_at @@ -395,23 +395,23 @@ local function handle(info, inputpos, tab, depth, retfalse) --info.confirm,info.confirm_at = oldconfirm,oldconfirm_at return false end - + -- couldn't find the command, display error usererr(info, inputpos, "'"..arg.."' - " .. L["unknown argument"]) return end - + local str = strsub(info.input,inputpos); - + if tab.type=="execute" then ------------ execute -------------------------------------------- do_final(info, inputpos, tab, "func") - - + + elseif tab.type=="input" then ------------ input -------------------------------------------- - + local res = true if tab.pattern then if not(type(tab.pattern)=="string") then err(info, inputpos, "'pattern' - expected a string") end @@ -420,11 +420,11 @@ local function handle(info, inputpos, tab, depth, retfalse) return end end - + do_final(info, inputpos, tab, "set", str) - - + + elseif tab.type=="toggle" then ------------ toggle -------------------------------------------- local b @@ -444,7 +444,7 @@ local function handle(info, inputpos, tab, depth, retfalse) else b = not b end - + elseif str==L["on"] then b = true elseif str==L["off"] then @@ -459,9 +459,9 @@ local function handle(info, inputpos, tab, depth, retfalse) end return end - + do_final(info, inputpos, tab, "set", b) - + elseif tab.type=="range" then ------------ range -------------------------------------------- @@ -481,21 +481,21 @@ local function handle(info, inputpos, tab, depth, retfalse) usererr(info, inputpos, val.." - "..format(L["must be equal to or lower than %s"], tostring(info.max)) ) return end - + do_final(info, inputpos, tab, "set", val) - + elseif tab.type=="select" then ------------ select ------------------------------------ local str = strtrim(strlower(str)) - + local values = tab.values if type(values) == "function" or type(values) == "string" then info.values = values values = callmethod(info, inputpos, tab, "values") info.values = nil end - + if str == "" then local b = callmethod(info, inputpos, tab, "get") local fmt = "|cffffff78- [%s]|r %s" @@ -512,7 +512,7 @@ local function handle(info, inputpos, tab, depth, retfalse) end local ok - for k,v in pairs(values) do + for k,v in pairs(values) do if strlower(k)==str then str = k -- overwrite with key (in case of case mismatches) ok = true @@ -523,20 +523,20 @@ local function handle(info, inputpos, tab, depth, retfalse) usererr(info, inputpos, "'"..str.."' - "..L["unknown selection"]) return end - + do_final(info, inputpos, tab, "set", str) - + elseif tab.type=="multiselect" then ------------ multiselect ------------------------------------------- local str = strtrim(strlower(str)) - + local values = tab.values if type(values) == "function" or type(values) == "string" then info.values = values values = callmethod(info, inputpos, tab, "values") info.values = nil end - + if str == "" then local fmt = "|cffffff78- [%s]|r %s" local fmt_sel = "|cffffff78- [%s]|r %s |cffff0000*|r" @@ -550,7 +550,7 @@ local function handle(info, inputpos, tab, depth, retfalse) end return end - + --build a table of the selections, checking that they exist --parse for =on =off =default in the process --table will be key = true for options that should toggle, key = [on|off|default] for options to be set @@ -559,25 +559,25 @@ local function handle(info, inputpos, tab, depth, retfalse) --parse option=on etc local opt, val = v:match('(.+)=(.+)') --get option if toggling - if not opt then - opt = v + if not opt then + opt = v end - + --check that the opt is valid local ok - for k,v in pairs(values) do + for k,v in pairs(values) do if strlower(k)==opt then opt = k -- overwrite with key (in case of case mismatches) ok = true break end end - + if not ok then usererr(info, inputpos, "'"..opt.."' - "..L["unknown selection"]) return end - + --check that if val was supplied it is valid if val then if val == L["on"] or val == L["off"] or (tab.tristate and val == L["default"]) then @@ -596,14 +596,14 @@ local function handle(info, inputpos, tab, depth, retfalse) sels[opt] = true end end - + for opt, val in pairs(sels) do local newval - + if (val == true) then --toggle the option local b = callmethod(info, inputpos, tab, "get", opt) - + if tab.tristate then --cycle in true, nil, false order if b then @@ -627,11 +627,11 @@ local function handle(info, inputpos, tab, depth, retfalse) newval = nil end end - + do_final(info, inputpos, tab, "set", opt, newval) end - - + + elseif tab.type=="color" then ------------ color -------------------------------------------- local str = strtrim(strlower(str)) @@ -639,16 +639,16 @@ local function handle(info, inputpos, tab, depth, retfalse) --TODO: Show current value return end - + local r, g, b, a - + local hasAlpha = tab.hasAlpha if type(hasAlpha) == "function" or type(hasAlpha) == "string" then info.hasAlpha = hasAlpha hasAlpha = callmethod(info, inputpos, tab, 'hasAlpha') info.hasAlpha = nil end - + if hasAlpha then if str:len() == 8 and str:find("^%x*$") then --parse a hex string @@ -662,7 +662,7 @@ local function handle(info, inputpos, tab, depth, retfalse) usererr(info, inputpos, format(L["'%s' - expected 'RRGGBBAA' or 'r g b a'."], str)) return end - + if r >= 0.0 and r <= 1.0 and g >= 0.0 and g <= 1.0 and b >= 0.0 and b <= 1.0 and a >= 0.0 and a <= 1.0 then --values are valid elseif r >= 0 and r <= 255 and g >= 0 and g <= 255 and b >= 0 and b <= 255 and a >= 0 and a <= 255 then @@ -701,7 +701,7 @@ local function handle(info, inputpos, tab, depth, retfalse) usererr(info, inputpos, format(L["'%s' - values must all be either in the range 0-1 or 0-255."], str)) end end - + do_final(info, inputpos, tab, "set", r,g,b,a) elseif tab.type=="keybinding" then @@ -737,7 +737,7 @@ end -- MyAddon = LibStub("AceAddon-3.0"):NewAddon("MyAddon", "AceConsole-3.0") -- -- Use AceConsole-3.0 to register a Chat Command -- MyAddon:RegisterChatCommand("mychat", "ChatCommand") --- +-- -- -- Show the GUI if no input is supplied, otherwise handle the chat input. -- function MyAddon:ChatCommand(input) -- -- Assuming "MyOptions" is the appName of a valid options table @@ -754,7 +754,7 @@ function AceConfigCmd:HandleCommand(slashcmd, appName, input) error([[Usage: HandleCommand("slashcmd", "appName", "input"): 'appName' - no options table "]]..tostring(appName)..[[" has been registered]], 2) end local options = assert( optgetter("cmd", MAJOR) ) - + local info = { -- Don't try to recycle this, it gets handed off to callbacks and whatnot [0] = slashcmd, appName = appName, @@ -765,7 +765,7 @@ function AceConfigCmd:HandleCommand(slashcmd, appName, input) uiType = "cmd", uiName = MAJOR, } - + handle(info, 1, options, 0) -- (info, inputpos, table, depth) end diff --git a/Libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua b/Libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua index d5cbc45..bcfe071 100644 --- a/Libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua +++ b/Libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua @@ -1,13 +1,13 @@ --- AceConfigDialog-3.0 generates AceGUI-3.0 based windows based on option tables. -- @class file -- @name AceConfigDialog-3.0 --- @release $Id: AceConfigDialog-3.0.lua 1197 2019-01-21 23:41:10Z nevcairiel $ +-- @release $Id: AceConfigDialog-3.0.lua 1212 2019-06-26 05:53:51Z nevcairiel $ local LibStub = LibStub local gui = LibStub("AceGUI-3.0") local reg = LibStub("AceConfigRegistry-3.0") -local MAJOR, MINOR = "AceConfigDialog-3.0", 69 +local MAJOR, MINOR = "AceConfigDialog-3.0", 73 local AceConfigDialog, oldminor = LibStub:NewLibrary(MAJOR, MINOR) if not AceConfigDialog then return end @@ -56,18 +56,18 @@ local width_multiplier = 170 --[[ Group Types Tree - All Descendant Groups will all become nodes on the tree, direct child options will appear above the tree - - Descendant Groups with inline=true and thier children will not become nodes + - Descendant Groups with inline=true and thier children will not become nodes Tab - Direct Child Groups will become tabs, direct child options will appear above the tab control - - Grandchild groups will default to inline unless specified otherwise + - Grandchild groups will default to inline unless specified otherwise Select- Same as Tab but with entries in a dropdown rather than tabs Inline Groups - - Will not become nodes of a select group, they will be effectivly part of thier parent group seperated by a border - - If declared on a direct child of a root node of a select group, they will appear above the group container control - - When a group is displayed inline, all descendants will also be inline members of the group + - Will not become nodes of a select group, they will be effectivly part of thier parent group seperated by a border + - If declared on a direct child of a root node of a select group, they will appear above the group container control + - When a group is displayed inline, all descendants will also be inline members of the group ]] @@ -168,11 +168,11 @@ local allIsLiteral = { local function GetOptionsMemberValue(membername, option, options, path, appName, ...) --get definition for the member local inherits = isInherited[membername] - + --get the member of the option, traversing the tree if it can be inherited local member - + if inherits then local group = options if group[membername] ~= nil then @@ -187,7 +187,7 @@ local function GetOptionsMemberValue(membername, option, options, path, appName, else member = option[membername] end - + --check if we need to call a functon, or if we have a literal value if ( not allIsLiteral[membername] ) and ( type(member) == "function" or ((not stringIsLiteral[membername]) and type(member) == "string") ) then --We have a function to call @@ -196,13 +196,13 @@ local function GetOptionsMemberValue(membername, option, options, path, appName, local handler local group = options handler = group.handler or handler - + for i = 1, #path do group = GetSubOption(group, path[i]) info[i] = path[i] handler = group.handler or handler end - + info.options = options info.appName = appName info[0] = appName @@ -212,8 +212,8 @@ local function GetOptionsMemberValue(membername, option, options, path, appName, info.type = option.type info.uiType = "dialog" info.uiName = MAJOR - - local a, b, c ,d + + local a, b, c ,d --using 4 returns for the get of a color type, increase if a type needs more if type(member) == "function" then --Call the function @@ -230,8 +230,8 @@ local function GetOptionsMemberValue(membername, option, options, path, appName, return a,b,c,d else --The value isnt a function to call, return it - return member - end + return member + end end --[[calls an options function that could be inherited, method name or function ref @@ -296,7 +296,7 @@ local function compareOptions(a,b) return NameA:upper() < NameB:upper() end if OrderA < 0 then - if OrderB > 0 then + if OrderB >= 0 then return false end else @@ -315,7 +315,7 @@ end local function BuildSortedOptionsTable(group, keySort, opts, options, path, appName) tempOrders = new() tempNames = new() - + if group.plugins then for plugin, t in pairs(group.plugins) do for k, v in pairs(t) do @@ -331,7 +331,7 @@ local function BuildSortedOptionsTable(group, keySort, opts, options, path, appN end end end - + for k, v in pairs(group.args) do if not opts[k] then tinsert(keySort, k) @@ -362,7 +362,7 @@ local function DelTree(tree) end local function CleanUserData(widget, event) - + local user = widget:GetUserDataTable() if user.path then @@ -402,7 +402,7 @@ end -- - Gets a status table for the given appname and options path. -- @param appName The application name as given to `:RegisterOptionsTable()` -- @param path The path to the options (a table with all group keys) --- @return +-- @return function AceConfigDialog:GetStatusTable(appName, path) local status = self.Status @@ -436,7 +436,7 @@ end function AceConfigDialog:SelectGroup(appName, ...) local path = new() - + local app = reg:GetOptionsTable(appName) if not app then error(("%s isn't registed with AceConfigRegistry, unable to open config"):format(appName), 2) @@ -448,9 +448,9 @@ function AceConfigDialog:SelectGroup(appName, ...) status.groups = {} end status = status.groups - local treevalue - local treestatus - + local treevalue + local treestatus + for n = 1, select("#",...) do local key = select(n, ...) @@ -477,12 +477,12 @@ function AceConfigDialog:SelectGroup(appName, ...) --the selected group will be overwritten if a child is the final target but still needs to be open treestatus.selected = treevalue treestatus.groups[treevalue] = true - + end - + --move to the next group in the path group = GetSubOption(group, key) - if not group then + if not group then break end tinsert(path, key) @@ -492,10 +492,10 @@ function AceConfigDialog:SelectGroup(appName, ...) end status = status.groups end - + del(path) reg:NotifyChange(appName) -end +end local function OptionOnMouseOver(widget, event) --show a tooltip/set the status bar to the desc text @@ -510,14 +510,14 @@ local function OptionOnMouseOver(widget, event) local desc = GetOptionsMemberValue("desc", opt, options, path, appName) local usage = GetOptionsMemberValue("usage", opt, options, path, appName) local descStyle = opt.descStyle - + if descStyle and descStyle ~= "tooltip" then return end - + GameTooltip:SetText(name, 1, .82, 0, true) - + if opt.type == "multiselect" then GameTooltip:AddLine(user.text, 0.5, 0.5, 0.8, true) - end + end if type(desc) == "string" then GameTooltip:AddLine(desc, 1, 1, 1, true) end @@ -675,7 +675,7 @@ local function ActivateControl(widget, event, ...) end end end - + local success if validated and option.type ~= "execute" then if type(validate) == "string" then @@ -690,7 +690,7 @@ local function ActivateControl(widget, event, ...) if not success then validated = false end end end - + local rootframe = user.rootframe if not validated or type(validated) == "string" then if not validated then @@ -715,7 +715,7 @@ local function ActivateControl(widget, event, ...) del(info) return true else - + local confirmText = option.confirmText --call confirm func/method if type(confirm) == "string" then @@ -756,10 +756,10 @@ local function ActivateControl(widget, event, ...) confirmText = confirmText.." - "..desc end end - + local iscustom = user.rootframe:GetUserData("iscustom") local rootframe - + if iscustom then rootframe = user.rootframe end @@ -796,7 +796,7 @@ local function ActivateControl(widget, event, ...) --full refresh of the frame, some controls dont cause this on all events if option.type == "color" then if event == "OnValueConfirmed" then - + if iscustom then AceConfigDialog:Open(user.appName, user.rootframe, unpack(basepath)) else @@ -1049,6 +1049,10 @@ local function CreateControl(userControlType, fallbackControlType) return control end +local function sortTblAsStrings(x,y) + return tostring(x) < tostring(y) -- Support numbers as keys +end + --[[ options - root of the options table being fed container - widget that controls will be placed in @@ -1079,7 +1083,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin else GroupContainer = gui:Create("SimpleGroup") end - + GroupContainer.width = "fill" GroupContainer:SetLayout("flow") container:AddChild(GroupContainer) @@ -1088,14 +1092,14 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin else --Control to feed local control - + local name = GetOptionsMemberValue("name", v, options, path, appName) - + if v.type == "execute" then - + local imageCoords = GetOptionsMemberValue("imageCoords",v, options, path, appName) local image, width, height = GetOptionsMemberValue("image",v, options, path, appName) - + local iconControl = type(image) == "string" or type(image) == "number" control = CreateControl(v.dialogControl or v.control, iconControl and "Icon" or "Button") if iconControl then @@ -1125,7 +1129,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin elseif v.type == "input" then control = CreateControl(v.dialogControl or v.control, v.multiline and "MultiLineEditBox" or "EditBox") - + if v.multiline and control.SetNumLines then control:SetNumLines(tonumber(v.multiline) or 4) end @@ -1144,15 +1148,15 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin local value = GetOptionsMemberValue("get",v, options, path, appName) control:SetValue(value) control:SetCallback("OnValueChanged",ActivateControl) - + if v.descStyle == "inline" then local desc = GetOptionsMemberValue("desc", v, options, path, appName) control:SetDescription(desc) end - + local image = GetOptionsMemberValue("image", v, options, path, appName) local imageCoords = GetOptionsMemberValue("imageCoords", v, options, path, appName) - + if type(image) == "string" or type(image) == "number" then if type(imageCoords) == "table" then control:SetImage(image, unpack(imageCoords)) @@ -1175,6 +1179,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin elseif v.type == "select" then local values = GetOptionsMemberValue("values", v, options, path, appName) + local sorting = GetOptionsMemberValue("sorting", v, options, path, appName) if v.style == "radio" then local disabled = CheckOptionDisabled(v, options, path, appName) local width = GetOptionsMemberValue("width",v,options,path,appName) @@ -1185,12 +1190,14 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin control:PauseLayout() local optionValue = GetOptionsMemberValue("get",v, options, path, appName) - local t = {} - for value, text in pairs(values) do - t[#t+1]=value + if not sorting then + sorting = {} + for value, text in pairs(values) do + sorting[#sorting+1]=value + end + tsort(sorting, sortTblAsStrings) end - tsort(t) - for k, value in ipairs(t) do + for k, value in ipairs(sorting) do local text = values[value] local radio = gui:Create("CheckBox") radio:SetLabel(text) @@ -1224,7 +1231,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin itemType = nil end control:SetLabel(name) - control:SetList(values, nil, itemType) + control:SetList(values, sorting, itemType) local value = GetOptionsMemberValue("get",v, options, path, appName) if not values[value] then value = nil @@ -1236,7 +1243,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin elseif v.type == "multiselect" then local values = GetOptionsMemberValue("values", v, options, path, appName) local disabled = CheckOptionDisabled(v, options, path, appName) - + local valuesort = new() if values then for value, text in pairs(values) do @@ -1244,7 +1251,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin end end tsort(valuesort) - + local controlType = v.dialogControl or v.control if controlType then control = gui:Create(controlType) @@ -1313,9 +1320,9 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin control:ResumeLayout() control:DoLayout() - + end - + del(valuesort) elseif v.type == "color" then @@ -1340,7 +1347,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin elseif v.type == "description" then control = CreateControl(v.dialogControl or v.control, "Label") control:SetText(name) - + local fontSize = GetOptionsMemberValue("fontSize",v, options, path, appName) if fontSize == "medium" then control:SetFontObject(GameFontHighlight) @@ -1349,10 +1356,10 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin else -- small or invalid control:SetFontObject(GameFontHighlightSmall) end - + local imageCoords = GetOptionsMemberValue("imageCoords",v, options, path, appName) local image, width, height = GetOptionsMemberValue("image",v, options, path, appName) - + if type(image) == "string" or type(image) == "number" then if not width then width = GetOptionsMemberValue("imageWidth",v, options, path, appName) @@ -1401,7 +1408,7 @@ local function FeedOptions(appName, options,container,rootframe,path,group,inlin InjectInfo(control, options, v, path, rootframe, appName) container:AddChild(control) end - + end end tremove(path) @@ -1426,7 +1433,7 @@ local function TreeOnButtonEnter(widget, event, uniquevalue, button) local option = user.option local path = user.path local appName = user.appName - + local feedpath = new() for i = 1, #path do feedpath[i] = path[i] @@ -1441,8 +1448,9 @@ local function TreeOnButtonEnter(widget, event, uniquevalue, button) local name = GetOptionsMemberValue("name", group, options, feedpath, appName) local desc = GetOptionsMemberValue("desc", group, options, feedpath, appName) - + GameTooltip:SetOwner(button, "ANCHOR_NONE") + GameTooltip:ClearAllPoints() if widget.type == "TabGroup" then GameTooltip:SetPoint("BOTTOM",button,"TOP") else @@ -1450,11 +1458,11 @@ local function TreeOnButtonEnter(widget, event, uniquevalue, button) end GameTooltip:SetText(name, 1, .82, 0, true) - + if type(desc) == "string" then GameTooltip:AddLine(desc, 1, 1, 1, true) end - + GameTooltip:Show() end @@ -1465,25 +1473,25 @@ end local function GroupExists(appName, options, path, uniquevalue) if not uniquevalue then return false end - + local feedpath = new() local temppath = new() for i = 1, #path do feedpath[i] = path[i] end - + BuildPath(feedpath, ("\001"):split(uniquevalue)) - + local group = options for i = 1, #feedpath do local v = feedpath[i] temppath[i] = v group = GetSubOption(group, v) - - if not group or group.type ~= "group" or CheckOptionHidden(group, options, temppath, appName) then + + if not group or group.type ~= "group" or CheckOptionHidden(group, options, temppath, appName) then del(feedpath) del(temppath) - return false + return false end end del(feedpath) @@ -1602,7 +1610,7 @@ function AceConfigDialog:FeedGroup(appName,options,container,rootframe,path, isR tab:SetCallback("OnGroupSelected", GroupSelected) tab:SetCallback("OnTabEnter", TreeOnButtonEnter) tab:SetCallback("OnTabLeave", TreeOnButtonLeave) - + local status = AceConfigDialog:GetStatusTable(appName, path) if not status.groups then status.groups = {} @@ -1622,7 +1630,7 @@ function AceConfigDialog:FeedGroup(appName,options,container,rootframe,path, isR break end end - + container:AddChild(tab) elseif grouptype == "select" then @@ -1645,7 +1653,7 @@ function AceConfigDialog:FeedGroup(appName,options,container,rootframe,path, isR if firstgroup then select:SetGroup((GroupExists(appName, options, path,status.groups.selected) and status.groups.selected) or firstgroup) end - + select.width = "fill" select.height = "fill" @@ -1657,14 +1665,14 @@ function AceConfigDialog:FeedGroup(appName,options,container,rootframe,path, isR local tree = gui:Create("TreeGroup") InjectInfo(tree, options, group, path, rootframe, appName) tree:EnableButtonTooltips(false) - + tree.width = "fill" tree.height = "fill" tree:SetCallback("OnGroupSelected", GroupSelected) tree:SetCallback("OnButtonEnter", TreeOnButtonEnter) tree:SetCallback("OnButtonLeave", TreeOnButtonLeave) - + local status = AceConfigDialog:GetStatusTable(appName, path) if not status.groups then status.groups = {} @@ -1705,7 +1713,7 @@ local function RefreshOnUpdate(this) end this.closing[appName] = nil end - + if this.closeAll then for k, v in pairs(AceConfigDialog.OpenFrames) do if not this.closeAllOverride[k] then @@ -1715,7 +1723,7 @@ local function RefreshOnUpdate(this) this.closeAll = nil wipe(this.closeAllOverride) end - + for appName in pairs(this.apps) do if AceConfigDialog.OpenFrames[appName] then local user = AceConfigDialog.OpenFrames[appName]:GetUserDataTable() @@ -1800,10 +1808,10 @@ function AceConfigDialog:Open(appName, container, ...) local options = app("dialog", MAJOR) local f - + local path = new() local name = GetOptionsMemberValue("name", options, options, path, appName) - + --If an optional path is specified add it to the path table before feeding the options --as container is optional as well it may contain the first element of the path if type(container) == "string" then @@ -1813,7 +1821,7 @@ function AceConfigDialog:Open(appName, container, ...) for n = 1, select("#",...) do tinsert(path, (select(n, ...))) end - + local option = options if type(container) == "table" and container.type == "BlizOptionsGroup" and #path > 0 then for i = 1, #path do @@ -1821,7 +1829,7 @@ function AceConfigDialog:Open(appName, container, ...) end name = format("%s - %s", name, GetOptionsMemberValue("name", option, options, path, appName)) end - + --if a container is given feed into that if container then f = container @@ -1915,19 +1923,19 @@ end -- @param name A descriptive name to display in the options tree (defaults to appName) -- @param parent The parent to use in the interface options tree. -- @param ... The path in the options table to feed into the interface options panel. --- @return The reference to the frame registered into the Interface Options. +-- @return The reference to the frame registered into the Interface Options. function AceConfigDialog:AddToBlizOptions(appName, name, parent, ...) local BlizOptions = AceConfigDialog.BlizOptions - + local key = appName for n = 1, select("#", ...) do key = key.."\001"..select(n, ...) end - + if not BlizOptions[appName] then BlizOptions[appName] = {} end - + if not BlizOptions[appName][key] then local group = gui:Create("BlizOptionsGroup") BlizOptions[appName][key] = group diff --git a/Libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua b/Libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua index 1e40811..f8d9225 100644 --- a/Libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua +++ b/Libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua @@ -4,14 +4,14 @@ -- * Valid **uiTypes**: "cmd", "dropdown", "dialog". This is verified by the library at call time. \\ -- * 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.\\ -- * The **appName** field is the options table name as given at registration time \\ --- +-- -- :IterateOptionsTables() (and :GetOptionsTable() if only given one argument) return a function reference that the requesting config handling addon must call with valid "uiType", "uiName". -- @class file -- @name AceConfigRegistry-3.0 --- @release $Id: AceConfigRegistry-3.0.lua 1193 2018-08-02 12:24:37Z funkydude $ +-- @release $Id: AceConfigRegistry-3.0.lua 1207 2019-06-23 12:08:33Z nevcairiel $ local CallbackHandler = LibStub("CallbackHandler-1.0") -local MAJOR, MINOR = "AceConfigRegistry-3.0", 18 +local MAJOR, MINOR = "AceConfigRegistry-3.0", 20 local AceConfigRegistry = LibStub:NewLibrary(MAJOR, MINOR) if not AceConfigRegistry then return end @@ -33,7 +33,7 @@ local error, assert = error, assert AceConfigRegistry.validated = { - -- list of options table names ran through :ValidateOptionsTable automatically. + -- list of options table names ran through :ValidateOptionsTable automatically. -- CLEARED ON PURPOSE, since newer versions may have newer validators cmd = {}, dropdown = {}, @@ -94,13 +94,20 @@ local basekeys={ } local typedkeys={ - header={}, + header={ + control=optstring, + dialogControl=optstring, + dropdownControl=optstring, + }, description={ image=optstringnumberfunc, imageCoords=optmethodtable, imageHeight=optnumber, imageWidth=optnumber, fontSize=optstringfunc, + control=optstring, + dialogControl=optstring, + dropdownControl=optstring, }, group={ args=istable, @@ -117,6 +124,9 @@ local typedkeys={ imageCoords=optmethodtable, imageHeight=optnumber, imageWidth=optnumber, + control=optstring, + dialogControl=optstring, + dropdownControl=optstring, }, input={ pattern=optstring, @@ -130,6 +140,9 @@ local typedkeys={ tristate=optbool, image=optstringnumberfunc, imageCoords=optmethodtable, + control=optstring, + dialogControl=optstring, + dropdownControl=optstring, }, tristate={ }, @@ -141,12 +154,16 @@ local typedkeys={ step=optnumber, bigStep=optnumber, isPercent=optbool, + control=optstring, + dialogControl=optstring, + dropdownControl=optstring, }, select={ values=ismethodtable, + sorting=optmethodtable, style={ - ["nil"]=true, - ["string"]={dropdown=true,radio=true}, + ["nil"]=true, + ["string"]={dropdown=true,radio=true}, _="string: 'dropdown' or 'radio'" }, control=optstring, @@ -164,9 +181,14 @@ local typedkeys={ }, color={ hasAlpha=optmethodbool, + control=optstring, + dialogControl=optstring, + dropdownControl=optstring, }, keybinding={ - -- TODO + control=optstring, + dialogControl=optstring, + dropdownControl=optstring, }, } @@ -203,13 +225,13 @@ local function validate(options,errlvl,...) if type(options.type)~="string" then err(".type: expected a string, got a "..type(options.type), errlvl,...) end - + -- get type and 'typedkeys' member local tk = typedkeys[options.type] if not tk then err(".type: unknown type '"..options.type.."'", errlvl,...) end - + -- make sure that all options[] are known parameters for k,v in pairs(options) do if not (tk[k] or basekeys[k]) then @@ -302,7 +324,7 @@ function AceConfigRegistry:RegisterOptionsTable(appName, options, skipValidation AceConfigRegistry:ValidateOptionsTable(options, appName, errlvl) -- upgradable AceConfigRegistry.validated[uiType][appName] = true end - return options + return options end elseif type(options)=="function" then AceConfigRegistry.tables[appName] = function(uiType, uiName, errlvl) @@ -340,7 +362,7 @@ function AceConfigRegistry:GetOptionsTable(appName, uiType, uiName) if not f then return nil end - + if uiType then return f(uiType,uiName,1) -- get the table for us else diff --git a/Libs/AceConsole-3.0/AceConsole-3.0.lua b/Libs/AceConsole-3.0/AceConsole-3.0.lua index 0567a65..678fa95 100644 --- a/Libs/AceConsole-3.0/AceConsole-3.0.lua +++ b/Libs/AceConsole-3.0/AceConsole-3.0.lua @@ -2,14 +2,14 @@ -- You can register slash commands to your custom functions and use the `GetArgs` function to parse them -- to your addons individual needs. -- --- **AceConsole-3.0** can be embeded into your addon, either explicitly by calling AceConsole:Embed(MyAddon) or by +-- **AceConsole-3.0** can be embeded into your addon, either explicitly by calling AceConsole:Embed(MyAddon) or by -- specifying it as an embeded library in your AceAddon. All functions will be available on your addon object -- and can be accessed directly, without having to explicitly call AceConsole itself.\\ -- It is recommended to embed AceConsole, otherwise you'll have to specify a custom `self` on all calls you -- make into AceConsole. -- @class file -- @name AceConsole-3.0 --- @release $Id: AceConsole-3.0.lua 1143 2016-07-11 08:52:03Z nevcairiel $ +-- @release $Id: AceConsole-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $ local MAJOR,MINOR = "AceConsole-3.0", 7 local AceConsole, oldminor = LibStub:NewLibrary(MAJOR, MINOR) @@ -84,11 +84,11 @@ end -- @param persist if false, the command will be soft disabled/enabled when aceconsole is used as a mixin (default: true) function AceConsole:RegisterChatCommand( command, func, persist ) if type(command)~="string" then error([[Usage: AceConsole:RegisterChatCommand( "command", func[, persist ]): 'command' - expected a string]], 2) end - + if persist==nil then persist=true end -- I'd rather have my addon's "/addon enable" around if the author screws up. Having some extra slash regged when it shouldnt be isn't as destructive. True is a better default. /Mikk - + local name = "ACECONSOLE_"..command:upper() - + if type( func ) == "string" then SlashCmdList[name] = function(input, editBox) self[func](self, input, editBox) @@ -132,9 +132,9 @@ local function nils(n, ...) return ... end end - ---- Retreive one or more space-separated arguments from a string. + +--- Retreive one or more space-separated arguments from a string. -- Treats quoted strings and itemlinks as non-spaced. -- @param str The raw argument string -- @param numargs How many arguments to get (default 1) @@ -144,7 +144,7 @@ end function AceConsole:GetArgs(str, numargs, startpos) numargs = numargs or 1 startpos = max(startpos or 1, 1) - + local pos=startpos -- find start of new arg @@ -169,24 +169,24 @@ function AceConsole:GetArgs(str, numargs, startpos) else delim_or_pipe="([| ])" end - + startpos = pos - + while true do -- find delimiter or hyperlink local ch,_ pos,_,ch = strfind(str, delim_or_pipe, pos) - + if not pos then break end - + if ch=="|" then -- some kind of escape - + if strsub(str,pos,pos+1)=="|H" then -- It's a |H....|hhyper link!|h pos=strfind(str, "|h", pos+2) -- first |h if not pos then break end - + pos=strfind(str, "|h", pos+2) -- second |h if not pos then break end elseif strsub(str,pos, pos+1) == "|T" then @@ -194,16 +194,16 @@ function AceConsole:GetArgs(str, numargs, startpos) pos=strfind(str, "|t", pos+2) if not pos then break end end - + pos=pos+2 -- skip past this escape (last |h if it was a hyperlink) - + else -- found delimiter, done with this arg return strsub(str, startpos, pos-1), AceConsole:GetArgs(str, numargs-1, pos+1) end - + end - + -- search aborted, we hit end of string. return it all as one argument. (yes, even if it's an unterminated quote or hyperlink) return strsub(str, startpos), nils(numargs-1, 1e9) end @@ -214,10 +214,10 @@ end local mixins = { "Print", "Printf", - "RegisterChatCommand", + "RegisterChatCommand", "UnregisterChatCommand", "GetArgs", -} +} -- Embeds AceConsole into the target object making the functions from the mixins list available on target:.. -- @param target target object to embed AceBucket in diff --git a/Libs/AceDBOptions-3.0/AceDBOptions-3.0.lua b/Libs/AceDBOptions-3.0/AceDBOptions-3.0.lua index 7477698..6ed3103 100644 --- a/Libs/AceDBOptions-3.0/AceDBOptions-3.0.lua +++ b/Libs/AceDBOptions-3.0/AceDBOptions-3.0.lua @@ -1,7 +1,7 @@ --- AceDBOptions-3.0 provides a universal AceConfig options screen for managing AceDB-3.0 profiles. -- @class file -- @name AceDBOptions-3.0 --- @release $Id: AceDBOptions-3.0.lua 1193 2018-08-02 12:24:37Z funkydude $ +-- @release $Id: AceDBOptions-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $ local ACEDBO_MAJOR, ACEDBO_MINOR = "AceDBOptions-3.0", 15 local AceDBOptions = LibStub:NewLibrary(ACEDBO_MAJOR, ACEDBO_MINOR) @@ -240,22 +240,22 @@ local tmpprofiles = {} -- @return Hashtable of all profiles with the internal name as keys and the display name as value. local function getProfileList(db, common, nocurrent) local profiles = {} - + -- copy existing profiles into the table local currentProfile = db:GetCurrentProfile() - for i,v in pairs(db:GetProfiles(tmpprofiles)) do - if not (nocurrent and v == currentProfile) then - profiles[v] = v - end + for i,v in pairs(db:GetProfiles(tmpprofiles)) do + if not (nocurrent and v == currentProfile) then + profiles[v] = v + end end - + -- add our default profiles to choose from ( or rename existing profiles) for k,v in pairs(defaultProfiles) do if (common or profiles[k]) and not (nocurrent and k == currentProfile) then profiles[k] = v end end - + return profiles end @@ -280,11 +280,11 @@ function OptionsHandlerPrototype:GetCurrentProfile() return self.db:GetCurrentProfile() end ---[[ +--[[ List all active profiles you can control the output with the .arg variable currently four modes are supported - + (empty) - return all available profiles "nocurrent" - returns all available profiles except the currently active profile "common" - returns all avaialble profiles + some commonly used profiles ("char - realm", "realm", "class", "Default") @@ -302,7 +302,7 @@ function OptionsHandlerPrototype:ListProfiles(info) else profiles = getProfileList(self.db) end - + return profiles end @@ -336,19 +336,19 @@ local function getOptionsHandler(db, noDefaultProfiles) if not defaultProfiles then generateDefaultProfiles(db) end - + local handler = AceDBOptions.handlers[db] or { db = db, noDefaultProfiles = noDefaultProfiles } - + for k,v in pairs(OptionsHandlerPrototype) do handler[k] = v end - + AceDBOptions.handlers[db] = handler return handler end --[[ - the real options table + the real options table ]] local optionsTable = { desc = { @@ -436,7 +436,7 @@ local optionsTable = { --- Get/Create a option table that you can use in your addon to control the profiles of AceDB-3.0. -- @param db The database object to create the options table for. -- @return The options table to be used in AceConfig-3.0 --- @usage +-- @usage -- -- Assuming `options` is your top-level options table and `self.db` is your database: -- options.args.profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(self.db) function AceDBOptions:GetOptionsTable(db, noDefaultProfiles) @@ -445,7 +445,7 @@ function AceDBOptions:GetOptionsTable(db, noDefaultProfiles) name = L["profiles"], desc = L["profiles_sub"], } - + tbl.handler = getOptionsHandler(db, noDefaultProfiles) tbl.args = optionsTable diff --git a/Libs/AceEvent-3.0/AceEvent-3.0.lua b/Libs/AceEvent-3.0/AceEvent-3.0.lua index bbf55c2..7ccd880 100644 --- a/Libs/AceEvent-3.0/AceEvent-3.0.lua +++ b/Libs/AceEvent-3.0/AceEvent-3.0.lua @@ -2,14 +2,14 @@ -- All dispatching is done using **CallbackHandler-1.0**. AceEvent is a simple wrapper around -- CallbackHandler, and dispatches all game events or addon message to the registrees. -- --- **AceEvent-3.0** can be embeded into your addon, either explicitly by calling AceEvent:Embed(MyAddon) or by +-- **AceEvent-3.0** can be embeded into your addon, either explicitly by calling AceEvent:Embed(MyAddon) or by -- specifying it as an embeded library in your AceAddon. All functions will be available on your addon object -- and can be accessed directly, without having to explicitly call AceEvent itself.\\ -- It is recommended to embed AceEvent, otherwise you'll have to specify a custom `self` on all calls you -- make into AceEvent. -- @class file -- @name AceEvent-3.0 --- @release $Id: AceEvent-3.0.lua 1161 2017-08-12 14:30:16Z funkydude $ +-- @release $Id: AceEvent-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $ local CallbackHandler = LibStub("CallbackHandler-1.0") local MAJOR, MINOR = "AceEvent-3.0", 4 @@ -25,22 +25,22 @@ AceEvent.embeds = AceEvent.embeds or {} -- what objects embed this lib -- APIs and registry for blizzard events, using CallbackHandler lib if not AceEvent.events then - AceEvent.events = CallbackHandler:New(AceEvent, + AceEvent.events = CallbackHandler:New(AceEvent, "RegisterEvent", "UnregisterEvent", "UnregisterAllEvents") end -function AceEvent.events:OnUsed(target, eventname) +function AceEvent.events:OnUsed(target, eventname) AceEvent.frame:RegisterEvent(eventname) end -function AceEvent.events:OnUnused(target, eventname) +function AceEvent.events:OnUnused(target, eventname) AceEvent.frame:UnregisterEvent(eventname) end -- APIs and registry for IPC messages, using CallbackHandler lib if not AceEvent.messages then - AceEvent.messages = CallbackHandler:New(AceEvent, + AceEvent.messages = CallbackHandler:New(AceEvent, "RegisterMessage", "UnregisterMessage", "UnregisterAllMessages" ) AceEvent.SendMessage = AceEvent.messages.Fire diff --git a/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets.toc b/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets.toc index 3644493..8592b88 100644 --- a/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets.toc +++ b/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets.toc @@ -1,19 +1,16 @@ -## Interface: 60200 -## X-Curse-Packaged-Version: r53 -## X-Curse-Project-Name: AceGUI-3.0-SharedMediaWidgets -## X-Curse-Project-ID: ace-gui-3-0-shared-media-widgets -## X-Curse-Repository-ID: wow/ace-gui-3-0-shared-media-widgets/mainline +## Interface: 80200 ## Title: Lib: AceGUI-3.0-SharedMediaWidgets ## Notes: Enables AceGUI-3.0 widgets for the 5 basic SharedMedia-3.0 types ## Author: Yssaril -## OptionalDeps: Ace3, LibSharedMedia-3.0, Libstub, CallbackHandler-1.0 +## OptionalDeps: Ace3, LibSharedMedia-3.0 ## X-Category: Library #@no-lib-strip@ -# Libs\Libstub\Libstub.lua -# Libs\CallbackHandler-1.0\CallbackHandler-1.0.xml -# Libs\AceGUI-3.0\AceGUI-3.0.xml +Libs\Libstub\Libstub.lua +Libs\CallbackHandler-1.0\CallbackHandler-1.0.xml +Libs\AceGUI-3.0\AceGUI-3.0.xml +Libs\LibSharedMedia-3.0\lib.xml #@end-no-lib-strip@ -widget.xml \ No newline at end of file +widget.xml diff --git a/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/BackgroundWidget.lua b/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/BackgroundWidget.lua index 0b75952..3bb45ed 100644 --- a/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/BackgroundWidget.lua +++ b/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/BackgroundWidget.lua @@ -8,7 +8,7 @@ local AGSMW = LibStub("AceGUISharedMediaWidgets-1.0") do local widgetType = "LSM30_Background" - local widgetVersion = 11 + local widgetVersion = 12 local contentFrameCache = {} local function ReturnSelf(self) diff --git a/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/BorderWidget.lua b/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/BorderWidget.lua index 0cd2959..2211a4c 100644 --- a/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/BorderWidget.lua +++ b/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/BorderWidget.lua @@ -8,7 +8,7 @@ local AGSMW = LibStub("AceGUISharedMediaWidgets-1.0") do local widgetType = "LSM30_Border" - local widgetVersion = 11 + local widgetVersion = 12 local contentFrameCache = {} local function ReturnSelf(self) diff --git a/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/FontWidget.lua b/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/FontWidget.lua index eadf35f..723b028 100644 --- a/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/FontWidget.lua +++ b/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/FontWidget.lua @@ -8,7 +8,7 @@ local AGSMW = LibStub("AceGUISharedMediaWidgets-1.0") do local widgetType = "LSM30_Font" - local widgetVersion = 11 + local widgetVersion = 12 local contentFrameCache = {} local function ReturnSelf(self) diff --git a/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/SoundWidget.lua b/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/SoundWidget.lua index 1d39c28..10c8aa4 100644 --- a/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/SoundWidget.lua +++ b/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/SoundWidget.lua @@ -8,7 +8,7 @@ local AGSMW = LibStub("AceGUISharedMediaWidgets-1.0") do local widgetType = "LSM30_Sound" - local widgetVersion = 11 + local widgetVersion = 12 local contentFrameCache = {} local function ReturnSelf(self) diff --git a/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/StatusbarWidget.lua b/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/StatusbarWidget.lua index 2d0e32c..824ce07 100644 --- a/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/StatusbarWidget.lua +++ b/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/StatusbarWidget.lua @@ -8,7 +8,7 @@ local AGSMW = LibStub("AceGUISharedMediaWidgets-1.0") do local widgetType = "LSM30_Statusbar" - local widgetVersion = 11 + local widgetVersion = 12 local contentFrameCache = {} local function ReturnSelf(self) diff --git a/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/prototypes.lua b/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/prototypes.lua index 1af9928..f77cfa0 100644 --- a/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/prototypes.lua +++ b/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/prototypes.lua @@ -1,17 +1,11 @@ -- Widget created by Yssaril ---[===[@debug@ -local DataVersion = 9001 -- dev version always overwrites everything else :) ---@end-debug@]===] ---@non-debug@ -local DataVersion = 53 ---@end-non-debug@ +local DataVersion = 9003 local AGSMW = LibStub:NewLibrary("AceGUISharedMediaWidgets-1.0", DataVersion) if not AGSMW then return -- already loaded and no upgrade necessary end -LoadAddOn("LibSharedMedia-3.0") local AceGUI = LibStub("AceGUI-3.0") local Media = LibStub("LibSharedMedia-3.0") @@ -183,14 +177,12 @@ do self:SetHeight(UIParent:GetHeight()*2/5) self.slider:Show() self:SetScript("OnMouseWheel", OnMouseWheel) - self.scrollframe:UpdateScrollChildRect() self.slider:SetMinMaxValues(0, self.contentframe:GetHeight()-self.scrollframe:GetHeight()) else self.scrollframe:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", -14, 12) self:SetHeight(self.contentframe:GetHeight()+25) self.slider:Hide() self:SetScript("OnMouseWheel", nil) - self.scrollframe:UpdateScrollChildRect() self.slider:SetMinMaxValues(0, 0) end self.contentframe:SetWidth(self.scrollframe:GetWidth()) diff --git a/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/widget.xml b/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/widget.xml index 15cd102..43c46a1 100644 --- a/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/widget.xml +++ b/Libs/AceGUI-3.0-SharedMediaWidgets/AceGUI-3.0-SharedMediaWidgets/widget.xml @@ -6,4 +6,4 @@ <Script file="StatusbarWidget.lua" /> <Script file="BorderWidget.lua" /> <Script file="BackgroundWidget.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Libs/AceGUI-3.0-SharedMediaWidgets/CHANGES.txt b/Libs/AceGUI-3.0-SharedMediaWidgets/CHANGES.txt new file mode 100644 index 0000000..d4c7d8b --- /dev/null +++ b/Libs/AceGUI-3.0-SharedMediaWidgets/CHANGES.txt @@ -0,0 +1,25 @@ +------------------------------------------------------------------------ +r60 | nevcairiel | 2019-06-14 23:53:41 +0000 (Fri, 14 Jun 2019) | 1 line +Changed paths: + M /trunk/AceGUI-3.0-SharedMediaWidgets.toc + +Update TOC +------------------------------------------------------------------------ +r59 | nevcairiel | 2019-06-14 23:53:15 +0000 (Fri, 14 Jun 2019) | 1 line +Changed paths: + M /trunk/AceGUI-3.0-SharedMediaWidgets/BackgroundWidget.lua + M /trunk/AceGUI-3.0-SharedMediaWidgets/BorderWidget.lua + M /trunk/AceGUI-3.0-SharedMediaWidgets/FontWidget.lua + M /trunk/AceGUI-3.0-SharedMediaWidgets/SoundWidget.lua + M /trunk/AceGUI-3.0-SharedMediaWidgets/StatusbarWidget.lua + M /trunk/AceGUI-3.0-SharedMediaWidgets/prototypes.lua + +Remove unnecessary UpdateScrollChildRect() calls. The Scroll Child is recomputed when needed automatically, and this improves performance significantly +------------------------------------------------------------------------ +r58 | nevcairiel | 2018-06-21 23:05:54 +0000 (Thu, 21 Jun 2018) | 1 line +Changed paths: + M /trunk/AceGUI-3.0-SharedMediaWidgets/prototypes.lua + +Hard code a version to avoid issues with the version being populated from the hosting repository +------------------------------------------------------------------------ + diff --git a/Libs/AceGUI-3.0-SharedMediaWidgets/R61 updated.txt b/Libs/AceGUI-3.0-SharedMediaWidgets/R61 updated.txt new file mode 100644 index 0000000..e69de29 diff --git a/Libs/AceGUI-3.0-SharedMediaWidgets/widget.xml b/Libs/AceGUI-3.0-SharedMediaWidgets/widget.xml index dd3eb2b..ecf2945 100644 --- a/Libs/AceGUI-3.0-SharedMediaWidgets/widget.xml +++ b/Libs/AceGUI-3.0-SharedMediaWidgets/widget.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Include file="AceGUI-3.0-SharedMediaWidgets\widget.xml" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Libs/AceGUI-3.0/AceGUI-3.0.lua b/Libs/AceGUI-3.0/AceGUI-3.0.lua index a31a85a..66a5529 100644 --- a/Libs/AceGUI-3.0/AceGUI-3.0.lua +++ b/Libs/AceGUI-3.0/AceGUI-3.0.lua @@ -1,6 +1,6 @@ --- **AceGUI-3.0** provides access to numerous widgets which can be used to create GUIs. -- AceGUI is used by AceConfigDialog to create the option GUIs, but you can use it by itself --- to create any custom GUI. There are more extensive examples in the test suite in the Ace3 +-- to create any custom GUI. There are more extensive examples in the test suite in the Ace3 -- stand-alone distribution. -- -- **Note**: When using AceGUI-3.0 directly, please do not modify the frames of the widgets directly, @@ -24,7 +24,7 @@ -- f:AddChild(btn) -- @class file -- @name AceGUI-3.0 --- @release $Id: AceGUI-3.0.lua 1193 2018-08-02 12:24:37Z funkydude $ +-- @release $Id: AceGUI-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $ local ACEGUI_MAJOR, ACEGUI_MINOR = "AceGUI-3.0", 36 local AceGUI, oldminor = LibStub:NewLibrary(ACEGUI_MAJOR, ACEGUI_MINOR) @@ -51,7 +51,7 @@ AceGUI.LayoutRegistry = AceGUI.LayoutRegistry or {} AceGUI.WidgetBase = AceGUI.WidgetBase or {} AceGUI.WidgetContainerBase = AceGUI.WidgetContainerBase or {} AceGUI.WidgetVersions = AceGUI.WidgetVersions or {} - + -- local upvalues local WidgetRegistry = AceGUI.WidgetRegistry local LayoutRegistry = AceGUI.LayoutRegistry @@ -79,7 +79,7 @@ do -- Internal Storage of the objects changed, from an array table -- to a hash table, and additionally we introduced versioning on -- the widgets which would discard all widgets from a pre-29 version - -- anyway, so we just clear the storage now, and don't try to + -- anyway, so we just clear the storage now, and don't try to -- convert the storage tables to the new format. -- This should generally not cause *many* widgets to end up in trash, -- since once dialogs are opened, all addons should be loaded already @@ -89,7 +89,7 @@ do if oldminor and oldminor < 29 and AceGUI.objPools then AceGUI.objPools = nil end - + AceGUI.objPools = AceGUI.objPools or {} local objPools = AceGUI.objPools --Returns a new instance, if none are available either returns a new table or calls the given contructor @@ -97,11 +97,11 @@ do if not WidgetRegistry[type] then error("Attempt to instantiate unknown widget type", 2) end - + if not objPools[type] then objPools[type] = {} end - + local newObj = next(objPools[type]) if not newObj then newObj = WidgetRegistry[type]() @@ -151,12 +151,12 @@ function AceGUI:Create(type) widget.OnAcquire = widget.Aquire widget.Aquire = nil end - + if rawget(widget, "Release") then - widget.OnRelease = rawget(widget, "Release") + widget.OnRelease = rawget(widget, "Release") widget.Release = nil end - + if widget.OnAcquire then widget:OnAcquire() else @@ -238,18 +238,18 @@ end --[[ Widgets must provide the following functions OnAcquire() - Called when the object is acquired, should set everything to a default hidden state - + And the following members frame - the frame or derivitive object that will be treated as the widget for size and anchoring purposes type - the type of the object, same as the name given to :RegisterWidget() - + Widgets contain a table called userdata, this is a safe place to store data associated with the wigdet It will be cleared automatically when a widget is released Placing values directly into a widget object should be avoided - + If the Widget can act as a container for other Widgets the following content - frame or derivitive that children will be anchored to - + The Widget can supply the following Optional Members :OnRelease() - Called when the object is Released, should remove any additional anchors and clear any data :OnWidthSet(width) - Called when the width of the widget is changed @@ -265,21 +265,21 @@ end -- Widget Base Template -- -------------------------- do - local WidgetBase = AceGUI.WidgetBase - + local WidgetBase = AceGUI.WidgetBase + WidgetBase.SetParent = function(self, parent) local frame = self.frame frame:SetParent(nil) frame:SetParent(parent.content) self.parent = parent end - + WidgetBase.SetCallback = function(self, name, func) if type(func) == "function" then self.events[name] = func end end - + WidgetBase.Fire = function(self, name, ...) if self.events[name] then local success, ret = safecall(self.events[name], self, name, ...) @@ -288,7 +288,7 @@ do end end end - + WidgetBase.SetWidth = function(self, width) self.frame:SetWidth(width) self.frame.width = width @@ -296,7 +296,7 @@ do self:OnWidthSet(width) end end - + WidgetBase.SetRelativeWidth = function(self, width) if width <= 0 or width > 1 then error(":SetRelativeWidth(width): Invalid relative width.", 2) @@ -304,7 +304,7 @@ do self.relWidth = width self.width = "relative" end - + WidgetBase.SetHeight = function(self, height) self.frame:SetHeight(height) self.frame.height = height @@ -312,7 +312,7 @@ do self:OnHeightSet(height) end end - + --[[ WidgetBase.SetRelativeHeight = function(self, height) if height <= 0 or height > 1 then error(":SetRelativeHeight(height): Invalid relative height.", 2) @@ -324,47 +324,47 @@ do WidgetBase.IsVisible = function(self) return self.frame:IsVisible() end - + WidgetBase.IsShown= function(self) return self.frame:IsShown() end - + WidgetBase.Release = function(self) AceGUI:Release(self) end - + WidgetBase.SetPoint = function(self, ...) return self.frame:SetPoint(...) end - + WidgetBase.ClearAllPoints = function(self) return self.frame:ClearAllPoints() end - + WidgetBase.GetNumPoints = function(self) return self.frame:GetNumPoints() end - + WidgetBase.GetPoint = function(self, ...) return self.frame:GetPoint(...) - end - + end + WidgetBase.GetUserDataTable = function(self) return self.userdata end - + WidgetBase.SetUserData = function(self, key, value) self.userdata[key] = value end - + WidgetBase.GetUserData = function(self, key) return self.userdata[key] end - + WidgetBase.IsFullHeight = function(self) return self.height == "fill" end - + WidgetBase.SetFullHeight = function(self, isFull) if isFull then self.height = "fill" @@ -372,11 +372,11 @@ do self.height = nil end end - + WidgetBase.IsFullWidth = function(self) return self.width == "fill" end - + WidgetBase.SetFullWidth = function(self, isFull) if isFull then self.width = "fill" @@ -384,29 +384,29 @@ do self.width = nil end end - + -- local function LayoutOnUpdate(this) -- this:SetScript("OnUpdate",nil) -- this.obj:PerformLayout() -- end - + local WidgetContainerBase = AceGUI.WidgetContainerBase - + WidgetContainerBase.PauseLayout = function(self) self.LayoutPaused = true end - + WidgetContainerBase.ResumeLayout = function(self) self.LayoutPaused = nil end - + WidgetContainerBase.PerformLayout = function(self) if self.LayoutPaused then return end safecall(self.LayoutFunc, self.content, self.children) end - + --call this function to layout, makes sure layed out objects get a frame to get sizes etc WidgetContainerBase.DoLayout = function(self) self:PerformLayout() @@ -414,7 +414,7 @@ do -- self.frame:SetScript("OnUpdate", LayoutOnUpdate) -- end end - + WidgetContainerBase.AddChild = function(self, child, beforeWidget) if beforeWidget then local siblingIndex = 1 @@ -422,7 +422,7 @@ do if widget == beforeWidget then break end - siblingIndex = siblingIndex + 1 + siblingIndex = siblingIndex + 1 end tinsert(self.children, siblingIndex, child) else @@ -432,7 +432,7 @@ do child.frame:Show() self:DoLayout() end - + WidgetContainerBase.AddChildren = function(self, ...) for i = 1, select("#", ...) do local child = select(i, ...) @@ -442,7 +442,7 @@ do end self:DoLayout() end - + WidgetContainerBase.ReleaseChildren = function(self) local children = self.children for i = 1,#children do @@ -450,7 +450,7 @@ do children[i] = nil end end - + WidgetContainerBase.SetLayout = function(self, Layout) self.LayoutFunc = AceGUI:GetLayout(Layout) end @@ -474,7 +474,7 @@ do end end end - + local function ContentResize(this) if this:GetWidth() and this:GetHeight() then this.width = this:GetWidth() @@ -486,7 +486,7 @@ do setmetatable(WidgetContainerBase, {__index=WidgetBase}) --One of these function should be called on each Widget Instance as part of its creation process - + --- Register a widget-class as a container for newly created widgets. -- @param widget The widget class function AceGUI:RegisterAsContainer(widget) @@ -502,7 +502,7 @@ do widget:SetLayout("List") return widget end - + --- Register a widget-class as a widget. -- @param widget The widget class function AceGUI:RegisterAsWidget(widget) @@ -529,11 +529,11 @@ end -- @param Version The version of the widget function AceGUI:RegisterWidgetType(Name, Constructor, Version) assert(type(Constructor) == "function") - assert(type(Version) == "number") - + assert(type(Version) == "number") + local oldVersion = WidgetVersions[Name] if oldVersion and oldVersion >= Version then return end - + WidgetVersions[Name] = Version WidgetRegistry[Name] = Constructor end @@ -602,7 +602,7 @@ AceGUI:RegisterLayout("List", local width = content.width or content:GetWidth() or 0 for i = 1, #children do local child = children[i] - + local frame = child.frame frame:ClearAllPoints() frame:Show() @@ -611,22 +611,22 @@ AceGUI:RegisterLayout("List", else frame:SetPoint("TOPLEFT", children[i-1].frame, "BOTTOMLEFT") end - + if child.width == "fill" then child:SetWidth(width) frame:SetPoint("RIGHT", content) - + if child.DoLayout then child:DoLayout() end elseif child.width == "relative" then child:SetWidth(width * child.relWidth) - + if child.DoLayout then child:DoLayout() end end - + height = height + (frame.height or frame:GetHeight() or 0) end safecall(content.obj.LayoutFinished, content.obj, nil, height) @@ -661,17 +661,17 @@ AceGUI:RegisterLayout("Flow", --height of the current row local rowheight = 0 local rowoffset = 0 - + local width = content.width or content:GetWidth() or 0 - + --control at the start of the row local rowstart local rowstartoffset local isfullheight - + local frameoffset local lastframeoffset - local oversize + local oversize for i = 1, #children do local child = children[i] oversize = nil @@ -679,17 +679,17 @@ AceGUI:RegisterLayout("Flow", local frameheight = frame.height or frame:GetHeight() or 0 local framewidth = frame.width or frame:GetWidth() or 0 lastframeoffset = frameoffset - -- HACK: Why did we set a frameoffset of (frameheight / 2) ? + -- HACK: Why did we set a frameoffset of (frameheight / 2) ? -- That was moving all widgets half the widgets size down, is that intended? -- Actually, it seems to be neccessary for many cases, we'll leave it in for now. -- If widgets seem to anchor weirdly with this, provide a valid alignoffset for them. -- TODO: Investigate moar! frameoffset = child.alignoffset or (frameheight / 2) - + if child.width == "relative" then framewidth = width * child.relWidth end - + frame:Show() frame:ClearAllPoints() if i == 1 then @@ -728,11 +728,11 @@ AceGUI:RegisterLayout("Flow", else --handles cases where the new height is higher than either control because of the offsets --math.max(rowheight-rowoffset+frameoffset, frameheight-frameoffset+rowoffset) - + --offset is always the larger of the two offsets rowoffset = math_max(rowoffset, frameoffset) rowheight = math_max(rowheight, rowoffset + (frameheight / 2)) - + frame:SetPoint("TOPLEFT", children[i-1].frame, "TOPRIGHT", 0, frameoffset - lastframeoffset) usedwidth = framewidth + usedwidth end @@ -741,11 +741,11 @@ AceGUI:RegisterLayout("Flow", if child.width == "fill" then safelayoutcall(child, "SetWidth", width) frame:SetPoint("RIGHT", content) - + usedwidth = 0 rowstart = frame rowstartoffset = frameoffset - + if child.DoLayout then child:DoLayout() end @@ -754,7 +754,7 @@ AceGUI:RegisterLayout("Flow", rowstartoffset = rowoffset elseif child.width == "relative" then safelayoutcall(child, "SetWidth", width * child.relWidth) - + if child.DoLayout then child:DoLayout() end @@ -763,20 +763,20 @@ AceGUI:RegisterLayout("Flow", frame:SetPoint("RIGHT", content) end end - + if child.height == "fill" then frame:SetPoint("BOTTOM", content) isfullheight = true end end - + --anchor the last row, if its full height needs a special case since its height has just been changed by the anchor if isfullheight then rowstart:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -height) elseif rowstart then rowstart:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -(height + (rowoffset - rowstartoffset) + 3)) end - + height = height + rowheight + 3 safecall(content.obj.LayoutFinished, content.obj, nil, height) end) @@ -840,7 +840,7 @@ AceGUI:RegisterLayout("Table", local spaceH = tableObj.spaceH or tableObj.space or 0 local spaceV = tableObj.spaceV or tableObj.space or 0 local totalH = (content:GetWidth() or content.width or 0) - spaceH * (#cols - 1) - + -- We need to reuse these because layout events can come in very frequently local layoutCache = obj:GetUserData("layoutCache") if not layoutCache then @@ -848,7 +848,7 @@ AceGUI:RegisterLayout("Table", obj:SetUserData("layoutCache", layoutCache) end local t, laneH, laneV, rowspans, rowStart, colStart = unpack(layoutCache) - + -- Create the grid local n, slotFound = 0 for i,child in ipairs(children) do @@ -913,7 +913,7 @@ AceGUI:RegisterLayout("Table", local f = child.frame f:ClearAllPoints() local childH = f:GetWidth() or 0 - + laneH[col] = max(laneH[col], childH - GetCellDimension("H", laneH, colStart[child], col - 1, spaceH)) end end @@ -947,7 +947,7 @@ AceGUI:RegisterLayout("Table", local cellObj = child:GetUserData("cell") local offsetH = GetCellDimension("H", laneH, 1, colStart[child] - 1, spaceH) + (colStart[child] == 1 and 0 or spaceH) local cellH = GetCellDimension("H", laneH, colStart[child], col, spaceH) - + local f = child.frame f:ClearAllPoints() local childH = f:GetWidth() or 0 @@ -957,7 +957,7 @@ AceGUI:RegisterLayout("Table", if child:IsFullWidth() or alignFn == "fill" or childH > cellH then f:SetPoint("RIGHT", content, "LEFT", offsetH + align + cellH, 0) end - + if child.DoLayout then child:DoLayout() end @@ -976,7 +976,7 @@ AceGUI:RegisterLayout("Table", local cellObj = child:GetUserData("cell") local offsetV = GetCellDimension("V", laneV, 1, rowStart[child] - 1, spaceV) + (rowStart[child] == 1 and 0 or spaceV) local cellV = GetCellDimension("V", laneV, rowStart[child], row, spaceV) - + local f = child.frame local childV = f:GetHeight() or 0 @@ -991,7 +991,7 @@ AceGUI:RegisterLayout("Table", -- Calculate total height local totalV = GetCellDimension("V", laneV, 1, #laneV, spaceV) - + -- Cleanup for _,v in pairs(layoutCache) do wipe(v) end diff --git a/Libs/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua b/Libs/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua index b0f81b7..4b09d64 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua @@ -150,7 +150,7 @@ local function Constructor() widget[method] = func end dropdown.parentgroup = widget - + return AceGUI:RegisterAsContainer(widget) end diff --git a/Libs/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua b/Libs/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua index eb8e215..d110d03 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua @@ -40,7 +40,7 @@ end Methods -------------------------------------------------------------------------------]] local methods = { - ["OnAcquire"] = function(self) + ["OnAcquire"] = function(self) self:SetScroll(0) self.scrollframe:SetScript("OnUpdate", FixScrollOnUpdate) end, @@ -77,7 +77,7 @@ local methods = { ["MoveScroll"] = function(self, value) local status = self.status or self.localstatus local height, viewheight = self.scrollframe:GetHeight(), self.content:GetHeight() - + if self.scrollBarShown then local diff = height - viewheight local delta = 1 diff --git a/Libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua b/Libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua index 9129f9d..053e27d 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua @@ -161,21 +161,21 @@ local methods = { self.tablist = tabs self:BuildTabs() end, - + ["BuildTabs"] = function(self) local hastitle = (self.titletext:GetText() and self.titletext:GetText() ~= "") local tablist = self.tablist local tabs = self.tabs - + if not tablist then return end - + local width = self.frame.width or self.frame:GetWidth() or 0 - + wipe(widths) wipe(rowwidths) wipe(rowends) - + --Place Text into tabs and get thier initial width for i, v in ipairs(tablist) do local tab = tabs[i] @@ -183,19 +183,19 @@ local methods = { tab = self:CreateTab(i) tabs[i] = tab end - + tab:Show() tab:SetText(v.text) tab:SetDisabled(v.disabled) tab.value = v.value - + widths[i] = tab:GetWidth() - 6 --tabs are anchored 10 pixels from the right side of the previous one to reduce spacing, but add a fixed 4px padding for the text end - + for i = (#tablist)+1, #tabs, 1 do tabs[i]:Hide() end - + --First pass, find the minimum number of rows needed to hold all tabs and the initial tab layout local numtabs = #tablist local numrows = 1 @@ -213,7 +213,7 @@ local methods = { end rowwidths[numrows] = usedwidth + 10 --first tab in each row takes up an extra 10px rowends[numrows] = #tablist - + --Fix for single tabs being left on the last row, move a tab from the row above if applicable if numrows > 1 then --if the last row has only one tab @@ -244,22 +244,22 @@ local methods = { tab:SetPoint("LEFT", tabs[tabno-1], "RIGHT", -10, 0) end end - + -- equal padding for each tab to fill the available width, -- if the used space is above 75% already - -- the 18 pixel is the typical width of a scrollbar, so we can have a tab group inside a scrolling frame, + -- the 18 pixel is the typical width of a scrollbar, so we can have a tab group inside a scrolling frame, -- and not have the tabs jump around funny when switching between tabs that need scrolling and those that don't local padding = 0 if not (numrows == 1 and rowwidths[1] < width*0.75 - 18) then padding = (width - rowwidths[row]) / (endtab - starttab+1) end - + for i = starttab, endtab do PanelTemplates_TabResize(tabs[i], padding + 4, nil, nil, width, tabs[i]:GetFontString():GetStringWidth()) end starttab = endtab + 1 end - + self.borderoffset = (hastitle and 17 or 10)+((numrows)*20) self.border:SetPoint("TOPLEFT", 1, -self.borderoffset) end, @@ -285,7 +285,7 @@ local methods = { content:SetHeight(contentheight) content.height = contentheight end, - + ["LayoutFinished"] = function(self, width, height) if self.noAutoHeight then return end self:SetHeight((height or 0) + (self.borderoffset + 23)) @@ -342,7 +342,7 @@ local function Constructor() for method, func in pairs(methods) do widget[method] = func end - + return AceGUI:RegisterAsContainer(widget) end diff --git a/Libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua b/Libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua index ba916d0..3558edd 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua @@ -2,7 +2,7 @@ TreeGroup Container Container that uses a tree control to switch between groups. -------------------------------------------------------------------------------]] -local Type, Version = "TreeGroup", 41 +local Type, Version = "TreeGroup", 42 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -36,7 +36,7 @@ do function del(t) for k in pairs(t) do t[k] = nil - end + end pool[t] = true end end @@ -66,7 +66,7 @@ local function UpdateButton(button, treeline, selected, canExpand, isExpanded) local value = treeline.value local uniquevalue = treeline.uniquevalue local disabled = treeline.disabled - + button.treeline = treeline button.value = value button.uniquevalue = uniquevalue @@ -87,7 +87,7 @@ local function UpdateButton(button, treeline, selected, canExpand, isExpanded) button:SetHighlightFontObject("GameFontHighlightSmall") button.text:SetPoint("LEFT", (icon and 16 or 0) + 8 * level, 2) end - + if disabled then button:EnableMouse(false) button.text:SetText("|cff808080"..text..FONT_COLOR_CODE_CLOSE) @@ -95,20 +95,20 @@ local function UpdateButton(button, treeline, selected, canExpand, isExpanded) button.text:SetText(text) button:EnableMouse(true) end - + if icon then button.icon:SetTexture(icon) button.icon:SetPoint("LEFT", 8 * level, (level == 1) and 0 or 1) else button.icon:SetTexture(nil) end - + if iconCoords then button.icon:SetTexCoord(unpack(iconCoords)) else button.icon:SetTexCoord(0, 1, 0, 1) end - + if canExpand then if not isExpanded then toggle:SetNormalTexture(130838) -- Interface\\Buttons\\UI-PlusButton-UP @@ -209,6 +209,7 @@ local function Button_OnEnter(frame) if self.enabletooltips then GameTooltip:SetOwner(frame, "ANCHOR_NONE") + GameTooltip:ClearAllPoints() GameTooltip:SetPoint("LEFT",frame,"RIGHT") GameTooltip:SetText(frame.text:GetText() or "", 1, .82, 0, true) @@ -275,10 +276,10 @@ local function Dragger_OnMouseUp(frame) treeframe:SetHeight(0) treeframe:SetPoint("TOPLEFT", frame, "TOPLEFT",0,0) treeframe:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT",0,0) - + local status = self.status or self.localstatus status.treewidth = treeframe:GetWidth() - + treeframe.obj:Fire("OnTreeResize",treeframe:GetWidth()) -- recalculate the content width treeframe.obj:OnWidthSet(status.fullwidth) @@ -363,8 +364,8 @@ local methods = { --sets the tree to be displayed ["SetTree"] = function(self, tree, filter) self.filter = filter - if tree then - assert(type(tree) == "table") + if tree then + assert(type(tree) == "table") end self.tree = tree self:RefreshTree() @@ -372,7 +373,7 @@ local methods = { ["BuildLevel"] = function(self, tree, level, parent) local groups = (self.status or self.localstatus).groups - + for i, v in ipairs(tree) do if v.children then if not self.filter or ShouldDisplayLevel(v.children) then @@ -409,7 +410,7 @@ local methods = { local tree = self.tree local treeframe = self.treeframe - + status.scrollToSelection = status.scrollToSelection or scrollToSelection -- needs to be cached in case the control hasn't been drawn yet (code bails out below) self:BuildLevel(tree, 1) @@ -426,7 +427,7 @@ local methods = { end local first, last - + scrollToSelection = status.scrollToSelection status.scrollToSelection = nil @@ -502,9 +503,9 @@ local methods = { button:Show() buttonnum = buttonnum + 1 end - + end, - + ["SetSelected"] = function(self, value) local status = self.status or self.localstatus if status.selected ~= value then @@ -554,16 +555,16 @@ local methods = { local treeframe = self.treeframe local status = self.status or self.localstatus status.fullwidth = width - + local contentwidth = width - status.treewidth - 20 if contentwidth < 0 then contentwidth = 0 end content:SetWidth(contentwidth) content.width = contentwidth - + local maxtreewidth = math_min(400, width - 50) - + if maxtreewidth > 100 and status.treewidth > maxtreewidth then self:SetTreeWidth(maxtreewidth, status.treesizable) end @@ -589,16 +590,16 @@ local methods = { treewidth = DEFAULT_TREE_WIDTH else resizable = false - treewidth = DEFAULT_TREE_WIDTH + treewidth = DEFAULT_TREE_WIDTH end end self.treeframe:SetWidth(treewidth) self.dragger:EnableMouse(resizable) - + local status = self.status or self.localstatus status.treewidth = treewidth status.treesizable = resizable - + -- recalculate the content width if status.fullwidth then self:OnWidthSet(status.fullwidth) diff --git a/Libs/AceGUI-3.0/widgets/AceGUIContainer-Window.lua b/Libs/AceGUI-3.0/widgets/AceGUIContainer-Window.lua index 9818e6d..2e28a3d 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIContainer-Window.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIContainer-Window.lua @@ -30,21 +30,21 @@ do local function frameOnClose(this) this.obj:Fire("OnClose") end - + local function closeOnClick(this) PlaySound(799) -- SOUNDKIT.GS_TITLE_OPTION_EXIT this.obj:Hide() end - + local function frameOnMouseDown(this) AceGUI:ClearFocus() end - + local function titleOnMouseDown(this) this:GetParent():StartMoving() AceGUI:ClearFocus() end - + local function frameOnMouseUp(this) local frame = this:GetParent() frame:StopMovingOrSizing() @@ -55,22 +55,22 @@ do status.top = frame:GetTop() status.left = frame:GetLeft() end - + local function sizerseOnMouseDown(this) this:GetParent():StartSizing("BOTTOMRIGHT") AceGUI:ClearFocus() end - + local function sizersOnMouseDown(this) this:GetParent():StartSizing("BOTTOM") AceGUI:ClearFocus() end - + local function sizereOnMouseDown(this) this:GetParent():StartSizing("RIGHT") AceGUI:ClearFocus() end - + local function sizerOnMouseUp(this) this:GetParent():StopMovingOrSizing() end @@ -78,19 +78,19 @@ do local function SetTitle(self,title) self.titletext:SetText(title) end - + local function SetStatusText(self,text) -- self.statustext:SetText(text) end - + local function Hide(self) self.frame:Hide() end - + local function Show(self) self.frame:Show() end - + local function OnAcquire(self) self.frame:SetParent(UIParent) self.frame:SetFrameStrata("FULLSCREEN_DIALOG") @@ -98,21 +98,21 @@ do self:EnableResize(true) self:Show() end - + local function OnRelease(self) self.status = nil for k in pairs(self.localstatus) do self.localstatus[k] = nil end end - + -- called to set an external table to store status in local function SetStatusTable(self, status) assert(type(status) == "table") self.status = status self:ApplyStatus() end - + local function ApplyStatus(self) local status = self.status or self.localstatus local frame = self.frame @@ -125,7 +125,7 @@ do frame:SetPoint("CENTER",UIParent,"CENTER") end end - + local function OnWidthSet(self, width) local content = self.content local contentwidth = width - 34 @@ -135,8 +135,8 @@ do content:SetWidth(contentwidth) content.width = contentwidth end - - + + local function OnHeightSet(self, height) local content = self.content local contentheight = height - 57 @@ -146,19 +146,19 @@ do content:SetHeight(contentheight) content.height = contentheight end - + local function EnableResize(self, state) local func = state and "Show" or "Hide" self.sizer_se[func](self.sizer_se) self.sizer_s[func](self.sizer_s) self.sizer_e[func](self.sizer_e) end - + local function Constructor() local frame = CreateFrame("Frame",nil,UIParent) local self = {} self.type = "Window" - + self.Hide = Hide self.Show = Show self.SetTitle = SetTitle @@ -170,9 +170,9 @@ do self.OnWidthSet = OnWidthSet self.OnHeightSet = OnHeightSet self.EnableResize = EnableResize - + self.localstatus = {} - + self.frame = frame frame.obj = self frame:SetWidth(700) @@ -183,7 +183,7 @@ do frame:SetResizable(true) frame:SetFrameStrata("FULLSCREEN_DIALOG") frame:SetScript("OnMouseDown", frameOnMouseDown) - + frame:SetScript("OnShow",frameOnShow) frame:SetScript("OnHide",frameOnClose) frame:SetMinResize(240,240) @@ -193,81 +193,81 @@ do titlebg:SetTexture(251966) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Title-Background titlebg:SetPoint("TOPLEFT", 9, -6) titlebg:SetPoint("BOTTOMRIGHT", frame, "TOPRIGHT", -28, -24) - + local dialogbg = frame:CreateTexture(nil, "BACKGROUND") dialogbg:SetTexture(137056) -- Interface\\Tooltips\\UI-Tooltip-Background dialogbg:SetPoint("TOPLEFT", 8, -24) dialogbg:SetPoint("BOTTOMRIGHT", -6, 8) dialogbg:SetVertexColor(0, 0, 0, .75) - + local topleft = frame:CreateTexture(nil, "BORDER") topleft:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border topleft:SetWidth(64) topleft:SetHeight(64) topleft:SetPoint("TOPLEFT") topleft:SetTexCoord(0.501953125, 0.625, 0, 1) - + local topright = frame:CreateTexture(nil, "BORDER") topright:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border topright:SetWidth(64) topright:SetHeight(64) topright:SetPoint("TOPRIGHT") topright:SetTexCoord(0.625, 0.75, 0, 1) - + local top = frame:CreateTexture(nil, "BORDER") top:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border top:SetHeight(64) top:SetPoint("TOPLEFT", topleft, "TOPRIGHT") top:SetPoint("TOPRIGHT", topright, "TOPLEFT") top:SetTexCoord(0.25, 0.369140625, 0, 1) - + local bottomleft = frame:CreateTexture(nil, "BORDER") bottomleft:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border bottomleft:SetWidth(64) bottomleft:SetHeight(64) bottomleft:SetPoint("BOTTOMLEFT") bottomleft:SetTexCoord(0.751953125, 0.875, 0, 1) - + local bottomright = frame:CreateTexture(nil, "BORDER") bottomright:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border bottomright:SetWidth(64) bottomright:SetHeight(64) bottomright:SetPoint("BOTTOMRIGHT") bottomright:SetTexCoord(0.875, 1, 0, 1) - + local bottom = frame:CreateTexture(nil, "BORDER") bottom:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border bottom:SetHeight(64) bottom:SetPoint("BOTTOMLEFT", bottomleft, "BOTTOMRIGHT") bottom:SetPoint("BOTTOMRIGHT", bottomright, "BOTTOMLEFT") bottom:SetTexCoord(0.376953125, 0.498046875, 0, 1) - + local left = frame:CreateTexture(nil, "BORDER") left:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border left:SetWidth(64) left:SetPoint("TOPLEFT", topleft, "BOTTOMLEFT") left:SetPoint("BOTTOMLEFT", bottomleft, "TOPLEFT") left:SetTexCoord(0.001953125, 0.125, 0, 1) - + local right = frame:CreateTexture(nil, "BORDER") right:SetTexture(251963) -- Interface\\PaperDollInfoFrame\\UI-GearManager-Border right:SetWidth(64) right:SetPoint("TOPRIGHT", topright, "BOTTOMRIGHT") right:SetPoint("BOTTOMRIGHT", bottomright, "TOPRIGHT") right:SetTexCoord(0.1171875, 0.2421875, 0, 1) - + local close = CreateFrame("Button", nil, frame, "UIPanelCloseButton") close:SetPoint("TOPRIGHT", 2, 1) close:SetScript("OnClick", closeOnClick) self.closebutton = close close.obj = self - + local titletext = frame:CreateFontString(nil, "ARTWORK") titletext:SetFontObject(GameFontNormal) titletext:SetPoint("TOPLEFT", 12, -8) titletext:SetPoint("TOPRIGHT", -32, -8) self.titletext = titletext - + local title = CreateFrame("Button", nil, frame) title:SetPoint("TOPLEFT", titlebg) title:SetPoint("BOTTOMRIGHT", titlebg) @@ -275,7 +275,7 @@ do title:SetScript("OnMouseDown",titleOnMouseDown) title:SetScript("OnMouseUp", frameOnMouseUp) self.title = title - + local sizer_se = CreateFrame("Frame",nil,frame) sizer_se:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",0,0) sizer_se:SetWidth(25) @@ -311,7 +311,7 @@ do sizer_s:SetScript("OnMouseDown",sizersOnMouseDown) sizer_s:SetScript("OnMouseUp", sizerOnMouseUp) self.sizer_s = sizer_s - + local sizer_e = CreateFrame("Frame",nil,frame) sizer_e:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",0,25) sizer_e:SetPoint("TOPRIGHT",frame,"TOPRIGHT",0,0) @@ -320,17 +320,17 @@ do sizer_e:SetScript("OnMouseDown",sizereOnMouseDown) sizer_e:SetScript("OnMouseUp", sizerOnMouseUp) self.sizer_e = sizer_e - + --Container Support local content = CreateFrame("Frame",nil,frame) self.content = content content.obj = self content:SetPoint("TOPLEFT",frame,"TOPLEFT",12,-32) content:SetPoint("BOTTOMRIGHT",frame,"BOTTOMRIGHT",-12,13) - + AceGUI:RegisterAsContainer(self) - return self + return self end - + AceGUI:RegisterWidgetType(Type,Constructor,Version) end diff --git a/Libs/AceGUI-3.0/widgets/AceGUIWidget-Button.lua b/Libs/AceGUI-3.0/widgets/AceGUIWidget-Button.lua index 0a23be4..0e286ca 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIWidget-Button.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIWidget-Button.lua @@ -51,7 +51,7 @@ local methods = { self:SetWidth(self.text:GetStringWidth() + 30) end end, - + ["SetAutoWidth"] = function(self, autoWidth) self.autoWidth = autoWidth if self.autoWidth then diff --git a/Libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua b/Libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua index be9ae81..53ef618 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua @@ -221,11 +221,11 @@ local methods = { self:SetHeight(24) end end, - + ["SetImage"] = function(self, path, ...) local image = self.image image:SetTexture(path) - + if image:GetTexture() then local n = select("#", ...) if n == 4 or n == 8 then diff --git a/Libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua b/Libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua index 4e911db..1101162 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua @@ -1,7 +1,7 @@ --[[----------------------------------------------------------------------------- ColorPicker Widget -------------------------------------------------------------------------------]] -local Type, Version = "ColorPicker", 24 +local Type, Version = "ColorPicker", 25 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end @@ -13,7 +13,7 @@ local CreateFrame, UIParent = CreateFrame, UIParent -- Global vars/functions that we don't upvalue since they might get hooked, or upgraded -- List them here for Mikk's FindGlobals script --- GLOBALS: ShowUIPanel, HideUIPanel, ColorPickerFrame, OpacitySliderFrame +-- GLOBALS: ColorPickerFrame, OpacitySliderFrame --[[----------------------------------------------------------------------------- Support functions @@ -47,7 +47,7 @@ local function Control_OnLeave(frame) end local function ColorSwatch_OnClick(frame) - HideUIPanel(ColorPickerFrame) + ColorPickerFrame:Hide() local self = frame.obj if not self.disabled then ColorPickerFrame:SetFrameStrata("FULLSCREEN_DIALOG") @@ -77,7 +77,7 @@ local function ColorSwatch_OnClick(frame) ColorCallback(self, r, g, b, a, true) end - ShowUIPanel(ColorPickerFrame) + ColorPickerFrame:Show() end AceGUI:ClearFocus() end diff --git a/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua b/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua index 549ce3e..7ae1401 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua @@ -1,4 +1,4 @@ ---[[ $Id: AceGUIWidget-DropDown-Items.lua 1192 2018-07-30 18:03:51Z funkydude $ ]]-- +--[[ $Id: AceGUIWidget-DropDown-Items.lua 1202 2019-05-15 23:11:22Z nevcairiel $ ]]-- local AceGUI = LibStub("AceGUI-3.0") @@ -33,7 +33,7 @@ end -- ItemBase is the base "class" for all dropdown items. -- Each item has to use ItemBase.Create(widgetType) to --- create an initial 'self' value. +-- create an initial 'self' value. -- ItemBase will add common functions and ui event handlers. -- Be sure to keep basic usage when you override functions. @@ -52,7 +52,7 @@ function ItemBase.Frame_OnEnter(this) self.highlight:Show() end self:Fire("OnEnter") - + if self.specialOnEnter then self.specialOnEnter(self) end @@ -60,10 +60,10 @@ end function ItemBase.Frame_OnLeave(this) local self = this.obj - + self.highlight:Hide() self:Fire("OnLeave") - + if self.specialOnLeave then self.specialOnLeave(self) end @@ -89,7 +89,7 @@ end -- Do not call this method directly function ItemBase.SetPullout(self, pullout) self.pullout = pullout - + self.frame:SetParent(nil) self.frame:SetParent(pullout.itemFrame) self.parent = pullout.itemFrame @@ -155,12 +155,12 @@ function ItemBase.Create(type) self.frame = frame frame.obj = self self.type = type - + self.useHighlight = true - + frame:SetHeight(17) frame:SetFrameStrata("FULLSCREEN_DIALOG") - + local text = frame:CreateFontString(nil,"OVERLAY","GameFontNormalSmall") text:SetTextColor(1,1,1) text:SetJustifyH("LEFT") @@ -178,7 +178,7 @@ function ItemBase.Create(type) highlight:Hide() self.highlight = highlight - local check = frame:CreateTexture("OVERLAY") + local check = frame:CreateTexture("OVERLAY") check:SetWidth(16) check:SetHeight(16) check:SetPoint("LEFT",frame,"LEFT",3,-1) @@ -192,26 +192,26 @@ function ItemBase.Create(type) sub:SetPoint("RIGHT",frame,"RIGHT",-3,-1) sub:SetTexture(130940) -- Interface\\ChatFrame\\ChatFrameExpandArrow sub:Hide() - self.sub = sub - + self.sub = sub + frame:SetScript("OnEnter", ItemBase.Frame_OnEnter) frame:SetScript("OnLeave", ItemBase.Frame_OnLeave) - + self.OnAcquire = ItemBase.OnAcquire self.OnRelease = ItemBase.OnRelease - + self.SetPullout = ItemBase.SetPullout self.GetText = ItemBase.GetText self.SetText = ItemBase.SetText self.SetDisabled = ItemBase.SetDisabled - + self.SetPoint = ItemBase.SetPoint self.Show = ItemBase.Show self.Hide = ItemBase.Hide - + self.SetOnLeave = ItemBase.SetOnLeave self.SetOnEnter = ItemBase.SetOnEnter - + return self end @@ -223,20 +223,20 @@ end --[[ Template for items: - + -- Item: -- do local widgetType = "Dropdown-Item-" local widgetVersion = 1 - + local function Constructor() local self = ItemBase.Create(widgetType) - + AceGUI:RegisterAsWidget(self) return self end - + AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version) end --]] @@ -247,25 +247,25 @@ end do local widgetType = "Dropdown-Item-Header" local widgetVersion = 1 - + local function OnEnter(this) local self = this.obj self:Fire("OnEnter") - + if self.specialOnEnter then self.specialOnEnter(self) end end - + local function OnLeave(this) local self = this.obj self:Fire("OnLeave") - + if self.specialOnLeave then self.specialOnLeave(self) end end - + -- exported, override local function SetDisabled(self, disabled) ItemBase.SetDisabled(self, disabled) @@ -273,21 +273,21 @@ do self.text:SetTextColor(1, 1, 0) end end - + local function Constructor() local self = ItemBase.Create(widgetType) - + self.SetDisabled = SetDisabled - + self.frame:SetScript("OnEnter", OnEnter) self.frame:SetScript("OnLeave", OnLeave) - + self.text:SetTextColor(1, 1, 0) - + AceGUI:RegisterAsWidget(self) return self end - + AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version) end @@ -296,7 +296,7 @@ end do local widgetType = "Dropdown-Item-Execute" local widgetVersion = 1 - + local function Frame_OnClick(this, button) local self = this.obj if self.disabled then return end @@ -305,16 +305,16 @@ do self.pullout:Close() end end - + local function Constructor() local self = ItemBase.Create(widgetType) - + self.frame:SetScript("OnClick", Frame_OnClick) - + AceGUI:RegisterAsWidget(self) return self end - + AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version) end @@ -324,7 +324,7 @@ end do local widgetType = "Dropdown-Item-Toggle" local widgetVersion = 4 - + local function UpdateToggle(self) if self.value then self.check:Show() @@ -332,12 +332,12 @@ do self.check:Hide() end end - + local function OnRelease(self) ItemBase.OnRelease(self) self:SetValue(nil) end - + local function Frame_OnClick(this, button) local self = this.obj if self.disabled then return end @@ -350,31 +350,31 @@ do UpdateToggle(self) self:Fire("OnValueChanged", self.value) end - + -- exported local function SetValue(self, value) self.value = value UpdateToggle(self) end - + -- exported local function GetValue(self) return self.value end - + local function Constructor() local self = ItemBase.Create(widgetType) - + self.frame:SetScript("OnClick", Frame_OnClick) - + self.SetValue = SetValue self.GetValue = GetValue self.OnRelease = OnRelease - + AceGUI:RegisterAsWidget(self) return self end - + AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version) end @@ -384,55 +384,55 @@ end do local widgetType = "Dropdown-Item-Menu" local widgetVersion = 2 - + local function OnEnter(this) local self = this.obj self:Fire("OnEnter") - + if self.specialOnEnter then self.specialOnEnter(self) end - + self.highlight:Show() - + if not self.disabled and self.submenu then self.submenu:Open("TOPLEFT", self.frame, "TOPRIGHT", self.pullout:GetRightBorderWidth(), 0, self.frame:GetFrameLevel() + 100) end end - + local function OnHide(this) local self = this.obj if self.submenu then self.submenu:Close() end end - + -- exported local function SetMenu(self, menu) assert(menu.type == "Dropdown-Pullout") self.submenu = menu end - + -- exported local function CloseMenu(self) self.submenu:Close() end - + local function Constructor() local self = ItemBase.Create(widgetType) - + self.sub:Show() - + self.frame:SetScript("OnEnter", OnEnter) self.frame:SetScript("OnHide", OnHide) - + self.SetMenu = SetMenu self.CloseMenu = CloseMenu - + AceGUI:RegisterAsWidget(self) return self end - + AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version) end @@ -441,31 +441,31 @@ end do local widgetType = "Dropdown-Item-Separator" local widgetVersion = 2 - + -- exported, override local function SetDisabled(self, disabled) ItemBase.SetDisabled(self, disabled) self.useHighlight = false end - + local function Constructor() local self = ItemBase.Create(widgetType) - + self.SetDisabled = SetDisabled - + local line = self.frame:CreateTexture(nil, "OVERLAY") line:SetHeight(1) line:SetColorTexture(.5, .5, .5) line:SetPoint("LEFT", self.frame, "LEFT", 10, 0) line:SetPoint("RIGHT", self.frame, "RIGHT", -10, 0) - + self.text:Hide() - + self.useHighlight = false - + AceGUI:RegisterAsWidget(self) return self end - + AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion + ItemBase.version) end diff --git a/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua b/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua index cf0b0aa..0d6308f 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua @@ -1,9 +1,9 @@ ---[[ $Id: AceGUIWidget-DropDown.lua 1167 2017-08-29 22:08:48Z funkydude $ ]]-- +--[[ $Id: AceGUIWidget-DropDown.lua 1209 2019-06-24 21:01:01Z nevcairiel $ ]]-- local AceGUI = LibStub("AceGUI-3.0") -- Lua APIs local min, max, floor = math.min, math.max, math.floor -local select, pairs, ipairs, type = select, pairs, ipairs, type +local select, pairs, ipairs, type, tostring = select, pairs, ipairs, type, tostring local tsort = table.sort -- WoW APIs @@ -40,9 +40,9 @@ end do local widgetType = "Dropdown-Pullout" local widgetVersion = 3 - + --[[ Static data ]]-- - + local backdrop = { bgFile = "Interface\\ChatFrame\\ChatFrameBackground", edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", @@ -60,9 +60,9 @@ do local defaultWidth = 200 local defaultMaxHeight = 600 - + --[[ UI Event Handlers ]]-- - + -- HACK: This should be no part of the pullout, but there -- is no other 'clean' way to response to any item-OnEnter -- Used to close Submenus when an other item is entered @@ -74,22 +74,22 @@ do end end end - + -- See the note in Constructor() for each scroll related function local function OnMouseWheel(this, value) this.obj:MoveScroll(value) end - + local function OnScrollValueChanged(this, value) this.obj:SetScroll(value) end - + local function OnSizeChanged(this) this.obj:FixScroll() end - + --[[ Exported methods ]]-- - + -- exported local function SetScroll(self, value) local status = self.scrollStatus @@ -106,9 +106,9 @@ do child:SetPoint("TOPLEFT", frame, "TOPLEFT", 0, offset) child:SetPoint("TOPRIGHT", frame, "TOPRIGHT", self.slider:IsShown() and -12 or 0, offset) status.offset = offset - status.scrollvalue = value + status.scrollvalue = value end - + -- exported local function MoveScroll(self, value) local status = self.scrollStatus @@ -127,7 +127,7 @@ do self.slider:SetValue(min(max(status.scrollvalue + delta*(1000/(diff/45)),0), 1000)) end end - + -- exported local function FixScroll(self) local status = self.scrollStatus @@ -140,7 +140,7 @@ do child:SetPoint("TOPRIGHT", frame, "TOPRIGHT", 0, offset) self.slider:SetValue(0) else - self.slider:Show() + self.slider:Show() local value = (offset / (viewheight - height) * 1000) if value > 1000 then value = 1000 end self.slider:SetValue(value) @@ -153,44 +153,44 @@ do end end end - + -- exported, AceGUI callback local function OnAcquire(self) self.frame:SetParent(UIParent) --self.itemFrame:SetToplevel(true) end - + -- exported, AceGUI callback local function OnRelease(self) self:Clear() self.frame:ClearAllPoints() self.frame:Hide() end - + -- exported local function AddItem(self, item) self.items[#self.items + 1] = item - + local h = #self.items * 16 self.itemFrame:SetHeight(h) self.frame:SetHeight(min(h + 34, self.maxHeight)) -- +34: 20 for scrollFrame placement (10 offset) and +14 for item placement - + item.frame:SetPoint("LEFT", self.itemFrame, "LEFT") item.frame:SetPoint("RIGHT", self.itemFrame, "RIGHT") - + item:SetPullout(self) item:SetOnEnter(OnEnter) end - + -- exported - local function Open(self, point, relFrame, relPoint, x, y) + local function Open(self, point, relFrame, relPoint, x, y) local items = self.items local frame = self.frame local itemFrame = self.itemFrame - + frame:SetPoint(point, relFrame, relPoint, x, y) - + local height = 8 for i, item in pairs(items) do if i == 1 then @@ -198,23 +198,23 @@ do else item:SetPoint("TOP", items[i-1].frame, "BOTTOM", 0, 1) end - + item:Show() - + height = height + 16 end itemFrame:SetHeight(height) fixstrata("TOOLTIP", frame, frame:GetChildren()) frame:Show() self:Fire("OnOpen") - end - + end + -- exported local function Close(self) self.frame:Hide() self:Fire("OnClose") - end - + end + -- exported local function Clear(self) local items = self.items @@ -222,18 +222,18 @@ do AceGUI:Release(item) items[i] = nil end - end - + end + -- exported local function IterateItems(self) return ipairs(self.items) end - + -- exported local function SetHideOnLeave(self, val) self.hideOnLeave = val end - + -- exported local function SetMaxHeight(self, height) self.maxHeight = height or defaultMaxHeight @@ -243,19 +243,19 @@ do self.frame:SetHeight(self.itemFrame:GetHeight() + 34) -- see :AddItem end end - + -- exported local function GetRightBorderWidth(self) return 6 + (self.slider:IsShown() and 12 or 0) end - + -- exported local function GetLeftBorderWidth(self) return 6 end - + --[[ Constructor ]]-- - + local function Constructor() local count = AceGUI:GetNextWidgetNum(widgetType) local frame = CreateFrame("Frame", "AceGUI30Pullout"..count, UIParent) @@ -264,7 +264,7 @@ do self.type = widgetType self.frame = frame frame.obj = self - + self.OnAcquire = OnAcquire self.OnRelease = OnRelease @@ -278,37 +278,37 @@ do self.SetScroll = SetScroll self.MoveScroll = MoveScroll self.FixScroll = FixScroll - + self.SetMaxHeight = SetMaxHeight self.GetRightBorderWidth = GetRightBorderWidth self.GetLeftBorderWidth = GetLeftBorderWidth - + self.items = {} - + self.scrollStatus = { scrollvalue = 0, } - + self.maxHeight = defaultMaxHeight - + frame:SetBackdrop(backdrop) frame:SetBackdropColor(0, 0, 0) frame:SetFrameStrata("FULLSCREEN_DIALOG") frame:SetClampedToScreen(true) frame:SetWidth(defaultWidth) - frame:SetHeight(self.maxHeight) + frame:SetHeight(self.maxHeight) --frame:SetToplevel(true) - + -- NOTE: The whole scroll frame code is copied from the AceGUI-3.0 widget ScrollFrame local scrollFrame = CreateFrame("ScrollFrame", nil, frame) local itemFrame = CreateFrame("Frame", nil, scrollFrame) - + self.scrollFrame = scrollFrame self.itemFrame = itemFrame - + scrollFrame.obj = self itemFrame.obj = self - + local slider = CreateFrame("Slider", "AceGUI30PulloutScrollbar"..count, scrollFrame) slider:SetOrientation("VERTICAL") slider:SetHitRectInsets(0, 0, -10, 0) @@ -318,7 +318,7 @@ do slider:SetFrameStrata("FULLSCREEN_DIALOG") self.slider = slider slider.obj = self - + scrollFrame:SetScrollChild(itemFrame) scrollFrame:SetPoint("TOPLEFT", frame, "TOPLEFT", 6, -12) scrollFrame:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -6, 12) @@ -327,46 +327,46 @@ do scrollFrame:SetScript("OnSizeChanged", OnSizeChanged) scrollFrame:SetToplevel(true) scrollFrame:SetFrameStrata("FULLSCREEN_DIALOG") - + itemFrame:SetPoint("TOPLEFT", scrollFrame, "TOPLEFT", 0, 0) itemFrame:SetPoint("TOPRIGHT", scrollFrame, "TOPRIGHT", -12, 0) itemFrame:SetHeight(400) itemFrame:SetToplevel(true) itemFrame:SetFrameStrata("FULLSCREEN_DIALOG") - + slider:SetPoint("TOPLEFT", scrollFrame, "TOPRIGHT", -16, 0) slider:SetPoint("BOTTOMLEFT", scrollFrame, "BOTTOMRIGHT", -16, 0) slider:SetScript("OnValueChanged", OnScrollValueChanged) slider:SetMinMaxValues(0, 1000) slider:SetValueStep(1) slider:SetValue(0) - + scrollFrame:Show() itemFrame:Show() slider:Hide() - + self:FixScroll() - + AceGUI:RegisterAsWidget(self) return self end - + AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion) end do local widgetType = "Dropdown" - local widgetVersion = 31 - + local widgetVersion = 34 + --[[ Static data ]]-- - + --[[ UI event handler ]]-- - + local function Control_OnEnter(this) this.obj.button:LockHighlight() this.obj:Fire("OnEnter") end - + local function Control_OnLeave(this) this.obj.button:UnlockHighlight() this.obj:Fire("OnLeave") @@ -378,7 +378,7 @@ do self.pullout:Close() end end - + local function Dropdown_TogglePullout(this) local self = this.obj PlaySound(856) -- SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON @@ -393,17 +393,17 @@ do AceGUI:SetFocus(self) end end - + local function OnPulloutOpen(this) local self = this.userdata.obj local value = self.value - + if not self.multiselect then for i, item in this:IterateItems() do item:SetValue(item.userdata.value == value) end end - + self.open = true self:Fire("OnOpened") end @@ -413,7 +413,7 @@ do self.open = nil self:Fire("OnClosed") end - + local function ShowMultiText(self) local text for i, widget in self.pullout:IterateItems() do @@ -429,10 +429,10 @@ do end self:SetText(text) end - + local function OnItemValueChanged(this, event, checked) local self = this.userdata.obj - + if self.multiselect then self:Fire("OnValueChanged", this.userdata.value, checked) ShowMultiText(self) @@ -443,14 +443,14 @@ do else this:SetValue(true) end - if self.open then + if self.open then self.pullout:Close() end end end - + --[[ Exported methods ]]-- - + -- exported, AceGUI callback local function OnAcquire(self) local pullout = AceGUI:Create("Dropdown-Pullout") @@ -460,13 +460,13 @@ do pullout:SetCallback("OnOpen", OnPulloutOpen) self.pullout.frame:SetFrameLevel(self.frame:GetFrameLevel() + 1) fixlevels(self.pullout.frame, self.pullout.frame:GetChildren()) - + self:SetHeight(44) self:SetWidth(200) self:SetLabel() self:SetPulloutWidth(nil) end - + -- exported, AceGUI callback local function OnRelease(self) if self.open then @@ -474,20 +474,20 @@ do end AceGUI:Release(self.pullout) self.pullout = nil - + self:SetText("") self:SetDisabled(false) self:SetMultiselect(false) - + self.value = nil self.list = nil self.open = nil self.hasClose = nil - + self.frame:ClearAllPoints() self.frame:Hide() end - + -- exported local function SetDisabled(self, disabled) self.disabled = disabled @@ -503,19 +503,19 @@ do self.text:SetTextColor(1,1,1) end end - + -- exported local function ClearFocus(self) if self.open then self.pullout:Close() end end - + -- exported local function SetText(self, text) self.text:SetText(text or "") end - + -- exported local function SetLabel(self, text) if text and text ~= "" then @@ -532,7 +532,7 @@ do self.alignoffset = 12 end end - + -- exported local function SetValue(self, value) if self.list then @@ -540,12 +540,12 @@ do end self.value = value end - + -- exported local function GetValue(self) return self.value end - + -- exported local function SetItemValue(self, item, value) if not self.multiselect then return end @@ -558,7 +558,7 @@ do end ShowMultiText(self) end - + -- exported local function SetItemDisabled(self, item, disabled) for i, widget in self.pullout:IterateItems() do @@ -567,7 +567,7 @@ do end end end - + local function AddListItem(self, value, text, itemType) if not itemType then itemType = "Dropdown-Item-Toggle" end local exists = AceGUI:GetWidgetVersion(itemType) @@ -580,7 +580,7 @@ do item:SetCallback("OnValueChanged", OnItemValueChanged) self.pullout:AddItem(item) end - + local function AddCloseButton(self) if not self.hasClose then local close = AceGUI:Create("Dropdown-Item-Execute") @@ -589,21 +589,29 @@ do self.hasClose = true end end - + -- exported local sortlist = {} + local function sortTbl(x,y) + local num1, num2 = tonumber(x), tonumber(y) + if num1 and num2 then -- numeric comparison, either two numbers or numeric strings + return num1 < num2 + else -- compare everything else tostring'ed + return tostring(x) < tostring(y) + end + end local function SetList(self, list, order, itemType) self.list = list self.pullout:Clear() self.hasClose = nil if not list then return end - + if type(order) ~= "table" then for v in pairs(list) do sortlist[#sortlist + 1] = v end - tsort(sortlist) - + tsort(sortlist, sortTbl) + for i, key in ipairs(sortlist) do AddListItem(self, key, list[key], itemType) sortlist[i] = nil @@ -618,7 +626,7 @@ do AddCloseButton(self) end end - + -- exported local function AddItem(self, value, text, itemType) if self.list then @@ -626,7 +634,7 @@ do AddListItem(self, value, text, itemType) end end - + -- exported local function SetMultiselect(self, multi) self.multiselect = multi @@ -635,23 +643,23 @@ do AddCloseButton(self) end end - + -- exported local function GetMultiselect(self) return self.multiselect end - + local function SetPulloutWidth(self, width) self.pulloutWidth = width end - + --[[ Constructor ]]-- - + local function Constructor() local count = AceGUI:GetNextWidgetNum(widgetType) local frame = CreateFrame("Frame", nil, UIParent) local dropdown = CreateFrame("Frame", "AceGUI30DropDown"..count, frame, "UIDropDownMenuTemplate") - + local self = {} self.type = widgetType self.frame = frame @@ -659,10 +667,10 @@ do self.count = count frame.obj = self dropdown.obj = self - + self.OnRelease = OnRelease self.OnAcquire = OnAcquire - + self.ClearFocus = ClearFocus self.SetText = SetText @@ -677,9 +685,9 @@ do self.SetItemValue = SetItemValue self.SetItemDisabled = SetItemDisabled self.SetPulloutWidth = SetPulloutWidth - + self.alignoffset = 26 - + frame:SetScript("OnHide",Dropdown_OnHide) dropdown:ClearAllPoints() @@ -690,10 +698,10 @@ do local left = _G[dropdown:GetName() .. "Left"] local middle = _G[dropdown:GetName() .. "Middle"] local right = _G[dropdown:GetName() .. "Right"] - + middle:ClearAllPoints() right:ClearAllPoints() - + middle:SetPoint("LEFT", left, "RIGHT", 0, 0) middle:SetPoint("RIGHT", right, "LEFT", 0, 0) right:SetPoint("TOPRIGHT", dropdown, "TOPRIGHT", 0, 17) @@ -704,7 +712,7 @@ do button:SetScript("OnEnter",Control_OnEnter) button:SetScript("OnLeave",Control_OnLeave) button:SetScript("OnClick",Dropdown_TogglePullout) - + local button_cover = CreateFrame("BUTTON",nil,self.frame) self.button_cover = button_cover button_cover.obj = self @@ -713,14 +721,14 @@ do button_cover:SetScript("OnEnter",Control_OnEnter) button_cover:SetScript("OnLeave",Control_OnLeave) button_cover:SetScript("OnClick",Dropdown_TogglePullout) - + local text = _G[dropdown:GetName() .. "Text"] self.text = text text.obj = self text:ClearAllPoints() text:SetPoint("RIGHT", right, "RIGHT" ,-43, 2) text:SetPoint("LEFT", left, "LEFT", 25, 2) - + local label = frame:CreateFontString(nil,"OVERLAY","GameFontNormalSmall") label:SetPoint("TOPLEFT",frame,"TOPLEFT",0,0) label:SetPoint("TOPRIGHT",frame,"TOPRIGHT",0,0) @@ -732,6 +740,6 @@ do AceGUI:RegisterAsWidget(self) return self end - + AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion) -end +end diff --git a/Libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua b/Libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua index bc3d02a..378e813 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua @@ -56,7 +56,7 @@ local methods = { ["SetImage"] = function(self, path, ...) local image = self.image image:SetTexture(path) - + if image:GetTexture() then local n = select("#", ...) if n == 4 or n == 8 then diff --git a/Libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua b/Libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua index 7a754f6..eec999e 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua @@ -57,12 +57,12 @@ local function UpdateImageAnchor(self) label:SetWidth(width) height = label:GetStringHeight() end - + -- avoid zero-height labels, since they can used as spacers if not height or height == 0 then height = 1 end - + self.resizing = true frame:SetHeight(height) frame.height = height @@ -113,7 +113,7 @@ local methods = { ["SetImage"] = function(self, path, ...) local image = self.image image:SetTexture(path) - + if image:GetTexture() then self.imageshown = true local n = select("#", ...) diff --git a/Libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua b/Libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua index 9af4b87..f702110 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua @@ -233,7 +233,7 @@ local methods = { end Layout(self) end, - + ["ClearFocus"] = function(self) self.editBox:ClearFocus() self.frame:SetScript("OnShow", nil) @@ -253,12 +253,12 @@ local methods = { ["GetCursorPosition"] = function(self) return self.editBox:GetCursorPosition() end, - + ["SetCursorPosition"] = function(self, ...) return self.editBox:SetCursorPosition(...) end, - - + + } --[[----------------------------------------------------------------------------- @@ -273,7 +273,7 @@ local backdrop = { local function Constructor() local frame = CreateFrame("Frame", nil, UIParent) frame:Hide() - + local widgetNum = AceGUI:GetNextWidgetNum(Type) local label = frame:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall") @@ -290,7 +290,7 @@ local function Constructor() button:SetText(ACCEPT) button:SetScript("OnClick", OnClick) button:Disable() - + local text = button:GetFontString() text:ClearAllPoints() text:SetPoint("TOPLEFT", button, "TOPLEFT", 5, -5) @@ -339,7 +339,7 @@ local function Constructor() editBox:SetScript("OnTextChanged", OnTextChanged) editBox:SetScript("OnTextSet", OnTextSet) editBox:SetScript("OnEditFocusGained", OnEditFocusGained) - + scrollFrame:SetScrollChild(editBox) diff --git a/Libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua b/Libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua index 5a81759..019c84e 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua @@ -105,7 +105,7 @@ local function EditBox_OnEnterPressed(frame) else value = tonumber(value) end - + if value then PlaySound(856) -- SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON self.slider:SetValue(value) diff --git a/Libs/AceHook-3.0/AceHook-3.0.lua b/Libs/AceHook-3.0/AceHook-3.0.lua index 8302334..d91c36f 100644 --- a/Libs/AceHook-3.0/AceHook-3.0.lua +++ b/Libs/AceHook-3.0/AceHook-3.0.lua @@ -2,14 +2,14 @@ -- Using AceHook-3.0 is recommended when you need to unhook your hooks again, so the hook chain isn't broken -- when you manually restore the original function. -- --- **AceHook-3.0** can be embeded into your addon, either explicitly by calling AceHook:Embed(MyAddon) or by +-- **AceHook-3.0** can be embeded into your addon, either explicitly by calling AceHook:Embed(MyAddon) or by -- specifying it as an embeded library in your AceAddon. All functions will be available on your addon object -- and can be accessed directly, without having to explicitly call AceHook itself.\\ -- It is recommended to embed AceHook, otherwise you'll have to specify a custom `self` on all calls you -- make into AceHook. -- @class file -- @name AceHook-3.0 --- @release $Id: AceHook-3.0.lua 1118 2014-10-12 08:21:54Z nevcairiel $ +-- @release $Id: AceHook-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $ local ACEHOOK_MAJOR, ACEHOOK_MINOR = "AceHook-3.0", 8 local AceHook, oldminor = LibStub:NewLibrary(ACEHOOK_MAJOR, ACEHOOK_MINOR) @@ -117,14 +117,14 @@ function donothing() end function hook(self, obj, method, handler, script, secure, raw, forceSecure, usage) if not handler then handler = method end - + -- These asserts make sure AceHooks's devs play by the rules. assert(not script or type(script) == "boolean") assert(not secure or type(secure) == "boolean") assert(not raw or type(raw) == "boolean") assert(not forceSecure or type(forceSecure) == "boolean") assert(usage) - + -- Error checking Battery! if obj and type(obj) ~= "table" then error(format("%s: 'object' - nil or table expected got %s", usage, type(obj)), 3) @@ -146,8 +146,8 @@ function hook(self, obj, method, handler, script, secure, raw, forceSecure, usag error(format("Cannot hook secure script %q; Use SecureHookScript(obj, method, [handler]) instead.", method), 3) end else - local issecure - if obj then + local issecure + if obj then issecure = onceSecure[obj] and onceSecure[obj][method] or issecurevariable(obj, method) else issecure = onceSecure[method] or issecurevariable(method) @@ -165,21 +165,21 @@ function hook(self, obj, method, handler, script, secure, raw, forceSecure, usag end end end - + local uid if obj then uid = registry[self][obj] and registry[self][obj][method] else uid = registry[self][method] end - + if uid then if actives[uid] then -- Only two sane choices exist here. We either a) error 100% of the time or b) always unhook and then hook -- choice b would likely lead to odd debuging conditions or other mysteries so we're going with a. error(format("Attempting to rehook already active hook %s.", method)) end - + if handlers[uid] == handler then -- turn on a decative hook, note enclosures break this ability, small memory leak actives[uid] = true return @@ -197,7 +197,7 @@ function hook(self, obj, method, handler, script, secure, raw, forceSecure, usag handlers[uid], actives[uid], scripts[uid] = nil, nil, nil uid = nil end - + local orig if script then orig = obj:GetScript(method) or donothing @@ -206,13 +206,13 @@ function hook(self, obj, method, handler, script, secure, raw, forceSecure, usag else orig = _G[method] end - + if not orig then error(format("%s: Attempting to hook a non existing target", usage), 3) end - + uid = createHook(self, handler, orig, secure, not (raw or secure)) - + if obj then self.hooks[obj] = self.hooks[obj] or {} registry[self][obj] = registry[self][obj] or {} @@ -221,7 +221,7 @@ function hook(self, obj, method, handler, script, secure, raw, forceSecure, usag if not secure then self.hooks[obj][method] = orig end - + if script then if not secure then obj:SetScript(method, uid) @@ -237,7 +237,7 @@ function hook(self, obj, method, handler, script, secure, raw, forceSecure, usag end else registry[self][method] = uid - + if not secure then _G[method] = uid self.hooks[method] = orig @@ -245,8 +245,8 @@ function hook(self, obj, method, handler, script, secure, raw, forceSecure, usag hooksecurefunc(method, uid) end end - - actives[uid], handlers[uid], scripts[uid] = true, handler, script and true or nil + + actives[uid], handlers[uid], scripts[uid] = true, handler, script and true or nil end --- Hook a function or a method on an object. @@ -262,7 +262,7 @@ end -- @usage -- -- create an addon with AceHook embeded -- MyAddon = LibStub("AceAddon-3.0"):NewAddon("HookDemo", "AceHook-3.0") --- +-- -- function MyAddon:OnEnable() -- -- Hook ActionButton_UpdateHotkeys, overwriting the secure status -- self:Hook("ActionButton_UpdateHotkeys", true) @@ -275,12 +275,12 @@ function AceHook:Hook(object, method, handler, hookSecure) if type(object) == "string" then method, handler, hookSecure, object = object, method, handler, nil end - + if handler == true then handler, hookSecure = nil, true end - hook(self, object, method, handler, false, false, false, hookSecure or false, "Usage: Hook([object], method, [handler], [hookSecure])") + hook(self, object, method, handler, false, false, false, hookSecure or false, "Usage: Hook([object], method, [handler], [hookSecure])") end --- RawHook a function or a method on an object. @@ -297,7 +297,7 @@ end -- @usage -- -- create an addon with AceHook embeded -- MyAddon = LibStub("AceAddon-3.0"):NewAddon("HookDemo", "AceHook-3.0") --- +-- -- function MyAddon:OnEnable() -- -- Hook ActionButton_UpdateHotkeys, overwriting the secure status -- self:RawHook("ActionButton_UpdateHotkeys", true) @@ -314,11 +314,11 @@ function AceHook:RawHook(object, method, handler, hookSecure) if type(object) == "string" then method, handler, hookSecure, object = object, method, handler, nil end - + if handler == true then handler, hookSecure = nil, true end - + hook(self, object, method, handler, false, false, true, hookSecure or false, "Usage: RawHook([object], method, [handler], [hookSecure])") end @@ -337,7 +337,7 @@ function AceHook:SecureHook(object, method, handler) if type(object) == "string" then method, handler, object = object, method, nil end - + hook(self, object, method, handler, false, true, false, false, "Usage: SecureHook([object], method, [handler])") end @@ -354,9 +354,9 @@ end -- @usage -- -- create an addon with AceHook embeded -- MyAddon = LibStub("AceAddon-3.0"):NewAddon("HookDemo", "AceHook-3.0") --- +-- -- function MyAddon:OnEnable() --- -- Hook the OnShow of FriendsFrame +-- -- Hook the OnShow of FriendsFrame -- self:HookScript(FriendsFrame, "OnShow", "FriendsFrameOnShow") -- end -- @@ -380,9 +380,9 @@ end -- @usage -- -- create an addon with AceHook embeded -- MyAddon = LibStub("AceAddon-3.0"):NewAddon("HookDemo", "AceHook-3.0") --- +-- -- function MyAddon:OnEnable() --- -- Hook the OnShow of FriendsFrame +-- -- Hook the OnShow of FriendsFrame -- self:RawHookScript(FriendsFrame, "OnShow", "FriendsFrameOnShow") -- end -- @@ -420,54 +420,54 @@ function AceHook:Unhook(obj, method) if type(obj) == "string" then method, obj = obj, nil end - + if obj and type(obj) ~= "table" then error(format("%s: 'obj' - expecting nil or table got %s", usage, type(obj)), 2) end if type(method) ~= "string" then error(format("%s: 'method' - expeting string got %s", usage, type(method)), 2) end - + local uid if obj then uid = registry[self][obj] and registry[self][obj][method] else uid = registry[self][method] end - + if not uid or not actives[uid] then -- Declining to error on an unneeded unhook since the end effect is the same and this would just be annoying. return false end - + actives[uid], handlers[uid] = nil, nil - + if obj then registry[self][obj][method] = nil registry[self][obj] = next(registry[self][obj]) and registry[self][obj] or nil - + -- if the hook reference doesnt exist, then its a secure hook, just bail out and dont do any unhooking if not self.hooks[obj] or not self.hooks[obj][method] then return true end - + if scripts[uid] and obj:GetScript(method) == uid then -- unhooks scripts - obj:SetScript(method, self.hooks[obj][method] ~= donothing and self.hooks[obj][method] or nil) + obj:SetScript(method, self.hooks[obj][method] ~= donothing and self.hooks[obj][method] or nil) scripts[uid] = nil elseif obj and self.hooks[obj] and self.hooks[obj][method] and obj[method] == uid then -- unhooks methods obj[method] = self.hooks[obj][method] end - + self.hooks[obj][method] = nil self.hooks[obj] = next(self.hooks[obj]) and self.hooks[obj] or nil else registry[self][method] = nil - + -- if self.hooks[method] doesn't exist, then this is a SecureHook, just bail out if not self.hooks[method] then return true end - + if self.hooks[method] and _G[method] == uid then -- unhooks functions _G[method] = self.hooks[method] end - + self.hooks[method] = nil end return true @@ -501,7 +501,7 @@ function AceHook:IsHooked(obj, method) return true, handlers[registry[self][obj][method]] end end - + return false, nil end diff --git a/Libs/AceSerializer-3.0/AceSerializer-3.0.lua b/Libs/AceSerializer-3.0/AceSerializer-3.0.lua index 0b19e08..2a4c5ef 100644 --- a/Libs/AceSerializer-3.0/AceSerializer-3.0.lua +++ b/Libs/AceSerializer-3.0/AceSerializer-3.0.lua @@ -1,16 +1,16 @@ --- **AceSerializer-3.0** can serialize any variable (except functions or userdata) into a string format, --- that can be send over the addon comm channel. AceSerializer was designed to keep all data intact, especially +-- that can be send over the addon comm channel. AceSerializer was designed to keep all data intact, especially -- very large numbers or floating point numbers, and table structures. The only caveat currently is, that multiple -- references to the same table will be send individually. -- --- **AceSerializer-3.0** can be embeded into your addon, either explicitly by calling AceSerializer:Embed(MyAddon) or by +-- **AceSerializer-3.0** can be embeded into your addon, either explicitly by calling AceSerializer:Embed(MyAddon) or by -- specifying it as an embeded library in your AceAddon. All functions will be available on your addon object -- and can be accessed directly, without having to explicitly call AceSerializer itself.\\ -- It is recommended to embed AceSerializer, otherwise you'll have to specify a custom `self` on all calls you -- make into AceSerializer. -- @class file -- @name AceSerializer-3.0 --- @release $Id: AceSerializer-3.0.lua 1135 2015-09-19 20:39:16Z nevcairiel $ +-- @release $Id: AceSerializer-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $ local MAJOR,MINOR = "AceSerializer-3.0", 5 local AceSerializer, oldminor = LibStub:NewLibrary(MAJOR, MINOR) @@ -40,7 +40,7 @@ local function SerializeStringHelper(ch) -- Used by SerializeValue for strings return "\126\122" elseif n<=32 then -- nonprint + space return "\126"..strchar(n+64) - elseif n==94 then -- value separator + elseif n==94 then -- value separator return "\126\125" elseif n==126 then -- our own escape character return "\126\124" @@ -54,12 +54,12 @@ end local function SerializeValue(v, res, nres) -- We use "^" as a value separator, followed by one byte for type indicator local t=type(v) - + if t=="string" then -- ^S = string (escaped to remove nonprints, "^"s, etc) res[nres+1] = "^S" res[nres+2] = gsub(v,"[%c \94\126\127]", SerializeStringHelper) nres=nres+2 - + elseif t=="number" then -- ^N = number (just tostring()ed) or ^F (float components) local str = tostring(v) if tonumber(str)==v --[[not in 4.3 or str==serNaN]] then @@ -79,7 +79,7 @@ local function SerializeValue(v, res, nres) res[nres+4] = tostring(e-53) -- adjust exponent to counteract mantissa manipulation nres=nres+4 end - + elseif t=="table" then -- ^T...^t = table (list of key,value pairs) nres=nres+1 res[nres] = "^T" @@ -89,7 +89,7 @@ local function SerializeValue(v, res, nres) end nres=nres+1 res[nres] = "^t" - + elseif t=="boolean" then -- ^B = true, ^b = false nres=nres+1 if v then @@ -97,15 +97,15 @@ local function SerializeValue(v, res, nres) else res[nres] = "^b" -- false end - + elseif t=="nil" then -- ^Z = nil (zero, "N" was taken :P) nres=nres+1 res[nres] = "^Z" - + else error(MAJOR..": Cannot serialize a value of type '"..t.."'") -- can't produce error on right level, this is wildly recursive end - + return nres end @@ -121,14 +121,14 @@ local serializeTbl = { "^1" } -- "^1" = Hi, I'm data serialized by AceSerializer -- @return The data in its serialized form (string) function AceSerializer:Serialize(...) local nres = 1 - + for i=1,select("#", ...) do local v = select(i, ...) nres = SerializeValue(v, serializeTbl, nres) end - + serializeTbl[nres+1] = "^^" -- "^^" = End of serialized data - + return tconcat(serializeTbl, "", 1, nres+1) end @@ -175,9 +175,9 @@ local function DeserializeValue(iter,single,ctl,data) ctl,data = iter() end - if not ctl then + if not ctl then error("Supplied data misses AceSerializer terminator ('^^')") - end + end if ctl=="^^" then -- ignore extraneous data @@ -185,7 +185,7 @@ local function DeserializeValue(iter,single,ctl,data) end local res - + if ctl=="^S" then res = gsub(data, "~.", DeserializeStringHelper) elseif ctl=="^N" then @@ -218,7 +218,7 @@ local function DeserializeValue(iter,single,ctl,data) ctl,data = iter() if ctl=="^t" then break end -- ignore ^t's data k = DeserializeValue(iter,true,ctl,data) - if k==nil then + if k==nil then error("Invalid AceSerializer table format (no table end marker)") end ctl,data = iter() @@ -231,7 +231,7 @@ local function DeserializeValue(iter,single,ctl,data) else error("Invalid AceSerializer control code '"..ctl.."'") end - + if not single then return res,DeserializeValue(iter) else diff --git a/Libs/AceTab-3.0/AceTab-3.0.lua b/Libs/AceTab-3.0/AceTab-3.0.lua index b7c64db..aa67ef8 100644 --- a/Libs/AceTab-3.0/AceTab-3.0.lua +++ b/Libs/AceTab-3.0/AceTab-3.0.lua @@ -2,7 +2,7 @@ -- Note: This library is not yet finalized. -- @class file -- @name AceTab-3.0 --- @release $Id: AceTab-3.0.lua 1148 2016-07-18 09:13:02Z nevcairiel $ +-- @release $Id: AceTab-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $ local ACETAB_MAJOR, ACETAB_MINOR = 'AceTab-3.0', 9 local AceTab, oldminor = LibStub:NewLibrary(ACETAB_MAJOR, ACETAB_MINOR) @@ -131,7 +131,7 @@ function AceTab:RegisterTabCompletion(descriptor, prematches, wordlist, usagefun elseif type(listenframes) ~= 'table' or type(listenframes[0]) == 'userdata' and type(listenframes.IsObjectType) == 'function' then -- single frame or framename listenframes = { listenframes } end - + -- Hook each registered listenframe and give it a matches table. for _, f in pairs(listenframes) do if type(f) == 'string' then @@ -148,7 +148,7 @@ function AceTab:RegisterTabCompletion(descriptor, prematches, wordlist, usagefun end end end - + -- Everything checks out; register this completion. if not registry[descriptor] then registry[descriptor] = { prematches = pmtable, wordlist = wordlist, usagefunc = usagefunc, listenframes = listenframes, postfunc = postfunc, pmoverwrite = pmoverwrite } @@ -358,7 +358,7 @@ function AceTab:OnTabPressed(this) firstPMLength = 0 hasNonFallback = false for i in pairs(pmolengths) do pmolengths[i] = nil end - + for desc in pairs(notfallbacks) do fillMatches(this, desc) end @@ -368,7 +368,7 @@ function AceTab:OnTabPressed(this) end end - if not firstMatch then + if not firstMatch then this.at3_last_precursor = "\0" return true end @@ -390,7 +390,7 @@ function AceTab:OnTabPressed(this) for desc, matches in pairs(this.at3matches) do -- Don't print usage statements for fallback completion groups if we have 'real' completion groups with matches. if hasNonFallback and fallbacks[desc] then break end - + -- Use the group's description as a heading for its usage statements. DEFAULT_CHAT_FRAME:AddMessage(desc..":") diff --git a/Libs/AceTimer-3.0/AceTimer-3.0.lua b/Libs/AceTimer-3.0/AceTimer-3.0.lua index 336864b..33b4da4 100644 --- a/Libs/AceTimer-3.0/AceTimer-3.0.lua +++ b/Libs/AceTimer-3.0/AceTimer-3.0.lua @@ -15,7 +15,7 @@ -- make into AceTimer. -- @class file -- @name AceTimer-3.0 --- @release $Id: AceTimer-3.0.lua 1170 2018-03-29 17:38:58Z funkydude $ +-- @release $Id: AceTimer-3.0.lua 1202 2019-05-15 23:11:22Z nevcairiel $ local MAJOR, MINOR = "AceTimer-3.0", 17 -- Bump minor on changes local AceTimer, oldminor = LibStub:NewLibrary(MAJOR, MINOR) @@ -47,7 +47,7 @@ local function new(self, loop, func, delay, ...) activeTimers[timer] = timer -- Create new timer closure to wrap the "timer" object - timer.callback = function() + timer.callback = function() if not timer.cancelled then if type(timer.func) == "string" then -- We manually set the unpack count to prevent issues with an arg set that contains nil and ends with nil diff --git a/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua b/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua index 675d7b0..a8377fe 100644 --- a/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua +++ b/Libs/CallbackHandler-1.0/CallbackHandler-1.0.lua @@ -1,5 +1,5 @@ ---[[ $Id: CallbackHandler-1.0.lua 1131 2015-06-04 07:29:24Z nevcairiel $ ]] -local MAJOR, MINOR = "CallbackHandler-1.0", 6 +--[[ $Id: CallbackHandler-1.0.lua 1186 2018-07-21 14:19:18Z nevcairiel $ ]] +local MAJOR, MINOR = "CallbackHandler-1.0", 7 local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR) if not CallbackHandler then return end -- No upgrade needed @@ -22,41 +22,15 @@ local function errorhandler(err) return geterrorhandler()(err) end -local function CreateDispatcher(argCount) - local code = [[ - local next, xpcall, eh = ... - - local method, ARGS - local function call() method(ARGS) end - - local function dispatch(handlers, ...) - local index - index, method = next(handlers) - if not method then return end - local OLD_ARGS = ARGS - ARGS = ... - repeat - xpcall(call, eh) - index, method = next(handlers, index) - until not method - ARGS = OLD_ARGS - end - - return dispatch - ]] - - local ARGS, OLD_ARGS = {}, {} - for i = 1, argCount do ARGS[i], OLD_ARGS[i] = "arg"..i, "old_arg"..i end - code = code:gsub("OLD_ARGS", tconcat(OLD_ARGS, ", ")):gsub("ARGS", tconcat(ARGS, ", ")) - return assert(loadstring(code, "safecall Dispatcher["..argCount.."]"))(next, xpcall, errorhandler) +local function Dispatch(handlers, ...) + local index, method = next(handlers) + if not method then return end + repeat + xpcall(method, errorhandler, ...) + index, method = next(handlers, index) + until not method end -local Dispatchers = setmetatable({}, {__index=function(self, argCount) - local dispatcher = CreateDispatcher(argCount) - rawset(self, argCount, dispatcher) - return dispatcher -end}) - -------------------------------------------------------------------------- -- CallbackHandler:New -- @@ -87,7 +61,7 @@ function CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAll local oldrecurse = registry.recurse registry.recurse = oldrecurse + 1 - Dispatchers[select('#', ...) + 1](events[eventname], eventname, ...) + Dispatch(events[eventname], eventname, ...) registry.recurse = oldrecurse diff --git a/Libs/Changelog-Ace3-Release-r1151.txt b/Libs/Changelog-Ace3-Release-r1151.txt deleted file mode 100644 index c78dc9d..0000000 --- a/Libs/Changelog-Ace3-Release-r1151.txt +++ /dev/null @@ -1,92 +0,0 @@ ------------------------------------------------------------------------- -r1151 | nevcairiel | 2016-07-18 17:03:29 +0000 (Mon, 18 Jul 2016) | 1 line -Changed paths: - A /tags/Release-r1151 (from /trunk:1150) - -Tag as Release-r1151 ------------------------------------------------------------------------- -r1150 | nevcairiel | 2016-07-18 17:02:20 +0000 (Mon, 18 Jul 2016) | 1 line -Changed paths: - M /trunk/changelog.txt - -Update changelog ------------------------------------------------------------------------- -r1149 | nevcairiel | 2016-07-18 17:02:10 +0000 (Mon, 18 Jul 2016) | 1 line -Changed paths: - M /trunk/Ace3.toc - -Update TOC for 7.0 ------------------------------------------------------------------------- -r1148 | nevcairiel | 2016-07-18 09:13:02 +0000 (Mon, 18 Jul 2016) | 1 line -Changed paths: - M /trunk/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua - M /trunk/AceTab-3.0/AceTab-3.0.lua - -Remove remaining compat code for ancient WoW versions ------------------------------------------------------------------------- -r1147 | nevcairiel | 2016-07-18 09:10:10 +0000 (Mon, 18 Jul 2016) | 1 line -Changed paths: - M /trunk/AceGUI-3.0/widgets/AceGUIWidget-Button.lua - M /trunk/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua - M /trunk/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua - -Remove pre-MoP compat code from AceGUI widgets ------------------------------------------------------------------------- -r1146 | nevcairiel | 2016-07-18 09:07:16 +0000 (Mon, 18 Jul 2016) | 1 line -Changed paths: - M /trunk/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua - -Fix global leak ------------------------------------------------------------------------- -r1145 | nevcairiel | 2016-07-18 08:32:42 +0000 (Mon, 18 Jul 2016) | 1 line -Changed paths: - M /trunk/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua - -AceGUI-3.0: Keybinding: Support mousewheel up/down bindings (Ticket #372) ------------------------------------------------------------------------- -r1144 | nevcairiel | 2016-07-11 09:04:48 +0000 (Mon, 11 Jul 2016) | 1 line -Changed paths: - M /trunk/changelog.txt - -Re-format changelog to be consistent with older entries ------------------------------------------------------------------------- -r1143 | nevcairiel | 2016-07-11 08:52:03 +0000 (Mon, 11 Jul 2016) | 1 line -Changed paths: - M /trunk/AceConsole-3.0/AceConsole-3.0.lua - -AceConsole-3.0: Fix a typo in the LuaDoc function signature ------------------------------------------------------------------------- -r1142 | nevcairiel | 2016-07-11 08:36:19 +0000 (Mon, 11 Jul 2016) | 1 line -Changed paths: - M /trunk/AceDB-3.0/AceDB-3.0.lua - -AceDB-3.0: Add the "locale" profile key to the LuaDoc (Ticket #344) ------------------------------------------------------------------------- -r1141 | nevcairiel | 2016-07-11 08:32:23 +0000 (Mon, 11 Jul 2016) | 1 line -Changed paths: - M /trunk/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua - M /trunk/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua - -AceGUI-3.0: Expose the HighlightText API for EditBox and MultiLineEditBox Widgets (Ticket #378) ------------------------------------------------------------------------- -r1140 | nevcairiel | 2016-07-03 07:53:29 +0000 (Sun, 03 Jul 2016) | 1 line -Changed paths: - M /trunk/AceDBOptions-3.0/AceDBOptions-3.0.lua - -AceDBOptions-3.0: Update localization from the WoWAce Localization system ------------------------------------------------------------------------- -r1139 | nevcairiel | 2016-07-03 07:43:51 +0000 (Sun, 03 Jul 2016) | 1 line -Changed paths: - M /trunk/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua - M /trunk/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua - -AceConfig-3.0: Allow specifying images using the numeric fileID (Ticket #389) ------------------------------------------------------------------------- -r1138 | nevcairiel | 2016-06-01 10:17:04 +0000 (Wed, 01 Jun 2016) | 3 lines -Changed paths: - M /trunk/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua - -AceGUI-3.0: TreeGroup: Refresh the tree in an OnUpdate once after Acquire, not only after creation - -The widget creation and acquire can be on different code paths, this ensures the tree height is always known and the tree populated properly. ------------------------------------------------------------------------- diff --git a/Libs/Changelog-Ace3-r1151.txt b/Libs/Changelog-Ace3-r1151.txt new file mode 100644 index 0000000..c78dc9d --- /dev/null +++ b/Libs/Changelog-Ace3-r1151.txt @@ -0,0 +1,92 @@ +------------------------------------------------------------------------ +r1151 | nevcairiel | 2016-07-18 17:03:29 +0000 (Mon, 18 Jul 2016) | 1 line +Changed paths: + A /tags/Release-r1151 (from /trunk:1150) + +Tag as Release-r1151 +------------------------------------------------------------------------ +r1150 | nevcairiel | 2016-07-18 17:02:20 +0000 (Mon, 18 Jul 2016) | 1 line +Changed paths: + M /trunk/changelog.txt + +Update changelog +------------------------------------------------------------------------ +r1149 | nevcairiel | 2016-07-18 17:02:10 +0000 (Mon, 18 Jul 2016) | 1 line +Changed paths: + M /trunk/Ace3.toc + +Update TOC for 7.0 +------------------------------------------------------------------------ +r1148 | nevcairiel | 2016-07-18 09:13:02 +0000 (Mon, 18 Jul 2016) | 1 line +Changed paths: + M /trunk/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua + M /trunk/AceTab-3.0/AceTab-3.0.lua + +Remove remaining compat code for ancient WoW versions +------------------------------------------------------------------------ +r1147 | nevcairiel | 2016-07-18 09:10:10 +0000 (Mon, 18 Jul 2016) | 1 line +Changed paths: + M /trunk/AceGUI-3.0/widgets/AceGUIWidget-Button.lua + M /trunk/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua + M /trunk/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua + +Remove pre-MoP compat code from AceGUI widgets +------------------------------------------------------------------------ +r1146 | nevcairiel | 2016-07-18 09:07:16 +0000 (Mon, 18 Jul 2016) | 1 line +Changed paths: + M /trunk/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua + +Fix global leak +------------------------------------------------------------------------ +r1145 | nevcairiel | 2016-07-18 08:32:42 +0000 (Mon, 18 Jul 2016) | 1 line +Changed paths: + M /trunk/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua + +AceGUI-3.0: Keybinding: Support mousewheel up/down bindings (Ticket #372) +------------------------------------------------------------------------ +r1144 | nevcairiel | 2016-07-11 09:04:48 +0000 (Mon, 11 Jul 2016) | 1 line +Changed paths: + M /trunk/changelog.txt + +Re-format changelog to be consistent with older entries +------------------------------------------------------------------------ +r1143 | nevcairiel | 2016-07-11 08:52:03 +0000 (Mon, 11 Jul 2016) | 1 line +Changed paths: + M /trunk/AceConsole-3.0/AceConsole-3.0.lua + +AceConsole-3.0: Fix a typo in the LuaDoc function signature +------------------------------------------------------------------------ +r1142 | nevcairiel | 2016-07-11 08:36:19 +0000 (Mon, 11 Jul 2016) | 1 line +Changed paths: + M /trunk/AceDB-3.0/AceDB-3.0.lua + +AceDB-3.0: Add the "locale" profile key to the LuaDoc (Ticket #344) +------------------------------------------------------------------------ +r1141 | nevcairiel | 2016-07-11 08:32:23 +0000 (Mon, 11 Jul 2016) | 1 line +Changed paths: + M /trunk/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua + M /trunk/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua + +AceGUI-3.0: Expose the HighlightText API for EditBox and MultiLineEditBox Widgets (Ticket #378) +------------------------------------------------------------------------ +r1140 | nevcairiel | 2016-07-03 07:53:29 +0000 (Sun, 03 Jul 2016) | 1 line +Changed paths: + M /trunk/AceDBOptions-3.0/AceDBOptions-3.0.lua + +AceDBOptions-3.0: Update localization from the WoWAce Localization system +------------------------------------------------------------------------ +r1139 | nevcairiel | 2016-07-03 07:43:51 +0000 (Sun, 03 Jul 2016) | 1 line +Changed paths: + M /trunk/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua + M /trunk/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua + +AceConfig-3.0: Allow specifying images using the numeric fileID (Ticket #389) +------------------------------------------------------------------------ +r1138 | nevcairiel | 2016-06-01 10:17:04 +0000 (Wed, 01 Jun 2016) | 3 lines +Changed paths: + M /trunk/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua + +AceGUI-3.0: TreeGroup: Refresh the tree in an OnUpdate once after Acquire, not only after creation + +The widget creation and acquire can be on different code paths, this ensures the tree height is always known and the tree populated properly. +------------------------------------------------------------------------ diff --git a/Libs/Changelog-Ace3-r1214.txt b/Libs/Changelog-Ace3-r1214.txt new file mode 100644 index 0000000..6c00e8c --- /dev/null +++ b/Libs/Changelog-Ace3-r1214.txt @@ -0,0 +1,417 @@ +Ace3 Release - Revision r1214 (June 26th, 2019) +----------------------------------------------- +- AceConfigDialog-3.0: Exposed "select" type sorting control through a new "sorting" config table member +- AceConfigDialog-3.0: Clear existing anchors on the GameTooltip before re-anchoring it for 8.2 compatibility +- AceConfigDialog-3.0: Improved options table sorting algorithm to produce a stable result in certain edge cases (Ticket #501) +- AceConfigRegistry-3.0: Added missing custom controls entries for all types added in the last release (Ticket #494) +- AceGUI-3.0: ColorPicker: Removed usage of Show/HideUIPanel for WoW 8.2 compatibiliy +- AceGUI-3.0: DropDown: Improved dropdown sorting algorithm to support tables with mixed string and numeric keys + +Ace3 Release - Revision r1200 (January 24th, 2019) +-------------------------------------------------- +- Cleanup for WoW 8.0 improvements +- AceGUI-3.0: Worked around various quirks in the WoW 8.0/8.1 API +- AceGUI-3.0: ColorPicker: Store references to the background/checkers textures (Ticket #473) +- AceConfigDialog-3.0: Allow custom controls for almost all option types (Ticket #475) + +Ace3 Release - Revision r1182 (July 17th, 2018) +----------------------------------------------- +- AceComm-3.0: Support numeric targets for custom channels (Ticket #419) +- AceComm-3.0/ChatThrottleLib: Updated for WoW 8.0 API changes +- AceConfig-3.0: Allow number values for the "width" parameter, which acts as a multiplier of the default width +- AceConfigDialog-3.0: Enable iconCoords for the main level of a tree group (Ticket #417) +- AceGUI-3.0: Implement a Table Layout (#442) +- AceGUI-3.0: EditBox: Only try to handle dragging if a valid object is being dragged into the text box +- AceGUI-3.0: Various fixes and work-arounds for WoW 8.0 changes + +Ace3 Release - Revision r1166 (August 29th, 2017) +------------------------------------------------- +- Updated any use of PlaySound to the new numeric constants (Fix for WoW 7.3) +- AceConfigDialog-3.0: implement fallback validation feedback in a StaticPopup (Ticket #2) + +Ace3 Release - Revision r1158 (March 28th, 2017) +------------------------------------------------ +- AceGUI-3.0: Fire OnShow events from Frame and Windows containers (Ticket #396) +- AceGUI-3.0: Add SetJustifyV/H API to the Label/InteractiveLabel widgets (Ticket #397) + +Ace3 Release - Revision r1151 (July 18th, 2016) +----------------------------------------------- +- AceConfig-3.0: Allow specifying images using the numeric fileID (Ticket #389) +- AceGUI-3.0: Use SetColorTexture in WoW 7.0 +- AceGUI-3.0: Expose the HighlightText API for EditBox and MultiLineEditBox Widgets (Ticket #378) +- AceGUI-3.0: Keybinding: Support MouseWheel Up/Down bindings (Ticket #372) +- AceGUI-3.0: TreeGroup: Refresh the tree in an OnUpdate once after Acquire, not only after creation (Fixes missing tree in WoW 7.0) +- AceSerializer-3.0: Create consistent tokens for infinity, independent of the clients platform + +Ace3 Release - Revision r1134 (June 23rd, 2015) +----------------------------------------------- +- AceGUI-3.0: TreeGroup: Prevent Word Wrap in tree elements + +Ace3 Release - Revision r1128 (February 24th, 2015) +--------------------------------------------------- +- AceGUI-3.0: Fixed an error in GameTooltip handling causing wrong formatting in some cases + +Ace3 Release - Revision r1122 (October 14th, 2014) +-------------------------------------------------- +- AceDB-3.0: Now using the GetCurrentRegion() API to determine region-based profile keys (fix for WoW 6.0) +- AceComm-3.0: Update ChatThrottleLib to v23 +- AceConfigDialog-3.0: Show a more meaningful title on Blizzard Options Groups (Ticket #353) +- AceGUI-3.0: ColorPicker: Frame Level is automatically increased to ensure the color picker frame is above the option panel +- AceGUI-3.0: DropDown: Properly disable all clickable areas when the dropdown is disabled (Ticket #360) +- AceHook-3.0: Always use HookScript when hooking scripts in a secure fashion (Ticket #338) +- AceTimer-3.0: New timer implementation based on C_Timer.After + +Ace3 Release - Revision r1109 (February 19th, 2014) +--------------------------------------------------- +- AceComm-3.0: Ambiguate addon comm messages to restore behavior to be identical to pre-5.4.7 +- AceConfigRegistry-3.0: Added an option to skip options table validation on registering + +Ace3 Release - Revision r1104 (October 31st, 2013) +-------------------------------------------------- +- AceGUI-3.0: Flow Layout: Added a safeguard to prevent an infinite loop in the layout engine +- AceGUI-3.0: DropDown: Adjust its style slightly to closer resemble the Blizzard DropDown Widget +- AceGUI-3.0: DropDown: API enhancements to specify the width of the pullout and be notified when its opened + +Ace3 Release - Revision r1098 (September 13th, 2013) +---------------------------------------------------- +- AceDB-3.0: Switch characters to the default profile if their active profile is deleted (Ticket #324) +- AceConfigDialog-3.0: Try to prevent static popup taint (Ticket #322) +- AceGUI-3.0: Button: Add a new "Auto Width" option (Ticket #310) +- AceGUI-3.0: DropDown: Make the entire DropDown widget clickable (Ticket #339) +- AceGUI-3.0: EditBox: Allow dragging macros to the editbox (which will then contain the macros name) (Ticket #337) +- AceGUI-3.0: Slider: Add a workaround for the broken slider steps in WoW 5.4 (Ticket #346) +- AceGUI-3.0: TreeGroup: Fix an issue introduced by 5.4 broken scrollbars (Ticket #345) +- AceHook-3.0: Allow hooking of AnimationGroup scripts (Ticket #314) + +Ace3 Release - Revision r1086 (May 21st, 2013) +---------------------------------------------- +- AceAddon-3.0: Improved behavior when loading modules during game startup, ensures proper loading order + +Ace3 Release - Revision r1083 (March 4th, 2013) +----------------------------------------------- +- AceTimer-3.0: Fixed an issue that caused the parameter list passed to the callback to be cut off at nil values +- AceGUI-3.0: InlineGroup: The title attribute is properly reset for recycled objects + +Ace3 Release - Revision r1078 (February 10th, 2013) +--------------------------------------------------- +- AceTimer-3.0: Re-write based on AnimationTimers +- AceHook-3.0: Improved checks/error messages when trying to hook a script on a "nil" frame +- AceDBOptions-3.0: Added Italian locale +- AceGUI-3.0: BlizOptionsGroup: Fixed the "default" button callback +- AceGUI-3.0: Colorpicker: The colorpicker is now clamped to the screen + +Ace3 Release - Revision r1061 (August 27th, 2012) +------------------------------------------------- +- AceConfigDialog-3.0: Try to avoid potential taints in static popup dialogs +- AceConfigDialog-3.0: Sort multiselects with "radio" style +- AceGUI-3.0: Support for WoW 5.0 +- AceGUI-3.0: MultiLineEditBox: Support shift-click'ing items/spells/etc. into the editbox +- AceGUI-3.0: Label: Fix text alignment (Ticket #301) +- AceGUI-3.0: Checkbox: Description text on a disable checkbox should look disabled (Ticket #304) +- AceGUI-3.0: Keybinding: Ensure the Keybinding popup is on the top level (Ticket #305) + +Ace3 Release - Revision r1041 (November 29th, 2011) +--------------------------------------------------- +- AceDB-3.0: Added locale and factionrealmregion profile keys +- AceSerializer-3.0: Removed support for NaN, as WoW 4.3 does no longer allow it. +- AceGUI-3.0: Frame: Add :EnableResize (Ticket #214) + +Ace3 Release - Revision r1032 (June 29th, 2011) +----------------------------------------------- +- AceTab-3.0: Improvements to Match handling (Ticket #255 and #256) +- AceGUI-3.0: DropDown layout fix with hidden labels (Ticket #234) + +Ace3 Release - Revision r1025 (April 27th, 2011) +------------------------------------------------ +- AceComm-3.0: Updated for 4.1 changes - now handles RegisterAddonMessagePrefix internally for you. +- AceGUI-3.0: TabGroup: Fixed width of tabs in 4.1(Ticket #243) + +Ace3 Release - Revision r1009 (February 9th, 2011) +-------------------------------------------------- +- AceLocale-3.0: Fix erronous assumption that the default locale is always the first to be registered for the :NewLocale() "silent" flag. The flag must now be set on the FIRST locale to be registered. +- AceLocale-3.0: The :NewLocale() "silent" flag may now be set to the string "raw", meaning nils are returned for unknown translations. +- AceGUI-3.0: Fix the disabled state of Icon widgets +- AceGUI-3.0: The header of the Frame widget now dynamically changes size to fit the text (Ticket #171) +- AceGUI-3.0: Its now possible to define a custom order the elements in a dropdown widget +- AceGUI-3.0: Improved widget focus behaviour across the board (Ticket #192, #193) +- AceGUI-3.0: Fixed a bug that made it impossible to block the tree widget from being user resizable (Ticket #163) +- AceGUI-3.0: Fixed a bug that caused TreeGroups to become unresponsive under certain conditions (Ticket #189, #202) +- AceGUI-3.0: Enhanced the DropDown widget to allow it to be reused more easily. +- AceConfigDialog-3.0: Select Groups now have the proper order in the dropdown (Ticket #184) +- AceConfigDialog-3.0: Implemented "radio" style select boxes (Ticket #149) + +Ace3 Release - Revision r981 (October 27th, 2010) +------------------------------------------------- +- AceAddon-3.0: Fixed a library upgrading issue +- AceAddon-3.0: Modules are now enabled in loading order +- AceGUI-3.0: Keybinding: The widget will no longer steal keybindings even when inactive (Ticket #169) +- AceGUI-3.0: EditBox: Fixed spell drag'n'drop + + +Ace3 Release - Revision r971 (October 12th, 2010) +------------------------------------------------- +- Small fixes and adjustments for the 4.0 Content Patch. +- AceGUI-3.0: ScrollFrame: Allow for a small margin of error when determining if the scroll bar should be shown. +- AceGUI-3.0: Added new widget APIs: GetText for EditBox and DisableButton for MultiLineEditBox + +Ace3 Release - Revision r960 (July 20th, 2010) +---------------------------------------------- +- AceGUI-3.0: Label: Reset Image Size and TexCoords on Acquire (Ticket #110) +- AceGUI-3.0: CheckBox: Re-apply the disabled state after setting a value, so the visuals are correct in either case. (Ticket #107) +- AceGUI-3.0: Icon: Fix the vertical size. It'll now properly scale with the image size, and not be fixed to about 110px. (Ticket #104) +- AceGUI-3.0: External Containers (Frame, Window) should always start in a visible state. (Ticket #121) +- AceGUI-3.0: Added Blizzard sounds to widgets (Ticket #120) +- AceGUI-3.0: CheckBox: check for self.desc:GetText() being nil as well as "" to prevent setting the wrong height on the checkbox causing bouncing checkboxes. +- AceGUI-3.0: Rewrite of the MultiLineEditBox (Ticket #68) +- AceGUI-3.0: CheckBox: Fix alignment of the text in OnMouseDown when an image is set. (Ticket #142) +- AceGUI-3.0: Add SetMaxLetters APIs to EB and MLEB (Ticket #135) +- AceGUI-3.0: Frame: Add events for OnEnter/OnLeave of the statusbar (Ticket #139) +- AceGUI-3.0: Major cleanups and refactoring in nearly all widgets and containers. +- AceConfigDialog-3.0: Always obey the min/max values on range-type widgets (Ticket #114) +- AceConfigDialog-3.0: Pass iconCoords set on groups in the options table to the tree widget (Ticket #111) +- AceConfigDialog-3.0: Implement "softMin" and "softMax", allowing for a UI-specific minimum/maximum for range controls, while allowing manual input of values in the old min/max range. (Ticket #123) +- AceConfigDialog-3.0: Don't close frames in CloseAll that are being opened after the CloseAll event was dispatched. (Ticket #132). +- AceSerializer-3.0: Fix encoding & decoding of \030. (Ticket #115) +- AceDB-3.0: Remove empty sections on logout, keeping the SV clean of more useless informations. +- AceDBOptions-3.0.lua: Fix a string typo (Ticket #141) + +Ace3 Release - Revision r907 (December 16th, 2009) +--------------------------------------------------- +- AceGUI-3.0: Frame: Properly save the width in the status table. +- AceConfigCmd-3.0: Properly handle help output of inline groups with a different handler. (Ticket #101) +- AceConfigDialog-3.0: Don't bail out and error when a dialogControl was invalid, instead show the error and fallback to the default control for that type. +- AceConfigDialog-3.0: Fix a hickup with the OnUpdate script not getting upgraded properly in some situations. + +Ace3 Release - Revision r900 (December 8th, 2009) +-------------------------------------------------- +- AceGUI-3.0: Alot of visual fixes regarding margins and general widget styles. +- AceGUI-3.0: Ability to accept links for EditBox Widget (Ticket #21) +- AceGUI-3.0: ScrollFrame: Hide the scrollbar when there is no overflowing content, and allow the Layout functions to use that space for widgets. +- AceGUI-3.0: DropDown: Added a GetValue() API to the Widget (Ticket #69) +- AceGUI-3.0: Button: Pass the arguments of the OnClick handler to the OnClick callback (Ticket #57) +- AceGUI-3.0: add a Window container, basically a plain window with close button +- AceGUI-3.0: Add support for inline descriptions to the checkbox widget. +- AceGUI-3.0: Added an API to the Window container to disable the user-resizing of the same. (Ticket #80) +- AceGUI-3.0: TreeGroup: Allow iconCoords to be passed for the tree elements. (Ticket #59) +- AceGUI-3.0: Slider: Add a more visible backdrop/border around the manual input area (Ticket #98, #46) +- AceGUI-3.0: Allow displaying a image in front of the checkbox label. (Ticket #82) +- AceConfig-3.0: Added an experimental "descStyle" member to all option table nodes that allows you to control the way the description is presented. + Supported values are "tooltip" for the old behaviour, and "inline" for a inline display of the description, pending support in AceGUI-3.0 widgets. +- AceConfigCmd-3.0: Properly parse functions and methods supplied for the "hidden" option table member. (Ticket #96) +- AceConfigDialog-3.0: Fix the unpacking of the basepath arguments when internally calling :Open (Ticket #90) +- AceConfigDialog-3.0: Properly refresh BlizOptions Windows which are registered with a path on NotifyChange. (Ticket #93) +- AceConfigDialog-3.0: Allow image/imageCoords on toogle elements (Note that the width/height of the image on the toggle cannot be changed) (Ticket #82) +- AceConfigDialog-3.0: Pass the groups "name" tag to DropDownGroups as the title. (Ticket #79) +- AceDB-3.0: Remove the metatable from the DB before removing defaults, so we don't accidentally invoke it in the process. (Ticket #66) +- AceDB-3.0: Don't save the profileKeys for namespaces, since we use the profile of the parent DB anyway. This will cut down on SV complexity when using alot of namespaces. +- AceDB-3.0: Don't fire the OnProfileReset callback when copying a profile. +- AceDBOptions-3.0: Show the current profile on the dialog. (Ticket #56) +- AceComm-3.0: Add callbacks for message chunks going out the wire (via CTL). Useful for displaying progress for very large messages. +- AceConsole-3.0: Add :Printf() so you don't have to do Print(format()) + +Ace3 Beta - Revision 820 (August 7th, 2009) +-------------------------------------------- +- AceComm-3.0: Updated ChatThrottleLib to v21 +- AceGUI-3.0: Fixed a glitch in the TabGroup code that caused tabs to be unresponsive under rare conditions. (Ticket #38) +- AceGUI-3.0: Consistent "disabled" behaviour of all widgets. (Ticket #47) +- AceGUI-3.0: Changed the way widgets are handled on release to avoid a crash in the game client. (Ticket #49) +- AceGUI-3.0: Fixed a glitch in the button graphics. (Ticket #58) +- AceGUI-3.0: Localized the "Close" Text on the Frame widget. + +Ace3 Beta - Revision 803 (April 14th, 2009) +-------------------------------------------- +- AceConfig-3.0: Allow spaces in the keys of config tables. Spaces will be changed on the fly to underscores in AceConfigCmd-3.0 - there is no collision check in place, yet. +- AceConfig-3.0: Support a "fontSize" attribute to the description type. Possible values are "small" (default), "medium" and "large". +- AceConfigDialog-3.0: Fixed an error that would occur when calling InterfaceOptionsFrame_OpenToCategory from within an event handler in a Blizzard Options integrated frame. (Ticket #33) +- AceConfigDialog-3.0: The "execute" type does now recognize the "image" attributes, and will display a clickable icon instead of the button when an image is supplied. (Ticket #35) +- AceConfigDialog-3.0: Pass icons defined in the option table to the TreeGroup widget (Ticket #20) +- AceConfigDialog-3.0: Fixed a bug that caused an empty group widget to be drawn if all groups were hidden. +- AceConfigCmd-3.0: Improved the behaviour of select and multiselect elements. (Ticket #26) +- AceDB-3.0: Add a GetNamespace function to the DB Objects which returns an existing namespace from the DB object. +- AceGUI-3.0 Slider Widget: Properly show percentage values as min/max if isPercent is true. (Ticket #32) +- AceGUI-3.0: Fixed an error in the TreeGroup Widget that caused execution to stop if no name was provided. +- AceGUI-3.0: Fixed the behaviour of the MultiLineEditbox Widget (Accept button not clickable). (Ticket #28) +- AceGUI-3.0: TabGroup: Set a maximum width for tabs based on the size of the widget. (Ticket #34) +- AceGUI-3.0: Added a new InteractiveLabel with OnEnter/OnLeave/OnClick callbacks and a highlight texture +- AceGUI-3.0: Add SetFont and SetFontObject functions to the Label widget (and the new InteractiveLabel) +- AceGUI-3.0: Support icons in the TreeGroup display. (Ticket #20) +- AceGUI-3.0: Added a new :SetRelativeWidth Widget-API that allows you to set the width of widgets relative to their container. +- AceGUI-3.0: Alot of fixes, tweaks and consistency changes. + +Ace3 Beta - Revision 741 (Feb 15th, 2009) +-------------------------------------------- +- AceDBOptions-3.0: Disable the "Copy From" and "Delete" dropdowns if there are no profiles to choose from. (Ticket #19) +- AceGUI-3.0: Improve TabGroup visual style - only stretch them to the full width if they would use more then 75% of the exisiting space. +- AceGUI-3.0: Added a third optional argument to <container>:AddChild() to specify the position for the new widget. (Ticket #22) +- AceConfigCmd-3.0: Improve help output when viewing groups. +- AceConfigDialog-3.0: Refresh the Options Panel after a confirmation is canceled to reset the value to its previous value. (Ticket #23) +- AceDB-3.0: Fix a data inconsistency when using false as a table key. (Ticket #25) + +Ace3 Beta - Revision 722 (Jan 4th, 2009) +-------------------------------------------- +- AceHook-3.0: Fix :SecureHookScript to not fail on previously empty scripts since frame:HookScript does nothing at all in that case. (Ticket #16) +- AceLocale-3.0: Implement 'silent' option for :NewLocale to disable the warnings on unknown entrys (Ticket #18) +- AceTimer-3.0: Implement :TimeLeft(handle) function (Ticket #10) +- AceGUI-3.0: Fix TabGroup tab resizing to be consistent +- AceGUI-3.0: Fixed EditBox alignment when the label is disabled (Ticket #13) +- AceDB-3.0: Implement OnProfileShutdown callback (Ticket #7) +- AceDBOptions-3.0: Updated esES and ruRU locale + +Ace3 Beta - Revision 706 (Oct 18th, 2008) +-------------------------------------------- +- First Beta release after WoWAce move +- Removed WoW 2.4.x compat layer +- AceGUI-3.0: Fix disabling of the Multiline Editbox +- AceGUI-3.0: Improvements to the Keybinding Widget + +Ace3 Beta - Revision 81437 (Sept 6th, 2008) +-------------------------------------------- +- AceConfigDialog-3.0: the confirm callback will now receive the new value that is being set (same signature as the validate callback) +- AceConfigDialog-3.0: :Close and :CloseAll are now safe to call from within callbacks. +- AceGUI-3.0: Added new methods to the widget base table, see ACE-205 for full reference +- AceGUI-3.0: Various fixes to Widgets and recycling process +- Now compatible with WoW 3.0 (compat layer is to be removed upon 3.0 release) + + +Ace3 Beta - Revision 76325 (June 9th, 2008) +-------------------------------------------- +- AceGUI-3.0: Finish Multiselect support for the Dropdown widget (nargiddley) +- AceGUI-3.0: Re-write TabGroup layouting (nargiddley) +- AceGUI-3.0: TreeGroup: Add :EnableButtonTooltips(enable) to make the default tooltips on the tree optional, enabled by default. (nargiddley) +- AceGUI-3.0: TabGroup: Add OnTabEnter and OnTabLeave Callbacks (nargiddley) +- AceConfigDialog-3.0: Add :SelectGroup(appName, ...) - Selects the group given by the path specified then refreshes open windows. (nargiddley) +- AceConfigDialog-3.0: :Open now accepts an optional path, when given will open the window with only the given group and its children visible (nargiddley) +- AceConfigDialog-3.0: :AddToBlizOptions now accepts an optional path, this will add the config page to display the specified group and its children only. (nargiddley) +- AceConfigDialog-3.0: ACE-189: allow multiselect to be shown as a dropdown by setting dialogControl = "Dropdown" (nargiddley) +- AceConfigDialog-3.0: Add Custom tooltips to the TreeGroup and TabGroup, shows both name and desc for the group. (nargiddley) +- AceConfigCmd-3.0: ACE-195: Remove unneeded references to .confirm, will no longer error when .confirm is a boolean (nargiddley) +- AceAddon-3.0: Allow for an optional first argument to NewAddon to be a table to be used as the base for the addon. (ammo) + +Ace3 Beta - Revision 74633 (May 19th, 2008) +-------------------------------------------- +- AceTimer-3.0: ACE-173: don't error on nil handle for CancelTimer(), just bail out early. (ammo) +- AceGUI-3.0: ACE-161, ACE-180, ACE-181: New and improved DropDown widget (originally coded by Borlox) (nargiddley,nevcairiel) +- AceGUI-3.0: AceGUI will call OnWidthSet and OnHeightSet as frames resize (nargiddley) +- AceGUI-3.0: TabGroup: Use OptionsFrameTabButtonTemplate for tabs (nargiddley) +- AceGUI-3.0: TabGroup: Tabs now span multiple lines when there are too many to fit in the width of the frame (nargiddley) +- AceGUI-3.0: TreeGroup: Tree is now sizable by dragging, orig patch by yssaril (nargiddley) +- AceGUI-3.0: Flow layout will now reduce widgets width to fit rather than leaving them sticking out the side of container widgets (nargiddley) +- AceGUI-3.0: Dropdowns will no longer be left open in the background when the frame is clicked or other widgets are activated (nargiddley) +- AceGUI-3.0: ACE-159: Rename Release to OnRelease and Acquire to OnAcquire for widgets. (nargiddley) +- AceGUI-3.0: ACE-171: add IsVisible and IsShown methods to the widget metatable (nargiddley) +- AceGUI-3.0: ACE-164: add tooltips to tree to show full text of childs that got clipped (ammo) +- AceGUI-3.0: ACE-174: make buttons in AceGUI-3.0 locale independant (ammo) +- AceGUI-3.0: ACE-166: fix treegroup visual bug (ammo) +- AceGUI-3.0: ACE-184: make numeric entry for slider more intuitive (ammo) +- AceConfigCmd-3.0: ACE-172 - ignore description in cmd (ammo) +- AceConsole-3.0: nolonger check for existance of slashcommands, overwrite where needed. Last one wins, this enables AddonLoader to X-LoadOn-Slash and override the slashcommand from AddonLoader slashcommand with an Ace3 one. (Ammo) + +Ace3 Beta - Revision 69509 (April 13th, 2008) +--------------------------------------------- +- AceComm-3.0: turn off error messages when receiving invalid multi-part messages (its happening on login etc) (nevcairiel) +- AceDBOptions-3.0: shorten info text at top to prevent scrollbars. (nevcairiel) +- AceHook-3.0: ACE-162: fix unhooking of objects that were not actually hooked (nevcairiel) +- AceDB-3.0: fire the DB callbacks after the namespaces changed their profile as well (nevcairiel) +- AceDB-3.0: namespaces can now be individually reset using :ResetProfile() on the namespace directly (nevcairiel) +- AceDB-3.0: added a optional argument to :ResetProfile to not populate the reset to all namespaces (so the main profile can reset individually without reseting all namespaces too) (nevcairiel) + +Ace3 Beta - Revision 66329 (March 27th, 2008) +--------------------------------------------- +- Overall 2.4 clean ups - removing 2.4 checks and work arounds (nevcairiel) +- AceBucket-3.0: clear the timer reference when unregistering a bucket to prevent a error when unregistering a bucket that was never fired (nevcairiel) +- AceAddon-3.0: Bugfix when enabling/disabling modules from the parents OnEnable after disabling / enabling the parent addon. (ammo) +- AceGUI-3.0: Don't parent the BlizOptionsGroup widget to UIParent and Hide it by default. Fixes stray controls on the screen. (nargiddley) +- AceConfigDialog-3.0: Config windows without a default size won't incorrectly get a default size from a previously open window. (nargiddley) +- AceDBOptions-3.0: added zhCN and zhTW locale (nevcairiel) + +Ace3 Beta - Revision 65665 (March 25th, 2008) +--------------------------------------------- +- AceGUI-3.0: ACE-139: Changed all Widgets to resemble the Blizzard 2.4 Options Style (nevcairiel) +- AceGUI-3.0: Fixed "List"-Layout not reporting new width to "fill"-mode widgets (mikk) +- AceGUI-3.0: added :SetColor to the Label widget (nevcairiel) +- AceGUI-3.0: ACE-132: ColorPicker: added checkers texture for better alpha channel display, and fixed "white"-texture bug (nevcairiel,nargiddley,ammo) +- AceConfig-3.0: ACE-113: Added uiName, uiType, handler, option, type to the info table (nevcairiel,nargiddley) +- AceConfigDialog-3.0: ACE-139: Adjusted for 2.4 options panels (nevcairiel) +- AceConfigDialog-3.0: Use "width" parameter for the description widget (if present) (nevcairiel) +- AceConfigDialog-3.0: ACE-135: Add support for specifying a rowcount for multiline editboxes (nargiddley) +- AceConfigDialog-3.0: :AddToBlizOptions will return the frame registered so you can use it in InterfaceOptionsFrame_OpenToFrame (nevcairiel) +- AceConfigCmd-3.0: handle "hidden" in help-output (nevcairiel) +- AceHook-3.0: fix unhooking of secure hooks (nevcairiel) +- AceDBOptions-3.0: add optional argument to GetOptionsTable(db[, noDefaultProfiles]) - if set to true will not show the default profiles in the profile selection (nevcairiel) +- AceDBOptions-3.0: added koKR locale (nevcairiel) +- Ace3 Standalone: Removed the "Ace3" Category from the 2.4 options panel (nevcairiel) + +Ace3 Beta - Revision 64176 (March 10th, 2008) +--------------------------------------------- +- AceGUI-3.0: Improve Alpha handling for the ColorPicker widget, ColorPicker widget closes the ColorPickerFrame before opening to prevent values getting carried over (nargiddley) +- AceGUI-3.0: The Slider widget will only react to the mousewheel after it has been clicked (anywhere including the label) to prevent accidental changes to the value when trying to scroll the container it is in (nargiddley) +- AceGUI-3.0: The TreeGroup widget is scrollable with the mousewheel (nargiddley) +- AceGUI-3.0: ACE-154: Fix frame levels in more cases to prevent widgets ending up behind their containers (nargiddley) +- AceConfigDialog: Color picker obeys hasAlpha on the color type (nargiddley) +- AceConfigDialog-3.0: ACE-155: Make sure that the selected group is type='group' when checking if it exists (nargiddley) +- AceDBOptions-3.0: added frFR locale (nevcairiel) + +Ace3 Beta - Revision 63886 (March 8th, 2008) +--------------------------------------------- +- AceDBOptions-3.0: new library to provide a Ace3Options table to control the AceDB-3.0 profiles (nevcairiel) +- AceDB-3.0: add "silent" option to DeleteProfile and CopyProfile when we deal with namespaces (nevcairiel) +- AceDB-3.0: implement library upgrade path (nevcairiel) +- AceDB-3.0: ACE-146: fix problem with non-table values overruling ['*']-type defaults (nevcairiel) +- AceConsole-3.0: treat |T|t texture links similar to |H|h|h links. (ammo) +- AceGUI-3.0: Use Blizzard Templates for the EditBox and DropDown widget (nevcairiel) +- AceBucket-3.0: ACE-150: callback is now optional, if not supplied will use the eventname as method name (only possible if one event is supplied, and not a event table) (nevcairiel) +- tests: adjust tests for AceGUI and AceConsole changes (nevcairiel) + +Ace3 Beta - Revision 63220 (Feb 29th, 2008) +--------------------------------------------- +- AceTimer-3.0: CancelAllTimers() now cancels silent (elkano) +- AceConfigDialog: Add :SetDefaultSize(appName, width, height), sets the size the dialog will open to. Does not effect already open windows. (nargiddley) +- AceConfigDialog: Fix typo in type check for range values (nargiddley) +- AceGUI: ColorPicker widget will correctly fire OnValueChanged for the cancel event of the colorpicker popup. Reset ColorPicker's color on Acquire. (nargiddley) +- AceGUI: Fix Spelling of Aquire -> Acquire for widgets, all custom widgets will need to be updated. A warning will be printed for widgets not upgraded yet. (nargiddley) +- AceConfigCmd-3.0: add simple coloring to slashcommand output. (ammo) +- AceConsole-3.0: add some color to :Print (ammo) +- AceAddon-3.0: set error level on library embedding to point to the :NewAddon call (nevcairiel) + +Ace3 Beta - Revision 62182 (Feb 20th, 2008) +--------------------------------------------- +- Ace3 StandAlone: Add a page to the Blizzard 2.4 Interface Options with icons to open dialogs for configs registered when installed standalone (nargiddley) +- AceConfigDialog: type = 'description' now uses the fields image and imageCoords instead of icon and iconCoords, add imageWidth and imageHeight (nargiddley) +- AceConfigDialog: Add :AddToBlizzardOptions(appName, name), this will add the specified config to the Blizzard Options pane new in 2.4. This will only be available if running on the 2.4 PTR (nargiddley) +- AceDB: fix GetProfiles() when setting the same profile twice (nevcairiel) +- AceDB: bail out of :SetProfile early when trying to set to the same profile (nevcairiel) +- AceDB: add nil checks to metatable handling (nevcairiel) +- AceDB: clear tables that are empty after defaults removal (nevcairiel) +- AceGUI: Fix a couple of layout bugs causing the width of groups to be wrong (nargiddley) +- AceGUI: Add Icon widget (nargiddley) +- AceGUI: Allow room for the border in the BlizOptionsGroup widget (nargiddley) +- AceGUI: Button and Keybinding use UIPanelButtonTemplate2 (nargiddley) +- AceConsole-3.0: Fix bug where no table for [self] was created when registering weak commands (ammo) +- AceTimer-3.0: add missing :OnEmbedDisable (ammo) +- AceAddon-3.0: added :GetName() that will always return the "real" name of a addon or module object without any prefixes (nevcairiel) + +Ace3 Beta - Revision 60697 (Feb 9th, 2008) +--------------------------------------------- +- CallbackHandler-1.0: remove unnecessary table creation if a event is fired thats not registered (nevcairiel) +- AceAddon-3.0: fixed a bug with recursive addon loading (nevcairiel) +- AceGUI: Update TabGroup's tablist format, tabs are selected by value not index (nargiddley) +- AceGUI: Add MultiLineEditBox widget (nargiddley, originally by bam) +- AceGUI: Small fix to the flow layout preventing controls overlapping in some cases (nargiddley) +- AceConfigDialog: Implement control and dialogControl for types 'input' and 'select' (nargiddley) +- AceConfigDialog: Add support for multiline = true on type = 'input' (nargiddley) +- AceConfigDialog: Fix an error when all groups are hidden in a group with childGroups = 'select' (nargiddley) +- AceConfigDialog: type = 'description' will now show .icon as an image with its text (nargiddley) +- AceConfigDialog: multiline inputs are no longer forced to width = "full" (nargiddley) +- AceConfigDialog: bug fix when loading without AceConsole present (nevcairiel) + +Ace3 Beta - Revision 60545 (Feb 7th, 2008) +--------------------------------------------- +- AceGUI: SetToplevel(true) for the Frame widget, multiple open windows should play nice together now (nargiddley) +- AceGUI: Move Frames to the FULLSCREEN_DIALOG strata (nargiddley) +- AceGUI: Dropdown, Editbox and Keybinding labels grey out when disabled (nargiddley) +- AceGUI: Add OnClick callback to the TreeGroup widget (nargiddley) +- AceConfigDialog: Confirm popups will be above the config window (nargiddley) + +Ace3 Beta - Revision 60163 (Feb 3rd, 2008) +--------------------------------------------- +- Initial Beta release \ No newline at end of file diff --git a/Libs/LibSharedMedia-3.0/LibSharedMedia-3.0.lua b/Libs/LibSharedMedia-3.0/LibSharedMedia-3.0.lua index 949db48..898168f 100644 --- a/Libs/LibSharedMedia-3.0/LibSharedMedia-3.0.lua +++ b/Libs/LibSharedMedia-3.0/LibSharedMedia-3.0.lua @@ -1,6 +1,6 @@ --[[ Name: LibSharedMedia-3.0 -Revision: $Revision: 74 $ +Revision: $Revision: 107 $ Author: Elkano (elkano@gmx.de) Inspired By: SurfaceLib by Haste/Otravi (troeks@gmail.com) Website: http://www.wowace.com/projects/libsharedmedia-3-0/ @@ -9,7 +9,7 @@ Dependencies: LibStub, CallbackHandler-1.0 License: LGPL v2.1 ]] -local MAJOR, MINOR = "LibSharedMedia-3.0", 5000402 -- 5.0.4 v2 / increase manually on changes +local MAJOR, MINOR = "LibSharedMedia-3.0", 6010003 -- Increase manually on changes local lib = LibStub:NewLibrary(MAJOR, MINOR) if not lib then return end @@ -20,8 +20,6 @@ local pairs = _G.pairs local type = _G.type local band = _G.bit.band - -local table_insert = _G.table.insert local table_sort = _G.table.sort local locale = GetLocale() @@ -60,9 +58,13 @@ lib.MediaType.SOUND = "sound" -- sound files -- BACKGROUND if not lib.MediaTable.background then lib.MediaTable.background = {} end lib.MediaTable.background["None"] = [[]] +lib.MediaTable.background["Blizzard Collections Background"] = [[Interface\Collections\CollectionsBackgroundTile]] lib.MediaTable.background["Blizzard Dialog Background"] = [[Interface\DialogFrame\UI-DialogBox-Background]] lib.MediaTable.background["Blizzard Dialog Background Dark"] = [[Interface\DialogFrame\UI-DialogBox-Background-Dark]] lib.MediaTable.background["Blizzard Dialog Background Gold"] = [[Interface\DialogFrame\UI-DialogBox-Gold-Background]] +lib.MediaTable.background["Blizzard Garrison Background"] = [[Interface\Garrison\GarrisonUIBackground]] +lib.MediaTable.background["Blizzard Garrison Background 2"] = [[Interface\Garrison\GarrisonUIBackground2]] +lib.MediaTable.background["Blizzard Garrison Background 3"] = [[Interface\Garrison\GarrisonMissionUIInfoBoxBackgroundTile]] lib.MediaTable.background["Blizzard Low Health"] = [[Interface\FullScreenTextures\LowHealth]] lib.MediaTable.background["Blizzard Marble"] = [[Interface\FrameGeneral\UI-Background-Marble]] lib.MediaTable.background["Blizzard Out of Control"] = [[Interface\FullScreenTextures\OutOfControl]] @@ -89,6 +91,10 @@ lib.DefaultMedia.border = "None" if not lib.MediaTable.font then lib.MediaTable.font = {} end local SML_MT_font = lib.MediaTable.font --[[ +All font files are currently in all clients, the following table depicts which font supports which charset as of 5.0.4 +Fonts were checked using langcover.pl from DejaVu fonts (http://sourceforge.net/projects/dejavu/) and FontForge (http://fontforge.org/) +latin means check for: de, en, es, fr, it, pt + file name latin koKR ruRU zhCN zhTW 2002.ttf 2002 X X X - - 2002B.ttf 2002 Bold X X X - - @@ -101,7 +107,7 @@ bHEI01B.ttf AR Heiti2 Bold B5 - - - - X bKAI00M.ttf AR Kaiti Medium B5 - - - - X bLEI00D.ttf AR Leisu Demi B5 - - - - X FRIZQT__.TTF Friz Quadrata TT X - - - - -FRIZQT___CYR.TTF FrizQuadrataCTT - - X - - +FRIZQT___CYR.TTF FrizQuadrataCTT x - X - - K_Damage.TTF YDIWingsM - X X - - K_Pagetext.TTF MoK X X X - - MORPHEUS.TTF Morpheus X - - - - @@ -109,6 +115,9 @@ MORPHEUS_CYR.TTF Morpheus X - X - - NIM_____.ttf Nimrod MT X - X - - SKURRI.TTF Skurri X - - - - SKURRI_CYR.TTF Skurri X - X - - + +WARNING: Although FRIZQT___CYR is available on western clients, it doesn't support special European characters e.g. é, ï, ö +Due to this, we cannot use it as a replacement for FRIZQT__.TTF ]] if locale == "koKR" then @@ -186,7 +195,7 @@ lib.DefaultMedia.statusbar = "Blizzard" -- SOUND if not lib.MediaTable.sound then lib.MediaTable.sound = {} end -lib.MediaTable.sound["None"] = [[Interface\Quiet.ogg]] -- Relies on the fact that PlaySound[File] doesn't error on non-existing input. +lib.MediaTable.sound["None"] = C_RaidLocks and 1 or [[Interface\Quiet.ogg]] -- Relies on the fact that PlaySound[File] doesn't error on non-existing input. lib.DefaultMedia.sound = "None" local function rebuildMediaList(mediatype) @@ -211,7 +220,16 @@ function lib:Register(mediatype, key, data, langmask) error(MAJOR..":Register(mediatype, key, data, langmask) - key must be string, got "..type(key)) end mediatype = mediatype:lower() - if mediatype == lib.MediaType.FONT and ((langmask and band(langmask, LOCALE_MASK) == 0) or not (langmask or locale_is_western)) then return false end + if mediatype == lib.MediaType.FONT and ((langmask and band(langmask, LOCALE_MASK) == 0) or not (langmask or locale_is_western)) then return false end + if mediatype == lib.MediaType.SOUND and type(data) == "string" then + local path = data:lower() + -- Only ogg and mp3 are valid sounds. + + if not path:find(".ogg", nil, true) and not path:find(".mp3", nil, true) then + return false + end + + end if not mediaTable[mediatype] then mediaTable[mediatype] = {} end local mtable = mediaTable[mediatype] if mtable[key] then return false end diff --git a/Libs/LibSharedMedia-3.0/lib.xml b/Libs/LibSharedMedia-3.0/lib.xml index 34aa874..7f2fd53 100644 --- a/Libs/LibSharedMedia-3.0/lib.xml +++ b/Libs/LibSharedMedia-3.0/lib.xml @@ -1,4 +1,4 @@ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd"> <Script file="LibSharedMedia-3.0.lua" /> -</Ui> \ No newline at end of file +</Ui> diff --git a/Libs/changelog-Ace3-r1202.txt b/Libs/changelog-Ace3-r1202.txt new file mode 100644 index 0000000..69139b6 --- /dev/null +++ b/Libs/changelog-Ace3-r1202.txt @@ -0,0 +1,408 @@ +Ace3 Release - Revision r1200 (January 24th, 2019) +-------------------------------------------------- +- Cleanup for WoW 8.0 improvements +- AceGUI-3.0: Worked around various quirks in the WoW 8.0/8.1 API +- AceGUI-3.0: ColorPicker: Store references to the background/checkers textures (Ticket #473) +- AceConfigDialog-3.0: Allow custom controls for almost all option types (Ticket #475) + +Ace3 Release - Revision r1182 (July 17th, 2018) +----------------------------------------------- +- AceComm-3.0: Support numeric targets for custom channels (Ticket #419) +- AceComm-3.0/ChatThrottleLib: Updated for WoW 8.0 API changes +- AceConfig-3.0: Allow number values for the "width" parameter, which acts as a multiplier of the default width +- AceConfigDialog-3.0: Enable iconCoords for the main level of a tree group (Ticket #417) +- AceGUI-3.0: Implement a Table Layout (#442) +- AceGUI-3.0: EditBox: Only try to handle dragging if a valid object is being dragged into the text box +- AceGUI-3.0: Various fixes and work-arounds for WoW 8.0 changes + +Ace3 Release - Revision r1166 (August 29th, 2017) +------------------------------------------------- +- Updated any use of PlaySound to the new numeric constants (Fix for WoW 7.3) +- AceConfigDialog-3.0: implement fallback validation feedback in a StaticPopup (Ticket #2) + +Ace3 Release - Revision r1158 (March 28th, 2017) +------------------------------------------------ +- AceGUI-3.0: Fire OnShow events from Frame and Windows containers (Ticket #396) +- AceGUI-3.0: Add SetJustifyV/H API to the Label/InteractiveLabel widgets (Ticket #397) + +Ace3 Release - Revision r1151 (July 18th, 2016) +----------------------------------------------- +- AceConfig-3.0: Allow specifying images using the numeric fileID (Ticket #389) +- AceGUI-3.0: Use SetColorTexture in WoW 7.0 +- AceGUI-3.0: Expose the HighlightText API for EditBox and MultiLineEditBox Widgets (Ticket #378) +- AceGUI-3.0: Keybinding: Support MouseWheel Up/Down bindings (Ticket #372) +- AceGUI-3.0: TreeGroup: Refresh the tree in an OnUpdate once after Acquire, not only after creation (Fixes missing tree in WoW 7.0) +- AceSerializer-3.0: Create consistent tokens for infinity, independent of the clients platform + +Ace3 Release - Revision r1134 (June 23rd, 2015) +----------------------------------------------- +- AceGUI-3.0: TreeGroup: Prevent Word Wrap in tree elements + +Ace3 Release - Revision r1128 (February 24th, 2015) +--------------------------------------------------- +- AceGUI-3.0: Fixed an error in GameTooltip handling causing wrong formatting in some cases + +Ace3 Release - Revision r1122 (October 14th, 2014) +-------------------------------------------------- +- AceDB-3.0: Now using the GetCurrentRegion() API to determine region-based profile keys (fix for WoW 6.0) +- AceComm-3.0: Update ChatThrottleLib to v23 +- AceConfigDialog-3.0: Show a more meaningful title on Blizzard Options Groups (Ticket #353) +- AceGUI-3.0: ColorPicker: Frame Level is automatically increased to ensure the color picker frame is above the option panel +- AceGUI-3.0: DropDown: Properly disable all clickable areas when the dropdown is disabled (Ticket #360) +- AceHook-3.0: Always use HookScript when hooking scripts in a secure fashion (Ticket #338) +- AceTimer-3.0: New timer implementation based on C_Timer.After + +Ace3 Release - Revision r1109 (February 19th, 2014) +--------------------------------------------------- +- AceComm-3.0: Ambiguate addon comm messages to restore behavior to be identical to pre-5.4.7 +- AceConfigRegistry-3.0: Added an option to skip options table validation on registering + +Ace3 Release - Revision r1104 (October 31st, 2013) +-------------------------------------------------- +- AceGUI-3.0: Flow Layout: Added a safeguard to prevent an infinite loop in the layout engine +- AceGUI-3.0: DropDown: Adjust its style slightly to closer resemble the Blizzard DropDown Widget +- AceGUI-3.0: DropDown: API enhancements to specify the width of the pullout and be notified when its opened + +Ace3 Release - Revision r1098 (September 13th, 2013) +---------------------------------------------------- +- AceDB-3.0: Switch characters to the default profile if their active profile is deleted (Ticket #324) +- AceConfigDialog-3.0: Try to prevent static popup taint (Ticket #322) +- AceGUI-3.0: Button: Add a new "Auto Width" option (Ticket #310) +- AceGUI-3.0: DropDown: Make the entire DropDown widget clickable (Ticket #339) +- AceGUI-3.0: EditBox: Allow dragging macros to the editbox (which will then contain the macros name) (Ticket #337) +- AceGUI-3.0: Slider: Add a workaround for the broken slider steps in WoW 5.4 (Ticket #346) +- AceGUI-3.0: TreeGroup: Fix an issue introduced by 5.4 broken scrollbars (Ticket #345) +- AceHook-3.0: Allow hooking of AnimationGroup scripts (Ticket #314) + +Ace3 Release - Revision r1086 (May 21st, 2013) +---------------------------------------------- +- AceAddon-3.0: Improved behavior when loading modules during game startup, ensures proper loading order + +Ace3 Release - Revision r1083 (March 4th, 2013) +----------------------------------------------- +- AceTimer-3.0: Fixed an issue that caused the parameter list passed to the callback to be cut off at nil values +- AceGUI-3.0: InlineGroup: The title attribute is properly reset for recycled objects + +Ace3 Release - Revision r1078 (February 10th, 2013) +--------------------------------------------------- +- AceTimer-3.0: Re-write based on AnimationTimers +- AceHook-3.0: Improved checks/error messages when trying to hook a script on a "nil" frame +- AceDBOptions-3.0: Added Italian locale +- AceGUI-3.0: BlizOptionsGroup: Fixed the "default" button callback +- AceGUI-3.0: Colorpicker: The colorpicker is now clamped to the screen + +Ace3 Release - Revision r1061 (August 27th, 2012) +------------------------------------------------- +- AceConfigDialog-3.0: Try to avoid potential taints in static popup dialogs +- AceConfigDialog-3.0: Sort multiselects with "radio" style +- AceGUI-3.0: Support for WoW 5.0 +- AceGUI-3.0: MultiLineEditBox: Support shift-click'ing items/spells/etc. into the editbox +- AceGUI-3.0: Label: Fix text alignment (Ticket #301) +- AceGUI-3.0: Checkbox: Description text on a disable checkbox should look disabled (Ticket #304) +- AceGUI-3.0: Keybinding: Ensure the Keybinding popup is on the top level (Ticket #305) + +Ace3 Release - Revision r1041 (November 29th, 2011) +--------------------------------------------------- +- AceDB-3.0: Added locale and factionrealmregion profile keys +- AceSerializer-3.0: Removed support for NaN, as WoW 4.3 does no longer allow it. +- AceGUI-3.0: Frame: Add :EnableResize (Ticket #214) + +Ace3 Release - Revision r1032 (June 29th, 2011) +----------------------------------------------- +- AceTab-3.0: Improvements to Match handling (Ticket #255 and #256) +- AceGUI-3.0: DropDown layout fix with hidden labels (Ticket #234) + +Ace3 Release - Revision r1025 (April 27th, 2011) +------------------------------------------------ +- AceComm-3.0: Updated for 4.1 changes - now handles RegisterAddonMessagePrefix internally for you. +- AceGUI-3.0: TabGroup: Fixed width of tabs in 4.1(Ticket #243) + +Ace3 Release - Revision r1009 (February 9th, 2011) +-------------------------------------------------- +- AceLocale-3.0: Fix erronous assumption that the default locale is always the first to be registered for the :NewLocale() "silent" flag. The flag must now be set on the FIRST locale to be registered. +- AceLocale-3.0: The :NewLocale() "silent" flag may now be set to the string "raw", meaning nils are returned for unknown translations. +- AceGUI-3.0: Fix the disabled state of Icon widgets +- AceGUI-3.0: The header of the Frame widget now dynamically changes size to fit the text (Ticket #171) +- AceGUI-3.0: Its now possible to define a custom order the elements in a dropdown widget +- AceGUI-3.0: Improved widget focus behaviour across the board (Ticket #192, #193) +- AceGUI-3.0: Fixed a bug that made it impossible to block the tree widget from being user resizable (Ticket #163) +- AceGUI-3.0: Fixed a bug that caused TreeGroups to become unresponsive under certain conditions (Ticket #189, #202) +- AceGUI-3.0: Enhanced the DropDown widget to allow it to be reused more easily. +- AceConfigDialog-3.0: Select Groups now have the proper order in the dropdown (Ticket #184) +- AceConfigDialog-3.0: Implemented "radio" style select boxes (Ticket #149) + +Ace3 Release - Revision r981 (October 27th, 2010) +------------------------------------------------- +- AceAddon-3.0: Fixed a library upgrading issue +- AceAddon-3.0: Modules are now enabled in loading order +- AceGUI-3.0: Keybinding: The widget will no longer steal keybindings even when inactive (Ticket #169) +- AceGUI-3.0: EditBox: Fixed spell drag'n'drop + + +Ace3 Release - Revision r971 (October 12th, 2010) +------------------------------------------------- +- Small fixes and adjustments for the 4.0 Content Patch. +- AceGUI-3.0: ScrollFrame: Allow for a small margin of error when determining if the scroll bar should be shown. +- AceGUI-3.0: Added new widget APIs: GetText for EditBox and DisableButton for MultiLineEditBox + +Ace3 Release - Revision r960 (July 20th, 2010) +---------------------------------------------- +- AceGUI-3.0: Label: Reset Image Size and TexCoords on Acquire (Ticket #110) +- AceGUI-3.0: CheckBox: Re-apply the disabled state after setting a value, so the visuals are correct in either case. (Ticket #107) +- AceGUI-3.0: Icon: Fix the vertical size. It'll now properly scale with the image size, and not be fixed to about 110px. (Ticket #104) +- AceGUI-3.0: External Containers (Frame, Window) should always start in a visible state. (Ticket #121) +- AceGUI-3.0: Added Blizzard sounds to widgets (Ticket #120) +- AceGUI-3.0: CheckBox: check for self.desc:GetText() being nil as well as "" to prevent setting the wrong height on the checkbox causing bouncing checkboxes. +- AceGUI-3.0: Rewrite of the MultiLineEditBox (Ticket #68) +- AceGUI-3.0: CheckBox: Fix alignment of the text in OnMouseDown when an image is set. (Ticket #142) +- AceGUI-3.0: Add SetMaxLetters APIs to EB and MLEB (Ticket #135) +- AceGUI-3.0: Frame: Add events for OnEnter/OnLeave of the statusbar (Ticket #139) +- AceGUI-3.0: Major cleanups and refactoring in nearly all widgets and containers. +- AceConfigDialog-3.0: Always obey the min/max values on range-type widgets (Ticket #114) +- AceConfigDialog-3.0: Pass iconCoords set on groups in the options table to the tree widget (Ticket #111) +- AceConfigDialog-3.0: Implement "softMin" and "softMax", allowing for a UI-specific minimum/maximum for range controls, while allowing manual input of values in the old min/max range. (Ticket #123) +- AceConfigDialog-3.0: Don't close frames in CloseAll that are being opened after the CloseAll event was dispatched. (Ticket #132). +- AceSerializer-3.0: Fix encoding & decoding of \030. (Ticket #115) +- AceDB-3.0: Remove empty sections on logout, keeping the SV clean of more useless informations. +- AceDBOptions-3.0.lua: Fix a string typo (Ticket #141) + +Ace3 Release - Revision r907 (December 16th, 2009) +--------------------------------------------------- +- AceGUI-3.0: Frame: Properly save the width in the status table. +- AceConfigCmd-3.0: Properly handle help output of inline groups with a different handler. (Ticket #101) +- AceConfigDialog-3.0: Don't bail out and error when a dialogControl was invalid, instead show the error and fallback to the default control for that type. +- AceConfigDialog-3.0: Fix a hickup with the OnUpdate script not getting upgraded properly in some situations. + +Ace3 Release - Revision r900 (December 8th, 2009) +-------------------------------------------------- +- AceGUI-3.0: Alot of visual fixes regarding margins and general widget styles. +- AceGUI-3.0: Ability to accept links for EditBox Widget (Ticket #21) +- AceGUI-3.0: ScrollFrame: Hide the scrollbar when there is no overflowing content, and allow the Layout functions to use that space for widgets. +- AceGUI-3.0: DropDown: Added a GetValue() API to the Widget (Ticket #69) +- AceGUI-3.0: Button: Pass the arguments of the OnClick handler to the OnClick callback (Ticket #57) +- AceGUI-3.0: add a Window container, basically a plain window with close button +- AceGUI-3.0: Add support for inline descriptions to the checkbox widget. +- AceGUI-3.0: Added an API to the Window container to disable the user-resizing of the same. (Ticket #80) +- AceGUI-3.0: TreeGroup: Allow iconCoords to be passed for the tree elements. (Ticket #59) +- AceGUI-3.0: Slider: Add a more visible backdrop/border around the manual input area (Ticket #98, #46) +- AceGUI-3.0: Allow displaying a image in front of the checkbox label. (Ticket #82) +- AceConfig-3.0: Added an experimental "descStyle" member to all option table nodes that allows you to control the way the description is presented. + Supported values are "tooltip" for the old behaviour, and "inline" for a inline display of the description, pending support in AceGUI-3.0 widgets. +- AceConfigCmd-3.0: Properly parse functions and methods supplied for the "hidden" option table member. (Ticket #96) +- AceConfigDialog-3.0: Fix the unpacking of the basepath arguments when internally calling :Open (Ticket #90) +- AceConfigDialog-3.0: Properly refresh BlizOptions Windows which are registered with a path on NotifyChange. (Ticket #93) +- AceConfigDialog-3.0: Allow image/imageCoords on toogle elements (Note that the width/height of the image on the toggle cannot be changed) (Ticket #82) +- AceConfigDialog-3.0: Pass the groups "name" tag to DropDownGroups as the title. (Ticket #79) +- AceDB-3.0: Remove the metatable from the DB before removing defaults, so we don't accidentally invoke it in the process. (Ticket #66) +- AceDB-3.0: Don't save the profileKeys for namespaces, since we use the profile of the parent DB anyway. This will cut down on SV complexity when using alot of namespaces. +- AceDB-3.0: Don't fire the OnProfileReset callback when copying a profile. +- AceDBOptions-3.0: Show the current profile on the dialog. (Ticket #56) +- AceComm-3.0: Add callbacks for message chunks going out the wire (via CTL). Useful for displaying progress for very large messages. +- AceConsole-3.0: Add :Printf() so you don't have to do Print(format()) + +Ace3 Beta - Revision 820 (August 7th, 2009) +-------------------------------------------- +- AceComm-3.0: Updated ChatThrottleLib to v21 +- AceGUI-3.0: Fixed a glitch in the TabGroup code that caused tabs to be unresponsive under rare conditions. (Ticket #38) +- AceGUI-3.0: Consistent "disabled" behaviour of all widgets. (Ticket #47) +- AceGUI-3.0: Changed the way widgets are handled on release to avoid a crash in the game client. (Ticket #49) +- AceGUI-3.0: Fixed a glitch in the button graphics. (Ticket #58) +- AceGUI-3.0: Localized the "Close" Text on the Frame widget. + +Ace3 Beta - Revision 803 (April 14th, 2009) +-------------------------------------------- +- AceConfig-3.0: Allow spaces in the keys of config tables. Spaces will be changed on the fly to underscores in AceConfigCmd-3.0 - there is no collision check in place, yet. +- AceConfig-3.0: Support a "fontSize" attribute to the description type. Possible values are "small" (default), "medium" and "large". +- AceConfigDialog-3.0: Fixed an error that would occur when calling InterfaceOptionsFrame_OpenToCategory from within an event handler in a Blizzard Options integrated frame. (Ticket #33) +- AceConfigDialog-3.0: The "execute" type does now recognize the "image" attributes, and will display a clickable icon instead of the button when an image is supplied. (Ticket #35) +- AceConfigDialog-3.0: Pass icons defined in the option table to the TreeGroup widget (Ticket #20) +- AceConfigDialog-3.0: Fixed a bug that caused an empty group widget to be drawn if all groups were hidden. +- AceConfigCmd-3.0: Improved the behaviour of select and multiselect elements. (Ticket #26) +- AceDB-3.0: Add a GetNamespace function to the DB Objects which returns an existing namespace from the DB object. +- AceGUI-3.0 Slider Widget: Properly show percentage values as min/max if isPercent is true. (Ticket #32) +- AceGUI-3.0: Fixed an error in the TreeGroup Widget that caused execution to stop if no name was provided. +- AceGUI-3.0: Fixed the behaviour of the MultiLineEditbox Widget (Accept button not clickable). (Ticket #28) +- AceGUI-3.0: TabGroup: Set a maximum width for tabs based on the size of the widget. (Ticket #34) +- AceGUI-3.0: Added a new InteractiveLabel with OnEnter/OnLeave/OnClick callbacks and a highlight texture +- AceGUI-3.0: Add SetFont and SetFontObject functions to the Label widget (and the new InteractiveLabel) +- AceGUI-3.0: Support icons in the TreeGroup display. (Ticket #20) +- AceGUI-3.0: Added a new :SetRelativeWidth Widget-API that allows you to set the width of widgets relative to their container. +- AceGUI-3.0: Alot of fixes, tweaks and consistency changes. + +Ace3 Beta - Revision 741 (Feb 15th, 2009) +-------------------------------------------- +- AceDBOptions-3.0: Disable the "Copy From" and "Delete" dropdowns if there are no profiles to choose from. (Ticket #19) +- AceGUI-3.0: Improve TabGroup visual style - only stretch them to the full width if they would use more then 75% of the exisiting space. +- AceGUI-3.0: Added a third optional argument to <container>:AddChild() to specify the position for the new widget. (Ticket #22) +- AceConfigCmd-3.0: Improve help output when viewing groups. +- AceConfigDialog-3.0: Refresh the Options Panel after a confirmation is canceled to reset the value to its previous value. (Ticket #23) +- AceDB-3.0: Fix a data inconsistency when using false as a table key. (Ticket #25) + +Ace3 Beta - Revision 722 (Jan 4th, 2009) +-------------------------------------------- +- AceHook-3.0: Fix :SecureHookScript to not fail on previously empty scripts since frame:HookScript does nothing at all in that case. (Ticket #16) +- AceLocale-3.0: Implement 'silent' option for :NewLocale to disable the warnings on unknown entrys (Ticket #18) +- AceTimer-3.0: Implement :TimeLeft(handle) function (Ticket #10) +- AceGUI-3.0: Fix TabGroup tab resizing to be consistent +- AceGUI-3.0: Fixed EditBox alignment when the label is disabled (Ticket #13) +- AceDB-3.0: Implement OnProfileShutdown callback (Ticket #7) +- AceDBOptions-3.0: Updated esES and ruRU locale + +Ace3 Beta - Revision 706 (Oct 18th, 2008) +-------------------------------------------- +- First Beta release after WoWAce move +- Removed WoW 2.4.x compat layer +- AceGUI-3.0: Fix disabling of the Multiline Editbox +- AceGUI-3.0: Improvements to the Keybinding Widget + +Ace3 Beta - Revision 81437 (Sept 6th, 2008) +-------------------------------------------- +- AceConfigDialog-3.0: the confirm callback will now receive the new value that is being set (same signature as the validate callback) +- AceConfigDialog-3.0: :Close and :CloseAll are now safe to call from within callbacks. +- AceGUI-3.0: Added new methods to the widget base table, see ACE-205 for full reference +- AceGUI-3.0: Various fixes to Widgets and recycling process +- Now compatible with WoW 3.0 (compat layer is to be removed upon 3.0 release) + + +Ace3 Beta - Revision 76325 (June 9th, 2008) +-------------------------------------------- +- AceGUI-3.0: Finish Multiselect support for the Dropdown widget (nargiddley) +- AceGUI-3.0: Re-write TabGroup layouting (nargiddley) +- AceGUI-3.0: TreeGroup: Add :EnableButtonTooltips(enable) to make the default tooltips on the tree optional, enabled by default. (nargiddley) +- AceGUI-3.0: TabGroup: Add OnTabEnter and OnTabLeave Callbacks (nargiddley) +- AceConfigDialog-3.0: Add :SelectGroup(appName, ...) - Selects the group given by the path specified then refreshes open windows. (nargiddley) +- AceConfigDialog-3.0: :Open now accepts an optional path, when given will open the window with only the given group and its children visible (nargiddley) +- AceConfigDialog-3.0: :AddToBlizOptions now accepts an optional path, this will add the config page to display the specified group and its children only. (nargiddley) +- AceConfigDialog-3.0: ACE-189: allow multiselect to be shown as a dropdown by setting dialogControl = "Dropdown" (nargiddley) +- AceConfigDialog-3.0: Add Custom tooltips to the TreeGroup and TabGroup, shows both name and desc for the group. (nargiddley) +- AceConfigCmd-3.0: ACE-195: Remove unneeded references to .confirm, will no longer error when .confirm is a boolean (nargiddley) +- AceAddon-3.0: Allow for an optional first argument to NewAddon to be a table to be used as the base for the addon. (ammo) + +Ace3 Beta - Revision 74633 (May 19th, 2008) +-------------------------------------------- +- AceTimer-3.0: ACE-173: don't error on nil handle for CancelTimer(), just bail out early. (ammo) +- AceGUI-3.0: ACE-161, ACE-180, ACE-181: New and improved DropDown widget (originally coded by Borlox) (nargiddley,nevcairiel) +- AceGUI-3.0: AceGUI will call OnWidthSet and OnHeightSet as frames resize (nargiddley) +- AceGUI-3.0: TabGroup: Use OptionsFrameTabButtonTemplate for tabs (nargiddley) +- AceGUI-3.0: TabGroup: Tabs now span multiple lines when there are too many to fit in the width of the frame (nargiddley) +- AceGUI-3.0: TreeGroup: Tree is now sizable by dragging, orig patch by yssaril (nargiddley) +- AceGUI-3.0: Flow layout will now reduce widgets width to fit rather than leaving them sticking out the side of container widgets (nargiddley) +- AceGUI-3.0: Dropdowns will no longer be left open in the background when the frame is clicked or other widgets are activated (nargiddley) +- AceGUI-3.0: ACE-159: Rename Release to OnRelease and Acquire to OnAcquire for widgets. (nargiddley) +- AceGUI-3.0: ACE-171: add IsVisible and IsShown methods to the widget metatable (nargiddley) +- AceGUI-3.0: ACE-164: add tooltips to tree to show full text of childs that got clipped (ammo) +- AceGUI-3.0: ACE-174: make buttons in AceGUI-3.0 locale independant (ammo) +- AceGUI-3.0: ACE-166: fix treegroup visual bug (ammo) +- AceGUI-3.0: ACE-184: make numeric entry for slider more intuitive (ammo) +- AceConfigCmd-3.0: ACE-172 - ignore description in cmd (ammo) +- AceConsole-3.0: nolonger check for existance of slashcommands, overwrite where needed. Last one wins, this enables AddonLoader to X-LoadOn-Slash and override the slashcommand from AddonLoader slashcommand with an Ace3 one. (Ammo) + +Ace3 Beta - Revision 69509 (April 13th, 2008) +--------------------------------------------- +- AceComm-3.0: turn off error messages when receiving invalid multi-part messages (its happening on login etc) (nevcairiel) +- AceDBOptions-3.0: shorten info text at top to prevent scrollbars. (nevcairiel) +- AceHook-3.0: ACE-162: fix unhooking of objects that were not actually hooked (nevcairiel) +- AceDB-3.0: fire the DB callbacks after the namespaces changed their profile as well (nevcairiel) +- AceDB-3.0: namespaces can now be individually reset using :ResetProfile() on the namespace directly (nevcairiel) +- AceDB-3.0: added a optional argument to :ResetProfile to not populate the reset to all namespaces (so the main profile can reset individually without reseting all namespaces too) (nevcairiel) + +Ace3 Beta - Revision 66329 (March 27th, 2008) +--------------------------------------------- +- Overall 2.4 clean ups - removing 2.4 checks and work arounds (nevcairiel) +- AceBucket-3.0: clear the timer reference when unregistering a bucket to prevent a error when unregistering a bucket that was never fired (nevcairiel) +- AceAddon-3.0: Bugfix when enabling/disabling modules from the parents OnEnable after disabling / enabling the parent addon. (ammo) +- AceGUI-3.0: Don't parent the BlizOptionsGroup widget to UIParent and Hide it by default. Fixes stray controls on the screen. (nargiddley) +- AceConfigDialog-3.0: Config windows without a default size won't incorrectly get a default size from a previously open window. (nargiddley) +- AceDBOptions-3.0: added zhCN and zhTW locale (nevcairiel) + +Ace3 Beta - Revision 65665 (March 25th, 2008) +--------------------------------------------- +- AceGUI-3.0: ACE-139: Changed all Widgets to resemble the Blizzard 2.4 Options Style (nevcairiel) +- AceGUI-3.0: Fixed "List"-Layout not reporting new width to "fill"-mode widgets (mikk) +- AceGUI-3.0: added :SetColor to the Label widget (nevcairiel) +- AceGUI-3.0: ACE-132: ColorPicker: added checkers texture for better alpha channel display, and fixed "white"-texture bug (nevcairiel,nargiddley,ammo) +- AceConfig-3.0: ACE-113: Added uiName, uiType, handler, option, type to the info table (nevcairiel,nargiddley) +- AceConfigDialog-3.0: ACE-139: Adjusted for 2.4 options panels (nevcairiel) +- AceConfigDialog-3.0: Use "width" parameter for the description widget (if present) (nevcairiel) +- AceConfigDialog-3.0: ACE-135: Add support for specifying a rowcount for multiline editboxes (nargiddley) +- AceConfigDialog-3.0: :AddToBlizOptions will return the frame registered so you can use it in InterfaceOptionsFrame_OpenToFrame (nevcairiel) +- AceConfigCmd-3.0: handle "hidden" in help-output (nevcairiel) +- AceHook-3.0: fix unhooking of secure hooks (nevcairiel) +- AceDBOptions-3.0: add optional argument to GetOptionsTable(db[, noDefaultProfiles]) - if set to true will not show the default profiles in the profile selection (nevcairiel) +- AceDBOptions-3.0: added koKR locale (nevcairiel) +- Ace3 Standalone: Removed the "Ace3" Category from the 2.4 options panel (nevcairiel) + +Ace3 Beta - Revision 64176 (March 10th, 2008) +--------------------------------------------- +- AceGUI-3.0: Improve Alpha handling for the ColorPicker widget, ColorPicker widget closes the ColorPickerFrame before opening to prevent values getting carried over (nargiddley) +- AceGUI-3.0: The Slider widget will only react to the mousewheel after it has been clicked (anywhere including the label) to prevent accidental changes to the value when trying to scroll the container it is in (nargiddley) +- AceGUI-3.0: The TreeGroup widget is scrollable with the mousewheel (nargiddley) +- AceGUI-3.0: ACE-154: Fix frame levels in more cases to prevent widgets ending up behind their containers (nargiddley) +- AceConfigDialog: Color picker obeys hasAlpha on the color type (nargiddley) +- AceConfigDialog-3.0: ACE-155: Make sure that the selected group is type='group' when checking if it exists (nargiddley) +- AceDBOptions-3.0: added frFR locale (nevcairiel) + +Ace3 Beta - Revision 63886 (March 8th, 2008) +--------------------------------------------- +- AceDBOptions-3.0: new library to provide a Ace3Options table to control the AceDB-3.0 profiles (nevcairiel) +- AceDB-3.0: add "silent" option to DeleteProfile and CopyProfile when we deal with namespaces (nevcairiel) +- AceDB-3.0: implement library upgrade path (nevcairiel) +- AceDB-3.0: ACE-146: fix problem with non-table values overruling ['*']-type defaults (nevcairiel) +- AceConsole-3.0: treat |T|t texture links similar to |H|h|h links. (ammo) +- AceGUI-3.0: Use Blizzard Templates for the EditBox and DropDown widget (nevcairiel) +- AceBucket-3.0: ACE-150: callback is now optional, if not supplied will use the eventname as method name (only possible if one event is supplied, and not a event table) (nevcairiel) +- tests: adjust tests for AceGUI and AceConsole changes (nevcairiel) + +Ace3 Beta - Revision 63220 (Feb 29th, 2008) +--------------------------------------------- +- AceTimer-3.0: CancelAllTimers() now cancels silent (elkano) +- AceConfigDialog: Add :SetDefaultSize(appName, width, height), sets the size the dialog will open to. Does not effect already open windows. (nargiddley) +- AceConfigDialog: Fix typo in type check for range values (nargiddley) +- AceGUI: ColorPicker widget will correctly fire OnValueChanged for the cancel event of the colorpicker popup. Reset ColorPicker's color on Acquire. (nargiddley) +- AceGUI: Fix Spelling of Aquire -> Acquire for widgets, all custom widgets will need to be updated. A warning will be printed for widgets not upgraded yet. (nargiddley) +- AceConfigCmd-3.0: add simple coloring to slashcommand output. (ammo) +- AceConsole-3.0: add some color to :Print (ammo) +- AceAddon-3.0: set error level on library embedding to point to the :NewAddon call (nevcairiel) + +Ace3 Beta - Revision 62182 (Feb 20th, 2008) +--------------------------------------------- +- Ace3 StandAlone: Add a page to the Blizzard 2.4 Interface Options with icons to open dialogs for configs registered when installed standalone (nargiddley) +- AceConfigDialog: type = 'description' now uses the fields image and imageCoords instead of icon and iconCoords, add imageWidth and imageHeight (nargiddley) +- AceConfigDialog: Add :AddToBlizzardOptions(appName, name), this will add the specified config to the Blizzard Options pane new in 2.4. This will only be available if running on the 2.4 PTR (nargiddley) +- AceDB: fix GetProfiles() when setting the same profile twice (nevcairiel) +- AceDB: bail out of :SetProfile early when trying to set to the same profile (nevcairiel) +- AceDB: add nil checks to metatable handling (nevcairiel) +- AceDB: clear tables that are empty after defaults removal (nevcairiel) +- AceGUI: Fix a couple of layout bugs causing the width of groups to be wrong (nargiddley) +- AceGUI: Add Icon widget (nargiddley) +- AceGUI: Allow room for the border in the BlizOptionsGroup widget (nargiddley) +- AceGUI: Button and Keybinding use UIPanelButtonTemplate2 (nargiddley) +- AceConsole-3.0: Fix bug where no table for [self] was created when registering weak commands (ammo) +- AceTimer-3.0: add missing :OnEmbedDisable (ammo) +- AceAddon-3.0: added :GetName() that will always return the "real" name of a addon or module object without any prefixes (nevcairiel) + +Ace3 Beta - Revision 60697 (Feb 9th, 2008) +--------------------------------------------- +- CallbackHandler-1.0: remove unnecessary table creation if a event is fired thats not registered (nevcairiel) +- AceAddon-3.0: fixed a bug with recursive addon loading (nevcairiel) +- AceGUI: Update TabGroup's tablist format, tabs are selected by value not index (nargiddley) +- AceGUI: Add MultiLineEditBox widget (nargiddley, originally by bam) +- AceGUI: Small fix to the flow layout preventing controls overlapping in some cases (nargiddley) +- AceConfigDialog: Implement control and dialogControl for types 'input' and 'select' (nargiddley) +- AceConfigDialog: Add support for multiline = true on type = 'input' (nargiddley) +- AceConfigDialog: Fix an error when all groups are hidden in a group with childGroups = 'select' (nargiddley) +- AceConfigDialog: type = 'description' will now show .icon as an image with its text (nargiddley) +- AceConfigDialog: multiline inputs are no longer forced to width = "full" (nargiddley) +- AceConfigDialog: bug fix when loading without AceConsole present (nevcairiel) + +Ace3 Beta - Revision 60545 (Feb 7th, 2008) +--------------------------------------------- +- AceGUI: SetToplevel(true) for the Frame widget, multiple open windows should play nice together now (nargiddley) +- AceGUI: Move Frames to the FULLSCREEN_DIALOG strata (nargiddley) +- AceGUI: Dropdown, Editbox and Keybinding labels grey out when disabled (nargiddley) +- AceGUI: Add OnClick callback to the TreeGroup widget (nargiddley) +- AceConfigDialog: Confirm popups will be above the config window (nargiddley) + +Ace3 Beta - Revision 60163 (Feb 3rd, 2008) +--------------------------------------------- +- Initial Beta release \ No newline at end of file diff --git a/Locales/Core-Locale-enUS.lua b/Locales/Core-Locale-enUS.lua index 8460c01..33a8b02 100644 --- a/Locales/Core-Locale-enUS.lua +++ b/Locales/Core-Locale-enUS.lua @@ -375,9 +375,9 @@ L["SELL_RARE_HELP"] = "Sell All Rare(Blue) Items" L["SELL_EPIC"] = "|cffa335ee Sell Epic Items" L["SELL_EPIC_HELP"] = "Sell All Epic(Purple) Items" L["AUTO_SELL_TOYS"] = "|cff00ccff Sell Already Known Toys" -L["AUTO_SELL_TOYS_HELP"] = "Sell Or Destroy Already Known Toys" +L["AUTO_SELL_TOYS_HELP"] = "Sell Or Destroy Already Known SoulBound Toys" L["AUTO_SELL_MOUNTS"] = "|cff00ccff Already Known Mounts" -L["AUTO_SELL_MOUNTS_HELP"] = "Sell Or Destroy Already Known Mounts" +L["AUTO_SELL_MOUNTS_HELP"] = "Sell Or Destroy Already Known SoulBound Mounts" L["SELL_LIST_DROP_ITEM"] = "Sell Other Item (DRAG ITEM TO BOX)" L["ITEM_TAG_ERR"] = "Item Tags Must Only Be Made Up Of Letters And Numbers." L["POPUP_REMOVE_ITEM"] = "Are You Sure You Wish To Remove The Selected Item From The Auto Sell: Items List?" diff --git a/Media/Sounds/Warning.ogg b/Media/Sounds/Warning.ogg new file mode 100644 index 0000000..987d60b Binary files /dev/null and b/Media/Sounds/Warning.ogg differ diff --git a/Media/Sounds/desktop.ini b/Media/Sounds/desktop.ini new file mode 100644 index 0000000..d957fd1 --- /dev/null +++ b/Media/Sounds/desktop.ini @@ -0,0 +1,4 @@ +[ViewState] +Mode= +Vid= +FolderType=Generic diff --git a/Media/Sounds/raidwarning.ogg b/Media/Sounds/raidwarning.ogg new file mode 100644 index 0000000..f7074ea Binary files /dev/null and b/Media/Sounds/raidwarning.ogg differ diff --git a/Modules/Interaction.lua b/Modules/Interaction.lua index d89321a..29315c6 100644 --- a/Modules/Interaction.lua +++ b/Modules/Interaction.lua @@ -755,6 +755,7 @@ function EMA:doLoot( tries ) end if EMA.db.tellBoEEpic == true or EMA.db.tellBoEMount == true then if lootQuality == 4 then + --EMA:Print("Can Tell") EMA:ScheduleTimer( "TellTeamEpicBoE", 1 , name) end end @@ -815,6 +816,9 @@ function EMA:TellTeamEpicBoE( name ) rarity = L["RARE"] end end + if rarity ~= nil then + EMA:EMASendMessageToTeam( EMA.db.messageArea, L["I_HAVE_LOOTED_X_Y_ITEM"]( rarity, itemLink ), false ) + end else if EMA.db.tellBoEMount == true then if isBop == false then diff --git a/Modules/Toon.lua b/Modules/Toon.lua index 1a9ef40..ab34cd2 100644 --- a/Modules/Toon.lua +++ b/Modules/Toon.lua @@ -1464,9 +1464,11 @@ function EMA:UPDATE_INVENTORY_DURABILITY(event, agr1) end --EMA:Print("Test Durability Fired") local curTotal, maxTotal, broken = 0, 0, 0 + local durability = 100 for i = 1, 18 do local curItemDurability, maxItemDurability = GetInventoryItemDurability(i) - if curItemDurability and maxItemDurability then + if (curItemDurability ~= nil) and (maxItemDurability ~= nil ) then + --EMA:Print("£test", i, curItemDurability, maxItemDurability ) curTotal = curTotal + curItemDurability maxTotal = maxTotal + maxItemDurability if maxItemDurability > 0 and curItemDurability == 0 then @@ -1474,9 +1476,12 @@ function EMA:UPDATE_INVENTORY_DURABILITY(event, agr1) end end end - local durability = (curTotal / maxTotal) * 100 + --EMA:Print( curTotal, maxTotal ) + if maxTotal > 0 then + durability = (curTotal / maxTotal) * 100 + end local durabilityText = tostring(gsub( durability, "%.[^|]+", "") ) - --EMA:Print("Test Durability", durabilityText,"%") + --EMA:Print("Test Durability", durability, durabilityText,"%") if EMA.toldMasterAboutDurability == true then if durability >= tonumber( EMA.db.warnWhenDurabilityDropsAmount ) then EMA.toldMasterAboutDurability = false @@ -1487,7 +1492,7 @@ function EMA:UPDATE_INVENTORY_DURABILITY(event, agr1) EMA.toldMasterAboutDurability = true EMA:EMASendMessageToTeam( EMA.db.warningArea, EMA.db.warnDurabilityDropsMessage..L[" "]..durabilityText..L["%"], false ) end - end + end end function EMA:ResetDurability()