[dongle commit] r675 - in tags/Dongle-1.0-r1174: . DongleUnitTests DongleUnitTests/Tests

2 views
Skip to first unread message

codesite...@google.com

unread,
Nov 18, 2008, 5:40:58 PM11/18/08
to dongle...@googlegroups.com
Author: jnwhiteh
Date: Tue Nov 18 14:37:38 2008
New Revision: 675

Added:
tags/Dongle-1.0-r1174/
tags/Dongle-1.0-r1174/Dongle.lua
tags/Dongle-1.0-r1174/Dongle.toc
tags/Dongle-1.0-r1174/DongleUnitTests/
tags/Dongle-1.0-r1174/DongleUnitTests/DongleUnitTests.toc
tags/Dongle-1.0-r1174/DongleUnitTests/MONACO.TTF (contents, props
changed)
tags/Dongle-1.0-r1174/DongleUnitTests/Tests/
tags/Dongle-1.0-r1174/DongleUnitTests/Tests/01DongleStub.lua
tags/Dongle-1.0-r1174/DongleUnitTests/Tests/02DongleCore.lua
tags/Dongle-1.0-r1174/DongleUnitTests/Tests/03DongleModules.lua
tags/Dongle-1.0-r1174/DongleUnitTests/Tests/04DongleMessage.lua
tags/Dongle-1.0-r1174/DongleUnitTests/Tests/05DonglePrint.lua
tags/Dongle-1.0-r1174/DongleUnitTests/Tests/06DongleDB.lua
tags/Dongle-1.0-r1174/DongleUnitTests/Tests/07DongleSlash.lua
tags/Dongle-1.0-r1174/DongleUnitTests/Tests/08DongleError.lua
tags/Dongle-1.0-r1174/DongleUnitTests/Tests/99Completion.lua
tags/Dongle-1.0-r1174/DongleUnitTests/UnitTests.lua
tags/Dongle-1.0-r1174/changelog.txt

Log:
* Tagging Dongle-1.0-r1174


Added: tags/Dongle-1.0-r1174/Dongle.lua
==============================================================================
--- (empty file)
+++ tags/Dongle-1.0-r1174/Dongle.lua Tue Nov 18 14:37:38 2008
@@ -0,0 +1,1296 @@
+--[[-------------------------------------------------------------------------
+ Copyright (c) 2006-2007, Dongle Development Team
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of the Dongle Development Team nor the names of
+ its contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+---------------------------------------------------------------------------]]
+local major = "DongleStub"
+local minor = tonumber(string.match("$Revision: 313 $", "(%d+)") or 1)
+
+local g = getfenv(0)
+
+if not g.DongleStub or g.DongleStub:IsNewerVersion(major, minor) then
+ local lib = setmetatable({}, {
+ __call = function(t,k)
+ if type(t.versions) == "table" and t.versions[k] then
+ return t.versions[k].instance
+ else
+ error("Cannot find a library with name '"..tostring(k).."'", 2)
+ end
+ end
+ })
+
+ function lib:IsNewerVersion(major, minor)
+ local versionData = self.versions and self.versions[major]
+
+ -- If DongleStub versions have differing major version names
+ -- such as DongleStub-Beta0 and DongleStub-1.0-RC2 then a second
+ -- instance will be loaded, with older logic. This code attempts
+ -- to compensate for that by matching the major version against
+ -- "^DongleStub", and handling the version check correctly.
+
+ if major:match("^DongleStub") then
+ local oldmajor,oldminor = self:GetVersion()
+ if self.versions and self.versions[oldmajor] then
+ return minor > oldminor
+ else
+ return true
+ end
+ end
+
+ if not versionData then return true end
+ local oldmajor,oldminor = versionData.instance:GetVersion()
+ return minor > oldminor
+ end
+
+ local function NilCopyTable(src, dest)
+ for k,v in pairs(dest) do dest[k] = nil end
+ for k,v in pairs(src) do dest[k] = v end
+ end
+
+ function lib:Register(newInstance, activate, deactivate)
+ assert(type(newInstance.GetVersion) == "function",
+ "Attempt to register a library with DongleStub that does not have
a 'GetVersion' method.")
+
+ local major,minor = newInstance:GetVersion()
+ assert(type(major) == "string",
+ "Attempt to register a library with DongleStub that does not have a
proper major version.")
+ assert(type(minor) == "number",
+ "Attempt to register a library with DongleStub that does not have a
proper minor version.")
+
+ -- Generate a log of all library registrations
+ if not self.log then self.log = {} end
+ table.insert(self.log, string.format("Register: %s, %s", major, minor))
+
+ if not self:IsNewerVersion(major, minor) then return false end
+ if not self.versions then self.versions = {} end
+
+ local versionData = self.versions[major]
+ if not versionData then
+ -- New major version
+ versionData = {
+ ["instance"] = newInstance,
+ ["deactivate"] = deactivate,
+ }
+
+ self.versions[major] = versionData
+ if type(activate) == "function" then
+ table.insert(self.log, string.format("Activate: %s, %s", major, minor))
+ activate(newInstance)
+ end
+ return newInstance
+ end
+
+ local oldDeactivate = versionData.deactivate
+ local oldInstance = versionData.instance
+
+ versionData.deactivate = deactivate
+
+ local skipCopy
+ if type(activate) == "function" then
+ table.insert(self.log, string.format("Activate: %s, %s", major, minor))
+ skipCopy = activate(newInstance, oldInstance)
+ end
+
+ -- Deactivate the old libary if necessary
+ if type(oldDeactivate) == "function" then
+ local major, minor = oldInstance:GetVersion()
+ table.insert(self.log, string.format("Deactivate: %s, %s", major,
minor))
+ oldDeactivate(oldInstance, newInstance)
+ end
+
+ -- Re-use the old table, and discard the new one
+ if not skipCopy then
+ NilCopyTable(newInstance, oldInstance)
+ end
+ return oldInstance
+ end
+
+ function lib:GetVersion() return major,minor end
+
+ local function Activate(new, old)
+ -- This code ensures that we'll move the versions table even
+ -- if the major version names are different, in the case of
+ -- DongleStub
+ if not old then old = g.DongleStub end
+
+ if old then
+ new.versions = old.versions
+ new.log = old.log
+ end
+ g.DongleStub = new
+ end
+
+ -- Actually trigger libary activation here
+ local stub = g.DongleStub or lib
+ lib = stub:Register(lib, Activate)
+end
+
+--[[-------------------------------------------------------------------------
+ Begin Library Implementation
+---------------------------------------------------------------------------]]
+
+local major = "Dongle-1.0"
+local minor = tonumber(string.match("$Revision: 674 $", "(%d+)") or 1) +
500
+-- ** IMPORTANT NOTE **
+-- Due to some issues we had previously with Dongle revision numbers
+-- we need to artificially inflate the minor revision number, to ensure
+-- we load sequentially.
+
+assert(DongleStub, string.format("%s requires DongleStub.", major))
+
+if not DongleStub:IsNewerVersion(major, minor) then return end
+
+local Dongle = {}
+local methods = {
+ "RegisterEvent", "UnregisterEvent", "UnregisterAllEvents", "IsEventRegistered",
+ "RegisterMessage", "UnregisterMessage", "UnregisterAllMessages", "TriggerMessage", "IsMessageRegistered",
+ "EnableDebug", "IsDebugEnabled", "Print", "PrintF", "Debug", "DebugF", "Echo", "EchoF",
+ "InitializeDB",
+ "InitializeSlashCommand",
+ "NewModule", "HasModule", "IterateModules",
+}
+
+local registry = {}
+local lookup = {}
+local loadqueue = {}
+local loadorder = {}
+local events = {}
+local databases = {}
+local commands = {}
+local messages = {}
+
+local frame
+
+--[[-------------------------------------------------------------------------
+ Message Localization
+---------------------------------------------------------------------------]]
+
+local L = {
+ ["ADDMESSAGE_REQUIRED"] = "The frame you specify must have
an 'AddMessage' method.",
+ ["ALREADY_REGISTERED"] = "A Dongle with the name '%s' is already
registered.",
+ ["BAD_ARGUMENT"] = "bad argument #%d to '%s' (%s expected, got %s)",
+ ["BAD_ARGUMENT_DB"] = "bad argument #%d to '%s' (DongleDB expected)",
+ ["CANNOT_DELETE_ACTIVE_PROFILE"] = "You cannot delete your active
profile. Change profiles, then attempt to delete.",
+ ["DELETE_NONEXISTANT_PROFILE"] = "You cannot delete a non-existant
profile.",
+ ["MUST_CALLFROM_DBOBJECT"] = "You must call '%s' from a Dongle database
object.",
+ ["MUST_CALLFROM_REGISTERED"] = "You must call '%s' from a registered
Dongle.",
+ ["MUST_CALLFROM_SLASH"] = "You must call '%s' from a Dongle slash command
object.",
+ ["PROFILE_DOES_NOT_EXIST"] = "Profile '%s' doesn't exist.",
+ ["REPLACE_DEFAULTS"] = "You are attempting to register defaults with a
database that already contains defaults.",
+ ["SAME_SOURCE_DEST"] = "Source/Destination profile cannot be the same
profile.",
+ ["EVENT_REGISTER_SPECIAL"] = "You cannot register for the '%s' event. Use
the '%s' method instead.",
+ ["Unknown"] = "Unknown",
+ ["INJECTDB_USAGE"] = "Usage: DongleCmd:InjectDBCommands(db,
['copy', 'delete', 'list', 'reset', 'set'])",
+ ["DBSLASH_PROFILE_COPY_DESC"] = "profile copy <name> - Copies profile
<name> into your current profile.",
+ ["DBSLASH_PROFILE_COPY_PATTERN"] = "^profile copy (.+)$",
+ ["DBSLASH_PROFILE_DELETE_DESC"] = "profile delete <name> - Deletes the
profile <name>.",
+ ["DBSLASH_PROFILE_DELETE_PATTERN"] = "^profile delete (.+)$",
+ ["DBSLASH_PROFILE_LIST_DESC"] = "profile list - Lists all valid
profiles.",
+ ["DBSLASH_PROFILE_LIST_PATTERN"] = "^profile list$",
+ ["DBSLASH_PROFILE_RESET_DESC"] = "profile reset - Resets the current
profile.",
+ ["DBSLASH_PROFILE_RESET_PATTERN"] = "^profile reset$",
+ ["DBSLASH_PROFILE_SET_DESC"] = "profile set <name> - Sets the current
profile to <name>.",
+ ["DBSLASH_PROFILE_SET_PATTERN"] = "^profile set (.+)$",
+ ["DBSLASH_PROFILE_LIST_OUT"] = "Profile List:",
+}
+
+--[[-------------------------------------------------------------------------
+ Utility functions for Dongle use
+---------------------------------------------------------------------------]]
+
+local function assert(level,condition,message)
+ if not condition then
+ error(message,level)
+ end
+end
+
+local function argcheck(value, num, ...)
+ if type(num) ~= "number" then
+ error(L["BAD_ARGUMENT"]:format(2, "argcheck", "number", type(num)), 1)
+ end
+
+ for i=1,select("#", ...) do
+ if type(value) == select(i, ...) then return end
+ end
+
+ local types = strjoin(", ", ...)
+ local name = string.match(debugstack(2,2,0), ": in function [`<](.-)['>]")
+ error(L["BAD_ARGUMENT"]:format(num, name, types, type(value)), 3)
+end
+
+local function safecall(func,...)
+ local success,err = pcall(func,...)
+ if not success then
+ geterrorhandler()(err)
+ end
+end
+
+--[[-------------------------------------------------------------------------
+ Dongle constructor, and DongleModule system
+---------------------------------------------------------------------------]]
+
+function Dongle:New(name, obj)
+ argcheck(name, 2, "string")
+ argcheck(obj, 3, "table", "nil")
+
+ if not obj then
+ obj = {}
+ end
+
+ if registry[name] then
+ error(string.format(L["ALREADY_REGISTERED"], name))
+ end
+
+ local reg = {["obj"] = obj, ["name"] = name}
+
+ registry[name] = reg
+ lookup[obj] = reg
+ lookup[name] = reg
+
+ for k,v in pairs(methods) do
+ obj[v] = self[v]
+ end
+
+ -- Add this Dongle to the end of the queue
+ table.insert(loadqueue, obj)
+ return obj,name
+end
+
+function Dongle:NewModule(name, obj)
+ local reg = lookup[self]
+ assert(3, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "NewModule"))
+ argcheck(name, 2, "string")
+ argcheck(obj, 3, "table", "nil")
+
+ obj,name = Dongle:New(name, obj)
+
+ if not reg.modules then reg.modules = {} end
+ reg.modules[obj] = obj
+ reg.modules[name] = obj
+
+ return obj,name
+end
+
+function Dongle:HasModule(module)
+ local reg = lookup[self]
+ assert(3, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "HasModule"))
+ argcheck(module, 2, "string", "table")
+
+ return reg.modules and reg.modules[module]
+end
+
+local function ModuleIterator(t, name)
+ if not t then return end
+ local obj
+ repeat
+ name,obj = next(t, name)
+ until type(name) == "string" or not name
+
+ return name,obj
+end
+
+function Dongle:IterateModules()
+ local reg = lookup[self]
+ assert(3, reg,
string.format(L["MUST_CALLFROM_REGISTERED"], "IterateModules"))
+
+ return ModuleIterator, reg.modules
+end
+
+--[[-------------------------------------------------------------------------
+ Event registration system
+---------------------------------------------------------------------------]]
+
+local function OnEvent(frame, event, ...)
+ local eventTbl = events[event]
+ if eventTbl then
+ for obj,func in pairs(eventTbl) do
+ if type(func) == "string" then
+ if type(obj[func]) == "function" then
+ safecall(obj[func], obj, event, ...)
+ end
+ else
+ safecall(func, event, ...)
+ end
+ end
+ end
+end
+
+local specialEvents = {
+ ["PLAYER_LOGIN"] = "Enable",
+ ["PLAYER_LOGOUT"] = "Disable",
+}
+
+function Dongle:RegisterEvent(event, func)
+ local reg = lookup[self]
+ assert(3, reg,
string.format(L["MUST_CALLFROM_REGISTERED"], "RegisterEvent"))
+ argcheck(event, 2, "string")
+ argcheck(func, 3, "string", "function", "nil")
+
+ local special = (self ~= Dongle) and specialEvents[event]
+ if special then
+ error(string.format(L["EVENT_REGISTER_SPECIAL"], event, special), 3)
+ end
+
+ -- Name the method the same as the event if necessary
+ if not func then func = event end
+
+ if not events[event] then
+ events[event] = {}
+ frame:RegisterEvent(event)
+ end
+ events[event][self] = func
+end
+
+function Dongle:UnregisterEvent(event)
+ local reg = lookup[self]
+ assert(3, reg,
string.format(L["MUST_CALLFROM_REGISTERED"], "UnregisterEvent"))
+ argcheck(event, 2, "string")
+
+ local tbl = events[event]
+ if tbl then
+ tbl[self] = nil
+ if not next(tbl) then
+ events[event] = nil
+ frame:UnregisterEvent(event)
+ end
+ end
+end
+
+function Dongle:UnregisterAllEvents()
+ local reg = lookup[self]
+ assert(3, reg,
string.format(L["MUST_CALLFROM_REGISTERED"], "UnregisterAllEvents"))
+
+ for event,tbl in pairs(events) do
+ tbl[self] = nil
+ if not next(tbl) then
+ events[event] = nil
+ frame:UnregisterEvent(event)
+ end
+ end
+end
+
+function Dongle:IsEventRegistered(event)
+ local reg = lookup[self]
+ assert(3, reg,
string.format(L["MUST_CALLFROM_REGISTERED"], "IsEventRegistered"))
+ argcheck(event, 2, "string")
+
+ local tbl = events[event]
+ return tbl
+end
+
+--[[-------------------------------------------------------------------------
+ Inter-Addon Messaging System
+---------------------------------------------------------------------------]]
+
+function Dongle:RegisterMessage(msg, func)
+ argcheck(self, 1, "table")
+ argcheck(msg, 2, "string")
+ argcheck(func, 3, "string", "function", "nil")
+
+ -- Name the method the same as the message if necessary
+ if not func then func = msg end
+
+ if not messages[msg] then
+ messages[msg] = {}
+ end
+ messages[msg][self] = func
+end
+
+function Dongle:UnregisterMessage(msg)
+ argcheck(self, 1, "table")
+ argcheck(msg, 2, "string")
+
+ local tbl = messages[msg]
+ if tbl then
+ tbl[self] = nil
+ if not next(tbl) then
+ messages[msg] = nil
+ end
+ end
+end
+
+function Dongle:UnregisterAllMessages()
+ argcheck(self, 1, "table")
+
+ for msg,tbl in pairs(messages) do
+ tbl[self] = nil
+ if not next(tbl) then
+ messages[msg] = nil
+ end
+ end
+end
+
+function Dongle:TriggerMessage(msg, ...)
+ argcheck(self, 1, "table")
+ argcheck(msg, 2, "string")
+ local msgTbl = messages[msg]
+ if not msgTbl then return end
+
+ for obj,func in pairs(msgTbl) do
+ if type(func) == "string" then
+ if type(obj[func]) == "function" then
+ safecall(obj[func], obj, msg, ...)
+ end
+ else
+ safecall(func, msg, ...)
+ end
+ end
+end
+
+function Dongle:IsMessageRegistered(msg)
+ argcheck(self, 1, "table")
+ argcheck(msg, 2, "string")
+
+ local tbl = messages[msg]
+ return tbl[self]
+end
+
+--[[-------------------------------------------------------------------------
+ Debug and Print utility functions
+---------------------------------------------------------------------------]]
+
+function Dongle:EnableDebug(level, frame)
+ local reg = lookup[self]
+ assert(3, reg,
string.format(L["MUST_CALLFROM_REGISTERED"], "EnableDebug"))
+ argcheck(level, 2, "number", "nil")
+ argcheck(frame, 3, "table", "nil")
+
+ assert(3, type(frame) == "nil" or type(frame.AddMessage) == "function",
L["ADDMESSAGE_REQUIRED"])
+ reg.debugFrame = frame or ChatFrame1
+ reg.debugLevel = level
+end
+
+function Dongle:IsDebugEnabled()
+ local reg = lookup[self]
+ assert(3, reg,
string.format(L["MUST_CALLFROM_REGISTERED"], "EnableDebug"))
+
+ return reg.debugLevel, reg.debugFrame
+end
+
+local function argsToStrings(a1, ...)
+ if select("#", ...) > 0 then
+ return tostring(a1), argsToStrings(...)
+ else
+ return tostring(a1)
+ end
+end
+
+local function printHelp(obj, method, header, frame, msg, ...)
+ local reg = lookup[obj]
+ assert(4, reg, string.format(L["MUST_CALLFROM_REGISTERED"], method))
+
+ local name = reg.name
+
+ if header then
+ msg = "|cFF33FF99"..name.."|r: "..tostring(msg)
+ end
+
+ if select("#", ...) > 0 then
+ msg = string.join(", ", msg, argsToStrings(...))
+ end
+
+ frame:AddMessage(msg)
+end
+
+local function printFHelp(obj, method, header, frame, msg, ...)
+ local reg = lookup[obj]
+ assert(4, reg, string.format(L["MUST_CALLFROM_REGISTERED"], method))
+
+ local name = reg.name
+ local success,txt
+
+ if header then
+ msg = "|cFF33FF99%s|r: " .. msg
+ success,txt = pcall(string.format, msg, name, ...)
+ else
+ success,txt = pcall(string.format, msg, ...)
+ end
+
+ if success then
+ frame:AddMessage(txt)
+ else
+ error(string.gsub(txt, "'%?'", string.format("'%s'", method)), 3)
+ end
+end
+
+function Dongle:Print(msg, ...)
+ local reg = lookup[self]
+ assert(1, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "Print"))
+ argcheck(msg,
2, "number", "string", "boolean", "table", "function", "thread", "userdata")
+ return printHelp(self, "Print", true, DEFAULT_CHAT_FRAME, msg, ...)
+end
+
+function Dongle:PrintF(msg, ...)
+ local reg = lookup[self]
+ assert(1, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "PrintF"))
+ argcheck(msg,
2, "number", "string", "boolean", "table", "function", "thread", "userdata")
+ return printFHelp(self, "PrintF", true, DEFAULT_CHAT_FRAME, msg, ...)
+end
+
+function Dongle:Echo(msg, ...)
+ local reg = lookup[self]
+ assert(1, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "Echo"))
+ argcheck(msg,
2, "number", "string", "boolean", "table", "function", "thread", "userdata")
+ return printHelp(self, "Echo", false, DEFAULT_CHAT_FRAME, msg, ...)
+end
+
+function Dongle:EchoF(msg, ...)
+ local reg = lookup[self]
+ assert(1, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "EchoF"))
+ argcheck(msg,
2, "number", "string", "boolean", "table", "function", "thread", "userdata")
+ return printFHelp(self, "EchoF", false, DEFAULT_CHAT_FRAME, msg, ...)
+end
+
+function Dongle:Debug(level, ...)
+ local reg = lookup[self]
+ assert(3, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "Debug"))
+ argcheck(level, 2, "number")
+
+ if reg.debugLevel and level <= reg.debugLevel then
+ printHelp(self, "Debug", true, reg.debugFrame, ...)
+ end
+end
+
+function Dongle:DebugF(level, ...)
+ local reg = lookup[self]
+ assert(3, reg, string.format(L["MUST_CALLFROM_REGISTERED"], "DebugF"))
+ argcheck(level, 2, "number")
+
+ if reg.debugLevel and level <= reg.debugLevel then
+ printFHelp(self, "DebugF", true, reg.debugFrame, ...)
+ end
+end
+
+--[[-------------------------------------------------------------------------
+ Database System
+---------------------------------------------------------------------------]]
+
+local dbMethods = {
+ "RegisterDefaults", "SetProfile", "GetProfiles", "DeleteProfile", "CopyProfile",
+ "GetCurrentProfile", "ResetProfile", "ResetDB",
+ "RegisterNamespace",
+}
+
+local function copyTable(src)
+ local dest = {}
+ for k,v in pairs(src) do
+ if type(k) == "table" then
+ k = copyTable(k)
+ end
+ if type(v) == "table" then
+ v = copyTable(v)
+ end
+ dest[k] = v
+ end
+ return dest
+end
+
+local function copyDefaults(dest, src, force)
+ for k,v in pairs(src) do
+ if k == "*" then
+ if type(v) == "table" then
+ -- Values are tables, need some magic here
+ local mt = {
+ __cache = {},
+ __index = function(t,k)
+ local mt = getmetatable(dest)
+ local cache = rawget(mt, "__cache")
+ local tbl = rawget(cache, k)
+ if not tbl then
+ local parent = t
+ local parentkey = k
+ tbl = copyTable(v)
+ rawset(cache, k, tbl)
+ local mt = getmetatable(tbl)
+ if not mt then
+ mt = {}
+ setmetatable(tbl, mt)
+ end
+ local newindex = function(t,k,v)
+ rawset(parent, parentkey, t)
+ rawset(t, k, v)
+ end
+ rawset(mt, "__newindex", newindex)
+ end
+ return tbl
+ end,
+ }
+ setmetatable(dest, mt)
+ -- Now need to set the metatable on any child tables
+ for dkey,dval in pairs(dest) do
+ copyDefaults(dval, v)
+ end
+ else
+ -- Values are not tables, so this is just a simple return
+ local mt = {__index = function() return v end}
+ setmetatable(dest, mt)
+ end
+ elseif type(v) == "table" then
+ if not dest[k] then dest[k] = {} end
+ copyDefaults(dest[k], v, force)
+ else
+ if (dest[k] == nil) or force then
+ dest[k] = v
+ end
+ end
+ end
+end
+
+local function removeDefaults(db, defaults)
+ if not db then return end
+ for k,v in pairs(defaults) do
+ if k == "*" and type(v) == "table" then
+ -- check for any defaults that have been changed
+ local mt = getmetatable(db)
+ local cache = rawget(mt, "__cache")
+
+ for cacheKey,cacheValue in pairs(cache) do
+ removeDefaults(cacheValue, v)
+ if next(cacheValue) ~= nil then
+ -- Something's changed
+ rawset(db, cacheKey, cacheValue)
+ end
+ end
+ -- Now loop through all the actual k,v pairs and remove
+ for key,value in pairs(db) do
+ removeDefaults(value, v)
+ end
+ elseif type(v) == "table" and db[k] then
+ removeDefaults(db[k], v)
+ if not next(db[k]) then
+ db[k] = nil
+ end
+ else
+ if db[k] == defaults[k] then
+ db[k] = nil
+ end
+ end
+ end
+end
+
+local function initSection(db, section, svstore, key, defaults)
+ local sv = rawget(db, "sv")
+
+ local tableCreated
+ if not sv[svstore] then sv[svstore] = {} end
+ if not sv[svstore][key] then
+ sv[svstore][key] = {}
+ tableCreated = true
+ end
+
+ local tbl = sv[svstore][key]
+
+ if defaults then
+ copyDefaults(tbl, defaults)
+ end
+ rawset(db, section, tbl)
+
+ return tableCreated, tbl
+end
+
+local dbmt = {
+ __index = function(t, section)
+ local keys = rawget(t, "keys")
+ local key = keys[section]
+ if key then
+ local defaultTbl = rawget(t, "defaults")
+ local defaults = defaultTbl and defaultTbl[section]
+
+ if section == "profile" then
+ local new = initSection(t, section, "profiles", key, defaults)
+ if new then
+ Dongle:TriggerMessage("DONGLE_PROFILE_CREATED", t,
rawget(t, "parent"), rawget(t, "sv_name"), key)
+ end
+ elseif section == "profiles" then
+ local sv = rawget(t, "sv")
+ if not sv.profiles then sv.profiles = {} end
+ rawset(t, "profiles", sv.profiles)
+ elseif section == "global" then
+ local sv = rawget(t, "sv")
+ if not sv.global then sv.global = {} end
+ if defaults then
+ copyDefaults(sv.global, defaults)
+ end
+ rawset(t, section, sv.global)
+ else
+ initSection(t, section, section, key, defaults)
+ end
+ end
+
+ return rawget(t, section)
+ end
+}
+
+local function initdb(parent, name, defaults, defaultProfile, olddb)
+ -- This allows us to use an arbitrary table as base instead of saved
variable name
+ local sv
+ if type(name) == "string" then
+ sv = getglobal(name)
+ if not sv then
+ sv = {}
+ setglobal(name, sv)
+ end
+ elseif type(name) == "table" then
+ sv = name
+ end
+
+ -- Generate the database keys for each section
+ local char = string.format("%s - %s", UnitName("player"), GetRealmName())
+ local realm = GetRealmName()
+ local class = select(2, UnitClass("player"))
+ local race = select(2, UnitRace("player"))
+ local faction = UnitFactionGroup("player")
+ local factionrealm = string.format("%s - %s", faction, realm)
+
+ -- Make a container for profile keys
+ if not sv.profileKeys then sv.profileKeys = {} end
+
+ -- Try to get the profile selected from the char db
+ local profileKey = sv.profileKeys[char] or defaultProfile or char
+ sv.profileKeys[char] = profileKey
+
+ local keyTbl= {
+ ["char"] = char,
+ ["realm"] = realm,
+ ["class"] = class,
+ ["race"] = race,
+ ["faction"] = faction,
+ ["factionrealm"] = factionrealm,
+ ["global"] = true,
+ ["profile"] = profileKey,
+ ["profiles"] = true, -- Don't create until we need
+ }
+
+ -- If we've been passed an old database, clear it out
+ if olddb then
+ for k,v in pairs(olddb) do olddb[k] = nil end
+ end
+
+ -- Give this database the metatable so it initializes dynamically
+ local db = setmetatable(olddb or {}, dbmt)
+
+ -- Copy methods locally
+ for idx,method in pairs(dbMethods) do
+ db[method] = Dongle[method]
+ end
+
+ -- Set some properties in the object we're returning
+ db.profiles = sv.profiles
+ db.keys = keyTbl
+ db.sv = sv
+ db.sv_name = name
+ db.defaults = defaults
+ db.parent = parent
+
+ databases[db] = true
+
+ return db
+end
+
+function Dongle:InitializeDB(name, defaults, defaultProfile)
+ local reg = lookup[self]
+ assert(3, reg,
string.format(L["MUST_CALLFROM_REGISTERED"], "InitializeDB"))
+ argcheck(name, 2, "string", "table")
+ argcheck(defaults, 3, "table", "nil")
+ argcheck(defaultProfile, 4, "string", "nil")
+
+ return initdb(self, name, defaults, defaultProfile)
+end
+
+-- This function operates on a Dongle DB object
+function Dongle.RegisterDefaults(db, defaults)
+ assert(3, databases[db],
string.format(L["MUST_CALLFROM_DBOBJECT"], "RegisterDefaults"))
+ assert(3, db.defaults == nil, L["REPLACE_DEFAUTS"])
+ argcheck(defaults, 2, "table")
+
+ for section,key in pairs(db.keys) do
+ if defaults[section] and rawget(db, section) then
+ copyDefaults(db[section], defaults[section])
+ end
+ end
+
+ db.defaults = defaults
+end
+
+function Dongle:ClearDBDefaults()
+ for db in pairs(databases) do
+ local defaults = db.defaults
+ local sv = db.sv
+
+ if db and defaults then
+ for section,key in pairs(db.keys) do
+ if defaults[section] and rawget(db, section) then
+ removeDefaults(db[section], defaults[section])
+ end
+ end
+
+ for section,key in pairs(db.keys) do
+ local tbl = rawget(db, section)
+ if tbl and not next(tbl) then
+ if sv[section] then
+ if type(key) == "string" then
+ sv[section][key] = nil
+ else
+ sv[section] = nil
+ end
+ end
+ end
+ end
+ end
+ end
+end
+
+function Dongle.SetProfile(db, name)
+ assert(3, databases[db],
string.format(L["MUST_CALLFROM_DBOBJECT"], "SetProfile"))
+ argcheck(name, 2, "string")
+
+ local old = db.profile
+ local defaults = db.defaults and db.defaults.profile
+
+ if defaults then
+ -- Remove the defaults from the old profile
+ removeDefaults(old, defaults)
+ end
+
+ db.profile = nil
+ db.keys["profile"] = name
+ db.sv.profileKeys[db.keys.char] = name
+
+ Dongle:TriggerMessage("DONGLE_PROFILE_CHANGED", db, db.parent,
db.sv_name, db.keys.profile)
+end
+
+function Dongle.GetProfiles(db, tbl)
+ assert(3, databases[db],
string.format(L["MUST_CALLFROM_DBOBJECT"], "GetProfiles"))
+ argcheck(tbl, 2, "table", "nil")
+
+ -- Clear the container table
+ if tbl then
+ for k,v in pairs(tbl) do tbl[k] = nil end
+ else
+ tbl = {}
+ end
+
+ local i = 0
+ for profileKey in pairs(db.profiles) do
+ i = i + 1
+ tbl[i] = profileKey
+ end
+
+ -- Add the current profile, if it hasn't been created yet
+ if rawget(db, "profile") == nil then
+ i = i + 1
+ tbl[i] = db.keys.profile
+ end
+
+ return tbl, i
+end
+
+function Dongle.GetCurrentProfile(db)
+ assert(3, databases[db],
string.format(L["MUST_CALLFROM_DBOBJECT"], "GetCurrentProfile"))
+ return db.keys.profile
+end
+
+function Dongle.DeleteProfile(db, name)
+ assert(3, databases[db],
string.format(L["MUST_CALLFROM_DBOBJECT"], "DeleteProfile"))
+ argcheck(name, 2, "string")
+
+ if db.keys.profile == name then
+ error(L["CANNOT_DELETE_ACTIVE_PROFILE"], 2)
+ end
+
+ assert(type(db.sv.profiles[name]) == "table",
L["DELETE_NONEXISTANT_PROFILE"])
+
+ db.sv.profiles[name] = nil
+ Dongle:TriggerMessage("DONGLE_PROFILE_DELETED", db, db.parent,
db.sv_name, name)
+end
+
+function Dongle.CopyProfile(db, name)
+ assert(3, databases[db],
string.format(L["MUST_CALLFROM_DBOBJECT"], "CopyProfile"))
+ argcheck(name, 2, "string")
+
+ assert(3, db.keys.profile ~= name, L["SAME_SOURCE_DEST"])
+ assert(3, type(db.sv.profiles[name]) == "table",
string.format(L["PROFILE_DOES_NOT_EXIST"], name))
+
+ local profile = db.profile
+ local source = db.sv.profiles[name]
+
+ copyDefaults(profile, source, true)
+ Dongle:TriggerMessage("DONGLE_PROFILE_COPIED", db, db.parent, db.sv_name,
name, db.keys.profile)
+end
+
+function Dongle.ResetProfile(db)
+ assert(3, databases[db],
string.format(L["MUST_CALLFROM_DBOBJECT"], "ResetProfile"))
+
+ local profile = db.profile
+
+ for k,v in pairs(profile) do
+ profile[k] = nil
+ end
+
+ local defaults = db.defaults and db.defaults.profile
+ if defaults then
+ copyDefaults(profile, defaults)
+ end
+ Dongle:TriggerMessage("DONGLE_PROFILE_RESET", db, db.parent, db.sv_name,
db.keys.profile)
+end
+
+
+function Dongle.ResetDB(db, defaultProfile)
+ assert(3, databases[db],
string.format(L["MUST_CALLFROM_DBOBJECT"], "ResetDB"))
+ argcheck(defaultProfile, 2, "nil", "string")
+
+ local sv = db.sv
+ for k,v in pairs(sv) do
+ sv[k] = nil
+ end
+
+ local parent = db.parent
+
+ initdb(parent, db.sv_name, db.defaults, defaultProfile, db)
+ Dongle:TriggerMessage("DONGLE_DATABASE_RESET", db, parent, db.sv_name,
db.keys.profile)
+ Dongle:TriggerMessage("DONGLE_PROFILE_CHANGED", db, db.parent,
db.sv_name, db.keys.profile)
+ return db
+end
+
+function Dongle.RegisterNamespace(db, name, defaults)
+ assert(3, databases[db],
string.format(L["MUST_CALLFROM_DBOBJECT"], "RegisterNamespace"))
+ argcheck(name, 2, "string")
+ argcheck(defaults, 3, "nil", "table")
+
+ local sv = db.sv
+ if not sv.namespaces then sv.namespaces = {} end
+ if not sv.namespaces[name] then
+ sv.namespaces[name] = {}
+ end
+
+ local newDB = initdb(db, sv.namespaces[name], defaults, db.keys.profile)
+ -- Remove the :SetProfile method from newDB
+ newDB.SetProfile = nil
+
+ if not db.children then db.children = {} end
+ table.insert(db.children, newDB)
+ return newDB
+end
+
+--[[-------------------------------------------------------------------------
+ Slash Command System
+---------------------------------------------------------------------------]]
+
+local slashCmdMethods = {
+ "InjectDBCommands",
+ "RegisterSlashHandler",
+ "PrintUsage",
+}
+
+local function OnSlashCommand(cmd, cmd_line)
+ if cmd.patterns then
+ for idx,tbl in pairs(cmd.patterns) do
+ local pattern = tbl.pattern
+ if string.match(cmd_line, pattern) then
+ local handler = tbl.handler
+ if type(tbl.handler) == "string" then
+ local obj
+ -- Look in the command object before we look at the parent object
+ if cmd[handler] then obj = cmd end
+ if cmd.parent[handler] then obj = cmd.parent end
+ if obj then
+ obj[handler](obj, string.match(cmd_line, pattern))
+ end
+ else
+ handler(string.match(cmd_line, pattern))
+ end
+ return
+ end
+ end
+ end
+ cmd:PrintUsage()
+end
+
+function Dongle:InitializeSlashCommand(desc, name, ...)
+ local reg = lookup[self]
+ assert(3, reg,
string.format(L["MUST_CALLFROM_REGISTERED"], "InitializeSlashCommand"))
+ argcheck(desc, 2, "string")
+ argcheck(name, 3, "string")
+ argcheck(select(1, ...), 4, "string")
+ for i = 2,select("#", ...) do
+ argcheck(select(i, ...), i+2, "string")
+ end
+
+ local cmd = {}
+ cmd.desc = desc
+ cmd.name = name
+ cmd.parent = self
+ cmd.slashes = { ... }
+ for idx,method in pairs(slashCmdMethods) do
+ cmd[method] = Dongle[method]
+ end
+
+ local genv = getfenv(0)
+
+ for i = 1,select("#", ...) do
+ genv["SLASH_"..name..tostring(i)] = "/"..select(i, ...)
+ end
+
+ genv.SlashCmdList[name] = function(...) OnSlashCommand(cmd, ...) end
+
+ commands[cmd] = true
+
+ return cmd
+end
+
+function Dongle.RegisterSlashHandler(cmd, desc, pattern, handler)
+ assert(3, commands[cmd],
string.format(L["MUST_CALLFROM_SLASH"], "RegisterSlashHandler"))
+
+ argcheck(desc, 2, "string")
+ argcheck(pattern, 3, "string")
+ argcheck(handler, 4, "function", "string")
+
+ if not cmd.patterns then
+ cmd.patterns = {}
+ end
+
+ table.insert(cmd.patterns, {
+ ["desc"] = desc,
+ ["handler"] = handler,
+ ["pattern"] = pattern,
+ })
+end
+
+function Dongle.PrintUsage(cmd)
+ assert(3, commands[cmd],
string.format(L["MUST_CALLFROM_SLASH"], "PrintUsage"))
+ local parent = cmd.parent
+
+ parent:Echo(cmd.desc.."\n".."/"..table.concat(cmd.slashes, ", /")..":\n")
+ if cmd.patterns then
+ for idx,tbl in ipairs(cmd.patterns) do
+ parent:Echo(" - " .. tbl.desc)
+ end
+ end
+end
+
+local dbcommands = {
+ ["copy"] = {
+ L["DBSLASH_PROFILE_COPY_DESC"],
+ L["DBSLASH_PROFILE_COPY_PATTERN"],
+ "CopyProfile",
+ },
+ ["delete"] = {
+ L["DBSLASH_PROFILE_DELETE_DESC"],
+ L["DBSLASH_PROFILE_DELETE_PATTERN"],
+ "DeleteProfile",
+ },
+ ["list"] = {
+ L["DBSLASH_PROFILE_LIST_DESC"],
+ L["DBSLASH_PROFILE_LIST_PATTERN"],
+ },
+ ["reset"] = {
+ L["DBSLASH_PROFILE_RESET_DESC"],
+ L["DBSLASH_PROFILE_RESET_PATTERN"],
+ "ResetProfile",
+ },
+ ["set"] = {
+ L["DBSLASH_PROFILE_SET_DESC"],
+ L["DBSLASH_PROFILE_SET_PATTERN"],
+ "SetProfile",
+ },
+}
+
+function Dongle.InjectDBCommands(cmd, db, ...)
+ assert(3, commands[cmd],
string.format(L["MUST_CALLFROM_SLASH"], "InjectDBCommands"))
+ assert(3, databases[db], string.format(L["BAD_ARGUMENT_DB"],
2, "InjectDBCommands"))
+ local argc = select("#", ...)
+ assert(3, argc > 0, L["INJECTDB_USAGE"])
+
+ for i=1,argc do
+ local cmdname = string.lower(select(i, ...))
+ local entry = dbcommands[cmdname]
+ assert(entry, L["INJECTDB_USAGE"])
+ local func = entry[3]
+
+ local handler
+ if cmdname == "list" then
+ handler = function(...)
+ local profiles = db:GetProfiles()
+ db.parent:Print(L["DBSLASH_PROFILE_LIST_OUT"] .. "\n" .. strjoin("\n",
unpack(profiles)))
+ end
+ else
+ handler = function(...) db[entry[3]](db, ...) end
+ end
+
+ cmd:RegisterSlashHandler(entry[1], entry[2], handler)
+ end
+end
+
+--[[-------------------------------------------------------------------------
+ Internal Message/Event Handlers
+---------------------------------------------------------------------------]]
+
+local function PLAYER_LOGOUT(event)
+ Dongle:ClearDBDefaults()
+ for k,v in pairs(registry) do
+ local obj = v.obj
+ if type(obj["Disable"]) == "function" then
+ safecall(obj["Disable"], obj)
+ end
+ end
+end
+
+local PLAYER_LOGIN
+do
+ local lockPlayerLogin = false
+
+ function PLAYER_LOGIN()
+ if lockPlayerLogin then return end
+
+ lockPlayerLogin = true
+
+ local obj = table.remove(loadorder, 1)
+ while obj do
+ if type(obj.Enable) == "function" then
+ safecall(obj.Enable, obj)
+ end
+ obj = table.remove(loadorder, 1)
+ end
+
+ lockPlayerLogin = false
+ end
+end
+
+local function ADDON_LOADED(event, ...)
+ local obj = table.remove(loadqueue, 1)
+ while obj do
+ table.insert(loadorder, obj)
+
+ if type(obj.Initialize) == "function" then
+ safecall(obj.Initialize, obj)
+ end
+
+ obj = table.remove(loadqueue, 1)
+ end
+
+ if IsLoggedIn() then
+ PLAYER_LOGIN()
+ end
+end
+
+local function DONGLE_PROFILE_CHANGED(msg, db, parent, sv_name, profileKey)
+ local children = db.children
+ if children then
+ for i,namespace in ipairs(children) do
+ local old = namespace.profile
+ local defaults = namespace.defaults and namespace.defaults.profile
+
+ if defaults then
+ -- Remove the defaults from the old profile
+ removeDefaults(old, defaults)
+ end
+
+ namespace.profile = nil
+ namespace.keys["profile"] = profileKey
+ end
+ end
+end
+
+--[[-------------------------------------------------------------------------
+ DongleStub required functions and registration
+---------------------------------------------------------------------------]]
+
+function Dongle:GetVersion() return major,minor end
+
+local function Activate(self, old)
+ if old then
+ registry = old.registry or registry
+ lookup = old.lookup or lookup
+ loadqueue = old.loadqueue or loadqueue
+ loadorder = old.loadorder or loadorder
+ events = old.events or events
+ databases = old.databases or databases
+ commands = old.commands or commands
+ messages = old.messages or messages
+ frame = old.frame or CreateFrame("Frame")
+ else
+ frame = CreateFrame("Frame")
+ local reg = {obj = self, name = "Dongle"}
+ registry[major] = reg
+ lookup[self] = reg
+ lookup[major] = reg
+ end
+
+ self.registry = registry
+ self.lookup = lookup
+ self.loadqueue = loadqueue
+ self.loadorder = loadorder
+ self.events = events
+ self.databases = databases
+ self.commands = commands
+ self.messages = messages
+ self.frame = frame
+
+ frame:SetScript("OnEvent", OnEvent)
+
+ local lib = old or self
+
+ -- Lets make sure the lookup table has us.
+ lookup[lib] = lookup[major]
+
+ -- Register for events using Dongle itself
+ lib:RegisterEvent("ADDON_LOADED", ADDON_LOADED)
+ lib:RegisterEvent("PLAYER_LOGIN", PLAYER_LOGIN)
+ lib:RegisterEvent("PLAYER_LOGOUT", PLAYER_LOGOUT)
+ lib:RegisterMessage("DONGLE_PROFILE_CHANGED", DONGLE_PROFILE_CHANGED)
+
+ -- Convert all the modules handles
+ for name,obj in pairs(registry) do
+ for k,v in ipairs(methods) do
+ obj[k] = self[v]
+ end
+ end
+
+ -- Convert all database methods
+ for db in pairs(databases) do
+ for idx,method in ipairs(dbMethods) do
+ db[method] = self[method]
+ end
+ end
+
+ -- Convert all slash command methods
+ for cmd in pairs(commands) do
+ for idx,method in ipairs(slashCmdMethods) do
+ cmd[method] = self[method]
+ end
+ end
+end
+
+-- Lets nuke any Dongle deactivate functions, please
+-- I hate nasty hacks.
+if DongleStub.versions and DongleStub.versions[major] then
+ local reg = DongleStub.versions[major]
+ reg.deactivate = nil
+end
+
+Dongle = DongleStub:Register(Dongle, Activate)

Added: tags/Dongle-1.0-r1174/Dongle.toc
==============================================================================
--- (empty file)
+++ tags/Dongle-1.0-r1174/Dongle.toc Tue Nov 18 14:37:38 2008
@@ -0,0 +1,9 @@
+## Interface: 20100
+## Title: Dongle
+## Version: Dongle-1.0-RC1
+## Author: Dongle Development Team
+## Notes: Minimal addon framework
+## LoadOnDemand: 1
+
+DongleStub.lua
+Dongle.lua

Added: tags/Dongle-1.0-r1174/DongleUnitTests/DongleUnitTests.toc
==============================================================================
--- (empty file)
+++ tags/Dongle-1.0-r1174/DongleUnitTests/DongleUnitTests.toc Tue Nov 18
14:37:38 2008
@@ -0,0 +1,16 @@
+## Interface: 20100
+## Title: DongleUnitTests
+## Author: Dongle Development Team
+## Notes: Unit tests for Dongle
+## OptionalDeps: Dongle
+
+UnitTests.lua
+Tests\01DongleStub.lua
+Tests\02DongleCore.lua
+Tests\03DongleModules.lua
+Tests\04DongleMessage.lua
+Tests\05DonglePrint.lua
+Tests\06DongleDB.lua
+Tests\07DongleSlash.lua
+Tests\08DongleError.lua
+Tests\99Completion.lua
\ No newline at end of file

Added: tags/Dongle-1.0-r1174/DongleUnitTests/MONACO.TTF
==============================================================================
Binary file. No diff available.

Added: tags/Dongle-1.0-r1174/DongleUnitTests/Tests/01DongleStub.lua
==============================================================================
--- (empty file)
+++ tags/Dongle-1.0-r1174/DongleUnitTests/Tests/01DongleStub.lua Tue Nov 18
14:37:38 2008
@@ -0,0 +1,138 @@
+local test = UnitTest:New("01DongleStub")
+
+function test:donglestub_register()
+ local lib = {}
+ function lib:GetVersion()
+ return "AlphaLib", 1
+ end
+
+ assert_fails(function() DongleStub("AlphaLib") end, "Cannot find a
library with name 'AlphaLib'")
+ DongleStub:Register(lib)
+ assert(DongleStub("AlphaLib") == lib)
+
+ local lib = {}
+ assert_fails(function() DongleStub:Register(lib) end, "Attempt to
register a library with DongleStub that does not have a 'GetVersion'
method.")
+ function lib:GetVersion()
+ return 1
+ end
+ assert_fails(function() DongleStub:Register(lib) end, "Attempt to
register a library with DongleStub that does not have a proper major
version.")
+ function lib:GetVersion()
+ return "MajorVersion"
+ end
+ assert_fails(function() DongleStub:Register(lib) end, "Attempt to
register a library with DongleStub that does not have a proper minor
version.")
+end
+
+function test:donglestub_newversion()
+ local lib = {}
+ function lib:GetVersion()
+ return "BetaLib",1
+ end
+
+ assert(DongleStub:IsNewerVersion(lib:GetVersion()))
+ lib = DongleStub:Register(lib)
+ assert(DongleStub("BetaLib") == lib)
+ assert(select(2,DongleStub("BetaLib"):GetVersion()) == 1)
+
+ local lib2 = {}
+ function lib2:GetVersion()
+ return "BetaLib",0
+ end
+
+ assert(not DongleStub:IsNewerVersion(lib2:GetVersion()))
+ lib2 = DongleStub:Register(lib2)
+ assert(DongleStub("BetaLib") == lib)
+ assert(select(2,DongleStub("BetaLib"):GetVersion()) == 1)
+
+ local lib3 = {}
+ function lib3:GetVersion()
+ return "BetaLib",2
+ end
+
+ assert(DongleStub:IsNewerVersion(lib3:GetVersion()))
+ lib3 = DongleStub:Register(lib3)
+ assert(DongleStub("BetaLib") == lib3)
+ assert(select(2,DongleStub("BetaLib"):GetVersion()) == 2)
+end
+
+function test:donglestub_activate()
+ local lib = {}
+ function lib:GetVersion()
+ return "GammaLib", 1
+ end
+
+ local function activate(new, old)
+ assert(new == lib)
+ assert(old == nil)
+ lib.activate = true
+ end
+
+ assert(DongleStub:IsNewerVersion(lib:GetVersion()))
+ lib = DongleStub:Register(lib, activate)
+
+ local lib2 = {}
+ function lib2:GetVersion()
+ return "GammaLib", 2
+ end
+
+ local function activate2(new, old)
+ assert(new == lib2)
+ assert(old == lib)
+ lib2.activate = true
+ end
+
+ assert(DongleStub:IsNewerVersion(lib2:GetVersion()))
+ lib2 = DongleStub:Register(lib2, activate2)
+
+ local lib3 = {}
+ function lib3:GetVersion()
+ return "GammaLib", 3
+ end
+
+ local function activate3(new, old)
+ assert(new == lib3)
+ assert(old == lib2)
+ lib3.activate = true
+ end
+
+ assert(DongleStub:IsNewerVersion(lib3:GetVersion()))
+ lib3 = DongleStub:Register(lib3, activate3)
+ assert(lib.activate)
+ assert(lib2.activate)
+ assert(lib3.activate)
+end
+
+function test:donglestub_deactivate()
+ local lib = {}
+ local lib2 = {}
+
+ function lib:GetVersion()
+ return "DeltaLib", 1
+ end
+
+ local olddeact
+ local function deactivate(old, new)
+ assert(old == lib)
+ assert(new == lib2)
+ olddeact = true
+ end
+
+ lib = DongleStub:Register(lib, activate, deactivate)
+
+ function lib2:GetVersion()
+ return "DeltaLib", 2
+ end
+
+ local newdeact
+ local function deactivate2(new, old)
+ assert(new == lib2)
+ assert(old == lib)
+ newdeact = true
+ end
+
+ assert(DongleStub:IsNewerVersion(lib2:GetVersion()))
+ lib2 = DongleStub:Register(lib2, activate2, deactivate2)
+ assert(olddeact == true)
+ assert(newdeact == nil)
+end
+
+test:Run()
\ No newline at end of file

Added: tags/Dongle-1.0-r1174/DongleUnitTests/Tests/02DongleCore.lua
==============================================================================
--- (empty file)
+++ tags/Dongle-1.0-r1174/DongleUnitTests/Tests/02DongleCore.lua Tue Nov 18
14:37:38 2008
@@ -0,0 +1,82 @@
+local test = UnitTest:New("02DongleCore")
+local Dongle = DongleStub("Dongle-1.0")
+
+function test:dongle_new()
+ assert_fails(function() Dongle:New(1) end, argerror(2))
+ assert_fails(function() Dongle:New(nil, 1) end, argerror(2))
+ local obj,name = Dongle:New("Alpha")
+ assert(type(obj) == "table")
+ assert(name == "Alpha")
+
+ assert_fails(function() Dongle:New("Alpha") end, "A Dongle with the
name 'Alpha' is already registered.")
+
+ local tbl = {}
+ local obj,name = Dongle:New("Beta",tbl)
+ assert(obj == tbl)
+ assert(name == "Beta")
+end
+
+function test:dongle_init_load_order()
+ local zeta = Dongle:New("Zeta")
+ local eta = Dongle:New("Eta")
+
+ local zetaalpha = zeta:NewModule("Zeta-Alpha")
+ local etaalpha = eta:NewModule("Eta-Alpha")
+
+ local order = {}
+ local function init(self)
+ table.insert(order, self)
+ end
+
+ zeta.Initialize = init
+ eta.Initialize = init
+ zetaalpha.Initialize = init
+ etaalpha.Initialize = init
+
+ local OnEvent = Dongle.frame:GetScript("OnEvent")
+
+ OnEvent(Dongle.frame, "ADDON_LOADED")
+ assert(order[1] == zeta)
+ assert(order[2] == eta)
+ assert(order[3] == zetaalpha)
+ assert(order[4] == etaalpha)
+end
+
+function test:dongle_enable_load_order()
+ local theta = Dongle:New("Theta")
+ local iota = Dongle:New("Iota")
+
+ local thetaalpha= theta:NewModule("ThetaAlpha")
+ local iotaalpha = iota:NewModule("IotaAlpha")
+
+ local order = {}
+ local function enable(self)
+ table.insert(order, self)
+ end
+
+ theta.Enable = enable
+ iota.Enable = enable
+ thetaalpha.Enable = enable
+ iotaalpha.Enable = enable
+
+ local OnEvent = Dongle.frame:GetScript("OnEvent")
+
+ OnEvent(Dongle.frame, "ADDON_LOADED")
+ OnEvent(Dongle.frame, "PLAYER_LOGIN")
+ assert(order[1] == theta)
+ assert(order[2] == iota)
+ assert(order[3] == thetaalpha)
+ assert(order[4] == iotaalpha)
+end
+
+function test:dongle_special_events()
+ local j = Dongle:New("special_events")
+ local err = "You cannot register for the '%s' event. Use the '%s' method
instead."
+
+ assert_fails(function() j:RegisterEvent("PLAYER_LOGIN") end,
+ string.format(err, "PLAYER_LOGIN", "Enable"))
+ assert_fails(function() j:RegisterEvent("PLAYER_LOGOUT") end,
+ string.format(err, "PLAYER_LOGOUT", "Disable"))
+end
+
+test:Run()
\ No newline at end of file

Added: tags/Dongle-1.0-r1174/DongleUnitTests/Tests/03DongleModules.lua
==============================================================================
--- (empty file)
+++ tags/Dongle-1.0-r1174/DongleUnitTests/Tests/03DongleModules.lua Tue Nov
18 14:37:38 2008
@@ -0,0 +1,52 @@
+local test = UnitTest:New("03DongleModules")
+local Dongle = DongleStub("Dongle-1.0")
+
+function test:dongle_new_module()
+ assert_fails(function() Dongle.NewModule({}) end, "You must
call 'NewModule' from a registered Dongle.")
+ assert_fails(function() Dongle:NewModule(1) end, argerror(2))
+ assert_fails(function() Dongle:NewModule(nil, 1) end, argerror(2))
+ local obj,name = Dongle:New("Gamma")
+ local obj,name = obj:NewModule("Gamma-Alpha")
+ assert(type(obj) == "table")
+ assert(name == "Gamma-Alpha")
+end
+
+function test:dongle_has_module()
+ assert_fails(function() Dongle.HasModule({}) end, "You must
call 'HasModule' from a registered Dongle.")
+ assert_fails(function() Dongle:HasModule(1) end, argerror(2))
+ local obj,name = Dongle:New("Delta")
+ Dongle:New("Delta-Gamma")
+ assert(not obj:HasModule("Delta-Alpha"))
+
+ local module,modulename = obj:NewModule("Delta-Alpha")
+ assert(obj:HasModule("Delta-Alpha"))
+ assert(not obj:HasModule("Delta-Beta"))
+ assert(not obj:HasModule("Delta-Gamma"))
+end
+
+function test:dongle_iterate_modules()
+ assert_fails(function() Dongle.IterateModules({}) end, "You must
call 'IterateModules' from a registered Dongle.")
+ assert(type(Dongle:IterateModules()) == "function")
+ local obj,name = Dongle:New("Epsilon")
+ local i = 0
+ for k in obj:IterateModules() do
+ i = i + 1
+ end
+ assert(i == 0)
+ local epsilongamma = obj:NewModule("Epsilon-Gamma")
+ local epsilondelta = obj:NewModule("Epsilon-Delta")
+ local modtbl = {}
+ for name,module in obj:IterateModules() do
+ modtbl[name] = module
+ end
+ local count = 0
+ for name,module in obj:IterateModules() do
+ count = count + 1
+ end
+
+ assert(modtbl["Epsilon-Delta"] == epsilondelta)
+ assert(modtbl["Epsilon-Gamma"] == epsilongamma)
+ assert(count == 2)
+end
+
+test:Run()
\ No newline at end of file

Added: tags/Dongle-1.0-r1174/DongleUnitTests/Tests/04DongleMessage.lua
==============================================================================
--- (empty file)
+++ tags/Dongle-1.0-r1174/DongleUnitTests/Tests/04DongleMessage.lua Tue Nov
18 14:37:38 2008
@@ -0,0 +1,77 @@
+local test = UnitTest:New("04DongleMessage")
+local Dongle = DongleStub("Dongle-1.0")
+
+function test:dongle_trigger_message()
+ assert_fails(function() Dongle:TriggerMessage(1) end, argerror(2))
+ local kappa = Dongle:New("Kappa")
+ local lambda = Dongle:New("Lambda")
+
+ local kappaalpha = kappa:NewModule("Kappa-Alpha")
+ local lambdaalpha = lambda:NewModule("Lambda-Alpha")
+
+ local triggered = {}
+ local function onevent(self, event)
+ triggered[self] = true
+ end
+
+ kappa:RegisterMessage("DONGLE_TEST_MESSAGE")
+ kappa.DONGLE_TEST_MESSAGE = onevent
+ lambdaalpha:RegisterMessage("DONGLE_TEST_MESSAGE")
+ lambdaalpha.DONGLE_TEST_MESSAGE = onevent
+
+ Dongle:TriggerMessage("DONGLE_TEST_MESSAGE")
+ assert(triggered[kappa])
+ assert(not triggered[lambda])
+ assert(not triggered[kappaalpha])
+ assert(triggered[lambdaalpha])
+end
+
+function test:dongle_register_message()
+ assert_fails(function() Dongle:RegisterMessage(1) end, argerror(2))
+ assert_fails(function() Dongle:RegisterMessage("hello", 1) end,
argerror(3))
+ local mu = Dongle:New("Mu")
+ mu:RegisterMessage("DONGLE_TEST_MESSAGE")
+end
+
+function test:dongle_unregister_message()
+ local nu = Dongle:New("Nu")
+ assert_fails(function() Dongle:UnregisterMessage(1) end, argerror(2))
+ nu:RegisterMessage("DONGLE_TEST_MESSAGE")
+ nu:UnregisterMessage("DONGLE_TEST_MESSAGE")
+end
+
+function test:dongle_ismessageregistered()
+ local dongle = Dongle:New("MessageRegistered")
+ assert_fails(function() Dongle:IsMessageRegistered(1) end, argerror(2))
+ assert_fails(function() Dongle:IsMessageRegistered(nil) end, argerror(2))
+ dongle:RegisterMessage("DONGLE_TEST_MESSAGE")
+ assert(dongle:IsMessageRegistered("DONGLE_TEST_MESSAGE"))
+ dongle:UnregisterMessage("DONGLE_TEST_MESSAGE")
+ assert(not dongle:IsMessageRegistered("DONGLE_TEST_MESSAGE"))
+end
+
+function test:dongle_unregisterallevents()
+ local xi = Dongle:New("Xi")
+ xi:RegisterMessage("DONGLE_TEST1")
+ xi:RegisterMessage("DONGLE_TEST2")
+ local used = {}
+
+ local function event(self, event)
+ used[event] = true
+ end
+
+ xi.DONGLE_TEST1 = event
+ xi.DONGLE_TEST2 = event
+ xi.DONGLE_TEST3 = event
+
+ xi:UnregisterAllMessages()
+ xi:RegisterMessage("DONGLE_TEST3")
+ Dongle:TriggerMessage("DONGLE_TEST1")
+ Dongle:TriggerMessage("DONGLE_TEST2")
+ Dongle:TriggerMessage("DONGLE_TEST3")
+ assert(not used.DONGLE_TEST1)
+ assert(not used.DONGLE_TEST2)
+ assert(used.DONGLE_TEST3)
+end
+
+test:Run()
\ No newline at end of file

Added: tags/Dongle-1.0-r1174/DongleUnitTests/Tests/05DonglePrint.lua
==============================================================================
--- (empty file)
+++ tags/Dongle-1.0-r1174/DongleUnitTests/Tests/05DonglePrint.lua Tue Nov
18 14:37:38 2008
@@ -0,0 +1,82 @@
+local test = UnitTest:New("05DonglePrint")
+local Dongle = DongleStub("Dongle-1.0")
+
+function test:dongle_enable_debug()
+ assert_fails(function() Dongle.EnableDebug({}) end, "You must
call 'EnableDebug' from a registered Dongle.")
+ local pi = Dongle:New("Pi")
+ assert_fails(function() Dongle:EnableDebug(true) end, argerror(2))
+end
+
+function test:dongle_print()
+ assert_fails(function() Dongle.Print({}) end, "You must call 'Print' from
a registered Dongle.")
+ assert_fails(function() Dongle.PrintF({}) end, "You must call 'PrintF'
from a registered Dongle.")
+ local rho = Dongle:New("Rho")
+
+ local cf = rawget(getmetatable(getfenv(0)).__index, "ChatFrame1")
+ cf.old = cf.AddMessage
+ local last
+ cf.AddMessage = function(self, msg, ...)
+ last = msg
+ --cf.old(cf, msg, ...)
+ end
+
+ rho:Print("This is a test print")
+ assert(last == "|cFF33FF99Rho|r: This is a test print")
+ rho:Print("This is a test print", "It has many args")
+ assert(last == "|cFF33FF99Rho|r: This is a test print, It has many args")
+ assert_fails(function() rho:PrintF("invalid format %d", "test") end,
argerror(3), "'PrintF'")
+ assert_fails(function() rho:PrintF("invalid format %d") end,
argerror(3), "'PrintF'")
+
+ cf.AddMessage = nil
+end
+
+function test:dongle_echo()
+ assert_fails(function() Dongle.Echo({}) end, "You must call 'Echo' from a
registered Dongle.")
+ assert_fails(function() Dongle.EchoF({}) end, "You must call 'EchoF' from
a registered Dongle.")
+ local rho = Dongle:New("EchoTestRho")
+
+ local cf = rawget(getmetatable(getfenv(0)).__index, "ChatFrame1")
+ cf.old = cf.AddMessage
+ local last
+ cf.AddMessage = function(self, msg, ...)
+ last = msg
+ --cf.old(cf, msg, ...)
+ end
+
+ rho:Echo("This is a test echo")
+ assert(last == "This is a test echo")
+ rho:Echo("This is a test echo", "It has many args")
+ assert(last == "This is a test echo, It has many args")
+ assert_fails(function() rho:EchoF("invalid format %d", "test") end,
argerror(2), "'EchoF'")
+ assert_fails(function() rho:EchoF("invalid format %d") end,
argerror(2), "'EchoF'")
+
+ cf.AddMessage = nil
+end
+
+function test:dongle_debug()
+ assert_fails(function() Dongle.Debug({}) end, "You must call 'Debug' from
a registered Dongle.")
+ local sigma = Dongle:New("Sigma")
+ assert_fails(function() sigma:Debug("Test") end, argerror(2))
+ assert_fails(function() sigma:DebugF("invalid format %d", "test") end,
argerror(2))
+
+ local cf = rawget(getmetatable(getfenv(0)).__index, "ChatFrame1")
+ cf.old = cf.AddMessage
+ local last
+ cf.AddMessage = function(self, msg, ...)
+ last = msg
+ --cf.old(cf, msg, ...)
+ end
+
+ sigma:Debug(1, "This is a test debug")
+ assert(last == nil)
+ sigma:EnableDebug(1)
+ sigma:Debug(2, "This should not be visible")
+ assert(last == nil)
+ sigma:Debug(1, "This should go through")
+ assert(last == "|cFF33FF99Sigma|r: This should go through")
+ sigma:Debug(0, "This is a higher debug")
+ assert(last == "|cFF33FF99Sigma|r: This is a higher debug")
+ cf.AddMessage = nil
+end
+
+test:Run()
\ No newline at end of file

Added: tags/Dongle-1.0-r1174/DongleUnitTests/Tests/06DongleDB.lua
==============================================================================
--- (empty file)
+++ tags/Dongle-1.0-r1174/DongleUnitTests/Tests/06DongleDB.lua Tue Nov 18
14:37:38 2008
@@ -0,0 +1,343 @@
+local test = UnitTest:New("06DongleDB")
+local Dongle = DongleStub("Dongle-1.0")
+
+function test:dongle_initialize_db()
+ assert_fails(function() Dongle.InitializeDB({}) end, "You must
call 'InitializeDB' from a registered Dongle.")
+
+ local tau = Dongle:New("Tau")
+ assert_fails(function() tau:InitializeDB(1) end, argerror(2))
+ assert_fails(function() tau:InitializeDB("test", 1) end, argerror(3))
+ assert_fails(function() tau:InitializeDB("test", nil, 1) end, argerror(4))
+
+ local db = tau:InitializeDB("TauDB")
+ assert(type(db) == "table")
+ assert(rawget(db, "faction") == nil)
+ assert(rawget(db, "realm") == nil)
+ assert(rawget(db, "class") == nil)
+ assert(rawget(db, "global") == nil)
+ assert(rawget(db, "profile") == nil)
+
+ assert(db:GetCurrentProfile() == ("%s - %s"):format(UnitName("player"),
GetRealmName()))
+
+ local sv = {}
+ local db = tau:InitializeDB(sv)
+ assert(type(db) == "table")
+ assert(db.sv_name == sv)
+end
+
+function test:dongle_register_db_defaults()
+ assert_fails(function() Dongle.RegisterDefaults({}) end, "You must
call 'RegisterDefaults' from a Dongle database object.")
+
+ local upsilon = Dongle:New("Upsilon")
+ local db = upsilon:InitializeDB("UpsilonDB")
+
+ assert_fails(function() db:RegisterDefaults(1) end, argerror(2))
+
+ local sv = UpsilonDB
+ local defaults = {
+ char = {
+ Alpha = true,
+ Eta = {
+ Iota = true
+ },
+ },
+ faction = {
+ Beta = true,
+ },
+ realm = {
+ Gamma = true,
+ },
+ class = {
+ Delta = true,
+ },
+ global = {
+ Epsilon = true,
+ },
+ profile = {
+ Zeta = true,
+ },
+ }
+
+ db:RegisterDefaults(defaults)
+ assert(db.char.Alpha == true)
+ assert(db.faction.Beta == true)
+ assert(db.realm.Gamma == true)
+ assert(db.class.Delta == true)
+ assert(db.global.Epsilon == true)
+ assert(db.profile.Zeta == true)
+ assert(db.char.Eta.Iota == true)
+
+ local upsilon = Dongle:New("Upsilon2")
+ local db = upsilon:InitializeDB("UpsilonDB2", nil, "Some Profile")
+ assert(db.keys.profile == "Some Profile")
+end
+
+function test:dongle_clear_db_defaults()
+ local phi = Dongle:New("Phi")
+ local chi = Dongle:New("Chi")
+
+ local defaults = {
+ profile = {
+ Alpha = true,
+ Beta = {
+ Gamma = true,
+ },
+ }
+ }
+
+ local phidb = phi:InitializeDB("PhiDB", defaults)
+ local chidb = chi:InitializeDB("ChiDB", defaults)
+
+ phidb.profile.Alpha = false
+ chidb.profile.Beta.Gamma = false
+
+ Dongle:ClearDBDefaults()
+ assert(phidb.profile.Alpha == false)
+ assert(not phidb.profile.Beta)
+ assert(chidb.profile.Beta.Gamma == false)
+ assert(not chidb.profile.Alpha)
+end
+
+function test:dongle_set_profile()
+ assert_fails(function() Dongle.SetProfile("test") end, "You must
call 'SetProfile' from a Dongle database object.")
+ local psi = Dongle:New("Psi")
+ local db = psi:InitializeDB("PsiDB", {profile = {Alpha = true}})
+
+ assert_fails(function() db:SetProfile(1) end, argerror(2))
+
+ local regKey = string.format("%s - %s", UnitName("player"),
GetRealmName())
+ assert(db.keys.profile == regKey)
+ local old = db.profile
+
+ db:SetProfile("Test Profile")
+ assert(db.keys.profile == "Test Profile")
+ assert(old ~= db.profile)
+ assert(db.profile.Alpha == true)
+end
+
+function test:dongle_delete_profile()
+ assert_fails(function() Dongle.DeleteProfile("test") end, "You must
call 'DeleteProfile' from a Dongle database object.")
+ local omega = Dongle:New("Omega")
+ local db = omega:InitializeDB("OmegaDB")
+
+ assert_fails(function() db:DeleteProfile(1) end, argerror(2))
+
+ omega:RegisterMessage("DONGLE_PROFILE_DELETED")
+ function omega:DONGLE_PROFILE_DELETED()
+ omega.alpha = true
+ end
+
+ local regKey = string.format("%s - %s", UnitName("player"),
GetRealmName())
+ assert(db.keys.profile == regKey)
+ db:SetProfile("Test Profile")
+ assert_fails(function() db:DeleteProfile("Test Profile") end, "You cannot
delete your active profile. Change profiles, then attempt to delete.")
+
+ assert(not omega.alpha)
+ db:DeleteProfile(regKey)
+ assert(omega.alpha)
+ assert(not OmegaDB.profiles[regKey])
+end
+
+function test:dongle_copy_profile()
+ assert_fails(function() Dongle.CopyProfile("test") end, "You must
call 'CopyProfile' from a Dongle database object.")
+ local alice = Dongle:New("Alice")
+ local db = alice:InitializeDB("AliceDB")
+
+ assert_fails(function() db:CopyProfile(1) end, argerror(2))
+
+ alice:RegisterMessage("DONGLE_PROFILE_COPIED")
+ function alice:DONGLE_PROFILE_COPIED()
+ alice.alpha = true
+ end
+
+ db.profile.Alpha = true
+ db.profile.Beta = {Gamma = true}
+
+ local regKey = string.format("%s - %s", UnitName("player"),
GetRealmName())
+ assert(db.keys.profile == regKey)
+ db:SetProfile("Test Profile")
+ assert_fails(function() db:CopyProfile("Test Profile")
end, "Source/Destination profile cannot be the same profile")
+ db:CopyProfile(regKey)
+ assert(db.profile.Alpha == true)
+ assert(db.profile.Beta.Gamma == true)
+ assert(alice.alpha == true)
+end
+
+function test:dongle_reset_profile()
+ assert_fails(function() Dongle.ResetProfile() end, "You must
call 'ResetProfile' from a Dongle database object.")
+ local bob = Dongle:New("Bob")
+
+ bob:RegisterMessage("DONGLE_PROFILE_RESET")
+ function bob:DONGLE_PROFILE_RESET()
+ bob.alpha = true
+ end
+
+ local db = bob:InitializeDB("BobDB")
+
+ db.profile.Alpha = true
+ db.profile.Beta = {Gamma = true}
+
+ local regKey = string.format("%s - %s", UnitName("player"),
GetRealmName())
+ assert(db.keys.profile == regKey)
+
+ db:ResetProfile()
+
+ assert(db.profile.Alpha == nil)
+ assert(db.profile.Beta == nil)
+ assert(bob.alpha == true)
+end
+
+function test:dongle_reset_db()
+ assert_fails(function() Dongle.ResetDB() end, "You must call 'ResetDB'
from a Dongle database object.")
+ local carol = Dongle:New("carol")
+
+ carol:RegisterMessage("DONGLE_DATABASE_RESET")
+ carol:RegisterMessage("DONGLE_PROFILE_CHANGED")
+ carol:RegisterMessage("DONGLE_PROFILE_CREATED")
+
+ function carol:DONGLE_DATABASE_RESET()
+ carol.alpha = true
+ end
+ function carol:DONGLE_PROFILE_CHANGED()
+ carol.beta = true
+ end
+ function carol:DONGLE_PROFILE_CREATED()
+ carol.gamma = true
+ end
+
+ local db = carol:InitializeDB("carolDB")
+ db.profile.Alpha = true
+ db.profile.Beta = {Gamma = true}
+
+ local regKey = string.format("%s - %s", UnitName("player"),
GetRealmName())
+ assert(db.keys.profile == regKey)
+
+ db = db:ResetDB("SomeProfile")
+
+ assert(db.profile.Alpha == nil)
+ assert(db.profile.Beta == nil)
+ assert(carol.alpha == true)
+ assert(carol.beta == true)
+ assert(carol.gamma == true)
+ assert(db.keys.profile == "SomeProfile")
+end
+
+function test:dongle_db_retain_values()
+ local joan = Dongle:New("joan")
+ local defaults = {
+ profile = {
+ alpha = {
+ beta = false
+ },
+ gamma = false,
+ }
+ }
+
+ local db = joan:InitializeDB("joanDB", defaults)
+ db.profile.alpha.beta = true
+ db.profile.epsilon = true
+
+ -- Simulate logout/login
+ Dongle:ClearDBDefaults()
+
+ local rivers = Dongle:New("rivers")
+ db = rivers:InitializeDB("joanDB", defaults)
+
+ assert(db.profile.alpha.beta == true)
+ assert(db.profile.epsilon == true)
+ assert(db.profile.gamma == false)
+end
+
+function test:dongle_db_sv_globals()
+ local alpha = Dongle:New("alpha")
+ local db = alpha:InitializeDB("alphaDB")
+
+ betaDB = {}
+ local bdb = betaDB
+ local db2 = alpha:InitializeDB("betaDB")
+
+ assert(db.sv == alphaDB)
+ assert(db2.sv == betaDB)
+ assert(betaDB == bdb)
+end
+
+function test:dongle_db_list_profiles()
+ local dianne = Dongle:New("dianne")
+ local db = dianne:InitializeDB("dianneDB",nil,"Initial Profile")
+ assert(db.profile)
+ db:SetProfile("SomeProfile")
+ assert(db.profile)
+ db:SetProfile("SomeOtherProfile")
+ assert(db.profile)
+ local profiles = {["Initial Profile"] = 1, ["SomeProfile"] = 1,
["SomeOtherProfile"] = 1}
+ local p,n = db:GetProfiles()
+
+ for k,v in pairs(p) do
+ assert(profiles[v] == 1)
+ profiles[v] = nil
+ end
+ assert(next(profiles) == nil)
+ assert(#p == n)
+end
+
+function test:dongle_dynamic_db()
+ local dyn = Dongle:New("dynamictable")
+ dyn.db = dyn:InitializeDB("DYNDB")
+
+ for k,v in pairs(dyn.db.keys) do
+ assert(not rawget(dyn.db, k))
+ end
+end
+
+function test:dongle_db_namespaces()
+ local master = Dongle:New("masterDongle")
+ master.db = master:InitializeDB("MasterDB", nil, "Test Profile")
+
+ local child = Dongle:New("childDongle")
+ child.db = master.db:RegisterNamespace("myNamespace")
+
+ local key = "Test Profile"
+ assert(master.db.keys.profile == key)
+ assert(child.db.keys.profile == key)
+end
+
+
+function test:dongle_namespace_setprofile()
+ local master = Dongle:New("nstestprofilemaster")
+ master.db = master:InitializeDB("MasterDB")
+
+ local child = master:NewModule("nstestprofilechild")
+ child.db = master.db:RegisterNamespace("TestProfileNS")
+
+ assert(master.db.keys.profile == child.db.keys.profile)
+ master.db:SetProfile("TestProfileNS2")
+ assert(master.db.keys.profile == child.db.keys.profile)
+end
+
+function test:dongle_magic_tables()
+ local addon = Dongle:New("magic_tables")
+ local defaults = {
+ profile = {
+ subtable = {
+ ["*"] = {
+ alpha = 1,
+ beta = 2,
+ },
+ },
+ },
+ }
+
+ local db = addon:InitializeDB("magic_tablesDB", defaults)
+ assert(type(db.profile) == "table")
+ assert(type(db.profile.subtable) == "table")
+ assert(db.profile.subtable[1].alpha == 1)
+ assert(db.profile.subtable[1].beta == 2)
+
+ db.profile.subtable[1].beta = 3
+ Dongle:ClearDBDefaults()
+
+ assert(db.profile.subtable[1].alpha == nil)
+ assert(db.profile.subtable[1].beta == 3)
+end
+
+test:Run()
\ No newline at end of file

Added: tags/Dongle-1.0-r1174/DongleUnitTests/Tests/07DongleSlash.lua
==============================================================================
--- (empty file)
+++ tags/Dongle-1.0-r1174/DongleUnitTests/Tests/07DongleSlash.lua Tue Nov
18 14:37:38 2008
@@ -0,0 +1,75 @@
+local test = UnitTest:New("07DongleSlash")
+local Dongle = DongleStub("Dongle-1.0")
+
+function test:dongle_initialize_slash()
+ assert_fails(function() Dongle.InitializeSlashCommand({},"beta","beta
help") end, "You must call 'InitializeSlashCommand' from a registered
Dongle.")
+
+ local beta = Dongle:New("beta")
+ assert_fails(function() beta:InitializeSlashCommand() end, argerror(2))
+ assert_fails(function() beta:InitializeSlashCommand(1) end, argerror(2))
+ assert_fails(function() beta:InitializeSlashCommand("beta help") end,
argerror(3))
+ assert_fails(function() beta:InitializeSlashCommand("beta help", 1) end,
argerror(3))
+ assert_fails(function() beta:InitializeSlashCommand("beta help", "BETA")
end, argerror(4))
+ assert_fails(function() beta:InitializeSlashCommand("beta help", "BETA",
1) end, argerror(4))
+
+ local cmd = beta:InitializeSlashCommand("beta help", "BETA", "beta")
+ assert(type(cmd) == "table")
+end
+
+function test:dongle_register_slash_handler()
+ assert_fails(function() Dongle.RegisterSlashHandler() end, "You must
call 'RegisterSlashHandler' from a Dongle slash command object.")
+ local gamma = Dongle:New("gamma")
+ local cmd = gamma:InitializeSlashCommand("gamma help", "GAMMA", "gamma")
+
+ assert_fails(function() cmd:RegisterSlashHandler() end, argerror(2))
+ assert_fails(function() cmd:RegisterSlashHandler(1) end, argerror(2))
+ assert_fails(function() cmd:RegisterSlashHandler("gamma help") end,
argerror(3))
+ assert_fails(function() cmd:RegisterSlashHandler("gamma help", 1) end,
argerror(3))
+ assert_fails(function() cmd:RegisterSlashHandler("gamma help", "gamma")
end, argerror(4))
+ assert_fails(function() cmd:RegisterSlashHandler("gamma help", "gamma",
1) end, argerror(4))
+
+ cmd:RegisterSlashHandler("cmd2 help", "cmd2 pattern", "GammaFunc")
+ cmd:RegisterSlashHandler("cmd3 help", "cmd3 pattern", function() end)
+end
+
+function test:dongle_call_handler()
+ local delta = Dongle:New("delta")
+ local cmd = delta:InitializeSlashCommand("delta help", "DELTA", "delta")
+
+ local obj
+ cmd:RegisterSlashHandler("cmd1 help", "cmd1", function() obj = delta end)
+ assert(not obj)
+ _G.SlashCmdList.DELTA("cmd1")
+ assert(obj == delta)
+
+ obj = nil
+ cmd:RegisterSlashHandler("cmd2 help", "cmd2", "cmd2")
+ function delta:cmd2() obj = self end
+ assert(not obj)
+ _G.SlashCmdList.DELTA("cmd2")
+ assert(obj == delta)
+end
+
+function test:dongle_call_handler_parse()
+ local epsilon = Dongle:New("epsilon")
+ local cmd = epsilon:InitializeSlashCommand("epsilon
help", "EPSILON", "epsilon")
+
+ local obj, int
+ cmd:RegisterSlashHandler("cmd1 help", "cmd1 (%d+)", function(i) int = i
end)
+ assert(not int)
+ assert(not obj)
+ _G.SlashCmdList.EPSILON("cmd1")
+ assert(not int)
+ assert(not obj)
+ _G.SlashCmdList.EPSILON("cmd1 blarg")
+ assert(not int)
+ assert(not obj)
+ _G.SlashCmdList.EPSILON("cmd1 12345")
+ assert(int == "12345")
+end
+
+function test:dongle_print_usage()
+ assert_fails(function() Dongle.PrintUsage() end, "You must
call 'PrintUsage' from a Dongle slash command object.")
+end
+
+test:Run()

Added: tags/Dongle-1.0-r1174/DongleUnitTests/Tests/08DongleError.lua
==============================================================================
--- (empty file)
+++ tags/Dongle-1.0-r1174/DongleUnitTests/Tests/08DongleError.lua Tue Nov
18 14:37:38 2008
@@ -0,0 +1,55 @@
+local test = UnitTest:New("08DongleError")
+local Dongle = DongleStub("Dongle-1.0")
+
+local L = {
+ ["BAD_ARGUMENT"] = "bad argument #%d to '%s' (%s expected, got %s)",
+}
+
+-- This function is copied from Dongle.lua, and must be kept up to date
+local function argcheck(value, num, ...)
+ if type(num) ~= "number" then
+ error(L["BAD_ARGUMENT"]:format(2, "argcheck", "number", type(num)), 1)
+ end
+
+ for i=1,select("#", ...) do
+ if type(value) == select(i, ...) then return end
+ end
+
+ local types = strjoin(", ", ...)
+ local name = string.match(debugstack(2,2,0), ": in function [`<](.-)['>]")
+ error(L["BAD_ARGUMENT"]:format(num, name, types, type(value)), 3)
+end
+
+local function assert(level,condition,message)
+ if not condition then
+ error(message,level)
+ end
+end
+
+local Library = {}
+
+function Library:API_Function(arg1)
+ argcheck(arg1, 2, "number")
+end
+
+function Library:API_Fail(arg1)
+ assert(3, reg, "This call to 'API_Fail' is expected to fail.")
+end
+
+local function argcheck_help()
+ Library:API_Function()
+end
+
+local function assert_help()
+ Library:API_Fail()
+end
+
+function test:dongle_argcheck_error()
+ assert_fails(argcheck_help, "08DongleError.lua:40: bad argument #2
to 'API_Function'")
+end
+
+function test:dongle_assert_error()
+ assert_fails(assert_help, "08DongleError.lua:44", "This call
to 'API_Fail' is expected to fail.")
+end
+
+test:Run()
\ No newline at end of file

Added: tags/Dongle-1.0-r1174/DongleUnitTests/Tests/99Completion.lua
==============================================================================
--- (empty file)
+++ tags/Dongle-1.0-r1174/DongleUnitTests/Tests/99Completion.lua Tue Nov 18
14:37:38 2008
@@ -0,0 +1,22 @@
+local test = UnitTest:New("99Completion")
+
+local tests = {
+ "01DongleStub",
+ "02DongleCore",
+ "03DongleModules",
+ "04DongleMessage",
+ "05DonglePrint",
+ "06DongleDB",
+ "07DongleSlash",
+ "08DongleError",
+ "99Completion",
+}
+
+for k,v in pairs(tests) do
+ test[v] = function(self)
+ assert(__unitTests[v] == true)
+ end
+end
+
+test:Run()
+

Added: tags/Dongle-1.0-r1174/DongleUnitTests/UnitTests.lua
==============================================================================
--- (empty file)
+++ tags/Dongle-1.0-r1174/DongleUnitTests/UnitTests.lua Tue Nov 18 14:37:38
2008
@@ -0,0 +1,123 @@
+UnitTest = {}
+
+function assert_fails(func, ...)
+ local done,err = pcall(func)
+ for i=1,select("#", ...) do
+ local msg = select(i, ...)
+ assert(not done and string.find(err, msg), "\n|cffffff00Did not find
fails match: |r\n" .. msg .. "\n|cffffff00In error:|r \n" ..
tostring(err) .. "\n|cffffff00Stack traceback:|r\n"..
tostring(debugstack()))
+ end
+ assert(not done, "Function did not fail")
+end
+
+function argerror(arg)
+ return string.format("bad argument #%d", arg)
+end
+
+local function xerr(msg)
+ return msg .. "\n" .. debugstack()
+end
+
+local function cleanError(err)
+ err = err:gsub(".*(|c%x+Did not find fails match:)","%1")
+ err = err:gsub("[^\n]*\\([^\\]+%.lua:%d+:)","%1")
+ return err
+end
+
+local frame = CreateFrame("ScrollingMessageFrame", "UnitTestFrame",
UIParent)
+frame:SetHeight(400)
+frame:SetWidth(600)
+frame:SetPoint("CENTER", 0, 0)
+local backdrop =
+{
+ bgFile = "Interface/Tooltips/UI-Tooltip-Background",
+ tile = false,
+ tileSize = 6,
+ edgeSize = 18,
+ insets = {
+ left = -4,
+ right = -4,
+ top = -4,
+ bottom = -4
+ }
+}
+frame:SetBackdrop(backdrop)
+frame:SetBackdropColor(0.3, 0.3, 0.3)
+
+frame:SetFont("Interface\\AddOns\\DongleUnitTests\\MONACO.TTF", 14)
+frame:SetJustifyH("LEFT")
+frame:SetFadeDuration(10)
+frame:SetTimeVisible(180)
+frame:SetMaxLines(9999)
+frame:SetScript("OnMouseWheel", function (self, delta)
+ if delta > 0 then self:ScrollUp()
+ elseif delta < 0 then
+ if IsShiftKeyDown() then self:ScrollToBottom()
+ else self:ScrollDown() end
+ end
+end)
+frame:EnableMouseWheel(1)
+local fails = {}
+frame:SetScript("OnHyperlinkClick",function(self, link, text, button)
+
+ ItemRefTooltip:ClearLines()
+ ItemRefTooltip:SetOwner(UIParent,"ANCHOR_PRESERVE")
+
+ local failID, testName = link:match("fail:(%d+):([%a_]+)")
+ failID = tonumber(failID)
+ local errString = cleanError(fails[failID])
+
+ ItemRefTooltip:AddLine(testName,1,.2,.2)
+
+ for line in errString:gmatch("([^\n]*)") do
+ ItemRefTooltip:AddLine(line,1,1,1)
+ end
+
+ ItemRefTooltip:Show()
+end)
+
+
+local print = function(msg)
+ UnitTestFrame:AddMessage(msg)
+end
+
+local __unitTests = {}
+
+function UnitTest:New(it, name)
+ if type(it) == "string" then
+ name = it
+ it = nil
+ end
+
+ it = it or {}
+ setmetatable(it, self)
+ self.__index = self
+ __unitTests[name] = true
+ return it
+end
+
+function UnitTest:Run(...)
+ local function run_test(t, name)
+ local genv = getfenv(0)
+ local penv = setmetatable({["__unitTests"] = __unitTests},
{__index=genv})
+ setfenv(t, penv)
+ setfenv(0, penv)
+ local status, err = xpcall(t, xerr)
+ setfenv(0, genv)
+
+ if status then
+ print(("%-39s |cFF11FF11pass|r"):format("[" .. name .. "]"))
+ else
+ local failID = #fails + 1
+ fails[failID] = err
+ print(("%-38s |cFFFF1111|Hfail:%d:%s|h[FAIL]|h|r"):format("[" ..
name .. "]", failID, name))
+ end
+
+ for k,v in pairs(penv) do
+ --print(string.format("%-39s |cFFFFFF11Global leak: %s|r", "", k))
+ end
+ end
+
+ for k, v in pairs(self) do
+ run_test(v, k)
+ end
+end

Added: tags/Dongle-1.0-r1174/changelog.txt
==============================================================================
--- (empty file)
+++ tags/Dongle-1.0-r1174/changelog.txt Tue Nov 18 14:37:38 2008
@@ -0,0 +1,3331 @@
+------------------------------------------------------------------------
+r674 | jnwhiteh | 2008-11-18 22:35:54 +0000 (Tue, 18 Nov 2008) | 2 lines
+
+* Fix for a typo in :GetProfiles() error checking
+
+------------------------------------------------------------------------
+r673 | shadowed.wow | 2008-05-03 09:49:24 +0100 (Sat, 03 May 2008) | 1 line
+
+* For some reason, LibStub.lua wasn't referenced in the toc so if you
didn't have another addon using LibStub it'd error.
+------------------------------------------------------------------------
+r672 | shadowed.wow | 2008-04-25 06:00:51 +0100 (Fri, 25 Apr 2008) | 1 line
+
+* Importing OptionHouseLib-r669 library
+------------------------------------------------------------------------
+r671 | shadowed.wow | 2008-04-25 06:00:45 +0100 (Fri, 25 Apr 2008) | 1 line
+
+* Importing OptionHouse-r669 addon
+------------------------------------------------------------------------
+r670 | shadowed.wow | 2008-04-25 06:00:38 +0100 (Fri, 25 Apr 2008) | 1 line
+
+* Creating directory for OptionHouse-r669
+------------------------------------------------------------------------
+r669 | shadowed.wow | 2008-04-25 05:56:21 +0100 (Fri, 25 Apr 2008) | 3
lines
+
+* You can now open OH through the API's while in combat
+* When using standalone, you can set the OH frame to hide in combat by
default it won't
+* Fixed positioning when using standalone, will account for scale
correctly now
+------------------------------------------------------------------------
+r668 | shadowed.wow | 2008-03-08 00:01:05 +0000 (Sat, 08 Mar 2008) | 2
lines
+
+* Fixed memory calculations, uses 1024 correctly now instead of 1000
+* Fixed a bug with dividing total memory by 1024 when the total memory was
only above 100 instead of when above 1024
+------------------------------------------------------------------------
+r667 | jnwhiteh | 2008-01-29 16:06:12 +0000 (Tue, 29 Jan 2008) | 2 lines
+
+* Tagging Dongle-1.2-r666
+
+------------------------------------------------------------------------
+r666 | jnwhiteh | 2008-01-29 16:05:16 +0000 (Tue, 29 Jan 2008) | 2 lines
+
+* Changed major version for Dongle-1.2
+
+------------------------------------------------------------------------
+r665 | jnwhiteh | 2008-01-29 16:03:42 +0000 (Tue, 29 Jan 2008) | 2 lines
+
+* Altered :IsEventRegistered(event) so it properly returns a boolean
value, indicating if the given dongle has registered for the given event
+
+------------------------------------------------------------------------
+r664 | jnwhiteh | 2008-01-29 15:58:53 +0000 (Tue, 29 Jan 2008) | 2 lines
+
+* Copying Dongle-1.1 to Dongle-1.2
+
+------------------------------------------------------------------------
+r663 | jnwhiteh | 2008-01-29 15:57:51 +0000 (Tue, 29 Jan 2008) | 2 lines
+
+* Reverting previous change
+
+------------------------------------------------------------------------
+r662 | jnwhiteh | 2008-01-29 15:55:27 +0000 (Tue, 29 Jan 2008) | 2 lines
+
+* Altered Dongle:IsEventRegistered(event) so it properly returns a boolean
value, indicating if the given dongle has registered for the given event
+
+------------------------------------------------------------------------
+r661 | shadowed.wow | 2008-01-13 04:33:14 +0000 (Sun, 13 Jan 2008) | 5
lines
+
+* Changed expansion method, if you select a sub category then select the
category it'll switch to the categories panel instead of collapsing the sub
category
+* Fixed OptionHouse:OpenTab not letting you open the last tab
+* Fixed sortID not accepting strings or numbers, used to only accept
numbers
+* Fixed a bug where when you scroll it attempts to reopen the currently
selected frame
+* Added graph checks to tabs so it'll support them
+------------------------------------------------------------------------
+r660 | shadowed.wow | 2007-12-09 19:46:46 +0000 (Sun, 09 Dec 2007) | 1 line
+
+* Fixed an addon missing from the management list but could still be
searched to bring it up
+------------------------------------------------------------------------
+r659 | shadowed.wow | 2007-11-28 22:03:59 +0000 (Wed, 28 Nov 2007) | 1 line
+
+* Importing OptionHouseLib-r656 library
+------------------------------------------------------------------------
+r658 | shadowed.wow | 2007-11-28 22:03:49 +0000 (Wed, 28 Nov 2007) | 1 line
+
+* Importing OptionHouse-r656 addon
+------------------------------------------------------------------------
+r657 | shadowed.wow | 2007-11-28 22:03:36 +0000 (Wed, 28 Nov 2007) | 1 line
+
+* Creating directory for OptionHouse-r656
+------------------------------------------------------------------------
+r656 | shadowed.wow | 2007-11-28 21:53:56 +0000 (Wed, 28 Nov 2007) | 1 line
+
+* Fixed a sorting bug where the sortID wouldn't be set if you were adding
a new category with a new set of data that didn't include the sortID. No
longer creates a table just to store sortID as well.
+------------------------------------------------------------------------
+r655 | joshborke | 2007-11-28 20:31:33 +0000 (Wed, 28 Nov 2007) | 1 line
+
+OH: fix sorting bug
+------------------------------------------------------------------------
+r654 | jnwhiteh | 2007-11-28 19:57:05 +0000 (Wed, 28 Nov 2007) | 2 lines
+
+* Fixed two typos from previous commit
+
+------------------------------------------------------------------------
+r653 | jnwhiteh | 2007-11-28 19:55:58 +0000 (Wed, 28 Nov 2007) | 5 lines
+
+OptionHouse:
+* You know whats cool? When your perfmon addon wastes memory
+* L["FOO"] .. string.format() has to be the stupidest thing I've seen
today =(
+* Fixed OptionHouse to use SetFormattedText, and to not create two garbage
strings on every single update. Jeesh
+
+------------------------------------------------------------------------
+r652 | shadowed.wow | 2007-11-18 20:08:56 +0000 (Sun, 18 Nov 2007) | 1 line
+
+* Fixed "Status" under addon management tab not sorting
+------------------------------------------------------------------------
+r651 | jnwhiteh | 2007-11-15 13:40:51 +0000 (Thu, 15 Nov 2007) | 2 lines
+
+* .toc bump for 2.3
+
+------------------------------------------------------------------------
+r650 | jnwhiteh | 2007-11-12 20:07:06 +0000 (Mon, 12 Nov 2007) | 2 lines
+
+* Tagging and importing Dongle-1.1-r649
+
+------------------------------------------------------------------------
+r649 | jnwhiteh | 2007-11-12 20:06:06 +0000 (Mon, 12 Nov 2007) | 2 lines
+
+* Updated build script to pull correct DongleUnitTests
+
+------------------------------------------------------------------------
+r648 | jnwhiteh | 2007-11-12 20:05:42 +0000 (Mon, 12 Nov 2007) | 2 lines
+
+* Tagging Dongle-1.0-r1146
+
+------------------------------------------------------------------------
+r647 | jnwhiteh | 2007-11-12 20:05:11 +0000 (Mon, 12 Nov 2007) | 2 lines
+
+* Patching the fixes for GetProfile and RegisterNamespace() applied to
Dongle-1.10
+
+------------------------------------------------------------------------
+r646 | jnwhiteh | 2007-11-12 20:04:14 +0000 (Mon, 12 Nov 2007) | 2 lines
+
+* Updated a bad argcheck
+
+------------------------------------------------------------------------
+r645 | jnwhiteh | 2007-11-12 20:03:13 +0000 (Mon, 12 Nov 2007) | 2 lines
+
+* Update to Build.lua to export the right unit tests
+
+------------------------------------------------------------------------
+r644 | jnwhiteh | 2007-11-12 19:51:33 +0000 (Mon, 12 Nov 2007) | 2 lines
+
+* Renaming DongleUnitTests-1.1 for consistency
+
+------------------------------------------------------------------------
+r643 | jnwhiteh | 2007-11-12 19:46:37 +0000 (Mon, 12 Nov 2007) | 2 lines
+
+Dongle-1.0: Patch for :GetProfiles() issue reported in issue #29
+
+------------------------------------------------------------------------
+r642 | shadowed.wow | 2007-11-10 21:25:42 +0000 (Sat, 10 Nov 2007) | 1 line
+
+* Fixed dependency display bug
+------------------------------------------------------------------------
+r641 | shadowed.wow | 2007-11-01 06:27:55 +0000 (Thu, 01 Nov 2007) | 1 line
+
+* Importing OptionHouseLib-r638 library
+------------------------------------------------------------------------
+r640 | shadowed.wow | 2007-11-01 06:27:39 +0000 (Thu, 01 Nov 2007) | 1 line
+
+* Importing OptionHouse-r638 addon
+------------------------------------------------------------------------
+r639 | shadowed.wow | 2007-11-01 06:27:16 +0000 (Thu, 01 Nov 2007) | 1 line
+
+* Creating directory for OptionHouse-r638
+------------------------------------------------------------------------
+r638 | shadowed.wow | 2007-11-01 00:02:16 +0000 (Thu, 01 Nov 2007) | 1 line
+
+* Fixed a bug with OnShow not verifying that theres actually a
OptionHouseDB
+------------------------------------------------------------------------
+r637 | shadowed.wow | 2007-10-26 20:18:19 +0100 (Fri, 26 Oct 2007) | 1 line
+
+* Importing OptionHouseLib-r634 library
+------------------------------------------------------------------------
+r636 | shadowed.wow | 2007-10-26 20:18:09 +0100 (Fri, 26 Oct 2007) | 1 line
+
+* Importing OptionHouse-r634 addon
+------------------------------------------------------------------------
+r635 | shadowed.wow | 2007-10-26 20:17:51 +0100 (Fri, 26 Oct 2007) | 1 line
+
+* Creating directory for OptionHouse-r634
+------------------------------------------------------------------------
+r634 | shadowed.wow | 2007-10-26 20:08:26 +0100 (Fri, 26 Oct 2007) | 1 line
+
+* Okay, NOW it's backwards compatible, also includes a safe-fail incase
sortID manages to become nil when adding it to the categories list
+------------------------------------------------------------------------
+r633 | shadowed.wow | 2007-10-26 20:03:24 +0100 (Fri, 26 Oct 2007) | 5
lines
+
+* Fixed position not being saved correctly
+* Sorting is now supported. Addons are sorted by A-Z regardless of order
loaded, categories and sub categories are also sorted by A-Z, unless a sort
id is passed.
+* API CHANGE, OHObj:RegisterCategory(name, handler/func, func, noCache,
sortID), OHObj:RegisterSubCategory(parentCat, name, handler/func, func,
noCache, sortID)
+
+These are backwards compatabile so the major hasn't been bumped.
+------------------------------------------------------------------------
+r632 | jnwhiteh | 2007-10-20 17:28:39 +0100 (Sat, 20 Oct 2007) | 2 lines
+
+* Tagging Dongle-1.1-r630 *NEEDS TESTING*
+
+------------------------------------------------------------------------
+r631 | jnwhiteh | 2007-10-20 17:28:02 +0100 (Sat, 20 Oct 2007) | 2 lines
+
+* Tagging Dongle-1.0-r1129. *NEEDS TESTING*
+
+------------------------------------------------------------------------
+r630 | jnwhiteh | 2007-10-20 17:22:46 +0100 (Sat, 20 Oct 2007) | 3 lines
+
+* Due to timing issues with the IsLoggedIn() API, the loading process for
Dongle has been revamped. As a result addons should upgrade to the latest
version possible in order to help us test.
+* An addon's :Enable() method could end up being called before
PLAYER_LOGIN, in particular during the first ADDON_LOADED after the
IsLoggedIn() return changes. No adjustements should be necessary, the
behavior is consistent with current Dongle.
+
+------------------------------------------------------------------------
+r629 | jnwhiteh | 2007-10-20 17:22:24 +0100 (Sat, 20 Oct 2007) | 3 lines
+
+* Due to timing issues with the IsLoggedIn() API, the loading process for
Dongle has been revamped. As a result addons should upgrade to the latest
version possible in order to help us test.
+* An addon's :Enable() method could end up being called before
PLAYER_LOGIN, in particular during the first ADDON_LOADED after the
IsLoggedIn() return changes. No adjustements should be necessary, the
behavior is consistent with current Dongle.
+
+------------------------------------------------------------------------
+r628 | shadowed.wow | 2007-10-16 06:06:43 +0100 (Tue, 16 Oct 2007) | 2
lines
+
+* We refer to OptionHouse as "OptionHouse" not "Option House" basically
every where except for the combat entered message
+* Enforced not being able to open OptionHouse in combat through OH:Open
and OH:OpenTab instead of only when you enter combat, may revert this later.
+------------------------------------------------------------------------
+r627 | shadowed.wow | 2007-10-05 18:53:41 +0100 (Fri, 05 Oct 2007) | 1 line
+
+* Added moving back and the lock/unlock option
+------------------------------------------------------------------------
+r626 | shadowed.wow | 2007-09-30 21:43:42 +0100 (Sun, 30 Sep 2007) | 2
lines
+
+* Fixed OptionHouse:OpenTab(#) not letting you open the management or
performance tab until OptionHouse had been opened once
+* Fixed positioning of dependencies, if the addon has more then 3
dependencies they shouldn't start overlapping in the management tab
+------------------------------------------------------------------------
+r625 | shadowed.wow | 2007-09-26 03:31:32 +0100 (Wed, 26 Sep 2007) | 2
lines
+
+* It looks like Blizzard fixed doublewide UIPanelLayout-area being broken
so uncommented it
+* If OptionHouse is opened from the game menu, closing OptionHouse will
pull the game menu back up like it does for other game menu panels
+------------------------------------------------------------------------
+r624 | shadowed.wow | 2007-09-25 21:58:04 +0100 (Tue, 25 Sep 2007) | 1 line
+
+* Updated toc to 20200
+------------------------------------------------------------------------
+r623 | shadowed.wow | 2007-09-22 19:47:55 +0100 (Sat, 22 Sep 2007) | 1 line
+
+* Removing OptionHouseFrames as it causes conflict issues and due to the
frame level and such changes you need to be sure you're getting the right
frame
+------------------------------------------------------------------------
+r622 | shadowed.wow | 2007-09-21 09:19:21 +0100 (Fri, 21 Sep 2007) | 1 line
+
+* Importing OptionHouseLib-r619 library
+------------------------------------------------------------------------
+r621 | shadowed.wow | 2007-09-21 09:19:15 +0100 (Fri, 21 Sep 2007) | 1 line
+
+* Importing OptionHouse-r619 addon
+------------------------------------------------------------------------
+r620 | shadowed.wow | 2007-09-21 09:19:04 +0100 (Fri, 21 Sep 2007) | 1 line
+
+* Creating directory for OptionHouse-r619
+------------------------------------------------------------------------
+r619 | shadowed.wow | 2007-09-21 09:18:03 +0100 (Fri, 21 Sep 2007) | 2
lines
+
+* Removed the temp DongleStub -> LibStub code, this will be the version
that goes out Tuesday with the World of Warcraft 2.2 patch being released
+* MAKE SURE YOU UPDATE ALL OF YOUR ADDONS TO USE THIS VERSION, Any
non-LibStub version will not show up in the configuration list
+------------------------------------------------------------------------
+r618 | shadowed.wow | 2007-09-10 04:44:53 +0100 (Mon, 10 Sep 2007) | 1 line
+
+* Importing OptionHouseLib-r615 library
+------------------------------------------------------------------------
+r617 | shadowed.wow | 2007-09-10 04:44:45 +0100 (Mon, 10 Sep 2007) | 1 line
+
+* Importing OptionHouse-r615 addon
+------------------------------------------------------------------------
+r616 | shadowed.wow | 2007-09-10 04:44:34 +0100 (Mon, 10 Sep 2007) | 1 line
+
+* Creating directory for OptionHouse-r615
+------------------------------------------------------------------------
+r615 | shadowed.wow | 2007-09-08 22:01:32 +0100 (Sat, 08 Sep 2007) | 1 line
+
+* Fixed an upgrade path issue
+------------------------------------------------------------------------
+r614 | jnwhiteh | 2007-09-06 00:32:55 +0100 (Thu, 06 Sep 2007) | 2 lines
+
+* Tagging Dongle-1.0-r1013
+
+------------------------------------------------------------------------
+r613 | jnwhiteh | 2007-09-06 00:31:19 +0100 (Thu, 06 Sep 2007) | 2 lines
+
+* Tagging Dongle-1.1-RC#
+
+------------------------------------------------------------------------
+r612 | jnwhiteh | 2007-09-06 00:30:00 +0100 (Thu, 06 Sep 2007) | 2 lines
+
+* Fixed a typo in DongleDB:GetCurrentProfile()
+
+------------------------------------------------------------------------
+r611 | jnwhiteh | 2007-09-06 00:29:20 +0100 (Thu, 06 Sep 2007) | 2 lines
+
+* Fixed an issue in GetCurrentProfile()
+
+------------------------------------------------------------------------
+r610 | jnwhiteh | 2007-09-06 00:17:00 +0100 (Thu, 06 Sep 2007) | 2 lines
+
+* Tagging Dongle-1.1-RC2. If no issues are found, will be released as
Dongle-1.1.
+
+------------------------------------------------------------------------
+r609 | jnwhiteh | 2007-09-06 00:13:50 +0100 (Thu, 06 Sep 2007) | 2 lines
+
+* Bugfix to Dongle-1.1 when upgrading
+
+------------------------------------------------------------------------
+r608 | shadowed.wow | 2007-09-05 09:00:03 +0100 (Wed, 05 Sep 2007) | 1 line
+
+* Updated build script to work with LibStub
+------------------------------------------------------------------------
+r607 | shadowed.wow | 2007-09-05 08:58:50 +0100 (Wed, 05 Sep 2007) | 1 line
+
+* Importing OptionHouseLib-r604 library
+------------------------------------------------------------------------
+r606 | shadowed.wow | 2007-09-05 08:58:43 +0100 (Wed, 05 Sep 2007) | 1 line
+
+* Importing OptionHouse-r604 addon
+------------------------------------------------------------------------
+r605 | shadowed.wow | 2007-09-05 08:58:33 +0100 (Wed, 05 Sep 2007) | 1 line
+
+* Creating directory for OptionHouse-r604
+------------------------------------------------------------------------
+r604 | shadowed.wow | 2007-09-05 08:35:49 +0100 (Wed, 05 Sep 2007) | 1 line
+
+* Fixed categories not trimming strings to long for the buttons
+------------------------------------------------------------------------
+r603 | mikko.majuri | 2007-09-03 14:46:46 +0100 (Mon, 03 Sep 2007) | 1 line
+
+OH_PerfMon.lua and OH_AddOns.lua bumped to OptionHouse-1.1
+------------------------------------------------------------------------
+r602 | shadowed.wow | 2007-09-03 07:33:46 +0100 (Mon, 03 Sep 2007) | 3
lines
+
+* OptionHouse now uses LibStub, some temp code has been added to merge any
addons added into the OptionHouse-1.0
+* MAJOR HAS BEEN BUMPED, Any LibStub version will now be referred to as
OptionHouse-1.1.
+* Added LibStub as an optional dependency
+------------------------------------------------------------------------
+r601 | joshborke | 2007-09-01 13:26:03 +0100 (Sat, 01 Sep 2007) | 1 line
+
+OptionHouse: fixed typo
+------------------------------------------------------------------------
+r600 | shadowed.wow | 2007-08-31 22:23:22 +0100 (Fri, 31 Aug 2007) | 4
lines
+
+* Fixed some code comments
+* Removed an unneeded return
+* Removed orderID usage, not used anymore
+* Changed private API RegisterFrame to error if you pass an invalid type
+------------------------------------------------------------------------
+r599 | shadowed.wow | 2007-08-30 18:47:10 +0100 (Thu, 30 Aug 2007) | 3
lines
+
+* Fixed configuration not being parented to OH
+* Changed updateConfigList to also open the panel if you pass true as the
first argument
+* Changed OptionHouse:Open(addon, parentCat, subCat) to simply call
updateConfigList to open the frames, this should cause less issues and work
perfectly now
+------------------------------------------------------------------------
+r598 | jnwhiteh | 2007-08-30 05:09:18 +0100 (Thu, 30 Aug 2007) | 2 lines
+
+* Fix when accessing profileKeys, which exists in sv instead of db
+
+------------------------------------------------------------------------
+r597 | shadowed.wow | 2007-08-29 23:27:47 +0100 (Wed, 29 Aug 2007) | 1 line
+
+* Removed reset filters button, it seems rather pointless and just wastes
space
+------------------------------------------------------------------------
+r596 | shadowed.wow | 2007-08-29 02:45:11 +0100 (Wed, 29 Aug 2007) | 1 line
+
+* Importing OptionHouseLib-r593 library
+------------------------------------------------------------------------
+r595 | shadowed.wow | 2007-08-29 02:45:04 +0100 (Wed, 29 Aug 2007) | 1 line
+
+* Importing OptionHouse-r593 addon
+------------------------------------------------------------------------
+r594 | shadowed.wow | 2007-08-29 02:44:52 +0100 (Wed, 29 Aug 2007) | 1 line
+
+* Creating directory for OptionHouse-r593
+------------------------------------------------------------------------
+r593 | shadowed.wow | 2007-08-29 02:13:30 +0100 (Wed, 29 Aug 2007) | 1 line
+
+* Fixed OptionHouse:Open not opening categories with sub categories
+------------------------------------------------------------------------
+r592 | tekkub | 2007-08-29 00:58:54 +0100 (Wed, 29 Aug 2007) | 1 line
+
+OptionHouse - Shoving everything up to DIALOG strata
+------------------------------------------------------------------------
+r591 | shadowed.wow | 2007-08-25 05:22:20 +0100 (Sat, 25 Aug 2007) | 1 line
+
+* OptionHouse:Open() actually works now, promise
+------------------------------------------------------------------------
+r590 | shadowed.wow | 2007-08-24 22:16:08 +0100 (Fri, 24 Aug 2007) | 1 line
+
+* Trying out a fix for category text trimming so it doesn't overflow
+------------------------------------------------------------------------
+r589 | shadowed.wow | 2007-08-24 05:33:19 +0100 (Fri, 24 Aug 2007) | 2
lines
+
+* Fixed a few scroll functions not being actual functions and instead
anonymous ones
+* Added OptionHouseFrames[type] for usage when you can't/don't want to
create a new instance of OptionHouse just to call :GetFrame()
+------------------------------------------------------------------------
+r588 | shadowed.wow | 2007-08-23 00:04:56 +0100 (Thu, 23 Aug 2007) | 1 line
+
+* Formatting addon.name into the argcheck was kind of pointless...because
the argcheck is only called if addon.name is nil, corrected to use the
function name instead
+------------------------------------------------------------------------
+r587 | shadowed.wow | 2007-08-20 21:35:47 +0100 (Mon, 20 Aug 2007) | 1 line
+
+* Removed the code for loading LoD deps as the game does it by default
+------------------------------------------------------------------------
+r586 | shadowed.wow | 2007-08-20 21:29:32 +0100 (Mon, 20 Aug 2007) | 3
lines
+
+* Added a small flag so the performance/acp list is populated then the
frames shown, to make it easier to detect that the data is usable
+* Removed an old localization thats no longer in used
+* Clarified private api comment
+------------------------------------------------------------------------
+r585 | shadowed.wow | 2007-08-19 00:44:28 +0100 (Sun, 19 Aug 2007) | 1 line
+
+* Importing OptionHouseLib-r582 library
+------------------------------------------------------------------------
+r584 | shadowed.wow | 2007-08-19 00:44:20 +0100 (Sun, 19 Aug 2007) | 1 line
+
+* Importing OptionHouse-r582 addon
+------------------------------------------------------------------------
+r583 | shadowed.wow | 2007-08-19 00:44:09 +0100 (Sun, 19 Aug 2007) | 1 line
+
+* Creating directory for OptionHouse-r582
+------------------------------------------------------------------------
+r582 | shadowed.wow | 2007-08-18 17:46:17 +0100 (Sat, 18 Aug 2007) | 1 line
+
+* Fixed an error if an addon has a dependency listed thats not included
+------------------------------------------------------------------------
+r581 | shadowed.wow | 2007-08-18 05:16:36 +0100 (Sat, 18 Aug 2007) | 5
lines
+
+* /oh <addon> will now work for opening the page with the passed addon
+* Fixed OptionHouse:Open and all of the OptionHouse:Register* functions
that were still using the old frame names
+* Dependency filtering works now, the dependencies are colored by status
(Green means LoD, Orange means not LoD and was disabled and so on), works
the same as modules. Click on a dependency to filter by it, click on it
again to reset
+* Fixed sub category count not being reduced correctly when removing a
category
+* Fixed all the remaining bugs with OptionHouse:RemoveCategory and
OptionHouse:RemoveSubCategory, you can now remove everything cleanly and
it'll correctly duplicate the behaviors as if it was never registered in
the first place, if you remove all of the addons categories/sub categories
the addon wont be listed anymore until you add another category
+------------------------------------------------------------------------
+r580 | shadowed.wow | 2007-08-18 00:05:05 +0100 (Sat, 18 Aug 2007) | 11
lines
+
+* Removed modules, didn't work so well
+* All addons dependencies are now listed, you can filter by them by
clicking same with the old modules to only show other addons that are
dependent on it
+* Cleaned up dependency checking code to use the new table we have
+* Removed dependencies from tooltip since it's listed on the main window
+* Removed addonName from rows, easier to use it as addon since we don't
require a numeric id
+* Added reset filter button, ReloadUI was shifted one spot to the left
+* Clarified UNKNOWN_TAB and CATEGORY_ALREADYREG error, removed
TOTAL_CATEGORIES
+* Formatting change to some code for consistency
+* Moved SetID/SetScript to when the tab is created, no sense in calling it
all the time
+* Fixed removeCategoryListing so it'll actually work when removing
multiple rows
+* Changed removeSubCategoryListing to use the same table.remove method as
everything else
+------------------------------------------------------------------------
+r579 | shadowed.wow | 2007-08-17 09:07:48 +0100 (Fri, 17 Aug 2007) | 3
lines
+
+* Removed FRAME_DRAGGING localization text, unneeded
+* Removed data.frame.time = GetTime() code, should have been removed in
r460
+* Moved the slider "border" graphic to scroll.barUpTexture and
scroll.barDownTexture so we can customize positioning
+------------------------------------------------------------------------
+r578 | shadowed.wow | 2007-08-17 06:52:02 +0100 (Fri, 17 Aug 2007) | 4
lines
+
+* Changed title strip code slightly
+* Reverted module to using folder name not title
+* Fixed "Show all addons" not working
+* Modules -> Module
+------------------------------------------------------------------------
+r577 | shadowed.wow | 2007-08-16 22:56:47 +0100 (Thu, 16 Aug 2007) | 2
lines
+
+* Fixed a bug when enabling all children of an addon
+* Fixed a bug when asking for confirmation for the above
+------------------------------------------------------------------------
+r576 | shadowed.wow | 2007-08-16 18:01:47 +0100 (Thu, 16 Aug 2007) | 1 line
+
+* Importing OptionHouseLib-r573 library
+------------------------------------------------------------------------
+r575 | shadowed.wow | 2007-08-16 18:01:16 +0100 (Thu, 16 Aug 2007) | 1 line
+
+* Importing OptionHouse-r573 addon
+------------------------------------------------------------------------
+r574 | shadowed.wow | 2007-08-16 18:00:34 +0100 (Thu, 16 Aug 2007) | 1 line
+
+* Creating directory for OptionHouse-r573
+------------------------------------------------------------------------
+r573 | shadowed.wow | 2007-08-16 04:11:44 +0100 (Thu, 16 Aug 2007) | 1 line
+
+* Oops, small bug that was causing the buttons for performance to not show
+------------------------------------------------------------------------
+r572 | shadowed.wow | 2007-08-16 04:08:29 +0100 (Thu, 16 Aug 2007) | 4
lines
+
+* Everything actually works now
+* Fixed performance alignment
+* Fixed cpu/memory per a second spiking for a second when the frames first
shown
+* Tweaked positioning of elements in the performance column
+------------------------------------------------------------------------
+r571 | shadowed.wow | 2007-08-16 00:21:56 +0100 (Thu, 16 Aug 2007) | 1 line
+
+* Oops, was formatting wrong variable in for MiR
+------------------------------------------------------------------------
+r570 | shadowed.wow | 2007-08-16 00:01:31 +0100 (Thu, 16 Aug 2007) | 2
lines
+
+* Fixed a bug that was causing Mac's to crash due to an invalid max value
+* Changed Memory/sec -> Mem/sec
+------------------------------------------------------------------------
+r569 | JoshBorke | 2007-08-15 23:47:57 +0100 (Wed, 15 Aug 2007) | 1 line
+
+OptionHouse/OH_PerfMon.lua: fixed typo
+------------------------------------------------------------------------
+r568 | shadowed.wow | 2007-08-15 22:58:50 +0100 (Wed, 15 Aug 2007) | 7
lines
+
+* Removed the frame name variables that didn't get cleaned up
+* Fixed a global variable in OH_PerfMon.lua
+* Fixed some bad variables names in OH_AddOns.lua and OH_PerfMon.lua
+* Improved addon table creation for OH_AddOns.lua the entire addons table
is only populated once and then individual addons are updated when needed
+* Added status for Load on Demand addons that are already loaded
+* Added parent addon detection.
+For example LightHeaded, LightHeaded_A20_Data, LightHeaded_A40_Data.
A20_Data and A40_Data are children of LightHeaded you can only show addons
that are children of LightHeaded by clicking on the "LightHeaded" text in
the parent column, you can also sort by parent just like name and status
+------------------------------------------------------------------------
+r567 | shadowed.wow | 2007-08-15 15:00:10 +0100 (Wed, 15 Aug 2007) | 1 line
+
+* Fixed results of a search being shown at the bottom
+------------------------------------------------------------------------
+r566 | JoshBorke | 2007-08-15 12:42:37 +0100 (Wed, 15 Aug 2007) | 1 line
+
+OptionHouse: fixed leaked global
+------------------------------------------------------------------------
+r565 | shadowed.wow | 2007-08-15 06:34:13 +0100 (Wed, 15 Aug 2007) | 1 line
+
+* Added in total memory and total CPU onto the sort bar things,
positioning is messed up, I'll pretend I don't know about it and hope
someone else (Josh) fixes it
+------------------------------------------------------------------------
+r564 | shadowed.wow | 2007-08-15 04:23:33 +0100 (Wed, 15 Aug 2007) | 1 line
+
+* Now I remember why we needed that "or 1" part
+------------------------------------------------------------------------
+r563 | shadowed.wow | 2007-08-15 03:58:51 +0100 (Wed, 15 Aug 2007) | 1 line
+
+* Importing OptionHouseLib-r560 library
+------------------------------------------------------------------------
+r562 | shadowed.wow | 2007-08-15 03:58:43 +0100 (Wed, 15 Aug 2007) | 1 line
+
+* Importing OptionHouse-r560 addon
+------------------------------------------------------------------------
+r561 | shadowed.wow | 2007-08-15 03:58:32 +0100 (Wed, 15 Aug 2007) | 1 line
+
+* Creating directory for OptionHouse-r560
+------------------------------------------------------------------------
+r560 | shadowed.wow | 2007-08-15 01:34:58 +0100 (Wed, 15 Aug 2007) | 1 line
+
+* Fixed performance monitor
+------------------------------------------------------------------------
+r559 | shadowed.wow | 2007-08-14 19:02:30 +0100 (Tue, 14 Aug 2007) | 3
lines
+
+* All frames are now unnamed (yay!)
+* Moved all scroll frames to the new system
+* New private APIs, OptionHouse:CreateScroll(parentFrame, displayedNum,
updateFunc) and OptionHouse:UpdateScroll(scrollFrame, totalRows)
+------------------------------------------------------------------------
+r558 | shadowed.wow | 2007-08-14 07:37:41 +0100 (Tue, 14 Aug 2007) | 1 line
+
+* Would cry if I lost the SF at this point
+------------------------------------------------------------------------
+r557 | shadowed.wow | 2007-08-14 04:53:17 +0100 (Tue, 14 Aug 2007) | 1 line
+
+* Everything previous commit is actually true now
+------------------------------------------------------------------------
+r556 | shadowed.wow | 2007-08-14 00:37:30 +0100 (Tue, 14 Aug 2007) | 3
lines
+
+* Fixed most of the inconsistencies for code formatting
+* Added a new feature that will enable all the children of an addon, for
example if you enable BigWigs you'll be asked if you want to enable all of
the BigWigs_* modules, like dependencies you can set this to always ask,
always enable, never enable
+* In theory all this stuff works fine, in practice OH is now horribly
broken
+------------------------------------------------------------------------
+r555 | shadowed.wow | 2007-08-13 22:36:32 +0100 (Mon, 13 Aug 2007) | 2
lines
+
+* Using "Disable All" will keep OptionHouse enabled, you can still disable
it manually through the addon control panel
+* If a load on demand addon has load on demand dependencies then the
dependencies are automatically loaded then the addon
+------------------------------------------------------------------------
+r554 | shadowed.wow | 2007-08-13 15:58:47 +0100 (Mon, 13 Aug 2007) | 3
lines
+
+* Fixed highlight texture not resizing width
+* Tabs wont show the highlight texture when selected now
+* Tabs font color is white when selected and goldish when unselected
(HIGHLIGHT_FONT_COLOR/NORMAL_FONT_COLOR)
+------------------------------------------------------------------------
+r553 | shadowed.wow | 2007-08-13 07:35:44 +0100 (Mon, 13 Aug 2007) | 1 line
+
+* Tabs now use our own system and are have been moved to being unnamed
+------------------------------------------------------------------------
+r552 | shadowed.wow | 2007-08-13 06:23:34 +0100 (Mon, 13 Aug 2007) | 2
lines
+
+* All of the frames except for tabs, FSF and main OptionHouse are unnamed
+* New API OptionHouse:GetFrame() accepts main, addon, manage, perf these
should be used in place of directly referencing a frame
+------------------------------------------------------------------------
+r551 | tekkub | 2007-08-13 01:57:44 +0100 (Mon, 13 Aug 2007) | 1 line
+
+OptionHouse - Seems "doublewide" is bugged, workaround until slouken
implements a fix
+------------------------------------------------------------------------
+r550 | shadowed.wow | 2007-08-12 21:45:00 +0100 (Sun, 12 Aug 2007) | 3
lines
+
+* Fixed OptionHouse not working correctly as an UI frame meaning no more
overlapping errors
+* Because OptionHouse is now a UI frame the ability to move it has been
removed
+* If an addon has dependencies that aren't load on demand, the "Load"
button wont show up and the text will be in orange
+------------------------------------------------------------------------
+r549 | shadowed.wow | 2007-08-11 23:47:37 +0100 (Sat, 11 Aug 2007) | 1 line
+
+* Importing OptionHouseLib-r546 library
+------------------------------------------------------------------------
+r548 | shadowed.wow | 2007-08-11 23:47:17 +0100 (Sat, 11 Aug 2007) | 1 line
+
+* Importing OptionHouse-r546 addon
+------------------------------------------------------------------------
+r547 | shadowed.wow | 2007-08-11 23:46:55 +0100 (Sat, 11 Aug 2007) | 1 line
+
+* Creating directory for OptionHouse-r546
+------------------------------------------------------------------------
+r546 | shadowed.wow | 2007-08-11 04:32:07 +0100 (Sat, 11 Aug 2007) | 1 line
+
+* Everything I said previous commit log is actually true now
+------------------------------------------------------------------------
+r545 | shadowed.wow | 2007-08-10 22:06:32 +0100 (Fri, 10 Aug 2007) | 4
lines
+
+* Changed createRows to only create the test font string when it doesn't
exist already
+* updateManageList is called in createManageList, it was pointless to have
to call them seperately
+* Removed all of the remaining globals, only ones remaining are the main
frames, scroll frames and tabs
+* Code cleanup
+------------------------------------------------------------------------
+r544 | shadowed.wow | 2007-08-10 07:32:38 +0100 (Fri, 10 Aug 2007) | 1 line
+
+Ninja fix, close button works, clad will never know
+------------------------------------------------------------------------
+r543 | shadowed.wow | 2007-08-10 07:04:06 +0100 (Fri, 10 Aug 2007) | 1 line
+
+* Importing OptionHouseLib-r540 library
+------------------------------------------------------------------------
+r542 | shadowed.wow | 2007-08-10 07:03:58 +0100 (Fri, 10 Aug 2007) | 1 line
+
+* Importing OptionHouse-r540 addon
+------------------------------------------------------------------------
+r541 | shadowed.wow | 2007-08-10 07:03:48 +0100 (Fri, 10 Aug 2007) | 1 line
+
+* Creating directory for OptionHouse-r540
+------------------------------------------------------------------------
+r540 | shadowed.wow | 2007-08-10 07:01:42 +0100 (Fri, 10 Aug 2007) | 7
lines
+
+* Removed texture names for the frame textures
+* Removed filter button names for addon configuration
+* Removed SetTexture call when frames initialized
+* Enable dependencies window will only show if the dependencies aren't
already enabled
+* Added number of dependencies being enabled
+* Changed the tooltip for the configuration to show if author OR version
exists instead of both
+* Fixed the registered OptionHouse version not being converted
+------------------------------------------------------------------------
+r539 | shadowed.wow | 2007-08-09 20:20:17 +0100 (Thu, 09 Aug 2007) | 1 line
+
+* Fixed the resort flag not being nilled after the sort
+------------------------------------------------------------------------
+r538 | shadowed.wow | 2007-08-09 03:14:26 +0100 (Thu, 09 Aug 2007) | 3
lines
+
+* All the features actually work now
+* Notes will correctly show up
+* Mod name in the tooltip is colored white to stand out more and look
better
+------------------------------------------------------------------------
+r537 | shadowed.wow | 2007-08-08 22:54:36 +0100 (Wed, 08 Aug 2007) | 3
lines
+
+* Rows are used as needed, meaning you can change the text size and see
the results without a UI reload
+* When enabling an addon, if it has any dependencies they'll be enabled
you can change this to always enable, never enable or ask through
configuration
+* Some small code tweaks
+------------------------------------------------------------------------
+r536 | tekkub | 2007-08-07 08:55:19 +0100 (Tue, 07 Aug 2007) | 1 line
+
+OptionHouse - Fixed panel options and sorting for reals, shadowed can't do
anything right
+------------------------------------------------------------------------
+r535 | shadowed.wow | 2007-08-06 23:07:25 +0100 (Mon, 06 Aug 2007) | 1 line
+
+* Fixed title sorting not calling string.lower
+------------------------------------------------------------------------
+r534 | shadowed.wow | 2007-08-06 23:03:17 +0100 (Mon, 06 Aug 2007) | 2
lines
+
+* Changed OH to use the same window mode as AuctionHouse frame meaning
it'll close other frames when opened
+* Added mod notes to ACP tooltip
+------------------------------------------------------------------------
+r533 | shadowed.wow | 2007-08-02 20:31:06 +0100 (Thu, 02 Aug 2007) | 1 line
+
+* Importing OptionHouseLib-r530 library
+------------------------------------------------------------------------
+r532 | shadowed.wow | 2007-08-02 20:30:28 +0100 (Thu, 02 Aug 2007) | 1 line
+
+* Importing OptionHouse-r530 addon
+------------------------------------------------------------------------
+r531 | shadowed.wow | 2007-08-02 20:29:39 +0100 (Thu, 02 Aug 2007) | 1 line
+
+* Creating directory for OptionHouse-r530
+------------------------------------------------------------------------
+r530 | shadowed.wow | 2007-08-02 04:33:31 +0100 (Thu, 02 Aug 2007) | 1 line
+
+* Fixed a bug that was causing the addons saved and the actual frame from
being updated when called in response to a tab being clicked
+------------------------------------------------------------------------
+r529 | shadowed.wow | 2007-07-23 16:28:32 +0100 (Mon, 23 Jul 2007) | 1 line
+
+* Importing OptionHouseLib-r526 library
+------------------------------------------------------------------------
+r528 | shadowed.wow | 2007-07-23 16:28:25 +0100 (Mon, 23 Jul 2007) | 1 line
+
+* Importing OptionHouse-r526 addon
+------------------------------------------------------------------------
+r527 | shadowed.wow | 2007-07-23 16:28:16 +0100 (Mon, 23 Jul 2007) | 1 line
+
+* Creating directory for OptionHouse-r526
+------------------------------------------------------------------------
+r526 | JoshBorke | 2007-07-19 03:49:19 +0100 (Thu, 19 Jul 2007) | 4 lines
+
+OptionHouse:
+- dtw
+- don't StartMoving if frame isn't movable
+- fix RemoveSubCategory
+------------------------------------------------------------------------
+r525 | shadowed.wow | 2007-07-19 01:33:25 +0100 (Thu, 19 Jul 2007) | 1 line
+
+* Fixed locking/unlocking the frame not actually doing anything
+------------------------------------------------------------------------
+r524 | shadowed.wow | 2007-07-11 01:42:08 +0100 (Wed, 11 Jul 2007) | 1 line
+
+* Importing OptionHouseLib-r521 library
+------------------------------------------------------------------------
+r523 | shadowed.wow | 2007-07-11 01:42:02 +0100 (Wed, 11 Jul 2007) | 1 line
+
+* Importing OptionHouse-r521 addon
+------------------------------------------------------------------------
+r522 | shadowed.wow | 2007-07-11 01:41:52 +0100 (Wed, 11 Jul 2007) | 1 line
+
+* Creating directory for OptionHouse-r521
+------------------------------------------------------------------------
+r521 | shadowed.wow | 2007-07-11 01:40:27 +0100 (Wed, 11 Jul 2007) | 2
lines
+
+* Fixed Build.lua
+* Fixed sorting not doing a string.lower
+------------------------------------------------------------------------
+r520 | shadowed.wow | 2007-07-10 08:58:11 +0100 (Tue, 10 Jul 2007) | 2
lines
+
+* All font options will work now, the configuration should be fully usable
+* Moving works, if you have standalone it'll save the positioning you can
right click to reset it to the standard one, you can drag it using the
title bar where "Option House" text is located
+------------------------------------------------------------------------
+r519 | shadowed.wow | 2007-07-10 04:10:24 +0100 (Tue, 10 Jul 2007) | 3
lines
+
+* Fixed a couple of bugs in the configuration, they'll actually show and
position correctly now
+* Fixed tab registering/unregistering, so it actually works now
+* Fixed a couple of sorting bugs in filters, it'll only do addons still
due to other bugs that need to be worked out
+------------------------------------------------------------------------
+r518 | shadowed.wow | 2007-07-10 01:25:07 +0100 (Tue, 10 Jul 2007) | 5
lines
+
+* Code clean up, fixed some functions using func( foo, bar ) instead of
func(foo, bar)
+* Added removeCategoryListing and removeSubCategoryListing so we don't
have to re-create the entire list on a remove
+* Added sorting back in, addon listings will be sorted by a-z order,
categories and sub categories sorted in the order they were added
+* Changed the logic in openConfigFrame, no need to check data.frame when
it can be done once and throw an error if none is found
+* Fixed a couple of errors in configuration
+------------------------------------------------------------------------
+r517 | tekkub | 2007-07-10 01:14:11 +0100 (Tue, 10 Jul 2007) | 1 line
+
+OptionHouse - Why not sort the perf tab by title instead of name, for
consistency with the addon tab and the charselect addon panel
+------------------------------------------------------------------------
+r516 | shadowed.wow | 2007-07-10 00:46:31 +0100 (Tue, 10 Jul 2007) | 3
lines
+
+* Fixed the MiR and CiR values, will do new - old now instead of abs(old -
new) meaning you'll see negative values if memory or CPU usage dropped
+* UI Should be fixed and will show up now, also fixed positioning errors
(hopefully)
+* Added an option to lock the OptionHouse window, haven't actually
implemented the code to do this just the configuration
+------------------------------------------------------------------------
+r515 | shadowed.wow | 2007-07-07 03:04:08 +0100 (Sat, 07 Jul 2007) | 3
lines
+
+Added some quick checks in so if you don't pass a handler or a function
it'll error on the RegisterCategory/Subcategory
+Changed tab order to Management -> Performance
+Fixed an error in OH_Configuration.lua, it still doesn't work the frame
isn't being shown, not really sure why right now
+------------------------------------------------------------------------
+r514 | shadowed.wow | 2007-07-06 20:16:18 +0100 (Fri, 06 Jul 2007) | 3
lines
+
+* Added OptionHouse:UnregisterTab(text) so we can remove the tabs when
people disable/enable them
+* Changed the "security" checking to only accept tabs with the text
Management or Performance, to make life easier
+* Added in all of the base code + configuration to OptionHouse, it should
unregister/register tabs just fine but the font size doesn't work yet
+------------------------------------------------------------------------
+r513 | shadowed.wow | 2007-07-06 16:55:14 +0100 (Fri, 06 Jul 2007) | 1 line
+
+Adding base files for configs
+------------------------------------------------------------------------
+r512 | shadowed.wow | 2007-07-05 06:20:43 +0100 (Thu, 05 Jul 2007) | 1 line
+
+* Fixed a couple of bugs where OptionHouse wouldn't update the filter
listing if you loaded an addon with either OH hidden or you're using
management or performance tab instead
+------------------------------------------------------------------------
+r511 | shadowed.wow | 2007-07-04 22:33:45 +0100 (Wed, 04 Jul 2007) | 1 line
+
+* Improved the filter display code, will no longer create a table per
every row every time you expand/collapse or search on something
+------------------------------------------------------------------------
+r510 | jnwhiteh | 2007-07-04 18:47:01 +0100 (Wed, 04 Jul 2007) | 4 lines
+
+* Added preliminary win32 support. This affects:
+ - copy instead of cp
+ - using the win32 path separator instead of unix
+
+------------------------------------------------------------------------
+r509 | shadowed.wow | 2007-07-04 18:38:34 +0100 (Wed, 04 Jul 2007) | 1 line
+
+* Importing OptionHouseLib-r506 library
+------------------------------------------------------------------------
+r508 | shadowed.wow | 2007-07-04 18:38:28 +0100 (Wed, 04 Jul 2007) | 1 line
+
+* Importing OptionHouse-r506 addon
+------------------------------------------------------------------------
+r507 | shadowed.wow | 2007-07-04 18:38:20 +0100 (Wed, 04 Jul 2007) | 1 line
+
+* Creating directory for OptionHouse-r506
+------------------------------------------------------------------------
+r506 | shadowed.wow | 2007-07-04 05:23:23 +0100 (Wed, 04 Jul 2007) | 1 line
+
+Moved to a more reliable method of preventing people from registering tabs
with OptionHouse.
+------------------------------------------------------------------------
+r505 | jnwhiteh | 2007-07-03 20:22:50 +0100 (Tue, 03 Jul 2007) | 1 line
+
+* Importing OptionHouseLib-r502 library
+------------------------------------------------------------------------
+r504 | jnwhiteh | 2007-07-03 20:22:43 +0100 (Tue, 03 Jul 2007) | 1 line
+
+* Importing OptionHouse-r502 addon
+------------------------------------------------------------------------
+r503 | jnwhiteh | 2007-07-03 20:22:38 +0100 (Tue, 03 Jul 2007) | 1 line
+
+* Creating directory for OptionHouse-r502
+------------------------------------------------------------------------
+r502 | jnwhiteh | 2007-07-03 20:20:24 +0100 (Tue, 03 Jul 2007) | 2 lines
+
+* Ensure we do a file-level copy of the graphic
+
+------------------------------------------------------------------------
+r501 | shadowed.wow | 2007-07-03 20:20:17 +0100 (Tue, 03 Jul 2007) | 1 line
+
+Fixed KiB/s and MiB/s used for CPU, it shouldn't be anything since it's
seconds increased CPU time used.
+------------------------------------------------------------------------
+r500 | jnwhiteh | 2007-07-03 19:57:04 +0100 (Tue, 03 Jul 2007) | 2 lines
+
+* Verbiage fix for the library import
+
+------------------------------------------------------------------------
+r499 | jnwhiteh | 2007-07-03 19:56:41 +0100 (Tue, 03 Jul 2007) | 1 line
+
+* Importing OptionHouseLib-r496 addon
+------------------------------------------------------------------------
+r498 | jnwhiteh | 2007-07-03 19:56:37 +0100 (Tue, 03 Jul 2007) | 1 line
+
+* Importing OptionHouse-r496 addon
+------------------------------------------------------------------------
+r497 | jnwhiteh | 2007-07-03 19:56:31 +0100 (Tue, 03 Jul 2007) | 1 line
+
+* Creating directory for OptionHouse-r496
+------------------------------------------------------------------------
+r496 | jnwhiteh | 2007-07-03 19:55:27 +0100 (Tue, 03 Jul 2007) | 2 lines
+
+* Change the build process to include the full OptionHouse.lua file
+
+------------------------------------------------------------------------
+r495 | jnwhiteh | 2007-07-03 19:53:25 +0100 (Tue, 03 Jul 2007) | 2 lines
+
+* Fix an issue where the build script would not build the library properly
+
+------------------------------------------------------------------------
+r494 | jnwhiteh | 2007-07-03 19:51:47 +0100 (Tue, 03 Jul 2007) | 2 lines
+
+* Removing bad tag
+
+------------------------------------------------------------------------
+r493 | jnwhiteh | 2007-07-03 19:51:19 +0100 (Tue, 03 Jul 2007) | 2 lines
+
+* Removing bad tag
+
+------------------------------------------------------------------------
+r492 | jnwhiteh | 2007-07-03 19:47:13 +0100 (Tue, 03 Jul 2007) | 2 lines
+
+* Fix build script to generate proper import commands
+
+------------------------------------------------------------------------
+r491 | jnwhiteh | 2007-07-03 19:46:50 +0100 (Tue, 03 Jul 2007) | 1 line
+
+* Importing OptionHouseLib-r489 addon
+------------------------------------------------------------------------
+r490 | jnwhiteh | 2007-07-03 19:46:43 +0100 (Tue, 03 Jul 2007) | 1 line
+
+* Importing OptionHouse-r489 addon
+------------------------------------------------------------------------
+r489 | jnwhiteh | 2007-07-03 19:44:05 +0100 (Tue, 03 Jul 2007) | 1 line
+
+* Creating directory for OptionHouse-r488
+------------------------------------------------------------------------
+r488 | jnwhiteh | 2007-07-03 19:40:46 +0100 (Tue, 03 Jul 2007) | 2 lines
+
+* Removing old tag
+
+------------------------------------------------------------------------
+r487 | jnwhiteh | 2007-07-03 19:40:36 +0100 (Tue, 03 Jul 2007) | 2 lines
+
+* Removing old tag
+
+------------------------------------------------------------------------
+r486 | jnwhiteh | 2007-07-03 19:39:39 +0100 (Tue, 03 Jul 2007) | 3 lines
+
+* Adding a simple untested build script
+* Attempt to fix the issues with issecurevariable()
+
+------------------------------------------------------------------------
+r485 | jnwhiteh | 2007-07-03 19:11:50 +0100 (Tue, 03 Jul 2007) | 2 lines
+
+* Tagging OptionHouseLib from trunk
+
+------------------------------------------------------------------------
+r484 | jnwhiteh | 2007-07-03 19:11:37 +0100 (Tue, 03 Jul 2007) | 2 lines
+
+* Creating directory for OHLib-Beta-r480
+
+------------------------------------------------------------------------
+r483 | shadowed.wow | 2007-07-03 18:30:39 +0100 (Tue, 03 Jul 2007) | 1 line
+
+Public OptionHouse beta
+------------------------------------------------------------------------
+r482 | jnwhiteh | 2007-07-03 14:27:28 +0100 (Tue, 03 Jul 2007) | 5 lines
+
+* Never, ever, ever just copy DongleStub into a file. We don't work that
way.
+* Added DongleStub.lua from branches/Dongle-1.1 to OptionHouse
+* Added DongleStub.lua to the .toc file
+* Version numbers should be meaningful, the revision number in the .toc is
useless.. use the major version number.
+
+------------------------------------------------------------------------
+r481 | shadowed.wow | 2007-07-03 04:31:11 +0100 (Tue, 03 Jul 2007) | 1 line
+
+Not including DongleStub was probably bad.
+------------------------------------------------------------------------
+r480 | shadowed.wow | 2007-07-03 03:56:46 +0100 (Tue, 03 Jul 2007) | 1 line
+
+Cleaned up TOC data
+------------------------------------------------------------------------
+r479 | shadowed.wow | 2007-07-03 03:47:56 +0100 (Tue, 03 Jul 2007) | 1 line
+
+Fixed OptionHouse:OpenTab(id) not working, FOR REAL this time, also fixed
a typo in the error message when you try to request an unknown tab
+------------------------------------------------------------------------
+r478 | shadowed.wow | 2007-07-03 01:24:31 +0100 (Tue, 03 Jul 2007) | 3
lines
+
+Removed usage of arg1 in OH_PerfMon.lua
+Fixed a bug in OptionHouse:OpenTab(id) that was calling tabOnClick(id)
THEN createOHFrame() instead of createOHFrame() first.
+Clarified some code comments
+------------------------------------------------------------------------
+r477 | shadowed.wow | 2007-07-02 22:59:08 +0100 (Mon, 02 Jul 2007) | 1 line
+
+Fixed a bug in enable/disable all that was preventing the check boxes from
checking or unchecking.
+------------------------------------------------------------------------
+r476 | shadowed.wow | 2007-07-01 20:13:51 +0100 (Sun, 01 Jul 2007) | 1 line
+
+Fixed OptionHouse not updating correctly when a new revision is found
+------------------------------------------------------------------------
+r475 | shadowed.wow | 2007-07-01 04:06:39 +0100 (Sun, 01 Jul 2007) | 1 line
+
+Fixed the couple of remaining cases where frames didn't get hidden in the
addons tab.
+------------------------------------------------------------------------
+r474 | shadowed.wow | 2007-07-01 00:09:50 +0100 (Sun, 01 Jul 2007) | 1 line
+
+Changed sub categories tooltip to only display it if the category itself
has any sub categories and not just the addon.
+------------------------------------------------------------------------
+r473 | shadowed.wow | 2007-06-27 22:04:11 +0100 (Wed, 27 Jun 2007) | 1 line
+
+Added some quick validation to OptionHouse:OpenTab() so you can't open one
that doesn't exist.
+------------------------------------------------------------------------
+r472 | shadowed.wow | 2007-06-27 04:35:01 +0100 (Wed, 27 Jun 2007) | 4
lines
+
+Fixed sorting in management frame to actually work, also fixed sorting
going by colors not the actual title itself.
+Fixed tooltips in management
+Fixed the addon panels not showing and throwing an error
+Added OptionHouse:GetAddOnData back
+------------------------------------------------------------------------
+r471 | JoshBorke | 2007-06-27 04:14:12 +0100 (Wed, 27 Jun 2007) | 2 lines
+
+OptionHouse:
+- attempted fix for tainting stuff
+------------------------------------------------------------------------
+r470 | JoshBorke | 2007-06-26 04:54:11 +0100 (Tue, 26 Jun 2007) | 6 lines
+
+OptionHouse:
+- fix bugs introduced by Shadowed's recent changes
+- issecurevariable checks RegisterTab instead of self now
+- revert new syntax for CreateTab until shadowed fixes it better
+- check for existence of addon in OH_AddOns
+- delete trailing white spaces
+------------------------------------------------------------------------
+r469 | shadowed.wow | 2007-06-25 23:40:50 +0100 (Mon, 25 Jun 2007) | 2
lines
+
+Cleaned up code in OptionHouse.lua
+Moved the addon list in management to when you search, new addon loaded,
enabled/disabled or loaded something instead of whenever you resort, scroll
and basically anything.
+------------------------------------------------------------------------
+r468 | shadowed.wow | 2007-06-25 03:39:06 +0100 (Mon, 25 Jun 2007) | 1 line
+
+Testing validation stuff
+------------------------------------------------------------------------
+r467 | shadowed.wow | 2007-06-25 03:30:14 +0100 (Mon, 25 Jun 2007) | 1 line
+
+Added issecurevariable checking so only OptionHouse modules can register
tabs, create search inputs or get addon data.
+------------------------------------------------------------------------
+r466 | jnwhiteh | 2007-06-23 20:17:46 +0100 (Sat, 23 Jun 2007) | 2 lines
+
+* Property update on DongleStub
+
+------------------------------------------------------------------------
+r465 | jnwhiteh | 2007-06-23 20:16:29 +0100 (Sat, 23 Jun 2007) | 2 lines
+
+* Are keywords case-sensitive?
+
+------------------------------------------------------------------------
+r464 | jnwhiteh | 2007-06-23 20:16:07 +0100 (Sat, 23 Jun 2007) | 2 lines
+
+* Updated keywords to include Revision and Id (in theory)
+
+------------------------------------------------------------------------
+r463 | jnwhiteh | 2007-06-23 20:14:27 +0100 (Sat, 23 Jun 2007) | 2 lines
+
+* Added $id$ keyword
+
+------------------------------------------------------------------------
+r462 | JoshBorke | 2007-06-23 18:55:05 +0100 (Sat, 23 Jun 2007) | 2 lines
+
+OptionHouse:
+- sort addons ascending by name by default
+------------------------------------------------------------------------
+r461 | JoshBorke | 2007-06-21 23:05:20 +0100 (Thu, 21 Jun 2007) | 1 line
+
+OptionHouse: no longer have lines with extraneous whitespace
+------------------------------------------------------------------------
+r460 | shadowed.wow | 2007-06-21 22:44:09 +0100 (Thu, 21 Jun 2007) | 5
lines
+
+Josh is whiny, moved expanded categories too a separate function called on
expand/search
+Fixed a couple of callback issues due to code changes
+Added OptionHouse title too the top bar
+Frame level changed to MEDIUM for OH and HIGH for addon registered pages,
need to play around with it still
+Probably did some other things, but if I didn't remember them not really
important
+------------------------------------------------------------------------
+r459 | shadowed.wow | 2007-06-21 08:16:50 +0100 (Thu, 21 Jun 2007) | 5
lines
+
+Fixed addons tab, everything will work correctly now.
+Changed Joshs formatting, he sucks
+Changed the name for performance/management too title and not addon name
+Did some other stuff, probably not importent
+NTS: Add validation
+------------------------------------------------------------------------
+r458 | JoshBorke | 2007-06-21 03:00:37 +0100 (Thu, 21 Jun 2007) | 4 lines
+
+OptionHouse:
+- added Status to Addons
+- fixed the tabs to show properly
+- addon option handlers aren't being called
+------------------------------------------------------------------------
+r457 | shadowed.wow | 2007-06-21 01:54:06 +0100 (Thu, 21 Jun 2007) | 1 line
+
+Fixes before heading home
+------------------------------------------------------------------------
+r456 | shadowed.wow | 2007-06-21 00:27:38 +0100 (Thu, 21 Jun 2007) | 5
lines
+
+Fuck trying to manage what data I want using numbers, changed all of the
expandedCategories info to stored by keys for sanity.
+Changed the expanding code to store the data array instead of setting 4-5
variables to the button
+OptionHouse:Open("addon", "cat", "subCat") should be back and actually
working now
+Cleaned up the configuration showing code so it can be used in areas
besides when a button is clicked
+Added a tooltip to the buttons on configuration, will show
title/version/author on the configuration buttons, and will also show sub
categories count when mousing over a category.
+------------------------------------------------------------------------
+r455 | shadowed.wow | 2007-06-20 21:15:08 +0100 (Wed, 20 Jun 2007) | 1 line
+
+Renamed tabs, AddOn Configuration -> Addons, AddOn Management ->
Management, AddOn Performance -> Performance.
+------------------------------------------------------------------------
+r454 | shadowed.wow | 2007-06-20 20:12:14 +0100 (Wed, 20 Jun 2007) | 1 line
+
+Split OH off to modules, untested but it's the basic idea code-wise of
what they'll look like, making sure the APIs are actually private needs to
be done still (cause clad fails).
+------------------------------------------------------------------------
+r453 | shadowed.wow | 2007-06-20 01:44:49 +0100 (Wed, 20 Jun 2007) | 1 line
+
+Added argument passing to the registered functions, note that they will
pass "" instead of nil for sub categories if none is there for now due to
lazyness
+------------------------------------------------------------------------
+r452 | shadowed.wow | 2007-06-20 01:14:22 +0100 (Wed, 20 Jun 2007) | 1 line
+
+Added category/sub category passing to the registered functions, probably
broken but Josh is a whiner.
+------------------------------------------------------------------------
+r451 | shadowed.wow | 2007-06-19 06:09:31 +0100 (Tue, 19 Jun 2007) | 1 line
+
+Icon will be used if standalone is found, added new files for the basic
stuff, cladhaire fails at issecurevariable.
+------------------------------------------------------------------------
+r450 | shadowed.wow | 2007-06-18 19:12:17 +0100 (Mon, 18 Jun 2007) | 3
lines
+
+Stupid Mikma breaking stuff.
+
+Fixed #959 and #983 errors
+------------------------------------------------------------------------
+r449 | shadowed.wow | 2007-06-18 18:49:57 +0100 (Mon, 18 Jun 2007) | 1 line
+
+Changed to upvalue (Josh fails)
+------------------------------------------------------------------------
+r448 | shadowed.wow | 2007-06-18 18:41:05 +0100 (Mon, 18 Jun 2007) | 1 line
+
+expandedCategories changed too OptionHouseOptionsFrame.expanded, re-used
instead of re-created every time in updateConfigList().
+------------------------------------------------------------------------
+r447 | shadowed.wow | 2007-06-18 18:28:03 +0100 (Mon, 18 Jun 2007) | 1 line
+
+Cleaned up more of the code formatting, split off category sorting to a
separate function thats only ran when OptionHouseOptionFrame is created, or
when a new addon is registered.
+------------------------------------------------------------------------
+r446 | shadowed.wow | 2007-06-18 01:33:14 +0100 (Mon, 18 Jun 2007) | 1 line
+
+Title will use the one from GetAddOnInfo if nothing is registered with OH
when displaying tooltip info, also the tooltip will add the data as it
comes meaning it can show title/version even without author, or
title/author/dependencies with no version found.
+------------------------------------------------------------------------
+r445 | shadowed.wow | 2007-06-18 00:45:37 +0100 (Mon, 18 Jun 2007) | 3
lines
+
+Added OHObject:RemoveCategory( "name" ) and
OHObject:RemoveSubCategory( "parentCat", "name" ) for addons that use
profiles, eg ItemRack type of things.
+Fixed a couple of assert validation types of errors in the Register*
functions.
+Fixed sorting on the category panel
+------------------------------------------------------------------------
+r444 | shadowed.wow | 2007-06-17 20:36:26 +0100 (Sun, 17 Jun 2007) | 2
lines
+
+Fixed numbers not being a valid type when passing version in RegisterAddOn
+OH was positioning frames incorrectly, they'll actually move when OH is
moved now.
+------------------------------------------------------------------------
+r443 | shadowed.wow | 2007-06-17 05:10:03 +0100 (Sun, 17 Jun 2007) | 5
lines
+
+Fixed performance sorting using mir instead of cir for cir sorting.
+Fixed a search being done on the category when only one category and no
sub categories exist
+Fixed dependencies not showing (you need to return apparently)
+Added : after Option House in ENTERED_COMBAT, forgot to.
+Cleaned up some of the loops for sorting creation
+------------------------------------------------------------------------
+r442 | jnwhiteh | 2007-06-17 04:30:34 +0100 (Sun, 17 Jun 2007) | 2 lines
+
+* Removing the local copy of DongleStub.lua
+
+------------------------------------------------------------------------
+r441 | shadowed.wow | 2007-06-17 03:15:36 +0100 (Sun, 17 Jun 2007) | 1 line
+
+Removed the portrait and replaced it with the characters since embeds
can't use TGAs because authors are more bitchy then users
+------------------------------------------------------------------------
+r440 | shadowed.wow | 2007-06-17 01:02:06 +0100 (Sun, 17 Jun 2007) | 3
lines
+
+Added sorting to the management frame, can sort by status or name, fixed a
couple of reasons not displaying, cleaned up the color code too.
+The reason text will move to the position "Load" is if it's not a LoD
addon.
+Added dependencies to the tooltip on addon management
+------------------------------------------------------------------------
+r439 | tekkub | 2007-06-16 19:36:41 +0100 (Sat, 16 Jun 2007) | 1 line
+
+Moving OptionHouse to trunk
+------------------------------------------------------------------------
+r438 | shadowed.wow | 2007-06-16 07:00:20 +0100 (Sat, 16 Jun 2007) | 3
lines
+
+Fixed size validation, positioning will work now it was off by around 105
y, OH will now force the OptionHouseOptionsFrame to be the parent of
configuration frames
+Fixed OH not getting any data from addons that are registered with it in
the management page
+Management page is broken since it doesn't fully implement all the reasons
(Damn Tekkub)
+------------------------------------------------------------------------
+r437 | shadowed.wow | 2007-06-16 02:11:06 +0100 (Sat, 16 Jun 2007) | 1 line
+
+Fixed size tests, height was being changed if it was > 305 instead of 630,
and width was being changed if it was > 630 instead of 305.
+------------------------------------------------------------------------
+r436 | shadowed.wow | 2007-06-16 00:22:33 +0100 (Sat, 16 Jun 2007) | 1 line
+
+Changed this -> self, anything thats broken is Tekkubs fault.
+------------------------------------------------------------------------
+r435 | shadowed.wow | 2007-06-16 00:10:53 +0100 (Sat, 16 Jun 2007) | 1 line
+
+Bumped major to OptionHouse-1.0, pray and hope we never need to change the
API.
+------------------------------------------------------------------------
+r434 | shadowed.wow | 2007-06-16 00:01:53 +0100 (Sat, 16 Jun 2007) | 1 line
+
+Fixed major number, OptionHouse-Alpha0.1 now
+------------------------------------------------------------------------
+r433 | shadowed.wow | 2007-06-15 23:56:27 +0100 (Fri, 15 Jun 2007) | 1 line
+
+Fixed the open configuration panel not hiding when switching tabs
+------------------------------------------------------------------------
+r432 | tekkub | 2007-06-15 23:52:45 +0100 (Fri, 15 Jun 2007) | 1 line
+
+OptionHouse - KB --> KiB, MB --> MiB
+------------------------------------------------------------------------
+r431 | shadowed.wow | 2007-06-15 23:23:49 +0100 (Fri, 15 Jun 2007) | 3
lines
+
+Added OptionHouse:OpenTab( 1-3 ) (1 config/2 manage/3 perf)
+/oh will accept arguments, meaning you can do /oh SSPVP to open the SSPVP
category, or /oh Panda to open the Panda category.
+Removed the tabOnClick calls in createOHFrame moved them to
OptionHouse:Open() and OptionHouse:OpenTab()
+------------------------------------------------------------------------
+r430 | shadowed.wow | 2007-06-15 23:06:09 +0100 (Fri, 15 Jun 2007) | 1 line
+
+In theory, you can now do OptionHouse:Open( [addon][, category][,
subcategory] ) to specify what configuration is shown at the start.
+------------------------------------------------------------------------
+r429 | shadowed.wow | 2007-06-15 22:42:29 +0100 (Fri, 15 Jun 2007) | 1 line
+
+Changed major to OptionHouse-Alpha0.1
+------------------------------------------------------------------------
+r428 | shadowed.wow | 2007-06-15 21:28:26 +0100 (Fri, 15 Jun 2007) | 1 line
+
+Not needed anymore
+------------------------------------------------------------------------
+r427 | shadowed.wow | 2007-06-15 21:28:07 +0100 (Fri, 15 Jun 2007) | 2
lines
+
+Fixed enable check box for ms.whiny mc whine pants
+Fixed a couple lines of code and changed the formatting used for some of
them.
+------------------------------------------------------------------------
+r426 | shadowed.wow | 2007-06-15 02:53:24 +0100 (Fri, 15 Jun 2007) | 1 line
+
+Auto-frame positioning will only happen if GetPoint() returns nil, also
changed the frame size setting too only happen if it's wider then 630 or
higher then 305, or if the current width and/or height are 0.
+------------------------------------------------------------------------
+r425 | shadowed.wow | 2007-06-15 02:09:33 +0100 (Fri, 15 Jun 2007) | 3
lines
+
+Fixed the addon configuration page, made it sort the addons by alpha, the
category listing will reset when you change panels too.
+Added in default positioning (TOPLEFT, 190, -103) and height/width
(630/305)
+Cleaned up the configuration code and fixed a few bugs in the search
+------------------------------------------------------------------------
+r424 | shadowed.wow | 2007-06-14 23:53:48 +0100 (Thu, 14 Jun 2007) | 2
lines
+
+Performance/management pages will work, management will register
ADDON_LOADED now too, you can mouseover addons in management to view the
full title/version/author, will make it support the OH title also if it
exists.
+Options broken, will deal with later
+------------------------------------------------------------------------
+r423 | shadowed.wow | 2007-06-14 09:14:12 +0100 (Thu, 14 Jun 2007) | 4
lines
+
+Renamed OptionHouse.lua-bk to lazy too right click and choose which editor
to open it in.
+
+Pulled OptionHouse.lua into an embed and also cleaned up all the
code/functions/naming, still a couple of things need to be done like adding
a tooltip for the management page, and actually test everything but the
actual code is all implemented, normalized and ready to go.
+Category will reset when you change tabs and is also sorted in alpha order
+------------------------------------------------------------------------
+r422 | shadowed.wow | 2007-06-14 03:44:25 +0100 (Thu, 14 Jun 2007) | 2
lines
+
+Moved the actual OH code to OptionHouse.lua-bk for grabbing code to move
to the "final" code base.
+Figuring out how I managed to fuck up $Revision$
+------------------------------------------------------------------------
+r421 | shadowed.wow | 2007-06-12 04:40:57 +0100 (Tue, 12 Jun 2007) | 2
lines
+
+Added searching, will filter by addon/category/subcategory on the
configuration panel and name on the management/performance page. Used hack
method for management page due to Tekkubs crazy-ass code.
+Fixed an error when a frame is added with OH being shown.
+------------------------------------------------------------------------
+r420 | shadowed.wow | 2007-06-09 05:03:16 +0100 (Sat, 09 Jun 2007) | 1 line
+
+Changed positioning of performance stuff slightly
+------------------------------------------------------------------------
+r419 | shadowed.wow | 2007-06-08 23:07:18 +0100 (Fri, 08 Jun 2007) | 3
lines
+
+Removed the usage of AddonPage.lua and DongleFrames.lua as they were only
used for examples (and lord cladhaire is whiny).
+Added CPU per second (position needs checking)
+Fixed unloaded addons showing
+------------------------------------------------------------------------
+r418 | tekkub | 2007-06-08 20:48:00 +0100 (Fri, 08 Jun 2007) | 1 line
+
+OptionHouse - Another round of getglobal/blah:GetName() removals... next
up: removing frame names that aren't needed (stop cluttering the global
namespace with frame names!)
+------------------------------------------------------------------------
+r417 | tekkub | 2007-06-07 21:32:41 +0100 (Thu, 07 Jun 2007) | 3 lines
+
+OptionHouse
+- Fixed tab selection (again :P)
+- Removed some unneeded calls to getglobal and frame:GetName()
+------------------------------------------------------------------------
+r416 | tekkub | 2007-06-07 21:18:41 +0100 (Thu, 07 Jun 2007) | 1 line
+
+OptionHouse - Fixed parenting of the sample config frames so they hide on
tab changes
+------------------------------------------------------------------------
+r415 | shadowed.wow | 2007-06-07 20:29:21 +0100 (Thu, 07 Jun 2007) | 2
lines
+
+Added memory per second to the performance tab, also made it update once a
second while the frame is open for CPU/Memory/MiR updating.
+You can now sort all of the columns due to lord cladhaires request.
+------------------------------------------------------------------------
+r414 | shadowed.wow | 2007-06-07 09:06:58 +0100 (Thu, 07 Jun 2007) | 3
lines
+
+Category selection will work completely now including when an addon only
has one category and no subcategories registered
+Added in the performance page, will sort by highest memory when CPU
profiling is disabled, and highest memory + CPU when it's on
+Changed the metadata grabbing for management and performance to also check
the list of registered addons for getting author and version data
+------------------------------------------------------------------------
+r413 | shadowed.wow | 2007-06-07 07:27:05 +0100 (Thu, 07 Jun 2007) | 3
lines
+
+Switched category selection back too text detection not ids since it's
easier to detect whats open/closed
+Improved the Filter_UpdateList code, it'll actually work now with setting
a function and/or handler
+Added noCache argument to RegisterSubCategory and RegisterCategory for
lord Thrae, when you pass the noCache flag it wont save the frame and will
call the function and/or handler everytime.
+------------------------------------------------------------------------
+r412 | tekkub | 2007-06-07 01:57:41 +0100 (Thu, 07 Jun 2007) | 1 line
+
+OptionHouse - Nudging scroll bar a tad to close gaps
+------------------------------------------------------------------------
+r411 | tekkub | 2007-06-07 01:43:19 +0100 (Thu, 07 Jun 2007) | 1 line
+
+OptionHouse - Oh look, I found the background texture for scroll bars...
why doesn't FSF use this?
+------------------------------------------------------------------------
+r410 | tekkub | 2007-06-07 01:05:31 +0100 (Thu, 07 Jun 2007) | 1 line
+
+OptionHouse - Added ESC menu button
+------------------------------------------------------------------------
+r409 | tekkub | 2007-06-06 20:22:02 +0100 (Wed, 06 Jun 2007) | 1 line
+
+OptionHouse - It might be fake, but it scrolls!
+------------------------------------------------------------------------
+r408 | tekkub | 2007-06-06 09:12:48 +0100 (Wed, 06 Jun 2007) | 1 line
+
+OptionHouse - Reworked title fontstrings to prevent wrapping/overflow, but
still use as much space as is available
+------------------------------------------------------------------------
+r407 | tekkub | 2007-06-06 07:08:40 +0100 (Wed, 06 Jun 2007) | 1 line
+
+OptionHouse - Let's not clutter up the global namespace with frames
+------------------------------------------------------------------------
+r406 | tekkub | 2007-06-06 05:32:00 +0100 (Wed, 06 Jun 2007) | 1 line
+
+OptionHouse - Enable/disable all buttons added
+------------------------------------------------------------------------
+r405 | tekkub | 2007-06-06 04:47:18 +0100 (Wed, 06 Jun 2007) | 4 lines
+
+OptionHouse
+- Color addon name for some cases (LoD, Disabled, Error)
+- Checkbox now enable/disables
+- Added reloadui button
+------------------------------------------------------------------------
+r404 | tekkub | 2007-06-06 04:06:07 +0100 (Wed, 06 Jun 2007) | 1 line
+
+OptionHouse - Management tab now shows real data, but doesn't scroll or
enable/disable yet
+------------------------------------------------------------------------
+r403 | tekkub | 2007-06-06 02:39:29 +0100 (Wed, 06 Jun 2007) | 1 line
+
+OptionHouse - Oh look, the tabs actually do something now.
+------------------------------------------------------------------------
+r402 | tekkub | 2007-06-05 20:18:09 +0100 (Tue, 05 Jun 2007) | 1 line
+
+OptionHouse - Only register sample addons on first load
+------------------------------------------------------------------------
+r401 | tekkub | 2007-06-05 20:11:46 +0100 (Tue, 05 Jun 2007) | 1 line
+
+OptionHouse - More tab stuff, why were we calling
getglobal(frame:GetName()... when we know the frame's name is a constant?
+------------------------------------------------------------------------
+r400 | tekkub | 2007-06-05 19:27:32 +0100 (Tue, 05 Jun 2007) | 1 line
+
+OptionHouse - Fixing tab selection on first open
+------------------------------------------------------------------------
+r399 | jnwhiteh | 2007-06-05 11:49:43 +0100 (Tue, 05 Jun 2007) | 3 lines
+
+* Moved Dongle-1.1 from trunk to branches
+* Moved Dongle-2.0 from branches to trunk
+
+------------------------------------------------------------------------
+r398 | shadowed.wow | 2007-06-05 08:05:22 +0100 (Tue, 05 Jun 2007) | 3
lines
+
+Added in OptionHouse:RegisterAddOn, addonObj:RegisterCategory,
addonObj:RegisterSubCategory. RegisterAddOn will return an addonObj that
can be used for the category and sub category registering, currently the
filters page will support this but they don't actually call the frames
functions yet, have to work out a solution to figure out what
function/handler to call.
+
+Moved DongleFrames/AddonPage to load before OptionHouse, also modified
AddonPage to use the Register* functions as an example.
+------------------------------------------------------------------------
+r397 | jnwhiteh | 2007-06-04 22:15:16 +0100 (Mon, 04 Jun 2007) | 2 lines
+
+* Updating major revision in trunk
+
+------------------------------------------------------------------------
+r396 | jnwhiteh | 2007-06-04 22:14:33 +0100 (Mon, 04 Jun 2007) | 2 lines
+
+* Updated major revision string
+
+------------------------------------------------------------------------
+r395 | jnwhiteh | 2007-06-04 02:46:06 +0100 (Mon, 04 Jun 2007) | 2 lines
+
+* Tagging 1.1-RC1
+
+------------------------------------------------------------------------
+r394 | jnwhiteh | 2007-06-04 02:44:57 +0100 (Mon, 04 Jun 2007) | 2 lines
+
+* Creating a directory for 1.1 Release Candidates
+
+------------------------------------------------------------------------
+r393 | shadowed.wow | 2007-05-31 18:52:44 +0100 (Thu, 31 May 2007) | 1 line
+
+Silly Tekkub, "OptionHouseFrame" not "OptionsHouseFrame"
+------------------------------------------------------------------------
+r392 | tekkub | 2007-05-31 07:37:45 +0100 (Thu, 31 May 2007) | 1 line
+
+OptionHouse - ESC is a good thing
+------------------------------------------------------------------------
+r391 | tekkub | 2007-05-31 03:02:33 +0100 (Thu, 31 May 2007) | 1 line
+
+Renaming OptionsHouse >> OptionHouse, part 2
+------------------------------------------------------------------------
+r390 | tekkub | 2007-05-31 03:01:19 +0100 (Thu, 31 May 2007) | 1 line
+
+Renaming OptionsHouse >> OptionHouse, part 1
+------------------------------------------------------------------------
+r389 | tekkub | 2007-05-31 02:58:53 +0100 (Thu, 31 May 2007) | 1 line
+
+OptionHouse - Adding sample config frame generator
+------------------------------------------------------------------------
+r388 | jnwhiteh | 2007-05-30 12:16:38 +0100 (Wed, 30 May 2007) | 2 lines
+
+* Comment out a bad line, so we don't error for right now.
+
+------------------------------------------------------------------------
+r387 | jnwhiteh | 2007-05-30 11:58:30 +0100 (Wed, 30 May 2007) | 2 lines
+
+* Added Mikk's portrait texture
+
+------------------------------------------------------------------------
+r386 | shadowed.wow | 2007-05-30 07:00:50 +0100 (Wed, 30 May 2007) | 3
lines
+
+Modifying buttons in LUA sucks.
+
+Changed text positioning so it's aligned to the left, text is moved over
to the right by 8px for categories, and 20px for sub-categories, also moved
some code around.
+------------------------------------------------------------------------
+r385 | shadowed.wow | 2007-05-30 06:50:14 +0100 (Wed, 30 May 2007) | 1 line
+
+Changed left-sided-quest-thing-that-we-need-a-name-for to use IDs instead
of text.
+------------------------------------------------------------------------
+r384 | shadowed.wow | 2007-05-30 03:01:02 +0100 (Wed, 30 May 2007) | 1 line
+
+Reverted sub-category count showing up next to name, fixed a couple of
positionings, and also removed local oh = frame because clad is silly.
+------------------------------------------------------------------------
+r383 | shadowed.wow | 2007-05-30 02:45:37 +0100 (Wed, 30 May 2007) | 1 line
+
+Added number of sub categories if any next to the categories name.
+------------------------------------------------------------------------
+r382 | shadowed.wow | 2007-05-30 02:27:57 +0100 (Wed, 30 May 2007) | 1 line
+
+Added scroll frame support, go to SSPVP -> Join for an example of the
scroll frame.
+------------------------------------------------------------------------
+r381 | shadowed.wow | 2007-05-30 01:02:15 +0100 (Wed, 30 May 2007) | 4
lines
+
+Changed local name to "OptionsHouseFrame" for consistency with all the
object naming.
+Added filters in, hack example code, because they work like the AH filters
you can have as many categories as you want per an addon, but only one
sub-category.
+Added a quick example table of an addon just to make the example actually
work.
+Moved frame to a local of OptionsHouse.lua instead of makeOptionsFrame,
since the filter and tab stuff needs the frame object.
+------------------------------------------------------------------------
+r380 | jnwhiteh | 2007-05-29 23:39:15 +0100 (Tue, 29 May 2007) | 2 lines
+
+* I'm lazy, use the player portait texture until I can bribe Mikk
+
+------------------------------------------------------------------------
+r379 | jnwhiteh | 2007-05-29 23:34:43 +0100 (Tue, 29 May 2007) | 4 lines
+
+* Frame is now draggable and clamped to screen
+* Only the title bar is draggable, may be off by a few pixels, feel free
to adjust
+* Added slash command /oh for dev, cause I'm lazy
+
+------------------------------------------------------------------------
+r378 | jnwhiteh | 2007-05-29 23:09:50 +0100 (Tue, 29 May 2007) | 2 lines
+
+* Frame will only be shown when you use the /opthouse slash command
+
+------------------------------------------------------------------------
+r377 | shadowed.wow | 2007-05-29 04:29:29 +0100 (Tue, 29 May 2007) | 4
lines
+
+Fixed tabs so they'll actually resize too the text.
+Also moved the tabs name from "OptionsHouseTabX"
to "OptionsHouseFrameTabX" because the old naming was causing issues when
using the PanelTemplates_* functions, tabs should function like they do on
the auction house UI now.
+
+Renamed the "Enable/Disable Addon" tab to "Addon Management" to be more
consistant with the other ones, and because it makes more sense.
+------------------------------------------------------------------------
+r376 | jnwhiteh | 2007-05-29 03:26:44 +0100 (Tue, 29 May 2007) | 2 lines
+
+* Added .toc and .lua for initial OptionsHouse work
+
+------------------------------------------------------------------------
+r375 | jnwhiteh | 2007-05-29 03:25:40 +0100 (Tue, 29 May 2007) | 2 lines
+
+* Branch for OH work
+
+------------------------------------------------------------------------
+r374 | jnwhiteh | 2007-05-23 01:47:24 +0100 (Wed, 23 May 2007) | 2 lines
+
+* .toc update for 2.1.0
+
+------------------------------------------------------------------------
+r373 | jnwhiteh | 2007-05-23 01:46:28 +0100 (Wed, 23 May 2007) | 2 lines
+
+* .toc update for 2.1.0
+
+------------------------------------------------------------------------
+r372 | jnwhiteh | 2007-05-22 23:07:00 +0100 (Tue, 22 May 2007) | 2 lines
+
+* Tagging Dongle-1.0-r871
+
+------------------------------------------------------------------------
+r371 | jnwhiteh | 2007-05-22 23:03:50 +0100 (Tue, 22 May 2007) | 2 lines
+
+* Index profileKeys correctly, since its in the sv instead of the db
+
+------------------------------------------------------------------------
+r370 | jnwhiteh | 2007-05-22 23:01:12 +0100 (Tue, 22 May 2007) | 2 lines
+
+* Fixing an issue where profile selections will not persist across sessions
+
+------------------------------------------------------------------------
+r369 | jnwhiteh | 2007-05-22 22:56:36 +0100 (Tue, 22 May 2007) | 2 lines
+
+* Fix an issue where profile selections aren't persisting across sessions
+
+------------------------------------------------------------------------
+r368 | tekkub | 2007-05-22 03:37:00 +0100 (Tue, 22 May 2007) | 1 line
+
+Rename the tag subdirs, adding one for 1.0-RC's
+------------------------------------------------------------------------
+r367 | jnwhiteh | 2007-05-21 23:15:51 +0100 (Mon, 21 May 2007) | 2 lines
+
+* Initial conversion of Dongle-2.0 to using the lunit test framework
+
+------------------------------------------------------------------------
+r366 | jnwhiteh | 2007-05-21 22:46:01 +0100 (Mon, 21 May 2007) | 2 lines
+
+* Renaming the initial Dongle-1.0 tag to be consistent with the rest of
the releases.
+
+------------------------------------------------------------------------
+r365 | tekkub | 2007-05-21 22:39:51 +0100 (Mon, 21 May 2007) | 1 line
+
+Moving Alphas and Betas to subdirectories
+------------------------------------------------------------------------
+r364 | jnwhiteh | 2007-05-20 19:54:24 +0100 (Sun, 20 May 2007) | 2 lines
+
+* Tagging Dongle-1.0-r863 to fix upgrade issues.
+
+------------------------------------------------------------------------
+r363 | jnwhiteh | 2007-05-20 19:52:10 +0100 (Sun, 20 May 2007) | 2 lines
+
+* Stop using methods that are in Dongle-2.0. Thanks.
+
+------------------------------------------------------------------------
+r362 | jnwhiteh | 2007-05-20 19:50:56 +0100 (Sun, 20 May 2007) | 2 lines
+
+* Stab me in the face, please.
+
+------------------------------------------------------------------------
+r361 | jnwhiteh | 2007-05-20 19:46:02 +0100 (Sun, 20 May 2007) | 2 lines
+
+* Tagging 1.0 fix for all the issues reported to-date.
+
+------------------------------------------------------------------------
+r360 | jnwhiteh | 2007-05-20 19:44:28 +0100 (Sun, 20 May 2007) | 2 lines
+
+* Nuke any old deactivate functions as we upgrade, to avoid issues
+
+------------------------------------------------------------------------
+r359 | jnwhiteh | 2007-05-20 19:42:50 +0100 (Sun, 20 May 2007) | 2 lines
+
+* Removing stale version
+
+------------------------------------------------------------------------
+r358 | jnwhiteh | 2007-05-20 19:42:38 +0100 (Sun, 20 May 2007) | 2 lines
+
+* Removing stale version
+
+------------------------------------------------------------------------
+r357 | jnwhiteh | 2007-05-20 18:23:13 +0100 (Sun, 20 May 2007) | 2 lines
+
+Cleanup
+
+------------------------------------------------------------------------
+r356 | jnwhiteh | 2007-05-20 18:23:03 +0100 (Sun, 20 May 2007) | 2 lines
+
+Cleanup
+
+------------------------------------------------------------------------
+r355 | jnwhiteh | 2007-05-20 18:22:02 +0100 (Sun, 20 May 2007) | 2 lines
+
+Tagging Dongle-1.0-r853
+
+------------------------------------------------------------------------
+r354 | jnwhiteh | 2007-05-20 18:17:31 +0100 (Sun, 20 May 2007) | 2 lines
+
+* Tagging r853 to branches for testing
+
+------------------------------------------------------------------------
+r353 | jnwhiteh | 2007-05-20 18:15:20 +0100 (Sun, 20 May 2007) | 2 lines
+
+* Move the lookup table check before the registrations
+
+------------------------------------------------------------------------
+r352 | jnwhiteh | 2007-05-20 18:10:25 +0100 (Sun, 20 May 2007) | 2 lines
+
+Tagging for haste test
+
+------------------------------------------------------------------------
+r351 | jnwhiteh | 2007-05-20 18:07:53 +0100 (Sun, 20 May 2007) | 2 lines
+
+* Ensure that the Dongle instance is always in the lookup table.
+
+------------------------------------------------------------------------
+r350 | jnwhiteh | 2007-05-20 15:15:58 +0100 (Sun, 20 May 2007) | 2 lines
+
+* Tagging Dongle-1.0-r849 for release
+
+------------------------------------------------------------------------
+r349 | jnwhiteh | 2007-05-20 15:13:08 +0100 (Sun, 20 May 2007) | 2 lines
+
+* Updated the activate function to resolve the activation issue we have
seen
+
+------------------------------------------------------------------------
+r348 | jnwhiteh | 2007-05-16 03:27:26 +0100 (Wed, 16 May 2007) | 5 lines
+
+* Added shortcut for debugstack
+* Added a lua based definition of strjoin
+* Added a global argcheck() to the build environment, for testing purposes
+* Tested to ensure that errors are properly thrown by argcheck()
+
+------------------------------------------------------------------------
+r347 | jnwhiteh | 2007-05-15 01:19:58 +0100 (Tue, 15 May 2007) | 2 lines
+
+* Reverting rev num hack, since 1.1 hasn't been released yet
+
+------------------------------------------------------------------------
+r346 | jnwhiteh | 2007-05-15 01:18:12 +0100 (Tue, 15 May 2007) | 3 lines
+
+* Attempt to fix the triple-upgrade issue, in Dongle-1.0 branch.
+* Added code to increment the revision number + 500, to ensure things load
properly due to a versioning issue.
+
+------------------------------------------------------------------------
+r345 | jnwhiteh | 2007-05-15 00:59:26 +0100 (Tue, 15 May 2007) | 3 lines
+
+* Artificially inflate the revision number by 500, to ensure we load in
the right order.
+* Attempt to fix the triple upgrade bug by removing all of that logic from
Activate, and removing the Deactivate function
+
+------------------------------------------------------------------------
+r344 | jnwhiteh | 2007-05-12 17:06:29 +0100 (Sat, 12 May 2007) | 2 lines
+
+Premature tag
+
+------------------------------------------------------------------------
+r343 | jnwhiteh | 2007-05-12 16:54:47 +0100 (Sat, 12 May 2007) | 2 lines
+
+Tagging Dongle-1.1-r342
+
+------------------------------------------------------------------------
+r342 | jnwhiteh | 2007-05-12 16:47:33 +0100 (Sat, 12 May 2007) | 2 lines
+
+* Removing old code that leaked a global
+
+------------------------------------------------------------------------
+r341 | jnwhiteh | 2007-05-12 16:28:13 +0100 (Sat, 12 May 2007) | 2 lines
+
+* Fixing a bug in the Dongle upgrade process. This fix only exists in
Dongle-1.1 and beyond
+
+------------------------------------------------------------------------
+r340 | jnwhiteh | 2007-05-02 04:06:06 +0100 (Wed, 02 May 2007) | 2 lines
+
+Altered output of unit tests slightly, so its clear what file they
correpsond to
+
+------------------------------------------------------------------------
+r339 | jnwhiteh | 2007-05-02 04:04:15 +0100 (Wed, 02 May 2007) | 2 lines
+
+Fixed an issue with root level detection on unix machines
+
+------------------------------------------------------------------------
+r338 | jnwhiteh | 2007-05-02 03:59:57 +0100 (Wed, 02 May 2007) | 1 line
+
+Initial import of 2.0 development branch
+------------------------------------------------------------------------
+r337 | jnwhiteh | 2007-05-02 03:58:48 +0100 (Wed, 02 May 2007) | 1 line
+
+Creating 2.0 branch for development
+------------------------------------------------------------------------
+r336 | evlogimenos | 2007-04-29 18:56:01 +0100 (Sun, 29 Apr 2007) | 1 line
+
+Add DongleTimer.
+------------------------------------------------------------------------
+r335 | evlogimenos | 2007-04-29 18:55:54 +0100 (Sun, 29 Apr 2007) | 1 line
+
+Add unit test for DongleTimer.
+------------------------------------------------------------------------
+r334 | evlogimenos | 2007-04-29 18:54:51 +0100 (Sun, 29 Apr 2007) | 2 lines
+
+Branch DongleUnitTests-1.0 to match Dongle-1.0
+
+------------------------------------------------------------------------
+r333 | evlogimenos | 2007-04-29 18:53:40 +0100 (Sun, 29 Apr 2007) | 2 lines
+
+Branch Dongle-1.0
+
+------------------------------------------------------------------------
+r332 | evlogimenos | 2007-04-29 18:52:17 +0100 (Sun, 29 Apr 2007) | 2 lines
+
+Delete premature branch.
+
+------------------------------------------------------------------------
+r331 | evlogimenos | 2007-04-29 18:41:39 +0100 (Sun, 29 Apr 2007) | 1 line
+
+Update the test to match the error string returned.
+------------------------------------------------------------------------
+r330 | evlogimenos | 2007-04-29 17:04:36 +0100 (Sun, 29 Apr 2007) | 1 line
+
+Make tab into a space inside the error text.
+------------------------------------------------------------------------
+r329 | evlogimenos | 2007-04-29 16:59:12 +0100 (Sun, 29 Apr 2007) | 1 line
+
+Add 08DongleError to the mix as well.
+------------------------------------------------------------------------
+r328 | evlogimenos | 2007-04-29 16:58:45 +0100 (Sun, 29 Apr 2007) | 1 line
+
+Change expected error message to match the actual one returned.
+------------------------------------------------------------------------
+r327 | evlogimenos | 2007-04-29 16:58:13 +0100 (Sun, 29 Apr 2007) | 1 line
+
+Change text to have only 1 space after the full stop.
+------------------------------------------------------------------------
+r326 | evlogimenos | 2007-04-29 15:41:12 +0100 (Sun, 29 Apr 2007) | 1 line
+
+Convert spaces to tabs.
+------------------------------------------------------------------------
+r325 | jnwhiteh | 2007-04-28 02:48:43 +0100 (Sat, 28 Apr 2007) | 2 lines
+
+Tagged Dongle-1.0-r324
+
+------------------------------------------------------------------------
+r324 | jnwhiteh | 2007-04-28 02:45:47 +0100 (Sat, 28 Apr 2007) | 1 line
+
+* Added a DongleDBObject:GetCurrentProfile() function which returns the
current profile key.
+------------------------------------------------------------------------
+r323 | jnwhiteh | 2007-04-28 02:45:15 +0100 (Sat, 28 Apr 2007) | 2 lines
+
+* Added a DongleDBObject:GetCurrentProfile() function, which returns the
current profile key
+
+------------------------------------------------------------------------
+r322 | jnwhiteh | 2007-04-25 02:35:54 +0100 (Wed, 25 Apr 2007) | 1 line
+
+* Updated the build script to use remote repository when running the build
process. Damn svk.
+------------------------------------------------------------------------
+r321 | jnwhiteh | 2007-04-25 02:34:34 +0100 (Wed, 25 Apr 2007) | 2 lines
+
+* Tagged Dongle-1.0-r320
+
+------------------------------------------------------------------------
+r320 | jnwhiteh | 2007-04-25 02:13:47 +0100 (Wed, 25 Apr 2007) | 1 line
+
+* Added a test for the :HasModule nil index issue.
+------------------------------------------------------------------------
+r319 | jnwhiteh | 2007-04-25 02:10:13 +0100 (Wed, 25 Apr 2007) | 1 line
+
+* Fixed an issue where :HasModule() would error when called on a Dongle
with no modules
+------------------------------------------------------------------------
+r318 | jnwhiteh | 2007-04-20 04:02:15 +0100 (Fri, 20 Apr 2007) | 2 lines
+
+* Updated database tests to include testing of the ["*"] key.
+
+------------------------------------------------------------------------
+r317 | jnwhiteh | 2007-04-20 04:01:56 +0100 (Fri, 20 Apr 2007) | 2 lines
+
+* Fixed a few issues with the magic ["*"] database key, where defaults
were not being set, or removed properly
+
+------------------------------------------------------------------------
+r316 | jnwhiteh | 2007-04-18 23:43:15 +0100 (Wed, 18 Apr 2007) | 2 lines
+
+Tagging Dongle-1.0-r315 to fix an issue with ClearDBDefaults()
+
+------------------------------------------------------------------------
+r315 | jnwhiteh | 2007-04-18 23:35:03 +0100 (Wed, 18 Apr 2007) | 2 lines
+
+* Fix to ClearDBDefaults() to prevent any errors at logout
+
+------------------------------------------------------------------------
+r314 | jnwhiteh | 2007-04-18 07:22:21 +0100 (Wed, 18 Apr 2007) | 2 lines
+
+Tagging Dongle-1.0-r313. Non critical, but fixes a bug in DongleStub
logging mechanism.
+
+------------------------------------------------------------------------
+r313 | jnwhiteh | 2007-04-18 07:20:27 +0100 (Wed, 18 Apr 2007) | 2 lines
+
+* Fixed an issue in DongleStub where the logs would show the incorrect
deactivate minor version
+
+------------------------------------------------------------------------
+r312 | jnwhiteh | 2007-04-18 07:13:10 +0100 (Wed, 18 Apr 2007) | 2 lines
+
+* Tagging Dongle-1.0-r311
+
+------------------------------------------------------------------------
+r311 | jnwhiteh | 2007-04-18 07:06:22 +0100 (Wed, 18 Apr 2007) | 3 lines
+
+* Ensure that if sv.profiles doesn't exist when a database is initialized,
that its created when its accessed through db.profiles
+* Bugfix to resolve an issue with Clique on a fresh install
+
+------------------------------------------------------------------------
+r310 | jnwhiteh | 2007-04-15 21:44:53 +0100 (Sun, 15 Apr 2007) | 3 lines
+
+* Tagged Dongle-1.0-r309
+* Minor improvement to argcheck()
+
+------------------------------------------------------------------------
+r309 | jnwhiteh | 2007-04-15 21:43:27 +0100 (Sun, 15 Apr 2007) | 2 lines
+
+* Fixed line numbering issues in the error tests
+
+------------------------------------------------------------------------
+r308 | jnwhiteh | 2007-04-15 18:38:23 +0100 (Sun, 15 Apr 2007) | 2 lines
+
+* Updated argcheck in unit test.
+
+------------------------------------------------------------------------
+r307 | jnwhiteh | 2007-04-15 18:32:31 +0100 (Sun, 15 Apr 2007) | 2 lines
+
+* Resolved an error in argcheck, and changed the assertion to avoid
running string.format() when there's no argument error
+
+------------------------------------------------------------------------
+r306 | jnwhiteh | 2007-04-13 02:35:40 +0100 (Fri, 13 Apr 2007) | 2 lines
+
+Copying Dongle-1.0 to branches for support development
+
+------------------------------------------------------------------------
+r305 | jnwhiteh | 2007-04-13 02:34:31 +0100 (Fri, 13 Apr 2007) | 2 lines
+
+Tagging Dongle-1.0 release
+
+------------------------------------------------------------------------
+r304 | jnwhiteh | 2007-04-13 02:26:24 +0100 (Fri, 13 Apr 2007) | 2 lines
+
+* Updated unit tests
+
+------------------------------------------------------------------------
+r303 | jnwhiteh | 2007-04-11 22:46:56 +0100 (Wed, 11 Apr 2007) | 3 lines
+
+* Ensure we don't run any :Enable() code before PLAYER_ENTERING_WORLD.
+* Fixed a bug introduced with my LoD revamp.
+
+------------------------------------------------------------------------
+r302 | jnwhiteh | 2007-04-11 22:08:06 +0100 (Wed, 11 Apr 2007) | 3 lines
+
+* Changed default profile key to "CharName - ServerName" in order to be
more readable in other locales
+* Changed the class specific profile key to be the second return from
UnitClass(), so its localised.
+
+------------------------------------------------------------------------
+r301 | jnwhiteh | 2007-04-10 02:17:49 +0100 (Tue, 10 Apr 2007) | 2 lines
+
+* Dongle is now load on demand. This shouldn't make a difference, but may
be more convenient for development.
+
+------------------------------------------------------------------------
+r300 | jnwhiteh | 2007-04-10 02:17:01 +0100 (Tue, 10 Apr 2007) | 3 lines
+
+* Altered the ADDON_LOADED handler. If Dongle is loaded _after_
PLAYER_ENTERING_WORLD, we check for IsLoggedIn() or
ChatFrame1.defaultLanguage.
+* Anything in the loadqueue is initialized, then when the queue is empty,
if we're past P_E_W, all addons in the loadorder queue are :Enabled().
+
+------------------------------------------------------------------------
+r299 | jnwhiteh | 2007-04-10 01:18:32 +0100 (Tue, 10 Apr 2007) | 2 lines
+
+* Added code to ADDON_LOADED handler to detect if Dongle is loading after
PLAYER_ENTERING_WORLD.
+
+------------------------------------------------------------------------
+r298 | jnwhiteh | 2007-04-09 01:41:33 +0100 (Mon, 09 Apr 2007) | 2 lines
+
+* Updates for DongleDB changes, and stray PrintF changes.
+
+------------------------------------------------------------------------
+r297 | jnwhiteh | 2007-04-09 01:41:13 +0100 (Mon, 09 Apr 2007) | 3 lines
+
+* :InitializeDB() now tables a table as the first argument, as well as a
global name
+* Namespaces no longer have the .SetProfile() method.
+
+------------------------------------------------------------------------
+r296 | jnwhiteh | 2007-04-07 00:19:30 +0100 (Sat, 07 Apr 2007) | 2 lines
+
+* Fixed an issue with printFHelp from the Echo/EchoF change.
+
+------------------------------------------------------------------------
+r295 | jnwhiteh | 2007-04-06 18:09:40 +0100 (Fri, 06 Apr 2007) | 2 lines
+
+Tagging Dongle-1.0-RC3
+
+------------------------------------------------------------------------
+r294 | jnwhiteh | 2007-04-06 18:07:33 +0100 (Fri, 06 Apr 2007) | 2 lines
+
+* Updated unit tests for Dongle-1.0-RC3
+
+------------------------------------------------------------------------
+r293 | jnwhiteh | 2007-04-06 18:06:38 +0100 (Fri, 06 Apr 2007) | 2 lines
+
+* Changed major version to Dongle-1.0-RC3
+
+------------------------------------------------------------------------
+r292 | jnwhiteh | 2007-04-06 18:05:34 +0100 (Fri, 06 Apr 2007) | 2 lines
+
+* Remove DongleUtils.lua from the build process.
+
+------------------------------------------------------------------------
+r291 | jnwhiteh | 2007-04-06 18:04:04 +0100 (Fri, 06 Apr 2007) | 3 lines
+
+* Added a logging mechanism to DongleStub that allows us to debug library
issues.
+* All registration/activation entries are logged in DongleStub.log.
+
+------------------------------------------------------------------------
+r290 | jnwhiteh | 2007-04-06 15:27:29 +0100 (Fri, 06 Apr 2007) | 2 lines
+
+* Added unit tests to cover the new assertions added to
DongleStub:Register()
+
+------------------------------------------------------------------------
+r289 | jnwhiteh | 2007-04-06 15:26:45 +0100 (Fri, 06 Apr 2007) | 4 lines
+
+* Change to major version of DongleStub to "DongleStub"
+* Added code to :IsNewVersion() to compensate for DongleStub versions with
different major versions
+* This should prevent any errors from DongleStub-BetaX and DongleStub from
occuring.
+
+------------------------------------------------------------------------
+r288 | jnwhiteh | 2007-04-06 14:10:06 +0100 (Fri, 06 Apr 2007) | 2 lines
+
+* Updated build script to export DUT into the tagged directory
+
+------------------------------------------------------------------------
+r287 | jnwhiteh | 2007-04-06 13:45:54 +0100 (Fri, 06 Apr 2007) | 2 lines
+
+Tagging Dongle-1.0-RC2
+
+------------------------------------------------------------------------
+r286 | jnwhiteh | 2007-04-06 13:42:02 +0100 (Fri, 06 Apr 2007) | 2 lines
+
+* Update unit tests to use the correct major version. This _really_ needs
to be automated.
+
+------------------------------------------------------------------------
+r285 | jnwhiteh | 2007-04-06 13:36:58 +0100 (Fri, 06 Apr 2007) | 2 lines
+
+* Update of major versions to Dongle-1.0-RC2
+
+------------------------------------------------------------------------
+r284 | jnwhiteh | 2007-04-06 13:35:55 +0100 (Fri, 06 Apr 2007) | 2 lines
+
+Bad tag
+
+------------------------------------------------------------------------
+r283 | jnwhiteh | 2007-04-06 13:35:25 +0100 (Fri, 06 Apr 2007) | 2 lines
+
+* Tagging Dongle-1.0-RC2 release. Dongle will be frozen on Sunday at the
latest, so please report any issues as soon as possible.
+
+------------------------------------------------------------------------
+r282 | jnwhiteh | 2007-04-06 13:34:30 +0100 (Fri, 06 Apr 2007) | 2 lines
+
+* Updated DongleUtils to not look for a specific version of DongleStub.
That should not be necessary any more.
+
+------------------------------------------------------------------------
+r281 | jnwhiteh | 2007-04-06 05:11:26 +0100 (Fri, 06 Apr 2007) | 2 lines
+
+* Tagged Dongle-1.0-RC1
+
+------------------------------------------------------------------------
+r280 | jnwhiteh | 2007-04-06 05:09:23 +0100 (Fri, 06 Apr 2007) | 2 lines
+
+* Updated major version to Dongle-1.0-RC1
+
+------------------------------------------------------------------------
+r279 | jnwhiteh | 2007-04-06 05:07:52 +0100 (Fri, 06 Apr 2007) | 2 lines
+
+* Updated unit tests to find the issues exposed in last iteration
+
+------------------------------------------------------------------------
+r278 | jnwhiteh | 2007-04-06 05:07:26 +0100 (Fri, 06 Apr 2007) | 3 lines
+
+* Fixed error reporting in Print/Debug/etc.
+* Resolved an issue with Debug() not passing arguments properly
+
+------------------------------------------------------------------------
+r277 | jnwhiteh | 2007-04-06 04:42:54 +0100 (Fri, 06 Apr 2007) | 3 lines
+
+* Fixed an issue with print handlers due to an extra local I just added.
+* Removed header print from first line of slash command usage message
+
+------------------------------------------------------------------------
+r276 | jnwhiteh | 2007-04-06 03:45:25 +0100 (Fri, 06 Apr 2007) | 2 lines
+
+* Updated unit tests to include Echo/EchoF and to properly test both sets
of error messages.
+
+------------------------------------------------------------------------
+r275 | jnwhiteh | 2007-04-06 03:41:21 +0100 (Fri, 06 Apr 2007) | 2 lines
+
+* Actually implemented the logic for "Echo" and "EchoF"
+
+------------------------------------------------------------------------
+r274 | jnwhiteh | 2007-04-06 03:37:30 +0100 (Fri, 06 Apr 2007) | 2 lines
+
+* Added DongleObject:Echo() and DongleObject:EchoF() which doesn't include
the addon header to the message
+
+------------------------------------------------------------------------
+r273 | jnwhiteh | 2007-04-06 03:25:26 +0100 (Fri, 06 Apr 2007) | 1 line
+
+Deleting wiki page ModuleAPI.
+------------------------------------------------------------------------
+r272 | jnwhiteh | 2007-04-06 03:25:15 +0100 (Fri, 06 Apr 2007) | 1 line
+
+Deleting wiki page DatabaseAPI.
+------------------------------------------------------------------------
+r271 | jnwhiteh | 2007-04-06 03:25:03 +0100 (Fri, 06 Apr 2007) | 1 line
+
+Deleting wiki page CoreAPI.
+------------------------------------------------------------------------
+r270 | jnwhiteh | 2007-04-06 03:24:54 +0100 (Fri, 06 Apr 2007) | 1 line
+
+Deleting wiki page PrintAPI.
+------------------------------------------------------------------------
+r269 | jnwhiteh | 2007-04-06 03:24:39 +0100 (Fri, 06 Apr 2007) | 1 line
+
+Deleting wiki page SlashCommandAPI.
+------------------------------------------------------------------------
+r268 | jnwhiteh | 2007-04-06 03:24:32 +0100 (Fri, 06 Apr 2007) | 1 line
+
+Deleting wiki page EventsAPI.
+------------------------------------------------------------------------
+r267 | jnwhiteh | 2007-04-03 01:51:37 +0100 (Tue, 03 Apr 2007) | 2 lines
+
+* Removed DongleObject checks, since they can be used in a normal table.
+
+------------------------------------------------------------------------
+r266 | jnwhiteh | 2007-04-03 01:51:00 +0100 (Tue, 03 Apr 2007) | 2 lines
+
+* DongleMessage does not require a Dongle object anymore, so non-Dongle
objects can register for our custom messages.
+
+------------------------------------------------------------------------
+r265 | Tekkub | 2007-03-21 17:34:38 +0000 (Wed, 21 Mar 2007) | 1 line
+
+Tagging Dongle-Beta1-r264
+------------------------------------------------------------------------
+r264 | Tekkub | 2007-03-21 17:31:38 +0000 (Wed, 21 Mar 2007) | 1 line
+
+Applying patch, resolves #22
+------------------------------------------------------------------------
+r263 | jnwhiteh | 2007-03-20 02:32:02 +0000 (Tue, 20 Mar 2007) | 2 lines
+
+Tagging Beta1-r262
+
+------------------------------------------------------------------------
+r262 | jnwhiteh | 2007-03-20 02:31:02 +0000 (Tue, 20 Mar 2007) | 2 lines
+
+* Changed database code to allow for ["*"] definitions in the defaults.
+
+------------------------------------------------------------------------
+r261 | jnwhiteh | 2007-03-18 04:21:26 +0000 (Sun, 18 Mar 2007) | 2 lines
+
+A number of fixes, clarifications, and feature additions.
+
+------------------------------------------------------------------------
+r260 | jnwhiteh | 2007-03-18 04:06:59 +0000 (Sun, 18 Mar 2007) | 2 lines
+
+* Added the code for /slash profile list, as a basic example of what we
can do.
+
+------------------------------------------------------------------------
+r259 | jnwhiteh | 2007-03-18 03:43:01 +0000 (Sun, 18 Mar 2007) | 2 lines
+
+* Minor changes to unit testing.
+
+------------------------------------------------------------------------
+r258 | jnwhiteh | 2007-03-18 03:42:27 +0000 (Sun, 18 Mar 2007) | 2 lines
+
+* Initial coding of SlashCmdObject:InjectDBCommands().
+
+------------------------------------------------------------------------
+r257 | jnwhiteh | 2007-03-18 03:31:19 +0000 (Sun, 18 Mar 2007) | 3 lines
+
+* Changed slash command system to use arrays, so the usage lines can be
printed in the order they are registered.
+* Closes issues 16
+
+------------------------------------------------------------------------
+r256 | jnwhiteh | 2007-03-18 03:25:10 +0000 (Sun, 18 Mar 2007) | 3 lines
+
+* Removed extra assert.
+* Closes issue 14
+
+------------------------------------------------------------------------
+r255 | jnwhiteh | 2007-03-18 03:23:50 +0000 (Sun, 18 Mar 2007) | 3 lines
+
+* Ensure RegisterNamespace gets added to each DB object.
+* Fixed a number of bugs in RegisterNamespace, due to unit testing.
+
+------------------------------------------------------------------------
+r254 | jnwhiteh | 2007-03-13 22:47:37 +0000 (Tue, 13 Mar 2007) | 2 lines
+
+Tagging initial Beta-1 release (Dongle-Beta1-r252)
+
+------------------------------------------------------------------------
+r253 | jnwhiteh | 2007-03-13 22:43:54 +0000 (Tue, 13 Mar 2007) | 2 lines
+
+Updated unit testing to test for namespaces, and other new functionality
changes.
+
+------------------------------------------------------------------------
+r252 | jnwhiteh | 2007-03-13 22:13:21 +0000 (Tue, 13 Mar 2007) | 2 lines
+
+* Addons can no longer register for PLAYER_LOGIN or PLAYER_LOGOUT. An
error message is displayed if they attempt to register for these events.
+
+------------------------------------------------------------------------
+r251 | jnwhiteh | 2007-03-01 00:36:54 +0000 (Thu, 01 Mar 2007) | 7 lines
+
+* Renamed 04DongleEvents.lua to 04DongleMessage.lua in the .toc so it
loads properly
+* Added a naming argument to UnitTest:New() that requires a name, so we
can track which tests have been run, and which have not. If you add a test
file, you need to add that to 99Completion.lua.
+* Removed all ferror functions, and replaced them with a global argerror
function.
+* Added a unit test for IsMessageRegistered()
+* Added a 08DongleError.lua file, which tests the argcheck and assert
custom functions, to ensure they throw their errors at the correct level.
+* Changed the unit test harness to use xpcall() so we can get a full
internal stack trace.
+
+------------------------------------------------------------------------
+r250 | jnwhiteh | 2007-03-01 00:34:33 +0000 (Thu, 01 Mar 2007) | 28 lines
+
+* Updated copyright notice in license
+* Added DongleObj:IsEventRegistered()
+* Added DongleObj:IsMessageRegistered()
+* Moved all error messages into a small localisation table
+* Moved DB local function declarations to the start of the DB section for
declaration purpose
+* Altered the database to lazy evaluate all sections of the database.
This means that any database section (.profile, .char, .faction) will not
be initialized (including defaults) until accessed
+* Removed db.profileKey, you can access this value via db.char.profileKey
and db.keys.profile
+* Added table db.keys which lists all section keys
+* Removed all local db .key references.
+* Altered slash command system to check cmd[handler] before it checks
parent[handler] to allow definition of methods within the slash command
table itself.
+* Added a message handler for DONGLE_PROFILE_CHANGED
+* Incremented major version to Dongle-Beta1
+* Added preliminary support for namespaces, which needs to be fully
converted and tested.
+DongleDBObject:RegisterNamespace(name[, defaults])
+Args:
+ * name (string) - An internal name for this namespace
+ * defaults (table) - A table expressing defaults for this namespace
+Returns:
+ * db (DongleDBObject) - The new database object.
+
+A namespace is a full fledged database with all rights and privileges, but
has the following nuances:
+Behavior:
+* A namespace is created without a global variable, under the
sv.namespaces[name] portion of the parent saved variable. This means you
can have multiple modules that have full fledged database objects without
needing more than one global variable.
+* When a parent database (namespaces are children) changes its profile
(i.e. when DONGLE_PROFILE_CHANGED fires), each child will be automatically
updated (they will fire their own DONGLE_PROFILE_CHANGED messages).
+* These namespace objects do not fire a true "sv_name" in the event, nore
do they fire a Dongle object as the parent. Instead they will fire
the "parent" database object, and the sv object as the sv_name.
+
+All namespace features are untagged, and the API may change, consider that
feature extremely experimental.
+
+------------------------------------------------------------------------
+r249 | jnwhiteh | 2007-01-31 22:33:21 +0000 (Wed, 31 Jan 2007) | 2 lines
+
+Fix to DongleStub to ensure the local Dongle is re-bound
+
+------------------------------------------------------------------------
+r248 | tekkub | 2007-01-20 19:16:00 +0000 (Sat, 20 Jan 2007) | 1 line
+
+Dongle - Changed Print/PrintF args and argchecks to match how clad had
intended to do it, before he went crazy and did it all wrong like.
+------------------------------------------------------------------------
+r247 | tekkub | 2007-01-20 03:35:54 +0000 (Sat, 20 Jan 2007) | 1 line
+
+Committing in Clad's changes to Dongle, with some bugfixes. Unit tests
still need to be done.
+------------------------------------------------------------------------
+r246 | tekkub | 2007-01-17 11:08:47 +0000 (Wed, 17 Jan 2007) | 1 line
+
+Dongle - Added IsDebugEnabled, returns the dongle's debug level, or nil if
debug is disabled.
+------------------------------------------------------------------------
+r245 | evlogimenos | 2007-01-16 11:48:51 +0000 (Tue, 16 Jan 2007) | 1 line
+
+Streamline Activate()'s implementation a bit.
+------------------------------------------------------------------------
+r244 | evlogimenos | 2007-01-16 11:47:45 +0000 (Tue, 16 Jan 2007) | 1 line
+
+Bump TOC interface version.
+------------------------------------------------------------------------
+r243 | evlogimenos | 2007-01-14 21:03:43 +0000 (Sun, 14 Jan 2007) | 1 line
+
+Update comment to match the code.
+------------------------------------------------------------------------
+r242 | tekkub | 2007-01-13 19:02:45 +0000 (Sat, 13 Jan 2007) | 1 line
+
+Tagging Dongle-Beta0-r240
+------------------------------------------------------------------------
+r241 | tekkub | 2007-01-12 14:56:24 +0000 (Fri, 12 Jan 2007) | 1 line
+
+Un-featuring wiki pages, they're in the project description now
+------------------------------------------------------------------------
+r240 | tekkub | 2007-01-12 05:57:29 +0000 (Fri, 12 Jan 2007) | 2 lines
+
+- Set "-Beta0" major versions on all the Utils libs
+- Converted metro to do delayed messages instead of events
+------------------------------------------------------------------------
+r239 | evlogimenos | 2007-01-11 15:24:28 +0000 (Thu, 11 Jan 2007) | 2 lines
+
+Made some lookups in UnregisterEvent local (similar to UnregisterMessage).
+
+------------------------------------------------------------------------
+r238 | tekkub | 2007-01-11 14:58:11 +0000 (Thu, 11 Jan 2007) | 1 line
+
+Tagging Dongle-Beta0-r237
+------------------------------------------------------------------------
+r237 | tekkub | 2007-01-11 14:54:27 +0000 (Thu, 11 Jan 2007) | 1 line
+
+Removed more unneeded code (file-scope locals don't need to be nilled out,
GC will catch them correctly)
+------------------------------------------------------------------------
+r236 | tekkub | 2007-01-11 13:54:47 +0000 (Thu, 11 Jan 2007) | 1 line
+
+Removing some unneeded code from DongleUtils, probably more of this to come
+------------------------------------------------------------------------
+r235 | jnwhiteh | 2007-01-11 13:09:40 +0000 (Thu, 11 Jan 2007) | 2 lines
+
+Made some lookups in UnregisterMessage local
+
+------------------------------------------------------------------------
+r234 | jnwhiteh | 2007-01-11 13:05:37 +0000 (Thu, 11 Jan 2007) | 2 lines
+
+Renamed the original Beta0 to Dongle-Beta0-r232 for tag purposes
+
+------------------------------------------------------------------------
+r233 | tekkub | 2007-01-11 10:04:31 +0000 (Thu, 11 Jan 2007) | 1 line
+
+Adding minor version to Beta0, clad can change it if he wants something
different
+------------------------------------------------------------------------
+r232 | tekkub | 2007-01-11 09:06:04 +0000 (Thu, 11 Jan 2007) | 1 line
+
+Updating DongleUtils to use the new stub API
+------------------------------------------------------------------------
+r231 | evlogimenos | 2007-01-11 08:17:05 +0000 (Thu, 11 Jan 2007) | 1 line
+
+Simplify ModuleIterator function. Stop sorting the modules table since it
is unnecessary.
+------------------------------------------------------------------------
+r230 | jnwhiteh | 2007-01-11 03:54:11 +0000 (Thu, 11 Jan 2007) | 2 lines
+
+Tagged Beta0
+
+------------------------------------------------------------------------
+r229 | jnwhiteh | 2007-01-11 03:53:22 +0000 (Thu, 11 Jan 2007) | 2 lines
+
+Updated toc file for 2.0.3
+
+------------------------------------------------------------------------
+r228 | jnwhiteh | 2007-01-11 03:23:07 +0000 (Thu, 11 Jan 2007) | 2 lines
+
+Fixed issues with upgrading the library
+
+------------------------------------------------------------------------
+r227 | jnwhiteh | 2007-01-11 02:50:07 +0000 (Thu, 11 Jan 2007) | 3 lines
+
+Update version messages in Dongle
+Updated DongleUtils to check for the proper version of DongleStub
+
+------------------------------------------------------------------------
+r226 | jnwhiteh | 2007-01-11 02:48:49 +0000 (Thu, 11 Jan 2007) | 2 lines
+
+Removing so I can make a quick fix to DongleUtils
+
+------------------------------------------------------------------------
+r225 | jnwhiteh | 2007-01-11 02:42:13 +0000 (Thu, 11 Jan 2007) | 2 lines
+
+Tagging Beta0 Release. No compat changes without a major version bump pls.
+
+------------------------------------------------------------------------
+r224 | jnwhiteh | 2007-01-11 02:07:23 +0000 (Thu, 11 Jan 2007) | 2 lines
+
+Made a few functions local, to help with privacy just a little bit
+
+------------------------------------------------------------------------
+r223 | jnwhiteh | 2007-01-09 22:33:48 +0000 (Tue, 09 Jan 2007) | 2 lines
+
+Renamed DongleEvents properly
+
+------------------------------------------------------------------------
+r222 | jnwhiteh | 2007-01-09 01:11:24 +0000 (Tue, 09 Jan 2007) | 2 lines
+
+Updated tests for DongleStub to reflect tehe API changes
+
+------------------------------------------------------------------------
+r221 | jnwhiteh | 2007-01-09 01:10:11 +0000 (Tue, 09 Jan 2007) | 3 lines
+
+Updated DongleStub to latest version, with a major of DongleStub-Beta0, so
we can check for its existance
+*** IMPORTANT *** Calls to DongleStub:Register(lib) should put the return
back into lib, to rebind the local if necessary. DongleStub will ALWAYS
return the old table, if it exists, cleaned and copied
+
+------------------------------------------------------------------------
+r220 | jnwhiteh | 2007-01-08 03:02:16 +0000 (Mon, 08 Jan 2007) | 2 lines
+
+Updated unit tests to use the Message system instead of the event system,
where necessary
+
+------------------------------------------------------------------------
+r219 | jnwhiteh | 2007-01-08 03:01:43 +0000 (Mon, 08 Jan 2007) | 2 lines
+
+Added the message system in its first form, and converted all
handlers/triggers over to it
+
+------------------------------------------------------------------------
+r218 | jnwhiteh | 2007-01-08 02:28:26 +0000 (Mon, 08 Jan 2007) | 2 lines
+
+Do an svn update before building, to make sure we have the latest logs
+
+------------------------------------------------------------------------
+r217 | jnwhiteh | 2007-01-08 02:24:16 +0000 (Mon, 08 Jan 2007) | 2 lines
+
+Altered build script to dump filenames with commit messages
+
+------------------------------------------------------------------------
+r216 | jnwhiteh | 2007-01-08 02:15:07 +0000 (Mon, 08 Jan 2007) | 2 lines
+
+DongleUnitTests: Updated tests to pull down a local copy of Dongle, since
it is no longer global
+
+------------------------------------------------------------------------
+r215 | jnwhiteh | 2007-01-08 02:10:23 +0000 (Mon, 08 Jan 2007) | 3 lines
+
+Changed major version number to Dongle-Beta0
+Make the declaration of Dongle local
+
+------------------------------------------------------------------------
+r214 | jnwhiteh | 2007-01-08 02:08:12 +0000 (Mon, 08 Jan 2007) | 2 lines
+
+Updated Activate/Deactivate functions for new DongleStub
+
+------------------------------------------------------------------------
+r213 | jnwhiteh | 2007-01-08 02:07:46 +0000 (Mon, 08 Jan 2007) | 2 lines
+
+Updated all stray filenames to fix test errors.
+
+------------------------------------------------------------------------
+r212 | jnwhiteh | 2007-01-08 01:57:14 +0000 (Mon, 08 Jan 2007) | 2 lines
+
+Fixed a number of issues in DongleStub to resolve unit tests
+
+------------------------------------------------------------------------
+r211 | jnwhiteh | 2007-01-08 01:56:37 +0000 (Mon, 08 Jan 2007) | 2 lines
+
+DongleUnitTests: Added tests for DongleStub
+
+------------------------------------------------------------------------
+r210 | jnwhiteh | 2007-01-08 00:43:54 +0000 (Mon, 08 Jan 2007) | 2 lines
+
+DongleUnitTests: Moved all files up, and created a file for DongleStub
tests
+
+------------------------------------------------------------------------
+r209 | jnwhiteh | 2007-01-08 00:30:21 +0000 (Mon, 08 Jan 2007) | 6 lines
+
+Donglestub:
+Change deactivate and activate to arguments to register
+Altered the way the code is written to be more in line with Iriels'
original stub
+If the activate function returns true, then the old instance will not be
touched
+Upgrade order is Deactivate, Activate, nil/copy. Not sure if this is
right.
+
+------------------------------------------------------------------------
+r208 | evlogimenos | 2007-01-07 21:57:41 +0000 (Sun, 07 Jan 2007) | 1 line
+
+Add slash command objects upgrade code.
+------------------------------------------------------------------------
+r207 | evlogimenos | 2007-01-07 21:57:03 +0000 (Sun, 07 Jan 2007) | 1 line
+
+Add checks for slash command methods to make sure they are called on slash
command objects.
+------------------------------------------------------------------------
+r206 | evlogimenos | 2007-01-07 21:54:52 +0000 (Sun, 07 Jan 2007) | 1 line
+
+Add negative tests for calling slash command object methods on non slash
command objects.
+------------------------------------------------------------------------
+r205 | jnwhiteh | 2007-01-07 19:48:33 +0000 (Sun, 07 Jan 2007) | 4 lines
+
+Removed AdminEvents, we will no longer have hidden special
methods "CombatUnlock" and "CombatLockdown"
+Added a PLAYER_LOGOUT method to Dongle to handle database clears, and
calling :Disable()
+Removed event registrations for PRE and PRD
+
+------------------------------------------------------------------------
+r204 | jnwhiteh | 2007-01-05 22:43:12 +0000 (Fri, 05 Jan 2007) | 9 lines
+
+Changed some of the system to store an old list of the instances so they
can be updated as new versions are introduced. This is something we
probably need to be doing anyway
+Added a ReplaceInstance function from Iriel's stub which copies the new
methods into the old objects
+Cleaned up lib:Register() and made it a bit more in-line with the original
spec. Now stores all old instances in a list, so we can iterate them later.
+Process remains new:Activate() then old:Deactivate() then the method copy.
+Expected signatures for Activate and Deactivate have changed:
+new:Activate(self, oldInstance, oldList)
+oldInstance:Deactivate(self, oldList, newInstance)
+
+
+------------------------------------------------------------------------
+r203 | jnwhiteh | 2007-01-05 22:42:20 +0000 (Fri, 05 Jan 2007) | 8 lines
+
+Incremented version to Dongle-Beta1. This is a preliminary version,and
won't be tagged for a week or so.
+Removed TriggerEvent
+Added RegisterMessage, UnregisterMessage, UnregisterAllMessages,
TriggerMessage (named temporarily, we can change)
+Made Dongle.OnEvent a local function instead
+Added safecall()'s to OnEvent
+Implemented the new message functions
+
+
+------------------------------------------------------------------------
+r202 | jnwhiteh | 2007-01-05 22:37:09 +0000 (Fri, 05 Jan 2007) | 2 lines
+
+Branching trunk for changes in preparation for Beta release
+
+------------------------------------------------------------------------
+r201 | evlogimenos | 2007-01-04 01:07:53 +0000 (Thu, 04 Jan 2007) | 1 line
+
+Fix slash handler to not pass the an object as a first argument if the
registered handler was passed a function and not a string.
+------------------------------------------------------------------------
+r200 | jnwhiteh | 2007-01-03 23:55:17 +0000 (Wed, 03 Jan 2007) | 2 lines
+
+Added a unit test for cyclic events, to test the new event queue
+
+------------------------------------------------------------------------
+r199 | evlogimenos | 2007-01-03 23:30:39 +0000 (Wed, 03 Jan 2007) | 1 line
+
+Update test to test handlers passed as strings and stand alone functions.
+------------------------------------------------------------------------
+r198 | jnwhiteh | 2007-01-03 23:13:17 +0000 (Wed, 03 Jan 2007) | 2 lines
+
+Initial commit of an event queue to handle cyclic events
+
+------------------------------------------------------------------------
+r197 | evlogimenos | 2007-01-03 22:44:45 +0000 (Wed, 03 Jan 2007) | 1 line
+
+Updates to documentation I forgot to commit.
+------------------------------------------------------------------------
+r196 | jnwhiteh | 2007-01-02 22:03:20 +0000 (Tue, 02 Jan 2007) | 2 lines
+
+* Added svn2log.py so we can build better changelogs. It will use python
on your system if you have it, otherwise it will dump the standard
changelog.
+
+------------------------------------------------------------------------
+r195 | jnwhiteh | 2007-01-02 20:05:19 +0000 (Tue, 02 Jan 2007) | 2 lines
+
+Tagged 0.5.1-Alpha as an urgent bugfix for issues present in all versions
< r194
+
+------------------------------------------------------------------------
+r194 | jnwhiteh | 2007-01-02 20:04:17 +0000 (Tue, 02 Jan 2007) | 2 lines
+
+* Fixed a typo in the bugfix.
+
+------------------------------------------------------------------------
+r193 | jnwhiteh | 2007-01-02 20:02:52 +0000 (Tue, 02 Jan 2007) | 3 lines
+
+* Update to build script to check for leaked globals
+* Urgent bugfix to Dongle.lua which fixed sporadic event issues
+
+------------------------------------------------------------------------
+r192 | jnwhiteh | 2007-01-01 22:24:50 +0000 (Mon, 01 Jan 2007) | 2 lines
+
+Spank me with a spoon, please
+
+------------------------------------------------------------------------
+r191 | jnwhiteh | 2007-01-01 22:23:54 +0000 (Mon, 01 Jan 2007) | 2 lines
+
+Bad build. BAD CLADHAIRE!
+
+------------------------------------------------------------------------
+r190 | jnwhiteh | 2007-01-01 21:44:27 +0000 (Mon, 01 Jan 2007) | 2 lines
+
+Tagging 0.5.0-Alpha
+
+------------------------------------------------------------------------
+r189 | jnwhiteh | 2007-01-01 21:42:58 +0000 (Mon, 01 Jan 2007) | 2 lines
+
+DongleUnitTests: Updated to reflect the changes to the database event
system, etc.
+
+------------------------------------------------------------------------
+r188 | jnwhiteh | 2007-01-01 21:42:39 +0000 (Mon, 01 Jan 2007) | 3 lines
+
+* Fire DONGLE_PROFILE_CHANGED on ResetDB()
+* Sequence is DATABASE_RESET, PROFILE_CREATED, and PROFILE_CHANGED.
+
+------------------------------------------------------------------------
+r187 | tardmrr | 2007-01-01 18:24:00 +0000 (Mon, 01 Jan 2007) | 1 line
+
+-DONGLE_PROFILE_CREATED will always fire after DONGLE_DATABASE_RESET.
+------------------------------------------------------------------------
+r186 | jnwhiteh | 2007-01-01 18:14:55 +0000 (Mon, 01 Jan 2007) | 4 lines
+
+* Moved InitializeDB() work into local initdb() function. This is used for
both InitailizeDB and the ResetDB functionality
+* Change DONGLE_PROFILE and DONGLE_DATABASE events to be consistent, they
now fire the same arguments
+ * DONGLE_PROFILE_CHANGED, dbObject, addonObject, svName, profileKey
+
+------------------------------------------------------------------------
+r185 | tardmrr | 2007-01-01 17:13:01 +0000 (Mon, 01 Jan 2007) | 1 line
+
+- Fixed event args to DONGLE_PROFILE_CREATED
+------------------------------------------------------------------------
+r184 | tardmrr | 2007-01-01 17:07:08 +0000 (Mon, 01 Jan 2007) | 2 lines
+
+- Added DONGLE_PROFILE_CREATED
+- Changed TriggerEvent calls to call directly from Dongle instead of from
the active object (or the active object's parent)
+------------------------------------------------------------------------
+r183 | jnwhiteh | 2007-01-01 09:09:59 +0000 (Mon, 01 Jan 2007) | 2 lines
+
+* Changed copyDefaults to test for nil, rather than "not dest[k]"
+
+------------------------------------------------------------------------
+r182 | jnwhiteh | 2006-12-31 19:34:38 +0000 (Sun, 31 Dec 2006) | 2 lines
+
+DongleUnitTests: Added Slash commands to .toc
+
+------------------------------------------------------------------------
+r181 | jnwhiteh | 2006-12-31 19:31:46 +0000 (Sun, 31 Dec 2006) | 3 lines
+
+DongleUnitTests:
+* Updates tests for IterateModules to reflect the change in API
+
+------------------------------------------------------------------------
+r180 | jnwhiteh | 2006-12-31 19:25:45 +0000 (Sun, 31 Dec 2006) | 2 lines
+
+* Removed old files from unit testing
+
+------------------------------------------------------------------------
+r179 | jnwhiteh | 2006-12-31 19:24:18 +0000 (Sun, 31 Dec 2006) | 3 lines
+
+* Updated Dongle.lua to use the new versioning string.
+* Reworked the IterateModules() function to return name,module
+
+------------------------------------------------------------------------
+r178 | jnwhiteh | 2006-12-31 19:23:32 +0000 (Sun, 31 Dec 2006) | 2 lines
+
+* Updated DongleUitls.lua to use the correct minor version string
+
+------------------------------------------------------------------------
+r177 | jnwhiteh | 2006-12-31 19:23:11 +0000 (Sun, 31 Dec 2006) | 2 lines
+
+* Updated build script to properly handle the new DongleStub license
+
+------------------------------------------------------------------------
+r176 | jnwhiteh | 2006-12-30 17:18:18 +0000 (Sat, 30 Dec 2006) | 2 lines
+
+* Made the minor version assignments consistent and cleaner
+
+------------------------------------------------------------------------
+r175 | jnwhiteh | 2006-12-30 17:14:44 +0000 (Sat, 30 Dec 2006) | 2 lines
+
+Premature commit
+
+------------------------------------------------------------------------
+r174 | jnwhiteh | 2006-12-30 17:13:28 +0000 (Sat, 30 Dec 2006) | 2 lines
+
+Tagging 0.4.2-Alpha release to include DongleStub changes
+
+------------------------------------------------------------------------
+r173 | jnwhiteh | 2006-12-30 04:40:00 +0000 (Sat, 30 Dec 2006) | 3 lines
+
+* Updated DongleStub with a unrestricted license, for public use.
+* Added svn keyword revisioning to the DongleStub system
+
+-----------------------------------------

==============================================================================
Diff truncated at 200k characters

Reply all
Reply to author
Forward
0 new messages