Skip to content

Commit 37da11c

Browse files
github-actions[bot]PeecheyLocalIdentity
authored
[pob1-port] Gem Selection Improvements (#1843)
* Apply changes from PathOfBuildingCommunity/PathOfBuilding#9786 * Remove imbued parts * Fix enter not selecting gem --------- Co-authored-by: Peechey <Peechey@users.noreply.github.com> Co-authored-by: LocalIdentity <localidentity2@gmail.com>
1 parent 4c12b8c commit 37da11c

2 files changed

Lines changed: 27 additions & 10 deletions

File tree

src/Classes/GemSelectControl.lua

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -340,18 +340,22 @@ function GemSelectClass:SortGemList(gemList)
340340
end)
341341
end
342342

343-
function GemSelectClass:UpdateGem(setText, addUndo)
343+
function GemSelectClass:UpdateGem(setText, addUndo, focusLost)
344344
local gemId = self.list[m_max(self.selIndex, 1)]
345+
-- don't process unless the buffer equals an actual gem, whether typed, clicked, or navigated with arrows
346+
-- we don't nil the gemId here if it doesn't match because the imbuedGemSelect and slotGemSelect have different paths
347+
local bufMatchesGem = (self.gems[gemId] and self.buf:lower() == self.gems[gemId].name:lower())
348+
345349
if self.buf:match("%S") and self.gems[gemId] then
346350
self.gemId = gemId
347351
else
348352
self.gemId = nil
349353
end
350-
self.gemName = self.gemId and self.gems[self.gemId].name or ""
354+
self.gemName = bufMatchesGem and (self.gemId and self.gems[self.gemId].name) or ""
351355
if setText then
352356
self:SetText(self.gemName)
353357
end
354-
self.gemChangeFunc(self.gemId and self.gemId:gsub("%w+:", ""), addUndo and self.gemName ~= self.initialBuf)
358+
self.gemChangeFunc(self.gemId and self.gemId:gsub("%w+:", ""), addUndo and self.gemName ~= self.initialBuf, focusLost, bufMatchesGem)
355359
end
356360

357361
function GemSelectClass:ScrollSelIntoView()
@@ -565,7 +569,7 @@ function GemSelectClass:OnFocusLost()
565569
if self.noMatches then
566570
self:SetText("")
567571
end
568-
self:UpdateGem(true,true)
572+
self:UpdateGem(true,true, true)
569573
end
570574
end
571575

@@ -615,14 +619,17 @@ function GemSelectClass:OnKeyDown(key, doubleClick)
615619
self:SetText("")
616620
end
617621
self.selIndex = m_max(self.selIndex, 1)
618-
self:UpdateGem(true, true)
622+
if self.gems[self.list[self.selIndex]] then
623+
self:SetText(self.gems[self.list[self.selIndex]].name)
624+
end
625+
self:UpdateGem(true, true, true)
619626
return
620627
elseif key == "ESCAPE" then
621628
self.dropped = false
622629
self:BuildList("")
623630
self.buf = self.initialBuf
624631
self.selIndex = self.initialIndex
625-
self:UpdateGem(false,true)
632+
self:UpdateGem(false,true, true)
626633
return
627634
elseif self.controls.scrollBar:IsScrollUpKey(key) then
628635
self.controls.scrollBar:Scroll(-1)

src/Classes/SkillsTab.lua

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -625,8 +625,7 @@ function SkillsTabClass:CreateGemSlot(index)
625625
local slot = { }
626626
self.gemSlots[index] = slot
627627

628-
-- Delete gem
629-
slot.delete = new("ButtonControl", nil, {0, 0, 20, 20}, "x", function()
628+
local function deleteGem()
630629
t_remove(self.displayGroup.gemList, index)
631630
for index2 = index, #self.displayGroup.gemList do
632631
-- Update the other gem slot controls
@@ -641,6 +640,10 @@ function SkillsTabClass:CreateGemSlot(index)
641640
end
642641
self:AddUndoState()
643642
self.build.buildFlag = true
643+
end
644+
-- Delete gem
645+
slot.delete = new("ButtonControl", nil, {0, 0, 20, 20}, "x", function()
646+
return deleteGem()
644647
end)
645648
if index == 1 then
646649
slot.delete:SetAnchor("TOPLEFT", self.anchorGemSlots, "TOPLEFT", 0, 0)
@@ -660,7 +663,7 @@ function SkillsTabClass:CreateGemSlot(index)
660663
self.controls["gemSlot"..index.."Delete"] = slot.delete
661664

662665
-- Gem name specification
663-
slot.nameSpec = new("GemSelectControl", { "LEFT", slot.delete, "RIGHT" }, { 2, 0, 300, 20 }, self, index, function(gemId, addUndo)
666+
slot.nameSpec = new("GemSelectControl", { "LEFT", slot.delete, "RIGHT" }, { 2, 0, 300, 20 }, self, index, function(gemId, addUndo, focusLost, bufMatchesGem)
664667
if not self.displayGroup then
665668
return
666669
end
@@ -686,10 +689,15 @@ function SkillsTabClass:CreateGemSlot(index)
686689
slot.enableGlobal1.state = true
687690
slot.enableGlobal2.state = true
688691
slot.count:SetText(gemInstance.count)
692+
elseif focusLost and not bufMatchesGem then
693+
return deleteGem()
689694
elseif gemId == gemInstance.gemId then
690695
if addUndo then
691696
self:AddUndoState()
692697
end
698+
if bufMatchesGem then
699+
self.build.buildFlag = true
700+
end
693701
return
694702
end
695703
gemInstance.gemId = gemId
@@ -704,7 +712,9 @@ function SkillsTabClass:CreateGemSlot(index)
704712
if addUndo then
705713
self:AddUndoState()
706714
end
707-
self.build.buildFlag = true
715+
if bufMatchesGem then
716+
self.build.buildFlag = true
717+
end
708718
end, true)
709719
slot.nameSpec:AddToTabGroup(self.controls.groupLabel)
710720
self.controls["gemSlot"..index.."Name"] = slot.nameSpec

0 commit comments

Comments
 (0)