Focus list when header clicked

Improve behavior of removing items in Image View
This commit is contained in:
drdev
2014-02-05 01:21:48 +00:00
parent 86bd570e2c
commit 557035e340
4 changed files with 34 additions and 26 deletions

View File

@@ -286,7 +286,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
this.initialized = true; //must set flag just before applying filters this.initialized = true; //must set flag just before applying filters
if (!applyFilters()) { if (!applyFilters()) {
if (this.pool != null) { //ensure view updated even if filter predicate didn't change 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<T extends InventoryItem> extends JPanel {
this.currentView = view; this.currentView = view;
this.currentView.getButton().setSelected(true); this.currentView.getButton().setSelected(true);
this.currentView.refresh(itemsToSelect, backupIndexToSelect); this.currentView.refresh(itemsToSelect, backupIndexToSelect, 0);
this.add(currentView.getScroller()); this.add(currentView.getScroller());
this.revalidate(); this.revalidate();
@@ -463,7 +463,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
this.pool = pool0; this.pool = pool0;
this.model.addItems(this.pool); this.model.addItems(this.pool);
this.model.setInfinite(infinite); this.model.setInfinite(infinite);
this.updateView(true, null, 0); this.updateView(true, null);
} }
public ItemView<T> getCurrentView() { public ItemView<T> getCurrentView() {
@@ -664,14 +664,13 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
* @param qty * @param qty
*/ */
public void addItem(final T item, int qty) { public void addItem(final T item, int qty) {
int selectedIndexBefore = this.getSelectedIndex();
this.pool.add(item, qty); this.pool.add(item, qty);
if (this.isUnfiltered()) { if (this.isUnfiltered()) {
this.model.addItem(item, qty); this.model.addItem(item, qty);
} }
List<T> items = new ArrayList<T>(); List<T> items = new ArrayList<T>();
items.add(item); items.add(item);
this.updateView(false, items, selectedIndexBefore); this.updateView(false, items);
} }
/** /**
@@ -681,7 +680,6 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
* @param itemsToAdd * @param itemsToAdd
*/ */
public void addItems(Iterable<Entry<T, Integer>> itemsToAdd) { public void addItems(Iterable<Entry<T, Integer>> itemsToAdd) {
int selectedIndexBefore = this.getSelectedIndex();
this.pool.addAll(itemsToAdd); this.pool.addAll(itemsToAdd);
if (this.isUnfiltered()) { if (this.isUnfiltered()) {
this.model.addItems(itemsToAdd); this.model.addItems(itemsToAdd);
@@ -691,7 +689,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
for (Map.Entry<T, Integer> item : itemsToAdd) { for (Map.Entry<T, Integer> item : itemsToAdd) {
items.add(item.getKey()); items.add(item.getKey());
} }
this.updateView(false, items, selectedIndexBefore); this.updateView(false, items);
} }
/** /**
@@ -702,14 +700,13 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
* @param qty * @param qty
*/ */
public void removeItem(final T item, int qty) { public void removeItem(final T item, int qty) {
final int selectedIndexBefore = this.getSelectedIndex(); final Iterable<T> itemsToSelect = this.currentView == this.listView ? this.getSelectedItems() : null;
final Iterable<T> selectedItemsBefore = this.getSelectedItems();
this.pool.remove(item, qty); this.pool.remove(item, qty);
if (this.isUnfiltered()) { if (this.isUnfiltered()) {
this.model.removeItem(item, qty); this.model.removeItem(item, qty);
} }
this.updateView(false, selectedItemsBefore, selectedIndexBefore); this.updateView(false, itemsToSelect);
} }
/** /**
@@ -719,8 +716,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
* @param itemsToRemove * @param itemsToRemove
*/ */
public void removeItems(Iterable<Map.Entry<T, Integer>> itemsToRemove) { public void removeItems(Iterable<Map.Entry<T, Integer>> itemsToRemove) {
final int selectedIndexBefore = this.getSelectedIndex(); final Iterable<T> itemsToSelect = this.currentView == this.listView ? this.getSelectedItems() : null;
final Iterable<T> selectedItemsBefore = this.getSelectedItems();
for (Map.Entry<T, Integer> item : itemsToRemove) { for (Map.Entry<T, Integer> item : itemsToRemove) {
this.pool.remove(item.getKey(), item.getValue()); this.pool.remove(item.getKey(), item.getValue());
@@ -728,7 +724,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
this.model.removeItem(item.getKey(), item.getValue()); this.model.removeItem(item.getKey(), item.getValue());
} }
} }
this.updateView(false, selectedItemsBefore, selectedIndexBefore); this.updateView(false, itemsToSelect);
} }
/** /**
@@ -739,7 +735,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
public void removeAllItems() { public void removeAllItems() {
this.pool.clear(); this.pool.clear();
this.model.clear(); this.model.clear();
this.updateView(false, null, 0); this.updateView(false, null);
} }
/** /**
@@ -869,7 +865,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
this.filterPredicate = newFilterPredicate; this.filterPredicate = newFilterPredicate;
if (this.pool != null) { if (this.pool != null) {
this.updateView(true, this.getSelectedItems(), 0); this.updateView(true, this.getSelectedItems());
} }
return true; return true;
} }
@@ -948,7 +944,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
* *
* @param bForceFilter * @param bForceFilter
*/ */
public void updateView(final boolean forceFilter, final Iterable<T> itemsToSelect, final int backupIndexToSelect) { public void updateView(final boolean forceFilter, final Iterable<T> itemsToSelect) {
final boolean useFilter = (forceFilter && (this.filterPredicate != null)) || !isUnfiltered(); final boolean useFilter = (forceFilter && (this.filterPredicate != null)) || !isUnfiltered();
if (useFilter || this.wantUnique || forceFilter) { if (useFilter || this.wantUnique || forceFilter) {
@@ -972,7 +968,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel {
this.model.addItems(this.pool); this.model.addItems(this.pool);
} }
this.currentView.refresh(itemsToSelect, backupIndexToSelect); this.currentView.refresh(itemsToSelect, this.getSelectedIndex(), forceFilter ? 0 : this.currentView.getScrollValue());
for (ItemFilter<? extends T> filter : this.orderedFilters) { for (ItemFilter<? extends T> filter : this.orderedFilters) {
filter.afterFiltersApplied(); filter.afterFiltersApplied();

View File

@@ -205,7 +205,7 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
} }
if (!forSetup) { if (!forSetup) {
refresh(null, -1); refresh(null, -1, 0);
} }
} }
@@ -220,15 +220,15 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
pileBy = pileBy0; pileBy = pileBy0;
if (!forSetup) { if (!forSetup) {
refresh(null, -1); refresh(null, -1, 0);
} }
} }
@Override @Override
protected void fixSelection(final Iterable<T> itemsToSelect, final int backupIndexToSelect) { protected void fixSelection(final Iterable<T> itemsToSelect, final int backupIndexToSelect, final int scrollValueToRestore) {
if (itemsToSelect == null) { if (itemsToSelect == null) {
clearSelection(); //just clear selection if no items to select clearSelection(); //just clear selection if no items to select
getScroller().getVerticalScrollBar().setValue(0); //ensure scrolled to top setScrollValue(scrollValueToRestore); //ensure scroll value restored
onSelectionChange(); onSelectionChange();
} }
else { else {

View File

@@ -157,7 +157,7 @@ public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
this.table.setColumnModel(colmodel); this.table.setColumnModel(colmodel);
this.tableModel.setup(); this.tableModel.setup();
this.refresh(selectedItemsBefore, 0); this.refresh(selectedItemsBefore, 0, 0);
} }
public JTable getTable() { public JTable getTable() {
@@ -517,6 +517,11 @@ public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
}; };
private final FMouseAdapter headerMouseAdapter = new FMouseAdapter(true) { private final FMouseAdapter headerMouseAdapter = new FMouseAdapter(true) {
@Override
public void onLeftMouseDown(MouseEvent e) {
focus();
}
@Override @Override
public void onLeftClick(MouseEvent e) { public void onLeftClick(MouseEvent e) {
if (Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR) == table.getTableHeader().getCursor()) { if (Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR) == table.getTableHeader().getCursor()) {

View File

@@ -104,21 +104,28 @@ public abstract class ItemView<T extends InventoryItem> {
return this.scroller; return this.scroller;
} }
public int getScrollValue() {
return scroller.getVerticalScrollBar().getValue();
}
public void setScrollValue(int value) {
scroller.getVerticalScrollBar().setValue(value);
}
public boolean isIncrementalSearchActive() { public boolean isIncrementalSearchActive() {
return this.isIncrementalSearchActive; return this.isIncrementalSearchActive;
} }
public void refresh(final Iterable<T> itemsToSelect, final int backupIndexToSelect) { public void refresh(final Iterable<T> itemsToSelect, final int backupIndexToSelect, final int scrollValueToRestore) {
this.model.refreshSort(); this.model.refreshSort();
onRefresh(); onRefresh();
fixSelection(itemsToSelect, backupIndexToSelect); fixSelection(itemsToSelect, backupIndexToSelect, scrollValueToRestore);
} }
protected abstract void onResize(); protected abstract void onResize();
protected abstract void onRefresh(); protected abstract void onRefresh();
protected void fixSelection(final Iterable<T> itemsToSelect, final int backupIndexToSelect) { protected void fixSelection(final Iterable<T> itemsToSelect, final int backupIndexToSelect, final int scrollValueToRestore) {
if (itemsToSelect == null) { if (itemsToSelect == null) {
setSelectedIndex(0, false); //select first item if no items to select setSelectedIndex(0, false); //select first item if no items to select
getScroller().getVerticalScrollBar().setValue(0); //ensure scrolled to top
} }
else { else {
if (!setSelectedItems(itemsToSelect)) { if (!setSelectedItems(itemsToSelect)) {