317 lines
13 KiB
Lua
317 lines
13 KiB
Lua
--[[
|
|
Auctioneer - AutoMagic Utility module
|
|
Version: 5.9.4961 (WhackyWallaby)
|
|
Revision: $Id: ConfirmSellUI.lua 4901 2010-10-05 16:44:24Z Nechckn $
|
|
URL: http://auctioneeraddon.com/
|
|
|
|
AutoMagic is an Auctioneer module which automates mundane tasks for you.
|
|
|
|
License:
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program(see GPL.txt); if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
Note:
|
|
This AddOn's source code is specifically designed to work with
|
|
World of Warcraft's interpreted AddOn system.
|
|
You have an implicit license to use this AddOn with these facilities
|
|
since that is its designated purpose as per:
|
|
http://www.fsf.org/licensing/licenses/gpl-faq.html#InterpreterIncompat
|
|
--]]
|
|
if not AucAdvanced then return end
|
|
|
|
local lib = AucAdvanced.Modules.Util.AutoMagic
|
|
local print,decode,_,_,replicate,empty,get,set,default,debugPrint,fill = AucAdvanced.GetModuleLocals()
|
|
local GetPrice = function() return 0,0 end --fake getPrice when Appraiser is not available
|
|
if AucAdvanced.Modules.Util.Appraiser then
|
|
GetPrice = AucAdvanced.Modules.Util.Appraiser.GetPrice
|
|
end
|
|
|
|
local _, selected, selecteditem, selectedvendor, selectedappraiser, selectedwhy, selectedignored
|
|
local selecteddata = {}
|
|
|
|
|
|
function lib.ASCPrompt()
|
|
if next(lib.vendorlist) then
|
|
lib.confirmsellui:Show()
|
|
end
|
|
lib.ASCRefreshSheet() --Always refresh the sheet or it can appear we have items left in GUI after the autosell function
|
|
end
|
|
|
|
---------------------------------------------------------
|
|
-- Button Functions
|
|
---------------------------------------------------------
|
|
-- lib.vendorlist[key] = { link, sig, count, bag, slot, reason }
|
|
function lib.ASCConfirmContinue()
|
|
lib.confirmsellui:Hide() --hide gui before selling so our bag update events are not registered
|
|
local count = 0
|
|
for key, itemdata in pairs(lib.vendorlist) do
|
|
count = count +1
|
|
--if stop after 12 then recheck whats left to vendor and re-prompt for a new round.
|
|
if get("util.automagic.autostopafter12") and count > 12 then --stop after 12 sells so use can buy back a accidental sale
|
|
lib.vendorAction()
|
|
return
|
|
end
|
|
|
|
local _, iID = decode( itemdata[1] ) --check if item is to be ignored
|
|
if not get("util.automagic.vidignored"..iID) then --will be nil if not on ignore list
|
|
|
|
if (get("util.automagic.chatspam")) then
|
|
print("AutoMagic is selling:", itemdata[1], "reason:", itemdata[6])
|
|
end
|
|
|
|
UseContainerItem(itemdata[4], itemdata[5])
|
|
end
|
|
lib.vendorlist[key] = nil
|
|
end
|
|
end
|
|
|
|
function lib.ASCRemoveItem()
|
|
if selecteditem then
|
|
for key, itemdata in pairs(lib.vendorlist) do
|
|
if selecteditem == itemdata[1] then
|
|
lib.vendorlist[key] = nil
|
|
break
|
|
end
|
|
end
|
|
end
|
|
lib.ASCRefreshSheet()
|
|
end
|
|
|
|
function lib.ASCIgnoreItem()
|
|
if selecteditem then
|
|
local _, iID = decode(selecteditem)
|
|
set("util.automagic.vidignored"..iID, true)
|
|
end
|
|
|
|
lib.ASCRefreshSheet()
|
|
end
|
|
|
|
function lib.ASCUnIgnoreItem()
|
|
if selecteditem then
|
|
local _, iID = decode(selecteditem)
|
|
set("util.automagic.vidignored"..iID, nil)
|
|
end
|
|
|
|
lib.ASCRefreshSheet()
|
|
end
|
|
|
|
---------------------------------------------------------
|
|
-- ScrollSheet Functions
|
|
---------------------------------------------------------
|
|
-- lib.vendorlist[key] = { link, sig, count, bag, slot, reason }
|
|
-- ASCtempstorage[index] = { link, vendorPrice, AppraiserPrice, reason, vendorIgnoreDisplay }
|
|
function lib.ASCRefreshSheet()
|
|
local ASCtempstorage, style = {}, {}
|
|
for k, v in pairs(lib.vendorlist) do
|
|
local itemLink, itemSig, count, bag, slot, reason = unpack(v)
|
|
local _, iID = decode(itemLink)
|
|
local vendor = GetSellValue and GetSellValue(iID) or 0
|
|
local abuy, abid = GetPrice(itemLink, nil, true)
|
|
local vendorignored = "YES"
|
|
local styleColor = {0,1,0}
|
|
if get("util.automagic.vidignored"..iID) == true then
|
|
vendorignored = "NO"
|
|
styleColor = {1,0,0}
|
|
end
|
|
table.insert(ASCtempstorage,{
|
|
itemLink, --link form for mouseover tooltips to work
|
|
vendor,
|
|
tonumber(abuy) or tonumber(abid),
|
|
reason,
|
|
vendorignored,
|
|
})
|
|
style[#ASCtempstorage] = {}
|
|
style[#ASCtempstorage][5] = {["textColor"] = styleColor}
|
|
end
|
|
|
|
lib.confirmsellui.resultlist.sheet:SetData(ASCtempstorage, style) --Set the GUI scrollsheet
|
|
end
|
|
|
|
function lib.ASCOnEnter(button, row, index)
|
|
if lib.confirmsellui.resultlist.sheet.rows[row][index]:IsShown()then --Hide tooltip for hidden cells
|
|
local link
|
|
link = lib.confirmsellui.resultlist.sheet.rows[row][index]:GetText()
|
|
if link and link:find("\124Hitem:%d") then
|
|
GameTooltip:SetOwner(button, "ANCHOR_RIGHT")
|
|
-- ccox - this was using count (undefined variable), but all similar code in Auc-Util-AutoMagic.lua uses a count of 1
|
|
AucAdvanced.ShowItemLink(GameTooltip, link, 1)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
function lib.ASCOnClick()
|
|
--print("CLICK")
|
|
end
|
|
|
|
function lib.ASCSelect()
|
|
if lib.confirmsellui.resultlist.sheet.selected then
|
|
selected = lib.confirmsellui.resultlist.sheet.selected
|
|
selecteddata = lib.confirmsellui.resultlist.sheet:GetSelection()
|
|
selecteditem = selecteddata[1]
|
|
selectedvendor = selecteddata[2]
|
|
selectedappraiser = selecteddata[3]
|
|
selectedwhy = selecteddata[4]
|
|
selectedignored = selecteddata[5]
|
|
|
|
lib.confirmsellui.ignoreButton:Enable()
|
|
lib.confirmsellui.removeButton:Enable()
|
|
lib.confirmsellui.unignoreButton:Enable()
|
|
else
|
|
selected, selecteditem, selectedvendor, selectedappraiser, selectedwhy, selectedignored = nil, nil, nil, nil, nil, nil
|
|
lib.confirmsellui.ignoreButton:Disable()
|
|
lib.confirmsellui.removeButton:Disable()
|
|
lib.confirmsellui.unignoreButton:Disable()
|
|
end
|
|
end
|
|
---------------------------------------------------------
|
|
-- Confirm AutoSell Interface
|
|
---------------------------------------------------------
|
|
|
|
local SelectBox = LibStub:GetLibrary("SelectBox")
|
|
local ScrollSheet = LibStub:GetLibrary("ScrollSheet")
|
|
|
|
lib.confirmsellui = CreateFrame("Frame", "confirmsellui", UIParent); lib.confirmsellui:Hide()
|
|
function lib.makeconfirmsellui()
|
|
lib.confirmsellui:ClearAllPoints()
|
|
lib.confirmsellui:SetPoint("CENTER", UIParent, "CENTER", 1,1)
|
|
lib.confirmsellui:SetFrameStrata("DIALOG")
|
|
lib.confirmsellui:SetHeight(220)
|
|
lib.confirmsellui:SetWidth(650)
|
|
lib.confirmsellui:SetBackdrop({
|
|
bgFile = "Interface/Tooltips/UI-Tooltip-Background",
|
|
edgeFile = "Interface/Tooltips/UI-Tooltip-Border",
|
|
tile = true, tileSize = 32, edgeSize = 32,
|
|
insets = { left = 9, right = 9, top = 9, bottom = 9 }
|
|
})
|
|
lib.confirmsellui:SetBackdropColor(0,0,0, 0.8)
|
|
lib.confirmsellui:EnableMouse(true)
|
|
lib.confirmsellui:SetMovable(true)
|
|
lib.confirmsellui:SetClampedToScreen(true)
|
|
--will add a item to sell list if its droped onto the edges on the grey item sell window
|
|
lib.confirmsellui:SetScript("OnReceiveDrag", function()
|
|
local objtype, _, link = GetCursorInfo()
|
|
ClearCursor()
|
|
if objtype == "item" then
|
|
lib.setWorkingItem(link)
|
|
autosellframe.additemtolist()
|
|
lib.vendorAction()
|
|
end
|
|
end)
|
|
|
|
-- Make highlightable drag bar
|
|
lib.confirmsellui.Drag = CreateFrame("Button", "", lib.confirmsellui)
|
|
lib.confirmsellui.Drag:SetPoint("TOPLEFT", lib.confirmsellui, "TOPLEFT", 10,-5)
|
|
lib.confirmsellui.Drag:SetPoint("TOPRIGHT", lib.confirmsellui, "TOPRIGHT", -10,-5)
|
|
lib.confirmsellui.Drag:SetHeight(6)
|
|
lib.confirmsellui.Drag:SetHighlightTexture("Interface\\FriendsFrame\\UI-FriendsFrame-HighlightBar")
|
|
lib.confirmsellui.Drag:SetScript("OnMouseDown", function() lib.confirmsellui:StartMoving() end)
|
|
lib.confirmsellui.Drag:SetScript("OnMouseUp", function() lib.confirmsellui:StopMovingOrSizing() end)
|
|
lib.confirmsellui.Drag:SetScript("OnEnter", function() lib.buttonTooltips( lib.confirmsellui.Drag, "Click and drag to reposition window") end)
|
|
lib.confirmsellui.Drag:SetScript("OnLeave", function() GameTooltip:Hide() end)
|
|
|
|
-- Text Header
|
|
lib.confirmsellheader = lib.confirmsellui:CreateFontString(one, "OVERLAY", "NumberFontNormalYellow")
|
|
lib.confirmsellheader:SetText("AutoMagic: Confirm Pending Sales")
|
|
lib.confirmsellheader:SetJustifyH("CENTER")
|
|
lib.confirmsellheader:SetWidth(200)
|
|
lib.confirmsellheader:SetHeight(10)
|
|
lib.confirmsellheader:SetPoint("TOPLEFT", lib.confirmsellui, "TOPLEFT", 0, -10)
|
|
lib.confirmsellheader:SetPoint("TOPRIGHT", lib.confirmsellui, "TOPRIGHT", 0, 0)
|
|
lib.confirmsellui.confirmsellheader = lib.confirmsellheader
|
|
|
|
lib.confirmsellui.help = lib.confirmsellui:CreateFontString(nil, "OVERLAY", "NumberFontNormalYellow")
|
|
lib.confirmsellui.help:SetText("Drop items here to add to the sell list")
|
|
lib.confirmsellui.help:SetJustifyH("CENTER")
|
|
lib.confirmsellui.help:SetWidth(100)
|
|
lib.confirmsellui.help:SetPoint("LEFT", lib.confirmsellui, "LEFT", 10, 0)
|
|
|
|
-- [name of frame]:SetPoint("[relative to point on my frame]","[frame we want to be relative to]","[point on relative frame]",-left/+right, -down/+up)
|
|
|
|
--Create the autosell list results frame
|
|
lib.confirmsellui.resultlist = CreateFrame("Frame", nil, lib.confirmsellui)
|
|
lib.confirmsellui.resultlist:SetBackdrop({
|
|
bgFile = "Interface/Tooltips/UI-Tooltip-Background",
|
|
edgeFile = "Interface/Tooltips/UI-Tooltip-Border",
|
|
tile = true, tileSize = 32, edgeSize = 16,
|
|
insets = { left = 5, right = 5, top = 5, bottom = 5 }
|
|
})
|
|
|
|
lib.confirmsellui.resultlist:SetBackdropColor(0, 0, 0.0, 0.5)
|
|
lib.confirmsellui.resultlist:SetPoint("TOPLEFT", lib.confirmsellui, "TOPLEFT", 120, -25)
|
|
lib.confirmsellui.resultlist:SetPoint("TOPRIGHT", lib.confirmsellui, "TOPRIGHT", -10, -10)
|
|
lib.confirmsellui.resultlist:SetPoint("BOTTOM", lib.confirmsellui, "BOTTOM", 0, 30)
|
|
|
|
lib.confirmsellui.resultlist.sheet = ScrollSheet:Create(lib.confirmsellui.resultlist, {
|
|
{ ('Item:'), "TOOLTIP", 170, { DESCENDING=false, DEFAULT=true } },
|
|
{ "Vendor", "COIN", 70 },
|
|
{ "Appraiser", "COIN", 70 },
|
|
{ "Selling for", "TEXT", 70 },
|
|
{ "Will be Sold", "TEXT", 100},
|
|
})
|
|
lib.confirmsellui.resultlist.sheet:EnableVerticalScrollReset(false)
|
|
lib.confirmsellui.resultlist.sheet:EnableSelect(true)
|
|
|
|
--After we have finished creating the scrollsheet and all saved settings have been applied set our event processor
|
|
function lib.confirmsellui.resultlist.sheet.Processor(callback, self, button, column, row, order, curDir, ...)
|
|
if (callback == "OnEnterCell") then
|
|
lib.ASCOnEnter(button, row, column)
|
|
elseif (callback == "OnLeaveCell") then
|
|
GameTooltip:Hide()
|
|
elseif (callback == "OnClickCell") then
|
|
lib.ASCOnClick(button, row, column)
|
|
elseif (callback == "OnMouseDownCell") then
|
|
lib.ASCSelect()
|
|
end
|
|
end
|
|
--use our custom sort method not scrollsheets
|
|
lib.confirmsellui.resultlist.sheet.CustomSort = lib.CustomSort
|
|
|
|
-- Continue with sales button
|
|
lib.confirmsellui.continueButton = CreateFrame("Button", nil, lib.confirmsellui, "OptionsButtonTemplate")
|
|
lib.confirmsellui.continueButton:SetPoint("BOTTOMRIGHT", lib.confirmsellui, "BOTTOMRIGHT", -18, 10)
|
|
lib.confirmsellui.continueButton:SetText(("Continue"))
|
|
lib.confirmsellui.continueButton:SetScript("OnClick", lib.ASCConfirmContinue)
|
|
lib.confirmsellui.continueButton:SetScript("OnEnter", function() lib.buttonTooltips( lib.confirmsellui.continueButton, "Click to sell all listed items to vendor.") end)
|
|
lib.confirmsellui.continueButton:SetScript("OnLeave", function() GameTooltip:Hide() end)
|
|
|
|
--Remove item from sales button
|
|
lib.confirmsellui.removeButton = CreateFrame("Button", nil, lib.confirmsellui, "OptionsButtonTemplate")
|
|
lib.confirmsellui.removeButton:SetPoint("BOTTOMRIGHT", lib.confirmsellui.continueButton, "BOTTOMLEFT", -18, 0)
|
|
lib.confirmsellui.removeButton:SetText(("Remove"))
|
|
lib.confirmsellui.removeButton:SetScript("OnClick", lib.ASCRemoveItem)
|
|
lib.confirmsellui.removeButton:Disable()
|
|
|
|
-- Ignore item from future sales
|
|
lib.confirmsellui.ignoreButton = CreateFrame("Button", nil, lib.confirmsellui, "OptionsButtonTemplate")
|
|
lib.confirmsellui.ignoreButton:SetPoint("BOTTOMRIGHT", lib.confirmsellui.removeButton, "BOTTOMLEFT", -18, 0)
|
|
lib.confirmsellui.ignoreButton:SetText(("Ignore"))
|
|
lib.confirmsellui.ignoreButton:SetScript("OnClick", lib.ASCIgnoreItem)
|
|
lib.confirmsellui.ignoreButton:Disable()
|
|
|
|
-- Un-Ignore item from future sales
|
|
lib.confirmsellui.unignoreButton = CreateFrame("Button", nil, lib.confirmsellui, "OptionsButtonTemplate")
|
|
lib.confirmsellui.unignoreButton:SetPoint("BOTTOMRIGHT", lib.confirmsellui.ignoreButton, "BOTTOMLEFT", -18, 0)
|
|
lib.confirmsellui.unignoreButton:SetText(("Un-Ignore"))
|
|
lib.confirmsellui.unignoreButton:SetScript("OnClick", lib.ASCUnIgnoreItem)
|
|
lib.confirmsellui.unignoreButton:Disable()
|
|
|
|
--Hide sales window
|
|
lib.confirmsellui.closeButton = CreateFrame("Button", nil, lib.confirmsellui, "UIPanelCloseButton")
|
|
lib.confirmsellui.closeButton:SetScript("OnClick", function() lib.confirmsellui:Hide() end)
|
|
lib.confirmsellui.closeButton:SetPoint("TOPRIGHT", lib.confirmsellui, "TOPRIGHT", 0,0)
|
|
end
|
|
|
|
lib.makeconfirmsellui()
|
|
AucAdvanced.RegisterRevision("$URL: http://svn.norganna.org/auctioneer/branches/5.9/Auc-Util-AutoMagic/ConfirmSellUI.lua $", "$Rev: 4901 $")
|