diff --git a/forge-gui-mobile/src/forge/itemmanager/DeckManager.java b/forge-gui-mobile/src/forge/itemmanager/DeckManager.java index f7390ed9b2a..889e3f7d36e 100644 --- a/forge-gui-mobile/src/forge/itemmanager/DeckManager.java +++ b/forge-gui-mobile/src/forge/itemmanager/DeckManager.java @@ -70,6 +70,11 @@ public final class DeckManager extends ItemManager { return new DeckSearchFilter(this); } + @Override + protected boolean allowSortChange() { + return false; + } + private static final float IMAGE_SIZE = CardRenderer.MANA_SYMBOL_SIZE; @Override diff --git a/forge-gui-mobile/src/forge/itemmanager/ItemManager.java b/forge-gui-mobile/src/forge/itemmanager/ItemManager.java index e7f4cf39286..149215e1c0b 100644 --- a/forge-gui-mobile/src/forge/itemmanager/ItemManager.java +++ b/forge-gui-mobile/src/forge/itemmanager/ItemManager.java @@ -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 extends FContainer im private final Class genericType; private ItemManagerConfig config; private boolean hasNewColumn; + private List sortCols = new ArrayList(); private final TextSearchFilter searchFilter; @@ -73,6 +75,9 @@ public abstract class ItemManager extends FContainer im .icon(VIEW_OPTIONS_ICON).iconScaleFactor(0.9f) .build(); + private final FLabel lblSort; + private final FComboBox cbxSortOptions; + private final List> views = new ArrayList>(); private final ItemListView listView; private final ImageView imageView; @@ -114,6 +119,16 @@ public abstract class ItemManager 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()); + cbxSortOptions.setFont(lblSort.getFont()); + } + else { + lblSort = null; + cbxSortOptions = null; + } add(currentView.getPnlOptions()); add(currentView.getScroller()); @@ -149,6 +164,72 @@ public abstract class ItemManager extends FContainer im public void setup(ItemManagerConfig config0, Map colOverrides) { config = config0; setWantUnique(config0.getUniqueCardsOnly()); + + //ensure sort cols ordered properly + final List cols = new LinkedList(); + 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() { + @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 view : views) { view.setup(config0, colOverrides); } @@ -157,6 +238,10 @@ public abstract class ItemManager extends FContainer im hasNewColumn = config.getCols().containsKey(ColumnDef.NEW); } + protected boolean allowSortChange() { + return true; + } + protected String getItemSuffix(Entry item) { return hasNewColumn && FModel.getQuest().getCards().isNew(item.getKey()) ? " *NEW*" : null; } @@ -218,6 +303,10 @@ public abstract class ItemManager extends FContainer im for (ItemFilter 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); diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/FormatFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/FormatFilter.java index adc6e33342a..017c0dba3a1 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/FormatFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/FormatFilter.java @@ -45,7 +45,6 @@ public abstract class FormatFilter extends ItemFilter extends ItemView { @Override public void setup(ItemManagerConfig config, Map colOverrides) { - //ensure cols ordered properly - final List cols = new LinkedList(); - 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() { - @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 extends ItemView { public final class ItemList extends FList> { private final ItemManager.ItemRenderer renderer; - private List cols = new ArrayList(); private ItemList() { renderer = itemManager.getListItemRenderer(); @@ -284,14 +256,6 @@ public final class ItemListView extends ItemView { setFont(FSkinFont.get(14)); } - public Iterable 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 extends ItemView { 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 rowToItem(final int row) { final List> orderedList = model.getOrderedList(); return (row >= 0) && (row < orderedList.size()) ? orderedList.get(row) : null;