annotate Modules/Options.lua @ 55:234896be4087

Adding an option to direct ItemAuditor output to a different chat frame
author Asa Ayers <Asa.Ayers@Gmail.com>
date Thu, 22 Jul 2010 23:17:57 -0700
parents 003de902ae64
children 8afc1ac9bf58
rev   line source
Asa@28 1 local addonName, addonTable = ...;
Asa@3 2 local addon = _G[addonName]
Asa@3 3
Asa@13 4 local currentFaction = UnitFactionGroup("player")
Asa@13 5 local AHFactions = { currentFaction, 'Neutral' }
Asa@13 6
Asa@20 7 local craftingThresholds = {5000, 10000, 50000}
Asa@20 8 local craftingThresholdsDisplay = {}
Asa@20 9
Asa@20 10 for key, value in pairs(craftingThresholds) do
Asa@20 11 craftingThresholdsDisplay[key] = addon:FormatMoney(value, '', true)
Asa@20 12 -- craftingThresholdsDisplay[key] = value
Asa@20 13 end
Asa@20 14
Asa@55 15 local windowIndex = nil
Asa@55 16 function addon:GetChatWindowList()
Asa@55 17 local windows = {}
Asa@55 18 for i=1, NUM_CHAT_WINDOWS do
Asa@55 19 local name, _, _, _, _, _, shown, locked, docked = GetChatWindowInfo(i)
Asa@55 20 if (name ~= "") and (docked or shown) then
Asa@55 21 windows[i] = name
Asa@55 22 end
Asa@55 23 end
Asa@55 24 return windows
Asa@55 25 end
Asa@55 26
Asa@55 27 function addon:GetChatWindowIndex()
Asa@55 28 local cf = self.db.char.output_chat_frame
Asa@55 29 if not windowIndex then
Asa@55 30 for i=1, NUM_CHAT_WINDOWS do
Asa@55 31 local name, _, _, _, _, _, shown, locked, docked = GetChatWindowInfo(i)
Asa@55 32 if name ~= "" and cf ~= nil and cf == name then
Asa@55 33 self:SetChatWindow(nil, i)
Asa@55 34 end
Asa@55 35 end
Asa@55 36 end
Asa@55 37 return windowIndex
Asa@55 38 end
Asa@55 39
Asa@55 40
Asa@55 41 local selectedWindow = nil
Asa@55 42
Asa@55 43 function addon:SetChatWindow(info, index)
Asa@55 44 windowIndex = index
Asa@55 45 local name = GetChatWindowInfo(windowIndex)
Asa@55 46
Asa@55 47 self.db.char.output_chat_frame = name
Asa@55 48 selectedWindow = nil
Asa@55 49 end
Asa@55 50
Asa@55 51 function addon:GetSelectedChatWindow()
Asa@55 52 if not selectedWindow then
Asa@55 53 selectedWindow = _G["ChatFrame"..self:GetChatWindowIndex()]
Asa@55 54 end
Asa@55 55 if (selectedWindow) then
Asa@55 56 return selectedWindow
Asa@55 57 end
Asa@55 58 return DEFAULT_CHAT_FRAME
Asa@55 59 end
Asa@55 60
Asa@3 61 local options = {
Asa@13 62 handler = addon,
Asa@3 63 name = "ItemAuditor",
Asa@3 64 type = 'group',
Asa@3 65 args = {
Asa@13 66 prices = {
Asa@13 67 name = "Prices",
Asa@13 68 desc = "Control how your minimum price is calculated.",
Asa@13 69 type = 'group',
Asa@13 70 args = {
Asa@13 71 auction_house = {
Asa@13 72 type = "select",
Asa@13 73 name = "Auction House",
Asa@13 74 desc = "",
Asa@13 75 values = { currentFaction, 'Neutral' },
Asa@13 76 get = 'GetAH',
Asa@13 77 set = 'SetAH',
Asa@13 78 },
Asa@13 79 },
Asa@3 80 },
Asa@13 81
Asa@13 82
Asa@13 83 messages = {
Asa@13 84 name = "Messages",
Asa@13 85 desc = "Control which messages display in your chat window.",
Asa@13 86 type = 'group',
Asa@13 87 args = {
Asa@20 88
Asa@20 89 item_cost = {
Asa@20 90 type = "toggle",
Asa@20 91 name = "Item Cost",
Asa@20 92 desc = "Shows a message every time an item's cost changes",
Asa@20 93 get = function() return ItemAuditor.db.profile.messages.cost_updates end,
Asa@20 94 set = function(info, value) ItemAuditor.db.profile.messages.cost_updates = value end,
Asa@20 95 order = 0,
Asa@20 96 },
Asa@20 97 queue_skip = {
Asa@20 98 type = "toggle",
Asa@20 99 name = "Queue Skip",
Asa@20 100 desc = "Displays a message when an item is excluded from the queue.",
Asa@20 101 get = function() return ItemAuditor.db.profile.messages.queue_skip end,
Asa@20 102 set = function(info, value) ItemAuditor.db.profile.messages.queue_skip = value end,
Asa@20 103 disabled = 'IsQADisabled',
Asa@20 104 order = 1,
Asa@20 105 },
Asa@55 106 output = {
Asa@55 107 type = "select",
Asa@55 108 name = "Output",
Asa@55 109 desc = "",
Asa@55 110 values = 'GetChatWindowList',
Asa@55 111 get = 'GetChatWindowIndex',
Asa@55 112 set = 'SetChatWindow',
Asa@55 113 },
Asa@13 114 },
Asa@3 115 },
Asa@13 116
Asa@13 117 qa_options = {
Asa@13 118 name = "QA Options",
Asa@13 119 desc = "Control how ItemAuditor integrates with QuickAuctions",
Asa@13 120 type = 'group',
Asa@13 121 -- disabled = (not addon.QA_compatibile),
Asa@13 122 disabled = function() return not ItemAuditor:IsQACompatible() end,
Asa@13 123 args = {
Asa@13 124 toggle_qa = {
Asa@13 125 type = "toggle",
Asa@13 126 name = "Enable Quick Auctions",
Asa@13 127 desc = "This will enable or disable Quick Auctions integration",
Asa@13 128 get = "IsQAEnabled",
Asa@13 129 set = "SetQAEnabled",
Asa@13 130 order = 0,
Asa@13 131 },
Asa@13 132 --[[
Asa@13 133 add_mail = {
Asa@13 134 type = "toggle",
Asa@13 135 name = "Add mail cost to QA Threshold",
Asa@13 136 get = "IsQAEnabled",
Asa@13 137 set = "SetQAEnabled",
Asa@13 138 order = 1,
Asa@13 139 },
Asa@13 140 ]]
Asa@20 141 auction_threshold = {
Asa@20 142 type = "range",
Asa@20 143 name = "Auction Threshold",
Asa@20 144 desc = "Don't create items that will make less than this amount of profit",
Asa@20 145 min = 0.0,
Asa@20 146 max = 1.0,
Asa@20 147 isPercent = true,
Asa@20 148 get = function() return ItemAuditor.db.char.auction_threshold end,
Asa@21 149 set = function(info, value)
Asa@21 150 ItemAuditor.db.char.auction_threshold = value
Asa@21 151 ItemAuditor:RefreshQAGroups()
Asa@21 152 end,
Asa@20 153 disabled = 'IsQADisabled',
Asa@20 154 order = 1,
Asa@20 155 },
Asa@13 156 refresh_qa = {
Asa@13 157 type = "execute",
Asa@13 158 name = "Refresh QA Thresholds",
Asa@13 159 desc = "Resets all Quick Auctions thresholds",
Asa@13 160 func = "RefreshQAGroups",
Asa@13 161 disabled = 'IsQADisabled',
Asa@20 162 order = 9,
Asa@13 163 },
Asa@21 164 }
Asa@21 165 },
Asa@21 166 crafting_options = {
Asa@21 167 name = "Crafting with Skillet",
Asa@21 168 desc = "/ia queue",
Asa@21 169 type = 'group',
Asa@21 170 disabled = function() return Skillet == nil end,
Asa@21 171 args = {
Asa@20 172 crafting_threshold = {
Asa@20 173 type = "select",
Asa@20 174 name = "Crafting Threshold",
Asa@20 175 desc = "Don't create items that will make less than this amount of profit",
Asa@20 176 values = craftingThresholdsDisplay,
Asa@20 177 get = function() return ItemAuditor.db.char.crafting_threshold end,
Asa@20 178 set = function(info, value) ItemAuditor.db.char.crafting_threshold = value end,
Asa@20 179 order = 11,
Asa@20 180 },
Asa@21 181 },
Asa@12 182 },
Asa@3 183 options = {
Asa@3 184 type = "execute",
Asa@3 185 name = "options",
Asa@3 186 desc = "Show Blizzard's options GUI",
Asa@3 187 func = "ShowOptionsGUI",
Asa@3 188 guiHidden = true,
Asa@3 189 },
Asa@18 190 queue = {
Asa@18 191 type = "execute",
Asa@18 192 name = "queue",
Asa@18 193 desc = "Queue",
Asa@18 194 func = "Queue",
Asa@18 195 guiHidden = true,
Asa@18 196 },
Asa@22 197 debug = {
Asa@22 198 type = "execute",
Asa@22 199 name = "debug",
Asa@22 200 desc = "Shows the debug frame",
Asa@22 201 func = function() ItemAuditor_DebugFrame:Show() end,
Asa@22 202 guiHidden = true,
Asa@28 203 },
Asa@28 204 invested = {
Asa@28 205 type = "execute",
Asa@28 206 name = "invested",
Asa@28 207 desc = "Shows what you have invested in",
Asa@28 208 func = "CreateFrames",
Asa@28 209 guiHidden = false,
Asa@28 210 },
Asa@38 211 suspend = {
Asa@38 212 type = "toggle",
Asa@38 213 name = "suspend",
Asa@38 214 desc = "Suspends ItemAuditor",
Asa@38 215 get = "IsEnabled",
Asa@38 216 set = "SetEnabled",
Asa@38 217 guiHidden = true,
Asa@38 218 },
Asa@3 219 },
Asa@3 220 }
Asa@3 221
Asa@38 222 function addon:SetEnabled(info, enable)
Asa@38 223 self.db.profile.addon_enabled = enable
Asa@38 224 if enable == self:IsEnabled() then
Asa@38 225 -- do nothing
Asa@38 226 elseif enable then
Asa@38 227 self:Enable()
Asa@38 228 self:Print('ItemAuditor is enabled.')
Asa@38 229 else
Asa@38 230 self:Disable()
Asa@38 231 self:Print('ItemAuditor is supended and will not watch for any events. Use "/ia suspend" to turn it back on.')
Asa@38 232 end
Asa@38 233 end
Asa@38 234
Asa@3 235 function addon:RegisterOptions()
Asa@3 236 self.optionsFrame = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("ItemAuditor", "ItemAuditor")
Asa@3 237 LibStub("AceConfig-3.0"):RegisterOptionsTable("ItemAuditor", options, {"ia"})
Asa@3 238 end
Asa@3 239
Asa@7 240 local function pairsByKeys (t, f)
Asa@7 241 local a = {}
Asa@7 242 for n in pairs(t) do table.insert(a, n) end
Asa@7 243 table.sort(a, f)
Asa@7 244 local i = 0 -- iterator variable
Asa@7 245 local iter = function () -- iterator function
Asa@7 246 i = i + 1
Asa@7 247 if a[i] == nil then return nil
Asa@7 248 else return a[i], t[a[i]]
Asa@7 249 end
Asa@7 250 end
Asa@7 251 return iter
Asa@7 252 end
Asa@7 253
Asa@20 254 function addon:GetCraftingThreshold()
Asa@20 255 local key = ItemAuditor.db.char.crafting_threshold
Asa@20 256 return craftingThresholds[key]
Asa@20 257 end
Asa@20 258
Asa@20 259 function addon:GetAuctionThreshold()
Asa@20 260 return ItemAuditor.db.char.auction_threshold
Asa@20 261 end
Asa@20 262
Asa@13 263 function addon:GetAH()
Asa@13 264 return ItemAuditor.db.char.ah
Asa@13 265 end
Asa@13 266
Asa@13 267 function addon:SetAH(info, value)
Asa@13 268 ItemAuditor.db.char.ah = value
Asa@13 269 end
Asa@13 270
Asa@13 271 function addon:GetAHCut()
Asa@13 272 if ItemAuditor.db.char.ah == 1 then
Asa@13 273 return 0.05
Asa@13 274 end
Asa@13 275 return 0.15
Asa@13 276 end
Asa@13 277
Asa@13 278 function addon:GetAHFaction()
Asa@13 279 return AHFactions[ItemAuditor.db.char.ah]
Asa@13 280 end
Asa@13 281
Asa@3 282 function addon:ShowOptionsGUI()
Asa@3 283 InterfaceOptionsFrame_OpenToCategory(self.optionsFrame)
Asa@3 284 end
Asa@3 285
Asa@3 286