Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
- self.maxTabWidth = self:GetWidth() / 3;
- 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);
- MoneyFrame_SetMaxDisplayWidth(SendMailMoneyFrame, 160);
- if IsTrialAccount() then
- MailFrameTab2:Hide();
- self.trialError:Show();
- end
- 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
- OpenAllBags(self);
- SendMailFrame_Update();
- MailFrameTab_OnClick(nil, 1);
- CheckInbox();
- DoEmote("READ", nil, true);
- 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
- CancelEmote();
- HideUIPanel(MailFrame);
- CloseAllBags(self);
- 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();
- local 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
- ButtonFrameTemplate_HideButtonBar(MailFrame)
- MailFrameInset:SetPoint("TOPLEFT", 4, -58);
- InboxFrame:Show();
- SendMailFrame:Hide();
- SetSendMailShowing(false);
- else
- -- Sendmail tab clicked
- ButtonFrameTemplate_ShowButtonBar(MailFrame)
- MailFrameInset:SetPoint("TOPLEFT", 4, -80);
- InboxFrame:Hide();
- SendMailFrame:Show();
- 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);
- OpenMailFrameInset:SetPoint("TOPLEFT", 4, -80);
- 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
- local hasCooldown, speciesID, level, breedQuality, maxHealth, power, speed, name = GameTooltip:SetInboxItem(self.index);
- if(speciesID and speciesID > 0) then
- BattlePetToolTip_Show(speciesID, level, breedQuality, maxHealth, power, speed, name);
- end
- 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, true);
- 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, count = GetInboxInvoiceInfo(InboxFrame.openMailID);
- if ( playerName ) then
- -- Setup based on whether player is the buyer or the seller
- local buyMode;
- if ( count and count > 1 ) then
- itemName = format(AUCTION_MAIL_ITEM_STACK, itemName, count);
- end
- 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("");
- -- 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 buy line
- OpenMailArithmeticLine:SetPoint("TOP", "OpenMailInvoiceHouseCut", "BOTTOMRIGHT", -114, -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("");
- -- 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 = 10 + 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 = 28 + gapy2;
- local tabx = (iconx + gapx1) + 6; --this magic number changes the button spacing
- 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", 2, 39 + 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");
- local hasCooldown, speciesID, level, breedQuality, maxHealth, power, speed, name = GameTooltip:SetInboxItem(InboxFrame.openMailID, index);
- if(speciesID and speciesID > 0) then
- BattlePetToolTip_Show(speciesID, level, breedQuality, maxHealth, power, speed, name);
- end
- 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 = 8 + 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 = 170 + gapy2 + icony;
- local tabx = (iconx + gapx1) - 2; --this magic number changes the attachment spacing
- local taby = (icony + gapy1);
- local scrollHeight = 249 - areay;
- -- Resize the scroll frame
- SendMailScrollFrame:SetHeight(scrollHeight);
- SendMailScrollChildFrame:SetHeight(scrollHeight);
- SendMailHorizontalBarLeft2:SetPoint("TOPLEFT", "SendMailFrame", "BOTTOMLEFT", 2, 184 + 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
- local hasCooldown, speciesID, level, breedQuality, maxHealth, power, speed, name = GameTooltip:SetSendMailItem(index);
- if(speciesID and speciesID > 0) then
- BattlePetToolTip_Show(speciesID, level, breedQuality, maxHealth, power, speed, name);
- end
- else
- GameTooltip:SetText(ATTACHMENT_TEXT, 1.0, 1.0, 1.0);
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment