Update and cleanup card viewing code. Fixes issue with

morph colour leaking, viewing opponent's morphs through
card zoomer, and other minor bugs.
This commit is contained in:
elcnesh
2015-05-18 07:33:21 +00:00
parent 5cba52b5a6
commit 9767b20386
14 changed files with 149 additions and 154 deletions

View File

@@ -190,7 +190,7 @@ public class BoxedProductCardListViewer extends FDialog {
if ((row >= 0) && (row < BoxedProductCardListViewer.this.list.size())) { if ((row >= 0) && (row < BoxedProductCardListViewer.this.list.size())) {
final PaperCard cp = BoxedProductCardListViewer.this.list.get(row); final PaperCard cp = BoxedProductCardListViewer.this.list.get(row);
BoxedProductCardListViewer.this.detail.setCard(CardView.getCardForUi(cp)); BoxedProductCardListViewer.this.detail.setCard(CardView.getCardForUi(cp));
BoxedProductCardListViewer.this.picture.setCard(cp); BoxedProductCardListViewer.this.picture.setItem(cp);
} }
} }
} }

View File

@@ -34,7 +34,6 @@ import forge.card.CardDetailUtil;
import forge.card.CardDetailUtil.DetailColors; import forge.card.CardDetailUtil.DetailColors;
import forge.card.CardEdition; import forge.card.CardEdition;
import forge.card.CardRarity; import forge.card.CardRarity;
import forge.card.CardStateName;
import forge.game.GameView; import forge.game.GameView;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardView; import forge.game.card.CardView;
@@ -59,7 +58,7 @@ public class CardDetailPanel extends SkinnedPanel {
/** Constant <code>serialVersionUID=-8461473263764812323L</code>. */ /** Constant <code>serialVersionUID=-8461473263764812323L</code>. */
private static final long serialVersionUID = -8461473263764812323L; private static final long serialVersionUID = -8461473263764812323L;
private static Color fromDetailColor(DetailColors detailColor) { private static Color fromDetailColor(final DetailColors detailColor) {
return new Color(detailColor.r, detailColor.g, detailColor.b); return new Color(detailColor.r, detailColor.g, detailColor.b);
} }
@@ -110,13 +109,13 @@ public class CardDetailPanel extends SkinnedPanel {
@Override @Override
public void doLayout() { public void doLayout() {
int insets = 3; final int insets = 3;
int setInfoWidth = 40; final int setInfoWidth = 40;
int x = insets; final int x = insets;
int y = insets; int y = insets;
int lineWidth = getWidth() - 2 * insets; final int lineWidth = getWidth() - 2 * insets;
int lineHeight = nameCostLabel.getPreferredSize().height; final int lineHeight = nameCostLabel.getPreferredSize().height;
int dy = lineHeight + 1; final int dy = lineHeight + 1;
nameCostLabel.setBounds(x, y, lineWidth, lineHeight); nameCostLabel.setBounds(x, y, lineWidth, lineHeight);
y += dy; y += dy;
@@ -142,14 +141,14 @@ public class CardDetailPanel extends SkinnedPanel {
cdArea.setText(CardDetailUtil.getItemDescription(item)); cdArea.setText(CardDetailUtil.getItemDescription(item));
updateBorder(item instanceof IPaperCard ? Card.getCardForUi((IPaperCard)item).getView().getCurrentState() : null, true); updateBorder(item instanceof IPaperCard ? Card.getCardForUi((IPaperCard)item).getView().getCurrentState() : null, true);
String set = item.getEdition(); final String set = item.getEdition();
setInfoLabel.setText(set); setInfoLabel.setText(set);
setInfoLabel.setToolTipText(""); setInfoLabel.setToolTipText("");
if (StringUtils.isEmpty(set)) { if (StringUtils.isEmpty(set)) {
setInfoLabel.setOpaque(false); setInfoLabel.setOpaque(false);
setInfoLabel.setBorder(null); setInfoLabel.setBorder(null);
} else { } else {
CardEdition edition = FModel.getMagicDb().getEditions().get(set); final CardEdition edition = FModel.getMagicDb().getEditions().get(set);
if (null != edition) { if (null != edition) {
setInfoLabel.setToolTipText(edition.getName()); setInfoLabel.setToolTipText(edition.getName());
} }
@@ -169,14 +168,17 @@ public class CardDetailPanel extends SkinnedPanel {
} }
public final void setCard(final CardView card) { public final void setCard(final CardView card) {
setCard(card, false); setCard(card, true, false);
} }
public final void setCard(final CardView card, final boolean isInAltState) { public final void setCard(final CardView card, final boolean mayView, final boolean isInAltState) {
nameCostLabel.setText("");
typeLabel.setVisible(true); typeLabel.setVisible(true);
typeLabel.setText("");
powerToughnessLabel.setVisible(true); powerToughnessLabel.setVisible(true);
final CardStateView state = card == null ? null : card.getState(isInAltState);
if (state == null) {
nameCostLabel.setText("");
typeLabel.setText("");
powerToughnessLabel.setText(""); powerToughnessLabel.setText("");
idLabel.setText(""); idLabel.setText("");
setInfoLabel.setText(""); setInfoLabel.setText("");
@@ -184,100 +186,68 @@ public class CardDetailPanel extends SkinnedPanel {
setInfoLabel.setOpaque(false); setInfoLabel.setOpaque(false);
setInfoLabel.setBorder(null); setInfoLabel.setBorder(null);
cdArea.setText(""); cdArea.setText("");
if (card == null) {
updateBorder(null, false); updateBorder(null, false);
return; return;
} }
final CardStateView state = card.getState(isInAltState); final String name = CardDetailUtil.formatCardName(card, mayView, isInAltState), nameCost;
if (state == null) { if (state.getManaCost().isNoCost() || !mayView) {
updateBorder(null, false); nameCost = name;
return; } else {
}
boolean canShow = true;
if (state.getManaCost().isNoCost() || !canShow) {
nameCostLabel.setText(CardDetailUtil.formatCardName(card, canShow, isInAltState));
}
else {
final String manaCost; final String manaCost;
if (card.isSplitCard() && card.hasAlternateState() && card.getZone() != ZoneType.Stack) { //only display current state's mana cost when on stack if (card.isSplitCard() && card.hasAlternateState() && card.getZone() != ZoneType.Stack) { //only display current state's mana cost when on stack
manaCost = card.getCurrentState().getManaCost() + " // " + card.getAlternateState().getManaCost(); manaCost = card.getCurrentState().getManaCost() + " // " + card.getAlternateState().getManaCost();
} } else {
else {
manaCost = state.getManaCost().toString(); manaCost = state.getManaCost().toString();
} }
nameCostLabel.setText(FSkin.encodeSymbols(CardDetailUtil.formatCardName(card, canShow, isInAltState) + " - " + manaCost, true)); nameCost = String.format("%s - %s", name, manaCost);
} }
typeLabel.setText(CardDetailUtil.formatCardType(state, canShow)); nameCostLabel.setText(FSkin.encodeSymbols(nameCost, false));
typeLabel.setText(CardDetailUtil.formatCardType(state, mayView));
String set = state.getSetCode(); final String set;
CardRarity rarity = state.getRarity(); final CardRarity rarity;
if (!canShow) { if (mayView) {
set = state.getSetCode();
rarity = state.getRarity();
} else {
set = CardEdition.UNKNOWN.getCode(); set = CardEdition.UNKNOWN.getCode();
rarity = CardRarity.Unknown; rarity = CardRarity.Unknown;
} }
setInfoLabel.setText(set); setInfoLabel.setText(set);
if (null != set && !set.isEmpty()) { if (null != set && !set.isEmpty()) {
if (canShow) { if (mayView) {
CardEdition edition = FModel.getMagicDb().getEditions().get(set); final CardEdition edition = FModel.getMagicDb().getEditions().get(set);
final String setTooltip;
if (null == edition) { if (null == edition) {
setInfoLabel.setToolTipText(rarity.name()); setTooltip = rarity.name();
} } else {
else { setTooltip = String.format("%s (%s)", edition.getName(), rarity.name());
setInfoLabel.setToolTipText(String.format("%s (%s)", edition.getName(), rarity.name()));
} }
setInfoLabel.setToolTipText(setTooltip);
} }
setInfoLabel.setOpaque(true); setInfoLabel.setOpaque(true);
Color backColor; final Color backColor = fromDetailColor(CardDetailUtil.getRarityColor(rarity));
switch (rarity) {
case Uncommon:
backColor = fromDetailColor(DetailColors.UNCOMMON);
break;
case Rare:
backColor = fromDetailColor(DetailColors.RARE);
break;
case MythicRare:
backColor = fromDetailColor(DetailColors.MYTHIC);
break;
case Special: //"Timeshifted" or other Special Rarity Cards
backColor = fromDetailColor(DetailColors.SPECIAL);
break;
default: //case BasicLand: + case Common:
backColor = fromDetailColor(DetailColors.COMMON);
break;
}
Color foreColor = FSkin.getHighContrastColor(backColor);
setInfoLabel.setBackground(backColor); setInfoLabel.setBackground(backColor);
final Color foreColor = FSkin.getHighContrastColor(backColor);
setInfoLabel.setForeground(foreColor); setInfoLabel.setForeground(foreColor);
setInfoLabel.setBorder(BorderFactory.createLineBorder(foreColor)); setInfoLabel.setBorder(BorderFactory.createLineBorder(foreColor));
} }
if (state.getState() == CardStateName.FaceDown) { updateBorder(state, mayView);
updateBorder(state, false); // do not spoil the color of face-down cards
} else {
updateBorder(state, canShow);
}
powerToughnessLabel.setText(CardDetailUtil.formatPowerToughness(state, canShow)); powerToughnessLabel.setText(CardDetailUtil.formatPowerToughness(state, mayView));
idLabel.setText(canShow ? CardDetailUtil.formatCardId(state) : ""); idLabel.setText(mayView ? CardDetailUtil.formatCardId(state) : "");
// fill the card text // fill the card text
cdArea.setText(FSkin.encodeSymbols(CardDetailUtil.composeCardText(state, gameView, canShow), true)); cdArea.setText(FSkin.encodeSymbols(CardDetailUtil.composeCardText(state, gameView, mayView), true));
SwingUtilities.invokeLater(new Runnable() { SwingUtilities.invokeLater(new Runnable() {
@Override @Override public void run() {
public void run() {
scrArea.getVerticalScrollBar().setValue(scrArea.getVerticalScrollBar().getMinimum()); scrArea.getVerticalScrollBar().setValue(scrArea.getVerticalScrollBar().getMinimum());
} }
}); });
@@ -316,7 +286,7 @@ public class CardDetailPanel extends SkinnedPanel {
return; return;
} }
Color color = fromDetailColor(CardDetailUtil.getBorderColor(card, canShow)); final Color color = fromDetailColor(CardDetailUtil.getBorderColor(card, canShow));
setBorder(BorderFactory.createLineBorder(color, 2)); setBorder(BorderFactory.createLineBorder(color, 2));
scrArea.setBorder(BorderFactory.createMatteBorder(2, 0, 0, 0, color)); scrArea.setBorder(BorderFactory.createMatteBorder(2, 0, 0, 0, color));
} }

View File

@@ -174,7 +174,7 @@ public class CardListChooser extends FDialog {
if ((row >= 0) && (row < CardListChooser.this.list.size())) { if ((row >= 0) && (row < CardListChooser.this.list.size())) {
final PaperCard cp = CardListChooser.this.list.get(row); final PaperCard cp = CardListChooser.this.list.get(row);
CardListChooser.this.detail.setCard(CardView.getCardForUi(cp)); CardListChooser.this.detail.setCard(CardView.getCardForUi(cp));
CardListChooser.this.picture.setCard(cp); CardListChooser.this.picture.setItem(cp);
} }
} }
} }

View File

@@ -173,7 +173,7 @@ public class CardListViewer extends FDialog {
if ((row >= 0) && (row < CardListViewer.this.list.size())) { if ((row >= 0) && (row < CardListViewer.this.list.size())) {
final PaperCard cp = CardListViewer.this.list.get(row); final PaperCard cp = CardListViewer.this.list.get(row);
CardListViewer.this.detail.setCard(CardView.getCardForUi(cp)); CardListViewer.this.detail.setCard(CardView.getCardForUi(cp));
CardListViewer.this.picture.setCard(cp); CardListViewer.this.picture.setItem(cp);
} }
} }
} }

View File

@@ -44,6 +44,7 @@ public final class CardPicturePanel extends JPanel {
private static final long serialVersionUID = -3160874016387273383L; private static final long serialVersionUID = -3160874016387273383L;
private Object displayed; private Object displayed;
private boolean mayView = true;
private final FImagePanel panel; private final FImagePanel panel;
private BufferedImage currentImage; private BufferedImage currentImage;
@@ -55,18 +56,22 @@ public final class CardPicturePanel extends JPanel {
this.add(this.panel); this.add(this.panel);
} }
public void setCard(final InventoryItem cp) { public void setItem(final InventoryItem item) {
this.displayed = cp; setImage(item ,true);
this.setImage();
} }
public void setCard(final CardStateView c) { public void setCard(final CardStateView c) {
this.displayed = c; setCard(c, true);
this.setImage(); }
public void setCard(final CardStateView c, final boolean mayView) {
setImage(c, mayView);
} }
public void setImage() { private void setImage(final Object display, final boolean mayView) {
BufferedImage image = getImage(); this.displayed = display;
this.mayView = mayView;
final BufferedImage image = getImage();
if (image != null && image != this.currentImage) { if (image != null && image != this.currentImage) {
this.currentImage = image; this.currentImage = image;
this.panel.setImage(image, getAutoSizeImageMode()); this.panel.setImage(image, getAutoSizeImageMode());
@@ -74,6 +79,10 @@ public final class CardPicturePanel extends JPanel {
} }
private BufferedImage getImage() { private BufferedImage getImage() {
if (!mayView) {
return ImageCache.getOriginalImage(ImageKeys.getTokenKey(ImageKeys.HIDDEN_CARD), true);
}
if (displayed instanceof InventoryItem) { if (displayed instanceof InventoryItem) {
final InventoryItem item = (InventoryItem) displayed; final InventoryItem item = (InventoryItem) displayed;
return ImageCache.getOriginalImage(ImageKeys.getImageKey(item, false), true); return ImageCache.getOriginalImage(ImageKeys.getImageKey(item, false), true);

View File

@@ -256,7 +256,8 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
if (item != null && item.item instanceof IPaperCard) { if (item != null && item.item instanceof IPaperCard) {
setLockHoveredItem(true); //lock hoveredItem while zoomer open setLockHoveredItem(true); //lock hoveredItem while zoomer open
final CardView card = CardView.getCardForUi((IPaperCard) item.item); final CardView card = CardView.getCardForUi((IPaperCard) item.item);
CardZoomer.SINGLETON_INSTANCE.doMouseButtonZoom(card); CardZoomer.SINGLETON_INSTANCE.setCard(card.getCurrentState(), true);
CardZoomer.SINGLETON_INSTANCE.doMouseButtonZoom();
} }
} }

View File

@@ -99,12 +99,12 @@ public enum VSubmenuAchievements implements IVSubmenu<CSubmenuAchievements> {
} }
private void showCard(MouseEvent e) { private void showCard(MouseEvent e) {
Achievement achievement = getAchievementAt(e.getX(), e.getY()); final Achievement achievement = getAchievementAt(e.getX(), e.getY());
if (achievement != null) { if (achievement != null) {
IPaperCard pc = achievement.getPaperCard(); final IPaperCard pc = achievement.getPaperCard();
if (pc != null) { if (pc != null) {
preventMouseOut = true; preventMouseOut = true;
CardZoomer.SINGLETON_INSTANCE.doMouseButtonZoom(CardView.getCardForUi(pc)); CardZoomer.SINGLETON_INSTANCE.setCard(CardView.getCardForUi(pc).getCurrentState(), true);
} }
} }
} }

View File

@@ -113,7 +113,7 @@ public class QuestWinLoseCardViewer extends FPanel {
if ((row >= 0) && (row < QuestWinLoseCardViewer.this.list.size())) { if ((row >= 0) && (row < QuestWinLoseCardViewer.this.list.size())) {
final PaperCard cp = QuestWinLoseCardViewer.this.list.get(row); final PaperCard cp = QuestWinLoseCardViewer.this.list.get(row);
QuestWinLoseCardViewer.this.detail.setCard(CardView.getCardForUi(cp)); QuestWinLoseCardViewer.this.detail.setCard(CardView.getCardForUi(cp));
QuestWinLoseCardViewer.this.picture.setCard(cp); QuestWinLoseCardViewer.this.picture.setItem(cp);
} }
} }
} }

View File

@@ -58,7 +58,7 @@ public class CDetail implements ICDoc {
void showCard(final CardView c, final boolean isInAltState, final boolean mayView, final boolean mayFlip) { void showCard(final CardView c, final boolean isInAltState, final boolean mayView, final boolean mayFlip) {
final CardView toShow = mayView ? c : null; final CardView toShow = mayView ? c : null;
view.getLblFlipcard().setVisible(toShow != null && mayFlip); view.getLblFlipcard().setVisible(toShow != null && mayFlip);
view.getPnlDetail().setCard(toShow, isInAltState); view.getPnlDetail().setCard(toShow, mayView, isInAltState);
if (view.getParentCell() != null) { if (view.getParentCell() != null) {
view.getParentCell().repaintSelf(); view.getParentCell().repaintSelf();
} }

View File

@@ -72,12 +72,13 @@ public class CPicture implements ICDoc {
void showCard(final CardView c, final boolean isInAltState, final boolean mayView, final boolean mayFlip) { void showCard(final CardView c, final boolean isInAltState, final boolean mayView, final boolean mayFlip) {
final CardStateView toShow = c != null && mayView ? c.getState(isInAltState) : null; final CardStateView toShow = c != null && mayView ? c.getState(isInAltState) : null;
flipIndicator.setVisible(toShow != null && mayFlip); flipIndicator.setVisible(toShow != null && mayFlip);
picturePanel.setCard(toShow); picturePanel.setCard(toShow, mayView);
zoomer.setCard(toShow, mayFlip);
} }
void showItem(final InventoryItem item) { void showItem(final InventoryItem item) {
flipIndicator.setVisible(false); flipIndicator.setVisible(false);
picturePanel.setCard(item); picturePanel.setItem(item);
} }
@Override @Override
@@ -105,7 +106,7 @@ public class CPicture implements ICDoc {
@Override @Override
public void onMiddleMouseDown(final MouseEvent e) { public void onMiddleMouseDown(final MouseEvent e) {
if (isCardDisplayed()) { if (isCardDisplayed()) {
zoomer.doMouseButtonZoom(controller.getCurrentCard()); zoomer.doMouseButtonZoom();
} }
} }
@@ -130,7 +131,7 @@ public class CPicture implements ICDoc {
public void mouseWheelMoved(final MouseWheelEvent arg0) { public void mouseWheelMoved(final MouseWheelEvent arg0) {
if (isCardDisplayed()) { if (isCardDisplayed()) {
if (arg0.getWheelRotation() < 0) { if (arg0.getWheelRotation() < 0) {
zoomer.doMouseWheelZoom(controller.getCurrentCard()); zoomer.doMouseWheelZoom();
} }
} }
} }

View File

@@ -196,10 +196,8 @@ public class VStack implements IVDoc<CStack> {
@Override @Override
public void mouseEntered(final MouseEvent e) { public void mouseEntered(final MouseEvent e) {
hoveredItem = StackInstanceTextArea.this; hoveredItem = StackInstanceTextArea.this;
if (!txt.startsWith("Morph ")) {
controller.getMatchUI().setCard(item.getSourceCard()); controller.getMatchUI().setCard(item.getSourceCard());
} }
}
@Override @Override
public void mouseExited(final MouseEvent e) { public void mouseExited(final MouseEvent e) {

View File

@@ -33,7 +33,6 @@ import javax.swing.Timer;
import net.miginfocom.swing.MigLayout; import net.miginfocom.swing.MigLayout;
import forge.assets.FSkinProp; import forge.assets.FSkinProp;
import forge.game.card.CardView;
import forge.game.card.CardView.CardStateView; import forge.game.card.CardView.CardStateView;
import forge.gui.SOverlayUtils; import forge.gui.SOverlayUtils;
import forge.toolbox.FOverlay; import forge.toolbox.FOverlay;
@@ -59,11 +58,11 @@ public enum CardZoomer {
private final JPanel overlay = FOverlay.SINGLETON_INSTANCE.getPanel(); private final JPanel overlay = FOverlay.SINGLETON_INSTANCE.getPanel();
private JPanel pnlMain; private JPanel pnlMain;
private FImagePanel imagePanel; private FImagePanel imagePanel;
private SkinnedLabel lblFlipcard = new SkinnedLabel(); private final SkinnedLabel lblFlipcard = new SkinnedLabel();
// Details about the current card being displayed. // Details about the current card being displayed.
private CardView thisCard; private CardStateView thisCard;
private boolean isInAltState; private boolean mayFlip, isInAltState;
// The zoomer is in button mode when it is activated by holding down the // The zoomer is in button mode when it is activated by holding down the
// middle mouse button or left and right mouse buttons simultaneously. // middle mouse button or left and right mouse buttons simultaneously.
@@ -83,6 +82,12 @@ public enum CardZoomer {
setKeyListeners(); setKeyListeners();
} }
public void setCard(final CardStateView card, final boolean mayFlip) {
this.thisCard = card;
this.mayFlip = mayFlip;
this.isInAltState = card == null ? false : card == card.getCard().getAlternateState();
}
/** /**
* Creates listener for keys that are recognised by zoomer. * Creates listener for keys that are recognised by zoomer.
* <p><ul> * <p><ul>
@@ -91,8 +96,7 @@ public enum CardZoomer {
*/ */
private void setKeyListeners() { private void setKeyListeners() {
overlay.addKeyListener(new KeyAdapter() { overlay.addKeyListener(new KeyAdapter() {
@Override @Override public void keyPressed(final KeyEvent e) {
public void keyPressed(KeyEvent e) {
if (!isButtonMode) { if (!isButtonMode) {
if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
closeZoomer(); closeZoomer();
@@ -113,8 +117,7 @@ public enum CardZoomer {
*/ */
private void setMouseButtonListener() { private void setMouseButtonListener() {
overlay.addMouseListener(new MouseAdapter() { overlay.addMouseListener(new MouseAdapter() {
@Override @Override public void mouseReleased(final MouseEvent e) {
public void mouseReleased(MouseEvent e) {
closeZoomer(); closeZoomer();
} }
}); });
@@ -135,8 +138,7 @@ public enum CardZoomer {
*/ */
private void setMouseWheelListener() { private void setMouseWheelListener() {
overlay.addMouseWheelListener(new MouseWheelListener() { overlay.addMouseWheelListener(new MouseWheelListener() {
@Override @Override public void mouseWheelMoved(final MouseWheelEvent e) {
public void mouseWheelMoved(MouseWheelEvent e) {
if (!isButtonMode) { if (!isButtonMode) {
if (isMouseWheelEnabled) { if (isMouseWheelEnabled) {
isMouseWheelEnabled = false; isMouseWheelEnabled = false;
@@ -159,9 +161,9 @@ public enum CardZoomer {
* This method should be called if the zoomer is activated by rotating the * This method should be called if the zoomer is activated by rotating the
* mouse wheel. * mouse wheel.
*/ */
public void doMouseWheelZoom(final CardView card) { public void doMouseWheelZoom() {
isButtonMode = false; isButtonMode = false;
displayCard(card); displayCard();
startMouseWheelCoolDownTimer(200); startMouseWheelCoolDownTimer(200);
} }
@@ -172,7 +174,7 @@ public enum CardZoomer {
* This method should be called if the zoomer is activated by holding down * This method should be called if the zoomer is activated by holding down
* the middle mouse button or left and right mouse buttons simultaneously. * the middle mouse button or left and right mouse buttons simultaneously.
*/ */
public void doMouseButtonZoom(final CardView newCard) { public void doMouseButtonZoom() {
// don't display zoom if already zoomed or just closed zoom // don't display zoom if already zoomed or just closed zoom
// (handles mouse wheeling while middle clicking) // (handles mouse wheeling while middle clicking)
if (isOpen || System.currentTimeMillis() - lastClosedTime < 250) { if (isOpen || System.currentTimeMillis() - lastClosedTime < 250) {
@@ -180,17 +182,15 @@ public enum CardZoomer {
} }
isButtonMode = true; isButtonMode = true;
displayCard(newCard); displayCard();
} }
public boolean isZoomerOpen() { public boolean isZoomerOpen() {
return isOpen; return isOpen;
} }
private void displayCard(final CardView newCard) { private void displayCard() {
isMouseWheelEnabled = false; isMouseWheelEnabled = false;
thisCard = newCard;
isInAltState = false;
setLayout(); setLayout();
setImage(); setImage();
SOverlayUtils.showOverlay(); SOverlayUtils.showOverlay();
@@ -201,7 +201,7 @@ public enum CardZoomer {
* Displays a graphical indicator that shows whether the current card can be flipped or transformed. * Displays a graphical indicator that shows whether the current card can be flipped or transformed.
*/ */
private void setFlipIndicator() { private void setFlipIndicator() {
if (thisCard != null && thisCard.hasAlternateState()) { if (thisCard != null && mayFlip) {
imagePanel.setLayout(new MigLayout("insets 0, w 100%!, h 100%!")); imagePanel.setLayout(new MigLayout("insets 0, w 100%!, h 100%!"));
imagePanel.add(lblFlipcard, "pos (100% - 100px) 0"); imagePanel.add(lblFlipcard, "pos (100% - 100px) 0");
} }
@@ -213,8 +213,8 @@ public enum CardZoomer {
private void setImage() { private void setImage() {
imagePanel = new FImagePanel(); imagePanel = new FImagePanel();
final BufferedImage xlhqImage = FImageUtil.getImageXlhq(getState()); final BufferedImage xlhqImage = FImageUtil.getImageXlhq(thisCard);
imagePanel.setImage(xlhqImage == null ? FImageUtil.getImage(getState()) : xlhqImage, getInitialRotation(), AutoSizeImageMode.SOURCE); imagePanel.setImage(xlhqImage == null ? FImageUtil.getImage(thisCard) : xlhqImage, getInitialRotation(), AutoSizeImageMode.SOURCE);
pnlMain.removeAll(); pnlMain.removeAll();
pnlMain.add(imagePanel, "w 80%!, h 80%!"); pnlMain.add(imagePanel, "w 80%!, h 80%!");
@@ -223,8 +223,10 @@ public enum CardZoomer {
} }
private int getInitialRotation() { private int getInitialRotation() {
return thisCard == null ? 0 : if (thisCard == null) {
(thisCard.isSplitCard() || thisCard.getCurrentState().getType().isPlane() || thisCard.getCurrentState().getType().isPhenomenon() ? 90 : 0); return 0;
}
return thisCard.getCard().isSplitCard() || thisCard.getType().isPlane() || thisCard.getType().isPhenomenon() ? 90 : 0;
} }
private void setLayout() { private void setLayout() {
@@ -249,7 +251,7 @@ public enum CardZoomer {
* wheel for a short period of time after opening. This will * wheel for a short period of time after opening. This will
* prevent flip and double side cards from immediately flipping. * prevent flip and double side cards from immediately flipping.
*/ */
private void startMouseWheelCoolDownTimer(int millisecsDelay) { private void startMouseWheelCoolDownTimer(final int millisecsDelay) {
isMouseWheelEnabled = false; isMouseWheelEnabled = false;
createMouseWheelCoolDownTimer(millisecsDelay); createMouseWheelCoolDownTimer(millisecsDelay);
mouseWheelCoolDownTimer.setInitialDelay(millisecsDelay); mouseWheelCoolDownTimer.setInitialDelay(millisecsDelay);
@@ -259,11 +261,10 @@ public enum CardZoomer {
/** /**
* Used to ignore mouse wheel rotation for {@code millisecsDelay} milliseconds. * Used to ignore mouse wheel rotation for {@code millisecsDelay} milliseconds.
*/ */
private void createMouseWheelCoolDownTimer(int millisecsDelay) { private void createMouseWheelCoolDownTimer(final int millisecsDelay) {
if (mouseWheelCoolDownTimer == null) { if (mouseWheelCoolDownTimer == null) {
mouseWheelCoolDownTimer = new Timer(millisecsDelay, new ActionListener() { mouseWheelCoolDownTimer = new Timer(millisecsDelay, new ActionListener() {
@Override @Override public void actionPerformed(final ActionEvent e) {
public void actionPerformed(ActionEvent e) {
isMouseWheelEnabled = true; isMouseWheelEnabled = true;
} }
}); });
@@ -280,7 +281,7 @@ public enum CardZoomer {
* Toggles between primary and alternate image associated with card if applicable. * Toggles between primary and alternate image associated with card if applicable.
*/ */
private void toggleCardImage() { private void toggleCardImage() {
if (thisCard != null && thisCard.hasAlternateState()) { if (thisCard != null && mayFlip) {
toggleFlipCard(); toggleFlipCard();
} }
} }
@@ -293,11 +294,9 @@ public enum CardZoomer {
*/ */
private void toggleFlipCard() { private void toggleFlipCard() {
isInAltState = !isInAltState; isInAltState = !isInAltState;
imagePanel.setRotation(thisCard.isFlipCard() && isInAltState ? 180 : 0); thisCard = thisCard.getCard().getState(isInAltState);
imagePanel.setRotation(thisCard.getCard().isFlipCard() && isInAltState ? 180 : 0);
setImage(); setImage();
} }
private CardStateView getState() {
return thisCard.getState(isInAltState);
}
} }

View File

@@ -77,12 +77,14 @@ public abstract class CardPanelContainer extends SkinnedPanel {
private void mouseWheelZoom(final CardView card) { private void mouseWheelZoom(final CardView card) {
if (canZoom(card)) { if (canZoom(card)) {
CardZoomer.SINGLETON_INSTANCE.doMouseWheelZoom(card); CardZoomer.SINGLETON_INSTANCE.setCard(card.getCurrentState(), false);
CardZoomer.SINGLETON_INSTANCE.doMouseWheelZoom();
} }
} }
private void mouseButtonZoom(final CardView card) { private void mouseButtonZoom(final CardView card) {
if (canZoom(card)) { if (canZoom(card)) {
CardZoomer.SINGLETON_INSTANCE.doMouseButtonZoom(card); CardZoomer.SINGLETON_INSTANCE.setCard(card.getCurrentState(), false);
CardZoomer.SINGLETON_INSTANCE.doMouseButtonZoom();
} }
} }
private boolean canZoom(final CardView card) { private boolean canZoom(final CardView card) {

View File

@@ -153,6 +153,21 @@ public class CardDetailUtil {
return borderColors; return borderColors;
} }
public static DetailColors getRarityColor(final CardRarity rarity) {
switch (rarity) {
case Uncommon:
return DetailColors.UNCOMMON;
case Rare:
return DetailColors.RARE;
case MythicRare:
return DetailColors.MYTHIC;
case Special: //"Timeshifted" or other Special Rarity Cards
return DetailColors.SPECIAL;
default: //case BasicLand: + case Common:
return DetailColors.COMMON;
}
}
public static String getItemDescription(final InventoryItemFromSet item) { public static String getItemDescription(final InventoryItemFromSet item) {
if (item instanceof SealedProduct) { if (item instanceof SealedProduct) {
return ((SealedProduct)item).getDescription(); return ((SealedProduct)item).getDescription();