diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java index 8aa28b95eea..a8c4a1dc3be 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/ItemManager.java @@ -286,7 +286,7 @@ public abstract class ItemManager extends JPanel { this.initialized = true; //must set flag just before applying filters if (!applyFilters()) { if (this.pool != null) { //ensure view updated even if filter predicate didn't change - this.updateView(true, null, 0); + this.updateView(true, null); } } } @@ -319,7 +319,7 @@ public abstract class ItemManager extends JPanel { this.currentView = view; this.currentView.getButton().setSelected(true); - this.currentView.refresh(itemsToSelect, backupIndexToSelect); + this.currentView.refresh(itemsToSelect, backupIndexToSelect, 0); this.add(currentView.getScroller()); this.revalidate(); @@ -463,7 +463,7 @@ public abstract class ItemManager extends JPanel { this.pool = pool0; this.model.addItems(this.pool); this.model.setInfinite(infinite); - this.updateView(true, null, 0); + this.updateView(true, null); } public ItemView getCurrentView() { @@ -664,14 +664,13 @@ public abstract class ItemManager extends JPanel { * @param qty */ public void addItem(final T item, int qty) { - int selectedIndexBefore = this.getSelectedIndex(); this.pool.add(item, qty); if (this.isUnfiltered()) { this.model.addItem(item, qty); } List items = new ArrayList(); items.add(item); - this.updateView(false, items, selectedIndexBefore); + this.updateView(false, items); } /** @@ -681,7 +680,6 @@ public abstract class ItemManager extends JPanel { * @param itemsToAdd */ public void addItems(Iterable> itemsToAdd) { - int selectedIndexBefore = this.getSelectedIndex(); this.pool.addAll(itemsToAdd); if (this.isUnfiltered()) { this.model.addItems(itemsToAdd); @@ -691,7 +689,7 @@ public abstract class ItemManager extends JPanel { for (Map.Entry item : itemsToAdd) { items.add(item.getKey()); } - this.updateView(false, items, selectedIndexBefore); + this.updateView(false, items); } /** @@ -702,14 +700,13 @@ public abstract class ItemManager extends JPanel { * @param qty */ public void removeItem(final T item, int qty) { - final int selectedIndexBefore = this.getSelectedIndex(); - final Iterable selectedItemsBefore = this.getSelectedItems(); + final Iterable itemsToSelect = this.currentView == this.listView ? this.getSelectedItems() : null; this.pool.remove(item, qty); if (this.isUnfiltered()) { this.model.removeItem(item, qty); } - this.updateView(false, selectedItemsBefore, selectedIndexBefore); + this.updateView(false, itemsToSelect); } /** @@ -719,8 +716,7 @@ public abstract class ItemManager extends JPanel { * @param itemsToRemove */ public void removeItems(Iterable> itemsToRemove) { - final int selectedIndexBefore = this.getSelectedIndex(); - final Iterable selectedItemsBefore = this.getSelectedItems(); + final Iterable itemsToSelect = this.currentView == this.listView ? this.getSelectedItems() : null; for (Map.Entry item : itemsToRemove) { this.pool.remove(item.getKey(), item.getValue()); @@ -728,7 +724,7 @@ public abstract class ItemManager extends JPanel { this.model.removeItem(item.getKey(), item.getValue()); } } - this.updateView(false, selectedItemsBefore, selectedIndexBefore); + this.updateView(false, itemsToSelect); } /** @@ -739,7 +735,7 @@ public abstract class ItemManager extends JPanel { public void removeAllItems() { this.pool.clear(); this.model.clear(); - this.updateView(false, null, 0); + this.updateView(false, null); } /** @@ -869,7 +865,7 @@ public abstract class ItemManager extends JPanel { this.filterPredicate = newFilterPredicate; if (this.pool != null) { - this.updateView(true, this.getSelectedItems(), 0); + this.updateView(true, this.getSelectedItems()); } return true; } @@ -948,7 +944,7 @@ public abstract class ItemManager extends JPanel { * * @param bForceFilter */ - public void updateView(final boolean forceFilter, final Iterable itemsToSelect, final int backupIndexToSelect) { + public void updateView(final boolean forceFilter, final Iterable itemsToSelect) { final boolean useFilter = (forceFilter && (this.filterPredicate != null)) || !isUnfiltered(); if (useFilter || this.wantUnique || forceFilter) { @@ -972,7 +968,7 @@ public abstract class ItemManager extends JPanel { this.model.addItems(this.pool); } - this.currentView.refresh(itemsToSelect, backupIndexToSelect); + this.currentView.refresh(itemsToSelect, this.getSelectedIndex(), forceFilter ? 0 : this.currentView.getScrollValue()); for (ItemFilter filter : this.orderedFilters) { filter.afterFiltersApplied(); diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ImageView.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ImageView.java index 6daefa547f6..833ee6cb3c2 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ImageView.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ImageView.java @@ -205,7 +205,7 @@ public class ImageView extends ItemView { } if (!forSetup) { - refresh(null, -1); + refresh(null, -1, 0); } } @@ -220,15 +220,15 @@ public class ImageView extends ItemView { pileBy = pileBy0; if (!forSetup) { - refresh(null, -1); + refresh(null, -1, 0); } } @Override - protected void fixSelection(final Iterable itemsToSelect, final int backupIndexToSelect) { + protected void fixSelection(final Iterable itemsToSelect, final int backupIndexToSelect, final int scrollValueToRestore) { if (itemsToSelect == null) { clearSelection(); //just clear selection if no items to select - getScroller().getVerticalScrollBar().setValue(0); //ensure scrolled to top + setScrollValue(scrollValueToRestore); //ensure scroll value restored onSelectionChange(); } else { diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemListView.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemListView.java index 43d895eb110..7822f5b6129 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemListView.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemListView.java @@ -157,7 +157,7 @@ public final class ItemListView extends ItemView { this.table.setColumnModel(colmodel); this.tableModel.setup(); - this.refresh(selectedItemsBefore, 0); + this.refresh(selectedItemsBefore, 0, 0); } public JTable getTable() { @@ -517,6 +517,11 @@ public final class ItemListView extends ItemView { }; private final FMouseAdapter headerMouseAdapter = new FMouseAdapter(true) { + @Override + public void onLeftMouseDown(MouseEvent e) { + focus(); + } + @Override public void onLeftClick(MouseEvent e) { if (Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR) == table.getTableHeader().getCursor()) { diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemView.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemView.java index 12196136d98..799248ef2f5 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemView.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/views/ItemView.java @@ -104,21 +104,28 @@ public abstract class ItemView { return this.scroller; } + public int getScrollValue() { + return scroller.getVerticalScrollBar().getValue(); + } + + public void setScrollValue(int value) { + scroller.getVerticalScrollBar().setValue(value); + } + public boolean isIncrementalSearchActive() { return this.isIncrementalSearchActive; } - public void refresh(final Iterable itemsToSelect, final int backupIndexToSelect) { + public void refresh(final Iterable itemsToSelect, final int backupIndexToSelect, final int scrollValueToRestore) { this.model.refreshSort(); onRefresh(); - fixSelection(itemsToSelect, backupIndexToSelect); + fixSelection(itemsToSelect, backupIndexToSelect, scrollValueToRestore); } protected abstract void onResize(); protected abstract void onRefresh(); - protected void fixSelection(final Iterable itemsToSelect, final int backupIndexToSelect) { + protected void fixSelection(final Iterable itemsToSelect, final int backupIndexToSelect, final int scrollValueToRestore) { if (itemsToSelect == null) { setSelectedIndex(0, false); //select first item if no items to select - getScroller().getVerticalScrollBar().setValue(0); //ensure scrolled to top } else { if (!setSelectedItems(itemsToSelect)) {