vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[
        TinyMoneyFrame functions
        3.8.0 (Kangaroo)
   
        $Id: TinyMoneyFrame.lua 632 2005-12-18 14:36:34Z norganna $
  
        License:
                This program is free software; you can redistribute it and/or
                modify it under the terms of the GNU General Public License
                as published by the Free Software Foundation; either version 2
                of the License, or (at your option) any later version.

                This program is distributed in the hope that it will be useful,
                but WITHOUT ANY WARRANTY; without even the implied warranty of
                MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                GNU General Public License for more details.

                You should have received a copy of the GNU General Public License
                along with this program(see GLP.txt); if not, write to the Free Software
                Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
]]

function TinyMoneyFrame_Update(frameName, money)
        local frame = getglobal(frameName);
        local info = frame.info;
        if ( not info ) then
                message("Error moneyType not set");
        end

        -- Breakdown the money into denominations
        local gold = floor(money / (COPPER_PER_SILVER * SILVER_PER_GOLD));
        local silver = floor((money - (gold * COPPER_PER_SILVER * SILVER_PER_GOLD)) / COPPER_PER_SILVER);
        local copper = mod(money, COPPER_PER_SILVER);

        local goldButton = getglobal(frameName.."GoldButton");
        local silverButton = getglobal(frameName.."SilverButton");
        local copperButton = getglobal(frameName.."CopperButton");

        local iconWidth = MONEY_ICON_WIDTH;
        local spacing = MONEY_BUTTON_SPACING;
        if ( frame.small ) then
                iconWidth = MONEY_ICON_WIDTH_SMALL;
                spacing = MONEY_BUTTON_SPACING_SMALL;
        end

        -- Set values for each denomination
        goldButton:SetText(gold);
        goldButton:SetWidth(goldButton:GetTextWidth() + iconWidth);
        goldButton:Show();
        
        if (gold > 0) then
                silverButton:SetText(string.format("%."..math.log10(SILVER_PER_GOLD).."d", silver));
        else
                silverButton:SetText(silver);
        end
        silverButton:SetWidth(silverButton:GetTextWidth() + iconWidth);
        silverButton:Show();
        
        if (gold > 0 or silver > 0) then
                copperButton:SetText(string.format("%."..math.log10(COPPER_PER_SILVER).."d", copper));
        else
                copperButton:SetText(copper);
        end
        copperButton:SetWidth(copperButton:GetTextWidth() + iconWidth);
        copperButton:Show();

        -- Store how much money the frame is displaying
        frame.staticMoney = money;

        -- If not collapsable don't need to continue
        if ( not info.collapse ) then
                return;
        end

        local width = iconWidth;
        local showLowerDenominations, truncateCopper;
        if ( gold > 0 ) then
                width = width + goldButton:GetWidth();
                if ( info.showSmallerCoins ) then
                        showLowerDenominations = 1;
                end
                if ( info.truncateSmallCoins ) then
                        truncateCopper = 1;
                end
        else
                goldButton:Hide();
        end

        if ( silver > 0 or showLowerDenominations ) then
                if ( gold > 0 ) then
                        silverButton:SetWidth(25);
                end
                
                width = width + silverButton:GetWidth();
                goldButton:SetPoint("RIGHT", frameName.."SilverButton", "LEFT", spacing, 0);
                if ( goldButton:IsVisible() ) then
                        width = width - spacing;
                end
                if ( info.showSmallerCoins ) then
                        showLowerDenominations = 1;
                end
        else
                silverButton:Hide();
                goldButton:SetPoint("RIGHT", frameName.."SilverButton", "RIGHT", 0, 0);
        end

        -- Used if we're not showing lower denominations
        if ( (copper > 0 or showLowerDenominations or info.showSmallerCoins == "Backpack") and not truncateCopper) then
                if ( gold > 0 or silver > 0 ) then
                        copperButton:SetWidth(25);
                end
                
                width = width + copperButton:GetWidth();
                silverButton:SetPoint("RIGHT", frameName.."CopperButton", "LEFT", spacing, 0);
                if ( silverButton:IsVisible() ) then
                        width = width - spacing;
                end
        else
                copperButton:Hide();
                silverButton:SetPoint("RIGHT", frameName.."CopperButton", "RIGHT", 0, 0);
        end

        frame:SetWidth(width);
end

function TinyMoneyFrame_UpdateMoney()
        if ( this.info ) then
                local money = this.info.UpdateFunc();
                TinyMoneyFrame_Update(this:GetName(), money);
                if ( this.hasPickup == 1 ) then
                        UpdateCoinPickupFrame(money);
                end
        else
                message("Error moneyType not set");
        end
end