From 2bd14269d6af38047bc27f598d6a8b6d42db997c Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 18 Oct 2014 12:15:40 +0200 Subject: [PATCH] * Finished button handling above stack. --- .../main/java/mage/client/game/GamePanel.java | 304 +++++++++++------- .../java/org/mage/card/arcane/CardPanel.java | 1 + .../mage/plugins/card/utils/ImageManager.java | 10 + .../card/utils/impl/ImageManagerImpl.java | 77 ++++- .../main/resources/buttons/cancel_skip.png | Bin 0 -> 2536 bytes .../src/main/resources/buttons/concede.png | Bin 0 -> 1968 bytes .../src/main/resources/buttons/skip_all.png | Bin 0 -> 2351 bytes .../main/resources/buttons/skip_to_end.png | Bin 0 -> 2399 bytes .../main/resources/buttons/skip_to_main.png | Bin 0 -> 2478 bytes .../src/main/resources/buttons/skip_turn.png | Bin 0 -> 2321 bytes .../main/resources/buttons/stop_watching.png | Bin 0 -> 2505 bytes .../main/resources/buttons/switch_hands.png | Bin 0 -> 2363 bytes 12 files changed, 275 insertions(+), 117 deletions(-) create mode 100644 Mage.Client/src/main/resources/buttons/cancel_skip.png create mode 100644 Mage.Client/src/main/resources/buttons/concede.png create mode 100644 Mage.Client/src/main/resources/buttons/skip_all.png create mode 100644 Mage.Client/src/main/resources/buttons/skip_to_end.png create mode 100644 Mage.Client/src/main/resources/buttons/skip_to_main.png create mode 100644 Mage.Client/src/main/resources/buttons/skip_turn.png create mode 100644 Mage.Client/src/main/resources/buttons/stop_watching.png create mode 100644 Mage.Client/src/main/resources/buttons/switch_hands.png diff --git a/Mage.Client/src/main/java/mage/client/game/GamePanel.java b/Mage.Client/src/main/java/mage/client/game/GamePanel.java index 0ffd250db9c..509962e833c 100644 --- a/Mage.Client/src/main/java/mage/client/game/GamePanel.java +++ b/Mage.Client/src/main/java/mage/client/game/GamePanel.java @@ -65,6 +65,7 @@ import java.util.*; import java.util.List; import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; +import javax.swing.border.EmptyBorder; import mage.constants.PlayerAction; /** @@ -219,8 +220,8 @@ public final class GamePanel extends javax.swing.JPanel { private void saveDividerLocations() { // save panel sizes and divider locations. Rectangle rec = MageFrame.getDesktop().getBounds(); - StringBuilder sb = new StringBuilder(Double.toString(rec.getWidth())).append("x").append(Double.toString(rec.getHeight())); - PreferencesDialog.saveValue(PreferencesDialog.KEY_MAGE_PANEL_LAST_SIZE, sb.toString()); + String sb = Double.toString(rec.getWidth()) + "x" + Double.toString(rec.getHeight()); + PreferencesDialog.saveValue(PreferencesDialog.KEY_MAGE_PANEL_LAST_SIZE, sb); PreferencesDialog.saveValue(PreferencesDialog.KEY_GAMEPANEL_DIVIDER_LOCATION_0, Integer.toString(this.jSplitPane0.getDividerLocation())); PreferencesDialog.saveValue(PreferencesDialog.KEY_GAMEPANEL_DIVIDER_LOCATION_1, Integer.toString(this.jSplitPane1.getDividerLocation())); PreferencesDialog.saveValue(PreferencesDialog.KEY_GAMEPANEL_DIVIDER_LOCATION_2, Integer.toString(this.jSplitPane2.getDividerLocation())); @@ -230,9 +231,9 @@ public final class GamePanel extends javax.swing.JPanel { Rectangle rec = MageFrame.getDesktop().getBounds(); if (rec != null) { String size = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_MAGE_PANEL_LAST_SIZE, null); - StringBuilder sb = new StringBuilder(Double.toString(rec.getWidth())).append("x").append(Double.toString(rec.getHeight())); + String sb = Double.toString(rec.getWidth()) + "x" + Double.toString(rec.getHeight()); // use divider positions only if screen size is the same as it was the time the settings were saved - if (size != null && size.equals(sb.toString())) { + if (size != null && size.equals(sb)) { String location = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAMEPANEL_DIVIDER_LOCATION_0, null); if (location != null && jSplitPane0 != null) { @@ -260,8 +261,8 @@ public final class GamePanel extends javax.swing.JPanel { bigCard.setMaximumSize(bbDimension); bigCard.setMinimumSize(bbDimension); bigCard.setPreferredSize(bbDimension); - pnlGameInfo.revalidate(); - pnlGameInfo.repaint(); + pnlShortCuts.revalidate(); + pnlShortCuts.repaint(); //this.handContainer.sizeHand(0.8, smallMode); for (PlayAreaPanel p: players.values()) { p.sizePlayer(smallMode); @@ -275,8 +276,8 @@ public final class GamePanel extends javax.swing.JPanel { bigCard.setMaximumSize(bbDimension); bigCard.setMinimumSize(bbDimension); bigCard.setPreferredSize(bbDimension); - pnlGameInfo.revalidate(); - pnlGameInfo.repaint(); + pnlShortCuts.revalidate(); + pnlShortCuts.repaint(); this.handContainer.sizeHand(1, smallMode); for (PlayAreaPanel p: players.values()) { p.sizePlayer(smallMode); @@ -300,11 +301,19 @@ public final class GamePanel extends javax.swing.JPanel { this.feedbackPanel.init(gameId); this.feedbackPanel.clear(); this.abilityPicker.init(session, gameId); + this.btnConcede.setVisible(true); - this.btnEndTurn.setVisible(true); - this.btnSwitchHands.setVisible(false); - this.pnlReplay.setVisible(false); this.btnStopWatching.setVisible(false); + this.btnSwitchHands.setVisible(false); + this.btnCancelSkip.setVisible(true); + + this.btnSkipToNextTurn.setVisible(true); + this.btnSkipToEndTurn.setVisible(true); + this.btnSkipToNextMain.setVisible(true); + this.btnSkipToYourTurn.setVisible(true); + + this.pnlReplay.setVisible(false); + this.gameChatPanel.clear(); this.gameChatPanel.connect(session.getGameChatId(gameId)); if (!session.joinGame(gameId)) { @@ -320,10 +329,18 @@ public final class GamePanel extends javax.swing.JPanel { MageFrame.addGame(gameId, this); this.feedbackPanel.init(gameId); this.feedbackPanel.clear(); + this.btnConcede.setVisible(false); - this.btnEndTurn.setVisible(false); - this.btnSwitchHands.setVisible(false); this.btnStopWatching.setVisible(true); + this.btnSwitchHands.setVisible(false); + this.btnCancelSkip.setVisible(false); + + this.btnSkipToNextTurn.setVisible(false); + this.btnSkipToEndTurn.setVisible(false); + this.btnSkipToNextMain.setVisible(false); + this.btnSkipToYourTurn.setVisible(false); + + this.pnlReplay.setVisible(false); this.gameChatPanel.clear(); this.gameChatPanel.connect(session.getGameChatId(gameId)); @@ -343,7 +360,7 @@ public final class GamePanel extends javax.swing.JPanel { this.feedbackPanel.init(gameId); this.feedbackPanel.clear(); this.btnConcede.setVisible(false); - this.btnEndTurn.setVisible(false); + this.btnSkipToNextTurn.setVisible(false); this.btnSwitchHands.setVisible(false); this.btnStopWatching.setVisible(false); this.pnlReplay.setVisible(true); @@ -489,7 +506,7 @@ public final class GamePanel extends javax.swing.JPanel { if (previous != visible) { btnSwitchHands.setVisible(visible); if (visible) { - JOptionPane.showMessageDialog(null, "You control other player's turn. \nUse \"Switch Hand\" on the bottom to switch between cards in different hands."); + JOptionPane.showMessageDialog(null, "You control other player's turn. \nUse \"Switch Hand\" button to switch between cards in different hands."); } else { JOptionPane.showMessageDialog(null, "You lost control on other player's turn."); } @@ -809,7 +826,7 @@ public final class GamePanel extends javax.swing.JPanel { jSplitPane0 = new javax.swing.JSplitPane(); jPanel2 = new javax.swing.JPanel(); jPanel3 = new javax.swing.JPanel(); - pnlGameInfo = new javax.swing.JPanel(); + pnlShortCuts = new javax.swing.JPanel(); lblPhase = new javax.swing.JLabel(); txtPhase = new javax.swing.JLabel(); lblStep = new javax.swing.JLabel(); @@ -822,11 +839,13 @@ public final class GamePanel extends javax.swing.JPanel { lblPriority = new javax.swing.JLabel(); feedbackPanel = new mage.client.game.FeedbackPanel(); - btnConcede = new javax.swing.JButton(); - btnEndTurn = new javax.swing.JButton(); - btnCancelSkip = new javax.swing.JButton(); - btnSkipToYourTurn = new javax.swing.JButton(); + btnCancelSkip = new javax.swing.JButton(); // F3 + btnSkipToNextTurn = new javax.swing.JButton(); // F4 + btnSkipToEndTurn = new javax.swing.JButton(); // F5 + btnSkipToNextMain = new javax.swing.JButton(); // F7 + btnSkipToYourTurn = new javax.swing.JButton(); // F9 + btnConcede = new javax.swing.JButton(); btnSwitchHands = new javax.swing.JButton(); btnStopWatching = new javax.swing.JButton(); @@ -867,8 +886,8 @@ public final class GamePanel extends javax.swing.JPanel { restoreDividerLocations(); - pnlGameInfo.setOpaque(false); - pnlGameInfo.setPreferredSize(new Dimension(400, 60)); + pnlShortCuts.setOpaque(false); + pnlShortCuts.setPreferredSize(new Dimension(400, 60)); lblPhase.setLabelFor(txtPhase); lblPhase.setText("Phase:"); @@ -921,56 +940,33 @@ public final class GamePanel extends javax.swing.JPanel { } }); - btnCancelSkip.setText("F3"); - btnCancelSkip.setToolTipText("Cancel all skip actions (F3)"); - btnCancelSkip.setFocusable(true); + btnCancelSkip.setContentAreaFilled(false); + btnCancelSkip.setBorder(new EmptyBorder(0,0,0,0)); + btnCancelSkip.setIcon(new ImageIcon(ImageManagerImpl.getInstance().getCancelSkipButtonImage())); + btnCancelSkip.setToolTipText("Cancel all skip actions (F3)."); + btnCancelSkip.setFocusable(false); btnCancelSkip.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent evt) { - restorePriorityActionPerformed(null); + if (evt.getButton() == MouseEvent.BUTTON1) { + restorePriorityActionPerformed(null); + } } }); - KeyStroke ks9 = KeyStroke.getKeyStroke(KeyEvent.VK_F9, 0); - this.getInputMap(c).put(ks9, "F9_PRESS"); - this.getActionMap().put("F9_PRESS", new AbstractAction() { - @Override - public void actionPerformed(ActionEvent actionEvent) { - btnPassPriorityUntilNextYourTurnActionPerformed(actionEvent); - } - }); - - btnSkipToYourTurn.setText("F9"); - btnSkipToYourTurn.setToolTipText("Skip to your next turn (F9)"); - btnSkipToYourTurn.setFocusable(true); - btnSkipToYourTurn.addMouseListener(new MouseAdapter() { + btnSkipToNextTurn.setContentAreaFilled(false); + btnSkipToNextTurn.setBorder(new EmptyBorder(0,0,0,0)); + btnSkipToNextTurn.setIcon(new ImageIcon(ImageManagerImpl.getInstance().getSkipNextTurnButtonImage())); + btnSkipToNextTurn.setToolTipText("Skip to next turn (F4)."); + btnSkipToNextTurn.setFocusable(false); + btnSkipToNextTurn.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent evt) { - btnPassPriorityUntilNextYourTurnActionPerformed(null); + if (evt.getButton() == MouseEvent.BUTTON1) { + btnEndTurnActionPerformed(null); + } } }); - - btnConcede.setText("Concede"); - btnConcede.setToolTipText("Concede the current game"); - btnConcede.setFocusable(false); - btnConcede.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent evt) { - btnConcedeActionPerformed(null); - } - }); - - btnEndTurn.setText("F4"); - btnEndTurn.setToolTipText("End This Turn (F4)"); - btnEndTurn.setFocusable(false); - btnEndTurn.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent evt) { - btnEndTurnActionPerformed(null); - } - }); - - KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_F4, 0); this.getInputMap(c).put(ks, "F4_PRESS"); @@ -981,6 +977,20 @@ public final class GamePanel extends javax.swing.JPanel { } }); + btnSkipToEndTurn.setContentAreaFilled(false); + btnSkipToEndTurn.setBorder(new EmptyBorder(0,0,0,0)); + btnSkipToEndTurn.setIcon(new ImageIcon(ImageManagerImpl.getInstance().getSkipEndTurnButtonImage())); + btnSkipToEndTurn.setToolTipText("Skip to (opponents/next) end of turn step (F5) - adjust using preferences."); + btnSkipToEndTurn.setFocusable(false); + btnSkipToEndTurn.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent evt) { + if (evt.getButton() == MouseEvent.BUTTON1) { + btnUntilEndOfTurnActionPerformed(null); + } + } + }); + ks = KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0); this.getInputMap(c).put(ks, "F5_PRESS"); this.getActionMap().put("F5_PRESS", new AbstractAction() { @@ -990,6 +1000,20 @@ public final class GamePanel extends javax.swing.JPanel { } }); + btnSkipToNextMain.setContentAreaFilled(false); + btnSkipToNextMain.setBorder(new EmptyBorder(0,0,0,0)); + btnSkipToNextMain.setIcon(new ImageIcon(ImageManagerImpl.getInstance().getSkipMainButtonImage())); + btnSkipToNextMain.setToolTipText("Skip to (your) next main phase (F7) - adjust using preferences."); + btnSkipToNextMain.setFocusable(false); + btnSkipToNextMain.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent evt) { + if (evt.getButton() == MouseEvent.BUTTON1) { + btnUntilNextMainPhaseActionPerformed(null); + } + } + }); + ks = KeyStroke.getKeyStroke(KeyEvent.VK_F7, 0); this.getInputMap(c).put(ks, "F7_PRESS"); this.getActionMap().put("F7_PRESS", new AbstractAction() { @@ -999,6 +1023,42 @@ public final class GamePanel extends javax.swing.JPanel { } }); + btnSkipToYourTurn.setContentAreaFilled(false); + btnSkipToYourTurn.setBorder(new EmptyBorder(0,0,0,0)); + btnSkipToYourTurn.setIcon(new ImageIcon(ImageManagerImpl.getInstance().getSkipYourNextTurnButtonImage())); + btnSkipToYourTurn.setToolTipText("Skip to your next turn (F9)."); + btnSkipToYourTurn.setFocusable(false); + btnSkipToYourTurn.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent evt) { + if (evt.getButton() == MouseEvent.BUTTON1) { + btnPassPriorityUntilNextYourTurnActionPerformed(null); + } + } + }); + + KeyStroke ks9 = KeyStroke.getKeyStroke(KeyEvent.VK_F9, 0); + this.getInputMap(c).put(ks9, "F9_PRESS"); + this.getActionMap().put("F9_PRESS", new AbstractAction() { + @Override + public void actionPerformed(ActionEvent actionEvent) { + btnPassPriorityUntilNextYourTurnActionPerformed(actionEvent); + } + }); + + btnConcede.setContentAreaFilled(false); + btnConcede.setBorder(new EmptyBorder(0,0,0,0)); + btnConcede.setIcon(new ImageIcon(ImageManagerImpl.getInstance().getConcedeButtonImage())); + btnConcede.setToolTipText("Concede the current game."); + btnConcede.setFocusable(false); + btnConcede.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent evt) { + if (evt.getButton() == MouseEvent.BUTTON1) { + btnConcedeActionPerformed(null); + } + } + }); KeyStroke ks2 = KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0); @@ -1077,20 +1137,31 @@ public final class GamePanel extends javax.swing.JPanel { } }); - - btnSwitchHands.setText("Switch Hands"); + btnSwitchHands.setContentAreaFilled(false); + btnSwitchHands.setBorder(new EmptyBorder(0,0,0,0)); + btnSwitchHands.setIcon(new ImageIcon(ImageManagerImpl.getInstance().getSwitchHandsButtonImage())); + btnSwitchHands.setFocusable(false); + btnSwitchHands.setToolTipText("Switch between your hand cards and hand cards of controlled players."); btnSwitchHands.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent evt) { - btnSwitchHandActionPerformed(null); + if (evt.getButton() == MouseEvent.BUTTON1) { + btnSwitchHandActionPerformed(null); + } } }); - btnStopWatching.setText("Stop Watching"); - btnStopWatching.addActionListener(new java.awt.event.ActionListener() { + btnStopWatching.setContentAreaFilled(false); + btnStopWatching.setBorder(new EmptyBorder(0,0,0,0)); + btnStopWatching.setIcon(new ImageIcon(ImageManagerImpl.getInstance().getStopWatchButtonImage())); + btnStopWatching.setFocusable(false); + btnSwitchHands.setToolTipText("Stop watching this game."); + btnStopWatching.addMouseListener(new MouseAdapter() { @Override - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnStopWatchingActionPerformed(evt); + public void mouseClicked(MouseEvent evt) { + if (evt.getButton() == MouseEvent.BUTTON1) { + btnStopWatchingActionPerformed(null); + } } }); @@ -1163,35 +1234,32 @@ public final class GamePanel extends javax.swing.JPanel { ); // Game info panel (buttons on the right panel) - javax.swing.GroupLayout gl_pnlGameInfo = new javax.swing.GroupLayout(pnlGameInfo); - pnlGameInfo.setLayout(gl_pnlGameInfo); - gl_pnlGameInfo.setHorizontalGroup( - gl_pnlGameInfo.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(gl_pnlGameInfo.createSequentialGroup() - .addGap(10, 10, 10) - .addComponent(btnConcede) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnCancelSkip) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnEndTurn) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + javax.swing.GroupLayout gl_pnlShortCuts = new javax.swing.GroupLayout(pnlShortCuts); + pnlShortCuts.setLayout(gl_pnlShortCuts); + gl_pnlShortCuts.setHorizontalGroup(gl_pnlShortCuts.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(gl_pnlShortCuts.createSequentialGroup() + .addComponent(btnSkipToNextTurn) + .addComponent(btnSkipToEndTurn) + .addComponent(btnSkipToNextMain) .addComponent(btnSkipToYourTurn) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + ) + .addGroup(gl_pnlShortCuts.createSequentialGroup() .addComponent(btnSwitchHands) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(btnCancelSkip) + .addComponent(btnConcede) .addComponent(btnStopWatching) - .addContainerGap(62, Short.MAX_VALUE)) + ) //.addComponent(bigCard, javax.swing.GroupLayout.DEFAULT_SIZE, 256, Short.MAX_VALUE) //.addComponent(feedbackPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 256, Short.MAX_VALUE) //.addComponent(stack, javax.swing.GroupLayout.DEFAULT_SIZE, 256, Short.MAX_VALUE) - .addGroup(gl_pnlGameInfo.createSequentialGroup() + + .addGroup(gl_pnlShortCuts.createSequentialGroup() .addContainerGap() .addComponent(pnlReplay, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(51, Short.MAX_VALUE)) ); - gl_pnlGameInfo.setVerticalGroup( - gl_pnlGameInfo.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(gl_pnlGameInfo.createSequentialGroup() + gl_pnlShortCuts.setVerticalGroup(gl_pnlShortCuts.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(gl_pnlShortCuts.createSequentialGroup() //.addComponent(bigCard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) //.addGap(1, 1, 1) //.addComponent(feedbackPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE) @@ -1199,13 +1267,20 @@ public final class GamePanel extends javax.swing.JPanel { .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 164, Short.MAX_VALUE) .addComponent(pnlReplay, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(gl_pnlGameInfo.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(btnConcede) - .addComponent(btnCancelSkip) - .addComponent(btnEndTurn) + + .addGroup(gl_pnlShortCuts.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(btnSkipToNextTurn) + .addComponent(btnSkipToEndTurn) + .addComponent(btnSkipToNextMain) .addComponent(btnSkipToYourTurn) + ) + .addGroup(gl_pnlShortCuts.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(btnSwitchHands) - .addComponent(btnStopWatching))) + .addComponent(btnCancelSkip) + .addComponent(btnConcede) + .addComponent(btnStopWatching) + ) + ) ); pnlBattlefield.setLayout(new java.awt.GridBagLayout()); @@ -1273,7 +1348,7 @@ public final class GamePanel extends javax.swing.JPanel { .addComponent(handContainer, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ) .addGroup(gl_jPanel3.createParallelGroup(Alignment.LEADING) - .addComponent(pnlGameInfo, 400, 400, 400) + .addComponent(pnlShortCuts, 400, 400, 400) .addComponent(stack, 400, 400, 400) ) ) @@ -1294,7 +1369,7 @@ public final class GamePanel extends javax.swing.JPanel { //.addPreferredGap(ComponentPlacement.RELATED) .addGroup(gl_jPanel3.createParallelGroup(Alignment.LEADING) .addGroup(gl_jPanel3.createSequentialGroup() - .addComponent(pnlGameInfo, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addComponent(pnlShortCuts, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addGap(0) .addComponent(stack, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) ) @@ -1322,16 +1397,6 @@ public final class GamePanel extends javax.swing.JPanel { gbl.setConstraints( bigCard, gbc ); jPanel2.add( bigCard ); -// GridBagConstraints gbc2 = new GridBagConstraints(); -// gbc2.fill = GridBagConstraints.NONE; -// gbc2.gridx = 0; gbc2.gridy = GridBagConstraints.RELATIVE; -// gbc2.gridwidth = 1; gbc2.gridheight = 1; //size 1/5 -// gbc2.weightx = 0.0; gbc2.weighty = 0.0; -// gl_jPanel3.setConstraints( pnlGameInfo, gbc2 ); - -// gbl.setConstraints( pnlGameInfo, gbc2 ); -// jPanel2.add( pnlGameInfo ); - jPanel2.setOpaque(false); // game pane and chat/log pane @@ -1364,12 +1429,21 @@ public final class GamePanel extends javax.swing.JPanel { for (MouseListener ml :this.btnSkipToYourTurn.getMouseListeners()) { this.btnSkipToYourTurn.removeMouseListener(ml); } - for (MouseListener ml :this.btnEndTurn.getMouseListeners()) { - this.btnEndTurn.removeMouseListener(ml); + for (MouseListener ml :this.btnSkipToEndTurn.getMouseListeners()) { + this.btnSkipToEndTurn.removeMouseListener(ml); + } + for (MouseListener ml :this.btnSkipToNextMain.getMouseListeners()) { + this.btnSkipToNextMain.removeMouseListener(ml); + } + for (MouseListener ml :this.btnSkipToNextTurn.getMouseListeners()) { + this.btnSkipToNextTurn.removeMouseListener(ml); } for (MouseListener ml :this.btnSwitchHands.getMouseListeners()) { this.btnSwitchHands.removeMouseListener(ml); } + for (MouseListener ml :this.btnStopWatching.getMouseListeners()) { + this.btnStopWatching.removeMouseListener(ml); + } for (MouseListener ml :this.jPhases.getMouseListeners()) { this.jPhases.removeMouseListener(ml); } @@ -1382,9 +1456,6 @@ public final class GamePanel extends javax.swing.JPanel { for (ActionListener al :this.btnPlay.getActionListeners()) { this.btnPlay.removeActionListener(al); } - for (ActionListener al :this.btnStopWatching.getActionListeners()) { - this.btnStopWatching.removeActionListener(al); - } for (ActionListener al :this.btnStopReplay.getActionListeners()) { this.btnStopReplay.removeActionListener(al); } @@ -1557,12 +1628,15 @@ public final class GamePanel extends javax.swing.JPanel { private mage.client.components.ability.AbilityPicker abilityPicker; private mage.client.cards.BigCard bigCard; - + +// private JPanel cancelSkipPanel; private javax.swing.JButton btnCancelSkip; + private javax.swing.JButton btnSkipToNextTurn; // F4 + private javax.swing.JButton btnSkipToEndTurn; // F5 + private javax.swing.JButton btnSkipToNextMain; // F7 + private javax.swing.JButton btnSkipToYourTurn; // F9 + private javax.swing.JButton btnConcede; - private javax.swing.JButton btnEndTurn; - private javax.swing.JButton btnSkipToYourTurn; - private javax.swing.JButton btnSwitchHands; private javax.swing.JButton btnNextPlay; @@ -1586,7 +1660,7 @@ public final class GamePanel extends javax.swing.JPanel { private javax.swing.JLabel lblStep; private javax.swing.JLabel lblTurn; private javax.swing.JPanel pnlBattlefield; - private javax.swing.JPanel pnlGameInfo; + private javax.swing.JPanel pnlShortCuts; private javax.swing.JPanel pnlReplay; private javax.swing.JLabel txtActivePlayer; private javax.swing.JLabel txtPhase; diff --git a/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java b/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java index ee525a4dbb8..9f8bd91896e 100644 --- a/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java +++ b/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java @@ -342,6 +342,7 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti typeButton.setLocation(2, 2); typeButton.setSize(25, 25); + iconPanel.setVisible(true); typeButton.setIcon(new ImageIcon(bufferedImage)); if (toolTipText != null) { diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/utils/ImageManager.java b/Mage.Client/src/main/java/org/mage/plugins/card/utils/ImageManager.java index 3d79777b22b..a7254e7771b 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/utils/ImageManager.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/utils/ImageManager.java @@ -30,5 +30,15 @@ public interface ImageManager { Image getDlgNextButtonImage(); Image getDlgActiveNextButtonImage(); + Image getSwitchHandsButtonImage(); + Image getStopWatchButtonImage(); + Image getConcedeButtonImage(); + Image getCancelSkipButtonImage(); + Image getSkipNextTurnButtonImage(); + Image getSkipEndTurnButtonImage(); + Image getSkipMainButtonImage(); + Image getSkipYourNextTurnButtonImage(); + + Image getPhaseImage(String phase); } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/utils/impl/ImageManagerImpl.java b/Mage.Client/src/main/java/org/mage/plugins/card/utils/impl/ImageManagerImpl.java index bca793d9187..3d30f575da9 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/utils/impl/ImageManagerImpl.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/utils/impl/ImageManagerImpl.java @@ -237,9 +237,73 @@ public class ImageManagerImpl implements ImageManager { return imageDlgActiveNextButton; } + @Override + public Image getConcedeButtonImage() { + if (imageConcedeButton == null) { + imageConcedeButton = getBufferedImageFromResource("/buttons/concede.png"); + } + return imageConcedeButton; + } + + @Override + public Image getSwitchHandsButtonImage() { + if (imageSwitchHandsButton == null) { + imageSwitchHandsButton = getBufferedImageFromResource("/buttons/switch_hands.png"); + } + return imageSwitchHandsButton; + } + + @Override + public Image getStopWatchButtonImage() { + if (imageStopWatchingButton == null) { + imageStopWatchingButton = getBufferedImageFromResource("/buttons/stop_watching.png"); + } + return imageStopWatchingButton; + } + + @Override + public Image getCancelSkipButtonImage() { + if (imageCancelSkipButton == null) { + imageCancelSkipButton = getBufferedImageFromResource("/buttons/cancel_skip.png"); + } + return imageCancelSkipButton; + } + + @Override + public Image getSkipNextTurnButtonImage() { + if (imageSkipNextTurnButton == null) { + imageSkipNextTurnButton = getBufferedImageFromResource("/buttons/skip_turn.png"); + } + return imageSkipNextTurnButton; + } + + @Override + public Image getSkipEndTurnButtonImage() { + if (imageSkipToEndTurnButton == null) { + imageSkipToEndTurnButton = getBufferedImageFromResource("/buttons/skip_to_end.png"); + } + return imageSkipToEndTurnButton; + } + + @Override + public Image getSkipMainButtonImage() { + if (imageSkipToMainButton == null) { + imageSkipToMainButton = getBufferedImageFromResource("/buttons/skip_to_main.png"); + } + return imageSkipToMainButton; + } + + @Override + public Image getSkipYourNextTurnButtonImage() { + if (imageSkipYourNextTurnButton == null) { + imageSkipYourNextTurnButton = getBufferedImageFromResource("/buttons/skip_all.png"); + } + return imageSkipYourNextTurnButton; + } + protected static Image getImageFromResourceTransparent(String path, Color mask, Rectangle rec) { - BufferedImage image = null; - Image imageCardTransparent = null; + BufferedImage image; + Image imageCardTransparent; Image resized = null; URL imageURL = ImageManager.class.getResource(path); @@ -317,5 +381,14 @@ public class ImageManagerImpl implements ImageManager { private static BufferedImage imageDlgNextButton; private static BufferedImage imageDlgActiveNextButton; + private static BufferedImage imageCancelSkipButton; + private static BufferedImage imageSwitchHandsButton; + private static BufferedImage imageStopWatchingButton; + private static BufferedImage imageConcedeButton; + private static BufferedImage imageSkipNextTurnButton; + private static BufferedImage imageSkipToEndTurnButton; + private static BufferedImage imageSkipToMainButton; + private static BufferedImage imageSkipYourNextTurnButton; + private static Map phasesImages; } diff --git a/Mage.Client/src/main/resources/buttons/cancel_skip.png b/Mage.Client/src/main/resources/buttons/cancel_skip.png new file mode 100644 index 0000000000000000000000000000000000000000..c418d5d63e73ddf641fdb775b70b5a50ffa2c92e GIT binary patch literal 2536 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 Vtoy7V##R6T002ovPDHLkV1hTbftCOO literal 0 HcmV?d00001 diff --git a/Mage.Client/src/main/resources/buttons/skip_to_end.png b/Mage.Client/src/main/resources/buttons/skip_to_end.png new file mode 100644 index 0000000000000000000000000000000000000000..7325a90b1f1a6f223a76667e2f8edd8f24e93a4b GIT binary patch literal 2399 zcmV-l3840gP)3DP$Rbez%|n#Mg+&n5&_Dnof-DjQ*C2I4MUSzVk_4j`(^zX;?NNI>_s*N)y~neC zw&Wa=cFy_E-2dMHzw>>UnSbsZ80P=SYaJ>QsIm|ZFsMrL>-R&IQBl`mOjk{2%tJn4 zEJE{HR5BJ}wF3jlh2@0YkRx*C3epe4^~UQn=0O`7%kbNbWd!KF6$`Thav(6F3?h=M z1_XjwF0)tUg06iWAV=bgoRRx~Q3!Qr_!4)4uE?3?{uOCJEwA~UYq7UdFk8*PGxiCfJ7*81SGGgLmF}MfGODf;XXH*A zPz!2OVt>F1+Kg#HFk=<*l9`+YDjpdSTht20r#pXEh&|Lw+))E*K~1Rb-xNWUG4`3k z-a1c3ZzqGuD+?xve+GMNZ^|Hc-%*&mEL0&dCO`jG2uj?mFvqr{Mx}FX6d$5Bc$SY% ziTI2(pcd3b+EC*w4iO{L9mZ}RS9B(C0b~DzgpllWkXqFt1OM<8VCO3Y#^mR}3X^8~ zD$Eg_T&Q#okHsOh2G8;_rNZh&aQ0pTD>mo!$$^+KgDb!|XAfG-V@t^; zShKAVX8MOvUU$DB$`!erFqG{1q1*eccXXex@D89H z{#*_XEgjI()hFB1ZX(4@ZN|~q#KIO-MIy3szI=Y*#%+)WHViP@=vajFc+&s3R;cQN{we<}kruaHIc?ZxK=ks}yD{@Be(ppd( zYDBG)4NUsPuJ|f3d+Jisjm0gXKmguQr9G3K>C-kAfbY6L(@0^VGnbHWxQzoCnc0#(ZEt1lnZM4U zp=Pws#A+;!t?Z|Px~7gWPZ`dr5w((L$!3Vpf|=Tg`32q^OCX`FOKC(NyaEpH?-9`E z{c$CoY-<`1HjZv!J835PtQRX>KbQ6M>!qwX=aG$P{yNU{0%_g)%qAG?>`m~I zDYI_XrM;aikkTrnF^pj+&jxZz5;gE-&2Ul z+-3+$t)R1_xVZMaSFY_ZY_INOJG{0&z-uGq{o5*T^~r%6QLA(T=n-HHU1EGA4?oXp z?g43tt2@DBw1dnuieqt2CuFtsK(M$J%xvCb-`$sK{8J)4<8#HYP4?Q6`|JDo-(49E z@_JAsYL$KjxJ^)h!s4lmQhM^v{}H6&7nVfHOh=7{Z6z0Au#pMq=nsZ~ovX zS{OhvPk*i-aCDhT*F$@{?{XO(s0}ruR_R7aXoVSV>)9@g;%^+e*aKC+dqzkssD?H1 zX|Vm1de~og0UV~fQF14DFKFz34#Ui?X#7d*9UAk*&@T;)^M0Hc5cLt)EU{-C^Wgo6 z57Q6I#CDZ62{FuvsJQ+>h?igE?A)dfu2nX(5_F&@)P@=rwZbZr9|$7{nY+e^?>_pM zx^JFC{kJc`e?trMV#pRvrH`O^Jbv{(td=s-8kX8 z?}u`nUFZ0b2GoL@P@Ckhuczp{0B#7zjM^Z3yLXlriOXAGG~ENJ>3jmtv**g(cFwcB zp#JNJ@Z}?b_X0x&e__i-g88U71RvUm&$dJ5wJxrQ*VSV;Qtk)RL|1n>_24PxQ3m^u z_jaE0vHUMuWv)Bg!3m1nx&Sqx7Sx2=NTY(E!@VCw7{-**Fm`tG4k}5jYh+X1+cPu?X}7P zIUzTmCvryar~$P|-uv3heiy_Kh$9$P?Kcg~Cam=f+tIx1XzR1m_CLUh?iX}{llK9d z9}Em27vzN8kRx(M&d41#kQOCBipqW#XP6-@EE%=IP6npqmwPUYDq5SE-I{QqrfWyZ zsfRnu&pjFlKrYA$xgkg7ikyi%r$PNc|HlYdIV0+wRYW$7n!XczOSv%`Lp@k{4G?$` zC*+14xjx@W!o8pVL&Q~4mxTd~p^{c|AYrJ4o34bb>QC`M!vEQSj{ahge**GLdHvqf R(Q5zz002ovPDHLkV1g#LncV;Y literal 0 HcmV?d00001 diff --git a/Mage.Client/src/main/resources/buttons/skip_to_main.png b/Mage.Client/src/main/resources/buttons/skip_to_main.png new file mode 100644 index 0000000000000000000000000000000000000000..8aec79da18196423ce4617595a820d64aaed1644 GIT binary patch literal 2478 zcmV;f2~qZmP)0;c>Mo=k#7i!BKYH{AZU@FU_q&y@ria;UHnjWDPv@O$l-3NuQq##kl;)8EP-VurO z-QU2uytxguwl`z_LdT3+!!*I<{@N;aF{GcH-6J+~NkHC~02U3Y&HC~Ue$oRK?e zKrN_g82bYTXfl?uD;ZnqbH+UvMg>TMc|%#1WKB35FDJRg0Z>f0HB?Z847tdZ9+dwJ4dqR*MF)s-f;R4XHF04 z5z>HKP!nlGjsN2kF(PeqcJt`ca?b(Ns0u>To(|aFbe-Vp6AbpwZlGge0&F~$*hV`a zGZZq)PEubUYj!ojI~hevwwLvPzxD$7FG_;2`1B#?Lhif{)P&kdBlp-Gu=I5pvjx8v zJ4*Y;#vKADNj*VUeFgH4URT1D+2KSKOGSG`(nc^evm~GC7<-6LFB;Hy-QH8=x3F`f zGI-fKm>#+mG_-ZWz?AEYaVs`egSqwFLQ<^9x z+v4*Mkj=n!41^?PftIczsE92e9UuTgLN1!bOu@Gb2E z=5OtQqX|mf)a0j=L zSo+nl?H`)~`fT#Bj&agGXCYvj490r}QZo7Z`2HA+aX1dP7iU(`Tv&IW8BUy$yP_7< zh8j_;d_xqLzae8BBDM0)eiHxNYcLcXy?#j(VaeNkVsbcPuCpMv-~t%iOrZAMH5E#I zqjFD>eYB$+%#jodOMIT}0O%NTD*)rP49uuLJ8mmX3riN}bJcFILim8d0m_Ex>Jpx>FWSU%08a?32Gjf4IyDq|If#yB|#Q z3F0;(BQw_b9pu!UXP@_~Fm9?3?Em!Pj}Gt9B{aXfrZ$+2wjp=~EP%|4(^NN>L#(Dw zaWS$2B`v5CwJL6c++$G9Y_fy5q^qFiHdI}Cq=eCSV`;EyvqK?udnLqW7C?6Saj3cS z0Bpy(kWWijAEpOILfs!9L+*h#aQ2)han z{K8{sKF@#%C~mnysJZ+=@E^SP7~VhBK?(3=`6%i@ZKx5oDn14o`Jup0*Lu!2>F(y| zhp+z&6p^;;Ac)m9gvT4!7pG*wv7V>!*7!+e)7H}m->@jCzVH=jXlb+1fnTkZ3I6P| zMp%-XO?5+4a|nq}OmaJ+rL)Q zf!a_bYE?W42}fZ@(|(Tk!p!cP%e~O_r>9CN{IC;JHWh<+aQKUtmbz20v;GX#U8nm& z>)k#`FRB(qx_bG7wZk}Shb@&r?ArIJ9xctJSd78;p-W#$Y8>n+JWBq8V5ev0lbKrZ!9P!Y*#|9OJ%h%Z ze+LnJk5i_r8{zD|??Ff3fZDkg^-%O-8~0u?!w=5)K8I}wKccq1lQR^vzBOA*AazqA z>}|OKaWd|-7#foRr|$d%bo97!j^FB~zC5ICeEj+xf}$M}viKe9gJpjoB3SO;YFNEx2gnLa;N1Pk!Z^c0 z`RR6=2g||y8%iocR#-`#kvnQYEvSjKz2t+)i%(+sj1(JrxcWtxWS6%*YGQ8#KAY`- z1GxNefX|-3IwaX#0RiBXUK~$Q?D1mSKJr zRsJl_Fh(qF7*%~Y154MXfiY_<6W-m^nYHiuoh@}Af0y6T@o*#nxgaOxh8&SAawhJa z2JsL7V}#3`F`b=9i5wVJT{m_~`7vrH0W5+>2m*)`azl>XIp0{${WbkV#AQ*Ng#il_ s`B8Et!9>nYTh3MG&7Y%huA#600-#o79^hIqBlK=n! literal 0 HcmV?d00001 diff --git a/Mage.Client/src/main/resources/buttons/skip_turn.png b/Mage.Client/src/main/resources/buttons/skip_turn.png new file mode 100644 index 0000000000000000000000000000000000000000..4c35eda03e420e7f94a4224b3e469c7c61bfe5a2 GIT binary patch literal 2321 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 literal 0 HcmV?d00001