feat: icons tab added and option to turn on/off unused item to red

This commit is contained in:
Salikh Gurgenidze
2026-01-04 21:49:13 +04:00
parent 7661625803
commit 1ceccc9875
8 changed files with 302 additions and 150 deletions
+10
View File
@@ -1358,6 +1358,12 @@ function Guda_BagFrame_MergeStacks()
return
end
-- Check if sorting is already in progress
if addon.Modules.SortEngine.sortingInProgress then
addon:Print("Sorting already in progress, please wait...")
return
end
local bagIDs = addon.Constants.BAGS
local moveQueue = {}
@@ -1450,6 +1456,9 @@ function Guda_BagFrame_MergeStacks()
return
end
-- Set sorting flag
addon.Modules.SortEngine.sortingInProgress = true
-- Process queue with delays
local queueIndex = 1
local retryCount = 0
@@ -1458,6 +1467,7 @@ function Guda_BagFrame_MergeStacks()
local function ProcessNextMove()
if queueIndex > table.getn(moveQueue) then
addon:Print("Merged " .. totalMoves .. " stack(s)")
addon.Modules.SortEngine.sortingInProgress = false
BagFrame:Update()
return
end
+11 -1
View File
@@ -998,6 +998,12 @@ function Guda_BankFrame_MergeStacks()
return
end
-- Check if sorting is already in progress
if addon.Modules.SortEngine.sortingInProgress then
addon:Print("Sorting already in progress, please wait...")
return
end
local bagIDs = addon.Constants.BANK_BAGS
local moveQueue = {}
@@ -1090,14 +1096,18 @@ function Guda_BankFrame_MergeStacks()
return
end
-- Set sorting flag
addon.Modules.SortEngine.sortingInProgress = true
-- Process queue with delays
local queueIndex = 1
local retryCount = 0
local totalMoves = table.getn(moveQueue)
local function ProcessNextMove()
if queueIndex > table.getn(moveQueue) then
addon:Print("Merged " .. totalMoves .. " stack(s)")
addon.Modules.SortEngine.sortingInProgress = false
BankFrame:Update()
return
end
+20 -2
View File
@@ -193,6 +193,20 @@ local function Guda_ItemButton_UpdateUsableTint(self)
SetItemButtonTextureVertexColor(self, 1.0, 1.0, 1.0)
end
-- Check if feature is enabled
local markUnusable = true
if Guda and Guda.Modules and Guda.Modules.DB then
markUnusable = Guda.Modules.DB:GetSetting("markUnusableItems")
if markUnusable == nil then
markUnusable = true
end
end
-- If feature is disabled, just return after clearing
if not markUnusable then
return
end
-- Only evaluate for live (player) items; DB cached items from other chars cannot be scanned
if not self or not self.hasItem or not self.bagID or not self.slotID or self.isReadOnly or self.otherChar then
return
@@ -1097,10 +1111,14 @@ function Guda_ItemButton_OnEnter(self)
-- For live mode: use SetBagItem for all bags
GameTooltip:SetBagItem(self.bagID, self.slotID)
end
GameTooltip:Show()
-- Handle merchant sell cursor (same approach as BagShui)
-- TESTING: Print item info to console for debugging
--local name, link, itemQuality, iLevel, itemCategory, itemType, itemStackCount, itemSubType, itemTexture, itemEquipLoc, itemSellPrice = addon.Modules.Utils:GetItemInfo(self.itemData.link)
--addon:Print("name:" .. tostring(name) .. " link:" .. tostring(link) .. " quality:" .. tostring(itemQuality) .. " iLevel:" .. tostring(iLevel) .. " category:" .. tostring(itemCategory) .. " type:" .. tostring(itemType) .. " subType:" .. tostring(itemSubType) .. " stackCount:" .. tostring(itemStackCount) .. " equipLoc:" .. tostring(itemEquipLoc) .. " sellPrice:" .. tostring(itemSellPrice))
-- Handle merchant sell cursor (same approach as BagShui)
if MerchantFrame:IsShown() and not self.isBank and not self.otherChar and self.hasItem then
ShowContainerSellCursor(self.bagID, self.slotID)
else
+60 -5
View File
@@ -28,9 +28,10 @@ function Guda_SettingsPopup_OnLoad(self)
end
-- Set tab names
PanelTemplates_SetNumTabs(self, 2)
PanelTemplates_SetNumTabs(self, 3)
getglobal(self:GetName().."Tab1"):SetText("General")
getglobal(self:GetName().."Tab2"):SetText("Quick Guide")
getglobal(self:GetName().."Tab2"):SetText("Icons")
getglobal(self:GetName().."Tab3"):SetText("Quick Guide")
PanelTemplates_SetTab(self, 1)
-- Set How to Use text
@@ -57,12 +58,18 @@ end
function Guda_SettingsPopup_Tab_OnClick(id)
local frame = Guda_SettingsPopup
PanelTemplates_SetTab(frame, id)
-- Hide all tabs
getglobal(frame:GetName().."_GeneralTab"):Hide()
getglobal(frame:GetName().."_IconsTab"):Hide()
getglobal(frame:GetName().."_HowToUseTab"):Hide()
-- Show selected tab
if id == 1 then
getglobal(frame:GetName().."_GeneralTab"):Show()
getglobal(frame:GetName().."_HowToUseTab"):Hide()
elseif id == 2 then
getglobal(frame:GetName().."_IconsTab"):Show()
else
getglobal(frame:GetName().."_GeneralTab"):Hide()
getglobal(frame:GetName().."_HowToUseTab"):Show()
end
end
@@ -948,6 +955,54 @@ function Guda_SettingsPopup_ShowTooltipCountsCheckbox_OnClick(self)
end
end
-- Mark Unusable Items Checkbox OnLoad
function Guda_SettingsPopup_MarkUnusableCheckbox_OnLoad(self)
local text = getglobal(self:GetName().."Text")
if text then
text:SetText("Mark Unusable Items")
-- Increase font size
local font, _, flags = text:GetFont()
if font then
text:SetFont(font, 13, flags)
end
end
-- Tooltip
self.tooltipText = "Show a red tint on items that your character cannot use (wrong class, level, etc.)."
local markUnusable = true
if Guda and Guda.Modules and Guda.Modules.DB then
markUnusable = Guda.Modules.DB:GetSetting("markUnusableItems")
if markUnusable == nil then
markUnusable = true
end
end
self:SetChecked(markUnusable and 1 or 0)
end
-- Mark Unusable Items Checkbox OnClick
function Guda_SettingsPopup_MarkUnusableCheckbox_OnClick(self)
local isChecked = self:GetChecked() == 1
-- Save setting
if Guda and Guda.Modules and Guda.Modules.DB then
Guda.Modules.DB:SetSetting("markUnusableItems", isChecked)
end
-- Update bag and bank frames to apply/remove the red tint
local bagFrame = getglobal("Guda_BagFrame")
if bagFrame and bagFrame:IsShown() then
Guda.Modules.BagFrame:Update()
end
local bankFrame = getglobal("Guda_BankFrame")
if bankFrame and bankFrame:IsShown() then
Guda.Modules.BankFrame:Update()
end
end
-- Bag View Type Button OnClick
function Guda_SettingsPopup_BagViewTypeButton_OnClick()
local current = Guda.Modules.DB:GetSetting("bagViewType") or "single"
+181 -141
View File
@@ -3,7 +3,7 @@
<!-- Settings Popup Frame -->
<Frame name="Guda_SettingsPopup" toplevel="true" movable="true" enableMouse="true" hidden="true" parent="UIParent" frameStrata="DIALOG">
<Size>
<AbsDimension x="550" y="590"/>
<AbsDimension x="510" y="590"/>
</Size>
<Anchors>
@@ -72,6 +72,20 @@
</OnClick>
</Scripts>
</Button>
<Button name="$parentTab3" inherits="CharacterFrameTabButtonTemplate" id="3">
<Anchors>
<Anchor point="LEFT" relativeTo="$parentTab2" relativePoint="RIGHT">
<Offset>
<AbsDimension x="-16" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
Guda_SettingsPopup_Tab_OnClick(3)
</OnClick>
</Scripts>
</Button>
<!-- Close Button -->
<Button name="$parent_CloseButton" inherits="UIPanelCloseButton">
@@ -95,7 +109,7 @@
<!-- Bag Columns Slider -->
<Slider name="Guda_SettingsPopup_BagColumnsSlider" inherits="OptionsSliderTemplate">
<Size>
<AbsDimension x="500" y="17"/>
<AbsDimension x="460" y="17"/>
</Size>
<Anchors>
<Anchor point="TOP">
@@ -117,7 +131,7 @@
<!-- Bank Columns Slider -->
<Slider name="Guda_SettingsPopup_BankColumnsSlider" inherits="OptionsSliderTemplate">
<Size>
<AbsDimension x="500" y="17"/>
<AbsDimension x="460" y="17"/>
</Size>
<Anchors>
<Anchor point="TOP" relativePoint="BOTTOM" relativeTo="Guda_SettingsPopup_BagColumnsSlider">
@@ -136,79 +150,13 @@
</Scripts>
</Slider>
<!-- Icon Size Slider -->
<Slider name="Guda_SettingsPopup_IconSizeSlider" inherits="OptionsSliderTemplate">
<Size>
<AbsDimension x="500" y="17"/>
</Size>
<Anchors>
<Anchor point="TOP" relativePoint="BOTTOM" relativeTo="Guda_SettingsPopup_BankColumnsSlider">
<Offset>
<AbsDimension x="0" y="-40"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
Guda_SettingsPopup_IconSizeSlider_OnLoad(this)
</OnLoad>
<OnValueChanged>
Guda_SettingsPopup_IconSizeSlider_OnValueChanged(this)
</OnValueChanged>
</Scripts>
</Slider>
<!-- Icon Font Size Slider -->
<Slider name="Guda_SettingsPopup_IconFontSizeSlider" inherits="OptionsSliderTemplate">
<Size>
<AbsDimension x="500" y="17"/>
</Size>
<Anchors>
<Anchor point="TOP" relativePoint="BOTTOM" relativeTo="Guda_SettingsPopup_IconSizeSlider">
<Offset>
<AbsDimension x="0" y="-40"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
Guda_SettingsPopup_IconFontSizeSlider_OnLoad(this)
</OnLoad>
<OnValueChanged>
Guda_SettingsPopup_IconFontSizeSlider_OnValueChanged(this)
</OnValueChanged>
</Scripts>
</Slider>
<!-- Icon Spacing Slider -->
<Slider name="Guda_SettingsPopup_IconSpacingSlider" inherits="OptionsSliderTemplate">
<Size>
<AbsDimension x="500" y="17"/>
</Size>
<Anchors>
<Anchor point="TOP" relativePoint="BOTTOM" relativeTo="Guda_SettingsPopup_IconFontSizeSlider">
<Offset>
<AbsDimension x="0" y="-40"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
Guda_SettingsPopup_IconSpacingSlider_OnLoad(this)
</OnLoad>
<OnValueChanged>
Guda_SettingsPopup_IconSpacingSlider_OnValueChanged(this)
</OnValueChanged>
</Scripts>
</Slider>
<!-- Background Transparency Slider -->
<Slider name="Guda_SettingsPopup_BgTransparencySlider" inherits="OptionsSliderTemplate">
<Size>
<AbsDimension x="500" y="17"/>
<AbsDimension x="460" y="17"/>
</Size>
<Anchors>
<Anchor point="TOP" relativePoint="BOTTOM" relativeTo="Guda_SettingsPopup_IconSpacingSlider">
<Anchor point="TOP" relativePoint="BOTTOM" relativeTo="Guda_SettingsPopup_BankColumnsSlider">
<Offset>
<AbsDimension x="0" y="-40"/>
</Offset>
@@ -229,7 +177,7 @@
<Anchors>
<Anchor point="TOP" relativePoint="BOTTOM" relativeTo="Guda_SettingsPopup_BgTransparencySlider">
<Offset>
<AbsDimension x="-240" y="-30"/>
<AbsDimension x="-215" y="-30"/>
</Offset>
</Anchor>
</Anchors>
@@ -248,7 +196,7 @@
<Anchors>
<Anchor point="LEFT" relativePoint="RIGHT" relativeTo="Guda_SettingsPopup_LockBagsCheckbox">
<Offset>
<AbsDimension x="145" y="0"/>
<AbsDimension x="185" y="0"/>
</Offset>
</Anchor>
</Anchors>
@@ -262,27 +210,8 @@
</Scripts>
</CheckButton>
<!-- Quality Border Equipment Checkbox -->
<CheckButton name="Guda_SettingsPopup_QualityBorderEquipmentCheckbox" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="LEFT" relativePoint="RIGHT" relativeTo="Guda_SettingsPopup_HideBordersCheckbox">
<Offset>
<AbsDimension x="145" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
Guda_SettingsPopup_QualityBorderEquipmentCheckbox_OnLoad(this)
</OnLoad>
<OnClick>
Guda_SettingsPopup_QualityBorderEquipmentCheckbox_OnClick(this)
</OnClick>
</Scripts>
</CheckButton>
<!-- Quality Border Other Checkbox -->
<CheckButton name="Guda_SettingsPopup_QualityBorderOtherCheckbox" inherits="OptionsCheckButtonTemplate">
<!-- Show Search Bar Checkbox -->
<CheckButton name="Guda_SettingsPopup_ShowSearchBarCheckbox" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOP" relativePoint="BOTTOM" relativeTo="Guda_SettingsPopup_LockBagsCheckbox">
<Offset>
@@ -290,25 +219,6 @@
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
Guda_SettingsPopup_QualityBorderOtherCheckbox_OnLoad(this)
</OnLoad>
<OnClick>
Guda_SettingsPopup_QualityBorderOtherCheckbox_OnClick(this)
</OnClick>
</Scripts>
</CheckButton>
<!-- Show Search Bar Checkbox -->
<CheckButton name="Guda_SettingsPopup_ShowSearchBarCheckbox" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="LEFT" relativePoint="RIGHT" relativeTo="Guda_SettingsPopup_QualityBorderOtherCheckbox">
<Offset>
<AbsDimension x="145" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
Guda_SettingsPopup_ShowSearchBarCheckbox_OnLoad(this)
@@ -324,7 +234,7 @@
<Anchors>
<Anchor point="LEFT" relativePoint="RIGHT" relativeTo="Guda_SettingsPopup_ShowSearchBarCheckbox">
<Offset>
<AbsDimension x="145" y="0"/>
<AbsDimension x="185" y="0"/>
</Offset>
</Anchor>
</Anchors>
@@ -341,7 +251,7 @@
<!-- Hover Bagline Checkbox -->
<CheckButton name="Guda_SettingsPopup_HoverBaglineCheckbox" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOP" relativePoint="BOTTOM" relativeTo="Guda_SettingsPopup_QualityBorderOtherCheckbox">
<Anchor point="TOP" relativePoint="BOTTOM" relativeTo="Guda_SettingsPopup_ShowSearchBarCheckbox">
<Offset>
<AbsDimension x="0" y="-8"/>
</Offset>
@@ -362,7 +272,7 @@
<Anchors>
<Anchor point="LEFT" relativePoint="RIGHT" relativeTo="Guda_SettingsPopup_HoverBaglineCheckbox">
<Offset>
<AbsDimension x="145" y="0"/>
<AbsDimension x="185" y="0"/>
</Offset>
</Anchor>
</Anchors>
@@ -375,25 +285,6 @@
</OnClick>
</Scripts>
</CheckButton>
<!-- Show Tooltip Counts Checkbox -->
<CheckButton name="Guda_SettingsPopup_ShowTooltipCountsCheckbox" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="LEFT" relativePoint="RIGHT" relativeTo="Guda_SettingsPopup_HideFooterCheckbox">
<Offset>
<AbsDimension x="145" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
Guda_SettingsPopup_ShowTooltipCountsCheckbox_OnLoad(this)
</OnLoad>
<OnClick>
Guda_SettingsPopup_ShowTooltipCountsCheckbox_OnClick(this)
</OnClick>
</Scripts>
</CheckButton>
<!-- Reverse Stack Sort Checkbox -->
<CheckButton name="Guda_SettingsPopup_ReverseStackSortCheckbox" inherits="OptionsCheckButtonTemplate">
@@ -414,12 +305,12 @@
</Scripts>
</CheckButton>
<!-- View Types - Same row as Reverse Stack Sort -->
<!-- View Types - Row below Reverse Stack Sort -->
<Button name="Guda_SettingsPopup_BagViewTypeButton" inherits="UIPanelButtonTemplate">
<Size><AbsDimension x="140" y="22"/></Size>
<Size><AbsDimension x="200" y="22"/></Size>
<Anchors>
<Anchor point="LEFT" relativePoint="RIGHT" relativeTo="Guda_SettingsPopup_ReverseStackSortCheckbox">
<Offset><AbsDimension x="147" y="0"/></Offset>
<Anchor point="TOP" relativePoint="BOTTOM" relativeTo="Guda_SettingsPopup_ReverseStackSortCheckbox">
<Offset><AbsDimension x="85" y="-8"/></Offset>
</Anchor>
</Anchors>
<Scripts>
@@ -428,10 +319,10 @@
</Button>
<Button name="Guda_SettingsPopup_BankViewTypeButton" inherits="UIPanelButtonTemplate">
<Size><AbsDimension x="140" y="22"/></Size>
<Size><AbsDimension x="200" y="22"/></Size>
<Anchors>
<Anchor point="LEFT" relativeTo="Guda_SettingsPopup_BagViewTypeButton" relativePoint="RIGHT">
<Offset><AbsDimension x="10" y="0"/></Offset>
<Offset><AbsDimension x="20" y="0"/></Offset>
</Anchor>
</Anchors>
<Scripts>
@@ -460,6 +351,155 @@
</Layer>
</Layers>
</Frame>
<!-- Icons Tab Content -->
<Frame name="$parent_IconsTab" setAllPoints="true" hidden="true">
<Frames>
<!-- Icon Size Slider -->
<Slider name="Guda_SettingsPopup_IconSizeSlider" inherits="OptionsSliderTemplate">
<Size>
<AbsDimension x="460" y="17"/>
</Size>
<Anchors>
<Anchor point="TOP">
<Offset>
<AbsDimension x="0" y="-90"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
Guda_SettingsPopup_IconSizeSlider_OnLoad(this)
</OnLoad>
<OnValueChanged>
Guda_SettingsPopup_IconSizeSlider_OnValueChanged(this)
</OnValueChanged>
</Scripts>
</Slider>
<!-- Icon Font Size Slider -->
<Slider name="Guda_SettingsPopup_IconFontSizeSlider" inherits="OptionsSliderTemplate">
<Size>
<AbsDimension x="460" y="17"/>
</Size>
<Anchors>
<Anchor point="TOP" relativePoint="BOTTOM" relativeTo="Guda_SettingsPopup_IconSizeSlider">
<Offset>
<AbsDimension x="0" y="-40"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
Guda_SettingsPopup_IconFontSizeSlider_OnLoad(this)
</OnLoad>
<OnValueChanged>
Guda_SettingsPopup_IconFontSizeSlider_OnValueChanged(this)
</OnValueChanged>
</Scripts>
</Slider>
<!-- Icon Spacing Slider -->
<Slider name="Guda_SettingsPopup_IconSpacingSlider" inherits="OptionsSliderTemplate">
<Size>
<AbsDimension x="460" y="17"/>
</Size>
<Anchors>
<Anchor point="TOP" relativePoint="BOTTOM" relativeTo="Guda_SettingsPopup_IconFontSizeSlider">
<Offset>
<AbsDimension x="0" y="-40"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
Guda_SettingsPopup_IconSpacingSlider_OnLoad(this)
</OnLoad>
<OnValueChanged>
Guda_SettingsPopup_IconSpacingSlider_OnValueChanged(this)
</OnValueChanged>
</Scripts>
</Slider>
<!-- Quality Border Equipment Checkbox -->
<CheckButton name="Guda_SettingsPopup_QualityBorderEquipmentCheckbox" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOP" relativePoint="BOTTOM" relativeTo="Guda_SettingsPopup_IconSpacingSlider">
<Offset>
<AbsDimension x="-215" y="-30"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
Guda_SettingsPopup_QualityBorderEquipmentCheckbox_OnLoad(this)
</OnLoad>
<OnClick>
Guda_SettingsPopup_QualityBorderEquipmentCheckbox_OnClick(this)
</OnClick>
</Scripts>
</CheckButton>
<!-- Quality Border Other Checkbox -->
<CheckButton name="Guda_SettingsPopup_QualityBorderOtherCheckbox" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="LEFT" relativePoint="RIGHT" relativeTo="Guda_SettingsPopup_QualityBorderEquipmentCheckbox">
<Offset>
<AbsDimension x="185" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
Guda_SettingsPopup_QualityBorderOtherCheckbox_OnLoad(this)
</OnLoad>
<OnClick>
Guda_SettingsPopup_QualityBorderOtherCheckbox_OnClick(this)
</OnClick>
</Scripts>
</CheckButton>
<!-- Mark Unusable Items Checkbox -->
<CheckButton name="Guda_SettingsPopup_MarkUnusableCheckbox" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOP" relativePoint="BOTTOM" relativeTo="Guda_SettingsPopup_QualityBorderEquipmentCheckbox">
<Offset>
<AbsDimension x="0" y="-8"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
Guda_SettingsPopup_MarkUnusableCheckbox_OnLoad(this)
</OnLoad>
<OnClick>
Guda_SettingsPopup_MarkUnusableCheckbox_OnClick(this)
</OnClick>
</Scripts>
</CheckButton>
<!-- Show Tooltip Counts Checkbox -->
<CheckButton name="Guda_SettingsPopup_ShowTooltipCountsCheckbox" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="LEFT" relativePoint="RIGHT" relativeTo="Guda_SettingsPopup_MarkUnusableCheckbox">
<Offset>
<AbsDimension x="185" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
Guda_SettingsPopup_ShowTooltipCountsCheckbox_OnLoad(this)
</OnLoad>
<OnClick>
Guda_SettingsPopup_ShowTooltipCountsCheckbox_OnClick(this)
</OnClick>
</Scripts>
</CheckButton>
</Frames>
</Frame>
</Frames>
<Scripts>