diff --git a/Mage.Client/src/main/java/mage/client/components/HoverButton.java b/Mage.Client/src/main/java/mage/client/components/HoverButton.java index 99948445a72..ae420739d1f 100644 --- a/Mage.Client/src/main/java/mage/client/components/HoverButton.java +++ b/Mage.Client/src/main/java/mage/client/components/HoverButton.java @@ -15,7 +15,7 @@ import java.util.ArrayList; import java.util.List; /** - * GUI component. Image button with hover support and GUI scale support + * GUI component. Image button with mouse hover and GUI scale support * * @author nantuko, JayDi85 */ @@ -309,10 +309,16 @@ public class HoverButton extends JPanel implements MouseListener { public void mouseReleased(MouseEvent e) { } + /** + * Set on click action + */ public void setObserver(Command observer) { this.observer = observer; } + /** + * Set on mouse entered action + */ public void setOnHover(Command onHover) { this.onHover = onHover; } diff --git a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java index a0d98943e29..9671b5a329c 100644 --- a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java +++ b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java @@ -61,7 +61,7 @@ public class PlayerPanelExt extends javax.swing.JPanel { private static final int PANEL_WIDTH = 94; private static final int PANEL_HEIGHT = 270; // full mode (with avatar image) - private static final int PANEL_HEIGHT_SMALL = 238; // small mode (with avatar button) // TODO: no need in small mode after GUI scale added + private static final int PANEL_HEIGHT_SMALL = 218; // small mode (with avatar button) // TODO: no need in small mode after GUI scale added private static final int PANEL_HEIGHT_EXTRA_FOR_ME = 25; // hints button private final Border GREEN_BORDER; @@ -510,10 +510,6 @@ public class PlayerPanelExt extends javax.swing.JPanel { setTextForLabel(category, mana.getKey(), manaButtons.get(mana.getKey()), pool.getColorless(), false, activeValueColor); break; } - - //HoverButton btn = manaButtons.get(mana.getKey()); - //mana.getKey().setOpaque(true); - //mana.getKey().setBackground(Color.green); } } @@ -528,9 +524,6 @@ public class PlayerPanelExt extends javax.swing.JPanel { panelBackground = new MageRoundPane(); panelBackground.setPreferredSize(new Dimension(sizeMod(PANEL_WIDTH - 2), sizeMod(PANEL_HEIGHT))); - Rectangle r = new Rectangle(sizeMod(80), sizeMod(80)); -// avatarFlag = new JLabel(); -// monarchIcon = new JLabel(); timerLabel = new JLabel(); lifeLabel = new JLabel(); handLabel = new JLabel(); @@ -552,12 +545,11 @@ public class PlayerPanelExt extends javax.swing.JPanel { panelBackground.setBorder(BorderFactory.createLineBorder(Color.yellow)); } - // Avatar + // avatar in normal mode (image) + Rectangle r = new Rectangle(sizeMod(80), sizeMod(80)); Image image = ImageHelper.getImageFromResources(DEFAULT_AVATAR_PATH); - BufferedImage resized = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r); avatar = new HoverButton("", resized, resized, resized, r, this.guiScaleMod); - String showPlayerNamePermanently = MageFrame.getPreferences().get(PreferencesDialog.KEY_SHOW_PLAYER_NAMES_PERMANENTLY, "true"); if (showPlayerNamePermanently.equals("true")) { avatar.setTextAlwaysVisible(true); @@ -565,12 +557,21 @@ public class PlayerPanelExt extends javax.swing.JPanel { avatar.setTextOffsetButtonY(sizeMod(10)); avatar.setObserver(() -> SessionHandler.sendPlayerUUID(gameId, playerId)); - // timer area /small layout) + // avatar in small mode (button) + btnPlayer = new JButton(); + btnPlayer.setFont(this.getFont()); + btnPlayer.setText("Player"); + btnPlayer.setVisible(false); + btnPlayer.setToolTipText("Player"); + btnPlayer.setPreferredSize(new Dimension(sizeMod(20), sizeMod(40))); + btnPlayer.addActionListener(e -> SessionHandler.sendPlayerUUID(gameId, playerId)); + + // timer area /small layout timerLabel.setToolTipText("Time left"); timerLabel.setSize(sizeMod(80), sizeMod(12)); timerLabel.setHorizontalAlignment(SwingConstants.CENTER); - // life area + // life r = new Rectangle(sizeMod(18), sizeMod(18)); lifeLabel.setToolTipText("Life"); lifeLabel.setHorizontalAlignment(SwingConstants.CENTER); @@ -580,7 +581,7 @@ public class PlayerPanelExt extends javax.swing.JPanel { life.setToolTipText("Life"); life.setOpaque(false); - // hand area + // hand r = new Rectangle(sizeMod(18), sizeMod(18)); handLabel.setToolTipText("Hand"); handLabel.setHorizontalAlignment(SwingConstants.CENTER); @@ -590,7 +591,7 @@ public class PlayerPanelExt extends javax.swing.JPanel { hand.setToolTipText("Hand"); hand.setOpaque(false); - // Poison count + // poison r = new Rectangle(sizeMod(18), sizeMod(18)); Image imagePoison = ImageHelper.getImageFromResources("/info/poison.png"); BufferedImage resizedPoison = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(imagePoison, BufferedImage.TYPE_INT_ARGB), r); @@ -599,30 +600,59 @@ public class PlayerPanelExt extends javax.swing.JPanel { setTextForLabel("poison", poisonLabel, poison, 0, false); poisonLabel.setHorizontalAlignment(SwingConstants.CENTER); - // Library + // library r = new Rectangle(sizeMod(19), sizeMod(19)); libraryLabel.setToolTipText("Library"); libraryLabel.setHorizontalAlignment(SwingConstants.CENTER); Image imageLibrary = ImageHelper.getImageFromResources("/info/library.png"); BufferedImage resizedLibrary = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(imageLibrary, BufferedImage.TYPE_INT_ARGB), r); - library = new HoverButton(null, resizedLibrary, resizedLibrary, resizedLibrary, r, this.guiScaleMod); library.setToolTipText("Library"); library.setOpaque(false); library.setObserver(() -> btnLibraryActionPerformed(null)); - // Grave count and open graveyard button + // energy + r = new Rectangle(sizeMod(18), sizeMod(18)); + Image imageEnergy = ImageHelper.getImageFromResources("/info/energy.png"); + BufferedImage resizedEnergy = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(imageEnergy, BufferedImage.TYPE_INT_ARGB), r); + energy = new ImagePanel(resizedEnergy, ImagePanelStyle.ACTUAL); + energy.setToolTipText("Energy"); + energy.setOpaque(false); + setTextForLabel("energy", energyLabel, energy, 0, false); + energyLabel.setHorizontalAlignment(SwingConstants.CENTER); + + // experience + r = new Rectangle(sizeMod(18), sizeMod(18)); + Image imageExperience = ImageHelper.getImageFromResources("/info/experience.png"); + BufferedImage resizedExperience = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(imageExperience, BufferedImage.TYPE_INT_ARGB), r); + experience = new ImagePanel(resizedExperience, ImagePanelStyle.ACTUAL); + experience.setToolTipText("Experience"); + experience.setOpaque(false); + setTextForLabel("experience", experienceLabel, experience, 0, false); + experienceLabel.setHorizontalAlignment(SwingConstants.CENTER); + + // rad + r = new Rectangle(sizeMod(16), sizeMod(16)); + Image imageRad = ImageHelper.getImageFromResources("/info/rad.png"); + BufferedImage resizedRad = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(imageRad, BufferedImage.TYPE_INT_ARGB), r); + rad = new ImagePanel(resizedRad, ImagePanelStyle.ACTUAL); + rad.setToolTipText("Rad"); + rad.setOpaque(false); + setTextForLabel("rad", radLabel, rad, 0, false); + radLabel.setHorizontalAlignment(SwingConstants.CENTER); + + // graveyard r = new Rectangle(sizeMod(21), sizeMod(21)); graveLabel.setToolTipText("Card Types: 0"); graveLabel.setHorizontalAlignment(SwingConstants.CENTER); Image imageGrave = ImageHelper.getImageFromResources("/info/grave.png"); BufferedImage resizedGrave = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(imageGrave, BufferedImage.TYPE_INT_ARGB), r); - grave = new HoverButton(null, resizedGrave, resizedGrave, resizedGrave, r, this.guiScaleMod); grave.setToolTipText("Graveyard"); grave.setOpaque(false); grave.setObserver(() -> btnGraveActionPerformed(null)); + // exile exileLabel = new JLabel(); exileLabel.setToolTipText("Exile"); exileLabel.setHorizontalAlignment(SwingConstants.CENTER); @@ -635,30 +665,24 @@ public class PlayerPanelExt extends javax.swing.JPanel { exileZone.setObserver(() -> btnExileZoneActionPerformed(null)); exileZone.setBounds(sizeMod(25), 0, sizeMod(21), sizeMod(21)); - // Cheat button - r = new Rectangle(sizeMod(25), sizeMod(21)); - image = ImageHelper.getImageFromResources("/info/cheat.png"); - resized = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r); - cheat = new JButton(); - cheat.setIcon(new ImageIcon(resized)); - cheat.setToolTipText("Cheat button (activate it on your priority only)"); - cheat.addActionListener(e -> btnCheatActionPerformed(e)); - - // tools button like hints - toolHintsHelper = new JButton(); - toolHintsHelper.setFont(this.getFont()); - toolHintsHelper.setText("hints"); - toolHintsHelper.setToolTipText("Open new card hints helper window"); - toolHintsHelper.addActionListener(e -> btnToolHintsHelperActionPerformed(e)); - zonesPanel = new JPanel(); zonesPanel.setPreferredSize(new Dimension(sizeMod(100), sizeMod(60))); zonesPanel.setSize(sizeMod(100), sizeMod(60)); zonesPanel.setLayout(null); zonesPanel.setOpaque(false); - image = ImageHelper.getImageFromResources("/info/command_zone.png"); + // tools button like hints + toolHintsHelper = new JButton(); + toolHintsHelper.setFont(this.getFont()); + toolHintsHelper.setText("hints"); + toolHintsHelper.setToolTipText("Open new card hints helper window"); + toolHintsHelper.addActionListener(this::btnToolHintsHelperActionPerformed); + toolHintsHelper.setBounds(sizeMod(3), sizeMod(2 + 21 + 2), sizeMod(73), sizeMod(21)); + zonesPanel.add(toolHintsHelper); + + // command r = new Rectangle(sizeMod(21), sizeMod(21)); + image = ImageHelper.getImageFromResources("/info/command_zone.png"); resized = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r); commandZone = new HoverButton(null, resized, resized, resized, r, this.guiScaleMod); commandZone.setToolTipText("Command Zone (Commanders, Emblems and Planes)"); @@ -666,55 +690,21 @@ public class PlayerPanelExt extends javax.swing.JPanel { commandZone.setObserver(() -> btnCommandZoneActionPerformed(null)); commandZone.setBounds(sizeMod(3), 0, sizeMod(21), sizeMod(21)); zonesPanel.add(commandZone); - commandLabel.setToolTipText("Command zone"); commandLabel.setBounds(sizeMod(25), 0, sizeMod(21), sizeMod(21)); zonesPanel.add(commandLabel); + // cheat + r = new Rectangle(sizeMod(25), sizeMod(21)); + image = ImageHelper.getImageFromResources("/info/cheat.png"); + resized = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r); + cheat = new JButton(); + cheat.setIcon(new ImageIcon(resized)); + cheat.setToolTipText("Cheat button (activate it on your priority only)"); + cheat.addActionListener(this::btnCheatActionPerformed); cheat.setBounds(sizeMod(40), sizeMod(2), sizeMod(25), sizeMod(21)); zonesPanel.add(cheat); - toolHintsHelper.setBounds(sizeMod(3), sizeMod(2 + 21 + 2), sizeMod(73), sizeMod(21)); - zonesPanel.add(toolHintsHelper); - - // Energy count - r = new Rectangle(sizeMod(18), sizeMod(18)); - Image imageEnergy = ImageHelper.getImageFromResources("/info/energy.png"); - BufferedImage resizedEnergy = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(imageEnergy, BufferedImage.TYPE_INT_ARGB), r); - energy = new ImagePanel(resizedEnergy, ImagePanelStyle.ACTUAL); - energy.setToolTipText("Energy"); - energy.setOpaque(false); - setTextForLabel("energy", energyLabel, energy, 0, false); - energyLabel.setHorizontalAlignment(SwingConstants.CENTER); - - // Experience count - r = new Rectangle(sizeMod(18), sizeMod(18)); - Image imageExperience = ImageHelper.getImageFromResources("/info/experience.png"); - BufferedImage resizedExperience = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(imageExperience, BufferedImage.TYPE_INT_ARGB), r); - experience = new ImagePanel(resizedExperience, ImagePanelStyle.ACTUAL); - experience.setToolTipText("Experience"); - experience.setOpaque(false); - setTextForLabel("experience", experienceLabel, experience, 0, false); - experienceLabel.setHorizontalAlignment(SwingConstants.CENTER); - - // Rad count - r = new Rectangle(sizeMod(16), sizeMod(16)); - Image imageRad = ImageHelper.getImageFromResources("/info/rad.png"); - BufferedImage resizedRad = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(imageRad, BufferedImage.TYPE_INT_ARGB), r); - rad = new ImagePanel(resizedRad, ImagePanelStyle.ACTUAL); - rad.setToolTipText("Rad"); - rad.setOpaque(false); - setTextForLabel("rad", radLabel, rad, 0, false); - radLabel.setHorizontalAlignment(SwingConstants.CENTER); - - btnPlayer = new JButton(); - btnPlayer.setFont(this.getFont()); - btnPlayer.setText("Player"); - btnPlayer.setVisible(false); - btnPlayer.setToolTipText("Player"); - btnPlayer.setPreferredSize(new Dimension(sizeMod(20), sizeMod(40))); - btnPlayer.addActionListener(e -> SessionHandler.sendPlayerUUID(gameId, playerId)); - // Add mana symbols // TODO: replace "button + label" to label on rework /* @@ -736,6 +726,8 @@ public class PlayerPanelExt extends javax.swing.JPanel { manaLabels.put(manaCountLabelW, ManaType.WHITE);l //*/ ///* + + // mana W JLabel manaCountLabelW = new JLabel(); manaCountLabelW.setHorizontalAlignment(SwingConstants.CENTER); manaLabels.put(manaCountLabelW, ManaType.WHITE); @@ -748,6 +740,7 @@ public class PlayerPanelExt extends javax.swing.JPanel { setTextForLabel(ManaType.WHITE.toString() + " mana", manaCountLabelW, btnWhiteMana, 0, false); //*/ + // mana U JLabel manaCountLabelU = new JLabel(); manaLabels.put(manaCountLabelU, ManaType.BLUE); manaCountLabelU.setHorizontalAlignment(SwingConstants.CENTER); @@ -759,6 +752,7 @@ public class PlayerPanelExt extends javax.swing.JPanel { manaButtons.put(manaCountLabelU, btnBlueMana); setTextForLabel(ManaType.BLUE.toString() + " mana", manaCountLabelU, btnBlueMana, 0, false); + // mana B JLabel manaCountLabelB = new JLabel(); manaLabels.put(manaCountLabelB, ManaType.BLACK); manaCountLabelB.setHorizontalAlignment(SwingConstants.CENTER); @@ -770,6 +764,7 @@ public class PlayerPanelExt extends javax.swing.JPanel { manaButtons.put(manaCountLabelB, btnBlackMana); setTextForLabel(ManaType.BLACK.toString() + " mana", manaCountLabelB, btnBlackMana, 0, false); + // mana R JLabel manaCountLabelR = new JLabel(); manaLabels.put(manaCountLabelR, ManaType.RED); manaCountLabelR.setHorizontalAlignment(SwingConstants.CENTER); @@ -781,6 +776,7 @@ public class PlayerPanelExt extends javax.swing.JPanel { manaButtons.put(manaCountLabelR, btnRedMana); setTextForLabel(ManaType.RED.toString() + " mana", manaCountLabelR, btnRedMana, 0, false); + // mana G JLabel manaCountLabelG = new JLabel(); manaLabels.put(manaCountLabelG, ManaType.GREEN); manaCountLabelG.setHorizontalAlignment(SwingConstants.CENTER); @@ -792,6 +788,7 @@ public class PlayerPanelExt extends javax.swing.JPanel { manaButtons.put(manaCountLabelG, btnGreenMana); setTextForLabel(ManaType.GREEN.toString() + " mana", manaCountLabelG, btnGreenMana, 0, false); + // mana C JLabel manaCountLabelX = new JLabel(); manaLabels.put(manaCountLabelX, ManaType.COLORLESS); manaCountLabelX.setHorizontalAlignment(SwingConstants.CENTER); @@ -801,8 +798,10 @@ public class PlayerPanelExt extends javax.swing.JPanel { btnColorlessMana.setOpaque(false); btnColorlessMana.setObserver(() -> btnManaActionPerformed(ManaType.COLORLESS)); manaButtons.put(manaCountLabelX, btnColorlessMana); - setTextForLabel(ManaType.COLORLESS.toString() + " mana", manaCountLabelX, btnColorlessMana, 0, false); + setTextForLabel(ManaType.COLORLESS + " mana", manaCountLabelX, btnColorlessMana, 0, false); + // STRUCTURE + // TODO: rework to readable/editable layout logic GroupLayout gl_panelBackground = new GroupLayout(panelBackground); gl_panelBackground.setHorizontalGroup( gl_panelBackground.createParallelGroup(Alignment.LEADING)