Asa@28: local addonName, addonTable = ...; Asa@28: local ItemAuditor = _G[addonName] Asa@28: Asa@28: local AceGUI = LibStub("AceGUI-3.0") Asa@28: local ScrollingTable = LibStub("ScrollingTable") Asa@28: Asa@35: local priceTypeEach = 1 Asa@35: local priceTypeTotal = 2 Asa@35: Asa@35: local promptFrame = false Asa@35: Asa@35: -- Copied from QuickAuctions Asa@35: local function validateMoney(value) Asa@35: local gold = tonumber(string.match(value, "([0-9]+)|c([0-9a-fA-F]+)g|r") or string.match(value, "([0-9]+)g")) Asa@35: local silver = tonumber(string.match(value, "([0-9]+)|c([0-9a-fA-F]+)s|r") or string.match(value, "([0-9]+)s")) Asa@35: local copper = tonumber(string.match(value, "([0-9]+)|c([0-9a-fA-F]+)c|r") or string.match(value, "([0-9]+)c")) Asa@35: Asa@35: if( not gold and not silver and not copper ) then Asa@35: return false; Asa@35: -- return L["Invalid monney format entered, should be \"#g#s#c\", \"25g4s50c\" is 25 gold, 4 silver, 50 copper."] Asa@35: end Asa@35: Asa@35: return true Asa@35: end Asa@35: Asa@35: -- Copied from QuickAuctions Asa@35: local function parseMoney(value) Asa@35: local gold = tonumber(string.match(value, "([0-9]+)|c([0-9a-fA-F]+)g|r") or string.match(value, "([0-9]+)g")) Asa@35: local silver = tonumber(string.match(value, "([0-9]+)|c([0-9a-fA-F]+)s|r") or string.match(value, "([0-9]+)s")) Asa@35: local copper = tonumber(string.match(value, "([0-9]+)|c([0-9a-fA-F]+)c|r") or string.match(value, "([0-9]+)c")) Asa@35: Asa@35: -- Convert it all into copper Asa@35: return (copper or 0) + ((gold or 0) * COPPER_PER_GOLD) + ((silver or 0) * COPPER_PER_SILVER) Asa@35: Asa@35: end Asa@35: Asa@35: local function SaveNewValue(link, type, text) Asa@35: if not validateMoney(text) then Asa@35: error("Invalid value") Asa@35: end Asa@35: local investedTotal, investedPerItem, numOwned = ItemAuditor:GetItemCost(link) Asa@35: local newValue=parseMoney(text) Asa@35: Asa@35: if type == priceTypeEach then Asa@35: newValue = newValue * numOwned Asa@35: end Asa@35: Asa@35: ItemAuditor:SaveValue(link, newValue-investedTotal, 0) Asa@35: -- ItemAuditor:SaveValue(link, newValue, 0) Asa@35: Asa@35: promptFrame:Hide() Asa@35: end Asa@35: Asa@35: Asa@35: local function PromptForNewPrice(link, type) Asa@35: local investedTotal, investedPerItem, count = ItemAuditor:GetItemCost(link) Asa@35: local itemName, displayLink = GetItemInfo(link) Asa@35: local priceDesc = " Invested Each:" Asa@35: local price = investedPerItem Asa@35: Asa@35: if type == priceTypeTotal then Asa@35: priceDesc = " Invested Total:" Asa@35: price = investedTotal Asa@35: end Asa@35: Asa@35: if not promptFrame then Asa@35: promptFrame = AceGUI:Create("Frame") Asa@38: ItemAuditor:RegisterFrame(promptFrame) Asa@35: Asa@35: local window = promptFrame.frame; Asa@35: local width = 345 Asa@35: local height = 115 Asa@35: window:SetWidth(width ) Asa@35: window:SetHeight(height ) Asa@35: window:SetMinResize(width, height) Asa@35: window:SetMaxResize(width, height) Asa@35: Asa@35: promptFrame:SetTitle("ItemAuditor") Asa@35: promptFrame:SetStatusText("Status Here") Asa@35: promptFrame:SetCallback("OnClose", function(widget) AceGUI:Release(widget); promptFrame = false end) Asa@35: promptFrame:SetLayout("Flow") Asa@35: Asa@35: promptFrame.editbox = AceGUI:Create("EditBox") Asa@35: promptFrame.editbox:SetWidth(300) Asa@35: promptFrame:AddChild(promptFrame.editbox) Asa@35: end Asa@35: promptFrame.editbox:SetCallback("OnEnterPressed", function(widget, event, text) SaveNewValue(link, type, text) end) Asa@35: promptFrame:SetStatusText("Current Price: "..ItemAuditor:FormatMoney(price)) Asa@35: promptFrame.editbox:SetLabel(displayLink..priceDesc) Asa@35: promptFrame.editbox:SetText(ItemAuditor:FormatMoney(price, "", true)) Asa@35: Asa@35: promptFrame:Show() Asa@35: editBox = promptFrame.editbox Asa@35: end Asa@35: Asa@35: local function displayMoney(rowFrame, cellFrame, data, cols, row, realrow, column, fShow, table, ...) Asa@35: if fShow == true then Asa@35: local money = data[realrow][column] Asa@35: if money == nil then Asa@35: cellFrame.text:SetText("None") Asa@35: else Asa@35: cellFrame.text:SetText(ItemAuditor:FormatMoney(data[realrow][column])) Asa@35: end Asa@35: end Asa@35: end Asa@35: Asa@28: local investedCols = { Asa@28: { name= "Item", width = 200, Asa@28: ['DoCellUpdate'] = function(rowFrame, cellFrame, data, cols, row, realrow, column, fShow, table, ...) Asa@28: if fShow == true then Asa@28: local _, link= strsplit("|", data[realrow][column], 2) Asa@28: cellFrame.text:SetText(link) Asa@28: end Asa@28: end, Asa@28: }, Asa@28: { name= "Invested Total", width = 100, align = "RIGHT", Asa@35: ['DoCellUpdate'] = displayMoney, Asa@28: }, Asa@35: { name= "Invested Each", width = 100, align = "RIGHT", Asa@35: ['DoCellUpdate'] = displayMoney, Asa@28: }, Asa@35: { name= "# Owned", width = 50, align = "RIGHT", defaultsort = "asc", }, Asa@28: } Asa@28: Asa@28: local investedTable = false Asa@28: local function ShowInvested(container) Asa@28: if investedTable == false then Asa@28: local window = container.frame Asa@28: investedTable = ScrollingTable:CreateST(investedCols, 23, nil, nil, window) Asa@28: investedTable.frame:SetPoint("BOTTOMLEFT",window, 10,10) Asa@28: investedTable.frame:SetPoint("TOP", window, 0, -60) Asa@28: investedTable.frame:SetPoint("RIGHT", window, -10,0) Asa@28: investedTable:RegisterEvents({ Asa@28: ["OnEnter"] = function (rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...) Asa@28: if realrow then Asa@28: local _, link= strsplit("|", data[realrow][1], 2) Asa@28: Asa@28: GameTooltip:SetOwner(rowFrame, "ANCHOR_CURSOR") Asa@28: GameTooltip:SetHyperlink(link) Asa@28: GameTooltip:Show() Asa@28: end Asa@28: end, Asa@28: ["OnLeave"] = function (rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...) Asa@28: GameTooltip:Hide() Asa@28: end, Asa@28: ["OnClick"] = function (rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...) Asa@35: if realrow ~= nil and (column == 2 or column == 3) then Asa@35: -- column.text = row:CreateFontString(col:GetName().."text", "OVERLAY", "GameFontHighlightSmall"); Asa@35: local _, link= strsplit("|", data[realrow][1], 2) Asa@35: Asa@35: local type=priceTypeEach Asa@35: if column == 2 then Asa@35: type = priceTypeTotal Asa@35: end Asa@35: Asa@35: PromptForNewPrice(link, type) Asa@28: end Asa@28: end, Asa@28: }); Asa@28: end Asa@28: investedTable:Show() Asa@28: Asa@28: local width = 80 Asa@28: for i, data in pairs(investedCols) do Asa@28: width = width + data.width Asa@28: end Asa@28: if container.parent then Asa@28: container.parent:SetWidth(width); Asa@28: end Asa@28: Asa@28: Asa@28: UpdateInvestedData() Asa@28: end Asa@28: Asa@28: Asa@28: local function switchTab(container, event, group) Asa@28: container:ReleaseChildren() Asa@28: Asa@28: if investedTab then investedTab:Hide() end Asa@28: Asa@28: if group == "tab_invested" then Asa@28: ShowInvested(container) Asa@28: end Asa@28: end Asa@28: Asa@28: Asa@28: Asa@28: displayFrame = false Asa@28: local function CreateFrames() Asa@28: if not displayFrame then Asa@28: -- Create the frame container Asa@28: displayFrame = AceGUI:Create("Frame") Asa@38: ItemAuditor:RegisterFrame(displayFrame) Asa@28: local window = displayFrame.frame; Asa@28: displayFrame:SetTitle("ItemAuditor") Asa@28: displayFrame:SetStatusText("") Asa@28: Asa@28: displayFrame:SetLayout("Fill") Asa@28: Asa@28: window:SetHeight(500); Asa@28: Asa@28: local width = 80 Asa@28: for i, data in pairs(investedCols) do Asa@28: width = width + data.width Asa@28: end Asa@28: window:SetWidth(width); Asa@28: Asa@28: local tab = AceGUI:Create("TabGroup") Asa@28: tab:SetLayout("Flow") Asa@28: tab:SetTabs({{text="Invested", value="tab_invested"}}) Asa@28: tab:SetCallback("OnGroupSelected", switchTab) Asa@28: tab:SelectTab("tab_invested") Asa@28: Asa@28: displayFrame:AddChild(tab) Asa@28: end Asa@28: displayFrame:Show() Asa@28: end Asa@28: Asa@28: Asa@28: Asa@28: Asa@28: Asa@28: function UpdateInvestedData() Asa@28: if investedTable then Asa@28: tableData = {} --reset Asa@28: local totalInvested = 0 Asa@28: Asa@28: local i = 1 Asa@28: local data Asa@35: local items = ItemAuditor.db.factionrealm.items Asa@35: local includedItems = {} Asa@35: for safeLink in pairs(items) do Asa@35: local investedTotal, investedPerItem, count = ItemAuditor:GetItemCost(safeLink) Asa@35: local itemName, link = GetItemInfo(safeLink) Asa@35: if investedTotal > 0 and link ~= nil then Asa@28: tableData[i] = { Asa@28: itemName.."|"..link, Asa@28: investedTotal, Asa@28: investedPerItem, Asa@28: count, Asa@28: } Asa@28: Asa@28: totalInvested = totalInvested + investedTotal Asa@28: Asa@28: i = i + 1 Asa@35: includedItems[safeLink] = true Asa@35: end Asa@35: end Asa@35: Asa@35: local inventory = ItemAuditor:GetCurrentInventory() Asa@35: Asa@35: for link, count in pairs(inventory.items) do Asa@35: if includedItems[link] == nil then Asa@35: local count = Altoholic:GetItemCount(ItemAuditor:GetIDFromLink(link)) Asa@35: local itemName, link = GetItemInfo(link) Asa@35: tableData[i] = { Asa@35: itemName.."|"..link, Asa@35: 0, Asa@35: 0, Asa@35: count, Asa@35: } Asa@35: Asa@35: -- totalInvested = totalInvested + investedTotal Asa@35: Asa@35: i = i + 1 Asa@28: end Asa@28: end Asa@28: Asa@28: if investedTable.frame:IsShown() then Asa@28: displayFrame:SetStatusText("Total Invested: "..ItemAuditor:FormatMoney(totalInvested)) Asa@28: end Asa@28: Asa@28: investedTable:SetData(tableData, true) Asa@28: end Asa@28: end Asa@28: Asa@28: function ItemAuditor:CreateFrames() Asa@28: CreateFrames() Asa@28: end Asa@28: