Skip to content

Add an Exclusions tab and a per-row exclude button to the owned items window - #2

Open
LostPoE wants to merge 1 commit into
ravand1990:mainfrom
LostPoE:feature/exclusions-tab
Open

Add an Exclusions tab and a per-row exclude button to the owned items window#2
LostPoE wants to merge 1 commit into
ravand1990:mainfrom
LostPoE:feature/exclusions-tab

Conversation

@LostPoE

@LostPoE LostPoE commented Aug 16, 2026

Copy link
Copy Markdown

Managing exclusions meant leaving the exchange panel for the ExileAPI plugin menu and typing the currency name by hand. The match is an exact, case-insensitive name compare, so a typo silently excludes nothing and you find out by watching the item you meant to skip show up in the list again.

Exclusions tab

The owned items window is now a tab bar:

  • Owned Items — unchanged: filter, count, sortable table.
  • ExclusionsExcluded: N and the same editor the plugin menu renders (add by name, edit in place, delete).

The editor stays in Settings, so both copies share one list and one input buffer — nothing is duplicated, and the plugin menu keeps working when the exchange panel is closed. ImGui ids are scoped per window, so the two never collide.

Exclude button

Every row gets an X next to Sell, tooltipped with the name it will exclude. Excluded currencies are already filtered out where the picker options are read, so the row simply disappears.

To make that immediate, SaveExcludedCurrencies bumps a new ExclusionsRevision; GetCurrencyExchangeItems compares it before its 500 ms cache check and rebuilds on change. Without it an exclusion — or an un-exclusion, which brings the row straight back — would land whenever the refresh interval happened to elapse.

Action column width

The column was relying on auto-fit, which measures the widest cell actually drawn. Once the Sell + X pair was clipped, the column could settle too narrow to ever reveal the X again. It now gets an explicit width computed from both button labels plus frame/item/cell padding.

The default window width goes 520 → 660 (max 1200 → 1600) to leave room. Existing settings files keep whatever width they already have, since the saved value wins over the default — the explicit column width is what actually fixes the clipping.

Testing

Built against ExileCore (0 errors, no new warnings) and run in game through the ExileAPI loader: both tabs render and the X sits beside Sell in every row. After a session with the change loaded, the settings file round-trips as before — ExclusionsRevision and ExcludedCurrencyCount are [JsonIgnore] + [HideInReflection], so they stay out of both the JSON and the plugin menu.

🤖 Generated with Claude Code

… window.

Managing exclusions meant leaving the game panel for the ExileAPI plugin menu
and typing the currency name by hand, which is both slow and easy to get wrong
- the match is an exact, case-insensitive name compare, so a typo silently
excludes nothing.

The owned items window is now a tab bar:

- Owned Items, unchanged.
- Exclusions, which renders the same editor the plugin menu uses. The editor
  lives in Settings, so both copies share one list and one input buffer; ImGui
  ids are scoped per window, so the two never collide.

Each row in the sell list gets an X button next to Sell, tooltipped with the
name it will exclude. Excluded currencies are already filtered out when the
picker options are read, so the row disappears - a new ExclusionsRevision
counter, bumped whenever the list is saved from either editor, lets the window
drop its caches on the next frame instead of waiting out the 500ms refresh
interval.

The Action column is now sized explicitly. It relied on auto-fit, which
measures the widest cell actually drawn, so once the Sell + X pair was clipped
the column could settle too narrow to ever reveal the X again. The default
window width goes 520 -> 660 (max 1200 -> 1600) to leave room for it; existing
settings files keep whatever width they already have.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants