1103 lines
37 KiB
Lua
1103 lines
37 KiB
Lua
INBOXITEMS_TO_DISPLAY = 7;
|
|
STATIONERY_ICON_ROW_HEIGHT = 36;
|
|
STATIONERYITEMS_TO_DISPLAY = 5;
|
|
PACKAGEITEMS_TO_DISPLAY = 4;
|
|
ATTACHMENTS_MAX = 16;
|
|
ATTACHMENTS_MAX_SEND = 12;
|
|
ATTACHMENTS_PER_ROW_SEND = 7;
|
|
ATTACHMENTS_MAX_ROWS_SEND = 2;
|
|
ATTACHMENTS_MAX_RECEIVE = 16;
|
|
ATTACHMENTS_PER_ROW_RECEIVE = 7;
|
|
ATTACHMENTS_MAX_ROWS_RECEIVE = 3;
|
|
STATIONERY_PATH = "Interface\\Stationery\\";
|
|
MAX_COD_AMOUNT = 10000;
|
|
SEND_MAIL_TAB_LIST = {};
|
|
SEND_MAIL_TAB_LIST[1] = "SendMailNameEditBox";
|
|
SEND_MAIL_TAB_LIST[2] = "SendMailSubjectEditBox";
|
|
SEND_MAIL_TAB_LIST[3] = "SendMailBodyEditBox";
|
|
SEND_MAIL_TAB_LIST[4] = "SendMailMoneyGold";
|
|
SEND_MAIL_TAB_LIST[5] = "SendMailMoneyCopper";
|
|
|
|
function MailFrame_OnLoad(self)
|
|
-- Init pagenum
|
|
InboxFrame.pageNum = 1;
|
|
-- Tab Handling code
|
|
PanelTemplates_SetNumTabs(self, 2);
|
|
PanelTemplates_SetTab(self, 1);
|
|
-- Register for events
|
|
self:RegisterEvent("MAIL_SHOW");
|
|
self:RegisterEvent("MAIL_INBOX_UPDATE");
|
|
self:RegisterEvent("MAIL_CLOSED");
|
|
self:RegisterEvent("MAIL_SEND_INFO_UPDATE");
|
|
self:RegisterEvent("MAIL_SEND_SUCCESS");
|
|
self:RegisterEvent("MAIL_FAILED");
|
|
self:RegisterEvent("MAIL_SUCCESS");
|
|
self:RegisterEvent("CLOSE_INBOX_ITEM");
|
|
self:RegisterEvent("MAIL_LOCK_SEND_ITEMS");
|
|
self:RegisterEvent("MAIL_UNLOCK_SEND_ITEMS");
|
|
-- Set previous and next fields
|
|
MoneyInputFrame_SetPreviousFocus(SendMailMoney, SendMailBodyEditBox);
|
|
MoneyInputFrame_SetNextFocus(SendMailMoney, SendMailNameEditBox);
|
|
end
|
|
|
|
function MailFrame_OnEvent(self, event, ...)
|
|
if ( event == "MAIL_SHOW" ) then
|
|
ShowUIPanel(MailFrame);
|
|
if ( not MailFrame:IsShown() ) then
|
|
CloseMail();
|
|
return;
|
|
end
|
|
|
|
-- Update the roster so auto-completion works
|
|
if ( IsInGuild() and GetNumGuildMembers() == 0 ) then
|
|
GuildRoster();
|
|
end
|
|
|
|
OpenBackpack();
|
|
SendMailFrame_Update();
|
|
MailFrameTab_OnClick(nil, 1);
|
|
CheckInbox();
|
|
elseif ( event == "MAIL_INBOX_UPDATE" ) then
|
|
InboxFrame_Update();
|
|
OpenMail_Update();
|
|
elseif ( event == "MAIL_SEND_INFO_UPDATE" ) then
|
|
SendMailFrame_Update();
|
|
elseif ( event == "MAIL_SEND_SUCCESS" ) then
|
|
SendMailFrame_Reset();
|
|
PlaySound("igAbiliityPageTurn");
|
|
-- If open mail frame is open then switch the mail frame back to the inbox
|
|
if ( SendMailFrame.sendMode == "reply" ) then
|
|
MailFrameTab_OnClick(nil, 1);
|
|
end
|
|
elseif ( event == "MAIL_FAILED" ) then
|
|
SendMailMailButton:Enable();
|
|
elseif ( event == "MAIL_SUCCESS" ) then
|
|
SendMailMailButton:Enable();
|
|
if ( InboxNextPageButton:IsEnabled() ~= 0 ) then
|
|
InboxGetMoreMail();
|
|
end
|
|
elseif ( event == "MAIL_CLOSED" ) then
|
|
HideUIPanel(MailFrame);
|
|
SendMailFrameLockSendMail:Hide();
|
|
StaticPopup_Hide("CONFIRM_MAIL_ITEM_UNREFUNDABLE");
|
|
elseif ( event == "CLOSE_INBOX_ITEM" ) then
|
|
local arg1 = ...;
|
|
if ( arg1 == InboxFrame.openMailID ) then
|
|
HideUIPanel(OpenMailFrame);
|
|
end
|
|
elseif ( event == "MAIL_LOCK_SEND_ITEMS" ) then
|
|
local slotNum, itemLink = ...;
|
|
SendMailFrameLockSendMail:Show();
|
|
itemName, itemLink, itemRarity, itemLevel, itemMinLevel, itemType, itemSubType, itemStackCount, itemEquipLoc, itemTexture = GetItemInfo(itemLink);
|
|
local r, g, b = GetItemQualityColor(itemRarity)
|
|
StaticPopup_Show("CONFIRM_MAIL_ITEM_UNREFUNDABLE", nil, nil, {["texture"] = itemTexture, ["name"] = itemName, ["color"] = {r, g, b, 1}, ["link"] = itemLink, ["slot"] = slotNum});
|
|
elseif ( event == "MAIL_UNLOCK_SEND_ITEMS") then
|
|
SendMailFrameLockSendMail:Hide();
|
|
StaticPopup_Hide("CONFIRM_MAIL_ITEM_UNREFUNDABLE");
|
|
end
|
|
end
|
|
|
|
function MailFrameTab_OnClick(self, tabID)
|
|
if ( not tabID ) then
|
|
tabID = self:GetID();
|
|
end
|
|
PanelTemplates_SetTab(MailFrame, tabID);
|
|
if ( tabID == 1 ) then
|
|
-- Inbox tab clicked
|
|
InboxFrame:Show();
|
|
SendMailFrame:Hide();
|
|
MailFrameTopLeft:SetTexture("Interface\\ItemTextFrame\\UI-ItemText-TopLeft");
|
|
MailFrameTopRight:SetTexture("Interface\\Spellbook\\UI-SpellbookPanel-TopRight");
|
|
MailFrameBotLeft:SetTexture("Interface\\ItemTextFrame\\UI-ItemText-BotLeft");
|
|
MailFrameBotRight:SetTexture("Interface\\Spellbook\\UI-SpellbookPanel-BotRight");
|
|
MailFrameTopLeft:SetPoint("TOPLEFT", "MailFrame", "TOPLEFT", 0, 0);
|
|
SetSendMailShowing(false);
|
|
else
|
|
-- Sendmail tab clicked
|
|
InboxFrame:Hide();
|
|
SendMailFrame:Show();
|
|
MailFrameTopLeft:SetTexture("Interface\\ClassTrainerFrame\\UI-ClassTrainer-TopLeft");
|
|
MailFrameTopRight:SetTexture("Interface\\ClassTrainerFrame\\UI-ClassTrainer-TopRight");
|
|
MailFrameBotLeft:SetTexture("Interface\\ClassTrainerFrame\\UI-ClassTrainer-BotLeft");
|
|
MailFrameBotRight:SetTexture("Interface\\ClassTrainerFrame\\UI-ClassTrainer-BotRight");
|
|
MailFrameTopLeft:SetPoint("TOPLEFT", "MailFrame", "TOPLEFT", 2, -1);
|
|
SendMailFrame_Update();
|
|
SetSendMailShowing(true);
|
|
|
|
-- Set the send mode to dictate the flow after a mail is sent
|
|
SendMailFrame.sendMode = "send";
|
|
end
|
|
PlaySound("igSpellBookOpen");
|
|
end
|
|
|
|
-- Inbox functions
|
|
|
|
function InboxFrame_Update()
|
|
local numItems, totalItems = GetInboxNumItems();
|
|
local index = ((InboxFrame.pageNum - 1) * INBOXITEMS_TO_DISPLAY) + 1;
|
|
local packageIcon, stationeryIcon, sender, subject, money, CODAmount, daysLeft, itemCount, wasRead, x, y, z, isGM, firstItemQuantity;
|
|
local icon, button, expireTime, senderText, subjectText, buttonIcon;
|
|
|
|
if ( totalItems > numItems ) then
|
|
if ( not InboxFrame.maxShownMails ) then
|
|
InboxFrame.maxShownMails = numItems;
|
|
end
|
|
InboxFrame.overflowMails = totalItems - numItems;
|
|
InboxFrame.shownMails = numItems;
|
|
else
|
|
InboxFrame.overflowMails = nil;
|
|
end
|
|
|
|
for i=1, INBOXITEMS_TO_DISPLAY do
|
|
if ( index <= numItems ) then
|
|
-- Setup mail item
|
|
packageIcon, stationeryIcon, sender, subject, money, CODAmount, daysLeft, itemCount, wasRead, x, y, z, isGM, firstItemQuantity = GetInboxHeaderInfo(index);
|
|
|
|
-- Set icon
|
|
if ( packageIcon ) and ( not isGM ) then
|
|
icon = packageIcon;
|
|
else
|
|
icon = stationeryIcon;
|
|
end
|
|
|
|
|
|
-- If no sender set it to "Unknown"
|
|
if ( not sender ) then
|
|
sender = UNKNOWN;
|
|
end
|
|
button = _G["MailItem"..i.."Button"];
|
|
button:Show();
|
|
button.index = index;
|
|
button.hasItem = itemCount;
|
|
button.itemCount = itemCount;
|
|
SetItemButtonCount(button, firstItemQuantity);
|
|
buttonIcon = _G["MailItem"..i.."ButtonIcon"];
|
|
buttonIcon:SetTexture(icon);
|
|
subjectText = _G["MailItem"..i.."Subject"];
|
|
subjectText:SetText(subject);
|
|
senderText = _G["MailItem"..i.."Sender"];
|
|
senderText:SetText(sender);
|
|
|
|
-- If hasn't been read color the button yellow
|
|
if ( wasRead ) then
|
|
senderText:SetTextColor(0.75, 0.75, 0.75);
|
|
subjectText:SetTextColor(0.75, 0.75, 0.75);
|
|
_G["MailItem"..i.."ButtonSlot"]:SetVertexColor(0.5, 0.5, 0.5);
|
|
SetDesaturation(buttonIcon, 1);
|
|
else
|
|
senderText:SetTextColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b);
|
|
subjectText:SetTextColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
|
|
_G["MailItem"..i.."ButtonSlot"]:SetVertexColor(1.0, 0.82, 0);
|
|
SetDesaturation(buttonIcon, nil);
|
|
end
|
|
-- Format expiration time
|
|
if ( daysLeft >= 1 ) then
|
|
daysLeft = GREEN_FONT_COLOR_CODE..format(DAYS_ABBR, floor(daysLeft)).." "..FONT_COLOR_CODE_CLOSE;
|
|
else
|
|
daysLeft = RED_FONT_COLOR_CODE..SecondsToTime(floor(daysLeft * 24 * 60 * 60))..FONT_COLOR_CODE_CLOSE;
|
|
end
|
|
expireTime = _G["MailItem"..i.."ExpireTime"];
|
|
expireTime:SetText(daysLeft);
|
|
-- Set expiration time tooltip
|
|
if ( InboxItemCanDelete(index) ) then
|
|
expireTime.tooltip = TIME_UNTIL_DELETED;
|
|
else
|
|
expireTime.tooltip = TIME_UNTIL_RETURNED;
|
|
end
|
|
expireTime:Show();
|
|
-- Is a C.O.D. package
|
|
if ( CODAmount > 0 ) then
|
|
_G["MailItem"..i.."ButtonCOD"]:Show();
|
|
_G["MailItem"..i.."ButtonCODBackground"]:Show();
|
|
button.cod = CODAmount;
|
|
else
|
|
_G["MailItem"..i.."ButtonCOD"]:Hide();
|
|
_G["MailItem"..i.."ButtonCODBackground"]:Hide();
|
|
button.cod = nil;
|
|
end
|
|
-- Contains money
|
|
if ( money > 0 ) then
|
|
button.money = money;
|
|
else
|
|
button.money = nil;
|
|
end
|
|
-- Set highlight
|
|
if ( InboxFrame.openMailID == index ) then
|
|
button:SetChecked(1);
|
|
SetPortraitToTexture("OpenMailFrameIcon", stationeryIcon);
|
|
else
|
|
button:SetChecked(nil);
|
|
end
|
|
else
|
|
-- Clear everything
|
|
_G["MailItem"..i.."Button"]:Hide();
|
|
_G["MailItem"..i.."Sender"]:SetText("");
|
|
_G["MailItem"..i.."Subject"]:SetText("");
|
|
_G["MailItem"..i.."ExpireTime"]:Hide();
|
|
end
|
|
index = index + 1;
|
|
end
|
|
|
|
-- Handle page arrows
|
|
if ( InboxFrame.pageNum == 1 ) then
|
|
InboxPrevPageButton:Disable();
|
|
else
|
|
InboxPrevPageButton:Enable();
|
|
end
|
|
if ( (InboxFrame.pageNum * INBOXITEMS_TO_DISPLAY) < numItems ) then
|
|
InboxNextPageButton:Enable();
|
|
else
|
|
InboxNextPageButton:Disable();
|
|
end
|
|
if ( totalItems > numItems) then
|
|
InboxTooMuchMail:Show();
|
|
else
|
|
InboxTooMuchMail:Hide();
|
|
end
|
|
end
|
|
|
|
function InboxFrame_OnClick(self, index)
|
|
if ( self:GetChecked() ) then
|
|
InboxFrame.openMailID = index;
|
|
OpenMailFrame.updateButtonPositions = true;
|
|
OpenMail_Update();
|
|
--OpenMailFrame:Show();
|
|
ShowUIPanel(OpenMailFrame);
|
|
PlaySound("igSpellBookOpen");
|
|
else
|
|
InboxFrame.openMailID = 0;
|
|
HideUIPanel(OpenMailFrame);
|
|
end
|
|
InboxFrame_Update();
|
|
end
|
|
|
|
function InboxFrame_OnModifiedClick(self, index)
|
|
local _, _, _, _, _, cod = GetInboxHeaderInfo(index);
|
|
if ( cod <= 0 ) then
|
|
AutoLootMailItem(index);
|
|
end
|
|
InboxFrame_OnClick(self, index);
|
|
end
|
|
|
|
function InboxFrameItem_OnEnter(self)
|
|
GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
|
|
if ( self.hasItem ) then
|
|
if ( self.itemCount == 1) then
|
|
GameTooltip:SetInboxItem(self.index);
|
|
else
|
|
GameTooltip:AddLine(MAIL_MULTIPLE_ITEMS.." ("..self.itemCount..")");
|
|
end
|
|
end
|
|
if (self.money) then
|
|
if ( self.hasItem ) then
|
|
GameTooltip:AddLine(" ");
|
|
end
|
|
GameTooltip:AddLine(ENCLOSED_MONEY, "", 1, 1, 1);
|
|
SetTooltipMoney(GameTooltip, self.money);
|
|
SetMoneyFrameColor("GameTooltipMoneyFrame1", "white");
|
|
elseif (self.cod) then
|
|
if ( self.hasItem ) then
|
|
GameTooltip:AddLine(" ");
|
|
end
|
|
GameTooltip:AddLine(COD_AMOUNT, "", 1, 1, 1);
|
|
SetTooltipMoney(GameTooltip, self.cod);
|
|
if ( self.cod > GetMoney() ) then
|
|
SetMoneyFrameColor("GameTooltipMoneyFrame1", "red");
|
|
else
|
|
SetMoneyFrameColor("GameTooltipMoneyFrame1", "white");
|
|
end
|
|
end
|
|
GameTooltip:Show();
|
|
end
|
|
|
|
function InboxNextPage()
|
|
PlaySound("igMainMenuOptionCheckBoxOn");
|
|
InboxFrame.pageNum = InboxFrame.pageNum + 1;
|
|
InboxGetMoreMail();
|
|
InboxFrame_Update();
|
|
end
|
|
|
|
function InboxPrevPage()
|
|
PlaySound("igMainMenuOptionCheckBoxOn");
|
|
InboxFrame.pageNum = InboxFrame.pageNum - 1;
|
|
InboxGetMoreMail();
|
|
InboxFrame_Update();
|
|
end
|
|
|
|
function InboxGetMoreMail()
|
|
-- get more mails if there is an overflow and less than max are being shown
|
|
if ( InboxFrame.overflowMails and InboxFrame.shownMails < InboxFrame.maxShownMails ) then
|
|
CheckInbox();
|
|
end
|
|
end
|
|
|
|
-- Open Mail functions
|
|
|
|
function OpenMailFrame_OnHide()
|
|
StaticPopup_Hide("DELETE_MAIL");
|
|
if ( not InboxFrame.openMailID ) then
|
|
InboxFrame_Update();
|
|
PlaySound("igSpellBookClose");
|
|
return;
|
|
end
|
|
|
|
-- Determine if this is an auction temp invoice
|
|
local bodyText, texture, isTakeable, isInvoice = GetInboxText(InboxFrame.openMailID);
|
|
local isAuctionTempInvoice = false;
|
|
if ( isInvoice ) then
|
|
local invoiceType, itemName, playerName, bid, buyout, deposit, consignment, moneyDelay, etaHour, etaMin = GetInboxInvoiceInfo(InboxFrame.openMailID);
|
|
if (invoiceType == "seller_temp_invoice") then
|
|
isAuctionTempInvoice = true;
|
|
end
|
|
end
|
|
|
|
-- If mail contains no items, then delete it on close
|
|
local packageIcon, stationeryIcon, sender, subject, money, CODAmount, daysLeft, itemCount, wasRead, wasReturned, textCreated = GetInboxHeaderInfo(InboxFrame.openMailID);
|
|
if ( money == 0 and not itemCount and textCreated and not isAuctionTempInvoice ) then
|
|
DeleteInboxItem(InboxFrame.openMailID);
|
|
end
|
|
InboxFrame.openMailID = 0;
|
|
InboxFrame_Update();
|
|
PlaySound("igSpellBookClose");
|
|
end
|
|
|
|
function OpenMailFrame_UpdateButtonPositions(letterIsTakeable, textCreated, stationeryIcon, money)
|
|
if ( OpenMailFrame.activeAttachmentButtons ) then
|
|
while (#OpenMailFrame.activeAttachmentButtons > 0) do
|
|
tremove(OpenMailFrame.activeAttachmentButtons);
|
|
end
|
|
else
|
|
OpenMailFrame.activeAttachmentButtons = {};
|
|
end
|
|
if ( OpenMailFrame.activeAttachmentRowPositions ) then
|
|
while (#OpenMailFrame.activeAttachmentRowPositions > 0) do
|
|
tremove(OpenMailFrame.activeAttachmentRowPositions );
|
|
end
|
|
else
|
|
OpenMailFrame.activeAttachmentRowPositions = {};
|
|
end
|
|
|
|
local rowAttachmentCount = 0;
|
|
|
|
-- letter
|
|
if ( letterIsTakeable and not textCreated ) then
|
|
SetItemButtonTexture(OpenMailLetterButton, stationeryIcon);
|
|
tinsert(OpenMailFrame.activeAttachmentButtons, OpenMailLetterButton);
|
|
rowAttachmentCount = rowAttachmentCount + 1;
|
|
else
|
|
SetItemButtonTexture(OpenMailLetterButton, "");
|
|
end
|
|
-- money
|
|
if ( money == 0 ) then
|
|
SetItemButtonTexture(OpenMailMoneyButton, "");
|
|
else
|
|
SetItemButtonTexture(OpenMailMoneyButton, GetCoinIcon(money));
|
|
tinsert(OpenMailFrame.activeAttachmentButtons, OpenMailMoneyButton);
|
|
rowAttachmentCount = rowAttachmentCount + 1;
|
|
end
|
|
-- items
|
|
for i=1, ATTACHMENTS_MAX_RECEIVE do
|
|
local name, itemTexture, count, quality, canUse = GetInboxItem(InboxFrame.openMailID, i);
|
|
local attachmentButton = _G["OpenMailAttachmentButton"..i];
|
|
if ( name ) then
|
|
tinsert(OpenMailFrame.activeAttachmentButtons, attachmentButton);
|
|
rowAttachmentCount = rowAttachmentCount + 1;
|
|
|
|
SetItemButtonTexture(attachmentButton, itemTexture);
|
|
SetItemButtonCount(attachmentButton, count);
|
|
if ( canUse ) then
|
|
SetItemButtonTextureVertexColor(attachmentButton, HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
|
|
else
|
|
SetItemButtonTextureVertexColor(attachmentButton, 1.0, 0.1, 0.1);
|
|
end
|
|
else
|
|
attachmentButton:Hide();
|
|
end
|
|
|
|
if ( rowAttachmentCount >= ATTACHMENTS_PER_ROW_RECEIVE ) then
|
|
tinsert(OpenMailFrame.activeAttachmentRowPositions, {cursorxstart=0,cursorxend=ATTACHMENTS_PER_ROW_RECEIVE - 1});
|
|
rowAttachmentCount = 0;
|
|
end
|
|
end
|
|
-- insert last row's position data
|
|
if ( rowAttachmentCount > 0 ) then
|
|
local xstart = (ATTACHMENTS_PER_ROW_RECEIVE - rowAttachmentCount) / 2;
|
|
local xend = xstart + rowAttachmentCount - 1;
|
|
tinsert(OpenMailFrame.activeAttachmentRowPositions, {cursorxstart=xstart,cursorxend=xend});
|
|
end
|
|
|
|
-- hide unusable attachment buttons
|
|
for i=ATTACHMENTS_MAX_RECEIVE + 1, ATTACHMENTS_MAX do
|
|
_G["OpenMailAttachmentButton"..i]:Hide();
|
|
end
|
|
end
|
|
|
|
function OpenMail_Update()
|
|
if ( not InboxFrame.openMailID ) then
|
|
return;
|
|
end
|
|
if ( CanComplainInboxItem(InboxFrame.openMailID) ) then
|
|
OpenMailReportSpamButton:Enable();
|
|
OpenMailReportSpamButton:Show();
|
|
else
|
|
OpenMailReportSpamButton:Hide();
|
|
end
|
|
|
|
-- Setup mail item
|
|
local packageIcon, stationeryIcon, sender, subject, money, CODAmount, daysLeft, itemCount, wasRead, wasReturned, textCreated, canReply = GetInboxHeaderInfo(InboxFrame.openMailID);
|
|
-- Set sender and subject
|
|
if ( not sender or not canReply ) then
|
|
OpenMailReplyButton:Disable();
|
|
else
|
|
OpenMailReplyButton:Enable();
|
|
end
|
|
if ( not sender ) then
|
|
sender = UNKNOWN;
|
|
end
|
|
-- Save sender name to pass to a potential spam report
|
|
InboxFrame.openMailSender = sender;
|
|
OpenMailSender:SetText(sender);
|
|
OpenMailSubject:SetText(subject);
|
|
-- Set Text
|
|
local bodyText, texture, isTakeable, isInvoice = GetInboxText(InboxFrame.openMailID);
|
|
OpenMailBodyText:SetText(bodyText);
|
|
if ( texture ) then
|
|
OpenStationeryBackgroundLeft:SetTexture(STATIONERY_PATH..texture.."1");
|
|
OpenStationeryBackgroundRight:SetTexture(STATIONERY_PATH..texture.."2");
|
|
end
|
|
|
|
-- Is an invoice
|
|
if ( isInvoice ) then
|
|
local invoiceType, itemName, playerName, bid, buyout, deposit, consignment, moneyDelay, etaHour, etaMin = GetInboxInvoiceInfo(InboxFrame.openMailID);
|
|
if ( playerName ) then
|
|
-- Setup based on whether player is the buyer or the seller
|
|
local buyMode;
|
|
if ( invoiceType == "buyer" ) then
|
|
if ( bid == buyout ) then
|
|
buyMode = "("..BUYOUT..")";
|
|
else
|
|
buyMode = "("..HIGH_BIDDER..")";
|
|
end
|
|
OpenMailInvoiceItemLabel:SetText(ITEM_PURCHASED_COLON.." "..itemName.." "..buyMode);
|
|
OpenMailInvoicePurchaser:SetText(SOLD_BY_COLON.." "..playerName);
|
|
OpenMailInvoiceAmountReceived:SetText(AMOUNT_PAID_COLON);
|
|
-- Clear buymode
|
|
OpenMailInvoiceBuyMode:SetText("");
|
|
-- Position amount paid
|
|
OpenMailInvoiceAmountReceived:SetPoint("TOPRIGHT", "OpenMailInvoiceSalePrice", "TOPRIGHT", 0, 0);
|
|
-- Update purchase price
|
|
MoneyFrame_Update("OpenMailTransactionAmountMoneyFrame", bid);
|
|
-- Position buy line
|
|
OpenMailArithmeticLine:SetPoint("TOP", "OpenMailInvoicePurchaser", "BOTTOMLEFT", 125, 0);
|
|
-- Not used for a purchase invoice
|
|
OpenMailInvoiceSalePrice:Hide();
|
|
OpenMailInvoiceDeposit:Hide();
|
|
OpenMailInvoiceHouseCut:Hide();
|
|
OpenMailDepositMoneyFrame:Hide();
|
|
OpenMailHouseCutMoneyFrame:Hide();
|
|
OpenMailSalePriceMoneyFrame:Hide();
|
|
OpenMailInvoiceNotYetSent:Hide();
|
|
OpenMailInvoiceMoneyDelay:Hide();
|
|
elseif (invoiceType == "seller") then
|
|
OpenMailInvoiceItemLabel:SetText(ITEM_SOLD_COLON.." "..itemName);
|
|
OpenMailInvoicePurchaser:SetText(PURCHASED_BY_COLON.." "..playerName);
|
|
OpenMailInvoiceAmountReceived:SetText(AMOUNT_RECEIVED_COLON);
|
|
-- Determine if auction was bought out or bid on
|
|
if ( bid == buyout ) then
|
|
OpenMailInvoiceBuyMode:SetText("("..BUYOUT..")");
|
|
else
|
|
OpenMailInvoiceBuyMode:SetText("("..HIGH_BIDDER..")");
|
|
end
|
|
-- Position amount received
|
|
OpenMailInvoiceAmountReceived:SetPoint("TOPRIGHT", "OpenMailInvoiceHouseCut", "BOTTOMRIGHT", 0, -18);
|
|
-- Position buy line
|
|
OpenMailArithmeticLine:SetPoint("TOP", "OpenMailInvoiceHouseCut", "BOTTOMRIGHT", 0, 9);
|
|
MoneyFrame_Update("OpenMailSalePriceMoneyFrame", bid);
|
|
MoneyFrame_Update("OpenMailDepositMoneyFrame", deposit);
|
|
MoneyFrame_Update("OpenMailHouseCutMoneyFrame", consignment);
|
|
SetMoneyFrameColor("OpenMailHouseCutMoneyFrame", "red");
|
|
MoneyFrame_Update("OpenMailTransactionAmountMoneyFrame", bid+deposit-consignment);
|
|
|
|
-- Show these guys if the player was the seller
|
|
OpenMailInvoiceSalePrice:Show();
|
|
OpenMailInvoiceDeposit:Show();
|
|
OpenMailInvoiceHouseCut:Show();
|
|
OpenMailDepositMoneyFrame:Show();
|
|
OpenMailHouseCutMoneyFrame:Show();
|
|
OpenMailSalePriceMoneyFrame:Show();
|
|
OpenMailInvoiceNotYetSent:Hide();
|
|
OpenMailInvoiceMoneyDelay:Hide();
|
|
elseif (invoiceType == "seller_temp_invoice") then
|
|
if ( bid == buyout ) then
|
|
buyMode = "("..BUYOUT..")";
|
|
else
|
|
buyMode = "("..HIGH_BIDDER..")";
|
|
end
|
|
OpenMailInvoiceItemLabel:SetText(ITEM_SOLD_COLON.." "..itemName.." "..buyMode);
|
|
OpenMailInvoicePurchaser:SetText(PURCHASED_BY_COLON.." "..playerName);
|
|
OpenMailInvoiceAmountReceived:SetText(AUCTION_INVOICE_PENDING_FUNDS_COLON);
|
|
-- Clear buymode
|
|
OpenMailInvoiceBuyMode:SetText("");
|
|
-- Position amount to be received
|
|
OpenMailInvoiceAmountReceived:SetPoint("TOPRIGHT", "OpenMailInvoiceSalePrice", "TOPRIGHT", 0, 0);
|
|
-- Update purchase price
|
|
MoneyFrame_Update("OpenMailTransactionAmountMoneyFrame", bid+deposit-consignment);
|
|
-- Position buy line
|
|
OpenMailArithmeticLine:SetPoint("TOP", "OpenMailInvoicePurchaser", "BOTTOMLEFT", 125, 0);
|
|
-- How long they have to wait to get the money
|
|
OpenMailInvoiceMoneyDelay:SetFormattedText(AUCTION_INVOICE_FUNDS_DELAY, GameTime_GetFormattedTime(etaHour, etaMin, true));
|
|
-- Not used for a temp sale invoice
|
|
OpenMailInvoiceSalePrice:Hide();
|
|
OpenMailInvoiceDeposit:Hide();
|
|
OpenMailInvoiceHouseCut:Hide();
|
|
OpenMailDepositMoneyFrame:Hide();
|
|
OpenMailHouseCutMoneyFrame:Hide();
|
|
OpenMailSalePriceMoneyFrame:Hide();
|
|
OpenMailInvoiceNotYetSent:Show();
|
|
OpenMailInvoiceMoneyDelay:Show();
|
|
end
|
|
OpenMailInvoiceFrame:Show();
|
|
end
|
|
else
|
|
OpenMailInvoiceFrame:Hide();
|
|
end
|
|
|
|
local itemButtonCount, itemRowCount = OpenMail_GetItemCounts(isTakeable, textCreated, money);
|
|
if ( OpenMailFrame.updateButtonPositions ) then
|
|
OpenMailFrame_UpdateButtonPositions(isTakeable, textCreated, stationeryIcon, money);
|
|
end
|
|
if ( OpenMailFrame.activeAttachmentRowPositions ) then
|
|
itemRowCount = #OpenMailFrame.activeAttachmentRowPositions;
|
|
end
|
|
|
|
-- record the original number of buttons that the mail needs
|
|
OpenMailFrame.itemButtonCount = itemButtonCount;
|
|
|
|
-- Determine starting position for buttons
|
|
local marginxl = 23 + 4;
|
|
local marginxr = 43 + 4;
|
|
local areax = OpenMailFrame:GetWidth() - marginxl - marginxr;
|
|
local iconx = OpenMailAttachmentButton1:GetWidth() + 2;
|
|
local icony = OpenMailAttachmentButton1:GetHeight() + 2;
|
|
local gapx1 = floor((areax - (iconx * ATTACHMENTS_PER_ROW_RECEIVE)) / (ATTACHMENTS_PER_ROW_RECEIVE - 1));
|
|
local gapx2 = floor((areax - (iconx * ATTACHMENTS_PER_ROW_RECEIVE) - (gapx1 * (ATTACHMENTS_PER_ROW_RECEIVE - 1))) / 2);
|
|
local gapy1 = 3;
|
|
local gapy2 = 3;
|
|
local areay = gapy2 + OpenMailAttachmentText:GetHeight() + gapy2 + (icony * itemRowCount) + (gapy1 * (itemRowCount - 1)) + gapy2;
|
|
local indentx = marginxl + gapx2;
|
|
local indenty = 103 + gapy2;
|
|
local tabx = (iconx + gapx1);
|
|
local taby = (icony + gapy1);
|
|
local scrollHeight = 305 - areay;
|
|
if (scrollHeight > 256) then
|
|
scrollHeight = 256;
|
|
areay = 305 - scrollHeight;
|
|
end
|
|
|
|
-- Resize the scroll frame
|
|
OpenMailScrollFrame:SetHeight(scrollHeight);
|
|
OpenMailScrollChildFrame:SetHeight(scrollHeight);
|
|
OpenMailHorizontalBarLeft:SetPoint("TOPLEFT", "OpenMailFrame", "BOTTOMLEFT", 15, 114 + areay);
|
|
OpenScrollBarBackgroundTop:SetHeight(min(scrollHeight, 256));
|
|
OpenScrollBarBackgroundTop:SetTexCoord(0, 0.484375, 0, min(scrollHeight, 256) / 256);
|
|
OpenStationeryBackgroundLeft:SetHeight(scrollHeight);
|
|
OpenStationeryBackgroundLeft:SetTexCoord(0, 1.0, 0, min(scrollHeight, 256) / 256);
|
|
OpenStationeryBackgroundRight:SetHeight(scrollHeight);
|
|
OpenStationeryBackgroundRight:SetTexCoord(0, 1.0, 0, min(scrollHeight, 256) / 256);
|
|
|
|
-- Set attachment text
|
|
if ( itemButtonCount > 0 ) then
|
|
OpenMailAttachmentText:SetText(TAKE_ATTACHMENTS);
|
|
OpenMailAttachmentText:SetTextColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
|
|
OpenMailAttachmentText:SetPoint("TOPLEFT", "OpenMailFrame", "BOTTOMLEFT", indentx, indenty + (icony * itemRowCount) + (gapy1 * (itemRowCount - 1)) + gapy2 + OpenMailAttachmentText:GetHeight());
|
|
else
|
|
OpenMailAttachmentText:SetText(NO_ATTACHMENTS);
|
|
OpenMailAttachmentText:SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
|
|
OpenMailAttachmentText:SetPoint("TOPLEFT", "OpenMailFrame", "BOTTOMLEFT", marginxl + (areax - OpenMailAttachmentText:GetWidth()) / 2, indenty + (areay - OpenMailAttachmentText:GetHeight()) / 2 + OpenMailAttachmentText:GetHeight());
|
|
end
|
|
-- Set letter
|
|
if ( isTakeable and not textCreated ) then
|
|
OpenMailLetterButton:Show();
|
|
else
|
|
OpenMailLetterButton:Hide();
|
|
end
|
|
-- Set Money
|
|
if ( money == 0 ) then
|
|
OpenMailMoneyButton:Hide();
|
|
OpenMailFrame.money = nil;
|
|
else
|
|
OpenMailMoneyButton:Show();
|
|
OpenMailFrame.money = money;
|
|
end
|
|
-- Set Items
|
|
if ( itemRowCount > 0 and OpenMailFrame.activeAttachmentButtons ) then
|
|
local firstAttachName;
|
|
local rowIndex = 1;
|
|
local cursorx = OpenMailFrame.activeAttachmentRowPositions[1].cursorxstart;
|
|
local cursorxend = OpenMailFrame.activeAttachmentRowPositions[1].cursorxend;
|
|
local cursory = itemRowCount - 1;
|
|
for i, attachmentButton in pairs(OpenMailFrame.activeAttachmentButtons) do
|
|
attachmentButton:SetPoint("TOPLEFT", "OpenMailFrame", "BOTTOMLEFT", indentx + (tabx * cursorx), indenty + icony + (taby * cursory));
|
|
if ( attachmentButton ~= OpenMailLetterButton and attachmentButton ~= OpenMailMoneyButton ) then
|
|
local name, itemTexture, count, quality, canUse = GetInboxItem(InboxFrame.openMailID, attachmentButton:GetID());
|
|
if ( name and cursory >= 0 ) then
|
|
if ( not firstAttachName ) then
|
|
firstAttachName = name;
|
|
end
|
|
|
|
attachmentButton:Enable();
|
|
attachmentButton:Show();
|
|
else
|
|
attachmentButton:Hide();
|
|
end
|
|
end
|
|
|
|
cursorx = cursorx + 1;
|
|
if (cursorx > cursorxend) then
|
|
rowIndex = rowIndex + 1;
|
|
|
|
cursory = cursory - 1;
|
|
if ( rowIndex <= itemRowCount ) then
|
|
cursorx = OpenMailFrame.activeAttachmentRowPositions[rowIndex].cursorxstart;
|
|
cursorxend = OpenMailFrame.activeAttachmentRowPositions[rowIndex].cursorxend;
|
|
end
|
|
end
|
|
end
|
|
|
|
OpenMailFrame.itemName = firstAttachName;
|
|
else
|
|
OpenMailFrame.itemName = nil;
|
|
end
|
|
|
|
-- Set COD
|
|
if ( CODAmount > 0 ) then
|
|
OpenMailFrame.cod = CODAmount;
|
|
else
|
|
OpenMailFrame.cod = nil;
|
|
end
|
|
-- Set button to delete or return to sender
|
|
if ( InboxItemCanDelete(InboxFrame.openMailID) ) then
|
|
OpenMailDeleteButton:SetText(DELETE);
|
|
else
|
|
OpenMailDeleteButton:SetText(MAIL_RETURN);
|
|
end
|
|
end
|
|
|
|
function OpenMail_GetItemCounts(letterIsTakeable, textCreated, money)
|
|
local itemButtonCount = 0;
|
|
local itemRowCount = 0;
|
|
local numRows = 0;
|
|
if ( letterIsTakeable and not textCreated ) then
|
|
itemButtonCount = itemButtonCount + 1;
|
|
itemRowCount = itemRowCount + 1;
|
|
end
|
|
if ( money ~= 0 ) then
|
|
itemButtonCount = itemButtonCount + 1;
|
|
itemRowCount = itemRowCount + 1;
|
|
end
|
|
for i=1, ATTACHMENTS_MAX_RECEIVE do
|
|
local name, itemTexture, count, quality, canUse = GetInboxItem(InboxFrame.openMailID, i);
|
|
if ( name ) then
|
|
itemButtonCount = itemButtonCount + 1;
|
|
itemRowCount = itemRowCount + 1;
|
|
end
|
|
|
|
if ( itemRowCount >= ATTACHMENTS_PER_ROW_RECEIVE ) then
|
|
numRows = numRows + 1;
|
|
itemRowCount = 0;
|
|
end
|
|
end
|
|
if ( itemRowCount > 0 ) then
|
|
numRows = numRows + 1;
|
|
end
|
|
return itemButtonCount, numRows;
|
|
end
|
|
|
|
function OpenMail_Reply()
|
|
MailFrameTab_OnClick(nil, 2);
|
|
SendMailNameEditBox:SetText(OpenMailSender:GetText())
|
|
local subject = OpenMailSubject:GetText();
|
|
local prefix = MAIL_REPLY_PREFIX.." ";
|
|
if ( strsub(subject, 1, strlen(prefix)) ~= prefix ) then
|
|
subject = prefix..subject;
|
|
end
|
|
SendMailSubjectEditBox:SetText(subject)
|
|
SendMailBodyEditBox:SetFocus();
|
|
|
|
-- Set the send mode so the work flow can change accordingly
|
|
SendMailFrame.sendMode = "reply";
|
|
end
|
|
|
|
function OpenMail_Delete()
|
|
if ( InboxItemCanDelete(InboxFrame.openMailID) ) then
|
|
if ( OpenMailFrame.itemName ) then
|
|
StaticPopup_Show("DELETE_MAIL", OpenMailFrame.itemName);
|
|
return;
|
|
elseif ( OpenMailFrame.money ) then
|
|
StaticPopup_Show("DELETE_MONEY");
|
|
return;
|
|
else
|
|
DeleteInboxItem(InboxFrame.openMailID);
|
|
end
|
|
else
|
|
ReturnInboxItem(InboxFrame.openMailID);
|
|
StaticPopup_Hide("COD_CONFIRMATION");
|
|
end
|
|
InboxFrame.openMailID = nil;
|
|
HideUIPanel(OpenMailFrame);
|
|
end
|
|
|
|
function OpenMail_ReportSpam()
|
|
local dialog = StaticPopup_Show("CONFIRM_REPORT_SPAM_MAIL", InboxFrame.openMailSender);
|
|
if ( dialog ) then
|
|
dialog.data = InboxFrame.openMailID;
|
|
end
|
|
OpenMailReportSpamButton:Disable();
|
|
end
|
|
|
|
function OpenMailAttachment_OnEnter(self, index)
|
|
GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
|
|
GameTooltip:SetInboxItem(InboxFrame.openMailID, index);
|
|
|
|
if ( OpenMailFrame.cod ) then
|
|
SetTooltipMoney(GameTooltip, OpenMailFrame.cod);
|
|
if ( OpenMailFrame.cod > GetMoney() ) then
|
|
SetMoneyFrameColor("GameTooltipMoneyFrame1", "red");
|
|
else
|
|
SetMoneyFrameColor("GameTooltipMoneyFrame1", "white");
|
|
end
|
|
end
|
|
GameTooltip:Show();
|
|
end
|
|
|
|
function OpenMailAttachment_OnClick(self, index)
|
|
if ( OpenMailFrame.cod and (OpenMailFrame.cod > GetMoney()) ) then
|
|
StaticPopup_Show("COD_ALERT");
|
|
elseif ( OpenMailFrame.cod ) then
|
|
OpenMailFrame.lastTakeAttachment = index;
|
|
StaticPopup_Show("COD_CONFIRMATION");
|
|
OpenMailFrame.updateButtonPositions = false;
|
|
else
|
|
TakeInboxItem(InboxFrame.openMailID, index);
|
|
OpenMailFrame.updateButtonPositions = false;
|
|
end
|
|
PlaySound("igMainMenuOptionCheckBoxOn");
|
|
end
|
|
|
|
-- SendMail functions
|
|
|
|
function SendMailMailButton_OnClick(self)
|
|
self:Disable();
|
|
local copper = MoneyInputFrame_GetCopper(SendMailMoney);
|
|
SetSendMailCOD(0);
|
|
SetSendMailMoney(0);
|
|
if ( SendMailSendMoneyButton:GetChecked() ) then
|
|
-- Send Money
|
|
if ( copper > 0 ) then
|
|
-- Open confirmation dialog
|
|
StaticPopup_Show("SEND_MONEY", SendMailNameEditBox:GetText());
|
|
return;
|
|
end
|
|
else
|
|
-- Send C.O.D.
|
|
if ( copper > 0 ) then
|
|
SetSendMailCOD(copper);
|
|
end
|
|
end
|
|
SendMailFrame_SendMail();
|
|
end
|
|
|
|
function SendMailFrame_SendMail()
|
|
SendMail(SendMailNameEditBox:GetText(), SendMailSubjectEditBox:GetText(), SendMailBodyEditBox:GetText());
|
|
end
|
|
|
|
function SendMailFrame_Update()
|
|
-- Update the item(s) being sent
|
|
local itemCount = 0;
|
|
local itemTitle;
|
|
local gap;
|
|
local last = 0;
|
|
for i=1, ATTACHMENTS_MAX_SEND do
|
|
-- get info about the attachment
|
|
local itemName, itemTexture, stackCount, quality = GetSendMailItem(i);
|
|
-- set attachment texture info
|
|
_G["SendMailAttachment"..i]:SetNormalTexture(itemTexture);
|
|
-- set the stack count
|
|
if ( stackCount <= 1 ) then
|
|
_G["SendMailAttachment"..i.."Count"]:SetText("");
|
|
else
|
|
_G["SendMailAttachment"..i.."Count"]:SetText(stackCount);
|
|
end
|
|
-- determine what a name for the message in case it doesn't already have one
|
|
if ( itemName ) then
|
|
itemCount = itemCount + 1;
|
|
if ( not itemTitle ) then
|
|
if ( stackCount <= 1 ) then
|
|
itemTitle = itemName;
|
|
else
|
|
itemTitle = itemName.." ("..stackCount..")";
|
|
end
|
|
end
|
|
if ((last + 1) ~= i) then
|
|
gap = 1;
|
|
end
|
|
last = i;
|
|
end
|
|
end
|
|
-- Enable or disable C.O.D. depending on whether or not there's an item to send
|
|
if ( itemCount > 0 ) then
|
|
SendMailCODButton:Enable();
|
|
SendMailCODButtonText:SetTextColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b);
|
|
|
|
if ( SendMailSubjectEditBox:GetText() == "" or SendMailSubjectEditBox:GetText() == SendMailFrame.previousItem ) then
|
|
SendMailSubjectEditBox:SetText(itemTitle);
|
|
SendMailFrame.previousItem = itemTitle;
|
|
end
|
|
else
|
|
-- If no itemname see if the subject is the name of the previously held item, if so clear the subject
|
|
if ( SendMailSubjectEditBox:GetText() == SendMailFrame.previousItem ) then
|
|
SendMailSubjectEditBox:SetText("");
|
|
end
|
|
SendMailFrame.previousItem = "";
|
|
|
|
SendMailRadioButton_OnClick(1);
|
|
SendMailCODButton:Disable();
|
|
SendMailCODButtonText:SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
|
|
end
|
|
-- Update the cost
|
|
MoneyFrame_Update("SendMailCostMoneyFrame", GetSendMailPrice());
|
|
|
|
-- Color the postage text
|
|
if ( GetSendMailPrice() > GetMoney() ) then
|
|
SetMoneyFrameColor("SendMailCostMoneyFrame", "red");
|
|
else
|
|
SetMoneyFrameColor("SendMailCostMoneyFrame", "white");
|
|
end
|
|
|
|
-- Determine how many rows of attachments to show
|
|
local itemRowCount = 1;
|
|
local temp = last;
|
|
while ((temp > ATTACHMENTS_PER_ROW_SEND) and (itemRowCount < ATTACHMENTS_MAX_ROWS_SEND)) do
|
|
itemRowCount = itemRowCount + 1;
|
|
temp = temp - ATTACHMENTS_PER_ROW_SEND;
|
|
end
|
|
if (not gap and (temp == ATTACHMENTS_PER_ROW_SEND) and (itemRowCount < ATTACHMENTS_MAX_ROWS_SEND)) then
|
|
itemRowCount = itemRowCount + 1;
|
|
end
|
|
if (SendMailFrame.maxRowsShown and (last > 0) and (itemRowCount < SendMailFrame.maxRowsShown)) then
|
|
itemRowCount = SendMailFrame.maxRowsShown;
|
|
else
|
|
SendMailFrame.maxRowsShown = itemRowCount;
|
|
end
|
|
|
|
-- Compute sizes
|
|
local cursorx = 0;
|
|
local cursory = itemRowCount - 1;
|
|
local marginxl = 25 + 6;
|
|
local marginxr = 40 + 6;
|
|
local areax = SendMailFrame:GetWidth() - marginxl - marginxr;
|
|
local iconx = SendMailAttachment1:GetWidth() + 2;
|
|
local icony = SendMailAttachment1:GetHeight() + 2;
|
|
local gapx1 = floor((areax - (iconx * ATTACHMENTS_PER_ROW_SEND)) / (ATTACHMENTS_PER_ROW_SEND - 1));
|
|
local gapx2 = floor((areax - (iconx * ATTACHMENTS_PER_ROW_SEND) - (gapx1 * (ATTACHMENTS_PER_ROW_SEND - 1))) / 2);
|
|
local gapy1 = 5;
|
|
local gapy2 = 6;
|
|
local areay = (gapy2 * 2) + (gapy1 * (itemRowCount - 1)) + (icony * itemRowCount);
|
|
local indentx = marginxl + gapx2;
|
|
local indenty = 156 + gapy2 + icony;
|
|
local tabx = (iconx + gapx1);
|
|
local taby = (icony + gapy1);
|
|
local scrollHeight = 249 - areay;
|
|
|
|
-- Resize the scroll frame
|
|
SendMailScrollFrame:SetHeight(scrollHeight);
|
|
SendMailScrollChildFrame:SetHeight(scrollHeight);
|
|
SendMailHorizontalBarLeft2:SetPoint("TOPLEFT", "SendMailFrame", "BOTTOMLEFT", 15, 170 + areay);
|
|
SendScrollBarBackgroundTop:SetHeight(min(scrollHeight, 256));
|
|
SendScrollBarBackgroundTop:SetTexCoord(0, 0.484375, 0, min(scrollHeight, 256) / 256);
|
|
SendStationeryBackgroundLeft:SetHeight(min(scrollHeight, 256));
|
|
SendStationeryBackgroundLeft:SetTexCoord(0, 1.0, 0, min(scrollHeight, 256) / 256);
|
|
SendStationeryBackgroundRight:SetHeight(min(scrollHeight, 256));
|
|
SendStationeryBackgroundRight:SetTexCoord(0, 1.0, 0, min(scrollHeight, 256) / 256);
|
|
|
|
-- Set Items
|
|
for i=1, ATTACHMENTS_MAX_SEND do
|
|
if (cursory >= 0) then
|
|
_G["SendMailAttachment"..i]:Enable();
|
|
_G["SendMailAttachment"..i]:Show();
|
|
_G["SendMailAttachment"..i]:SetPoint("TOPLEFT", "SendMailFrame", "BOTTOMLEFT", indentx + (tabx * cursorx), indenty + (taby * cursory));
|
|
|
|
cursorx = cursorx + 1;
|
|
if (cursorx >= ATTACHMENTS_PER_ROW_SEND) then
|
|
cursory = cursory - 1;
|
|
cursorx = 0;
|
|
end
|
|
else
|
|
_G["SendMailAttachment"..i]:Hide();
|
|
end
|
|
end
|
|
for i=ATTACHMENTS_MAX_SEND+1, ATTACHMENTS_MAX do
|
|
_G["SendMailAttachment"..i]:Hide();
|
|
end
|
|
|
|
SendMailFrame_CanSend();
|
|
end
|
|
|
|
function SendMailFrame_Reset()
|
|
SendMailNameEditBox:SetText("");
|
|
SendMailNameEditBox:SetFocus();
|
|
SendMailSubjectEditBox:SetText("");
|
|
SendMailBodyEditBox:SetText("");
|
|
StationeryPopupFrame.selectedIndex = nil;
|
|
SendMailFrame_Update();
|
|
StationeryPopupButton_OnClick(nil, 1);
|
|
MoneyInputFrame_ResetMoney(SendMailMoney);
|
|
SendMailRadioButton_OnClick(1);
|
|
SendMailFrame.maxRowsShown = 0;
|
|
end
|
|
|
|
function SendMailFrame_CanSend()
|
|
local checks = 0;
|
|
local checksRequired = 3;
|
|
-- If has stationery
|
|
if ( StationeryPopupFrame.selectedIndex ~= nil ) then
|
|
checks = checks + 1;
|
|
end
|
|
-- and has a sendee
|
|
if ( strlen(SendMailNameEditBox:GetText()) > 0 ) then
|
|
checks = checks + 1;
|
|
end
|
|
-- and has a subject
|
|
if ( strlen(SendMailSubjectEditBox:GetText()) > 0 ) then
|
|
checks = checks + 1;
|
|
end
|
|
-- check c.o.d. amount
|
|
if ( SendMailCODButton:GetChecked() ) then
|
|
checksRequired = 4;
|
|
-- COD must be less than 10000 gold
|
|
if ( MoneyInputFrame_GetCopper(SendMailMoney) > MAX_COD_AMOUNT*COPPER_PER_GOLD ) then
|
|
if ( ENABLE_COLORBLIND_MODE ~= "1" ) then
|
|
SendMailErrorCoin:Show();
|
|
end
|
|
SendMailErrorText:Show();
|
|
else
|
|
SendMailErrorText:Hide();
|
|
SendMailErrorCoin:Hide();
|
|
checks = checks + 1;
|
|
end
|
|
end
|
|
|
|
if ( checks == checksRequired ) then
|
|
SendMailMailButton:Enable();
|
|
else
|
|
SendMailMailButton:Disable();
|
|
end
|
|
end
|
|
|
|
function SendMailRadioButton_OnClick(index)
|
|
if ( index == 1 ) then
|
|
SendMailSendMoneyButton:SetChecked(1);
|
|
SendMailCODButton:SetChecked(nil);
|
|
SendMailMoneyText:SetText(AMOUNT_TO_SEND);
|
|
else
|
|
SendMailSendMoneyButton:SetChecked(nil);
|
|
SendMailCODButton:SetChecked(1);
|
|
SendMailMoneyText:SetText(COD_AMOUNT);
|
|
end
|
|
PlaySound("igMainMenuOptionCheckBoxOn");
|
|
end
|
|
|
|
-- Stationery functions
|
|
|
|
function StationeryPopupFrame_Update()
|
|
local numStationeries = GetNumStationeries();
|
|
local index = FauxScrollFrame_GetOffset(StationeryPopupScrollFrame) + 1;
|
|
local name, texture, cost;
|
|
local button;
|
|
for i=1, STATIONERYITEMS_TO_DISPLAY do
|
|
button = _G["StationeryPopupButton"..i];
|
|
if ( index <= numStationeries ) then
|
|
name, texture, cost = GetStationeryInfo(index);
|
|
_G["StationeryPopupButton"..i.."Name"]:SetText(name);
|
|
if ( cost ) then
|
|
MoneyFrame_Update("StationeryPopupButton"..i.."MoneyFrame", cost);
|
|
-- If player can't afford
|
|
if ( cost > GetMoney() ) then
|
|
button:Disable();
|
|
SetMoneyFrameColor("StationeryPopupButton"..i.."MoneyFrame", "red");
|
|
else
|
|
button:Enable();
|
|
SetMoneyFrameColor("StationeryPopupButton"..i.."MoneyFrame", "white");
|
|
end
|
|
else
|
|
-- Is a stationery in player's inventory or is free
|
|
MoneyFrame_Update("StationeryPopupButton"..i.."MoneyFrame", 0);
|
|
end
|
|
_G["StationeryPopupButton"..i.."Icon"]:SetTexture(texture);
|
|
button:Show();
|
|
else
|
|
_G["StationeryPopupButton"..i.."Name"]:SetText("");
|
|
MoneyFrame_Update("StationeryPopupButton"..i.."MoneyFrame", 0);
|
|
_G["StationeryPopupButton"..i.."Icon"]:SetTexture("");
|
|
button:Hide();
|
|
end
|
|
|
|
if ( index == StationeryPopupFrame.selectedIndex ) then
|
|
button:SetChecked(1);
|
|
else
|
|
button:SetChecked(nil);
|
|
end
|
|
button.index = index;
|
|
index = index + 1;
|
|
end
|
|
|
|
-- Scrollbar stuff
|
|
FauxScrollFrame_Update(StationeryPopupScrollFrame, numStationeries , STATIONERYITEMS_TO_DISPLAY, STATIONERY_ICON_ROW_HEIGHT );
|
|
end
|
|
|
|
function StationeryPopupButton_OnClick(self, index)
|
|
if ( not index ) then
|
|
index = self.index;
|
|
end
|
|
SelectStationery(index);
|
|
StationeryPopupFrame.selectedIndex = index;
|
|
SendMailFrame_CanSend()
|
|
-- Set the stationery texture
|
|
local texture = GetSelectedStationeryTexture();
|
|
if ( texture ) then
|
|
SendStationeryBackgroundLeft:SetTexture(STATIONERY_PATH..texture.."1");
|
|
SendStationeryBackgroundRight:SetTexture(STATIONERY_PATH..texture.."2");
|
|
end
|
|
StationeryPopupFrame_Update();
|
|
end
|
|
|
|
function SendMailMoneyButton_OnClick()
|
|
local cursorMoney = GetCursorMoney();
|
|
if ( cursorMoney > 0 ) then
|
|
local money = MoneyInputFrame_GetCopper(SendMailMoney);
|
|
if ( money > 0 ) then
|
|
cursorMoney = cursorMoney + money;
|
|
end
|
|
MoneyInputFrame_SetCopper(SendMailMoney, cursorMoney);
|
|
DropCursorMoney();
|
|
end
|
|
end
|
|
|
|
function SendMailAttachmentButton_OnClick(self, button)
|
|
ClickSendMailItemButton(self:GetID(), button == "RightButton");
|
|
end
|
|
|
|
function SendMailAttachmentButton_OnDropAny()
|
|
ClickSendMailItemButton();
|
|
end
|
|
|
|
function SendMailAttachment_OnEnter(self)
|
|
local index = self:GetID();
|
|
GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
|
|
if ( GetSendMailItem(index) ) then
|
|
GameTooltip:SetSendMailItem(index);
|
|
else
|
|
GameTooltip:SetText(ATTACHMENT_TEXT, 1.0, 1.0, 1.0);
|
|
end
|
|
end
|