You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

221 lines
7.6 KiB

-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster_Mailing --
-- http://www.curse.com/addons/wow/tradeskillmaster_mailing --
-- --
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
-- All Rights Reserved* - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
local TSM = select(2, ...)
local QuickSend = TSM:NewModule("QuickSend", "AceEvent-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Mailing") -- loads the localization table
local private = {itemLink=nil, quantity=0, target="", cod=0}
function QuickSend:CreateTab(parent)
local frame = CreateFrame("Frame", nil, parent)
frame:Hide()
frame:SetPoint("TOPLEFT", 5, -5)
frame:SetPoint("BOTTOMRIGHT", -5, 5)
frame:SetAllPoints()
TSMAPI.Design:SetFrameColor(frame)
local label = TSMAPI.GUI:CreateLabel(frame, "normal")
label:SetPoint("TOPLEFT", 5, -5)
label:SetPoint("TOPRIGHT", -5, -5)
label:SetHeight(50)
label:SetJustifyV("TOP")
label:SetJustifyH("LEFT")
label:SetText(L["This tab allows you to quickly send any quantity of an item to another character. You can also specify a COD to set on the mail (per item)."])
TSMAPI.GUI:CreateHorizontalLine(frame, -55)
local itemBoxLabel = TSMAPI.GUI:CreateLabel(frame, "small")
itemBoxLabel:SetPoint("TOPLEFT", 5, -65)
itemBoxLabel:SetHeight(20)
itemBoxLabel:SetJustifyV("CENTER")
itemBoxLabel:SetJustifyH("LEFT")
itemBoxLabel:SetText(L["Item (Drag Into Box):"])
local function OnItemDrag(self)
local cType, _, link = GetCursorInfo()
if cType == "item" then
self:SetText(link)
private.itemLink = link
ClearCursor()
private.btn:Update()
end
end
local itemBox = TSMAPI.GUI:CreateInputBox(frame)
itemBox:SetPoint("TOPLEFT", itemBoxLabel, "TOPRIGHT", 5, 0)
itemBox:SetPoint("TOPRIGHT", -95, -65)
itemBox:SetHeight(20)
itemBox:SetText(private.itemLink or "")
itemBox:SetScript("OnEditFocusGained", function(self) self:ClearFocus() end)
itemBox:SetScript("OnReceiveDrag", OnItemDrag)
itemBox:SetScript("OnMouseDown", OnItemDrag)
itemBox.tooltip = L["Drag (or place) the item that you want to send into this editbox."]
local itemClearBtn = TSMAPI.GUI:CreateButton(frame, 15)
itemClearBtn:SetPoint("TOPLEFT", itemBox, "TOPRIGHT", 5, 0)
itemClearBtn:SetPoint("TOPRIGHT", -5, -65)
itemClearBtn:SetHeight(20)
itemClearBtn:SetText(L["Clear"])
itemClearBtn:SetScript("OnClick", function()
private.itemLink = nil
itemBox:SetText("")
private.btn:Update()
end)
itemClearBtn.tooltip = L["Clears the item box."]
local targetBoxLabel = TSMAPI.GUI:CreateLabel(frame, "small")
targetBoxLabel:SetPoint("TOPLEFT", 5, -95)
targetBoxLabel:SetHeight(20)
targetBoxLabel:SetJustifyV("CENTER")
targetBoxLabel:SetJustifyH("LEFT")
targetBoxLabel:SetText(L["Target:"])
local targetBox = TSMAPI.GUI:CreateInputBox(frame)
targetBox:SetPoint("TOPLEFT", targetBoxLabel, "TOPRIGHT", 5, 0)
targetBox:SetWidth(100)
targetBox:SetHeight(20)
targetBox:SetText(private.target)
targetBox:SetScript("OnEnterPressed", function(self)
self:ClearFocus()
end)
targetBox:SetScript("OnEditFocusLost", function(self)
self:HighlightText(0, 0)
private.target = self:GetText():trim()
private.btn:Update()
end)
targetBox:SetScript("OnTabPressed", function(self)
self:ClearFocus()
frame.qtyBox:SetFocus()
frame.qtyBox:HighlightText()
end)
TSMAPI.GUI:SetAutoComplete(targetBox, AUTOCOMPLETE_LIST.MAIL)
targetBox.tooltip = L["Enter the name of the player you want to send this item to."].."\n\n"..TSM.SPELLING_WARNING
local qtyBoxLabel = TSMAPI.GUI:CreateLabel(frame, "small")
qtyBoxLabel:SetPoint("TOPLEFT", targetBox, "TOPRIGHT", 20, 0)
qtyBoxLabel:SetHeight(20)
qtyBoxLabel:SetJustifyV("CENTER")
qtyBoxLabel:SetJustifyH("LEFT")
qtyBoxLabel:SetText(L["Max Quantity:"])
local qtyBox = TSMAPI.GUI:CreateInputBox(frame)
qtyBox:SetPoint("TOPLEFT", qtyBoxLabel, "TOPRIGHT", 5, 0)
qtyBox:SetPoint("TOPRIGHT", -5, -95)
qtyBox:SetHeight(20)
qtyBox:SetNumeric(true)
qtyBox:SetNumber(private.quantity)
qtyBox:SetScript("OnEnterPressed", function(self)
self:ClearFocus()
end)
qtyBox:SetScript("OnEditFocusLost", function(self)
self:HighlightText(0, 0)
private.quantity = self:GetNumber()
private.btn:Update()
end)
qtyBox:SetScript("OnTabPressed", function(self)
self:ClearFocus()
frame.codBox:SetFocus()
frame.codBox:HighlightText()
end)
qtyBox.tooltip = L["This is the maximum number of the specified item to send when you click the button below. Setting this to 0 will send ALL items."]
frame.qtyBox = qtyBox
local codBoxLabel = TSMAPI.GUI:CreateLabel(frame, "small")
codBoxLabel:SetPoint("TOPLEFT", 5, -125)
codBoxLabel:SetHeight(20)
codBoxLabel:SetJustifyV("CENTER")
codBoxLabel:SetJustifyH("LEFT")
codBoxLabel:SetText(L["COD Amount (per Item):"])
local codBox = TSMAPI.GUI:CreateInputBox(frame)
codBox:SetPoint("TOPLEFT", codBoxLabel, "TOPRIGHT", 5, 0)
codBox:SetPoint("TOPRIGHT", -5, -125)
codBox:SetHeight(20)
codBox:SetText(TSMAPI:FormatTextMoney(private.cod))
codBox:SetScript("OnEnterPressed", function(self)
local copper = TSMAPI:UnformatTextMoney(self:GetText():trim())
if copper then
private.cod = copper
self:SetText(TSMAPI:FormatTextMoney(copper))
self:ClearFocus()
private.btn:Update()
else
self:SetFocus()
end
end)
codBox.tooltip = L["Enter the desired COD amount (per item) to send this item with. Setting this to '0c' will result in no COD being set."]
frame.codBox = codBox
local function OnClick()
local itemString = TSMAPI:GetItemString(private.itemLink)
local numHave = 0
for _, _, iString, quantity in TSMAPI:GetBagIterator() do
if iString == itemString then
numHave = numHave + quantity
end
end
local quantity
if private.quantity == 0 then
quantity = numHave
else
quantity = min(private.quantity, numHave)
end
TSM.AutoMail:SendItems({[itemString]=quantity}, private.target, private.SendCallback, private.cod > 0 and private.cod)
private.btn:SetText(L["Sending..."])
private.btn:Disable()
end
local btn = TSMAPI.GUI:CreateButton(frame, 15)
btn:SetPoint("TOPLEFT", 5, -155)
btn:SetPoint("TOPRIGHT", -5, -155)
btn:SetHeight(40)
btn:GetFontString():SetWidth(btn:GetWidth())
btn:GetFontString():SetHeight(btn:GetHeight())
btn:SetScript("OnClick", OnClick)
btn.tooltip = L["Click this button to send off the item to the specified character."]
btn.Update = function(self)
if not private.itemLink then
self:Disable()
self:SetText(L["No Item Specified"])
elseif private.target == "" then
self:Disable()
self:SetText(L["No Target Specified"])
else
self:Enable()
if private.cod > 0 then
if private.quantity == 0 then
self:SetText(format(L["Send all %s to %s - %s per Item COD"], private.itemLink, private.target, TSMAPI:FormatTextMoney(private.cod)))
else
self:SetText(format(L["Send %sx%d to %s - %s per Item COD"], private.itemLink, private.quantity, private.target, TSMAPI:FormatTextMoney(private.cod)))
end
else
if private.quantity == 0 then
self:SetText(format(L["Send all %s to %s - No COD"], private.itemLink, private.target))
else
self:SetText(format(L["Send %sx%d to %s - No COD"], private.itemLink, private.quantity, private.target))
end
end
end
end
btn:Update()
private.btn = btn
return frame
end
function private:SendCallback()
private.btn:Update()
end