AuctioneerSuite/Auc-Advanced/Modules/Auc-Util-AutoMagic/ConfirmSellUI.lua
2026-04-13 17:48:13 -04:00

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 $")