vanilla-wow-addons – Rev 1
?pathlinks?
--[[
All In One Inventory
By sarf
This mod allows you to view and interact with your inventory without caring about bags.
Thanks goes to SirBender for the background conversion and other stuff! :)
Thanks to amoeba for the ultra-nice Lock Button! Even if they lacked transparency. :)
CosmosUI URL:
http://www.cosmosui.org/forums/viewtopic.php?t=
]]
-- Constants
ALLINONEINVENTORY_MAX_ID = 109;
ALLINONEINVENTORY_WIDTH = 350;
ALLINONEINVENTORY_NUM_COLUMNS = 8;
ALLINONEINVENTORY_COLUMNS_MIN = 2;
ALLINONEINVENTORY_COLUMNS_MAX = 16;
ALLINONEINVENTORY_BASE_HEIGHT = 64;
ALLINONEINVENTORY_ROW_HEIGHT = 40;
ALLINONEINVENTORY_BASE_WIDTH = 26;
ALLINONEINVENTORY_COL_WIDTH = 40;
ALLINONEINVENTORY_ALPHA_MIN = 0;
ALLINONEINVENTORY_ALPHA_MAX = 1;
ALLINONEINVENTORY_SCALE_MIN = 0;
ALLINONEINVENTORY_SCALE_MAX = 2;
ALLINONEINVENTORY_SCHEDULENAME_UPDATE = "AllInOneInventory_UpdateBags";
ALLINONEINVENTORY_MAXIMUM_NUMBER_OF_BUTTONS = 109;
ALLINONEINVENTORY_MINIMUM_TIME_BETWEEN_UPDATES = 0.2;
-- Variables
AllInOneInventory_Enabled = 0;
AllInOneInventory_ReplaceBags = 0;
AllInOneInventory_IncludeShotBags = 1;
AllInOneInventory_ShowPrice = 1;
AllInOneInventory_Locked = 0;
AllInOneInventory_SwapBagOrder = 0;
AllInOneInventory_Alpha = 1;
AllInOneInventory_Scale = 1;
AllInOneInventory_ExcludeSlots = {};
AllInOneInventory_IncludeBagZero = 1;
AllInOneInventory_IncludeBagOne = 1;
AllInOneInventory_IncludeBagTwo = 1;
AllInOneInventory_IncludeBagThree = 1;
AllInOneInventory_IncludeBagFour = 1;
AllInOneInventory_ModifyTooltipsAtMerchant = 1;
AllInOneInventory_BagStringIndex = {
[0] = "Zero",
[1] = "One",
[2] = "Two",
[3] = "Three",
[4] = "Four",
};
AllInOneInventory_BagsToInclude = {
[0] = "AllInOneInventory_IncludeBagZero",
[1] = "AllInOneInventory_IncludeBagOne",
[2] = "AllInOneInventory_IncludeBagTwo",
[3] = "AllInOneInventory_IncludeBagThree",
[4] = "AllInOneInventory_IncludeBagFour",
};
AllInOneInventory_Columns = ALLINONEINVENTORY_NUM_COLUMNS;
AllInOneInventory_Patching_Tooltip = 0;
AllInOneInventory_Saved_SellValue_OnShow = nil;
AllInOneInventory_Saved_UseContainerItem = nil;
AllInOneInventory_Saved_ToggleBag = nil;
AllInOneInventory_Saved_OpenBag = nil;
AllInOneInventory_Saved_CloseBag = nil;
AllInOneInventory_Saved_ToggleBackpack = nil;
AllInOneInventory_Saved_CloseBackpack = nil;
AllInOneInventory_Saved_OpenBackpack = nil;
AllInOneInventory_Saved_BagSlotButton_OnClick = nil;
AllInOneInventory_Saved_BagSlotButton_OnDrag = nil;
AllInOneInventory_Saved_BackpackButton_OnClick = nil;
AllInOneInventory_Saved_CloseAllWindows = nil;
AllInOneInventory_Saved_OpenAllBags = nil;
AllInOneInventory_Saved_DepositBox_RefreshWindows = nil;
function AIOI_Schedule_Own(time, func, p1, p2, p3, p4, p5, p6, p7, p8, p9)
func(p1, p2, p3, p4, p5, p6, p7, p8, p9);
end
function AIOI_ScheduleByName_Own(name, time, func, p1, p2, p3, p4, p5, p6, p7, p8, p9)
func(p1, p2, p3, p4, p5, p6, p7, p8, p9);
end
-- executed on load, calls general set-up functions
function AllInOneInventoryScriptFrame_OnLoad()
local func = AIOI_ScheduleByName_Own;
if ( Chronos ) and ( Chronos.scheduleByName ) then
func = Chronos.scheduleByName;
elseif ( Cosmos_ScheduleByName ) then
func = Cosmos_ScheduleByName;
end
setglobal("AIOI_ScheduleByName", func);
func = AIOI_Schedule_Own;
if ( Chronos ) and ( Chronos.schedule ) then
func = Chronos.schedule;
elseif ( Cosmos_Schedule ) then
func = Cosmos_Schedule;
end
setglobal("AIOI_Schedule", func);
AllInOneInventory_Register();
AllInOneInventory_Setup_Hooks(1);
--DynamicData.item.addOnInventoryUpdateHandler(AllInOneInventoryFrame_OnInventoryUpdate);
end
function AllInOneInventory_Register_SlashCommands()
SlashCmdList["ALLINONEINVENTORYSLASHMAIN"] = AllInOneInventory_Main_ChatCommandHandler;
SLASH_ALLINONEINVENTORYSLASHMAIN1 = "/allinoneinventory";
SLASH_ALLINONEINVENTORYSLASHMAIN2 = "/aioi";
end
-- registers the mod with the system, integrating it with slash commands and "master" AddOns
function AllInOneInventory_Register()
this:RegisterEvent("PLAYER_LOGIN");
this:RegisterEvent("ADDON_LOADED");
AllInOneInventory_Register_SlashCommands()
end
function AllInOneInventory_Extract_NextParameter(msg)
local params = msg;
local command = params;
local index = strfind(command, " ");
if ( index ) then
command = strsub(command, 1, index-1);
params = strsub(params, index+1);
else
params = "";
end
return command, params;
end
function AllInOneInventory_GetItemInfo(id)
local bag, slot = AllInOneInventory_GetIdAsBagSlot(id);
return GetContainerItemInfo(bag, slot);
end
function AllInOneInventory_GetNumberOfSlotsInBag(bag)
local slots = 0;
if ( AllInOneInventory_ShouldIncludeBag(bag) ) then
slots = GetContainerNumSlots(bag);
if ( AllInOneInventory_ExcludeSlots ) and ( AllInOneInventory_ExcludeSlots[bag] ) then
local n = 0;
for k, v in AllInOneInventory_ExcludeSlots[bag] do
n = n + 1;
end
slots = slots - n;
end
end
return slots;
end
AllInOneInventory_GetBags_Table = {};
function AllInOneInventory_GetBags()
local bag = 0;
local bags = AllInOneInventory_GetBags_Table;
for bag = 0, 4 do
bags[bag] = AllInOneInventory_GetNumberOfSlotsInBag(bag);
end
return bags;
end
function AllInOneInventory_GetBagsTotalSlots()
local bags = AllInOneInventory_GetBags();
local slots = 0;
for k, v in bags do
slots = slots + v;
end
return slots;
end
function AllInOneInventory_GetIdAsBagSlot(id)
if ( not id ) then
--return 0, 1;
return nil, nil;
end
local bagSlots = AllInOneInventory_GetBags();
local leftId = id;
local curSlots = 0;
local bag, slots;
local ok = true;
local bag = 0;
if ( AllInOneInventory_SwapBagOrder == 1 ) then
bag = 4;
end
while ( ok ) do
curSlots = bagSlots[bag];
if ( not curSlots ) then
curSlots = 0;
end
if ( leftId - curSlots <= 0 ) then
if ( AllInOneInventory_ExcludeSlots[bag] ) then
for i = 1, leftId do
if ( AllInOneInventory_ExcludeSlots[bag][i] ) then
leftId = leftId + 1;
end
end
end
return bag, leftId;
else
leftId = leftId - curSlots;
end
if ( AllInOneInventory_SwapBagOrder == 1 ) then
bag = bag - 1;
if ( bag < 0 ) then
ok = false;
end
else
bag = bag + 1;
if ( bag > 4 ) then
ok = false;
end
end
end
return -1, -1;
end
function AllInOneInventory_CommandUsage()
for k, v in ALLINONEINVENTORY_CHAT_COMMAND_USAGE do
AllInOneInventory_Print(v);
end
end
-- Handles chat - e.g. slashcommands - enabling/disabling the AllInOneInventory
function AllInOneInventory_Main_ChatCommandHandler(msg)
local func = AllInOneInventory_Toggle_Enabled;
local toggleFunc = true;
if ( ( not msg) or ( strlen(msg) <= 0 ) ) then
AllInOneInventory_CommandUsage();
return;
end
local commandName, params = AllInOneInventory_Extract_NextParameter(msg);
if ( ( commandName ) and ( strlen(commandName) > 0 ) ) then
commandName = string.lower(commandName);
else
commandName = "";
end
if ( strfind( commandName, "state" ) ) then
func = AllInOneInventory_Toggle_Enabled;
elseif ( ( ( strfind( commandName, "togglebag" ) ) ) ) then
local bagNumber;
bagNumber, params = AllInOneInventory_Extract_NextParameter(params);
func = nil;
bagNumber = tonumber(bagNumber);
if ( bagNumber ) then
local str = AllInOneInventory_BagStringIndex[bagNumber];
if ( str ) then
func = getglobal(format("AllInOneInventory_Toggle_IncludeBag%s", str));
end
end
if ( func ) then
func(-1);
else
AllInOneInventory_Print(ALLINFOURINVENTORY_CHAT_NO_SUCH_BAGNUMBER);
end
return;
elseif ( ( ( strfind( commandName, "toggleslot" ) ) ) ) then
local bagNumber;
local slotNumber;
bagNumber, params = AllInOneInventory_Extract_NextParameter(params);
slotNumber, params = AllInOneInventory_Extract_NextParameter(params);
return AllInOneInventory_Toggle_ExcludedSlot(bagNumber, slotNumber);
elseif ( ( strfind( commandName, "swap" ) ) or ( ( strfind( commandName, "order" ) ) ) ) then
func = AllInOneInventory_Toggle_SwapBagOrder;
toggleFunc = false;
elseif ( ( ( strfind( commandName, "toggle" ) ) ) ) then
func = ToggleAllInOneInventoryFrame;
toggleFunc = false;
elseif ( ( strfind( commandName, "show" ) ) ) then
func = OpenAllInOneInventoryFrame;
toggleFunc = false;
elseif ( ( strfind( commandName, "hide" ) ) ) then
func = CloseAllInOneInventoryFrame;
toggleFunc = false;
elseif ( ( strfind( commandName, "replacebag" ) ) or ( ( strfind( commandName, "hijackbag" ) ) ) ) then
func = AllInOneInventory_Toggle_ReplaceBags;
elseif ( strfind( commandName, "include" ) ) then
func = AllInOneInventory_Toggle_IncludeShotBags;
elseif ( strfind( commandName, "reset" ) ) then
func = AllInOneInventoryFrame_ResetButton;
func();
AllInOneInventory_Print(TEXT(ALLINONEINVENTORY_CHAT_RESETPOSITION));
return;
elseif ( ( strfind( commandName, "setcols" ) ) or ( ( strfind( commandName, "cols" ) ) ) or ( ( strfind( commandName, "column" ) ) ) ) then
func = AllInOneInventory_Change_Columns;
toggleFunc = false;
local cols = 0;
cols, params = AllInOneInventory_Extract_NextParameter(params);
cols = tonumber(cols);
if ( not cols ) then
AllInOneInventory_CommandUsage();
return;
else
return func(1, cols);
end
elseif ( strfind( commandName, "alpha" ) ) then
func = AllInOneInventory_Change_Alpha;
toggleFunc = false;
local cols = 0;
cols, params = AllInOneInventory_Extract_NextParameter(params);
cols = tonumber(cols);
if ( not cols ) then
AllInOneInventory_CommandUsage();
return;
else
return func(1, cols);
end
elseif ( strfind( commandName, "scale" ) ) or ( strfind( commandName, "size" ) ) then
func = AllInOneInventory_Change_Scale;
toggleFunc = false;
local cols = 0;
cols, params = AllInOneInventory_Extract_NextParameter(params);
cols = tonumber(cols);
if ( not cols ) then
AllInOneInventory_CommandUsage();
return;
else
return func(1, cols);
end
else
AllInOneInventory_CommandUsage();
return;
end
if ( toggleFunc ) then
-- Toggle appropriately
if ( (string.find(params, 'on')) or ((string.find(params, '1')) and (not string.find(params, '-1')) ) ) then
func(1);
else
if ( (string.find(params, 'off')) or (string.find(params, '0')) ) then
func(0);
else
func(-1);
end
end
else
func();
end
end
function UseAllInOneInventoryItem(id)
local b,s = AllInOneInventory_GetIdAsBagSlot(id);
if ( ( b > -1 ) and ( s > -1 ) ) then
return AllInOneInventory_Saved_UseContainerItem(b, s);
end
return false;
end
-- Does things with the hooked function
function AllInOneInventory_UseContainerItem(bag, slot)
if ( not slot ) then
local b,s = AllInOneInventory_GetIdAsBagSlot(bag);
if ( ( b > -1 ) and ( s > -1 ) ) then
return AllInOneInventory_Saved_UseContainerItem(b, s);
end
end
return AllInOneInventory_Saved_UseContainerItem(bag, slot);
end
AllInOneInventory_ContainerFrames = {
[1] = "ContainerFrame1",
[2] = "ContainerFrame2",
[3] = "ContainerFrame3",
[4] = "ContainerFrame4",
[5] = "ContainerFrame5",
[6] = "ContainerFrame6",
[7] = "ContainerFrame7",
[8] = "ContainerFrame8",
[9] = "ContainerFrame9",
[10] = "ContainerFrame10",
[11] = "ContainerFrame11",
};
function AllInOneInventory_ToggleBackpack()
if ( AllInOneInventory_ReplaceBags == 1 ) then
if ( AllInOneInventoryFrame:IsVisible() ) then
local frame = nil;
local frameName = nil;
for i=1, NUM_CONTAINER_FRAMES, 1 do
frameName = AllInOneInventory_ContainerFrames[i];
if ( not frameName ) then frameName = "ContainerFrame"..i; end
frame = getglobal(frameName);
if ( frame:IsVisible() ) then
frame:Hide();
end
end
CloseAllInOneInventoryFrame();
else
OpenAllInOneInventoryFrame();
end
else
AllInOneInventory_Saved_ToggleBackpack()
end
AllInOneInventory_UpdateBagState();
end
function AllInOneInventory_BagSlotButton_OnClick()
AllInOneInventory_Saved_BagSlotButton_OnClick()
AllInOneInventory_UpdateBagState();
end
function AllInOneInventory_BagSlotButton_OnDrag()
AllInOneInventory_Saved_BagSlotButton_OnDrag()
AllInOneInventory_UpdateBagState();
end
function AllInOneInventory_BackpackButton_OnClick()
AllInOneInventory_Saved_BackpackButton_OnClick()
AllInOneInventory_UpdateBagState();
end
function AllInOneInventory_OpenBackpack()
if ( AllInOneInventory_ReplaceBags == 1 ) then
OpenAllInOneInventoryFrame();
return;
end
AllInOneInventory_Saved_OpenBackpack();
AllInOneInventory_UpdateBagState();
end
function AllInOneInventory_CloseBackpack()
if ( AllInOneInventory_ReplaceBags == 1 ) then
CloseAllInOneInventoryFrame();
return;
end
AllInOneInventory_Saved_CloseBackpack();
AllInOneInventory_UpdateBagState();
end
function AllInOneInventory_IsShotBag(bag)
if ( bag < 0 ) or ( bag > 4 ) then
return false;
end
local name = "MainMenuBarBackpackButton";
if ( bag > 0 ) then
name = "CharacterBag"..(bag-1).."Slot";
end
local objCount = getglobal(name.."Count");
if ( objCount ) and ( objCount:IsVisible() ) then
local tmp = objCount:GetText();
if ( ( tmp ) and ( strlen(tmp) > 0) ) then
return true;
end
end
return false;
end
function AllInOneInventory_ShouldIncludeBag(bag)
if ( ( bag >= 0 ) and ( bag <= 4 ) ) then
if ( getglobal(AllInOneInventory_BagsToInclude[bag]) ~= 1 ) then
return false;
end
if ( ( AllInOneInventory_IncludeShotBags == 1 ) or ( not AllInOneInventory_IsShotBag(bag) ) ) then
return true;
else
return false;
end
return true;
end
return false;
end
function AllInOneInventory_ShouldOverrideBag(bag)
if ( AllInOneInventory_ReplaceBags == 1 ) then
if ( AllInOneInventory_ShouldIncludeBag(bag) ) then
return true;
else
return false;
end
else
return false;
end
end
function AllInOneInventory_ToggleBag(bag)
if ( AllInOneInventory_ShouldOverrideBag(bag) ) then
ToggleAllInOneInventoryFrame();
return;
else
AllInOneInventory_Saved_ToggleBag(bag);
AllInOneInventory_UpdateBagState();
end
end
function AllInOneInventory_CloseBag(bag)
if ( AllInOneInventory_ShouldOverrideBag(bag) ) then
return;
else
AllInOneInventory_Saved_CloseBag(bag);
AllInOneInventory_UpdateBagState();
end
end
function AllInOneInventory_OpenBag(bag)
if ( AllInOneInventory_ShouldOverrideBag(bag) ) then
return;
else
AllInOneInventory_Saved_OpenBag(bag)
AllInOneInventory_UpdateBagState();
end
end
-- Hooks/unhooks functions. If toggle is 1, hooks functions, otherwise it unhooks functions.
-- Hooking functions mean that you replace them with your own functions and then call the
-- original function at your leisure.
function AllInOneInventory_Setup_Hooks(toggle)
if ( toggle == 1 ) then
if ( DepositBox_RefreshWindows ) and ( AllInOneInventory_Saved_DepositBox_RefreshWindows ~= DepositBox_RefreshWindows ) and ( AllInOneInventory_Saved_DepositBox_RefreshWindows == nil ) then
AllInOneInventory_Saved_DepositBox_RefreshWindows = DepositBox_RefreshWindows;
DepositBox_RefreshWindows = AllInOneInventory_DepositBox_RefreshWindows;
end
if ( SellValue_OnShow ) and ( SellValue_OnShow ~= AllInOneInventory_SellValue_OnShow ) and (AllInOneInventory_Saved_SellValue_OnShow == nil) then
AllInOneInventory_Saved_SellValue_OnShow = SellValue_OnShow;
SellValue_OnShow = AllInOneInventory_SellValue_OnShow;
end
if ( ( UseContainerItem ~= AllInOneInventory_UseContainerItem ) and (AllInOneInventory_Saved_UseContainerItem == nil) ) then
AllInOneInventory_Saved_UseContainerItem = UseContainerItem;
UseContainerItem = AllInOneInventory_UseContainerItem;
end
if ( ( ToggleBag ~= AllInOneInventory_ToggleBag ) and (AllInOneInventory_Saved_ToggleBag == nil) ) then
AllInOneInventory_Saved_ToggleBag = ToggleBag;
ToggleBag = AllInOneInventory_ToggleBag;
end
if ( ( CloseBag ~= AllInOneInventory_CloseBag ) and (AllInOneInventory_Saved_CloseBag == nil) ) then
AllInOneInventory_Saved_CloseBag = CloseBag;
CloseBag = AllInOneInventory_CloseBag;
end
if ( ( OpenBag ~= AllInOneInventory_OpenBag ) and (AllInOneInventory_Saved_OpenBag == nil) ) then
AllInOneInventory_Saved_OpenBag = OpenBag;
OpenBag = AllInOneInventory_OpenBag;
end
if ( ( ToggleBackpack ~= AllInOneInventory_ToggleBackpack ) and (AllInOneInventory_Saved_ToggleBackpack == nil) ) then
AllInOneInventory_Saved_ToggleBackpack = ToggleBackpack;
ToggleBackpack = AllInOneInventory_ToggleBackpack;
end
if ( ( CloseBackpack ~= AllInOneInventory_CloseBackpack ) and (AllInOneInventory_Saved_CloseBackpack == nil) ) then
AllInOneInventory_Saved_CloseBackpack = CloseBackpack;
CloseBackpack = AllInOneInventory_CloseBackpack;
end
if ( ( OpenBackpack ~= AllInOneInventory_OpenBackpack ) and (AllInOneInventory_Saved_OpenBackpack == nil) ) then
AllInOneInventory_Saved_OpenBackpack = OpenBackpack;
OpenBackpack = AllInOneInventory_OpenBackpack;
end
if ( ( BagSlotButton_OnClick ~= AllInOneInventory_BagSlotButton_OnClick ) and (AllInOneInventory_Saved_BagSlotButton_OnClick == nil) ) then
AllInOneInventory_Saved_BagSlotButton_OnClick = BagSlotButton_OnClick;
BagSlotButton_OnClick = AllInOneInventory_BagSlotButton_OnClick;
end
if ( ( BagSlotButton_OnDrag ~= AllInOneInventory_BagSlotButton_OnDrag ) and (AllInOneInventory_Saved_BagSlotButton_OnDrag == nil) ) then
AllInOneInventory_Saved_BagSlotButton_OnDrag = BagSlotButton_OnDrag;
BagSlotButton_OnDrag = AllInOneInventory_BagSlotButton_OnDrag;
end
if ( ( BackpackButton_OnClick ~= AllInOneInventory_BackpackButton_OnClick ) and (AllInOneInventory_Saved_BackpackButton_OnClick == nil) ) then
AllInOneInventory_Saved_BackpackButton_OnClick = BackpackButton_OnClick;
BackpackButton_OnClick = AllInOneInventory_BackpackButton_OnClick;
end
if ( ( CloseAllWindows ~= AllInOneInventory_CloseAllWindows ) and (AllInOneInventory_Saved_CloseAllWindows == nil) ) then
AllInOneInventory_Saved_CloseAllWindows = CloseAllWindows;
CloseAllWindows = AllInOneInventory_CloseAllWindows;
end
if ( ( OpenAllBags ~= AllInOneInventory_OpenAllBags ) and (AllInOneInventory_Saved_OpenAllBags == nil) ) then
AllInOneInventory_Saved_OpenAllBags = OpenAllBags;
OpenAllBags = AllInOneInventory_OpenAllBags;
end
else
if ( DepositBox_RefreshWindows == AllInOneInventory_Saved_DepositBox_RefreshWindows ) then
AllInOneInventory_Saved_DepositBox_RefreshWindows = DepositBox_RefreshWindows;
DepositBox_RefreshWindows = AllInOneInventory_DepositBox_RefreshWindows;
end
if ( SellValue_OnShow == AllInOneInventory_SellValue_OnShow) then
SellValue_OnShow = AllInOneInventory_Saved_SellValue_OnShow;
AllInOneInventory_Saved_SellValue_OnShow = nil;
end
if ( UseContainerItem == AllInOneInventory_UseContainerItem) then
UseContainerItem = AllInOneInventory_Saved_UseContainerItem;
AllInOneInventory_Saved_UseContainerItem = nil;
end
if ( ToggleBag == AllInOneInventory_ToggleBag) then
ToggleBag = AllInOneInventory_Saved_ToggleBag;
AllInOneInventory_Saved_ToggleBag = nil;
end
if ( CloseBag == AllInOneInventory_CloseBag) then
CloseBag = AllInOneInventory_Saved_CloseBag;
AllInOneInventory_Saved_CloseBag = nil;
end
if ( OpenBag == AllInOneInventory_OpenBag) then
OpenBag = AllInOneInventory_Saved_OpenBag;
AllInOneInventory_Saved_OpenBag = nil;
end
if ( ToggleBackpack == AllInOneInventory_ToggleBackpack) then
ToggleBackpack = AllInOneInventory_Saved_ToggleBackpack;
AllInOneInventory_Saved_ToggleBackpack = nil;
end
if ( CloseBackpack == AllInOneInventory_CloseBackpack) then
CloseBackpack = AllInOneInventory_Saved_CloseBackpack;
AllInOneInventory_Saved_CloseBackpack = nil;
end
if ( OpenBackpack == AllInOneInventory_OpenBackpack) then
OpenBackpack = AllInOneInventory_Saved_OpenBackpack;
AllInOneInventory_Saved_OpenBackpack = nil;
end
if ( BagSlotButton_OnClick == AllInOneInventory_BagSlotButton_OnClick) then
BagSlotButton_OnClick = AllInOneInventory_Saved_BagSlotButton_OnClick;
AllInOneInventory_Saved_BagSlotButton_OnClick = nil;
end
if ( BagSlotButton_OnDrag == AllInOneInventory_BagSlotButton_OnDrag) then
BagSlotButton_OnDrag = AllInOneInventory_Saved_BagSlotButton_OnDrag;
AllInOneInventory_Saved_BagSlotButton_OnDrag = nil;
end
if ( BackpackButton_OnClick == AllInOneInventory_BackpackButton_OnClick) then
BackpackButton_OnClick = AllInOneInventory_Saved_BackpackButton_OnClick;
AllInOneInventory_Saved_BackpackButton_OnClick = nil;
end
if ( CloseAllWindows == AllInOneInventory_CloseAllWindows) then
CloseAllWindows = AllInOneInventory_Saved_CloseAllWindows;
AllInOneInventory_Saved_CloseAllWindows = nil;
end
if ( OpenAllBags == AllInOneInventory_OpenAllBags) then
OpenAllBags = AllInOneInventory_Saved_OpenAllBags;
AllInOneInventory_Saved_OpenAllBags = nil;
end
end
end
-- Handles events
function AllInOneInventoryScriptFrame_OnEvent(event)
if ( event == "PLAYER_LOGIN" ) then
local value = getglobal("AllInOneInventory_Enabled");
if (value == nil ) then
-- defaults to off
value = 0;
end
AllInOneInventory_Toggle_Enabled(value);
local value = getglobal("AllInOneInventory_ReplaceBags");
if (value == nil ) then
-- defaults to off
value = 0;
end
AllInOneInventory_Toggle_ReplaceBags(value);
local value = getglobal("AllInOneInventory_SwapBagOrder");
if (value == nil ) then
-- defaults to off
value = 0;
end
AllInOneInventory_Toggle_SwapBagOrder(value);
local value = getglobal("AllInOneInventory_Alpha");
if (value == nil ) then
-- defaults to off
value = 0;
end
AllInOneInventory_Change_Alpha(1, value);
local value = getglobal("AllInOneInventory_Scale");
if (value == nil ) then
-- defaults to off
value = 0;
end
AllInOneInventory_Change_Scale(1, value);
local value = getglobal("AllInOneInventory_IncludeShotBags");
if (value == nil ) then
-- defaults to off
value = 1;
end
AllInOneInventory_Toggle_IncludeShotBags(value);
local value = getglobal("AllInOneInventory_Columns");
if (value == nil ) or ( value <= 0 ) then
-- defaults to 8
value = ALLINONEINVENTORY_NUM_COLUMNS;
end
AllInOneInventory_Change_Columns(1, value);
local func = nil;
for k, v in AllInOneInventory_BagStringIndex do
func = getglobal(string.format("AllInOneInventory_Toggle_IncludeBag%s", v));
value = getglobal(string.format("AllInOneInventory_IncludeBag%s", v));
if ( not value ) then
value = 1;
end
if ( func ) then
func(value);
end
end
local value = AllInOneInventory_Locked;
if ( not value ) or ( value <= 0 ) then
-- defaults to off
value = 0;
end
AllInOneInventory_Toggle_Locked(value);
elseif ( event == "ADDON_LOADED" ) then
if ( IsAddOnLoaded("DepositBox") ) then
end
AllInOneInventory_Setup_Hooks(1);
end
end
-- Toggles the enabled/disabled state of an option and returns the new state
-- if toggle is 1, it's enabled
-- if toggle is 0, it's disabled
-- otherwise, it's toggled
function AllInOneInventory_Generic_Toggle(toggle, variableName, enableMessage, disableMessage, CosmosVarName)
local oldvalue = getglobal(variableName);
local newvalue = toggle;
if ( ( toggle ~= 1 ) and ( toggle ~= 0 ) ) then
if (oldvalue == 1) then
newvalue = 0;
elseif ( oldvalue == 0 ) then
newvalue = 1;
else
newvalue = 0;
end
end
setglobal(variableName, newvalue);
if ( newvalue ~= oldvalue ) then
local text = "";
if ( newvalue == 1 ) then
if ( enableMessage ) then
text = TEXT(getglobal(enableMessage));
end
else
if ( disableMessage ) then
text = TEXT(getglobal(disableMessage));
end
end
if ( text ) and ( strlen(text) > 0 ) then
AllInOneInventory_Print(text);
end
end
return newvalue;
end
-- Toggles the enabled/disabled state of the AllInOneInventory
-- if toggle is 1, it's enabled
-- if toggle is 0, it's disabled
-- otherwise, it's toggled
function AllInOneInventory_Toggle_Enabled(toggle)
AllInOneInventory_DoToggle_Enabled(toggle, true);
end
-- does the actual toggling
function AllInOneInventory_DoToggle_Enabled(toggle, showText)
local newvalue = 0;
if ( showText ) then
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_Enabled", "ALLINONEINVENTORY_CHAT_ENABLED", "ALLINONEINVENTORY_CHAT_DISABLED");
else
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_Enabled");
end
end
-- toggling - no text
function AllInOneInventory_Toggle_Enabled_NoChat(toggle)
AllInOneInventory_DoToggle_Enabled(toggle, false);
end
function AllInOneInventory_Toggle_Enabled(toggle)
AllInOneInventory_DoToggle_Enabled(toggle, true);
end
-- does the actual toggling
function AllInOneInventory_DoToggle_ReplaceBags(toggle, showText)
local newvalue = 0;
if ( showText ) then
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_ReplaceBags", "ALLINONEINVENTORY_CHAT_REPLACEBAGS_ENABLED", "ALLINONEINVENTORY_CHAT_REPLACEBAGS_DISABLED");
else
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_ReplaceBags");
end
if ( newvalue == 1 ) then
AllInOneInventory_Saved_CloseBackpack();
end
end
-- toggling - no text
function AllInOneInventory_Toggle_ReplaceBags_NoChat(toggle)
AllInOneInventory_DoToggle_ReplaceBags(toggle, false);
end
function AllInOneInventory_Toggle_ReplaceBags(toggle)
AllInOneInventory_DoToggle_ReplaceBags(toggle, true);
end
-- does the actual toggling
function AllInOneInventory_DoToggle_IncludeShotBags(toggle, showText)
local newvalue = 0;
if ( showText ) then
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_IncludeShotBags", "ALLINONEINVENTORY_CHAT_INCLUDE_SHOTBAGS_ENABLED", "ALLINONEINVENTORY_CHAT_INCLUDE_SHOTBAGS_DISABLED");
else
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_IncludeShotBags");
end
local frame = getglobal("AllInOneInventoryFrame");
if ( frame ) then
AllInOneInventoryFrame_Update(frame);
AllInOneInventory_UpdateBagState();
end
end
-- toggling - no text
function AllInOneInventory_Toggle_IncludeShotBags_NoChat(toggle)
AllInOneInventory_DoToggle_IncludeShotBags(toggle, false);
end
function AllInOneInventory_Toggle_IncludeShotBags(toggle)
AllInOneInventory_DoToggle_IncludeShotBags(toggle, true);
end
-- does the actual toggling
function AllInOneInventory_DoToggle_IncludeBagZero(toggle, showText)
local newvalue = 0;
if ( showText ) then
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_IncludeBagZero", "ALLINONEINVENTORY_CHAT_INCLUDE_BAGZERO_ENABLED", "ALLINONEINVENTORY_CHAT_INCLUDE_BAGZERO_DISABLED");
else
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_IncludeBagZero");
end
local frame = getglobal("AllInOneInventoryFrame");
if ( frame ) then
AllInOneInventoryFrame_Update(frame);
AllInOneInventory_UpdateBagState();
end
end
-- toggling - no text
function AllInOneInventory_Toggle_IncludeBagZero_NoChat(toggle)
AllInOneInventory_DoToggle_IncludeBagZero(toggle, false);
end
function AllInOneInventory_Toggle_IncludeBagZero(toggle)
AllInOneInventory_DoToggle_IncludeBagZero(toggle, true);
end
-- does the actual toggling
function AllInOneInventory_DoToggle_IncludeBagOne(toggle, showText)
local newvalue = 0;
if ( showText ) then
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_IncludeBagOne", "ALLINONEINVENTORY_CHAT_INCLUDE_BAGONE_ENABLED", "ALLINONEINVENTORY_CHAT_INCLUDE_BAGONE_DISABLED");
else
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_IncludeBagOne");
end
local frame = getglobal("AllInOneInventoryFrame");
if ( frame ) then
AllInOneInventoryFrame_Update(frame);
AllInOneInventory_UpdateBagState();
end
end
-- toggling - no text
function AllInOneInventory_Toggle_IncludeBagOne_NoChat(toggle)
AllInOneInventory_DoToggle_IncludeBagOne(toggle, false);
end
function AllInOneInventory_Toggle_IncludeBagOne(toggle)
AllInOneInventory_DoToggle_IncludeBagOne(toggle, true);
end
-- does the actual toggling
function AllInOneInventory_DoToggle_IncludeBagTwo(toggle, showText)
local newvalue = 0;
if ( showText ) then
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_IncludeBagTwo", "ALLINONEINVENTORY_CHAT_INCLUDE_BAGTWO_ENABLED", "ALLINONEINVENTORY_CHAT_INCLUDE_BAGTWO_DISABLED");
else
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_IncludeBagTwo");
end
local frame = getglobal("AllInOneInventoryFrame");
if ( frame ) then
AllInOneInventoryFrame_Update(frame);
AllInOneInventory_UpdateBagState();
end
end
-- toggling - no text
function AllInOneInventory_Toggle_IncludeBagTwo_NoChat(toggle)
AllInOneInventory_DoToggle_IncludeBagTwo(toggle, false);
end
function AllInOneInventory_Toggle_IncludeBagTwo(toggle)
AllInOneInventory_DoToggle_IncludeBagTwo(toggle, true);
end
-- does the actual toggling
function AllInOneInventory_DoToggle_IncludeBagThree(toggle, showText)
local newvalue = 0;
if ( showText ) then
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_IncludeBagThree", "ALLINONEINVENTORY_CHAT_INCLUDE_BAGTHREE_ENABLED", "ALLINONEINVENTORY_CHAT_INCLUDE_BAGTHREE_DISABLED");
else
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_IncludeBagThree");
end
local frame = getglobal("AllInOneInventoryFrame");
if ( frame ) then
AllInOneInventoryFrame_Update(frame);
AllInOneInventory_UpdateBagState();
end
end
-- toggling - no text
function AllInOneInventory_Toggle_IncludeBagThree_NoChat(toggle)
AllInOneInventory_DoToggle_IncludeBagThree(toggle, false);
end
function AllInOneInventory_Toggle_IncludeBagThree(toggle)
AllInOneInventory_DoToggle_IncludeBagThree(toggle, true);
end
-- does the actual toggling
function AllInOneInventory_DoToggle_IncludeBagFour(toggle, showText)
local newvalue = 0;
if ( showText ) then
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_IncludeBagFour", "ALLINONEINVENTORY_CHAT_INCLUDE_BAGFOUR_ENABLED", "ALLINONEINVENTORY_CHAT_INCLUDE_BAGFOUR_DISABLED");
else
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_IncludeBagFour");
end
local frame = getglobal("AllInOneInventoryFrame");
if ( frame ) then
AllInOneInventoryFrame_Update(frame);
AllInOneInventory_UpdateBagState();
end
end
-- toggling - no text
function AllInOneInventory_Toggle_IncludeBagFour_NoChat(toggle)
AllInOneInventory_DoToggle_IncludeBagFour(toggle, false);
end
function AllInOneInventory_Toggle_IncludeBagFour(toggle)
AllInOneInventory_DoToggle_IncludeBagFour(toggle, true);
end
function AllInOneInventory_Generic_Number(value, variableName, message, formatValueMessage)
local oldvalue = getglobal(variableName);
local newvalue = value;
if ( type(newvalue) ~= "number" ) then
newvalue = tonumber(oldvalue);
if ( not newvalue ) then
return;
end
end
setglobal(variableName, newvalue);
if ( newvalue ~= oldvalue ) then
local text = nil;
if ( formatValueMessage ) then
text = format(TEXT(getglobal(formatValueMessage)), newvalue);
elseif ( message ) then
text = TEXT(getglobal(formatValueMessage));
end
if ( text ) and ( strlen(text) > 0 ) then
AllInOneInventory_Print(text);
end
end
return newvalue;
end
function AllInOneInventory_Generic_Value(value, variableName, message, formatValueMessage)
local oldvalue = getglobal(variableName);
local newvalue = value;
setglobal(variableName, newvalue);
if ( newvalue ~= oldvalue ) then
local text = nil;
if ( formatValueMessage ) then
text = format(TEXT(getglobal(formatValueMessage)), newvalue);
elseif ( message ) then
text = TEXT(getglobal(formatValueMessage));
end
if ( text ) and ( strlen(text) > 0 ) then
AllInOneInventory_Print(text);
end
end
return newvalue;
end
-- does the actual setting
function AllInOneInventory_DoChange_Columns(value, showText)
local newvalue = 0;
if ( showText ) then
newvalue = AllInOneInventory_Generic_Number(value, "AllInOneInventory_Columns", nil, "ALLINONEINVENTORY_CHAT_COLUMNS_FORMAT");
else
newvalue = AllInOneInventory_Generic_Number(value, "AllInOneInventory_Columns");
end
AllInOneInventoryFrame_SetColumns(newvalue);
end
-- toggling - no text
function AllInOneInventory_Change_Columns_NoChat(toggle, value)
AllInOneInventory_DoChange_Columns(value, false);
end
function AllInOneInventory_Change_Columns(toggle, value)
AllInOneInventory_DoChange_Columns(value, true);
end
function AllInOneInventory_DoToggle_SwapBagOrder(toggle, showText)
local newvalue = 0;
if ( showText ) then
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_SwapBagOrder", "ALLINONEINVENTORY_CHAT_SWAP_BAG_ORDER_ENABLED", "ALLINONEINVENTORY_CHAT_SWAP_BAG_ORDER_DISABLED");
else
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_SwapBagOrder");
end
end
function AllInOneInventory_Toggle_SwapBagOrder_NoChat(toggle)
AllInOneInventory_DoToggle_SwapBagOrder(toggle, false);
end
function AllInOneInventory_Toggle_SwapBagOrder(toggle)
AllInOneInventory_DoToggle_SwapBagOrder(toggle, true);
end
function AllInOneInventoryFrame_SetAlpha(alpha)
if ( not alpha ) then
return;
end
if ( type(alpha) ~= "number" ) then
alpha = tonumber(alpha);
if ( not alpha ) then
return;
end
end
if ( alpha > ALLINONEINVENTORY_ALPHA_MAX ) then
alpha = ALLINONEINVENTORY_ALPHA_MAX;
end
if ( alpha <= ALLINONEINVENTORY_ALPHA_MIN ) then
local parentAlpha = 1;
if ( UIParent ) and ( UIParent.GetAlpha ) then
parentAlpha = UIParent:GetAlpha();
if ( not parentAlpha ) then
parentAlpha = 1;
end
end
if ( parentAlpha ) then
alpha = parentAlpha;
end
end
if ( not alpha ) then
return;
end
AllInOneInventoryFrame:SetAlpha(alpha);
end
function AllInOneInventory_DoChange_Alpha(value, showText)
local newvalue = 0;
if ( showText ) then
newvalue = AllInOneInventory_Generic_Number(value, "AllInOneInventory_Alpha", nil, "ALLINONEINVENTORY_CHAT_ALPHA_FORMAT");
else
newvalue = AllInOneInventory_Generic_Number(value, "AllInOneInventory_Alpha");
end
AllInOneInventoryFrame_SetAlpha(newvalue);
end
-- toggling - no text
function AllInOneInventory_Change_Alpha_NoChat(toggle, value)
AllInOneInventory_DoChange_Alpha(value, false);
end
function AllInOneInventory_Change_Alpha(toggle, value)
AllInOneInventory_DoChange_Alpha(value, true);
end
function AllInOneInventoryFrame_SetScale(scale)
if ( not scale ) then
return;
end
if ( type(scale) ~= "number" ) then
scale = tonumber(scale);
if ( not scale ) then
return;
end
end
if ( scale > ALLINONEINVENTORY_SCALE_MAX ) then
scale = ALLINONEINVENTORY_SCALE_MAX;
end
if ( scale <= ALLINONEINVENTORY_SCALE_MIN ) then
scale = 1;
-- Since patch 1.9, scales are relative to parent.
-- The code block below is not necessary
--[[
local parentScale = 1;
if ( UIParent ) and ( UIParent.GetScale ) then
parentScale = UIParent:GetScale();
if ( not parentScale ) then
parentScale = 1;
end
end
if ( parentScale ) then
scale = parentScale;
end
]]--
end
if ( not scale ) then
return;
end
AllInOneInventoryFrame:SetScale(scale);
end
function AllInOneInventory_DoChange_Scale(value, showText)
local newvalue = 1;
if ( showText ) then
newvalue = AllInOneInventory_Generic_Number(value, "AllInOneInventory_Scale", nil, "ALLINONEINVENTORY_CHAT_SCALE_FORMAT");
else
newvalue = AllInOneInventory_Generic_Number(value, "AllInOneInventory_Scale");
end
AllInOneInventoryFrame_SetScale(newvalue);
end
-- toggling - no text
function AllInOneInventory_Change_Scale_NoChat(toggle, value)
AllInOneInventory_DoChange_Scale(value, false);
end
function AllInOneInventory_Change_Scale(toggle, value)
AllInOneInventory_DoChange_Scale(value, true);
end
-- Prints out text to a chat box.
function AllInOneInventory_Print(msg,r,g,b,frame,id,unknown4th)
if (not r) then r = 1.0; end
if (not g) then g = 1.0; end
if (not b) then b = 0.0; end
if ( Print ) then
Print(msg, r, g, b, frame, id, unknown4th);
return;
end
if(unknown4th) then
local temp = id;
id = unknown4th;
unknown4th = id;
end
if ( frame ) then
frame:AddMessage(msg,r,g,b,id,unknown4th);
else
if ( DEFAULT_CHAT_FRAME ) then
DEFAULT_CHAT_FRAME:AddMessage(msg, r, g, b,id,unknown4th);
end
end
end
function AllInOneInventory_IsBagOpen(id)
local formatStr = "ContainerFrame%d";
local frame = nil;
for i = 1, NUM_CONTAINER_FRAMES do
frame = getglobal(format(formatStr, i));
if ( ( frame ) and ( frame:IsVisible() ) and ( frame:GetID() == id ) ) then
return true;
end
end
return false;
end
function AllInOneInventory_GetBagState(bag, baseToggle)
if ( AllInOneInventory_ShouldOverrideBag(bag) ) then
local toggle = (AllInOneInventory_IsBagOpen(bag) or baseToggle);
if ( ( toggle == true ) or ( toggle == 1 ) ) then
return 1;
else
return 0;
end
else
if ( AllInOneInventory_IsBagOpen(bag) ) then
return 1;
else
return 0;
end
end
end
function AllInOneInventory_UpdateBagState()
local shouldBeChecked = AllInOneInventoryFrame:IsVisible();
MainMenuBarBackpackButton:SetChecked(AllInOneInventory_GetBagState(0, shouldBeChecked));
local bagButton = nil;
local formatStr = "CharacterBag%dSlot";
for i = 0, 3 do
bagButton = getglobal(format(formatStr, i));
if ( bagButton ) then
bagButton:SetChecked(AllInOneInventory_GetBagState(i+1, shouldBeChecked));
end
end
end
function ToggleAllInOneInventoryFrame()
if ( AllInOneInventoryFrame:IsVisible() ) then
CloseAllInOneInventoryFrame();
else
OpenAllInOneInventoryFrame();
end
AllInOneInventory_UpdateBagState();
end
function AllInOneInventory_CloseAllWindows(ignoreCenter)
local wasVisible = AllInOneInventoryFrame:IsVisible();
CloseAllInOneInventoryFrame();
local realClosed = nil;
if ( arg ) then
realClosed = AllInOneInventory_Saved_CloseAllWindows(ignoreCenter);
else
realClosed = AllInOneInventory_Saved_CloseAllWindows();
end
if ( wasVisible ) then
return 1;
else
return realClosed;
end
end
function CloseAllInOneInventoryFrame()
local value = false;
local frame = getglobal("AllInOneInventoryFrame");
if ( frame ) and ( frame:IsVisible() ) then
frame:Hide();
value = true;
end
AllInOneInventory_UpdateBagState();
return value;
end
function OpenAllInOneInventoryFrame()
local value = false;
local frame = getglobal("AllInOneInventoryFrame");
if ( frame ) then
AllInOneInventoryFrame_Update(frame);
if ( not frame:IsVisible() ) then
frame:Show();
value = true;
end
end
AllInOneInventory_UpdateBagState();
return value;
end
function AllInOneInventoryFrame_OnLoad()
this:RegisterForClicks("LeftButtonUp", "RightButtonUp");
--DynamicData.item.addOnInventoryUpdateHandler(AllInOneInventoryFrame_OnInventoryUpdate);
--DynamicData.item.addOnInventoryCooldownUpdateHandler(AllInOneInventoryFrame_OnInventoryCooldownUpdate);
end
AllInOneInventoryFrame_LastInventoryUpdate = {};
ALLINONEINVENTORYFRAME_UPDATE_DELAY = 1;
function AllInOneInventoryFrame_OnInventoryUpdate(bag, scanType)
local curTime = GetTime();
local qwe = AllInOneInventoryFrame_LastInventoryUpdate[scanType];
if ( not qwe ) then
qwe = 0;
end
local fixTime = ALLINONEINVENTORYFRAME_UPDATE_DELAY - (curTime - qwe);
if ( fixTime <= 0 ) then
fixTime = 0.01;
end
AIOI_ScheduleByName("AIOI_INV_UPDATE_"..scanType, fixTime, AllInOneInventoryFrame_DoInventoryUpdate, bag, scanType);
end
function AllInOneInventoryFrame_DoInventoryUpdate(bag, scanType)
AllInOneInventoryFrame_LastInventoryUpdate[scanType] = GetTime();
local frame = getglobal("AllInOneInventoryFrame");
local func = nil;
if ( scanType ) then
if ( ( scanType and DYNAMICDATA_ITEM_SCAN_TYPE_COOLDOWN ) > 0 ) then
func = getglobal("AllInOneInventoryFrame_UpdateAllCooldowns");
end
if ( ( scanType and DYNAMICDATA_ITEM_SCAN_TYPE_ITEMINFO ) > 0 ) then
func = getglobal("AllInOneInventoryFrame_Update");
end
else
func = getglobal("AllInOneInventoryFrame_Update");
end
if ( ( frame ) and ( frame:IsVisible() ) ) then
if ( func ) then
func(frame);
end
end
end
function AllInOneInventoryFrame_OnInventoryCooldownUpdate()
local frame = getglobal("AllInOneInventoryFrame");
if ( frame ) then
AllInOneInventoryFrame_UpdateAllCooldowns(frame);
if ( frame:IsVisible() ) then
--AllInOneInventoryFrame_Update(frame);
end
end
end
function AllInOneInventoryFrame_OnEvent(event)
end
function AllInOneInventoryFrame_OnHide()
PlaySound("igBackPackClose");
AllInOneInventory_StopMoving(this);
end
function AllInOneInventoryFrame_OnShow()
AllInOneInventoryFrame_Update(this);
PlaySound("igBackPackOpen");
end
function AllInOneInventoryFrame_UpdateAllCooldowns(frame)
local name = frame:GetName();
local itemInfo;
local itemButton;
local bag, slot;
for buttonID = 1, ALLINONEINVENTORY_MAXIMUM_NUMBER_OF_BUTTONS do
itemButton = getglobal(name.."Item"..buttonID);
if ( itemButton ) and ( itemButton:IsVisible() ) then
bag, slot = AllInOneInventory_GetIdAsBagSlot(itemButton:GetID());
itemInfo = AllInOneInventoryItems_GetInfo(bag, slot);
if ( ( itemInfo ) and ( itemInfo.t ) and ( strlen(itemInfo.t) > 0 ) ) then
AllInOneInventoryFrame_UpdateCooldown(itemButton);
end
end
end
end
function AllInOneInventoryFrame_UpdateButton(frame, buttonID)
local name = frame:GetName();
local itemButton = getglobal(name.."Item"..buttonID);
if ( not itemButton ) or ( not itemButton:IsVisible() ) then
return;
end
local bag, slot = AllInOneInventory_GetIdAsBagSlot(itemButton:GetID());
if ( bag == -1 ) and ( slot == -1 ) then
return;
end
local itemInfo = AllInOneInventoryItems_GetInfo(bag, slot);
if ( not itemInfo ) then
itemInfo = AllInOneInventoryItems_NoItem;
end
SetItemButtonTexture(itemButton, itemInfo.t);
SetItemButtonCount(itemButton, itemInfo.c);
SetItemButtonDesaturated(itemButton, itemInfo.l, 0.5, 0.5, 0.5);
if ( ( itemInfo.t ) and ( strlen(itemInfo.t) > 0 ) ) then
AllInOneInventoryFrame_UpdateCooldown(itemButton);
else
local cooldownFrame = getglobal(itemButton:GetName().."Cooldown");
if ( cooldownFrame ) then
cooldownFrame:Hide();
end
end
local readable = itemInfo.r;
--local normalTexture = getglobal(name.."Item"..j.."NormalTexture");
--if ( quality and quality ~= -1) then
-- local color = getglobal("ITEM_QUALITY".. quality .."_COLOR");
-- normalTexture:SetVertexColor(color.r, color.g, color.b);
--else
-- normalTexture:SetVertexColor(TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g, TOOLTIP_DEFAULT_COLOR.b);
--end
local showSell = nil;
if ( GameTooltip:IsOwned(itemButton) ) then
if ( itemInfo.t ) and ( strlen(itemInfo.t) > 0 ) then
AllInOneInventory_Patching_Tooltip = 1;
local hasCooldown, repairCost = GameTooltip:SetBagItem(bag, slot);
if ( hasCooldown ) then
itemButton.updateTooltip = TOOLTIP_UPDATE_TIME;
else
itemButton.updateTooltip = nil;
end
if ( ( InRepairMode() ) and ( repairCost ) and (repairCost > 0) ) then
GameTooltip:AddLine(TEXT(REPAIR_COST), "", 1, 1, 1);
SetTooltipMoney(GameTooltip, repairCost);
--GameTooltip:Show();
elseif ( MerchantFrame:IsVisible() and not locked) then
showSell = 1;
end
AllInOneInventory_ModifyItemTooltip(bag, slot, "GameTooltip");
AllInOneInventory_Patching_Tooltip = 0;
else
GameTooltip:Hide();
end
if ( showSell ) then
ShowContainerSellCursor(bag, slot);
elseif ( readable ) then
ShowInspectCursor();
else
ResetCursor();
end
end
end
function AllInOneInventoryFrame_Update(frame)
if ( not AllInOneInventoryFrame_UpdateLookIfNeeded() ) then
for j=1, frame.size, 1 do
AllInOneInventoryFrame_UpdateButton(frame, j);
end
end
end
function AllInOneInventoryFrame_UpdateCooldown(button)
local bag, slot = AllInOneInventory_GetIdAsBagSlot(button:GetID());
if ( bag == -1 ) and ( slot == -1 ) then
return;
end
local cooldownFrame = getglobal(button:GetName().."Cooldown");
local itemInfo = AllInOneInventoryItems_GetInfo(bag, slot);
local start, duration, enable = 0, 0, 1;
if ( itemInfo ) then
start, duration, enable = itemInfo.cs, itemInfo.cd, itemInfo.ce;
end
CooldownFrame_SetTimer(cooldownFrame, start, duration, enable);
if ( ( duration > 0 ) and ( enable == 0 ) ) then
SetItemButtonTextureVertexColor(button, 0.4, 0.4, 0.4);
end
end
function AllInOneInventoryFrameItemButton_OnLoad()
this:RegisterForClicks("LeftButtonUp", "RightButtonUp");
this:RegisterForDrag("LeftButton");
this.SplitStack = function(button, split)
SplitContainerItem(button:GetParent():GetID(), button:GetID(), split);
end
end
function AllInOneInventory_HandleQuickMount(bag, slot)
if ( QuickMount_PickupItem ) then
local itemInfo = AllInOneInventoryItems_GetInfo(bag, slot);
if ( itemInfo ) and ( itemInfo.t ) and ( strlen(itemInfo.t) >= 0 ) then
QuickMount_PickupItem(bag, slot, itemInfo.n, itemInfo.t);
end
end
end
function AllInOneInventoryFrameItemButton_OnClick(button, ignoreShift)
local bag, slot = AllInOneInventory_GetIdAsBagSlot(this:GetID());
if ( LootDestroyer_DoItem_OnClick ) then
if ( LootDestroyer_DoItem_OnClick(bag, slot, button, ignoreShift) ) then
return;
end
end
if ( button == "LeftButton" ) then
if ( IsShiftKeyDown() and not ignoreShift ) then
if ( ChatFrameEditBox:IsVisible() ) then
ChatFrameEditBox:Insert(GetContainerItemLink(bag, slot));
else
local itemInfo = AllInOneInventoryItems_GetInfo(bag, slot);
if ( itemInfo ) and ( not itemInfo.l ) then
this.SplitStack = function(button, split)
SplitContainerItem(bag, slot, split);
end
OpenStackSplitFrame(this.count, this, "BOTTOMRIGHT", "TOPRIGHT");
end
end
elseif ( IsControlKeyDown() ) then
DressUpItemLink(GetContainerItemLink(bag, slot));
else
AllInOneInventory_HandleQuickMount(bag, slot);
PickupContainerItem(bag, slot);
end
else
-- Modifier2Sell fixed by daun
if ( MerchantFrame:IsVisible() ) and ( Modifier2Sell_BagSlotButton_OnClick ) then
if ( not Modifier2Sell_BagSlotButton_OnClick(button, ignoreShift, bag, slot) ) then
return;
end
end
if ( IsControlKeyDown() and not ignoreShift ) then
return;
elseif ( IsShiftKeyDown() and MerchantFrame:IsVisible() and not ignoreShift ) then
this.SplitStack = function(button, split)
SplitContainerItem(bag, slot, split);
MerchantItemButton_OnClick("LeftButton");
end
OpenStackSplitFrame(this.count, this, "BOTTOMRIGHT", "TOPRIGHT");
elseif ( MerchantFrame:IsVisible() and MerchantFrame.selectedTab == 2 ) then
-- Don't sell the item if the buyback tab is selected
return;
else
UseContainerItem(bag, slot);
StackSplitFrame:Hide();
end
end
end
function AllInOneInventoryFrameItemButton_OnEnter()
AllInOneInventory_Patching_Tooltip = 1;
local tooltip = GameTooltip;
local bag, slot = AllInOneInventory_GetIdAsBagSlot(this:GetID());
local itemInfo = AllInOneInventoryItems_GetInfo(bag, slot);
if ( ( not itemInfo ) or ( not itemInfo.t ) or ( strlen(itemInfo.t) <= 0 ) ) then
tooltip:Hide();
return;
end
tooltip:SetOwner(this, "ANCHOR_LEFT");
local hasCooldown, repairCost = GameTooltip:SetBagItem(bag, slot);
if ( hasCooldown ) then
this.updateTooltip = 1;
else
this.updateTooltip = nil;
end
if ( InRepairMode() and (repairCost and repairCost > 0) ) then
tooltip:AddLine(TEXT(REPAIR_COST), "", 1, 1, 1);
SetTooltipMoney(tooltip, repairCost);
tooltip:Show();
elseif ( MerchantFrame:IsVisible() ) then
ShowContainerSellCursor(bag, slot);
AllInOneInventoryFrame_RegisterCurrentTooltipSellValue(tooltip, bag, slot);
elseif ( this.readable ) then
ShowInspectCursor();
end
AllInOneInventory_ModifyItemTooltip(bag, slot, tooltip:GetName());
AllInOneInventory_Patching_Tooltip = 0;
end
function AllInOneInventoryFrame_RegisterCurrentTooltipSellValue(tooltip, bag, slot)
local itemInfo = AllInOneInventoryItems_GetInfo(bag, slot);
if ( not itemInfo ) or ( not itemInfo.n ) or ( strlen(itemInfo.n) <= 0 ) then
return;
end
if ( SellValue_SaveFor ) then
local moneyFrame = getglobal(tooltip:GetName().."MoneyFrame");
if ( moneyFrame ) and ( moneyFrame:IsVisible() ) and ( moneyFrame.staticMoney ) then
SellValue_SaveFor(bag, slot, itemInfo.n, moneyFrame.staticMoney);
end
end
if ( LootLink_ProcessLinks ) then
local link = GetContainerItemLink(bag, slot);
local name = LootLink_ProcessLinks(link);
if ( LootLink_VendorEntry_Hook ) then
local moneyFrame = getglobal(tooltip:GetName().."MoneyFrame");
if ( moneyFrame ) and ( moneyFrame:IsVisible() ) and ( moneyFrame.staticMoney ) then
if ( itemInfo.c ) and ( itemInfo.c > 0 ) then
local money = moneyFrame.staticMoney / itemInfo.c;
if ( ItemLinks[name] ) then
if ( not ItemLinks[name].price ) and ( not ItemLinks[name].p ) then
ItemLinks[name].p = money;
end
--LootLink_VendorEntry_Hook(bag, slot, itemInfo.n, moneyFrame.staticMoney);
end
end
else
local stringFormat = tooltip:GetName().."TextLeft%d";
local string = nil;
local text = nil;
for i = 2, 10 do
string = getglobal(stringFormat, i);
if ( string ) and ( string:IsVisible() ) then
text = string:GetText();
if ( text ) and ( text == TEXT(ITEM_UNSELLABLE) ) then
if ( ItemLinks[name] ) and ( ( ItemLinks[name].p ) or ( ItemLinks[name].price ) ) then
ItemLinks[name].p = nil;
ItemLinks[name].price = nil;
end
end
end
end
end
end
end
end
function AllInOneInventoryFrameItemButton_OnLeave()
this.updateTooltip = nil;
if ( GameTooltip:IsOwned(this) ) then
GameTooltip:Hide();
ResetCursor();
end
end
-- modifies the tooltip
function AllInOneInventory_ModifyItemTooltip(bag, slot, tooltipName)
if ( not tooltipName ) then
tooltipName = "GameTooltip";
end
--AllInOneInventory_ReagentHelper_ModifyItemTooltip(bag, slot, tooltipName);
AllInOneInventory_LootLink_ModifyItemTooltip(bag, slot, tooltipName);
AllInOneInventory_SellValue_ModifyItemTooltip(bag, slot, tooltipName);
local tooltip = getglobal(tooltipName);
if ( not tooltip ) then
return;
end
tooltip:Show();
end
function AllInOneInventory_SellValue_ModifyItemTooltip(bag, slot, tooltipName)
local tooltip = getglobal(tooltipName);
if ( not tooltip ) then
return;
end
if ( not SellValue_AddMoneyToTooltip ) then
return;
end
local itemInfo = AllInOneInventoryItems_GetInfo(bag, slot);
if ( not SellValues ) or ( MerchantFrame:IsVisible() ) then
return;
end
local itemName = nil;
local itemCount = nil;
if ( itemInfo ) then
itemCount = itemInfo.c;
if ( itemInfo.n ) then
if ( InvList_ShortenItemName ) then
itemName = InvList_ShortenItemName(itemInfo.n);
else
itemName = itemInfo.n;
end
end
end
if ( not itemName ) or ( strlen(itemName) <= 0 ) then
return;
end
if ( IsAddOnLoaded("SellValue") ) then
-- Don't add a tooltip for hidden items for SellValue
if ( not InvList_TooltipMode ) or
( ( InvList_TooltipMode == 1 ) and ( InvList_HiddenItems ) and ( InvList_HiddenItems[itemName] ) ) then
return;
end
end
local price = SellValues[itemName];
if ( price ) then
local linesAdded = 0;
if ( price == 0 ) then
local msg = NOSELLPRICE;
if ( not msg ) then
msg = ITEM_UNSELLABLE;
end
tooltip:AddLine(msg, 1.0, 1.0, 0);
linesAdded = 1;
else
tooltip:AddLine(SELLVALUE_COST, 1.0, 1.0, 0);
SetTooltipMoney(tooltip, price);
linesAdded = 2;
end -- if price > 0
-- Adjust width to account for new lines
if ( tooltip:GetWidth() < 120 ) then tooltip:SetWidth(120); end
end -- if price
end
function AllInOneInventory_LootLink_ModifyItemTooltip(bag, slot, tooltipName)
local tooltip = getglobal(tooltipName);
if ( not tooltip ) then
tooltip = getglobal("GameTooltip");
tooltipName = "GameTooltip";
end
if ( not tooltip ) then
return false;
end
local shouldModify = true;
if ( ( InRepairMode() ) or
( AllInOneInventory_ModifyTooltipsAtMerchant == 0 ) and ( MerchantFrame:IsVisible() ) ) then
shouldModify = false;
end
if (
( LootLink_AddExtraTooltipInfo ) and
( shouldModify ) and ( ItemLinks ) ) then
local itemInfo = AllInOneInventoryItems_GetInfo(bag, slot);
local name = nil;
if ( itemInfo ) and ( itemInfo.n ) then
name = itemInfo.n;
end
local data = ItemLinks[name];
if ( ( not LootLinkState ) or ( not LootLinkState.HideInfo ) ) and ( name ) and ( data ) then
if ( itemInfo ) and ( itemInfo.t ) then
if ( AllInOneInventory_ShowPrice == 1 ) then
local money = ItemLinks[name].p;
if ( not money ) and ( ItemLinks[name].price ) then
money = ItemLinks[name].price;
end
local stack = ItemLinks[name].x;
if ( not stack ) and ( ItemLinks[name].stack ) then
stack = ItemLinks[name].stack;
end
if ( money ) then
AIOI_LootLink_SetTooltipMoney(tooltip, itemInfo.c, money, stack);
end
end
LootLink_AddExtraTooltipInfo(tooltip, name, itemInfo.c, data);
--tooltip:Show();
if( tooltip == GameTooltip ) then
GameTooltip.llDone = 1;
end
end
end
elseif ( ( LootLink_Tooltip_Hook ) and ( shouldModify ) and ( ItemLinks ) ) then
local name = nil;
local itemInfo = AllInOneInventoryItems_GetInfo(bag, slot);
if ( itemInfo ) then
name = itemInfo.n;
end
if ( itemInfo ) and ( name ) and ( strlen(name) > 0 ) and ( ItemLinks[name] ) then
local data = ItemLinks[name];
local money = 0;
if ( data.p ) then
money = data.p;
elseif ( data.price ) then
money = data.price;
end
if ( not money ) then money = 0; end
local tooltip = getglobal(tooltipName);
if ( not tooltip ) then
return;
end
LootLink_Tooltip_Hook(tooltip, name, money, itemInfo.c, data);
--tooltip:Show();
end
end
end
function AllInOneInventory_ReagentHelper_ModifyItemTooltip(bag, slot, tooltipName)
if ( ReagentHelper_ModifyTooltip ) then
local shouldModifyTooltip = true;
if ( Auctioneer_GetFilter ) then
if ( Auctioneer_GetFilter("all") ) and ( Auctioneer_GetFilter("usage") ) then
shouldModifyTooltip = false;
end
end
if ( shouldModifyTooltip ) then
ReagentHelper_ModifyTooltip(tooltipName);
end
else
-- No Labels
end
end
function AllInOneInventoryFrameItemButton_OnUpdate(elapsed)
if ( not this.updateTooltip ) then
return;
end
this.updateTooltip = this.updateTooltip - elapsed;
if ( this.updateTooltip > 0 ) then
return;
end
if ( GameTooltip:IsOwned(this) ) then
AllInOneInventoryFrameItemButton_OnEnter();
else
this.updateTooltip = nil;
end
end
function AllInOneInventoryFrame_UpdateLookIfNeeded()
local slots = AllInOneInventory_GetBagsTotalSlots();
local frame = getglobal("AllInOneInventoryFrame");
if ( ( frame ) and ( not frame.size ) or ( slots ~= frame.size ) ) then
AllInOneInventoryFrame_UpdateLook(frame, slots);
return true;
end
return false;
end
function AllInOneInventoryFrame_SetColumns(col)
if ( type(col) ~= "number" ) then
col = tonumber(col);
end
if ( not col ) then
return;
end
if ( ( col >= ALLINONEINVENTORY_COLUMNS_MIN )
and ( col <= ALLINONEINVENTORY_COLUMNS_MAX )
) then
AllInOneInventory_Columns = col;
AllInOneInventoryFrame_UpdateLook(getglobal("AllInOneInventoryFrame"), AllInOneInventory_GetBagsTotalSlots());
end
end
function AllInOneInventoryFrame_GetAppropriateHeight(rows)
return ALLINONEINVENTORY_BASE_HEIGHT + ( ALLINONEINVENTORY_ROW_HEIGHT * rows );
end
function AllInOneInventoryFrame_GetAppropriateWidth(cols)
return ALLINONEINVENTORY_BASE_WIDTH + ( ALLINONEINVENTORY_COL_WIDTH * cols );
end
AllInOneInventoryFrame_AnchorWidgetList = { "MainMenuBar"};
function AllInOneInventoryFrame_AddAnchorWidget(widgetName)
table.insert(AllInOneInventoryFrame_AnchorWidgetList, widgetName);
end
function AllInOneInventoryFrame_GetAnchorWidget()
local obj = nil;
for k, v in AllInOneInventoryFrame_AnchorWidgetList do
obj = getglobal(v);
if ( obj ) and ( obj:IsVisible() ) then
return v;
end
end
return "UIParent";
end
function AllInOneInventoryFrame_ResetButton()
AllInOneInventoryFrame_ResetPosition(AllInOneInventoryFrame);
end
function AllInOneInventoryFrame_ResetPosition(frame)
frame:ClearAllPoints();
frame:SetPoint("CENTER", "UIParent", "CENTER");
end
function AllInOneInventoryFrame_ResetPositionOld(frame)
local anchorWidgetName = AllInOneInventoryFrame_GetAnchorWidget();
local anchorWidget = getglobal(anchorWidgetName);
local anchorWidgetYOffset = 5;
if ( anchorWidgetName == "UIParent" ) then
anchorWidgetYOffset = 54;
end
local xPos = -17;
if ( SideBarLeft_ShouldShiftBagFramesLeftOnShow ) then
if ( ( SideBarLeft_ShouldShiftBagFramesLeftOnShow() ) and ( SideBar:IsVisible() ) ) then
local temp = UIParent:GetWidth() - anchorWidget:GetWidth();
if ( SideBarLeft_GetSafeOffset ) then
xPos = temp + SideBarLeft_GetSafeOffset();
else
xPos = temp;
end
if ( xPos > 0 ) then
xPos = 1-xPos;
end
end
end
frame:ClearAllPoints();
frame:SetPoint("BOTTOMRIGHT", anchorWidgetName, "TOPRIGHT", xPos, anchorWidgetYOffset);
end
function AllInOneInventoryFrame_DoNothing()
end
function AllInOneInventoryFrame_UpdateLook(frame, frameSize)
if ( not frame ) then
frame = getglobal("AllInOneInventoryFrame");
end
if ( ( not frameSize ) or ( frameSize == 0 ) ) then
frameSize = AllInOneInventory_GetBagsTotalSlots()
end
if ( not frame ) or ( not frameSize ) or ( frameSize == 0 )then
AIOI_ScheduleByName("AIOI_UPDATE_LOOK", 1, AllInOneInventoryFrame_UpdateLook, frame, frameSize);
else
AIOI_ScheduleByName("AIOI_UPDATE_LOOK", 1, AllInOneInventoryFrame_DoNothing);
end
frame.size = frameSize;
local name = frame:GetName();
-- local bgTexture = getglobal(name.."BackgroundTexture");
getglobal(name.."MoneyFrame"):Show();
local columns = AllInOneInventory_Columns;
if (columns > frame.size) then columns = frame.size; end -- doesn't make sense to have more columns than slots, just in case sarf decides to increase the upper limit
if ( columns <= 0 ) then
columns = 8;
end
local rows = ceil(frame.size / columns);
if ( rows <= 0 ) then
rows = 1;
end
-- Added a short name, in case the long name doesn't fit ;)
if (columns <= 4) then
getglobal(name.."Name"):SetText(ALLINONEINVENTORY_BAG_TITLE_SHORT);
else
getglobal(name.."Name"):SetText(ALLINONEINVENTORY_BAG_TITLE_LONG);
end
local oldHeight = frame:GetHeight();
local height = AllInOneInventoryFrame_GetAppropriateHeight(rows);
frame:SetHeight(height);
local oldWidth = frame:GetWidth();
local width = AllInOneInventoryFrame_GetAppropriateWidth(columns);
frame:SetWidth(width);
if ( frame:IsVisible() ) then
frame:Show();
end
-- bgTexture:Hide();
local diffHeight = ceil(height - oldHeight);
local diffWidth = ceil(width - oldWidth);
if ( ( ( diffHeight > 1 ) or ( diffHeight < -1 ) ) or ( ( diffWidth > 1 ) or ( diffWidth < -1 ) ) ) then
--AllInOneInventoryFrame_ResetPosition(frame);
end
-- texture code to make it look like a normal bag...
local lastColumnIsComplete = false;
if (rows == floor(frame.size / columns)) then lastColumnIsComplete = true; end
-- set textures for moneyframe:
getglobal(name.."TextureBottomMiddle"):SetWidth((columns - 2) * 42 + 70);
-- show the first row (assumes that columns < frame.size)
local texture = getglobal(name.."ItemTexture1");
if ( texture ) then
texture:SetTexture("Interface\\AddOns\\AllInOneInventory\\Skin\\first_right");
texture:SetPoint("TOPLEFT", name.."TextureBottomRight", "TOPLEFT", -35, 43);
texture:Show();
end
for i=2, (columns-1), 1 do
local texture = getglobal(name.."ItemTexture"..i);
if ( texture ) then
texture:SetTexture("Interface\\AddOns\\AllInOneInventory\\Skin\\first_middle");
texture:SetPoint("TOPLEFT", name.."ItemTexture"..(i - 1), "TOPLEFT", -42, 0);
texture:Show();
end
end
local texture = getglobal(name.."ItemTexture"..columns);
if ( texture ) then
texture:SetTexture("Interface\\AddOns\\AllInOneInventory\\Skin\\first_left");
texture:SetPoint("TOPLEFT", name.."ItemTexture"..(columns - 1), "TOPLEFT", -47, 0);
texture:Show();
end
-- show the other rows
for j=1, (rows - 1), 1 do
local texture = getglobal(name.."ItemTexture"..(j * columns + 1));
if ( texture ) then
texture:SetTexture("Interface\\AddOns\\AllInOneInventory\\Skin\\second_right");
local textureOffsetX = 0; if (j == 1) then textureOffsetX = -3; end
texture:SetPoint("TOPLEFT", name.."ItemTexture"..((j - 1) * columns + 1), "TOPLEFT", textureOffsetX, 41);
texture:Show();
end
local slotsInRow = columns;
if ((j + 1) * columns > frame.size) then slotsInRow = frame.size - (j * columns); end
for i=2, (slotsInRow - 1), 1 do
local texture = getglobal(name.."ItemTexture"..(j * columns + i));
if ( texture ) then
texture:SetTexture("Interface\\AddOns\\AllInOneInventory\\Skin\\second_middle");
texture:SetPoint("TOPLEFT", name.."ItemTexture"..(j * columns + i - 1), "TOPLEFT", -42, 0);
texture:Show();
end
end
if (slotsInRow == columns) then
local texture = getglobal(name.."ItemTexture"..(j * columns + slotsInRow));
if ( texture ) then
texture:SetTexture("Interface\\AddOns\\AllInOneInventory\\Skin\\second_left");
texture:SetPoint("TOPLEFT", name.."ItemTexture"..(j * columns + slotsInRow - 1), "TOPLEFT", -44, 0);
texture:Show();
end
elseif (slotsInRow > 1) then
local texture = getglobal(name.."ItemTexture"..(j * columns + slotsInRow));
if ( texture ) then
texture:SetTexture("Interface\\AddOns\\AllInOneInventory\\Skin\\second_middle");
texture:SetPoint("TOPLEFT", name.."ItemTexture"..(j * columns + slotsInRow - 1), "TOPLEFT", -42, 0);
texture:Show();
end
end
end
getglobal(name.."TextureTopMiddle"):SetWidth((columns - 2) * 42 + 22);
if (lastColumnIsComplete) then
local textureOffsetX = 0; if (frame.size == columns) then textureOffsetX = -3; end
getglobal(name.."TextureTopRight"):SetTexture("Interface\\AddOns\\AllInOneInventory\\Skin\\top_right_large");
getglobal(name.."TextureTopRight"):SetPoint("BOTTOMLEFT", name.."ItemTexture"..((rows - 1) * columns + 1), "TOPLEFT", 19 + textureOffsetX, 0);
getglobal(name.."TextureTopMiddle"):SetPoint("BOTTOMRIGHT", name.."TextureTopRight", "BOTTOMLEFT", 0, -34);
getglobal(name.."CloseButton"):SetPoint("BOTTOMLEFT", name.."TextureTopRight", "BOTTOMLEFT", 4, 12);
else
getglobal(name.."TextureTopRight"):SetTexture("Interface\\AddOns\\AllInOneInventory\\Skin\\top_right_small");
getglobal(name.."TextureTopRight"):SetPoint("BOTTOMLEFT", name.."ItemTexture"..((rows - 1) * columns + 1), "TOPLEFT", 19, 0);
getglobal(name.."TextureTopMiddle"):SetPoint("BOTTOMRIGHT", name.."TextureTopRight", "BOTTOMLEFT", 0, -51);
getglobal(name.."CloseButton"):SetPoint("BOTTOMLEFT", name.."TextureTopRight", "BOTTOMLEFT", 4, -5);
end
for j=0, (frame.size - 1), 1 do
local itemButton = getglobal(name.."Item"..(frame.size - j));
itemButton:SetID(frame.size - j);
itemButton:ClearAllPoints();
-- Set first button
if ( j == 0 ) then
itemButton:SetPoint("TOPLEFT", name.."ItemTexture1", "TOPLEFT", 4, -1);
else
if ( mod(j, columns) == 0 ) then
itemButton:SetPoint("TOPLEFT", name.."Item"..(frame.size - j + columns), "TOPLEFT", 0, 41);
else
itemButton:SetPoint("TOPLEFT", name.."Item"..(frame.size - j + 1), "TOPLEFT", -42, 0);
end
end
itemButton:Show();
AllInOneInventoryFrame_UpdateButton(frame, (frame.size - j));
end
local button = nil;
local texture = nil;
for i = frame.size+1, ALLINONEINVENTORY_MAX_ID do
button = getglobal(name.."Item"..i);
if ( button ) then
button:Hide();
end
texture = getglobal(name.."ItemTexture"..i); -- hide the textures, that are not needed
if ( texture ) then
texture:Hide();
end
end
end
-- Thanks to 'lugo for this fix!
function AllInOneInventory_OpenAllBags(forceOpen)
if ( AllInOneInventory_ReplaceBags == 1 ) then
local bagsOpen = 0;
local totalBags = 1;
for i=1, NUM_CONTAINER_FRAMES, 1 do
local containerFrame = getglobal(AllInOneInventory_ContainerFrames[i]);
if ( not containerFrame ) then break; end
local bagButton = getglobal("CharacterBag"..(i -1).."Slot");
if (i <= NUM_BAG_FRAMES) then
local id = bagButton:GetID() - CharacterBag0Slot:GetID() + 1;
if ((not AllInOneInventory_ShouldOverrideBag(id)) and (GetContainerNumSlots(id) > 0)) then
totalBags = totalBags + 1;
end
end
if ( containerFrame:IsVisible() ) then
containerFrame:Hide();
if (containerFrame:GetID() <= NUM_BAG_FRAMES) then
bagsOpen = bagsOpen + 1;
end
end
end
if (AllInOneInventoryFrame:IsVisible()) then
CloseAllInOneInventoryFrame();
bagsOpen = bagsOpen + 1;
end
if ( bagsOpen == totalBags and not forceOpen ) then
return;
end
ToggleAllInOneInventoryFrame();
if ( AllInOneInventoryFrame:IsVisible() ) then
AllInOneInventory_OpenBag(1);
AllInOneInventory_OpenBag(2);
AllInOneInventory_OpenBag(3);
AllInOneInventory_OpenBag(4);
end
return;
end
AllInOneInventory_Saved_OpenAllBags(forceOpen);
end
function AllInOneInventory_DepositBox_RefreshWindows()
AllInOneInventory_Saved_DepositBox_RefreshWindows();
MoneyFrame_Update("AllInOneInventoryFrameMoneyFrame", GetMoney() - GetCursorMoney());
end
function AIOI_LootLink_SetTooltipMoney(frame, count, money, stack)
if ( not money ) then return; end
if ( money <= 0) then return; end
if ( count and count > 1 ) then
money = money * count;
frame:AddLine(format(LOOTLINK_SELL_PRICE_N, count), 1.0, 1.0, 1.0);
elseif( stack ) then
frame:AddLine(LOOTLINK_SELL_PRICE_EACH, 1.0, 1.0, 1.0);
else
frame:AddLine(LOOTLINK_SELL_PRICE, 1.0, 1.0, 1.0);
end
local numLines = frame:NumLines();
local moneyFrame = getglobal(frame:GetName().."MoneyFrame");
local newLine = frame:GetName().."TextLeft"..numLines;
moneyFrame:SetPoint("LEFT", newLine, "RIGHT", 4, 0);
moneyFrame:Show();
MoneyFrame_Update(moneyFrame:GetName(), money);
frame:SetMinimumWidth(moneyFrame:GetWidth() + getglobal(newLine):GetWidth() - 10);
end
function AllInOneInventory_SellValue_OnShow()
if ( AllInOneInventory_Patching_Tooltip ~= 1 ) then
AllInOneInventory_Saved_SellValue_OnShow();
end
end
function AllInOneInventory_StartMoving(frame)
if ( not frame.isMoving ) and ( frame.isLocked ~= 1 ) then
frame:StartMoving();
frame.isMoving = true;
end
end
function AllInOneInventory_StopMoving(frame)
if ( frame.isMoving ) then
frame:StopMovingOrSizing();
frame.isMoving = false;
end
end
function AllInOneInventory_ToggleLock(frame)
if ( frame.isLocked ~= 1 ) then
frame.isLocked = 1;
else
frame.isLocked = nil;
end
end
function AllInOneInventory_SetLock(frame)
if ( not frame ) then
frame = AllInOneInventoryFrame;
end
local lockButton = getglobal(frame:GetName().."LockButton");
if ( AllInOneInventory_Locked ~= 1 ) then
frame.isLocked = 0;
if ( lockButton ) then
lockButton:SetChecked(1);
end
else
AllInOneInventory_StopMoving(frame);
frame.isLocked = 1;
if ( lockButton ) then
lockButton:SetChecked(0);
end
end
end
function AllInOneInventory_GetLock(frame)
if ( frame.isLocked == 1 ) then
return 1;
else
return 0;
end
end
function ToggleLockAllInOneInventoryFrame()
AllInOneInventory_Toggle_Locked(-1);
end
function AllInOneInventory_Toggle_Locked(toggle)
AllInOneInventory_DoToggle_Locked(toggle, true);
end
function AllInOneInventory_Toggle_Locked_NoChat(toggle)
AllInOneInventory_DoToggle_Locked(toggle, false);
end
-- does the actual toggling
function AllInOneInventory_DoToggle_Locked(toggle, showText)
local newvalue = 0;
if ( showText ) then
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_Locked", "ALLINONEINVENTORY_CHAT_LOCKED_ENABLED", "ALLINONEINVENTORY_CHAT_LOCKED_DISABLED");
else
newvalue = AllInOneInventory_Generic_Toggle(toggle, "AllInOneInventory_Locked");
end
local frame = getglobal("AllInOneInventoryFrame");
if ( frame ) then
AllInOneInventory_SetLock(frame, newvalue);
end
end
function AllInOneInventory_Toggle_ExcludedSlot(bag, slot)
return AllInOneInventory_DoToggle_ExcludedSlot(bag, slot, 1)
end
function AllInOneInventory_Toggle_ExcludedSlot_NoChat(bag, slot)
return AllInOneInventory_DoToggle_ExcludedSlot(bag, slot)
end
function AllInOneInventory_DoToggle_ExcludedSlot(bag, slot, showText)
if ( bag ) and ( slot ) then
if ( type(bag) == "string" ) then
bag = tonumber(bag);
end
if ( type(slot) == "string" ) then
slot = tonumber(slot);
end
end
if ( not bag ) or ( not slot ) then
if ( showText ) then
AllInOneInventory_Print(ALLINONEINVENTORY_TOGGLE_SLOT_FAIL);
end
return false;
end
if ( not AllInOneInventory_ExcludedSlots ) then
AllInOneInventory_ExcludedSlots = {};
end
if ( not AllInOneInventory_ExcludedSlots[bag] ) then
AllInOneInventory_ExcludedSlots[bag] = {};
end
local newState = ALLINONEINVENTORY_TOGGLE_SLOT_OFF;
if ( not AllInOneInventory_ExcludedSlots[bag][slot] ) then
newState = ALLINONEINVENTORY_TOGGLE_SLOT_ON;
AllInOneInventory_ExcludedSlots[bag][slot] = 1;
else
AllInOneInventory_ExcludedSlots[bag][slot] = nil;
end
if ( showText ) then
AllInOneInventory_Print(string.format(ALLINONEINVENTORY_TOGGLE_SLOT, bag, slot, newState));
end
return true;
end
function AllInOneInventory_OnMouseDown(button, frame)
--[[
if ( button == "LeftButton" ) and ( IsShiftKeyDown() ) then
ToggleLockAllInOneInventoryFrame();
else
end
]]--
AllInOneInventory_StartMoving(frame);
end
setglobal("AIOI_ScheduleByName", AIOI_ScheduleByName_Own);
setglobal("AIOI_Schedule", AIOI_Schedule_Own);