diff --git a/res/skins/default/sprite_icons.png b/res/skins/default/sprite_icons.png index 18426fef446..c4323c9e3d4 100644 Binary files a/res/skins/default/sprite_icons.png and b/res/skins/default/sprite_icons.png differ diff --git a/src/main/java/forge/gui/CardPicturePanel.java b/src/main/java/forge/gui/CardPicturePanel.java index 9210e7af230..c63dea77ad4 100644 --- a/src/main/java/forge/gui/CardPicturePanel.java +++ b/src/main/java/forge/gui/CardPicturePanel.java @@ -51,7 +51,7 @@ public final class CardPicturePanel extends JPanel implements CardContainer { // private JLabel label; // private ImageIcon icon; private final ScaledImagePanel panel; - private Image currentImange; + private Image currentImage; /** *

@@ -82,6 +82,8 @@ public final class CardPicturePanel extends JPanel implements CardContainer { } }); + + this.setCard(c); } @@ -118,7 +120,8 @@ public final class CardPicturePanel extends JPanel implements CardContainer { this.setImage(); } - private void setImage() { + /** */ + public void setImage() { final Insets i = this.getInsets(); Image image = null; if (this.inventoryItem != null) { @@ -130,8 +133,8 @@ public final class CardPicturePanel extends JPanel implements CardContainer { - i.bottom - 2); } - if (image != this.currentImange) { - this.currentImange = image; + if (image != this.currentImage) { + this.currentImage = image; this.panel.setImage(image, null); this.panel.repaint(); } diff --git a/src/main/java/forge/gui/match/controllers/CDetail.java b/src/main/java/forge/gui/match/controllers/CDetail.java index f136ff32976..b2e4fb25c58 100644 --- a/src/main/java/forge/gui/match/controllers/CDetail.java +++ b/src/main/java/forge/gui/match/controllers/CDetail.java @@ -17,6 +17,9 @@ */ package forge.gui.match.controllers; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; + import forge.Card; import forge.Command; import forge.gui.framework.ICDoc; @@ -41,7 +44,9 @@ public enum CDetail implements ICDoc { */ public void showCard(final Card c) { this.currentCard = c; + VDetail.SINGLETON_INSTANCE.getLblFlipcard().setVisible(c.isDoubleFaced() ? true : false); VDetail.SINGLETON_INSTANCE.getPnlDetail().setCard(c); + VDetail.SINGLETON_INSTANCE.getParentCell().repaintSelf(); } /** @@ -66,6 +71,14 @@ public enum CDetail implements ICDoc { */ @Override public void initialize() { + VDetail.SINGLETON_INSTANCE.getPnlDetail().addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(final MouseEvent e) { + if (VDetail.SINGLETON_INSTANCE.getPnlDetail().getCard().isDoubleFaced()) { + CPicture.SINGLETON_INSTANCE.flipCard(); + } + } + }); } /* (non-Javadoc) diff --git a/src/main/java/forge/gui/match/controllers/CPicture.java b/src/main/java/forge/gui/match/controllers/CPicture.java index b1b2d82c4d1..d573433e95f 100644 --- a/src/main/java/forge/gui/match/controllers/CPicture.java +++ b/src/main/java/forge/gui/match/controllers/CPicture.java @@ -16,7 +16,11 @@ * along with this program. If not, see . */ package forge.gui.match.controllers; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; + import forge.Card; +import forge.CardCharactersticName; import forge.Command; import forge.gui.framework.ICDoc; import forge.gui.match.views.VPicture; @@ -31,6 +35,7 @@ public enum CPicture implements ICDoc { SINGLETON_INSTANCE; private Card currentCard = null; + private boolean flipped = false; /** * Shows card details and/or picture in sidebar cardview tabber. @@ -40,6 +45,7 @@ public enum CPicture implements ICDoc { */ public void showCard(final Card c) { this.currentCard = c; + VPicture.SINGLETON_INSTANCE.getLblFlipcard().setVisible(c.isDoubleFaced() ? true : false); VPicture.SINGLETON_INSTANCE.getPnlPicture().setCard(c); } @@ -65,6 +71,14 @@ public enum CPicture implements ICDoc { */ @Override public void initialize() { + VPicture.SINGLETON_INSTANCE.getPnlPicture().addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(final MouseEvent e) { + if (VPicture.SINGLETON_INSTANCE.getPnlPicture().getCard().isDoubleFaced()) { + flipCard(); + } + } + }); } /* (non-Javadoc) @@ -73,4 +87,19 @@ public enum CPicture implements ICDoc { @Override public void update() { } + + /** */ + public void flipCard() { + if (flipped) { + flipped = false; + VPicture.SINGLETON_INSTANCE.getPnlPicture().getCard().setState(CardCharactersticName.Original); + CDetail.SINGLETON_INSTANCE.showCard(this.currentCard); + } + else { + flipped = true; + VPicture.SINGLETON_INSTANCE.getPnlPicture().getCard().setState(CardCharactersticName.Transformed); + CDetail.SINGLETON_INSTANCE.showCard(this.currentCard); + } + VPicture.SINGLETON_INSTANCE.getPnlPicture().setImage(); + } } diff --git a/src/main/java/forge/gui/match/views/VDetail.java b/src/main/java/forge/gui/match/views/VDetail.java index bfcd9bfb3bf..ea68e9a5d81 100644 --- a/src/main/java/forge/gui/match/views/VDetail.java +++ b/src/main/java/forge/gui/match/views/VDetail.java @@ -17,6 +17,8 @@ */ package forge.gui.match.views; +import javax.swing.JLabel; + import net.miginfocom.swing.MigLayout; import forge.gui.CardDetailPanel; import forge.gui.framework.DragCell; @@ -25,6 +27,7 @@ import forge.gui.framework.EDocID; import forge.gui.framework.ICDoc; import forge.gui.framework.IVDoc; import forge.gui.match.controllers.CDetail; +import forge.gui.toolbox.FSkin; /** * Assembles Swing components of card detail area. @@ -41,6 +44,8 @@ public enum VDetail implements IVDoc { // Top-level containers private final CardDetailPanel pnlDetail = new CardDetailPanel(null); + private final JLabel lblFlipcard = new JLabel( + FSkin.getIcon(FSkin.InterfaceIcons.ICO_FLIPCARD)); //========= Overridden methods /* (non-Javadoc) @@ -48,7 +53,8 @@ public enum VDetail implements IVDoc { */ @Override public void populate() { - parentCell.getBody().setLayout(new MigLayout("insets 0, gap 0")); + parentCell.getBody().setLayout(new MigLayout("insets 0, gap 0, center")); + parentCell.getBody().add(lblFlipcard, "pos (50% - 40px) (50% - 60px)"); parentCell.getBody().add(pnlDetail, "w 100%!, h 100%!"); } @@ -98,4 +104,9 @@ public enum VDetail implements IVDoc { public CardDetailPanel getPnlDetail() { return pnlDetail; } + + /** @return {@link javax.swing.JLabel} */ + public JLabel getLblFlipcard() { + return lblFlipcard; + } } diff --git a/src/main/java/forge/gui/match/views/VPicture.java b/src/main/java/forge/gui/match/views/VPicture.java index eb6ce1cc48b..71321fd8da4 100644 --- a/src/main/java/forge/gui/match/views/VPicture.java +++ b/src/main/java/forge/gui/match/views/VPicture.java @@ -17,6 +17,8 @@ */ package forge.gui.match.views; +import javax.swing.JLabel; + import net.miginfocom.swing.MigLayout; import forge.gui.CardPicturePanel; import forge.gui.framework.DragCell; @@ -25,6 +27,7 @@ import forge.gui.framework.EDocID; import forge.gui.framework.ICDoc; import forge.gui.framework.IVDoc; import forge.gui.match.controllers.CPicture; +import forge.gui.toolbox.FSkin; /** * Assembles Swing components of card picture area. @@ -41,10 +44,13 @@ public enum VPicture implements IVDoc { // Top-level containers private final CardPicturePanel pnlPicture = new CardPicturePanel(null); + private final JLabel lblFlipcard = new JLabel( + FSkin.getIcon(FSkin.InterfaceIcons.ICO_FLIPCARD)); //========= Constructor private VPicture() { pnlPicture.setOpaque(false); + lblFlipcard.setVisible(false); } //========== Overridden methods @@ -55,6 +61,7 @@ public enum VPicture implements IVDoc { @Override public void populate() { parentCell.getBody().setLayout(new MigLayout("insets 0, gap 0, center")); + parentCell.getBody().add(lblFlipcard, "pos (50% - 40px) (50% - 60px)"); parentCell.getBody().add(pnlPicture, "w 100%!, h 100%!"); } @@ -104,4 +111,9 @@ public enum VPicture implements IVDoc { public CardPicturePanel getPnlPicture() { return pnlPicture; } + + /** @return {@link javax.swing.JLabel} */ + public JLabel getLblFlipcard() { + return lblFlipcard; + } } diff --git a/src/main/java/forge/gui/toolbox/FSkin.java b/src/main/java/forge/gui/toolbox/FSkin.java index d1d6c971661..f0bd8354745 100644 --- a/src/main/java/forge/gui/toolbox/FSkin.java +++ b/src/main/java/forge/gui/toolbox/FSkin.java @@ -273,6 +273,7 @@ public enum FSkin { ICO_SAVEAS (new int[] {660, 580, 20, 20}), /** */ ICO_UNKNOWN (new int[] {0, 720, 80, 80}), /** */ ICO_LOGO (new int[] {480, 0, 200, 200}), /** */ + ICO_FLIPCARD (new int[] {400, 0, 80, 120}), /** */ ICO_FAVICON (new int[] {0, 640, 80, 80}); private int[] coords;