vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
AcePlayerMenu = AceAddon:new({
        name          = AcePlayerMenuLocals.NAME,
        description   = AcePlayerMenuLocals.DESCRIPTION,
        version       = "0.3",
        releaseDate   = "06-27-2006",
        aceCompatible = "103",
        author        = "hshh",
        email         = "hunreal@gmail.com",
        website       = "http://www.hshh.org",
        category      = "interface",
        cmd           = AceChatCmd:new(AcePlayerMenuLocals.COMMANDS, AcePlayerMenuLocals.CMD_OPTIONS),
                db            = AceDatabase:new("apm"),
})


function AcePlayerMenu:Initialize()
        self.UnitPopupButtons={};
        self.UnitPopupMenus={};
        for k,v in UnitPopupButtons do
                self.UnitPopupButtons[k]=v;
        end
        for k,v in UnitPopupMenus do
                self.UnitPopupMenus[k]=v;
        end

        if (not self.db:get("toggle")) then
                self.db:set("toggle", "on");
        end
        if (not self.db:get("left")) then
                self.db:set("left", "off");
        end
end

function AcePlayerMenu:Enable()
        if (self.db:get("toggle")~="on") then
                return
        end

        self:Hook("UnitPopup_OnClick");
        self:Hook("UnitPopup_HideButtons");
        if (self.db:get("left")=="on") then
                self:Hook("SetItemRef");
        end

        UnitPopupButtons["ADD_FRIEND"] = { text = TEXT(ADD_FRIEND), dist = 0 };
        UnitPopupButtons["GUILD_INVITE"] = { text = TEXT(AcePlayerMenuLocals.TEXT.GUILD_INVITE), dist = 0 };
        UnitPopupButtons["IGNORE"] = { text = TEXT(IGNORE), dist = 0 };
        UnitPopupButtons["GET_NAME"] = { text = TEXT(AcePlayerMenuLocals.TEXT.GET_NAME), dist = 0 };
        UnitPopupButtons["WHO"] = { text = TEXT(WHO), dist = 0 };

        UnitPopupMenus["FRIEND"] = { "WHISPER", "INVITE", "TARGET", "GUILD_PROMOTE", "GUILD_LEAVE", "ADD_FRIEND", "GUILD_INVITE", "IGNORE", "GET_NAME", "WHO", "CANCEL" };
end

function AcePlayerMenu:Disable()
        for k,v in self.UnitPopupButtons do
                UnitPopupButtons[k]=v;
        end
        for k,v in self.UnitPopupMenus do
                UnitPopupMenus[k]=v;
        end

        self:Unhook("UnitPopup_OnClick");
        self:Unhook("UnitPopup_HideButtons");
        self:Unhook("SetItemRef");
end

function AcePlayerMenu:UnitPopup_HideButtons()
        self:CallHook("UnitPopup_HideButtons");
        local dropdownMenu = getglobal(UIDROPDOWNMENU_INIT_MENU);
        for index, value in UnitPopupMenus[dropdownMenu.which] do
                if ( value == "GUILD_INVITE" ) then
                        if ( not CanGuildInvite() or dropdownMenu.name == UnitName("player") ) then
                                UnitPopupShown[index] = 0;
                        else
                                UnitPopupShown[index] = 1;
                        end
                elseif ( value == "ADD_FRIEND" or value == "IGNORE" or value == "WHO" or value == "GET_NAME") then
                        if (dropdownMenu.name == UnitName("player")) then
                                UnitPopupShown[index] = 0;
                        else
                                UnitPopupShown[index] = 1;
                        end
                end
        end
end

function AcePlayerMenu:UnitPopup_OnClick()
        local dropdownFrame = getglobal(UIDROPDOWNMENU_INIT_MENU);
        local button = this.value;
        local unit = dropdownFrame.unit;
        local name = dropdownFrame.name;

        if (button == "ADD_FRIEND") then
                AddFriend(name);
        elseif (button == "GUILD_INVITE") then
                GuildInviteByName(name);
        elseif (button == "IGNORE") then
                AddIgnore(name);
        elseif (button == "GET_NAME") then
                ChatFrameEditBox:Show();
                ChatFrameEditBox:Insert(name);
        elseif (button == "WHO") then
                SendWho(name);
        else
                return self:CallHook("UnitPopup_OnClick");
        end
        PlaySound("UChatScrollButton");
end

function AcePlayerMenu:SetItemRef(link, text, button)
        if ( strsub(link, 1, 6) == "player" ) then
                local name = strsub(link, 8);
                if ( name and (strlen(name) > 0) ) then
                        name = gsub(name, "([^%s]*)%s+([^%s]*)%s+([^%s]*)", "%3");
                        name = gsub(name, "([^%s]*)%s+([^%s]*)", "%2");
                        if ( IsShiftKeyDown() ) then
                                local staticPopup;
                                staticPopup = StaticPopup_Visible("ADD_IGNORE");
                                if ( staticPopup ) then
                                        -- If add ignore dialog is up then enter the name into the editbox
                                        getglobal(staticPopup.."EditBox"):SetText(name);
                                        return;
                                end
                                staticPopup = StaticPopup_Visible("ADD_FRIEND");
                                if ( staticPopup ) then
                                        -- If add ignore dialog is up then enter the name into the editbox
                                        getglobal(staticPopup.."EditBox"):SetText(name);
                                        return;
                                end
                                staticPopup = StaticPopup_Visible("ADD_GUILDMEMBER");
                                if ( staticPopup ) then
                                        -- If add ignore dialog is up then enter the name into the editbox
                                        getglobal(staticPopup.."EditBox"):SetText(name);
                                        return;
                                end
                                staticPopup = StaticPopup_Visible("ADD_RAIDMEMBER");
                                if ( staticPopup ) then
                                        -- If add ignore dialog is up then enter the name into the editbox
                                        getglobal(staticPopup.."EditBox"):SetText(name);
                                        return;
                                end
                                if ( ChatFrameEditBox:IsVisible() ) then
                                        ChatFrameEditBox:Insert(name);
                                else
                                        SendWho("n-"..name);                                    
                                end
                                
                        else
                                FriendsFrame_ShowDropdown(name, 1);
                        end 
                end
                return;
        end

        return self:CallHook("SetItemRef", link, text, button);
end

function AcePlayerMenu:Toggle()
        local toggle = self.db:get("toggle");
        if ( not toggle or toggle ~= "on" ) then
                self.db:set("toggle", "on");
                self.cmd:msg(AcePlayerMenuLocals.MSG.APM_ON)
                self:Reload();
        else
                self.db:set("toggle", "off");
                self.cmd:msg(AcePlayerMenuLocals.MSG.APM_OFF)
                self:Reload();
        end
end

function AcePlayerMenu:Left()
        local toggle = self.db:get("left");
        if ( not toggle or toggle ~= "off" ) then
                self.db:set("left", "off");
                self.cmd:msg(AcePlayerMenuLocals.MSG.LEFT_OFF)
                self:Reload();
        else
                self.db:set("left", "on");
                self.cmd:msg(AcePlayerMenuLocals.MSG.LEFT_ON)
                self:Reload();
        end
end

function AcePlayerMenu:Reload()
        self:Disable();
        self:Enable();
end
AcePlayerMenu:RegisterForLoad()