Files
PathOfBuilding/Classes/ItemListControl.lua
Openarl 2806cbac3d 1.4.118 Initial commit
- Added/updated skill gems and bases
- Fixed curse stats with wrong sign
- Fixed wrong sources on quality mods
2018-12-09 16:29:54 +13:00

145 lines
4.8 KiB
Lua

-- Path of Building
--
-- Class: Item list
-- Build item list control.
--
local pairs = pairs
local t_insert = table.insert
local ItemListClass = newClass("ItemListControl", "ListControl", function(self, anchor, x, y, width, height, itemsTab)
self.ListControl(anchor, x, y, width, height, 16, false, true, itemsTab.itemOrderList)
self.itemsTab = itemsTab
self.label = "^7All items:"
self.defaultText = "^x7F7F7FThis is the list of items that have been added to this build.\nYou can add items to this list by dragging them from\none of the other lists, or by clicking 'Add to build' when\nviewing an item."
self.dragTargetList = { }
self.controls.delete = new("ButtonControl", {"BOTTOMRIGHT",self,"TOPRIGHT"}, 0, -2, 60, 18, "Delete", function()
self:OnSelDelete(self.selIndex, self.selValue)
end)
self.controls.delete.enabled = function()
return self.selValue ~= nil
end
self.controls.deleteAll = new("ButtonControl", {"RIGHT",self.controls.delete,"LEFT"}, -4, 0, 70, 18, "Delete All", function()
main:OpenConfirmPopup("Delete All", "Are you sure you want to delete all items in this build?", "Delete", function()
for _, slot in pairs(itemsTab.slots) do
slot:SetSelItemId(0)
end
for _, spec in pairs(itemsTab.build.treeTab.specList) do
for nodeId, itemId in pairs(spec.jewels) do
spec.jewels[nodeId] = 0
end
end
wipeTable(self.list)
wipeTable(self.itemsTab.items)
itemsTab:PopulateSlots()
itemsTab:AddUndoState()
itemsTab.build.buildFlag = true
self.selIndex = nil
self.selValue = nil
end)
end)
self.controls.deleteAll.enabled = function()
return #self.list > 0
end
self.controls.sort = new("ButtonControl", {"RIGHT",self.controls.deleteAll,"LEFT"}, -4, 0, 60, 18, "Sort", function()
itemsTab:SortItemList()
end)
end)
function ItemListClass:GetRowValue(column, index, itemId)
local item = self.itemsTab.items[itemId]
if column == 1 then
local used = ""
local slot, itemSet = self.itemsTab:GetEquippedSlotForItem(item)
if not slot then
used = " ^9(Unused)"
elseif itemSet then
used = " ^9(Used in '" .. (itemSet.title or "Default") .. "')"
end
return colorCodes[item.rarity] .. item.name .. used
end
end
function ItemListClass:AddValueTooltip(tooltip, index, itemId)
if main.popups[1] then
tooltip:Clear()
return
end
local item = self.itemsTab.items[itemId]
if tooltip:CheckForUpdate(item, IsKeyDown("SHIFT"), launch.devModeAlt, self.itemsTab.build.outputRevision) then
self.itemsTab:AddItemTooltip(tooltip, item)
end
end
function ItemListClass:GetDragValue(index, itemId)
return "Item", self.itemsTab.items[itemId]
end
function ItemListClass:ReceiveDrag(type, value, source)
if type == "Item" then
local newItem = new("Item", self.itemsTab.build.targetVersion, value.raw)
newItem:NormaliseQuality()
self.itemsTab:AddItem(newItem, true, self.selDragIndex)
self.itemsTab:PopulateSlots()
self.itemsTab:AddUndoState()
self.itemsTab.build.buildFlag = true
end
end
function ItemListClass:OnOrderChange()
self.itemsTab:AddUndoState()
end
function ItemListClass:OnSelClick(index, itemId, doubleClick)
local item = self.itemsTab.items[itemId]
if IsKeyDown("CTRL") then
local slotName = item:GetPrimarySlot()
if slotName and self.itemsTab.slots[slotName] then
if self.itemsTab.slots[slotName].weaponSet == 1 and self.itemsTab.activeItemSet.useSecondWeaponSet then
-- Redirect to second weapon set
slotName = slotName .. " Swap"
end
if IsKeyDown("SHIFT") then
-- Redirect to second slot if possible
local altSlot = slotName:gsub("1","2")
if self.itemsTab:IsItemValidForSlot(item, altSlot) then
slotName = altSlot
end
end
if self.itemsTab.slots[slotName].selItemId == item.id then
self.itemsTab.slots[slotName]:SetSelItemId(0)
else
self.itemsTab.slots[slotName]:SetSelItemId(item.id)
end
self.itemsTab:PopulateSlots()
self.itemsTab:AddUndoState()
self.itemsTab.build.buildFlag = true
end
elseif doubleClick then
local newItem = new("Item", item.targetVersion, item:BuildRaw())
newItem.id = item.id
self.itemsTab:SetDisplayItem(newItem)
end
end
function ItemListClass:OnSelCopy(index, itemId)
local item = self.itemsTab.items[itemId]
Copy(item:BuildRaw():gsub("\n","\r\n"))
end
function ItemListClass:OnSelDelete(index, itemId)
local item = self.itemsTab.items[itemId]
local equipSlot, equipSet = self.itemsTab:GetEquippedSlotForItem(item)
if equipSlot then
local inSet = equipSet and (" in set '"..(equipSet.title or "Default").."'") or ""
main:OpenConfirmPopup("Delete Item", item.name.." is currently equipped in "..equipSlot.label..inSet..".\nAre you sure you want to delete it?", "Delete", function()
self.itemsTab:DeleteItem(item)
self.selIndex = nil
self.selValue = nil
end)
else
self.itemsTab:DeleteItem(item)
self.selIndex = nil
self.selValue = nil
end
end