vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:

------------------------------
--      Are you local?      --
------------------------------

local L = AceLibrary("AceLocale-2.0"):new("FuBar_Mail")
local Tablet = AceLibrary("Tablet-2.0")
local Dewdrop = AceLibrary("Dewdrop-2.0")

local pendmail, checked
local files = {
        iconnomail = "Interface\\AddOns\\FuBar_MailFu\\nomail.tga",
        iconnew = "Interface\\AddOns\\FuBar_MailFu\\newmail.tga",
        iconAH = "Interface\\AddOns\\FuBar_MailFu\\auction.tga",
        soundpath = "Interface\\AddOns\\FuBar_MailFu\\mail.wav",
}


----------------------------
--      Localization      --
----------------------------

L:RegisterTranslations("enUS", function() return {
        ["No mail"] = true,
        ["New Mail"] = true,
        ["AH Alert!"] = true,

        ["New Mail Received (%d/%d)"] = true,

        ttnew = " new mail items",
        tttotal = " total mail items",

        OUTBID = "Outbid: ",
        WON = "Won: ",
        EXPIRED = "Expired: ",
        REMOVED = "Cancelled: ",
        SOLD = "Sold: ",

        minimap = true,
        ["Default Minimap"] = true,
        ["Show Blizzard's minimap icon"] = true,

        chat = true,
        ["Chat Alert"] = true,
        ["Print a chat message when mail is received"] = true,

        sound = true,
        ["Use Sound"] = true,
        ["Play a sound when mail is received"] = true,

        textformat = true,
        ["Text Format"] = true,
        ["Bar text formatting"] = true,
        both = true,
        number = true,
        text = true,
} end)


L:RegisterTranslations("frFR", function() return {
        ["No mail"] = "Aucun courier",
        ["New Mail"] = "Nouveau courier",
        ["AH Alert!"] = "Alerte AH!",
} end)


L:RegisterTranslations("deDE", function() return {
        ["No mail"] = "Keine Post ",
        ["New Mail"] = "Neue Post ",
        ["AH Alert!"] = "AH-Alarm! ",

        ["New Mail Received (%d/%d)"] = "Neue Post erhalten (%d/%d)",

        ttnew = " neue Nachrichten",
        tttotal = " Nachrichten insgesamt",

        OUTBID = "\195\156berboten: ",
        WON = "Gewonnen: ",
        EXPIRED = "Abgelaufen: ",
        REMOVED = "Abgebrochen: ",
        SOLD = "Verkauft: ",

        ["Chat Alert"] = "Chat-Alarm",
        ["Use Sound"] = "Sound verwenden",
} end)


-------------------------------------
--      Namespace Declaration      --
-------------------------------------

FuBar_Mail = AceLibrary("AceAddon-2.0"):new("AceEvent-2.0", "AceConsole-2.0", "AceDB-2.0", "FuBarPlugin-2.0", "AceHook-2.0")
FuBar_Mail.hideWithoutStandby = true
FuBar_Mail.hasIcon = files.iconnomail
FuBar_Mail:RegisterDB("FuBar_MailDB", "FuBar_MailDBPC")
FuBar_Mail:RegisterDefaults("char", {new = 0, total = 0})
FuBar_Mail:RegisterDefaults("profile", {
        playsounds = true,
        showminimap = false,
        chatalerts = true,
        textformat = "both",
        showtext = true,
        showcount = true,
})
local opts = {type = "group", handler = FuBar_Mail, args = {
        [L.minimap] = {
                type = "toggle", name = L["Default Minimap"], desc = L["Show Blizzard's minimap icon"], order = 1,
                get = function() return FuBar_Mail.db.profile.showminimap end, set = function(v) FuBar_Mail.db.profile.showminimap = v end,
        },
        [L.sound] = {
                type = "toggle", name = L["Use Sound"], desc = L["Play a sound when mail is received"], order = 1,
                get = function() return FuBar_Mail.db.profile.playsounds end, set = function(v) FuBar_Mail.db.profile.playsounds = v end,
        },
        [L.chat] = {
                type = "toggle", name = L["Chat Alert"], desc = L["Print a chat message when mail is received"], order = 1,
                get = function() return FuBar_Mail.db.profile.chatalerts end, set = function(v) FuBar_Mail.db.profile.chatalerts = v end,
        },
        [L.textformat] = {
                type = "text",
                name = L["Text Format"],
                desc = L["Bar text formatting"],
                get = function() return FuBar_Mail.db.profile.textformat end,
                set = function(v) FuBar_Mail.db.profile.textformat = v; FuBar_Mail:Update() end,
                validate = {L["text"], L["number"], L["both"]},
                disabled = function() return not FuBar_Mail:IsTextShown() end,
        },

}}
FuBar_Mail:RegisterChatCommand({"/mailfu"}, opts)
FuBar_Mail.OnMenuRequest = opts


---------------------------
--      Ace Methods      --
---------------------------

function FuBar_Mail:OnEnable()
        pendmail = 0

        self:RegisterEvent("SpecialEvents_MailReceived")
        self:RegisterEvent("SpecialEvents_AHAlert")
        self:RegisterEvent("SpecialEvents_MailInit", "Update")
        self:RegisterEvent("AceEvent_FullyInitialized", "Update")

        self:RegisterEvent("MAIL_SHOW")
        self:RegisterEvent("MAIL_INBOX_UPDATE")
        self:Hook(MiniMapMailFrame, "Show", "MMMailShow")
        if not self.db.profile.showminimap and MiniMapMailFrame:IsVisible() then MiniMapMailFrame:Hide() end
end


function FuBar_Mail:MMMailShow(object)
        if self.db.profile.showminimap then return self.hooks[object].Show.orig(object) end
end


function FuBar_Mail:MAIL_SHOW()
        checked = true
        self.db.char.ahalerts = nil
        self:Update()
end


function FuBar_Mail:MAIL_INBOX_UPDATE()
        self.db.char.new = 0
        self.db.char.total = GetInboxNumItems()
        self:Update()
end


function FuBar_Mail:SpecialEvents_MailReceived()
        pendmail = pendmail + 1
        self.db.char.new, self.db.char.total = self.db.char.new + 1, self.db.char.total + 1
        if checked then self.db.char.total = GetInboxNumItems() + self.db.char.new end
        if self.db.profile.playsounds then PlaySoundFile(files.soundpath) end
        if self.db.profile.chatalerts then self:Print(L["New Mail Received (%d/%d)"], self.db.char.new, self.db.char.total) end

        self:Update()
end


function FuBar_Mail:SpecialEvents_AHAlert(ahtype, item)
        if not self.db.char.ahalerts then self.db.char.ahalerts = {} end
        table.insert(self.db.char.ahalerts, {L[ahtype], item})

        self:Update()
end


function FuBar_Mail:OnTextUpdate()
--      self.hasNoText = self:IsIconShown() and not self.db.profile.showtext and not self.db.profile.showcount
        local showt = self.db.profile.textformat == L.both or self.db.profile.textformat == L.text
        local showc = self.db.profile.textformat == L.both or self.db.profile.textformat == L.number
        local hasmail = self.db.char.ahalerts or self.db.char.total > 0 or (HasNewMail() and not checked)
        local numstr = (self.db.char.total > 0) and string.format(showt and "(%u/%u)" or "%u/%u", self.db.char.new, self.db.char.total) or showt and "(0)" or "0"
        local colorstr = self.db.char.ahalerts and "|cffff0000" or hasmail and "|cff00ff00" or ""
        local txtstr = self.db.char.ahalerts and L["AH Alert!"] or hasmail and L["New Mail"] or L["No mail"]

        self:SetText(colorstr.. (showt and txtstr or "").. (showt and showc and " " or "").. (showc and numstr or ""))
        self:SetIcon(self.db.char.ahalerts and files.iconAH or hasmail and files.iconnew or files.iconnomail)
end


function FuBar_Mail:OnTooltipUpdate()
        local hasmail = self.db.char.ahalerts or self.db.char.total > 0 or (HasNewMail() and not checked)
        local colorstr = self.db.char.ahalerts and "|cffff0000" or hasmail and "|cff00ff00" or ""
        local txtstr = self.db.char.ahalerts and L["AH Alert!"] or hasmail and L["New Mail"] or L["No mail"]

        Tablet:SetTitle(colorstr..txtstr)

        local cat = Tablet:AddCategory("columns", 2)
        cat:AddLine("text", "New", "text2", self.db.char.new or "No data", "textR", 0, "textG", 1, "textB", 0, "text2R", 0, "text2G", 1, "text2B", 0)
        cat:AddLine("text", "Total", "text2", self.db.char.total)
        if self.db.char.ahalerts then
                cat = Tablet:AddCategory("text", "Auction Alerts", "isTitle", true, "justify", "CENTER")
                cat = Tablet:AddCategory("hideBlankLine", true, "columns", 2, "child_textR", 1, "child_textG", 0, "child_textB", 0, "child_text2R", 1, "child_text2G", 0, "child_text2B", 0)
                for _,val in ipairs(self.db.char.ahalerts) do cat:AddLine("text", val[1], "text2", val[2]) end
        end
end