mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 03:08:02 +00:00
Support specifying sort for mobile game
This commit is contained in:
@@ -70,6 +70,11 @@ public final class DeckManager extends ItemManager<DeckProxy> {
|
|||||||
return new DeckSearchFilter(this);
|
return new DeckSearchFilter(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean allowSortChange() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private static final float IMAGE_SIZE = CardRenderer.MANA_SYMBOL_SIZE;
|
private static final float IMAGE_SIZE = CardRenderer.MANA_SYMBOL_SIZE;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ import forge.itemmanager.views.ItemView;
|
|||||||
import forge.menu.FDropDownMenu;
|
import forge.menu.FDropDownMenu;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.screens.FScreen;
|
import forge.screens.FScreen;
|
||||||
|
import forge.toolbox.FComboBox;
|
||||||
import forge.toolbox.FContainer;
|
import forge.toolbox.FContainer;
|
||||||
import forge.toolbox.FEvent;
|
import forge.toolbox.FEvent;
|
||||||
import forge.toolbox.FEvent.FEventHandler;
|
import forge.toolbox.FEvent.FEventHandler;
|
||||||
@@ -64,6 +65,7 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
private final Class<T> genericType;
|
private final Class<T> genericType;
|
||||||
private ItemManagerConfig config;
|
private ItemManagerConfig config;
|
||||||
private boolean hasNewColumn;
|
private boolean hasNewColumn;
|
||||||
|
private List<ItemColumn> sortCols = new ArrayList<ItemColumn>();
|
||||||
|
|
||||||
private final TextSearchFilter<? extends T> searchFilter;
|
private final TextSearchFilter<? extends T> searchFilter;
|
||||||
|
|
||||||
@@ -73,6 +75,9 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
.icon(VIEW_OPTIONS_ICON).iconScaleFactor(0.9f)
|
.icon(VIEW_OPTIONS_ICON).iconScaleFactor(0.9f)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
private final FLabel lblSort;
|
||||||
|
private final FComboBox<ItemColumn> cbxSortOptions;
|
||||||
|
|
||||||
private final List<ItemView<T>> views = new ArrayList<ItemView<T>>();
|
private final List<ItemView<T>> views = new ArrayList<ItemView<T>>();
|
||||||
private final ItemListView<T> listView;
|
private final ItemListView<T> listView;
|
||||||
private final ImageView<T> imageView;
|
private final ImageView<T> imageView;
|
||||||
@@ -114,6 +119,16 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
}
|
}
|
||||||
add(btnAdvancedSearchOptions);
|
add(btnAdvancedSearchOptions);
|
||||||
btnAdvancedSearchOptions.setSelected(!hideFilters);
|
btnAdvancedSearchOptions.setSelected(!hideFilters);
|
||||||
|
if (allowSortChange()) {
|
||||||
|
lblSort = add(new FLabel.Builder().text("Sort:").font(FSkinFont.get(12)).textColor(FLabel.INLINE_LABEL_COLOR).build());
|
||||||
|
lblSort.setWidth(lblSort.getAutoSizeBounds().width);
|
||||||
|
cbxSortOptions = add(new FComboBox<ItemColumn>());
|
||||||
|
cbxSortOptions.setFont(lblSort.getFont());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lblSort = null;
|
||||||
|
cbxSortOptions = null;
|
||||||
|
}
|
||||||
add(currentView.getPnlOptions());
|
add(currentView.getPnlOptions());
|
||||||
add(currentView.getScroller());
|
add(currentView.getScroller());
|
||||||
|
|
||||||
@@ -149,6 +164,72 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
public void setup(ItemManagerConfig config0, Map<ColumnDef, ItemColumn> colOverrides) {
|
public void setup(ItemManagerConfig config0, Map<ColumnDef, ItemColumn> colOverrides) {
|
||||||
config = config0;
|
config = config0;
|
||||||
setWantUnique(config0.getUniqueCardsOnly());
|
setWantUnique(config0.getUniqueCardsOnly());
|
||||||
|
|
||||||
|
//ensure sort cols ordered properly
|
||||||
|
final List<ItemColumn> cols = new LinkedList<ItemColumn>();
|
||||||
|
for (ItemColumnConfig colConfig : config.getCols().values()) {
|
||||||
|
if (colOverrides == null || !colOverrides.containsKey(colConfig.getDef())) {
|
||||||
|
cols.add(new ItemColumn(colConfig));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cols.add(colOverrides.get(colConfig.getDef()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Collections.sort(cols, new Comparator<ItemColumn>() {
|
||||||
|
@Override
|
||||||
|
public int compare(ItemColumn arg0, ItemColumn arg1) {
|
||||||
|
return Integer.compare(arg0.getConfig().getIndex(), arg1.getConfig().getIndex());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
sortCols.clear();
|
||||||
|
|
||||||
|
int modelIndex = 0;
|
||||||
|
for (final ItemColumn col : cols) {
|
||||||
|
col.setIndex(modelIndex++);
|
||||||
|
if (col.isVisible()) { sortCols.add(col); }
|
||||||
|
}
|
||||||
|
|
||||||
|
final ItemColumn[] sortcols = new ItemColumn[sortCols.size()];
|
||||||
|
|
||||||
|
// Assemble priority sort.
|
||||||
|
for (ItemColumn col : sortCols) {
|
||||||
|
if (cbxSortOptions != null) {
|
||||||
|
cbxSortOptions.addItem(col);
|
||||||
|
}
|
||||||
|
if (col.getSortPriority() > 0 && col.getSortPriority() <= sortcols.length) {
|
||||||
|
sortcols[col.getSortPriority() - 1] = col;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cbxSortOptions != null) {
|
||||||
|
cbxSortOptions.setText("(none)");
|
||||||
|
}
|
||||||
|
|
||||||
|
model.getCascadeManager().reset();
|
||||||
|
|
||||||
|
for (int i = sortcols.length - 1; i >= 0; i--) {
|
||||||
|
ItemColumn col = sortcols[i];
|
||||||
|
if (col != null) {
|
||||||
|
model.getCascadeManager().add(col, true);
|
||||||
|
if (cbxSortOptions != null) {
|
||||||
|
cbxSortOptions.setSelectedItem(col);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cbxSortOptions != null) {
|
||||||
|
cbxSortOptions.setChangedHandler(new FEventHandler() {
|
||||||
|
@Override
|
||||||
|
public void handleEvent(FEvent e) {
|
||||||
|
model.getCascadeManager().add(cbxSortOptions.getSelectedItem(), false);
|
||||||
|
model.refreshSort();
|
||||||
|
ItemManagerConfig.save();
|
||||||
|
updateView(true, null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
for (ItemView<T> view : views) {
|
for (ItemView<T> view : views) {
|
||||||
view.setup(config0, colOverrides);
|
view.setup(config0, colOverrides);
|
||||||
}
|
}
|
||||||
@@ -157,6 +238,10 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
hasNewColumn = config.getCols().containsKey(ColumnDef.NEW);
|
hasNewColumn = config.getCols().containsKey(ColumnDef.NEW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected boolean allowSortChange() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
protected String getItemSuffix(Entry<T, Integer> item) {
|
protected String getItemSuffix(Entry<T, Integer> item) {
|
||||||
return hasNewColumn && FModel.getQuest().getCards().isNew(item.getKey()) ? " *NEW*" : null;
|
return hasNewColumn && FModel.getQuest().getCards().isNew(item.getKey()) ? " *NEW*" : null;
|
||||||
}
|
}
|
||||||
@@ -218,6 +303,10 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
for (ItemFilter<? extends T> filter : filters) {
|
for (ItemFilter<? extends T> filter : filters) {
|
||||||
helper.include(filter.getWidget(), filter.getPreferredWidth(helper.getRemainingLineWidth(), fieldHeight), fieldHeight);
|
helper.include(filter.getWidget(), filter.getPreferredWidth(helper.getRemainingLineWidth(), fieldHeight), fieldHeight);
|
||||||
}
|
}
|
||||||
|
if (allowSortChange()) {
|
||||||
|
helper.include(lblSort, lblSort.getWidth(), fieldHeight);
|
||||||
|
helper.fillLine(cbxSortOptions, fieldHeight);
|
||||||
|
}
|
||||||
helper.newLine(-ItemFilter.PADDING);
|
helper.newLine(-ItemFilter.PADDING);
|
||||||
if (currentView.getPnlOptions().getChildCount() > 0) {
|
if (currentView.getPnlOptions().getChildCount() > 0) {
|
||||||
helper.fillLine(currentView.getPnlOptions(), fieldHeight + ItemFilter.PADDING);
|
helper.fillLine(currentView.getPnlOptions(), fieldHeight + ItemFilter.PADDING);
|
||||||
|
|||||||
@@ -45,7 +45,6 @@ public abstract class FormatFilter<T extends InventoryItem> extends ItemFilter<T
|
|||||||
cbxFormats.addItem(format);
|
cbxFormats.addItem(format);
|
||||||
}
|
}
|
||||||
cbxFormats.addItem("Choose Sets...");
|
cbxFormats.addItem("Choose Sets...");
|
||||||
cbxFormats.setSelectedIndex(0);
|
|
||||||
selectedFormat = cbxFormats.getText();
|
selectedFormat = cbxFormats.getText();
|
||||||
|
|
||||||
cbxFormats.setChangedHandler(new FEventHandler() {
|
cbxFormats.setChangedHandler(new FEventHandler() {
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import forge.assets.FSkinImage;
|
|||||||
import forge.item.InventoryItem;
|
import forge.item.InventoryItem;
|
||||||
import forge.itemmanager.ColumnDef;
|
import forge.itemmanager.ColumnDef;
|
||||||
import forge.itemmanager.ItemColumn;
|
import forge.itemmanager.ItemColumn;
|
||||||
import forge.itemmanager.ItemColumnConfig;
|
|
||||||
import forge.itemmanager.ItemManager;
|
import forge.itemmanager.ItemManager;
|
||||||
import forge.itemmanager.ItemManagerConfig;
|
import forge.itemmanager.ItemManagerConfig;
|
||||||
import forge.itemmanager.ItemManagerModel;
|
import forge.itemmanager.ItemManagerModel;
|
||||||
@@ -69,32 +68,6 @@ public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setup(ItemManagerConfig config, Map<ColumnDef, ItemColumn> colOverrides) {
|
public void setup(ItemManagerConfig config, Map<ColumnDef, ItemColumn> colOverrides) {
|
||||||
//ensure cols ordered properly
|
|
||||||
final List<ItemColumn> cols = new LinkedList<ItemColumn>();
|
|
||||||
for (ItemColumnConfig colConfig : config.getCols().values()) {
|
|
||||||
if (colOverrides == null || !colOverrides.containsKey(colConfig.getDef())) {
|
|
||||||
cols.add(new ItemColumn(colConfig));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
cols.add(colOverrides.get(colConfig.getDef()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Collections.sort(cols, new Comparator<ItemColumn>() {
|
|
||||||
@Override
|
|
||||||
public int compare(ItemColumn arg0, ItemColumn arg1) {
|
|
||||||
return Integer.compare(arg0.getConfig().getIndex(), arg1.getConfig().getIndex());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
list.cols.clear();
|
|
||||||
|
|
||||||
int modelIndex = 0;
|
|
||||||
for (final ItemColumn col : cols) {
|
|
||||||
col.setIndex(modelIndex++);
|
|
||||||
if (col.isVisible()) { list.cols.add(col); }
|
|
||||||
}
|
|
||||||
|
|
||||||
listModel.setup();
|
|
||||||
refresh(null, 0, 0);
|
refresh(null, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,7 +187,6 @@ public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
|
|||||||
|
|
||||||
public final class ItemList extends FList<Entry<T, Integer>> {
|
public final class ItemList extends FList<Entry<T, Integer>> {
|
||||||
private final ItemManager<T>.ItemRenderer renderer;
|
private final ItemManager<T>.ItemRenderer renderer;
|
||||||
private List<ItemColumn> cols = new ArrayList<ItemColumn>();
|
|
||||||
|
|
||||||
private ItemList() {
|
private ItemList() {
|
||||||
renderer = itemManager.getListItemRenderer();
|
renderer = itemManager.getListItemRenderer();
|
||||||
@@ -284,14 +256,6 @@ public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
|
|||||||
setFont(FSkinFont.get(14));
|
setFont(FSkinFont.get(14));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Iterable<ItemColumn> getCells() {
|
|
||||||
return cols;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getCellCount() {
|
|
||||||
return cols.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void drawBackground(Graphics g) {
|
protected void drawBackground(Graphics g) {
|
||||||
//draw no background by default
|
//draw no background by default
|
||||||
@@ -326,26 +290,6 @@ public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
|
|||||||
model = model0;
|
model = model0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setup() {
|
|
||||||
final ItemColumn[] sortcols = new ItemColumn[list.getCellCount()];
|
|
||||||
|
|
||||||
// Assemble priority sort.
|
|
||||||
for (ItemColumn col : list.getCells()) {
|
|
||||||
if (col.getSortPriority() > 0 && col.getSortPriority() <= sortcols.length) {
|
|
||||||
sortcols[col.getSortPriority() - 1] = col;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
model.getCascadeManager().reset();
|
|
||||||
|
|
||||||
for (int i = sortcols.length - 1; i >= 0; i--) {
|
|
||||||
ItemColumn col = sortcols[i];
|
|
||||||
if (col != null) {
|
|
||||||
model.getCascadeManager().add(col, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Entry<T, Integer> rowToItem(final int row) {
|
public Entry<T, Integer> rowToItem(final int row) {
|
||||||
final List<Entry<T, Integer>> orderedList = model.getOrderedList();
|
final List<Entry<T, Integer>> orderedList = model.getOrderedList();
|
||||||
return (row >= 0) && (row < orderedList.size()) ? orderedList.get(row) : null;
|
return (row >= 0) && (row < orderedList.size()) ? orderedList.get(row) : null;
|
||||||
|
|||||||
Reference in New Issue
Block a user