annotate Modules/DisplayInvested.lua @ 74:71de6e86a1a4 release 2010-07-29

Fixed a bug where tradeskill that don't produce items, like Inscription Research, cause IA to crash. Added some API enhancements. Added ArkInventory as an optional dependency so it will be loaded before IA.
author Asa Ayers <Asa.Ayers@Gmail.com>
date Thu, 29 Jul 2010 22:33:50 -0700
parents b6c30a5156f9
children e9f7bc9199ca
rev   line source
Asa@63 1 local ItemAuditor = select(2, ...)
Asa@63 2 local DisplayInvested = ItemAuditor:NewModule("DisplayInvested")
Asa@28 3
Asa@64 4
Asa@28 5 local AceGUI = LibStub("AceGUI-3.0")
Asa@28 6 local ScrollingTable = LibStub("ScrollingTable")
Asa@28 7
Asa@35 8 local priceTypeEach = 1
Asa@35 9 local priceTypeTotal = 2
Asa@35 10
Asa@35 11 local promptFrame = false
Asa@35 12
Asa@58 13 local validateMoney = ItemAuditor.validateMoney
Asa@59 14 local parseMoney = ItemAuditor.parseMoney
Asa@35 15
Asa@35 16
Asa@43 17 StaticPopupDialogs["ItemAuditor_NewPrice"] = {
Asa@43 18 text = "New price %s %s",
Asa@43 19 button1 = SAVE,
Asa@43 20 button2 = CANCEL,
Asa@43 21 hasEditBox = 1,
Asa@43 22 showAlert = 1,
Asa@43 23 OnAccept = function()
Asa@43 24 skipCODTracking = true
Asa@43 25 end,
Asa@43 26 EditBoxOnEnterPressed = function()
Asa@43 27 if ( getglobal(this:GetParent():GetName().."Button1"):IsEnabled() == 1 ) then
Asa@43 28 getglobal(this:GetParent():GetName().."Button1"):Click()
Asa@43 29 end
Asa@43 30 end,
Asa@43 31 EditBoxOnTextChanged = function ()
Asa@43 32 local parentName = this:GetParent():GetName()
Asa@43 33 local editBox = getglobal( parentName.."EditBox");
Asa@43 34 local value = editBox:GetText()
Asa@43 35 if validateMoney(value) then
Asa@43 36 getglobal(parentName.."Button1"):Enable();
Asa@43 37 else
Asa@43 38 getglobal(parentName.."Button1"):Disable();
Asa@43 39 end
Asa@43 40 end,
Asa@43 41 EditBoxOnEscapePressed = function()
Asa@43 42 this:GetParent():Hide();
Asa@43 43 ClearCursor();
Asa@43 44 end,
Asa@43 45 timeout = 0,
Asa@43 46 hideOnEscape = 1,
Asa@43 47 exclusive = true,
Asa@43 48 }
Asa@35 49
Asa@35 50 local function PromptForNewPrice(link, type)
Asa@35 51 local investedTotal, investedPerItem, count = ItemAuditor:GetItemCost(link)
Asa@43 52
Asa@43 53 local typeText = "Invested Each"
Asa@35 54 local price = investedPerItem
Asa@43 55 if type == priceTypeTotal then
Asa@43 56 typeText = "Invested Total"
Asa@43 57 price = investedTotal
Asa@43 58
Asa@43 59 end
Asa@35 60
Asa@43 61 StaticPopupDialogs["ItemAuditor_NewPrice"].text = format("Update %s: %s|nThe current value is %s", typeText, link, ItemAuditor:FormatMoney(price))
Asa@43 62
Asa@43 63 StaticPopupDialogs["ItemAuditor_NewPrice"].OnShow = function (self, data)
Asa@43 64 self.editBox:SetText(ItemAuditor:FormatMoney(price, '', true))
Asa@35 65 end
Asa@43 66
Asa@43 67 StaticPopupDialogs["ItemAuditor_NewPrice"].OnAccept = function()
Asa@43 68 local name = this:GetParent():GetName().."EditBox"
Asa@43 69 local button = getglobal(name)
Asa@43 70 local newValue = button:GetText()
Asa@43 71 newValue = parseMoney(newValue)
Asa@35 72
Asa@43 73 local investedTotal, investedPerItem, numOwned = ItemAuditor:GetItemCost(link)
Asa@43 74
Asa@43 75 if type == priceTypeEach then
Asa@43 76 newValue = newValue * numOwned
Asa@43 77 end
Asa@43 78
Asa@43 79 ItemAuditor:SaveValue(link, newValue-investedTotal, 0)
Asa@35 80 end
Asa@46 81 StaticPopup_Show ("ItemAuditor_NewPrice");
Asa@35 82 end
Asa@35 83
Asa@35 84 local function displayMoney(rowFrame, cellFrame, data, cols, row, realrow, column, fShow, table, ...)
Asa@35 85 if fShow == true then
Asa@35 86 local money = data[realrow][column]
Asa@43 87 cellFrame.text:SetText(ItemAuditor:FormatMoney(data[realrow][column]))
Asa@35 88 end
Asa@35 89 end
Asa@35 90
Asa@28 91 local investedCols = {
Asa@43 92 { name= "Item", width = 200, defaultsort = "desc",
Asa@28 93 ['DoCellUpdate'] = function(rowFrame, cellFrame, data, cols, row, realrow, column, fShow, table, ...)
Asa@28 94 if fShow == true then
Asa@28 95 local _, link= strsplit("|", data[realrow][column], 2)
Asa@28 96 cellFrame.text:SetText(link)
Asa@28 97 end
Asa@28 98 end,
Asa@28 99 },
Asa@28 100 { name= "Invested Total", width = 100, align = "RIGHT",
Asa@35 101 ['DoCellUpdate'] = displayMoney,
Asa@28 102 },
Asa@35 103 { name= "Invested Each", width = 100, align = "RIGHT",
Asa@35 104 ['DoCellUpdate'] = displayMoney,
Asa@28 105 },
Asa@43 106 { name= "# Owned", width = 50, align = "RIGHT", },
Asa@28 107 }
Asa@28 108
Asa@28 109 local investedTable = false
Asa@28 110 local function ShowInvested(container)
Asa@28 111 if investedTable == false then
Asa@28 112 local window = container.frame
Asa@28 113 investedTable = ScrollingTable:CreateST(investedCols, 23, nil, nil, window)
Asa@58 114
Asa@58 115
Asa@58 116
Asa@28 117 investedTable.frame:SetPoint("BOTTOMLEFT",window, 10,10)
Asa@28 118 investedTable.frame:SetPoint("TOP", window, 0, -60)
Asa@28 119 investedTable.frame:SetPoint("RIGHT", window, -10,0)
Asa@28 120 investedTable:RegisterEvents({
Asa@28 121 ["OnEnter"] = function (rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...)
Asa@28 122 if realrow then
Asa@28 123 local _, link= strsplit("|", data[realrow][1], 2)
Asa@28 124
Asa@28 125 GameTooltip:SetOwner(rowFrame, "ANCHOR_CURSOR")
Asa@28 126 GameTooltip:SetHyperlink(link)
Asa@28 127 GameTooltip:Show()
Asa@28 128 end
Asa@28 129 end,
Asa@28 130 ["OnLeave"] = function (rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...)
Asa@28 131 GameTooltip:Hide()
Asa@28 132 end,
Asa@28 133 ["OnClick"] = function (rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...)
Asa@35 134 if realrow ~= nil and (column == 2 or column == 3) then
Asa@35 135 -- column.text = row:CreateFontString(col:GetName().."text", "OVERLAY", "GameFontHighlightSmall");
Asa@35 136 local _, link= strsplit("|", data[realrow][1], 2)
Asa@35 137
Asa@35 138 local type=priceTypeEach
Asa@35 139 if column == 2 then
Asa@35 140 type = priceTypeTotal
Asa@35 141 end
Asa@35 142
Asa@35 143 PromptForNewPrice(link, type)
Asa@28 144 end
Asa@28 145 end,
Asa@28 146 });
Asa@28 147 end
Asa@28 148 investedTable:Show()
Asa@28 149
Asa@28 150 local width = 80
Asa@28 151 for i, data in pairs(investedCols) do
Asa@28 152 width = width + data.width
Asa@28 153 end
Asa@28 154 if container.parent then
Asa@28 155 container.parent:SetWidth(width);
Asa@28 156 end
Asa@28 157
Asa@28 158
Asa@28 159 UpdateInvestedData()
Asa@58 160
Asa@58 161 return investedTable
Asa@28 162 end
Asa@28 163
Asa@59 164 ItemAuditor:RegisterTab("Invested", 'tab_invested', ShowInvested)
Asa@58 165 function ItemAuditor:DisplayInvested()
Asa@59 166 self:CreateFrame('tab_invested')
Asa@28 167 end
Asa@28 168
Asa@28 169 function UpdateInvestedData()
Asa@28 170 if investedTable then
Asa@28 171 tableData = {} --reset
Asa@28 172 local totalInvested = 0
Asa@28 173
Asa@28 174 local i = 1
Asa@28 175 local data
Asa@35 176 local items = ItemAuditor.db.factionrealm.items
Asa@35 177 local includedItems = {}
Asa@35 178 for safeLink in pairs(items) do
Asa@35 179 local investedTotal, investedPerItem, count = ItemAuditor:GetItemCost(safeLink)
Asa@35 180 local itemName, link = GetItemInfo(safeLink)
Asa@35 181 if investedTotal > 0 and link ~= nil then
Asa@28 182 tableData[i] = {
Asa@28 183 itemName.."|"..link,
Asa@28 184 investedTotal,
Asa@28 185 investedPerItem,
Asa@28 186 count,
Asa@28 187 }
Asa@28 188
Asa@28 189 totalInvested = totalInvested + investedTotal
Asa@28 190
Asa@28 191 i = i + 1
Asa@35 192 includedItems[safeLink] = true
Asa@35 193 end
Asa@35 194 end
Asa@35 195
Asa@35 196 local inventory = ItemAuditor:GetCurrentInventory()
Asa@35 197
Asa@35 198 for link, count in pairs(inventory.items) do
Asa@35 199 if includedItems[link] == nil then
Asa@35 200 local count = Altoholic:GetItemCount(ItemAuditor:GetIDFromLink(link))
Asa@35 201 local itemName, link = GetItemInfo(link)
Asa@35 202 tableData[i] = {
Asa@35 203 itemName.."|"..link,
Asa@35 204 0,
Asa@35 205 0,
Asa@35 206 count,
Asa@35 207 }
Asa@35 208
Asa@35 209 -- totalInvested = totalInvested + investedTotal
Asa@35 210
Asa@35 211 i = i + 1
Asa@28 212 end
Asa@28 213 end
Asa@28 214
Asa@28 215 if investedTable.frame:IsShown() then
Asa@58 216 ItemAuditor:UpdateStatusText("Total Invested: "..ItemAuditor:FormatMoney(totalInvested))
Asa@28 217 end
Asa@28 218
Asa@28 219 investedTable:SetData(tableData, true)
Asa@28 220 end
Asa@28 221 end
Asa@28 222
Asa@28 223
Asa@67 224 ItemAuditor.Options.args.invested = {
Asa@67 225 type = "execute",
Asa@67 226 name = "invested",
Asa@67 227 desc = "Shows what you have invested in",
Asa@67 228 func = "DisplayInvested",
Asa@67 229 guiHidden = false,
Asa@67 230 }