Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ public FDeckChooser(final CDetailPicture cDetailPicture, final boolean forAi, Ga
isForCommander = forCommander;
final UiCommand cmdViewDeck = () -> {
if (selectedDeckType != DeckType.COLOR_DECK && selectedDeckType != DeckType.THEME_DECK) {
FDeckViewer.show(getDeck());
FDeckViewer.show(getDeck(), gameType.getDeckFormat() == DeckFormat.Commander);
}
};
lstDecks.setItemActivateCommand(cmdViewDeck);
Expand Down Expand Up @@ -234,7 +234,10 @@ private void updateNetDecks() {
if (netDeckCategory != null) {
decksComboBox.setText(netDeckCategory.getDeckType());
}
updateDecks(DeckProxy.getNetDecks(netDeckCategory), ItemManagerConfig.NET_DECKS);
final ItemManagerConfig config = selectedDeckType == DeckType.NET_COMMANDER_DECK
? ItemManagerConfig.NET_COMMANDER_DECKS
: ItemManagerConfig.NET_DECKS;
updateDecks(DeckProxy.getNetDecks(netDeckCategory), config);
}

private void updateNetArchiveStandardDecks() {
Expand Down
15 changes: 13 additions & 2 deletions forge-gui-desktop/src/main/java/forge/deckchooser/FDeckViewer.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import forge.itemmanager.ItemManagerConfig;
import forge.itemmanager.ItemManagerContainer;
import forge.itemmanager.ItemManagerModel;
import forge.itemmanager.views.CommanderBracketDeckView;
import forge.itemmanager.views.ImageView;
import forge.localinstance.properties.ForgePreferences;
import forge.model.FModel;
Expand Down Expand Up @@ -52,17 +53,27 @@ public class FDeckViewer extends FDialog {
private boolean isDisplayAlt = false;

public static void show(final Deck deck) {
show(deck, false);
}

public static void show(final Deck deck, final boolean showCommanderBracket) {
if (deck == null) { return; }

final FDeckViewer deckViewer = new FDeckViewer(deck);
final FDeckViewer deckViewer = new FDeckViewer(deck, showCommanderBracket);
deckViewer.setVisible(true);
deckViewer.dispose();
}

private FDeckViewer(final Deck deck0) {
private FDeckViewer(final Deck deck0, final boolean showCommanderBracket) {
this.deck = deck0;
this.setTitle(deck.getName());
this.cardManager = new CardManager(null, false, false, false) {
{
if (showCommanderBracket) {
addView(new CommanderBracketDeckView(this, getModel(), FDeckViewer.this.deck));
}
}

@Override //show hovered card in Image View in dialog instead of main Detail/Picture panes
protected ImageView<PaperCard> createImageView(final ItemManagerModel<PaperCard> model0) {
return new ImageView<PaperCard>(this, model0, false) {
Expand Down
11 changes: 11 additions & 0 deletions forge-gui-desktop/src/main/java/forge/itemmanager/DeckManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,14 @@
import javax.swing.JTable;

import forge.itemmanager.filters.*;
import forge.itemmanager.views.CommanderBracketView;
import forge.localinstance.properties.ForgePreferences;
import org.apache.commons.lang3.StringUtils;

import forge.Singletons;
import forge.deck.Deck;
import forge.deck.DeckBase;
import forge.deck.DeckFormat;
import forge.deck.DeckProxy;
import forge.deck.io.DeckPreferences;
import forge.game.GameFormat;
Expand Down Expand Up @@ -72,6 +74,10 @@ public DeckManager(final GameType gt, final CDetailPicture cDetailPicture) {
super(DeckProxy.class, cDetailPicture, true, false);
this.gameType = gt;

if (gt.getDeckFormat() == DeckFormat.Commander) {
this.addView(new CommanderBracketView(this));
}

this.addSelectionListener(e -> {
if (cmdSelect != null) {
cmdSelect.run();
Expand All @@ -86,6 +92,11 @@ public GameType getGameType() {
return gameType;
}

@Override
public ItemManagerModel<DeckProxy> getModel() {
return super.getModel();
}

@Override
public void setup(final ItemManagerConfig config0) {
final boolean wasStringOnly = (this.getConfig() == ItemManagerConfig.STRING_ONLY);
Expand Down
11 changes: 11 additions & 0 deletions forge-gui-desktop/src/main/java/forge/itemmanager/ItemManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -139,10 +139,21 @@ protected ItemManager(final Class<T> genericType0, final CDetailPicture cDetailP
this.currentView = this.listView;
}

protected void addView(final ItemView<T> view) {
if (this.initialized) {
throw new IllegalStateException("Views must be added before ItemManager initialization");
}
this.views.add(view);
}

protected ImageView<T> createImageView(final ItemManagerModel<T> model0) {
return new ImageView<>(this, model0, this.showRanking);
}

protected ItemManagerModel<T> getModel() {
return this.model;
}

public final CDetailPicture getCDetailPicture() {
return cDetailPicture;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package forge.itemmanager.views;

import forge.deck.CommanderBracketCalculator;
import forge.deck.Deck;
import forge.item.PaperCard;
import forge.itemmanager.CardManager;
import forge.itemmanager.ItemManagerModel;

@SuppressWarnings("serial")
public final class CommanderBracketDeckView extends CommanderBracketTextView<PaperCard> {
private final Deck deck;

public CommanderBracketDeckView(final CardManager itemManager0, final ItemManagerModel<PaperCard> model0, final Deck deck0) {
super(itemManager0, model0);
this.deck = deck0;
updateText();
}

@Override
protected String getText() {
return deck.getName() + "\n\n" + CommanderBracketCalculator.getExplanation(deck);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
package forge.itemmanager.views;

import forge.item.InventoryItem;
import forge.itemmanager.ColumnDef;
import forge.itemmanager.ItemManager;
import forge.itemmanager.ItemManagerConfig;
import forge.itemmanager.ItemManagerModel;
import forge.localinstance.skin.FSkinProp;
import forge.toolbox.FLabel;
import forge.toolbox.FPanel;
import forge.toolbox.FSkin;

import javax.swing.JComponent;
import javax.swing.JTextArea;
import javax.swing.JViewport;
import javax.swing.border.EmptyBorder;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.Point;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

@SuppressWarnings("serial")
abstract class CommanderBracketTextView<T extends InventoryItem> extends ItemView<T> {
private final FPanel panel = new FPanel(new BorderLayout());
private final JTextArea textArea = new JTextArea();
private int selectedIndex = -1;

CommanderBracketTextView(final ItemManager<T> itemManager0, final ItemManagerModel<T> model0) {
super(itemManager0, model0);
this.panel.setBackgroundTexture(FSkin.getIcon(FSkinProp.BG_TEXTURE));
this.panel.setBorderToggle(false);
this.textArea.setEditable(false);
this.textArea.setLineWrap(true);
this.textArea.setWrapStyleWord(true);
this.textArea.setOpaque(false);
this.textArea.setFont(FSkin.getFont(13).getBaseFont());
this.textArea.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT).getColor());
this.textArea.setCaretColor(FSkin.getColor(FSkin.Colors.CLR_TEXT).getColor());
this.textArea.setBorder(new EmptyBorder(8, 8, 8, 8));
this.panel.add(textArea, BorderLayout.CENTER);
this.getButton().setBorder(new EmptyBorder(4, 0, 0, 0));
this.getPnlOptions().setVisible(false);
}

@Override
public JComponent getComponent() {
return panel;
}

@Override
public void setup(final ItemManagerConfig config, final Map<ColumnDef, ItemTableColumn> colOverrides) {
}

@Override
public void setAllowMultipleSelections(final boolean allowMultipleSelections) {
}

@Override
public T getItemAtIndex(final int index) {
final List<Map.Entry<T, Integer>> items = model.getOrderedList();
if (index < 0 || index >= items.size()) {
return null;
}
return items.get(index).getKey();
}

@Override
public int getIndexOfItem(final T item) {
final List<Map.Entry<T, Integer>> items = model.getOrderedList();
for (int i = 0; i < items.size(); i++) {
if (items.get(i).getKey().equals(item)) {
return i;
}
}
return -1;
}

@Override
public int getSelectedIndex() {
return selectedIndex;
}

@Override
public Iterable<Integer> getSelectedIndices() {
return selectedIndex < 0 ? Collections.emptyList() : Collections.singletonList(selectedIndex);
}

@Override
public void selectAll() {
}

@Override
public int getCount() {
return model.getOrderedList().size();
}

@Override
public int getSelectionCount() {
return selectedIndex < 0 ? 0 : 1;
}

@Override
public int getIndexAtPoint(final Point p) {
return selectedIndex;
}

@Override
protected FSkin.SkinImage getIcon() {
return null;
}

@Override
protected String getButtonText() {
return "B";
}

@Override
protected void configureTextButton(final FLabel.Builder buttonBuilder) {
buttonBuilder.fontStyle(Font.BOLD).fontSize(18);
}

@Override
protected String getCaption() {
return localizer.getMessage("lblBracketView");
}

@Override
protected void onSetSelectedIndex(final int index) {
selectedIndex = index;
updateText();
onSelectionChange();
}

@Override
protected void onSetSelectedIndices(final Iterable<Integer> indices) {
final List<Integer> indexList = new ArrayList<>();
for (final Integer index : indices) {
indexList.add(index);
}
selectedIndex = indexList.isEmpty() ? -1 : indexList.get(0);
updateText();
onSelectionChange();
}

@Override
protected void onScrollSelectionIntoView(final JViewport viewport) {
}

@Override
protected void onResize() {
}

@Override
protected void onRefresh() {
if (selectedIndex >= getCount()) {
selectedIndex = getCount() - 1;
}
updateText();
}

protected final void updateText() {
textArea.setText(getText());
textArea.setCaretPosition(0);
}

protected abstract String getText();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package forge.itemmanager.views;

import forge.deck.CommanderBracketCalculator;
import forge.deck.DeckProxy;
import forge.itemmanager.DeckManager;
import forge.itemmanager.ItemManagerModel;

@SuppressWarnings("serial")
public final class CommanderBracketView extends CommanderBracketTextView<DeckProxy> {
public CommanderBracketView(final DeckManager itemManager0) {
super(itemManager0, getModel(itemManager0));
}

private static ItemManagerModel<DeckProxy> getModel(final DeckManager itemManager) {
return itemManager.getModel();
}

@Override
protected String getText() {
final DeckProxy deck = getSelectedItem();
if (deck == null) {
return localizer.getMessage("lblCommanderBracketSelectDeck");
}
return deck.getName() + "\n\n" + CommanderBracketCalculator.getExplanation(deck.getDeck());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -85,13 +85,27 @@ protected void processMouseWheelEvent(final MouseWheelEvent e) {
this.pnlOptions.setOpaque(false);
this.pnlOptions.setBorder(new FSkin.MatteSkinBorder(1, 0, 0, 0, BORDER_COLOR));
this.scroller.setBorder(new FSkin.LineSkinBorder(BORDER_COLOR));
this.button = new FLabel.Builder()
final String buttonText = getButtonText();
final FLabel.Builder buttonBuilder = new FLabel.Builder()
.hoverable()
.selectable(true)
.icon(getIcon())
.iconScaleAuto(false)
.tooltip(getCaption())
.build();
.text(buttonText);
final SkinImage icon = getIcon();
if (icon == null) {
buttonBuilder.fontAlign(SwingConstants.CENTER);
configureTextButton(buttonBuilder);
}
else {
buttonBuilder.icon(icon).iconScaleAuto(false);
}
this.button = buttonBuilder.build();
if (buttonText != null) {
this.button.setHorizontalAlignment(SwingConstants.CENTER);
this.button.setVerticalAlignment(SwingConstants.CENTER);
this.button.setHorizontalTextPosition(SwingConstants.CENTER);
this.button.setVerticalTextPosition(SwingConstants.CENTER);
}

this.uniqueCardsOnlyChkBox = new FCheckBox(localizer.getMessage("lblUniqueCardsOnly"),
this.itemManager.getWantUnique());
Expand Down Expand Up @@ -341,6 +355,11 @@ public String toString() {
public abstract int getSelectionCount();
public abstract int getIndexAtPoint(Point p);
protected abstract SkinImage getIcon();
protected String getButtonText() {
return null;
}
protected void configureTextButton(final FLabel.Builder buttonBuilder) {
}
protected abstract String getCaption();
protected abstract void onSetSelectedIndex(int index);
protected abstract void onSetSelectedIndices(Iterable<Integer> indices);
Expand Down
Loading
Loading