changeset 96:6b40b19506e4

Added new module: Indicator. This module will show / hide the mail icon based on the amount of mail still waiting for you at the server.
author Zerotorescue
date Sun, 26 Sep 2010 15:10:28 +0200
parents fc4354746d20
children dfdad0afb9b8
files Modules/Indicator.lua
diffstat 1 files changed, 173 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Modules/Indicator.lua	Sun Sep 26 15:10:28 2010 +0200
@@ -0,0 +1,173 @@
+local MailOpener = LibStub("AceAddon-3.0"):GetAddon("MailOpener");
+local mod = MailOpener:NewModule("Indicator", "AceEvent-3.0", "AceHook-3.0");
+local L = LibStub("AceLocale-3.0"):GetLocale("MailOpener");
+
+mod.moduleDescription = L["Uses the minimap mail icon to indicate when there is still unread mail waiting for you at the mailbox."];
+mod.moduleRequired = false;
+
+function mod:OnInitialize()
+end
+
+function mod:OnEnable()
+	self:Debug("OnEnable");
+	
+	MinimapMailFrameUpdate = NewMinimapMailFrameUpdate;
+	
+	self:RegisterEvent("MAIL_SHOW");
+	
+	-- If we were toggling this module on while the mailbox is opened we must register all events again
+	if MailFrame:IsVisible() then
+		self:MAIL_SHOW();
+	end
+end
+
+-- Even though Ace can unregister our events it's neater to do it manually too
+function mod:OnDisable()
+	self:Debug("OnDisable");
+	
+	MinimapMailFrameUpdate = originalMinimapMailFrameUpdate;
+	
+	self:UnregisterEvent("MAIL_SHOW");
+end
+
+function mod:MAIL_SHOW()
+	self:Debug("MAIL_SHOW");
+	
+	self:RegisterEvent("MAIL_CLOSED");
+	
+	self:RegisterMessage("MO_SERVER_SYNCED");
+	self:RegisterMessage("MO_OPEN_COMPLETE");
+end
+
+local lastKnownTotalItems;
+
+function mod:MAIL_CLOSED()
+	self:Debug("MAIL_CLOSED");
+	
+	self:UnregisterEvent("MAIL_CLOSED");
+	
+	self:UnregisterMessage("MO_SERVER_SYNCED");
+	self:UnregisterMessage("MO_OPEN_COMPLETE");
+	
+	self:UpdateIcon();
+end
+
+-- We received new mail, update icon status
+function mod:MO_SERVER_SYNCED()
+	self:UpdateIcon();
+end
+
+-- We processed current mail, update icon status
+function mod:MO_OPEN_COMPLETE()
+	self:UpdateIcon();
+end
+
+function mod:UpdateIcon()
+	local numItems, totalItems = GetInboxNumItems();
+	lastKnownTotalItems = totalItems;
+	
+	if totalItems > numItems then
+		-- Unread items not currently visible remaining
+		MiniMapMailFrame:Show();
+	else
+		-- Current mail is everything there is
+		MiniMapMailFrame:Hide();
+	end
+end
+
+-- Copy the old updater
+local originalMinimapMailFrameUpdate = MinimapMailFrameUpdate;
+-- Prepare a function to overwrite the default WoW function updating the tooltip for the mail icon
+-- Only apply this function when this module is enabled
+function NewMinimapMailFrameUpdate()
+	-- A small part of this code was copied from the FrameXML
+	
+	local toolText;
+	if lastKnownTotalItems then
+		toolText = L["You have %d unread mail remaining in your mailbox."]:format(lastKnownTotalItems);
+	else
+		toolText = L["You have unread mail remaining in your mailbox."];
+	end
+	
+	local sender1, sender2, sender3 = GetLatestThreeSenders();
+	
+	if sender1 or sender2 or sender3 then
+		toolText = toolText .. " " .. L["This mail includes mail sent by:"] .. "\n";
+	end
+	
+	if sender1 then
+		toolText = toolText .. "\n" .. sender1;
+	end
+	if sender2 then
+		toolText = toolText .. "\n" .. sender2;
+	end
+	if sender3 then
+		toolText = toolText .. "\n" .. sender3;
+	end
+	
+	GameTooltip:SetText(toolText);
+end
+
+function mod:GetOptionsGroup()
+	local configGroup = {
+		order = 0,
+		type = "modulesSubGroup",
+		name = L["Indicator"],
+		desc = L["Change settings for the Indicator module."],
+		args = {
+			General = {
+				order = 10,
+				type = "group",
+				inline = true,
+				name = L["General"],
+				args = {
+					description = {
+						order = 10,
+						type = "description",
+						name = function()
+							local descText = L["With this button you can completely toggle this module |cff00ff00on|r or |cffff0000off|r. This setting will be remembered and the module will be automatically toggled |cff00ff00on|r or |cffff0000off|r upon logon as it was last set."] .. "\n\n";
+							
+							if self:IsEnabled() then
+								descText = descText .. L["Status: %s"]:format(L["|cff00ff00Enabled|r"]);
+							else
+								descText = descText .. L["Status: %s"]:format(L["|cffff0000Disabled|r"]);
+							end
+							
+							return descText;
+						end,
+					},
+					disable = {
+						order = 20,
+						type = "execute",
+						name = function()
+							if self:IsEnabled() then
+								return L["Disable Module"];
+							else
+								return L["Enable Module"];
+							end
+						end,
+						desc = L["Click here to completely toggle this module on or off."],
+						width = "double",
+						func = function()
+							if self:IsEnabled() then
+								self:Disable();
+								
+								MailOpener.db.profile.modules[self:GetName()] = false;
+							else
+								self:Enable();
+								
+								MailOpener.db.profile.modules[self:GetName()] = true;
+							end
+						end,
+					},
+				},
+			},
+		},
+	};
+	
+	return configGroup;
+end
+
+function mod:Debug(t)
+	return MailOpener:Debug("|cff993300Indicator|r:" .. t);
+end