mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 10:48:00 +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);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean allowSortChange() {
|
||||
return false;
|
||||
}
|
||||
|
||||
private static final float IMAGE_SIZE = CardRenderer.MANA_SYMBOL_SIZE;
|
||||
|
||||
@Override
|
||||
|
||||
@@ -37,6 +37,7 @@ import forge.itemmanager.views.ItemView;
|
||||
import forge.menu.FDropDownMenu;
|
||||
import forge.model.FModel;
|
||||
import forge.screens.FScreen;
|
||||
import forge.toolbox.FComboBox;
|
||||
import forge.toolbox.FContainer;
|
||||
import forge.toolbox.FEvent;
|
||||
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 ItemManagerConfig config;
|
||||
private boolean hasNewColumn;
|
||||
private List<ItemColumn> sortCols = new ArrayList<ItemColumn>();
|
||||
|
||||
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)
|
||||
.build();
|
||||
|
||||
private final FLabel lblSort;
|
||||
private final FComboBox<ItemColumn> cbxSortOptions;
|
||||
|
||||
private final List<ItemView<T>> views = new ArrayList<ItemView<T>>();
|
||||
private final ItemListView<T> listView;
|
||||
private final ImageView<T> imageView;
|
||||
@@ -114,6 +119,16 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
||||
}
|
||||
add(btnAdvancedSearchOptions);
|
||||
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.getScroller());
|
||||
|
||||
@@ -149,6 +164,72 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
||||
public void setup(ItemManagerConfig config0, Map<ColumnDef, ItemColumn> colOverrides) {
|
||||
config = config0;
|
||||
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) {
|
||||
view.setup(config0, colOverrides);
|
||||
}
|
||||
@@ -157,6 +238,10 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
||||
hasNewColumn = config.getCols().containsKey(ColumnDef.NEW);
|
||||
}
|
||||
|
||||
protected boolean allowSortChange() {
|
||||
return true;
|
||||
}
|
||||
|
||||
protected String getItemSuffix(Entry<T, Integer> item) {
|
||||
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) {
|
||||
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);
|
||||
if (currentView.getPnlOptions().getChildCount() > 0) {
|
||||
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("Choose Sets...");
|
||||
cbxFormats.setSelectedIndex(0);
|
||||
selectedFormat = cbxFormats.getText();
|
||||
|
||||
cbxFormats.setChangedHandler(new FEventHandler() {
|
||||
|
||||
@@ -26,7 +26,6 @@ import forge.assets.FSkinImage;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.itemmanager.ColumnDef;
|
||||
import forge.itemmanager.ItemColumn;
|
||||
import forge.itemmanager.ItemColumnConfig;
|
||||
import forge.itemmanager.ItemManager;
|
||||
import forge.itemmanager.ItemManagerConfig;
|
||||
import forge.itemmanager.ItemManagerModel;
|
||||
@@ -69,32 +68,6 @@ public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
|
||||
|
||||
@Override
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -214,7 +187,6 @@ public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
|
||||
|
||||
public final class ItemList extends FList<Entry<T, Integer>> {
|
||||
private final ItemManager<T>.ItemRenderer renderer;
|
||||
private List<ItemColumn> cols = new ArrayList<ItemColumn>();
|
||||
|
||||
private ItemList() {
|
||||
renderer = itemManager.getListItemRenderer();
|
||||
@@ -284,14 +256,6 @@ public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
|
||||
setFont(FSkinFont.get(14));
|
||||
}
|
||||
|
||||
public Iterable<ItemColumn> getCells() {
|
||||
return cols;
|
||||
}
|
||||
|
||||
public int getCellCount() {
|
||||
return cols.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawBackground(Graphics g) {
|
||||
//draw no background by default
|
||||
@@ -326,26 +290,6 @@ public final class ItemListView<T extends InventoryItem> extends ItemView<T> {
|
||||
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) {
|
||||
final List<Entry<T, Integer>> orderedList = model.getOrderedList();
|
||||
return (row >= 0) && (row < orderedList.size()) ? orderedList.get(row) : null;
|
||||
|
||||
Reference in New Issue
Block a user