From 830c323a2d6b16b85628d64a58cd5cd27b8531bd Mon Sep 17 00:00:00 2001 From: Krazy Date: Mon, 12 Oct 2015 17:30:47 +0000 Subject: [PATCH] Added tournament name to UI. --- .../home/quest/VSubmenuQuestDraft.java | 270 +++++++++--------- 1 file changed, 130 insertions(+), 140 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuQuestDraft.java b/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuQuestDraft.java index e870bc9bea1..35f7ada3ecf 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuQuestDraft.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuQuestDraft.java @@ -1,69 +1,57 @@ package forge.screens.home.quest; -import java.awt.BasicStroke; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.RenderingHints; -import java.awt.geom.Rectangle2D; - -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.ScrollPaneConstants; -import javax.swing.SwingConstants; - -import net.miginfocom.swing.MigLayout; import forge.GuiBase; import forge.assets.FSkinProp; import forge.gui.framework.DragCell; import forge.gui.framework.DragTab; import forge.gui.framework.EDocID; import forge.model.FModel; -import forge.screens.home.EMenuGroup; -import forge.screens.home.IVSubmenu; -import forge.screens.home.LblHeader; -import forge.screens.home.StartButton; -import forge.screens.home.VHomeUI; +import forge.screens.home.*; import forge.toolbox.FLabel; import forge.toolbox.FScrollPanel; import forge.toolbox.FSkin; import forge.toolbox.FSkin.Colors; import forge.toolbox.FSkin.SkinColor; import forge.toolbox.FSkin.SkinImage; +import net.miginfocom.swing.MigLayout; + +import javax.swing.*; +import java.awt.*; +import java.awt.geom.Rectangle2D; /** * Assembles Swing components of quest draft submenu singleton. * *

(V at beginning of class name denotes a view class.) */ +@SuppressWarnings({"FieldCanBeLocal"}) public enum VSubmenuQuestDraft implements IVSubmenu { - + SINGLETON_INSTANCE; - - protected static enum Mode { + + protected enum Mode { EMPTY, SELECT_TOURNAMENT, PREPARE_DECK, TOURNAMENT_ACTIVE } - + private final DragTab tab = new DragTab("Tournaments"); - + private final LblHeader lblTitle = new LblHeader("Quest Mode: Draft Tournament"); - + private final FLabel lblCredits = new FLabel.Builder() .icon(FSkin.getIcon(FSkinProp.ICO_QUEST_COINSTACK)) .iconScaleFactor(0.75) .fontSize(13).build(); - + private final FScrollPanel pnlTournaments = new FScrollPanel(new MigLayout("insets 0, gap 0, wrap, ax center"), true, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); - + private final JLabel lblInfo = new FLabel.Builder().text("Select a tournament to join:") .fontStyle(Font.BOLD).fontSize(16) .fontAlign(SwingConstants.LEFT).build(); - + private final JLabel lblNoDrafts = new FLabel.Builder().text("There are no tournaments available at this time.") .fontStyle(Font.PLAIN).fontSize(16) .fontAlign(SwingConstants.LEFT).build(); @@ -82,28 +70,28 @@ public enum VSubmenuQuestDraft implements IVSubmenu { .fontSize(15).build(); private final FLabel lblTokens = new FLabel.Builder() .fontSize(15).build(); - + private final StartButton btnStartDraft = new StartButton(); private final StartButton btnStartTournament = new StartButton(); private final StartButton btnStartMatch = new StartButton(); - + private final FLabel btnEditDeck = new FLabel.ButtonBuilder().text("Edit Deck").fontSize(24).build(); private final FLabel btnLeaveTournament = new FLabel.ButtonBuilder().text("Leave Tournament").fontSize(12).build(); private final FLabel btnSpendToken = new FLabel.ButtonBuilder().text("Spend Token").fontSize(14).build(); private final FLabel btnStartMatchSmall = new FLabel.ButtonBuilder().text("Start Next Match").fontSize(12).build(); - + private final PnlMatchup[] matchups = new PnlMatchup[8]; private final JPanel pnlDeckImage; - + private Mode mode = Mode.SELECT_TOURNAMENT; - + private DragCell parentCell; - - private VSubmenuQuestDraft() { - + + VSubmenuQuestDraft() { + SkinImage avatar = FSkin.getAvatars().get(GuiBase.getInterface().getAvatarCount() - 1); - + matchups[0] = new PnlMatchup(PnlMatchup.LineDirection.DOWN, PnlMatchup.LineSide.RIGHT, PnlMatchup.BoxSize.SMALL); matchups[0].setPlayerOne("Undetermined", avatar); matchups[0].setPlayerTwo("Undetermined", avatar); @@ -135,9 +123,9 @@ public enum VSubmenuQuestDraft implements IVSubmenu { matchups[7] = new PnlMatchup(PnlMatchup.LineDirection.STRAIGHT, PnlMatchup.LineSide.LEFT, PnlMatchup.BoxSize.LARGE_SINGLE, true); matchups[7].setPlayerOne("Undetermined", avatar); matchups[7].setPlayerTwo("Undetermined", avatar); - + pnlDeckImage = new ProportionalPanel(FSkin.getImage(FSkinProp.IMG_QUEST_DRAFT_DECK), 680, 475); - + final String constraints = "h 30px!, gap 0 0 0 10px"; pnlStats.setLayout(new MigLayout("insets 0, gap 0, wrap, hidemode 0")); pnlStats.add(lblPastResults, "h 30px!, gap 0 0 0 25px"); @@ -148,83 +136,83 @@ public enum VSubmenuQuestDraft implements IVSubmenu { pnlStats.add(lblTokens, "h 30px!, gap 0 0 50px 10px, ax center"); pnlStats.add(btnSpendToken, "w 150px!, h 40px!, ax center"); pnlStats.setOpaque(false); - + btnSpendToken.setToolTipText("Creates a new tournament that can be played immediately."); - + } - + public LblHeader getLblTitle() { return lblTitle; } - + public FLabel getLblCredits() { return lblCredits; } - + public FScrollPanel getPnlTournaments() { return pnlTournaments; } - + public StartButton getBtnStartDraft() { return btnStartDraft; } - + public StartButton getBtnStartTournament() { return btnStartTournament; } - + public StartButton getBtnStartMatch() { return btnStartMatch; } - + public FLabel getBtnStartMatchSmall() { return btnStartMatchSmall; } - + public FLabel getBtnEditDeck() { return btnEditDeck; } - + public FLabel getBtnLeaveTournament() { return btnLeaveTournament; } - + public PnlMatchup[] getLblsMatchups() { return matchups; } - + public JLabel getLblFirst() { return lblFirst; } - + public JLabel getLblSecond() { return lblSecond; } - + public JLabel getLblThird() { return lblThird; } - + public JLabel getLblFourth() { return lblFourth; } - + public JLabel getLblTokens() { return lblTokens; } - + public FLabel getBtnSpendToken() { return btnSpendToken; } - + public void setMode(Mode mode) { this.mode = mode; } - + public Mode getMode() { return mode; } - + @Override public EDocID getDocumentID() { return EDocID.HOME_QUESTDRAFTS; @@ -267,9 +255,9 @@ public enum VSubmenuQuestDraft implements IVSubmenu { @Override public void populate() { - + VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().removeAll(); - + switch (mode) { case SELECT_TOURNAMENT: @@ -289,14 +277,14 @@ public enum VSubmenuQuestDraft implements IVSubmenu { VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(pnlTournaments, "w 88% - 200px!, pushy, growy"); VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(pnlStats, "w 185px!, pushy, growy, gap 4% 4% 0 0"); break; - + } - + VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().repaintSelf(); VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().revalidate(); - + } - + private void populateSelectTournament() { VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().setLayout(new MigLayout("insets 0, gap 0, ax right, wrap 2")); VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(lblTitle, "w 80%!, h 40px!, gap 0 0 15px 35px, ax right, span 2"); @@ -306,8 +294,9 @@ public enum VSubmenuQuestDraft implements IVSubmenu { VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(pnlStats, "w 185px!, pushy, growy, gap 4% 4% 0 0"); VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(btnStartDraft, "gap 0 6% 30px 30px, ax center, span 2"); } - + private void populatePrepareDeck() { + lblTitle.setText("Quest Mode: Draft Tournament - " + FModel.getQuest().getAchievements().getCurrentDraft().getTitle()); VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().setLayout(new MigLayout( "insets 0, gap 0, ax center, wrap", "", @@ -322,19 +311,20 @@ public enum VSubmenuQuestDraft implements IVSubmenu { btnEditDeck.setFontSize(24); btnLeaveTournament.setFontSize(12); } - + private void populateTournamentActive() { - + + lblTitle.setText("Quest Mode: Draft Tournament - " + FModel.getQuest().getAchievements().getCurrentDraft().getTitle()); VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().setLayout(new MigLayout("insets 0, gap 0, ax center, wrap 1")); VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(lblTitle, "w 80%!, h 40px!, gap 20% 0 15px 10px, ax right, span 2"); - + FScrollPanel panel = new FScrollPanel(new MigLayout("insets 0, gap 0, wrap 4, ax center"), true, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); - + String constraintsLeft = "w 350px!, h 196px!, gap 0px 0px 0px 0px, ay center"; String constraintsMiddle = "w 350px!, h 392px!, gap 0px 0px 0px 0px, ay center"; String constraintsRight = "w 350px!, h 784px!, gap 0px 0px 0px 0px, ay center"; - + panel.add(matchups[0], constraintsLeft); panel.add(matchups[4], constraintsMiddle + ", span 1 2"); panel.add(matchups[6], constraintsRight + ", span 1 4"); @@ -345,138 +335,138 @@ public enum VSubmenuQuestDraft implements IVSubmenu { panel.add(matchups[3], constraintsLeft); VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(panel, "gap 0 0 0 0, ax center"); - + btnEditDeck.setFontSize(12); - + JPanel bottomButtons = new JPanel(new MigLayout("insets 0, gap 0, wrap 2, ax center")); - + if (FModel.getQuest().getAchievements().getCurrentDraft().playerHasMatchesLeft()) { VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(btnStartMatch, "gap 0 0 0 20px, ax center"); bottomButtons.add(btnEditDeck, "w 135px!, h 25px!, gap 0 25px 10px 10px, ax right"); bottomButtons.add(btnLeaveTournament, "w 135px!, h 25px!, gap 25px 0 10px 10px, ax right"); btnLeaveTournament.setFontSize(12); - + } else { VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(btnLeaveTournament, "w 250px!, h 60px!, gap 0 0 20px 20px, ax center"); bottomButtons.add(btnEditDeck, "w 135px!, h 25px!, gap 0 25px 10px 10px, ax right"); bottomButtons.add(btnStartMatchSmall, "w 135px!, h 25px!, gap 25px 0 10px 10px, ax right"); btnLeaveTournament.setFontSize(24); - + } - + VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(bottomButtons, "w 100%!"); bottomButtons.setOpaque(false); - + } - - private class ProportionalPanel extends JPanel { - + + private final class ProportionalPanel extends JPanel { + private static final long serialVersionUID = 2098643413467094674L; - - private final SkinImage image; - + + private final SkinImage image; + int w, h; - - public ProportionalPanel(SkinImage image, int w, int h) { + + private ProportionalPanel(SkinImage image, int w, int h) { this.image = image; this.w = w; this.h = h; } - - @Override - public Dimension getPreferredSize() { - return new ProportionalDimension(super.getSize(), w, h); + + @Override + public Dimension getPreferredSize() { + return new ProportionalDimension(super.getSize(), w, h); } @Override public void paintComponent(final Graphics g) { - + Graphics2D g2d = (Graphics2D) g.create(); - + Dimension srcSize = image.getSizeForPaint(g2d); int wSrc = srcSize.width; int hSrc = srcSize.height; - + int wImg = getPreferredSize().width; int hImg = getPreferredSize().height; - + int xOffset = (getSize().width - wImg) / 2; - + RenderingHints hints = new RenderingHints( RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g2d.setRenderingHints(hints); - + FSkin.drawImage(g2d, image, xOffset, 0, wImg + xOffset, hImg, // Destination 0, 0, wSrc, hSrc); // Source - + g2d.dispose(); - + } - - } - - private class ProportionalDimension extends Dimension { - + + } + + private final class ProportionalDimension extends Dimension { + private static final long serialVersionUID = -428811386088062426L; - - public ProportionalDimension(Dimension d, int w, int h) { - + + private ProportionalDimension(Dimension d, int w, int h) { + double containerAspect = (double) d.width / d.height; double imageAspect = (double) w / h; double scale = 1.0; - + if (imageAspect < containerAspect) { scale = (double) d.height / h; } else if (imageAspect > containerAspect) { scale = (double) d.width / w; } - + height = (int) (((double) h) * scale); width = (int) (((double) w) * scale); - + } - + } - + public static class PnlMatchup extends JPanel { private static final long serialVersionUID = 2055607559359905216L; - - private static enum LineDirection { + + private enum LineDirection { UP, DOWN, STRAIGHT, NONE } - - private static enum LineSide { + + private enum LineSide { LEFT, RIGHT, BOTH } - - private static enum BoxSize { + + private enum BoxSize { SMALL, MEDIUM, LARGE, LARGE_SINGLE } private final SkinColor clr1 = FSkin.getColor(FSkin.Colors.CLR_THEME2).alphaColor(255); private final SkinColor clr2 = FSkin.getColor(FSkin.Colors.CLR_THEME).alphaColor(100); private final SkinColor clr3 = FSkin.getColor(FSkin.Colors.CLR_THEME).alphaColor(100); - + private final int wImg = 55; private final int hImg = 55; - + private SkinImage img1; private SkinImage img2; - + private FLabel name1 = new FLabel.Builder().fontSize(14).fontAlign(SwingConstants.LEFT).build(); private FLabel name2 = new FLabel.Builder().fontSize(14).fontAlign(SwingConstants.LEFT).build(); - + private LineDirection lineDir; private LineSide lineSide; private BoxSize size; private boolean singleBox; - + public PnlMatchup(LineDirection dir, LineSide side, BoxSize size, boolean singleBox) { this.setLayout(new MigLayout("insets 0, gap 0, wrap")); if (!singleBox) { @@ -492,16 +482,16 @@ public enum VSubmenuQuestDraft implements IVSubmenu { name1.setVerticalAlignment(SwingConstants.BOTTOM); name2.setVerticalAlignment(SwingConstants.TOP); } - + public PnlMatchup(LineDirection dir, LineSide side, BoxSize size) { this(dir, side, size, false); } - + public void setPlayerOne(final String name, final SkinImage image) { name1.setText(name); img1 = image; } - + public void setPlayerTwo(final String name, final SkinImage image) { name2.setText(name); img2 = image; @@ -509,12 +499,12 @@ public enum VSubmenuQuestDraft implements IVSubmenu { @Override public void paintComponent(final Graphics g) { - + Graphics2D g2d = (Graphics2D) g.create(); - + int width = getWidth() - 100; int height = getHeight() - 40; - + if (size.equals(BoxSize.MEDIUM)) { height -= 196; g2d.translate(0, 98); @@ -532,9 +522,9 @@ public enum VSubmenuQuestDraft implements IVSubmenu { if (lineSide.equals(LineSide.LEFT) || lineSide.equals(LineSide.BOTH)) { g2d.drawLine(0, height / 2 + 20, 47, height / 2 + 20); } - + g2d.translate(50, 20); - + if (lineSide.equals(LineSide.RIGHT) || lineSide.equals(LineSide.BOTH)) { g2d.drawLine(width, height / 2, width + 65, height / 2); if (lineDir.equals(LineDirection.DOWN)) { @@ -545,17 +535,17 @@ public enum VSubmenuQuestDraft implements IVSubmenu { g2d.drawLine(width, height / 2, width + 45, height / 2); } } - + FSkin.setGraphicsGradientPaint(g2d, 0, 0, clr3, 0, height / 2 + 15 , clr2); g2d.fillRect(0, 0, width, height / 2); - + FSkin.setGraphicsGradientPaint(g2d, 0, height / 2 - 15, clr2, 0, height, clr3); g2d.fillRect(0, height / 2, width, height / 2); g2d.setColor(clr1.getColor()); g2d.setStroke(new BasicStroke(4)); g2d.drawRect(1, 1, width - 2, height - 2); - + if (!singleBox) { FSkin.setGraphicsGradientPaint(g2d, 70, height / 2 - 1, clr1.alphaColor(0), width, height / 2 - 1, clr1); g2d.setStroke(new BasicStroke(2)); @@ -572,9 +562,9 @@ public enum VSubmenuQuestDraft implements IVSubmenu { // Padding here g2d.translate(12, 12); - + g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); - + Dimension srcSize = img1.getSizeForPaint(g2d); int wSrc = srcSize.width; int hSrc = srcSize.height; @@ -582,7 +572,7 @@ public enum VSubmenuQuestDraft implements IVSubmenu { FSkin.drawImage(g2d, img1, 0, 0, wImg, hImg, // Destination 0, 0, wSrc, hSrc); // Source - + g2d.translate(0, 77); if (!singleBox) { @@ -592,9 +582,9 @@ public enum VSubmenuQuestDraft implements IVSubmenu { } g2d.dispose(); - + } - + } - + }