vanilla-wow-addons – Rev 1
?pathlinks?
--$Id: OneView.lua 8341 2006-08-18 03:57:52Z kaelten $
OneView = OneCore:NewModule("OneView", "AceEvent-2.0", "AceHook-2.0", "AceDebug-2.0", "AceConsole-2.0", "AceDB-2.0")
local L = AceLibrary("AceLocale-2.0"):new("OneView")
BINDING_HEADER_ONEVIEW = "OneView"
function OneView:OnInitialize()
local baseArgs = OneCore:GetFreshOptionsTable(self)
local customArgs = {
["0"] = {
name = L"Backpack", type = 'toggle', order = 5,
desc = L"Turns display of your backpack on and off.",
get = function() return self.db.profile.show[0] end,
set = function(v)
self.db.profile.show[0] = v
self:OrganizeFrame(true)
end,
},
["1"] = {
name = L"First Bag", type = 'toggle', order = 6,
desc = L"Turns display of your first bag on and off.",
get = function() return self.db.profile.show[1] end,
set = function(v)
self.db.profile.show[1] = v
self:OrganizeFrame(true)
end,
},
["2"] = {
name = L"Second Bag", type = 'toggle', order = 7,
desc = L"Turns display of your second bag on and off.",
get = function() return self.db.profile.show[2] end,
set = function(v)
self.db.profile.show[2] = v
self:OrganizeFrame(true)
end,
},
["3"] = {
name = L"Third Bag", type = 'toggle', order = 8,
desc = L"Turns display of your third bag on and off.",
get = function() return self.db.profile.show[3] end,
set = function(v)
self.db.profile.show[3] = v
self:OrganizeFrame(true)
end,
},
["4"] = {
name = L"Fourth Bag", type = 'toggle', order = 9,
desc = L"Turns display of your fourth bag on and off.",
get = function() return self.db.profile.show[4] end,
set = function(v)
self.db.profile.show[4] = v
self:OrganizeFrame(true)
end,
},
["5"] = {
name = L"First Bank Bag", type = 'toggle', order = 10,
desc = L"Turns display of your first bag on and off.",
get = function() return self.db.profile.show[5] end,
set = function(v)
self.db.profile.show[5] = v
self:OrganizeFrame(true)
end,
},
["6"] = {
name = L"Second Bank Bag", type = 'toggle', order = 11,
desc = L"Turns display of your second bag on and off.",
get = function() return self.db.profile.show[6] end,
set = function(v)
self.db.profile.show[6] = v
self:OrganizeFrame(true)
end,
},
["7"] = {
name = L"Third Bank Bag", type = 'toggle', order = 12,
desc = L"Turns display of your third bag on and off.",
get = function() return self.db.profile.show[7] end,
set = function(v)
self.db.profile.show[7] = v
self:OrganizeFrame(true)
end,
},
["8"] = {
name = L"Fourth Bank Bag", type = 'toggle', order = 13,
desc = L"Turns display of your fourth bag on and off.",
get = function() return self.db.profile.show[8] end,
set = function(v)
self.db.profile.show[8] = v
self:OrganizeFrame(true)
end,
},
["9"] = {
name = L"Fifth Bank Bag", type = 'toggle', order = 14,
desc = L"Turns display of your fifth bag on and off.",
get = function() return self.db.profile.show[9] end,
set = function(v)
self.db.profile.show[9] = v
self:OrganizeFrame(true)
end,
},
["10"] = {
name = L"Sixth Bank Bag", type = 'toggle', order = 15,
desc = L"Turns display of your sixth bag on and off.",
get = function() return self.db.profile.show[10] end,
set = function(v)
self.db.profile.show[10] = v
self:OrganizeFrame(true)
end,
},
}
OneCore:CopyTable(customArgs, baseArgs.args.show.args)
baseArgs.args.remember = {
cmdName = L"Remember", guiName = L"Remember Selection", type = 'toggle',
desc = L"Toggles wether to remember which was the last character you selected.",
get = function() return self.db.profile.remember end,
set = function(v)
self.db.profile.remember = v
if v then
self.db.account.faction = self.faction
self.db.account.characterId = self.charId
else
self.db.account.faction = nil
self.db.account.characterId = nil
end
end,
}
self:RegisterDB("OneViewDB")
self:RegisterDefaults('profile', OneCore.defaults)
self:RegisterChatCommand({"/ov", "/OneView"}, baseArgs, string.upper(self.title))
self:RegisterChatCommand({"/ovs", "/ovshow"}, {type="execute", func= function()
if OneViewFrame:IsVisible() then
OneViewFrame:Hide()
else
OneViewFrame:Show()
end
end})
--self:SetDebugging(true)
self.fBags = {-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
self.frame = OneViewFrame
self.frame.bags = {}
self.frame.handler = self
self.storage = OneStorage
self:TriggerEvent("OneView_Loaded")
self:RegisterDewdrop(baseArgs)
end
function OneView:OnEnable()
self.frame:SetClampedToScreen(true)
self:BuildCharSelectOptions()
end
function OneView:BuildFrame()
debugprofilestart()
if not self.frame.bags[-1] then
self.frame.bags[-1] = CreateFrame("Frame", "OVBankBag", self.frame)
self.frame.bags[-1]:SetID(-1)
self.frame.bags[-1].size = 24
for slot = 1, 24 do
self.frame.bags[-1][slot] = CreateFrame("Button", self.frame.bags[-1]:GetName().."Item"..slot, self.frame.bags[-1], "OneViewItemButtonTemplate")
self.frame.bags[-1][slot]:SetID(slot)
end
end
for bag = 0, 10 do
local itemId, size, isAmmo, isSoul, isProf = self.storage:BagInfo(self.faction, self.charId, bag)
for slot = 1, (tonumber(size) or 0) do
if not self.frame.bags[bag] then
self.frame.bags[bag] = CreateFrame("Frame", tostring(self)..bag, self.frame)
self.frame.bags[bag]:SetID(bag)
end
if not self.frame.bags[bag][slot] then
self.frame.bags[bag][slot] = CreateFrame("Button", tostring(self)..bag.."Item"..slot, self.frame.bags[bag], "OneViewItemButtonTemplate")
self.frame.bags[bag][slot]:SetID(slot)
end
end
if self.frame.bags[bag] then
local curBag = self.frame.bags[bag]
curBag.itemId, curBag.size, curBag.isAmmo, curBag.isSoul, curBag.isProf = itemId, size or 0, isAmmo, isSoul, isProf
end
end
self:Debug("%s ran in %s", "BuildFrame", debugprofilestop())
end
function OneView:OrganizeFrame(needs)
debugprofilestart()
local cols, curCol, curRow = self.db.profile.cols, 1, 1
local lastslot
self.bankSoulSlots, self.bankAmmoSlots, self.bankProfSlots, self.bankSlotCount, self.bankTotalCount = 0, 0, 0, 0, 0
self.invSoulSlots, self.invAmmoSlots, self.invProfSlots, self.invSlotCount, self.invTotalCount = 0, 0, 0, 0, 0
for bag = -1, 10 do
if self.frame.bags[bag] then
for k2, v2 in ipairs(self.frame.bags[bag]) do
v2:Hide()
end
end
local curBag = getglobal("OneViewFrameBag" .. bag)
if curBag and not self.db.profile.show.bank and bag > 4 then
curBag:Hide()
elseif curBag and not self.db.profile.show.inventory and bag < 5 and bag > 0 then
curBag:Hide()
elseif curBag then
curBag:Show()
end
end
for k, bag in {-1, 5, 6, 7, 8, 9, 10} do
local curBag = self.frame.bags[bag]
if curBag and curBag.size and curBag.size > 0 then
if curBag.isAmmo then
self.bankAmmoSlots = self.bankAmmoSlots + curBag.size
elseif curBag.isSoul then
self.bankSoulSlots = self.bankSoulSlots + curBag.size
elseif curBag.isProf then
self.bankProfSlots = self.bankProfSlots + curBag.size
else
self.bankSlotCount = self.bankSlotCount + curBag.size
end
if self.db.profile.show.bank then
if self:ShouldShow(bag, curBag.isAmmo, curBag.isSoul, curBag.isProf) then
self.bankTotalCount = self.bankTotalCount + curBag.size
for slot = 1, curBag.size do
curBag[slot]:ClearAllPoints()
curBag[slot]:SetPoint("TOPLEFT", self.frame:GetName(), "TOPLEFT", self.leftBorder + (self.colWidth * (curCol - 1)) , 0 - self.topBorder - (self.rowHeight * curRow))
curBag[slot]:Show()
if curCol == 1 then lastslot = curBag[slot] end
curCol = curCol + 1
if curCol > cols then curCol, curRow = 1, curRow + 1 end
end
end
else
curRow = curRow + .1
end
end
end
OneViewFrameBankInfo1:ClearAllPoints()
if self.db.profile.show.bagslots and lastslot then
OneViewFrameBag5:ClearAllPoints()
OneViewFrameBag5:SetPoint("TOPLEFT", lastslot, "BOTTOMLEFT", 0, -10)
OneViewFrameBankInfo1:SetPoint("TOPLEFT", OneViewFrameBag5, "BOTTOMLEFT", 0, -10)
for i = 5, 10 do
getglobal("OneViewFrameBag" .. i):Show()
end
elseif lastslot then
for i = 5, 10 do
getglobal("OneViewFrameBag" .. i):Hide()
end
curRow = curRow - 1
OneViewFrameBankInfo1:SetPoint("TOPLEFT", lastslot, "BOTTOMLEFT", 0, -10)
else
for i = 5, 10 do
getglobal("OneViewFrameBag" .. i):Hide()
end
curRow = curRow - 1
OneViewFrameBankInfo1:SetPoint("TOPLEFT", OneViewFrameBankButton, "BOTTOMLEFT", 5, -10)
end
lastslot = nil
curCol = 1
curRow = curRow + (self.db.profile.show.bank and 3.5 or 2)
for bag = 0, 4 do
local curBag = self.frame.bags[bag]
if curBag and curBag.size and curBag.size > 0 then
if curBag.isAmmo then
self.invAmmoSlots = self.invAmmoSlots + curBag.size
elseif curBag.isSoul then
self.invSoulSlots = self.invSoulSlots + curBag.size
elseif curBag.isProf then
self.invProfSlots = self.invProfSlots + curBag.size
else
self.invSlotCount = self.invSlotCount + curBag.size
end
if self.db.profile.show.inventory then
if self:ShouldShow(bag, curBag.isAmmo, curBag.isSoul, curBag.isProf) then
self.invTotalCount = self.invTotalCount + curBag.size
for slot = 1, curBag.size do
curBag[slot]:ClearAllPoints()
curBag[slot]:SetPoint("TOPLEFT", self.frame:GetName(), "TOPLEFT", self.leftBorder + (self.colWidth * (curCol - 1)) , 0 - self.topBorder - (self.rowHeight * curRow))
curBag[slot]:Show()
if curCol == 1 then lastslot = curBag[slot] end
curCol = curCol + 1
if curCol > cols then curCol, curRow = 1, curRow + 1 end
end
end
local invButton = getglobal(self.frame:GetName() .. "InventoryButton")
invButton:ClearAllPoints()
invButton:SetPoint("BOTTOMLEFT", self.frame.bags[0][1]:GetName(), "TOPLEFT", -5, 0)
else
local invButton = getglobal(self.frame:GetName() .. "InventoryButton")
invButton:ClearAllPoints()
invButton:SetPoint("BOTTOMLEFT", self.frame:GetName(), "BOTTOMLEFT", 3, 24)
end
end
end
OneViewFrameInventoryInfo1:ClearAllPoints()
if self.db.profile.show.bagslots and lastslot then
curRow = curRow + 1
OneViewFrameBag1:ClearAllPoints()
OneViewFrameBag1:SetPoint("TOPLEFT", lastslot, "BOTTOMLEFT", 0, -10)
OneViewFrameInventoryInfo1:SetPoint("TOPLEFT", OneViewFrameBag1, "BOTTOMLEFT", 0, -5)
for i = 1, 4 do
getglobal("OneViewFrameBag" .. i):Show()
end
elseif lastslot then
for i = 1, 4 do
getglobal("OneViewFrameBag" .. i):Hide()
end
OneViewFrameInventoryInfo1:SetPoint("TOPLEFT", lastslot, "BOTTOMLEFT", 0, -5)
else
for i = 1, 4 do
getglobal("OneViewFrameBag" .. i):Hide()
end
OneViewFrameInventoryInfo1:SetPoint("TOPLEFT", OneViewFrameInventoryButton, "BOTTOMLEFT", 5, -4)
end
self:Debug("CurrentRow: %s", curRow)
if math.mod(self.invTotalCount, cols) ~= 0 then curRow = curRow + 1 end
self.frame:SetHeight(curRow * self.rowHeight + self.bottomBorder + self.topBorder)
self.frame:SetWidth(cols * self.colWidth + self.leftBorder + self.rightBorder)
self:Debug("%s ran in %s", "OrganizeFrame", debugprofilestop())
OneViewFrameInventoryName:ClearAllPoints()
OneViewFrameInventoryName:SetPoint("LEFT", OneViewFrameInventoryButton, "RIGHT", 5, 1)
OneViewFrameBankName:ClearAllPoints()
OneViewFrameBankName:SetPoint("LEFT", OneViewFrameBankButton, "RIGHT", 5, 1)
OneViewFrameBankName:SetText(format(L"%s's Bank Bags", self.charId or ""))
OneViewFrameInventoryName:SetText(format(L"%s's Bags", self.charId or ""))
end
function OneView:FillBags()
for bag = -1, 10 do
local curBag = self.frame.bags[bag]
if curBag and curBag.size and curBag.size > 0 then
for slot = 1, curBag.size do
local itemId, qty = self.storage:SlotInfo(self.faction, self.charId, bag, slot)
if itemId then
local itemName, itemLink, itemQuality, itemLevel, itemType, itemSubType, itemCount, itemEquipLoc, itemTexture = GetItemInfo(itemId)
getglobal(curBag[slot]:GetName() .. "IconTexture"):SetTexture(itemTexture)
getglobal(curBag[slot]:GetName() .. "IconTexture"):Show()
if qty > 1 then
getglobal(curBag[slot]:GetName() .. "Count"):SetText(qty)
getglobal(curBag[slot]:GetName() .. "Count"):Show()
else
getglobal(curBag[slot]:GetName() .. "Count"):SetText("")
getglobal(curBag[slot]:GetName() .. "Count"):Hide()
end
curBag[slot].itemId = itemId
curBag[slot].itemQuality = itemQuality
curBag[slot].qty = qty
else
getglobal(curBag[slot]:GetName() .. "IconTexture"):Hide()
getglobal(curBag[slot]:GetName() .. "Count"):Hide()
curBag[slot].itemId = nil
curBag[slot].itemQuality = nil
curBag[slot].qty = nil
end
self:SetBorderColor(curBag[slot])
end
end
local bagSlot = getglobal("OneViewFrameBag" .. bag)
if bagSlot then
local itemId = self.storage:BagInfo(self.faction, self.charId, bag)
if itemId then
local itemName, itemLink, itemQuality, itemLevel, itemType, itemSubType, itemCount, itemEquipLoc, itemTexture = GetItemInfo(itemId)
getglobal(bagSlot:GetName() .. "IconTexture"):SetTexture(itemTexture)
getglobal(bagSlot:GetName() .. "IconTexture"):Show()
bagSlot.itemId = itemId
else
getglobal(bagSlot:GetName() .. "IconTexture"):Hide()
bagSlot.itemId = nil
end
end
end
MoneyFrame_Update(self.frame:GetName().."MoneyFrame", self.storage:GetMoney(self.faction, self.charId) or 0)
self:DoBankSlotCounts()
self:DoInventorySlotCounts()
end
function OneView:SetBorderColor(slot)
local color = {r = 1, g = 1, b = 1}
local bag = slot:GetParent()
local special = false
if bag.isAmmo then
color = self.db.profile.colors.ammo
special = true
elseif bag.isSoul then
color = self.db.profile.colors.soul
special = true
elseif bag.isProf then
color = self.db.profile.colors.prof
special = true
elseif self.db.profile.colors.rarity and slot.itemQuality then
color = ITEM_QUALITY_COLORS[slot.itemQuality]
if slot.itemQuality > 1 then
special = true
end
end
if special and self.db.profile.colors.glow then
slot:SetNormalTexture("Interface\\Buttons\\UI-ActionButton-Border")
slot:GetNormalTexture():SetBlendMode("ADD")
slot:GetNormalTexture():SetAlpha(.8)
slot:GetNormalTexture():SetPoint("CENTER", slot:GetName(), "CENTER", 0, 1)
elseif special then
slot:SetNormalTexture("Interface\\AddOns\\OneBag\\BagSlot2")
slot:GetNormalTexture():SetBlendMode("BLEND")
slot:GetNormalTexture():SetPoint("CENTER", slot:GetName(), "CENTER", 0, 0)
else
slot:SetNormalTexture("Interface\\AddOns\\OneBag\\BagSlot")
slot:GetNormalTexture():SetBlendMode("BLEND")
slot:GetNormalTexture():SetPoint("CENTER", slot:GetName(), "CENTER", 0, 0)
end
slot:GetNormalTexture():SetVertexColor(color.r, color.g, color.b)
end
function OneView:DoBankSlotCounts()
local usedSlots, usedAmmoSlots, usedSoulSlots, usedProfSlots, ammoQuantity = 0, 0, 0, 0, 0
for k, bag in {-1, 5, 6, 7, 8, 9, 10} do
if self.frame.bags[bag] then
local tmp, qty = 0, 0
for slot = 1, self.frame.bags[bag].size do
if(self.frame.bags[bag][slot].itemId) then
tmp = tmp + 1
qty = qty + self.frame.bags[bag][slot].qty
end
end
if self.frame.bags[bag].isAmmo then
usedAmmoSlots = usedAmmoSlots + tmp
ammoQuantity = ammoQuantity + qty
elseif self.frame.bags[bag].isSoul then
usedSoulSlots = usedSoulSlots + tmp
elseif self.frame.bags[bag].isProf then
usedProfSlots = usedProfSlots + tmp
else
usedSlots = usedSlots + tmp
end
end
end
self:Debug("Normal used: %s, Soul used: %s, Prof used: %s, Ammo used %s, Ammo quantity %s.", usedSlots, usedSoulSlots, usedProfSlots, usedAmmoSlots, ammoQuantity)
local info = 1
local name = self.frame:GetName() .. "BankInfo"
getglobal(name .. info):SetText(format(L"%s/%s Slots", usedSlots, self.bankSlotCount))
info = info + 1
for i = 2, 4 do
getglobal(name .. i):SetText("")
end
if self.db.profile.show.counts then
if self.bankAmmoSlots > 0 then
getglobal(name .. info):SetText(format(L"%s/%s Ammo", ammoQuantity, self.bankAmmoSlots * 200))
info = info + 1
end
if self.bankSoulSlots > 0 then
getglobal(name .. info):SetText(format(L"%s/%s Soul Shards", usedSoulSlots, self.bankSoulSlots))
info = info + 1
end
if self.bankProfSlots > 0 then
getglobal(name .. info):SetText(format(L"%s/%s Profession Slots", usedProfSlots, self.bankProfSlots))
info = info + 1
end
end
end
function OneView:DoInventorySlotCounts()
local usedSlots, usedAmmoSlots, usedSoulSlots, usedProfSlots, ammoQuantity = 0, 0, 0, 0, 0
for bag = 0, 4 do
if self.frame.bags[bag] then
local tmp, qty = 0, 0
for slot = 1, self.frame.bags[bag].size do
if(self.frame.bags[bag][slot].itemId) then
tmp = tmp + 1
qty = qty + self.frame.bags[bag][slot].qty
end
end
if self.frame.bags[bag].isAmmo then
usedAmmoSlots = usedAmmoSlots + tmp
ammoQuantity = ammoQuantity + qty
elseif self.frame.bags[bag].isSoul then
usedSoulSlots = usedSoulSlots + tmp
elseif self.frame.bags[bag].isProf then
usedProfSlots = usedProfSlots + tmp
else
usedSlots = usedSlots + tmp
end
end
end
self:Debug("Normal used: %s, Soul used: %s, Prof used: %s, Ammo used %s, Ammo quantity %s.", usedSlots, usedSoulSlots, usedProfSlots, usedAmmoSlots, ammoQuantity)
local info = 1
local name = self.frame:GetName() .. "InventoryInfo"
getglobal(name .. info):SetText(format(L"%s/%s Slots", usedSlots, self.invSlotCount))
info = info + 1
for i = 2, 4 do
getglobal(name .. i):SetText("")
end
if self.db.profile.show.counts then
if self.invAmmoSlots > 0 then
getglobal(name .. info):SetText(format(L"%s/%s Ammo", ammoQuantity, self.invAmmoSlots * 200))
info = info + 1
end
if self.invSoulSlots > 0 then
getglobal(name .. info):SetText(format(L"%s/%s Soul Shards", usedSoulSlots, self.invSoulSlots))
info = info + 1
end
if self.invProfSlots > 0 then
getglobal(name .. info):SetText(format(L"%s/%s Profession Slots", usedProfSlots, self.invProfSlots))
info = info + 1
end
end
end
function OneView:BuildCharSelectOptions()
local list = self.storage:GetCharListByServerId()
local args = {
type="group",
args = {},
}
for serverId, v in list do
local _, _, server, faction = string.find(serverId, "(.+) . (.+)")
while string.find(server, "(.+) (.+)") do
local _, _, p1, p2 = string.find(server, "(.+) (.+)")
server = p1..p2
end
print(server)
args.args[server..faction] = {
name = serverId, type = 'group',
desc = L"Characters on "..serverId,
args = {}
}
for k, v2 in v do
local fact = faction
local _, _, charName, charId = string.find(v2, "(.+) . (.+)")
local func = function() self:LoadCharacter(fact, charId) end
args.args[server..faction].args[charName] = {
name = charName, type = 'execute',
func = func, desc = charName,
}
end
end
self.dewdrop:Register(OneViewFrameCharSelectButton,
'children', args,
'point', function(parent)
if parent:GetTop() < GetScreenHeight() / 2 then
return "BOTTOMLEFT", "TOPLEFT"
else
return "TOPLEFT", "BOTTOMLEFT"
end
end,
'dontHook', true
)
end
function OneView:CharSelect()
if self.dewdrop:IsOpen(getglobal(self.frame:GetName() .. "CharSelectButton")) then
self.dewdrop:Close()
else
self.dewdrop:Open(getglobal(self.frame:GetName() .. "CharSelectButton"), OneViewFrameCharSelectButton)
end
end
function OneView:LoadCharacter(faction, characterId)
faction = faction or self.db.account.faction or AceLibrary("AceDB-2.0").FACTION
characterId = characterId or self.db.account.characterId or AceLibrary("AceDB-2.0").CHAR_ID
if self.db.profile.remember then
self.db.account.faction = faction
self.db.account.characterId = characterId
end
self.faction = faction
self.charId = characterId
self:BuildFrame()
self:OrganizeFrame()
self:FillBags()
end
function OneView:LinkItem(itemId)
local name, link, quality = GetItemInfo(itemId)
if ( ChatFrameEditBox:IsShown() ) then
ChatFrameEditBox:Insert(format("%s|H%s|h[%s]|h|r", ITEM_QUALITY_COLORS[quality].hex, link, name))
end
end
function OneView:OnCustomShow()
if self.db.profile.point then
local point = self.db.profile.point
this:ClearAllPoints()
this:SetPoint("TOPLEFT", point.parent, "BOTTOMLEFT", point.left, point.top)
end
end
Generated by GNU Enscript 1.6.5.90.