vanilla-wow-addons – Rev 1
?pathlinks?
--------------------------------------------------------------------------
-- MyBagsCore
-- Author: Ramble
--
-- Credits
-- Svarten for MyInventory
-- Turan for OneBag
-- Sarf for AIOI and initail concept
--------------------------------------------------------------------------
local MYBAGS_BOTTOMOFFSET = 20
local MYBAGS_COLWIDTH = 40
local MYBAGS_ROWHEIGHT = 40
local MYBAGS_MAXBAGSLOTS = 28
local MIN_SCALE_VAL = "0.2"
local MAX_SCALE_VAL = "2.0"
local MYBAGS_SLOTCOLOR = { 0.5, 0.5, 0.5 }
local MYBAGS_AMMOCOLOR = { 0.6, 0.6, 0.1 }
local MYBAGS_SHARDCOLOR = { 0.6, 0.3, 0.6 }
local MYBAGS_ENCHANTCOLOR = { 0.2, 0.2, 1.0 }
local MYBAGS_ENGINEERCOLOR = { 0.6, 0.0, 0.0 }
local MYBAGS_HERBCOLOR = { 0.0, 0.6, 0.0 }
local MYBAGS_KEYRINGCOLOR = { 0.7, 0.4, 0.4 }
local CHARACTER_DELIMITOR = " " .. ACE_TEXT_OF .. " " -- surrounding spaces are needed
MYBAGS_KC_CHARS = nil
MYBAGS_CACHE_CHARS = nil
MyBagsCoreClass = AceAddonClass:new({
version = "0.4.6 (11100)",
releaseDate = "07/19/06",
category = "inventory",
author = "Ramble (modified by Isharra)",
email = "isharra (at) gmail (dot) com",
website = "http://isharra.wowinterface.com",
aceCompatible = "103",
MAXBAGSLOTS = 36,
minColumns = 2,
maxColumns = 24,
_TOPOFFSET = 28,
_BOTTOMOFFSET = 20,
_LEFTOFFSET = 8,
_RIGHTOFFSET = 3,
})
ace:RegisterFunctions(MyBagsCoreClass, {
ColorConvertHexToDigit = function(h)
if(strlen(h)~=6) then return 0,0,0 end
local r={a=10,b=11,c=12,d=13,e=14,f=15}
return ((tonumber(strsub(h,1,1)) or r[strsub(h,1,1)] or 0) * 16 +
(tonumber(strsub(h,2,2)) or r[strsub(h,2,2)] or 0))/255,
((tonumber(strsub(h,3,3)) or r[strsub(h,3,3)] or 0) * 16 +
(tonumber(strsub(h,4,4)) or r[strsub(h,4,4)] or 0))/255,
((tonumber(strsub(h,5,5)) or r[strsub(h,5,5)] or 0) * 16 +
(tonumber(strsub(h,6,6)) or r[strsub(h,6,6)] or 0))/255
end,
GetItemInfoFromLink = function(l)
if(not l) then return end
local _,_,c,id,il,n=strfind(l,"|cff(%x+)|Hitem:(%d+)(:%d+:%d+:%d+)|h%[(.-)%]|h|r")
return n,c,id..il,id
end,
IsSpecialtyBagFromLink = function(b)
local _,_,_,i=ace.GetItemInfoFromLink(b)
if(not i) then return end
local _,_,_,_,c,d=GetItemInfo(i)
return ace.IsSpecialtyBag(c,d)
end,
IsSpecialtyBagFromID = function(i)
if(not i) then return end
local _,_,_,_,c,d=GetItemInfo(i)
return ace.IsSpecialtyBag(c,d)
end,
IsSpecialtyBag = function(itype,isubtype)
if(strlower(itype or "")==strlower(ACEG_TEXT_AMMO)) then return 1 end
if(strlower(itype or "")==strlower(ACEG_TEXT_QUIVER)) then return 2 end
if(strlower(isubtype or "")==strlower(ACEG_TEXT_SOUL)) then return 3 end
if(strlower(isubtype or "")==strlower(ACEG_TEXT_ENCHANT)) then return 4 end
if(strlower(isubtype or "")==strlower(ACEG_TEXT_ENGINEER)) then return 5 end
if(strlower(isubtype or "")==strlower(ACEG_TEXT_HERB)) then return 6 end
end,
SplitString = function(s,p,n)
if (type(s) ~= "string") then
error("SplitString must be passed a string as the first argument", 2)
end
local l,sp,ep = {},0
while(sp) do
sp,ep=strfind(s,p)
if(sp) then
tinsert(l,strsub(s,1,sp-1))
s=strsub(s,ep+1)
else
tinsert(l,s)
break
end
if(n) then n=n-1 end
if(n and (n==0)) then tinsert(l,s) break end
end
return unpack(l)
end,
})
function MyBagsCoreClass:Initialize()
self.GetOpt = function(var) return self.db:get(self.profilePath,var) end
self.SetOpt = function(var,val) self.db:set(self.profilePath,var,val) end
self.TogOpt = function(var) return self.db:toggle(self.profilePath,var) end
self.Result = function(text, val, map)
if( map ) then val = map[val or 0] or val end
self.cmd:result(text, " ", ACEG_TEXT_NOW_SET_TO, " ",
format(ACEG_DISPLAY_OPTION, val or ACE_CMD_REPORT_NO_VAL)
)
end
self.Error = function(...) self.cmd:result(format(unpack(arg))) end
self.TogMsg = function(var,text) self.Result(text,self.TogOpt(var),ACEG_MAP_ONOFF) end
self.frame = getglobal(self.frameName)
self.frame.self = self
-- self:IsLive()
end
function MyBagsCoreClass:Enable()
self:RegisterEvents()
self:HookFunctions()
if self.GetOpt("Scale") then
self.frame:SetScale(self.GetOpt("Scale"))
end
self:SetUISpecialFrames()
self:SetFrozen()
self:SetLockTexture()
local point = self.GetOpt("Anchor")
if point then
self.frame:ClearAllPoints()
self.frame:SetPoint(string.upper(point), self.frame:GetParent():GetName(), string.upper(point), 0, 0)
end
if self:CanSaveItems() then
self:LoadDropDown()
else
self.SetOpt("Player")
end
self:ChkCompanion()
if self.GetOpt("Strata") then
self.frame:SetFrameStrata(self.GetOpt("Strata"))
end
end
function MyBagsCoreClass:RegisterEvents()
self:RegisterEvent("BAG_UPDATE")
self:RegisterEvent("BAG_UPDATE_COOLDOWN", "LayoutFrameOnEvent")
self:RegisterEvent("ITEM_LOCK_CHANGED", "LayoutFrameOnEvent")
-- I hate ITEM_LOCK_CHANGED but without it dragging to the actionbars never resets the item button.
-- self:RegisterEvent("UPDATE_INVENTORY_ALERTS", "LayoutFrameOnEvent")
end
function MyBagsCoreClass:HookFunctions()
self:Hook("ToggleBag")
self:Hook("OpenBag")
self:Hook("CloseBag")
end
function MyBagsCoreClass:ToggleBag(bag)
-- self:debug("ToggleBagHook")
if self.GetOpt("Replace") and self:IncludeBag(bag) then
self:Toggle()
else
self.Hooks["ToggleBag"].orig(bag)
end
end
function MyBagsCoreClass:OpenBag(bag)
-- self:debug("OpenBagHook")
if (self.GetOpt("Replace") and self:IncludeBag(bag)) then
self:Open()
elseif not self.isBank then
self.Hooks["OpenBag"].orig(bag)
end
end
function MyBagsCoreClass:CloseBag(bag)
-- self:debug("CloseBagHook")
if not self.Freeze and (self.GetOpt("Replace") and self:IncludeBag(bag)) then
self:Close()
elseif not self.isBank then
self.Hooks["CloseBag"].orig(bag)
end
end
function MyBagsCoreClass:TooltipSetOwner(owner, anchor)
if not owner then owner = UIParent end
local parent = owner:GetParent()
if parent and (parent == self.frame or parent:GetParent() == self.frame ) then
local point = self.GetOpt("Anchor") or "bottomright"
if point == "topleft" or point == "bottomleft" then
anchor = "ANCHOR_RIGHT"
else
anchor = "ANCHOR_LEFT"
end
else
anchor = "ANCHOR_PRESERVE"
end
GameTooltip:SetOwner(owner, anchor)
end
-- Frame Toggle {{{
function MyBagsCoreClass:Open()
if not self.frame:IsVisible() then self.frame:Show() end
if self.Player and self.Player ~= ace.char.id then
self.Player = ace.char.id
local dropDown = getglobal(self.frameName .. "CharSelectDropDown")
if dropDown then
UIDropDownMenu_SetSelectedValue(dropDown, ace.char.id)
end
end
self:LayoutFrame()
end
function MyBagsCoreClass:Close()
if self.frame:IsVisible() then self.frame:Hide() end
end
function MyBagsCoreClass:Toggle()
if self.frame:IsVisible() then
self:Close()
else
self:Open()
end
end
function MyBagsCoreClass:GetHyperlink(ID)
local _, link = GetItemInfo("item:" .. ID)
return link
end
function MyBagsCoreClass:GetTextLink(ID)
local myName, myLink, myQuality = GetItemInfo("item:" .. ID)
local _,_,_,myColor = GetItemQualityColor(myQuality or 0)
local textLink = "|cff" .. (strsub(myColor,5)) .. "|H" .. myLink .. "|h[" .. myName .. "]|h|r"
return textLink
end
--ITEMBUTTONS--
function MyBagsCoreClass:ItemButton_OnLoad()
getglobal(this:GetName().."NormalTexture"):SetTexture("Interface\\AddOns\\MyBags\\Skin\\Button");
ContainerFrameItemButton_OnLoad()
end
function MyBagsCoreClass:ItemButton_OnLeave()
GameTooltip:Hide()
local bagButton = getglobal(this:GetParent():GetName() .. "Bag")
if bagButton then bagButton:UnlockHighlight() end
CursorUpdate()
end
function MyBagsCoreClass:ItemButton_OnClick(button, ignoreShift)
if self.isLive then
if this.hasItem then self.watchLock = 1 end
if self.isBank and this:GetParent():GetID() == BANK_CONTAINER then
BankFrameItemButtonGeneric_OnClick(button)
else
ContainerFrameItemButton_OnClick(button, ignoreShift)
end
else
if button == "LeftButton" and IsControlKeyDown() and not ignoreShift then
local _, _, ID = self:GetInfo(this:GetParent():GetID(), this:GetID() )
if DressUpItemLink and ID ~= "" then
DressUpItemLink("item:"..ID)
end
elseif (button == "LeftButton" ) and ( IsShiftKeyDown() and not ignoreShift) then
if (ChatFrameEditBox:IsVisible()) then
local _, _, ID = self:GetInfo(this:GetParent():GetID(), this:GetID() )
local textLink
if ID then textLink = self:GetTextLink(ID) end
if textLink then ChatFrameEditBox:Insert(textLink) end
end
end
end
end
function MyBagsCoreClass:ItemButton_OnEnter()
if self.GetOpt("HlBags") == 1 then
local bagButton = getglobal(this:GetParent():GetName() .. "Bag")
if bagButton then bagButton:LockHighlight() end
end
self:TooltipSetOwner(this)
if self.isLive then
if this:GetParent() == MyBankFrameBank then -- OnEnter for BankItems is in XML, need 1.7 to use actual code
GameTooltip:SetInventoryItem("player", BankButtonIDToInvSlotID(this:GetID()))
else
ContainerFrameItemButton_OnEnter(this)
end
else
local ID
_, _, ID = self:GetInfo(this:GetParent():GetID(), this:GetID())
if ID then
local hyperlink = self:GetHyperlink(ID)
if hyperlink then GameTooltip:SetHyperlink(hyperlink) end
end
end
if ( this.readable or (IsControlKeyDown() and this.hasItem) ) then
ShowInspectCursor()
end
end
function MyBagsCoreClass:ItemButton_OnDragStart()
if self.isLive then
self:ItemButton_OnClick("LeftButton", 1)
end
end
function MyBagsCoreClass:ItemButton_OnReceiveDrag()
if self.isLive then
self:ItemButton_OnClick("LeftButton", 1)
end
end
function MyBagsCoreClass:ItemButton_OnUpdate(arg1)
end
--BAGBUTTONS--
function MyBagsCoreClass:BagButton_OnEnter()
local bagFrame = this:GetParent()
local setTooltip = true
self:TooltipSetOwner(this)
if self.isLive then
local invSlot = self:BagIDToInvSlotID(bagFrame:GetID())
if not invSlot or (not GameTooltip:SetInventoryItem("player", invSlot)) or bagFrame:GetID() == KEYRING_CONTAINER then
setTooltip = false
end
else
_, _, ID = self:GetInfo(this:GetParent():GetID())
if bagFrame:GetID() == 0 then
GameTooltip:SetText(BACKPACK_TOOLTIP, 1.0,1.0,1.0)
elseif bagFrame:GetID() == KEYRING_CONTAINER then
setTooltip = false
elseif ID then
hyperlink = self:GetHyperlink(ID)
if hyperlink then
GameTooltip:SetHyperlink(hyperlink)
end
else
setTooltip = false
end
end
if not setTooltip then
local keyBinding
if self.isBank then
if self.isLive and not self:IsBagSlotUsable(bagFrame:GetID()) then
GameTooltip:SetText(BANK_BAG_PURCHASE)
if MyBank.atBank then
local cost = GetBankSlotCost()
GameTooltip:AddLine("Purchase:", "", 1, 1, 1)
SetTooltipMoney(GameTooltip, cost)
if GetMoney() > cost then
SetMoneyFrameColor("GameTooltipMoneyFrame", 1.0, 1.0, 1.0)
else
SetMoneyFrameColor("GameTooltipMoneyFrame", 1.0, 0.1, 0.1)
end
GameTooltip:Show()
end
keyBinding = GetBindingKey("TOGGLEBAG"..(4-this:GetID()))
else
GameTooltip:SetText(BANK_BAG)
end
else
if bagFrame:GetID() == 0 then -- SetScript("OnEnter", MainMenuBarBackpackButton:GetScript("OnEnter"))
GameTooltip:SetText(BACKPACK_TOOLTIP, 1.0,1.0,1.0)
keyBinding = GetBindingKey("TOGGLEBACKPACK")
elseif bagFrame:GetID() == KEYRING_CONTAINER then
GameTooltip:SetText(KEYRING, 1.0,1.0,1.0)
keyBinding = GetBindingKey("TOGGLEKEYRING")
else
GameTooltip:SetText(EQUIP_CONTAINER)
end
end
end
if self.GetOpt("HlItems") == 1 then -- Highlight
local i
for i = 1, self.MAXBAGSLOTS do
local button = getglobal(bagFrame:GetName() .. "Item" .. i)
if button then
button:LockHighlight()
end
end
end
end
function MyBagsCoreClass:BagButton_OnLeave()
SetMoneyFrameColor("GameTooltipMoneyFrame", 1.0, 1.0, 1.0);
GameTooltip:Hide()
for i = 1, self.MAXBAGSLOTS do
button = getglobal(this:GetParent():GetName() .. "Item" .. i)
if button then button:UnlockHighlight() end
end
end
function MyBagsCoreClass:BagButton_OnClick(button, ignoreShift)
if self.isBank then
this:SetChecked(nil)
else
this:SetChecked(self:IncludeBag(this:GetID()))
end
if self.isLive then
if button == "LeftButton" then
if not self:IsBagSlotUsable(this:GetParent():GetID()) then
local cost = GetBankSlotCost()
if GetMoney() > cost then
if not StaticPopupDialogs["PURCHASE_BANKBAG"] then return end
StaticPopup_Show("PURCHASE_BANKBAG")
end
return
end
if (not IsShiftKeyDown()) then
self:BagButton_OnReceiveDrag()
else
end
else
if (IsShiftKeyDown()) then
self.db:toggle({self.profilePath, "BagSlot" .. this:GetParent():GetID() }, "Exclude")
self.Hooks["CloseBag"].orig(this:GetParent():GetID())
self:LayoutFrame()
end
end
end
end
function MyBagsCoreClass:BagButton_OnDragStart()
if self.isLive then
local bagFrame = this:GetParent()
local invID = self:BagIDToInvSlotID(bagFrame:GetID())
if invID then
PickupBagFromSlot(invID)
PlaySound("BAGMENUBUTTONPRESS")
self.watchLock = 1
end
end
end
function MyBagsCoreClass:BagButton_OnReceiveDrag()
if self.isLive then
local bagFrame = this:GetParent()
local invID = self:BagIDToInvSlotID(bagFrame:GetID())
local hadItem
if not invID then
hadItem = PutItemInBackpack()
elseif bagFrame:GetID() == KEYRING_CONTAINER then
PutKeyInKeyRing()
else
hadItem = PutItemInBag(invID)
end
if not hadItem then
if not self:IncludeBag(bagFrame:GetID()) then
if bagFrame:GetID() == KEYRING_CONTAINER then
self.Hooks["ToggleKeyRing"].orig()
else
self.Hooks["ToggleBag"].orig(bagFrame:GetID())
end
end
end
end
end
function MyBagsCoreClass:LoadDropDown()
local dropDown = getglobal(self.frameName .. "CharSelectDropDown")
local dropDownButton = getglobal(self.frameName .. "CharSelectDropDownButton")
if not dropDown then return end
local last_this = getglobal("this")
setglobal("this", dropDownButton)
UIDropDownMenu_Initialize(dropDown, self.UserDropDown_Initialize)
UIDropDownMenu_SetSelectedValue(dropDown, self:GetCurrentPlayer())
UIDropDownMenu_SetWidth(140, dropDown)
OptionsFrame_EnableDropDown(dropDown)
setglobal("this", last_this)
end
function MyBagsCoreClass:UserDropDown_Initialize()
--if not KC_Items then return end
local chars
local hasList = 0
if KC_Items then
chars = KC_Items.common:GetCharList(ace.char.realm, ace.char.faction)
for key, value in chars do
hasList = 1
MYBAGS_KC_CHARS = chars
break
end
if charCount == 0 then
self.GetOpt("Player")
return
end
elseif MyBagsCache then
chars = MyBagsCache:GetCharList()
for key, value in chars do
hasList = 1
MYBAGS_CACHE_CHARS = chars
break
end
if hasList == 0 then
self.GetOpt("Player")
return
end
else
return
end
MyBank:debug("Character list is available")
local frame = this:GetParent():GetParent():GetParent()
local selectedValue = UIDropDownMenu_GetSelectedValue(this)
for key, value in chars do
info = {
["text"] = key,
["value"] = key,
["func"] = frame.self.UserDropDown_OnClick,
["owner"] = frame.self,
["checked"] = nil,
}
if selectedValue == info.value then info.checked = 1 end
UIDropDownMenu_AddButton(info)
end
end
function MyBagsCoreClass:UserDropDown_OnClick()
self = this.owner
local dropDown = getglobal(self.frameName .. "CharSelectDropDown")
self.Player = this.value
UIDropDownMenu_SetSelectedValue(dropDown, this.value)
self:LayoutFrame()
end
function MyBagsCoreClass:GetCurrentPlayer()
if self.Player then return self.Player end
return ace.char.id
end
function MyBagsCoreClass:CanSaveItems()
local live = self:IsLive()
self.isLive = FALSE
if self:GetInfoFunc() ~= self.GetInfoNone then
self.isLive = live
return TRUE
end
self.isLive = live
return FALSE
end
function MyBagsCoreClass:IsLive()
local isLive = true
local charID = self:GetCurrentPlayer()
if charID ~= ace.char.id then isLive = false end
if self.isBank and not MyBank.atBank then isLive = false end
self.isLive = isLive
return isLive
end
function MyBagsCoreClass:BagIDToInvSlotID(bag, isBank)
if bag == -1 or bag >= 5 and bag <= 10 then isBank = 1 end
if isBank then return BankButtonIDToInvSlotID(bag, 1) end
return ContainerIDToInventoryID(bag)
end
function MyBagsCoreClass:IncludeBag(bag)
if self.isBank and bag == BANK_CONTAINER then return TRUE end
if not self.isBank and bag == KEYRING_CONTAINER then
if self.db:get({self.profilePath, "BagSlot"..bag} , "Exclude") then
return FALSE
end
return TRUE
end
if bag < self.firstBag or bag > (self.firstBag + self.totalBags-1) then
return FALSE
else
if self.db:get({self.profilePath, "BagSlot"..bag} , "Exclude") then
return FALSE
end
return TRUE
end
end
function MyBagsCoreClass:IsBagSlotUsable(bag)
if not self.isBank then return TRUE end
local slots, full = GetNumBankSlots()
if (bag+1 - self.firstBag) <= slots then return TRUE end
return FALSE
end
function MyBagsCoreClass:GetCash()
if self.isLive then return GetMoney()
elseif IsAddOnLoaded("MyBagsCache") then
local charID = self:GetCurrentPlayer()
return MyBagsCache:GetCash(charID)
end
return nil
end
function MyBagsCoreClass:GetInfo(bag, slot)
local infofunc = self:GetInfoFunc()
if infofunc then
return infofunc(self, bag, slot)
end
return nil, 0, nil, nil, nil, nil, nil
end
function MyBagsCoreClass:GetInfoLive(bag, slot)
local texture, count, ID
local locked, quality, readable
local itemLink
self.Player = ace.char.id
if slot ~= nil then
-- it's an item
texture, count, locked, _ , readable = GetContainerItemInfo(bag, slot)
itemLink = GetContainerItemLink(bag, slot)
if itemLink then
_, quality, _, ID = ace.GetItemInfoFromLink(itemLink)
end
else
-- it's a bag
if(bag == KEYRING_CONTAINER) then
count = GetKeyRingSize()
else
count = GetContainerNumSlots(bag)
end
local inventoryID = self:BagIDToInvSlotID(bag)
if inventoryID then
texture = GetInventoryItemTexture("player", inventoryID)
itemLink = GetInventoryItemLink("player", inventoryID)
if itemLink then
_, quality, _, ID = ace.GetItemInfoFromLink(itemLink)
end
locked = IsInventoryItemLocked(inventoryID)
readable = ace.IsSpecialtyBagFromLink(itemLink)
else
texture = "Interface\\Buttons\\Button-Backpack-Up"
count = 16
end
end
count = tonumber(count)
if count == nil then count = 0 end
return texture, count, ID, locked, quality, readable, nil
end
function MyBagsCoreClass:GetInfoMyBagsCache(bag,slot,charID)
local charID = self:GetCurrentPlayer()
local texture, count, ID, locked, quality, readable, name
if self.isEquipment then
slot = bag
texture, count, ID, quality, name = MyBagsCache:GetInfo("equipment", bag, charID)
else -- data.Texture, data.Count, data.Link, data.Color, data.Name
texture, count, ID, quality, name = MyBagsCache:GetInfo(bag, slot, charID)
if not slot and ID then
local _,_,_,_,c,d=GetItemInfo("item:"..ID)
readable = ace.IsSpecialtyBag(c,d)
end
end
count = tonumber(count)
if count == nil then count = 0 end
return texture, count, ID, nil, quality, readable, name
end
function MyBagsCoreClass:GetInfoNone(bag, slot)
return nil, 0, nil, nil, nil, nil, nil
end
function MyBagsCoreClass:GetSlotCount()
local slots, used, displaySlots = 0, 0, 0
if self.isBank then
if self:CanSaveItems() or self.isLive then
slots = 24
displaySlots = 24
end
for i = 1, slots do
if (self:GetInfo(BANK_CONTAINER, i)) then used = used + 1 end
end
end
for bagIndex = 0, self.totalBags -1 do
local bagFrame = getglobal(self.frameName .. "Bag" .. bagIndex)
if bagFrame and self:IncludeBag(bagFrame:GetID()) then
local bagID = bagFrame:GetID()
local bagSlots, specBag
_, bagSlots, _, _, _, specBag = self:GetInfo(bagID)
bagSlots = ace.tonum(bagSlots)
if not specBag or specBag == "" then
slots = slots + bagSlots
displaySlots = displaySlots + bagSlots
for i = 1, bagSlots do
if self:GetInfo(bagID, i) then used = used + 1 end
end
else
displaySlots = displaySlots + bagSlots
end
end
end
if self:IncludeBag(KEYRING_CONTAINER) then
_, bagSlots, _, _, _, specBag = self:GetInfo(KEYRING_CONTAINER)
displaySlots = displaySlots + bagSlots
end
return slots, used, displaySlots
end
function MyBagsCoreClass:LayoutOptions()
local playerSelectFrame = getglobal(self.frameName .. "CharSelect")
local title = getglobal(self.frameName .. "Name")
local cash = getglobal(self.frameName .. "MoneyFrame")
local slots = getglobal(self.frameName .. "Slots")
local buttons = getglobal(self.frameName .. "Buttons")
self:UpdateTitle()
if self.GetOpt("Title") == TRUE then title:Show()
else title:Hide() end
if self.GetOpt("Cash") == TRUE then
local cashvalue = self:GetCash()
if cashvalue then
MoneyFrame_Update(self.frameName .. "MoneyFrame", cashvalue)
cash:Show()
else
cash:Hide()
end
else cash:Hide() end
if self.GetOpt("Buttons") == TRUE then buttons:Show()
else buttons:Hide() end
self:SetFrameMode(self.GetOpt("Graphics"))
if self.GetOpt("Player") == TRUE then
playerSelectFrame:Show()
else
playerSelectFrame:Hide()
end
playerSelectFrame:ClearAllPoints()
if (self.GetOpt("Graphics")) == "art" then
playerSelectFrame:SetPoint("TOP", self.frameName, "TOP", 22, -38)
self._TOPOFFSET = 32
elseif self.GetOpt("Title") or self.GetOpt("Buttons") then
playerSelectFrame:SetPoint("TOP", self.frameName, "TOP", 0, -38)
self._TOPOFFSET = 28
else
playerSelectFrame:SetPoint("TOP", self.frameName, "TOP", 0, -18)
self._TOPOFFSET = 8
end
if self.GetOpt("Cash") or (not self.isEquipment and self.GetOpt("Count") ~= "none") then
self._BOTTOMOFFSET = 25
else
self._BOTTOMOFFSET = 3
end
if (self.frame.isBank) then
-- self:debug("self.frame.isBank") -- does this ever occur?
MYBAGS_BOTTOMOFFSET = MYBAGS_BOTTOMOFFSET+20
cash:ClearAllPoints()
cash:SetPoint("BOTTOMRIGHT", self.frameName, "BOTTOMRIGHT", 0, 25)
end
if self.GetOpt("Player") == TRUE or self.GetOpt("Graphics") == "art" then
self.curRow = self.curRow + 1
end
if self.GetOpt("Bag") == "bar" then
self.curRow = self.curRow + 1
end
local count, used, displaySlots = nil
if not (self.isEquipment) then
count, used, displaySlots = self:GetSlotCount()
count = ace.tonum(count)
displaySlots = ace.tonum(displaySlots)
if self.GetOpt("Count") == "free" then
slots:Show()
slots:SetText(format(MYBAGS_SLOTS_DD, (count - used), count ))
elseif self.GetOpt("Count") == "used" then
slots:Show()
slots:SetText(format(MYBAGS_SLOTS_DD, (used), count ))
else
slots:Hide()
end
if self.GetOpt("Reverse") then
self.reverseOrder = TRUE
else
self.reverseOrder = nil
end
end
if self.GetOpt("AIOI") then
self.aioiOrder = TRUE
local columns = self.GetOpt("Columns")
if not (self.isEquipment) and self.GetOpt("Bag") == "before" then displaySlots = displaySlots + self.totalBags end
columns = ace.tonum(columns)
if self.isEquipment then displaySlots = 20 end
self.curCol = columns - (mod(displaySlots, columns) )
if self.curCol == columns then self.curCol = 0 end
else
self.aioiOrder = nil
end
end
function MyBagsCoreClass:UpdateTitle()
local title1 = 4
local title2 = 7
if self.GetOpt("Graphics") == "art" then
title1 = 5
title2 = 9
end
local columns = self.GetOpt("Columns")
local titleString
if columns > title2 then
titleString = MYBAGS_TITLE2
elseif columns > title1 then
titleString = MYBAGS_TITLE1
else
titleString = MYBAGS_TITLE0
end
titleString = titleString .. getglobal(string.upper(self.frameName) .. "_TITLE")
local title = getglobal(self.frameName .. "Name")
local player, realm = ace.SplitString(self:GetCurrentPlayer(), CHARACTER_DELIMITOR)
title:SetText(format(titleString, player, realm))
end
function MyBagsCoreClass:SetFrameMode(mode)
local frame = self.frame
local frameName = self.frameName
local textureTopLeft, textureTop, textureTopRight
local textureLeft, textureCenter, textureRight
local textureBottomLeft, textureBottom, textureBottomRight
local texturePortrait
local frameTitle
local frameButtonBar = getglobal(frameName .. "Buttons")
textureTopLeft = getglobal(frameName .. "TextureTopLeft")
textureTopCenter = getglobal(frameName .. "TextureTopCenter")
textureTopRight = getglobal(frameName .. "TextureTopRight")
textureLeft = getglobal(frameName .. "TextureLeft")
textureCenter = getglobal(frameName .. "TextureCenter")
textureRight = getglobal(frameName .. "TextureRight")
textureBottomLeft = getglobal(frameName .. "TextureBottomLeft")
textureBottomCenter= getglobal(frameName .. "TextureBottomCenter")
textureBottomRight = getglobal(frameName .. "TextureBottomRight")
texturePortrait = getglobal(frameName .. "Portrait")
frameTitle = getglobal(frameName .. "Name")
frameTitle:ClearAllPoints()
frameButtonBar:ClearAllPoints()
if mode == "art" then
frameTitle:SetPoint("TOPLEFT", frameName, "TOPLEFT", 70, -10)
frameTitle:Show()
frameButtonBar:Show()
frameButtonBar:SetPoint("TOPRIGHT", frameName, "TOPRIGHT", 10, 0)
frame:SetBackdropColor(0,0,0,0)
frame:SetBackdropBorderColor(0,0,0,0)
textureTopLeft:Show()
textureTopCenter:Show()
textureTopRight:Show()
textureLeft:Show()
textureCenter:Show()
textureRight:Show()
textureBottomLeft:Show()
textureBottomCenter:Show()
textureBottomRight:Show()
texturePortrait:Show()
else
frameTitle:SetPoint("TOPLEFT", frameName, "TOPLEFT", 5, -6)
frameButtonBar:SetPoint("TOPRIGHT", frameName, "TOPRIGHT", 0, 0)
textureTopLeft:Hide()
textureTopCenter:Hide()
textureTopRight:Hide()
textureLeft:Hide()
textureCenter:Hide()
textureRight:Hide()
textureBottomLeft:Hide()
textureBottomCenter:Hide()
textureBottomRight:Hide()
texturePortrait:Hide()
if mode == "default" then
local BackColor = self.GetOpt("BackColor") or {0.7,0,0,0}
local a, r, g, b = unpack(BackColor)
frame:SetBackdropColor(r,g,b,a)
frame:SetBackdropBorderColor(1,1,1,a)
else
frame:SetBackdropColor(0,0,0,0)
frame:SetBackdropBorderColor(0,0,0,0)
end
end
end
function MyBagsCoreClass:GetXY(row, col)
return (self._LEFTOFFSET + (col * MYBAGS_COLWIDTH)), (0 - self._TOPOFFSET - (row * MYBAGS_ROWHEIGHT))
end
function MyBagsCoreClass:LayoutBagFrame(bagFrame)
local bagFrameName = bagFrame:GetName()
local slot
local itemBase = bagFrameName .. "Item"
local bagButton = getglobal(bagFrameName .. "Bag")
local texture, count, _, locked, quality, ammo
local slotColor = ((self.GetOpt("SlotColor")) or MYBAGS_SLOTCOLOR)
local ammoColor = ((self.GetOpt("AmmoColor")) or MYBAGS_AMMOCOLOR)
local shardColor = ((self.GetOpt("ShardColor")) or MYBAGS_SHARDCOLOR)
local enchantColor = ((self.GetOpt("EnchantColor")) or MYBAGS_ENCHANTCOLOR)
local engColor = ((self.GetOpt("EngColor")) or MYBAGS_ENGINEERCOLOR)
local herbColor = ((self.GetOpt("HerbColor")) or MYBAGS_HERBCOLOR)
local keyringColor = ((self.GetOpt("KeyRingColor")) or MYBAGS_KEYRINGCOLOR)
self.watchLock = nil
texture, count, _, locked, _, specialty = self:GetInfo(bagFrame:GetID())
bagFrame.size = ace.tonum(count)
if bagButton and bagFrame:GetID() ~= BANK_CONTAINER then
if not texture then _, texture = GetInventorySlotInfo("Bag0Slot") end
if not self.isLive or (self.isLive and self:IsBagSlotUsable(bagFrame:GetID())) then
SetItemButtonTextureVertexColor(bagButton, 1.0, 1.0, 1.0)
SetItemButtonDesaturated(bagButton, locked, 0.5, 0.5, 0.5)
else
SetItemButtonTextureVertexColor(bagButton, 1.0, 0.1, 0.1)
end
SetItemButtonTexture(bagButton, texture)
if self.GetOpt("Bag") == "bar" then
local col, row = 0, 0
if self.GetOpt("Player") or self.GetOpt("Graphics") == "art" then row = 1 end
if self.isBank then
col = (self.GetOpt("Columns") - self.totalBags)/2
else
col = (self.GetOpt("Columns") - self.totalBags -.5)/2
end
if bagFrame:GetID() == KEYRING_CONTAINER then
col = col + 5 - self.firstBag
else
col = col + bagFrame:GetID() - self.firstBag
end
bagButton:Show()
bagButton:ClearAllPoints()
bagButton:SetPoint("TOPLEFT", self.frameName, "TOPLEFT", self:GetXY(row, col))
elseif self.GetOpt("Bag") == "before" then
if self.curCol >= self.GetOpt("Columns") then
self.curCol = 0
self.curRow = self.curRow + 1
end
bagButton:Show()
bagButton:ClearAllPoints()
bagButton:SetPoint("TOPLEFT", self.frameName, "TOPLEFT", self:GetXY(self.curRow,self.curCol))
self.curCol = self.curCol + 1
else
bagButton:Hide()
end
if not self:IncludeBag(bagFrame:GetID()) or self.isBank then
bagButton:SetChecked(nil)
else
bagButton:SetChecked(1)
end
end
-- local maxIndex = MYBAGS_MAXBAGSLOTS
-- if bagFrame.maxIndex then maxIndex = bagFrame.maxIndex end
if bagFrame.size < 1 or not self:IncludeBag(bagFrame:GetID()) then
bagFrame.size = 0
else
for slot = 1, bagFrame.size do
local itemButton = getglobal(itemBase .. slot) or CreateFrame("Button", itemBase .. slot, bagFrame, "MyBagsItemButtonTemplate")
itemButton:SetID(slot)
if self.curCol >= self.GetOpt("Columns") then
self.curCol = 0
self.curRow = self.curRow + 1
end
itemButton:Show()
itemButton:ClearAllPoints()
itemButton:SetPoint("TOPLEFT", self.frame:GetName(), "TOPLEFT", self:GetXY(self.curRow, self.curCol))
self.curCol = self.curCol + 1
texture, count, id, locked, quality = self:GetInfo(bagFrame:GetID(), slot)
if id and id ~= "" then itemButton.hasItem = 1
else quality = nil end
if self.isLive then
local start,duration, enable = GetContainerItemCooldown(bagFrame:GetID(), slot)
local cooldown = getglobal(itemButton:GetName() .. "Cooldown")
CooldownFrame_SetTimer(cooldown,start,duration,enable)
if duration>0 and enable==0 then
SetItemButtonTextureVertexColor(itemButton, 0.4,0.4,0.4)
end
end
SetItemButtonTexture(itemButton, (texture or ""))
SetItemButtonCount(itemButton, count)
SetItemButtonDesaturated(itemButton, locked, 0.5, 0.5, 0.5)
if locked and locked ~= "" then
itemButton:LockHighlight()
self.watchLock =1
else itemButton:UnlockHighlight() end
if quality and self.GetOpt("Border") then
SetItemButtonNormalTextureVertexColor(itemButton, ace.ColorConvertHexToDigit(quality))
else
SetItemButtonNormalTextureVertexColor(itemButton, unpack(slotColor))
if (specialty == 1 or specialty == 2) then
SetItemButtonNormalTextureVertexColor(itemButton, unpack(ammoColor))
elseif specialty == 3 then
SetItemButtonNormalTextureVertexColor(itemButton, unpack(shardColor))
elseif specialty == 4 then
SetItemButtonNormalTextureVertexColor(itemButton, unpack(enchantColor))
elseif specialty == 5 then
SetItemButtonNormalTextureVertexColor(itemButton, unpack(engColor))
elseif specialty == 6 then
SetItemButtonNormalTextureVertexColor(itemButton, unpack(herbColor))
elseif bagFrame:GetID() == KEYRING_CONTAINER then
SetItemButtonNormalTextureVertexColor(itemButton, unpack(keyringColor))
end
end
end
end
if(bagFrame.size) then
local slot = bagFrame.size + 1
local itemButton = getglobal(itemBase .. slot)
while itemButton do
itemButton:Hide()
slot = slot + 1
itemButton = getglobal(itemBase .. slot)
end
end
end
function MyBagsCoreClass:LayoutFrame()
-- local time = GetTime()
-- if not self.frame or not self.frame:IsVisible() then return end
if not self.frame:IsVisible() then return end
self.isLive = self:IsLive()
local bagBase = self.frameName .. "Bag"
local bagIndex, bagFrame
self.curRow, self.curCol = 0,0
self:LayoutOptions()
if self.isEquipment then
self:LayoutEquipmentFrame(self)
else
if self.reverseOrder then
if not self.isBank then
bagFrame = getglobal(self.frameName .. "KeyRing")
bagFrame:SetID(KEYRING_CONTAINER)
self:LayoutBagFrame(bagFrame)
end
for bag = self.totalBags-1,0,-1 do
bagFrame = getglobal(bagBase .. bag)
if (bagFrame) then
self:LayoutBagFrame(bagFrame)
end
end
if self.isBank then
bagFrame = getglobal(self.frameName .. "Bank")
self:LayoutBagFrame(bagFrame)
end
else
if self.isBank then
bagFrame = getglobal(self.frameName .. "Bank")
self:LayoutBagFrame(bagFrame)
end
for bag = 0, self.totalBags-1 do
bagFrame = getglobal(bagBase .. bag)
if (bagFrame) then
self:LayoutBagFrame(bagFrame)
end
end
if not self.isBank then
bagFrame = getglobal(self.frameName .. "KeyRing")
bagFrame:SetID(KEYRING_CONTAINER)
self:LayoutBagFrame(bagFrame)
end
end
end
if self.curCol == 0 then self.curRow = self.curRow - 1 end
self.frame:SetWidth(self._LEFTOFFSET + self._RIGHTOFFSET + self.GetOpt("Columns") * MYBAGS_COLWIDTH)
self.frame:SetHeight(self._TOPOFFSET + self._BOTTOMOFFSET + (self.curRow + 1) * MYBAGS_ROWHEIGHT)
-- self:debug("LayoutFrame ".. GetTime()-time)
end
function MyBagsCoreClass:LayoutFrameOnEvent()
-- local time = GetTime()
if event == "UNIT_INVENTORY_CHANGED" and arg1 ~= "player" then return end
if event == "ITEM_LOCK_CHANGED" and not self.watchLock then return end
if self.isLive then
self:LayoutFrame()
end
-- self:debug("LayoutFrameOnEvent "..event.." ".. GetTime()-time)
end
function MyBagsCoreClass:LockButton_OnClick()
self.TogOpt("Lock")
self:SetLockTexture()
end
function MyBagsCoreClass:SetLockTexture()
local button = getglobal(self.frameName .. "ButtonsLockButtonNormalTexture")
local texture = "Interface\\AddOns\\MyBags\\Skin\\LockButton-"
if not self.GetOpt("Lock") then texture = texture .. "Un" end
texture = texture .. "Locked-Up"
button:SetTexture(texture)
if self.GetOpt("Lock") and self.GetOpt("Graphics") == "none" then
-- self:debug("Mouse clicks pass through")
self.frame:EnableMouse(nil)
else
-- self:debug("Mouse clicks intercepted")
self.frame:EnableMouse(1)
end
end
function MyBagsCoreClass:SetFrozen()
if self.GetOpt("Freeze") == "always" then
self.Freeze = "always"
elseif self.GetOpt("Freeze") == "sticky" then
self.Freeze = "sticky"
else
self.Freeze = nil
end
end
function MyBagsCoreClass:SetUISpecialFrames()
if self.GetOpt("NoEsc") then
for k,v in UISpecialFrames do
if v == (self.frameName) then
table.remove(UISpecialFrames, k)
end
end
else
table.insert(UISpecialFrames, self.frameName)
end
end
--CHAT CMD OPTIONS {{{
function MyBagsCoreClass:SetColumns(cols)
cols = ace.tonum(cols)
if( (cols >= self.minColumns) and (cols <= self.maxColumns) ) then
self.SetOpt("Columns", cols)
self:LayoutFrame()
--self.Result(ONEBAG_TEXT_COLS, cols)
else
--self.Result(ONEBAG_COLUMN_LIMIT_MSG, self.minColumns, self.maxColumns)
end
end
function MyBagsCoreClass:SetReplace()
self.TogMsg("Replace", "Replace default bags")
self:LayoutFrame()
end
function MyBagsCoreClass:SetBagDisplay(opt)
self.SetOpt("Bag", opt)
self.Result("Bag Buttons", opt)
self:LayoutFrame()
end
function MyBagsCoreClass:SetGraphicsDisplay(opt)
local a, r, g, b
opt, a, r, g, b = unpack(ace.ParseWords(opt))
-- self:debug("opt: |" .. opt .."| ")
if opt ~= "default" and opt~="art" and opt~="none" then
return
end
self.SetOpt("Graphics", opt)
if a then
self.SetOpt("BackColor", {ace.tonum(a), ace.tonum(r), ace.tonum(g), ace.tonum(b)})
else
self.SetOpt("BackColor")
end
self.Result("Background", opt)
self:LayoutFrame()
end
function MyBagsCoreClass:SetHighlight(mode)
if mode == "items" then
self.TogMsg("HlItems", "Highlight")
else
self.TogMsg("HlBags", "Highlight")
end
end
function MyBagsCoreClass:SetFreeze(opt)
opt = strlower(opt)
if opt == "freeze always" then opt = "always" end
if opt == "freeze sticky" then opt = "sticky" end
if opt == "freeze none" then opt = "none" end
self.Result("Freeze", opt)
self.SetOpt("Freeze", opt)
self:SetFrozen()
end
function MyBagsCoreClass:SetNoEsc()
self.TogMsg("NoEsc", "NoEsc")
self:SetUISpecialFrames()
end
function MyBagsCoreClass:SetLock()
self.TogMsg("Lock", "Lock")
self:SetLockTexture()
end
function MyBagsCoreClass:SetTitle()
self.TogMsg("Title", "Frame Title")
self:LayoutFrame()
end
function MyBagsCoreClass:SetCash()
self.TogMsg("Cash", "Money Display")
self:LayoutFrame()
end
function MyBagsCoreClass:SetButtons()
self.TogMsg("Buttons", "Frame Buttons")
self:LayoutFrame()
end
function MyBagsCoreClass:SetAIOI()
self.TogMsg("AIOI", "toggle partial row placement")
self:LayoutFrame()
end
function MyBagsCoreClass:SetReverse()
self.TogMsg("Reverse", "reverse bag ordering")
self:LayoutFrame()
end
function MyBagsCoreClass:SetBorder()
self.TogMsg("Border", "Quality Borders")
self:LayoutFrame()
end
function MyBagsCoreClass:SetPlayerSel()
if self:CanSaveItems() then
-- self:debug("CanSaveItems")
self.TogMsg("Player", "Player selection")
else
-- self:debug("Can'tSaveItems")
self.SetOpt("Player")
end
self:LayoutFrame()
end
function MyBagsCoreClass:SetCount(mode)
self.SetOpt("Count", mode)
self.Result("Count", mode)
self:LayoutFrame()
end
function MyBagsCoreClass:SetScale(scale)
scale = ace.tonum(scale)
if scale == 0 then
self.SetOpt("Scale")
self.frame:SetScale(self.frame:GetParent():GetScale())
self.Result("Scale", ACEG_TEXT_DEFAULT)
elseif (( scale < ace.tonum(MIN_SCALE_VAL)) or (scale > ace.tonum(MAX_SCALE_VAL))) then
self.Error("Invalid Scale")
else
self.SetOpt("Scale", scale)
self.frame:SetScale(scale)
self.Result("Scale", scale)
end
end
function MyBagsCoreClass:SetStrata(strata)
strata = strupper(strata)
-- if strata =="BACKGROUND" or strata =="LOW" or strata =="MEDIUM" or strata =="HIGH" or strata =="DIALOG" or strata =="FULLSCREEN" or strata =="FULLSCREEN_DIALOG" or strata =="TOOLTIP" then
if strata =="BACKGROUND" or strata =="LOW" or strata =="MEDIUM" or strata =="HIGH" or strata =="DIALOG" then
self.SetOpt("Strata", strata)
self.frame:SetFrameStrata(strata)
self.Result("Strata", strata)
else
self.Error("Invalid strata")
end
end
function MyBagsCoreClass:Report()
self.cmd:report({
{text="Columns", val=self.GetOpt("Columns")},
{text="Graphics", val=self.GetOpt("Graphics")},
{text="Lock", val=self.GetOpt("Lock"),map=ACEG_MAP_ONOFF},
{text="NoEsc", val=self.GetOpt("NoEsc"),map=ACEG_MAP_ONOFF},
{text="Title", val=self.GetOpt("Title"),map=ACEG_MAP_ONOFF},
{text="Cash", val=self.GetOpt("Cash"),map=ACEG_MAP_ONOFF},
{text="Buttons", val=self.GetOpt("Buttons"),map=ACEG_MAP_ONOFF},
{text="Border", val=self.GetOpt("Border"),map=ACEG_MAP_ONOFF},
{text="Player", val=self.GetOpt("Player"),map=ACEG_MAP_ONOFF},
{text="AIOI", val=self.GetOpt("AIOI"),map=ACEG_MAP_ONOFF},
{text="Scale", val=self.GetOpt("Scale")},
{text="Strata", val=self.GetOpt("Strata")},
{text="Anchor", val=self.GetOpt("Anchor")},
{text="Default Slot Color", val=ace.concat(self.GetOpt("SlotColor") or MYBAGS_SLOTCOLOR," ")},
})
if not self.isEquipment then
self.cmd:report({
{text="Default Slot Color", val=ace.concat(self.GetOpt("SlotColor") or MYBAGS_SLOTCOLOR," ")},
{text="Ammo Slot Color", val=ace.concat(self.GetOpt("AmmoColor") or MYBAGS_AMMOCOLOR," ")},
{text="Soul Slot Color", val=ace.concat(self.GetOpt("SoulColor") or MYBAGS_SHARDCOLOR," ")},
{text="Enchanting Slot Color", val=ace.concat(self.GetOpt("EnchantColor") or MYBAGS_ENCHANTCOLOR," ")},
{text="Engineering Slot Color", val=ace.concat(self.GetOpt("EngColor") or MYBAGS_ENGINEERCOLOR," ")},
{text="Herb Slot Color", val=ace.concat(self.GetOpt("HerbColor") or MYBAGS_HERBCOLOR," ")},
{text="Replace", val=self.GetOpt("Replace"),map=ACEG_MAP_ONOFF},
{text="Bag", val=self.GetOpt("Bag")},
{text="HlItems", val=self.GetOpt("HlItems"),map=ACEG_MAP_ONOFF},
{text="HlBags", val=self.GetOpt("HlBags"),map=ACEG_MAP_ONOFF},
{text="Freeze", val=self.GetOpt("Freeze")},
{text="Reverse", val=self.GetOpt("Reverse"),map=ACEG_MAP_ONOFF},
{text="Count", val=self.GetOpt("Count")},
{text="Anchor", val=self.GetOpt("Anchor")},
})
if not self.isBank then
self.cmd:report({
{text="Companion", val=self.GetOpt("Companion"),map=ACEG_MAP_ONOFF},
})
end
end
end
function MyBagsCoreClass:ResetSettings()
self.db:reset(self.profilePath, self.defaults)
self.Error("Settings reset to default")
self:ResetAnchor()
self:SetLockTexture()
self:SetUISpecialFrames()
self:SetFrozen()
self:LayoutFrame()
end
function MyBagsCoreClass:ResetAnchor()
if not self:SetAnchor(self.defaults.Anchor) then return end
anchorframe = self.frame:GetParent()
anchorframe:ClearAllPoints()
anchorframe:SetPoint(self.anchorPoint, self.anchorParent, self.anchorPoint, self.anchorOffsetX, self.anchorOffsetY)
self.frame:ClearAllPoints()
self.frame:SetPoint(self.anchorPoint, anchorframe, self.anchorPoint, 0, 0)
self.Error("Anchor Reset")
end
function MyBagsCoreClass:SetAnchor(point)
if point == "topleft" then
elseif point == "topright" then
elseif point == "bottomleft" then
elseif point == "bottomright" then
else self.Error("Invalid Entry for Anchor") return end
local anchorframe = self.frame:GetParent()
local top = self.frame:GetTop()
local left = self.frame:GetLeft()
local top1 = anchorframe:GetTop()
local left1 = anchorframe:GetLeft()
if not top or not left or not left1 or not top1 then
self.Error("Frame must be open to set anchor") return
end
self.frame:ClearAllPoints()
anchorframe:ClearAllPoints()
anchorframe:SetPoint(string.upper(point), self.frameName, string.upper(point), 0, 0)
top = anchorframe:GetTop()
left = anchorframe:GetLeft()
if not top or not left then
anchorframe:ClearAllPoints()
anchorframe:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOMLEFT", left1, top1-10)
point = string.upper(self.GetOpt("Anchor") or "bottomright")
self.frame:SetPoint(point, anchorframe:GetName(), point, 0,0)
self.Error("Frame must be open to set anchor") return
end
anchorframe:ClearAllPoints()
anchorframe:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOMLEFT", left, top-10)
self.frame:SetPoint(string.upper(point), anchorframe:GetName(), string.upper(point), 0, 0)
self.SetOpt("Anchor", point)
self.Result("Anchor", point)
self.anchorPoint = string.upper(point)
return TRUE
end
function MyBagsCoreClass:SetSpecialtyBagSlotColor(opt)
local r, g, b
opt, r, g, b = unpack(ace.ParseWords(opt))
-- self:debug("opt: |" .. opt .."| ")
if opt == "default" then
if r then
self.SetOpt("SlotColor", { ace.tonum(r), ace.tonum(g), ace.tonum(b)})
else
self.SetOpt("SlotColor")
end
end
if opt == "ammo" then
if r then
self.SetOpt("AmmoColor", { ace.tonum(r), ace.tonum(g), ace.tonum(b)})
else
self.SetOpt("AmmoColor")
end
end
if opt == "soul" or opt == "shard" then
if r then
self.SetOpt("ShardColor", {ace.tonum(r), ace.tonum(g), ace.tonum(b)})
else
self.SetOpt("ShardColor")
end
end
if opt == "enchant" then
if r then
self.SetOpt("EnchantColor", {ace.tonum(r), ace.tonum(g), ace.tonum(b)})
else
self.SetOpt("EnchantColor")
end
end
if opt == "engineer" then
if r then
self.SetOpt("EngColor", {ace.tonum(r), ace.tonum(g), ace.tonum(b)})
else
self.SetOpt("EngColor")
end
end
if opt == "herb" then
if r then
self.SetOpt("HerbColor", {ace.tonum(r), ace.tonum(g), ace.tonum(b)})
else
self.SetOpt("HerbColor")
end
end
if opt == "keyring" then
if r then
self.SetOpt("KeyRingColor", {ace.tonum(r), ace.tonum(g), ace.tonum(b)})
else
self.SetOpt("KeyRingColor")
end
end
self.Result("SlotColor", opt)
self:LayoutFrame()
end
function MyBagsCoreClass:SetCompanion()
if self.GetOpt("Companion") then
self:UnregisterEvent("AUCTION_HOUSE_SHOW")
self:UnregisterEvent("AUCTION_HOUSE_CLOSED")
self:UnregisterEvent("BANKFRAME_OPENED")
self:UnregisterEvent("BANKFRAME_CLOSED")
self:UnregisterEvent("MAIL_CLOSED")
self:UnregisterEvent("TRADE_CLOSED")
self:UnregisterEvent("TRADE_SHOW")
end
self.TogMsg("Companion", "Companion")
self:ChkCompanion()
end
function MyBagsCoreClass:ChkCompanion()
if self.GetOpt("Companion") then
self:RegisterEvent("AUCTION_HOUSE_SHOW","CompanionOpen")
self:RegisterEvent("AUCTION_HOUSE_CLOSED","CompanionClose")
self:RegisterEvent("BANKFRAME_OPENED","CompanionOpen")
self:RegisterEvent("BANKFRAME_CLOSED","CompanionClose")
self:RegisterEvent("MAIL_CLOSED","CompanionClose")
self:RegisterEvent("TRADE_CLOSED","CompanionClose")
self:RegisterEvent("TRADE_SHOW","CompanionOpen")
end
end