Mercurial > wow > squawk
changeset 10:2231fd3f139b
Qtip added for LDB
author | wobin |
---|---|
date | Thu, 23 Apr 2009 04:11:42 +1000 |
parents | c535960b1245 |
children | 014f0ed0585a |
files | .pkgmeta Libs/LibDataBroker-1.1/LibDataBroker-1.1.lua Squawk.lua Squawk.toc Tests.lua embeds.xml |
diffstat | 6 files changed, 193 insertions(+), 47 deletions(-) [+] |
line wrap: on
line diff
--- a/.pkgmeta Sun Apr 19 02:50:40 2009 +1000 +++ b/.pkgmeta Thu Apr 23 04:11:42 2009 +1000 @@ -1,10 +1,24 @@ package-as: Squawk externals: - Libs/LibStub: svn://svn.wowace.com/wow/ace3/mainline/trunk/LibStub - Libs/CallbackHandler-1.0: svn://svn.wowace.com/wow/ace3/mainline/trunk/CallbackHandler-1.0 - Libs/AceAddon-3.0: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceAddon-3.0 - Libs/AceConsole-3.0: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceConsole-3.0 - Libs/AceDB-3.0: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceDB-3.0 - Libs/AceEvent-3.0: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceEvent-3.0 - Libs/AceLocale-3.0: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceLocale-3.0 + Libs/LibStub: + url: svn://svn.wowace.com/wow/libstub/mainline/trunk + tag: latest + Libs/CallbackHandler-1.0: + url: svn://svn.wowace.com/wow/ace3/mainline/trunk/CallbackHandler-1.0 + tag: latest + Libs/AceAddon-3.0: + url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceAddon-3.0 + tag: latest + Libs/AceConsole-3.0: + url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceConsole-3.0 + tag: latest + Libs/AceDB-3.0: + url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceDB-3.0 + tag: latest + Libs/AceEvent-3.0: + url: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceEvent-3.0 + tag: latest + Libs/LibQTip-1.0: + url: svn://svn.wowace.com/wow/libqtip-1-0/mainline/trunk + tag: latest
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Libs/LibDataBroker-1.1/LibDataBroker-1.1.lua Thu Apr 23 04:11:42 2009 +1000 @@ -0,0 +1,90 @@ + +assert(LibStub, "LibDataBroker-1.1 requires LibStub") +assert(LibStub:GetLibrary("CallbackHandler-1.0", true), "LibDataBroker-1.1 requires CallbackHandler-1.0") + +local lib, oldminor = LibStub:NewLibrary("LibDataBroker-1.1", 4) +if not lib then return end +oldminor = oldminor or 0 + + +lib.callbacks = lib.callbacks or LibStub:GetLibrary("CallbackHandler-1.0"):New(lib) +lib.attributestorage, lib.namestorage, lib.proxystorage = lib.attributestorage or {}, lib.namestorage or {}, lib.proxystorage or {} +local attributestorage, namestorage, callbacks = lib.attributestorage, lib.namestorage, lib.callbacks + +if oldminor < 2 then + lib.domt = { + __metatable = "access denied", + __index = function(self, key) return attributestorage[self] and attributestorage[self][key] end, + } +end + +if oldminor < 3 then + lib.domt.__newindex = function(self, key, value) + if not attributestorage[self] then attributestorage[self] = {} end + if attributestorage[self][key] == value then return end + attributestorage[self][key] = value + local name = namestorage[self] + if not name then return end + callbacks:Fire("LibDataBroker_AttributeChanged", name, key, value, self) + callbacks:Fire("LibDataBroker_AttributeChanged_"..name, name, key, value, self) + callbacks:Fire("LibDataBroker_AttributeChanged_"..name.."_"..key, name, key, value, self) + callbacks:Fire("LibDataBroker_AttributeChanged__"..key, name, key, value, self) + end +end + +if oldminor < 2 then + function lib:NewDataObject(name, dataobj) + if self.proxystorage[name] then return end + + if dataobj then + assert(type(dataobj) == "table", "Invalid dataobj, must be nil or a table") + self.attributestorage[dataobj] = {} + for i,v in pairs(dataobj) do + self.attributestorage[dataobj][i] = v + dataobj[i] = nil + end + end + dataobj = setmetatable(dataobj or {}, self.domt) + self.proxystorage[name], self.namestorage[dataobj] = dataobj, name + self.callbacks:Fire("LibDataBroker_DataObjectCreated", name, dataobj) + return dataobj + end +end + +if oldminor < 1 then + function lib:DataObjectIterator() + return pairs(self.proxystorage) + end + + function lib:GetDataObjectByName(dataobjectname) + return self.proxystorage[dataobjectname] + end + + function lib:GetNameByDataObject(dataobject) + return self.namestorage[dataobject] + end +end + +if oldminor < 4 then + local next = pairs(attributestorage) + function lib:pairs(dataobject_or_name) + local t = type(dataobject_or_name) + assert(t == "string" or t == "table", "Usage: ldb:pairs('dataobjectname') or ldb:pairs(dataobject)") + + local dataobj = self.proxystorage[dataobject_or_name] or dataobject_or_name + assert(attributestorage[dataobj], "Data object not found") + + return next, attributestorage[dataobj], nil + end + + local ipairs_iter = ipairs(attributestorage) + function lib:ipairs(dataobject_or_name) + local t = type(dataobject_or_name) + assert(t == "string" or t == "table", "Usage: ldb:ipairs('dataobjectname') or ldb:ipairs(dataobject)") + + local dataobj = self.proxystorage[dataobject_or_name] or dataobject_or_name + assert(attributestorage[dataobj], "Data object not found") + + return ipairs_iter, attributestorage[dataobj], 0 + end +end
--- a/Squawk.lua Sun Apr 19 02:50:40 2009 +1000 +++ b/Squawk.lua Thu Apr 23 04:11:42 2009 +1000 @@ -81,7 +81,7 @@ local o = {} o.Owner = Owner or UnitName("player") o.Message = Message - o.Time = os.time() + o.Time = time() local reply, to = strsplit("@", ((strsplit(" ", Message)))) if reply == "" then o.ReplyTo = to @@ -116,6 +116,10 @@ return Settings.Private end +function Settings:TogglePrivate() + Settings.Private = not Settings.Private +end + function Settings:AddFollower(Name) Settings.Follower[Name] = 1 self:RemovePending(Name) @@ -205,32 +209,36 @@ end function Controller:AddANewSquawk(Name, Message, Source) - if not Model.Blocked[Name] then + if not Settings.Blocked[Name] then if Source == "WHISPER" then - if Model.Requested[Name] then -- We've been approved offline! - Model:AddFollowing(Name) + if Settings.Requested[Name] then -- We've been approved offline! + Settings:AddFollowing(Name) end - if not Model.Following[Name] then -- If we're no longer following this person + if not Settings.Following[Name] then -- If we're no longer following this person self:SendMessageToTarget(Name, "#Unfollow|"..UnitName("player")) return end - - table.insert(Model.Squawks, Squawk:new(Message, Name)) - View:UpdateSquawkList() + end + + if Source == "GUILD" and Name == UnitName("player") then + return end + + table.insert(Model.Squawks, Squawk:new(Message, Name)) + View:UpdateSquawkList() end end function Controller:SendNewSquawk(Message) - if not Model:IsPrivate() then + if not Settings:IsPrivate() then self:SendMessageToGuild("#Squawk|"..UnitName("player").."|"..Message) end self:AddANewSquawk(UnitName("player"), Message) - for name, _ in pairs(Model.Following) do + for name, _ in pairs(Settings.Following) do self:SendMessageToTarget(name, "#Squawk|"..UnitName("player").."|"..Message) end end @@ -243,8 +251,14 @@ View:NotifyOfPendingRequest(Name) end +function Controller:ApprovePendingRequest(Name) + Settings:AddFollower(Name) + View:NotifyOfNewFollower(Name) + self:SendMessageToTarget(Name, "#Follow|"..UnitName("player")) +end + function Controller:SendMessageToTarget(Name, Message) - self:SendCommMessage("Squawk", Message, "WHISPER", Name, "BULK") + self:SendCommMessage("Squawk", Message, "WHISPER", Name) end function Controller:SendMessageToGuild(Message) @@ -259,9 +273,10 @@ ["#Request"] = Controller.TheyWantToFollowMe, } -function Controller:ReceiveMessage(Prefix, Message, Distribution, Sender) +function Controller:ReceiveMessage(Message, Distribution, Sender) local command, name, info = strsplit("|",Message) - Parse[command](self, name, info, Distribution) + View:Print(Distribution..":"..Message) + Parse[command](Controller, name, info, Distribution) end -- View -- @@ -316,3 +331,22 @@ self:Print(name) end end + +local LDBFeed = LibStub("LibDataBroker-1.1"):NewDataObject("Squawk", {type = "data source", text = "Awk!"}) +local QTip = LibStub("LibQTip-1.0") + +function LDBFeed:OnEnter() + local tooltip = QTip:Acquire("Squawk",3, "LEFT", "LEFT", "RIGHT") + self.tooltip = tooltip + tooltip:AddHeader('Name') + tooltip:AddLine('testUser', 'Squawk!', '3 min ago') + tooltip:SmartAnchorTo(self) + tooltip:Show() +end + +function LDBFeed:OnTooltipShow() +end + +function LDBFeed:OnLeave() + QTip:Release(self.tooltip) +end
--- a/Squawk.toc Sun Apr 19 02:50:40 2009 +1000 +++ b/Squawk.toc Thu Apr 23 04:11:42 2009 +1000 @@ -1,4 +1,4 @@ -## Interface: 30000 +## Interface: 30100 ## Title: Squawk ## Author: Wobin ## Notes: In no way related to a Twitter client... *shifty look*
--- a/Tests.lua Sun Apr 19 02:50:40 2009 +1000 +++ b/Tests.lua Thu Apr 23 04:11:42 2009 +1000 @@ -16,38 +16,44 @@ --]] -- -SquawkTester = LibStub("AceAddon-3.0", "AceComm-3.0", "AceConsole-3.0") +SquawkTester = LibStub("AceAddon-3.0"):NewAddon("SquawkTester", "AceComm-3.0", "AceConsole-3.0") local Test = SquawkTester +local Controller = Squawk.Controller +local Settings = Squawk.Model.UserSettings function Test:OnInitialize() - self:RegisterComm("Squawk", ReceiveMessage) - self:RegisterSlashCommand("TestSquawk", "RunTests") + self:RegisterComm("Squawk", "ReceiveMessage") + self:RegisterChatCommand("TS", "RunTests") + self:Print("Initialising Tester") + + self.Tests = { ["a"] = SquawkTester.AddPublicFollower, + ["b"] = SquawkTester.RemovePublicFollower, + ["c"] = SquawkTester.AddPrivateFollower, + ["d"] = SquawkTester.ApprovePendingRequest + } end - -function Test:RunTests() - AddPublicFollower() - RemovePublicFollower() - AddPrivateFollower() - ApprovePendingRequest() +function Test:RunTests(TestNumber) + self:Print(TestNumber) + self.Tests[TestNumber](Test) end function Test:AddPublicFollower() - Squawk.Settings.Private = false - Squawk.Controller:IWantToFollowThem(UnitName("player")) + Settings:TogglePrivate() + Controller:IWantToFollowThem(UnitName("player")) end function Test:RemovePublicFollower() - Squawk.Controller:IWantToUnfollowThem(UnitName("player")) + Controller:IWantToUnfollowThem(UnitName("player")) end function Test:AddPrivateFollower() - Squawk.Settings.Private = true - Squawk.Controller:IWantToFollowThem(UnitName("player")) + Settings:TogglePrivate() + Controller:IWantToFollowThem(UnitName("player")) end function Test:ApprovePendingRequest() - Squawk.Controller:ApprovePendingRequest(Name) + Controller:ApprovePendingRequest(UnitName("player")) end function Test:ReceiveMessage(Prefix, Message, Distribution, Sender)
--- a/embeds.xml Sun Apr 19 02:50:40 2009 +1000 +++ b/embeds.xml Thu Apr 23 04:11:42 2009 +1000 @@ -1,11 +1,13 @@ -<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ -..\FrameXML\UI.xsd"> - <Script file="Libs\Ace3\LibStub\LibStub.lua"/> - <Include file="Libs\Ace3\CallbackHandler-1.0\CallbackHandler-1.0.xml"/> - <Include file="Libs\Ace3\AceTimer-3.0\AceTimer-3.0.xml"/> - <Include file="Libs\Ace3\AceEvent-3.0\AceEvent-3.0.xml"/> - <Include file="Libs\Ace3\AceLocale-3.0\AceLocale-3.0.xml"/> - <Include file="Libs\Ace3\AceConsole-3.0\AceConsole-3.0.xml"/> - <Include file="Libs\Ace3\AceDB-3.0\AceDB-3.0.xml"/> - <Include file="Libs\Ace3\AceAddon-3.0\AceAddon-3.0.xml"/> -</Ui> +<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ +..\FrameXML\UI.xsd"> + <Script file="Libs\Ace3\LibStub\LibStub.lua"/> + <Script file="Libs\LibDataBroker-1.1\LibDataBroker-1.1.lua"/> + <Include file="Libs\LibQTip-1.0\lib.xml"/> + <Include file="Libs\Ace3\CallbackHandler-1.0\CallbackHandler-1.0.xml"/> + <Include file="Libs\Ace3\AceTimer-3.0\AceTimer-3.0.xml"/> + <Include file="Libs\Ace3\AceEvent-3.0\AceEvent-3.0.xml"/> + <Include file="Libs\Ace3\AceLocale-3.0\AceLocale-3.0.xml"/> + <Include file="Libs\Ace3\AceConsole-3.0\AceConsole-3.0.xml"/> + <Include file="Libs\Ace3\AceDB-3.0\AceDB-3.0.xml"/> + <Include file="Libs\Ace3\AceAddon-3.0\AceAddon-3.0.xml"/> +</Ui>