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
221 lines
7.6 KiB
|
4 years ago
|
-- ------------------------------------------------------------------------------ --
|
||
|
|
-- 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
|