diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form index 4570ed36725..04519e54107 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form @@ -85,7 +85,7 @@ - + @@ -203,13 +203,16 @@ - + - - - - - + + + + + + + + @@ -227,6 +230,8 @@ + + @@ -277,6 +282,17 @@ + + + + + + + + + + + @@ -474,7 +490,7 @@ - + @@ -1117,7 +1133,7 @@ - + @@ -1568,7 +1584,7 @@ - + diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java index acf8934ce47..32276f683bf 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java @@ -84,6 +84,8 @@ public class PreferencesDialog extends javax.swing.JDialog { public static final String KEY_SHOW_PLAYER_NAMES_PERMANENTLY = "showPlayerNamesPermanently"; public static final String KEY_SHOW_ABILITY_PICKER_FORCED = "showAbilityPicker"; public static final String KEY_GAME_ALLOW_REQUEST_SHOW_HAND_CARDS = "gameAllowRequestShowHandCards"; + public static final String KEY_GAME_SHOW_STORM_COUNTER = "gameShowStormCounter"; + public static final String KEY_GAME_LOG_AUTO_SAVE = "gameLogAutoSave"; public static final String KEY_CARD_IMAGES_USE_DEFAULT = "cardImagesUseDefault"; @@ -320,6 +322,7 @@ public class PreferencesDialog extends javax.swing.JDialog { showPlayerNamesPermanently = new javax.swing.JCheckBox(); showAbilityPickerForced = new javax.swing.JCheckBox(); cbAllowRequestToShowHandCards = new javax.swing.JCheckBox(); + cbShowStormCounter = new javax.swing.JCheckBox(); main_gamelog = new javax.swing.JPanel(); cbGameLogAutoSave = new javax.swing.JCheckBox(); tabPhases = new javax.swing.JPanel(); @@ -524,6 +527,16 @@ public class PreferencesDialog extends javax.swing.JDialog { } }); + cbShowStormCounter.setSelected(true); + cbShowStormCounter.setText("Show the number of spell casts during the current turn"); + cbShowStormCounter.setToolTipText("Adds a little box left to the short keys line with the number
\nof spells already cast during the current turn (storm counter)."); + cbShowStormCounter.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + cbShowStormCounter.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cbShowStormCounterActionPerformed(evt); + } + }); + javax.swing.GroupLayout main_gameLayout = new javax.swing.GroupLayout(main_game); main_game.setLayout(main_gameLayout); main_gameLayout.setHorizontalGroup( @@ -533,12 +546,14 @@ public class PreferencesDialog extends javax.swing.JDialog { .addGroup(main_gameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(main_gameLayout.createSequentialGroup() .addComponent(cbAllowRequestToShowHandCards, javax.swing.GroupLayout.PREFERRED_SIZE, 546, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap(14, Short.MAX_VALUE)) .addGroup(main_gameLayout.createSequentialGroup() - .addGroup(main_gameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) - .addComponent(showPlayerNamesPermanently, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(nonLandPermanentsInOnePile, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(showAbilityPickerForced, javax.swing.GroupLayout.Alignment.LEADING)) + .addGroup(main_gameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(main_gameLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(showPlayerNamesPermanently, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(nonLandPermanentsInOnePile, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(showAbilityPickerForced, javax.swing.GroupLayout.Alignment.LEADING)) + .addComponent(cbShowStormCounter, javax.swing.GroupLayout.PREFERRED_SIZE, 546, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(0, 0, Short.MAX_VALUE)))) ); main_gameLayout.setVerticalGroup( @@ -550,7 +565,9 @@ public class PreferencesDialog extends javax.swing.JDialog { .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(showAbilityPickerForced) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(cbAllowRequestToShowHandCards)) + .addComponent(cbAllowRequestToShowHandCards) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(cbShowStormCounter)) ); nonLandPermanentsInOnePile.getAccessibleContext().setAccessibleName("nonLandPermanentsInOnePile"); @@ -601,7 +618,7 @@ public class PreferencesDialog extends javax.swing.JDialog { .addComponent(main_game, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(main_gamelog, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(120, Short.MAX_VALUE)) + .addContainerGap(63, Short.MAX_VALUE)) ); main_card.getAccessibleContext().setAccessibleName("Game panel"); @@ -784,7 +801,7 @@ public class PreferencesDialog extends javax.swing.JDialog { .addComponent(checkBoxEndTurnOthers)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(phases_stopSettings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(31, Short.MAX_VALUE)) + .addContainerGap(13, Short.MAX_VALUE)) ); tabsPanel.addTab("Phases", tabPhases); @@ -1358,7 +1375,7 @@ public class PreferencesDialog extends javax.swing.JDialog { ); tabAvatarsLayout.setVerticalGroup( tabAvatarsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 419, Short.MAX_VALUE) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 359, Short.MAX_VALUE) ); tabsPanel.addTab("Avatars", tabAvatars); @@ -1540,7 +1557,7 @@ public class PreferencesDialog extends javax.swing.JDialog { .addComponent(cbProxyType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18) .addComponent(pnlProxySettings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(92, Short.MAX_VALUE)) + .addContainerGap(54, Short.MAX_VALUE)) ); pnlProxySettings.getAccessibleContext().setAccessibleDescription(""); @@ -1600,6 +1617,7 @@ public class PreferencesDialog extends javax.swing.JDialog { save(prefs, dialog.showPlayerNamesPermanently, KEY_SHOW_PLAYER_NAMES_PERMANENTLY, "true", "false", UPDATE_CACHE_POLICY); save(prefs, dialog.showAbilityPickerForced, KEY_SHOW_ABILITY_PICKER_FORCED, "true", "false", UPDATE_CACHE_POLICY); save(prefs, dialog.cbAllowRequestToShowHandCards, KEY_GAME_ALLOW_REQUEST_SHOW_HAND_CARDS, "true", "false", UPDATE_CACHE_POLICY); + save(prefs, dialog.cbShowStormCounter, KEY_GAME_SHOW_STORM_COUNTER, "true", "false", UPDATE_CACHE_POLICY); save(prefs, dialog.cbGameLogAutoSave, KEY_GAME_LOG_AUTO_SAVE, "true", "false", UPDATE_CACHE_POLICY); // Phases @@ -1913,6 +1931,10 @@ public class PreferencesDialog extends javax.swing.JDialog { // TODO add your handling code here: }//GEN-LAST:event_cbAllowRequestToShowHandCardsActionPerformed + private void cbShowStormCounterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbShowStormCounterActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_cbShowStormCounterActionPerformed + private void showProxySettings() { if (cbProxyType.getSelectedItem() == Connection.ProxyType.SOCKS) { this.pnlProxy.setVisible(true); @@ -1988,6 +2010,8 @@ public class PreferencesDialog extends javax.swing.JDialog { load(prefs, dialog.showPlayerNamesPermanently, KEY_SHOW_PLAYER_NAMES_PERMANENTLY, "true"); load(prefs, dialog.showAbilityPickerForced, KEY_SHOW_ABILITY_PICKER_FORCED, "true"); load(prefs, dialog.cbAllowRequestToShowHandCards, KEY_GAME_ALLOW_REQUEST_SHOW_HAND_CARDS, "true"); + load(prefs, dialog.cbShowStormCounter, KEY_GAME_SHOW_STORM_COUNTER, "true"); + load(prefs, dialog.cbGameLogAutoSave, KEY_GAME_LOG_AUTO_SAVE, "true"); load(prefs, dialog.checkBoxUpkeepYou, UPKEEP_YOU, "on","on"); @@ -2346,6 +2370,7 @@ public class PreferencesDialog extends javax.swing.JDialog { private javax.swing.JComboBox cbPreferedImageLanguage; private javax.swing.JComboBox cbProxyType; private javax.swing.JCheckBox cbSaveToZipFiles; + private javax.swing.JCheckBox cbShowStormCounter; private javax.swing.JCheckBox cbStopAttack; private javax.swing.JCheckBox cbStopBlock; private javax.swing.JCheckBox cbStopOnAllEnd; 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 88480f2d30e..2799b50f36f 100644 --- a/Mage.Client/src/main/java/mage/client/game/GamePanel.java +++ b/Mage.Client/src/main/java/mage/client/game/GamePanel.java @@ -27,12 +27,11 @@ */ package mage.client.game; -import com.sun.java.swing.plaf.windows.WindowsBorders; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; -import java.awt.FlowLayout; +import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Point; @@ -59,7 +58,7 @@ import java.util.UUID; import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; import javax.swing.AbstractAction; -import javax.swing.Box; +import javax.swing.BorderFactory; import javax.swing.GroupLayout; import javax.swing.GroupLayout.Alignment; import javax.swing.ImageIcon; @@ -69,8 +68,8 @@ import javax.swing.JLayeredPane; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.KeyStroke; -import javax.swing.SwingConstants; import javax.swing.SwingWorker; +import javax.swing.border.Border; import javax.swing.border.EmptyBorder; import javax.swing.border.LineBorder; import javax.swing.plaf.basic.BasicSplitPaneDivider; @@ -607,12 +606,11 @@ public final class GamePanel extends javax.swing.JPanel { else { this.txtStep.setText(""); } - if (game.getSpellsCastCurrentTurn() > 0) { - this.phasesBottomPanel.setVisible(true); - this.txtPhasesBottomInfo.setText(Integer.toString(game.getSpellsCastCurrentTurn())); + if (game.getSpellsCastCurrentTurn() > 0 && PreferencesDialog.getCachedValue(PreferencesDialog.KEY_GAME_SHOW_STORM_COUNTER, "true").equals("true")) { + this.txtSpellsCast.setVisible(true); + this.txtSpellsCast.setText(" " + Integer.toString(game.getSpellsCastCurrentTurn()) + " "); } else { - this.phasesBottomPanel.setVisible(false); - this.txtPhasesBottomInfo.setText(""); + this.txtSpellsCast.setVisible(false); } this.txtActivePlayer.setText(game.getActivePlayerName()); @@ -994,9 +992,16 @@ public final class GamePanel extends javax.swing.JPanel { lblPriority = new javax.swing.JLabel(); feedbackPanel = new mage.client.game.FeedbackPanel(); - txtPhasesBottomInfo = new javax.swing.JLabel(); - txtPhasesBottomInfo.setToolTipText("spells cast during the current turn"); - + txtSpellsCast = new javax.swing.JLabel(); + Font font = new Font("SansSerif", Font.BOLD,12); + txtSpellsCast.setFont(font); + Border paddingBorder = BorderFactory.createEmptyBorder(4,4,4,4); + Border border = BorderFactory.createLineBorder(Color.DARK_GRAY,2); + txtSpellsCast.setBorder(BorderFactory.createCompoundBorder(border,paddingBorder)); + txtSpellsCast.setBackground(Color.LIGHT_GRAY); + txtSpellsCast.setOpaque(true); + txtSpellsCast.setToolTipText("spells cast during the current turn"); + btnCancelSkip = new javax.swing.JButton(); // F3 btnSkipToNextTurn = new javax.swing.JButton(); // F4 btnSkipToEndTurn = new javax.swing.JButton(); // F5 @@ -1388,7 +1393,7 @@ public final class GamePanel extends javax.swing.JPanel { btnPreviousPlayActionPerformed(evt); } }); - + // Replay panel to control replay of games javax.swing.GroupLayout gl_pnlReplay = new javax.swing.GroupLayout(pnlReplay); pnlReplay.setLayout(gl_pnlReplay); @@ -1426,6 +1431,7 @@ public final class GamePanel extends javax.swing.JPanel { .addComponent(btnSkipStack) ) .addGroup(gl_pnlShortCuts.createSequentialGroup() + .addComponent(txtSpellsCast) .addComponent(btnSwitchHands) .addComponent(btnCancelSkip) .addComponent(btnConcede) @@ -1458,6 +1464,7 @@ public final class GamePanel extends javax.swing.JPanel { .addComponent(btnSkipStack) ) .addGroup(gl_pnlShortCuts.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(txtSpellsCast) .addComponent(btnSwitchHands) .addComponent(btnCancelSkip) .addComponent(btnConcede) @@ -1514,14 +1521,8 @@ public final class GamePanel extends javax.swing.JPanel { JPanel empty1 = new JPanel(); empty1.setBackground(new Color(0, 0, 0, 0)); phasesContainer.add(empty1, ratio); - phasesContainer.add(jPhases); + phasesContainer.add(jPhases); - phasesBottomPanel = new JPanel(); - phasesBottomPanel.setBackground(Color.LIGHT_GRAY); - phasesBottomPanel.setBorder(new LineBorder(Color.DARK_GRAY, 2)); - phasesBottomPanel.add(txtPhasesBottomInfo); - phasesContainer.add(phasesBottomPanel); - javax.swing.GroupLayout gl_jPanel3 = new javax.swing.GroupLayout(jPanel3); gl_jPanel3.setHorizontalGroup( gl_jPanel3.createParallelGroup(Alignment.LEADING) @@ -1871,8 +1872,7 @@ public final class GamePanel extends javax.swing.JPanel { private javax.swing.JSplitPane jSplitPane2; private JPanel jPhases; private JPanel phasesContainer; - private JPanel phasesBottomPanel; - private javax.swing.JLabel txtPhasesBottomInfo; + private javax.swing.JLabel txtSpellsCast; private HoverButton currentStep; private Point prevPoint; diff --git a/Mage.Sets/src/mage/sets/urzassaga/Turnabout.java b/Mage.Sets/src/mage/sets/urzassaga/Turnabout.java index 5d17dac7d58..f3c1c5a1809 100644 --- a/Mage.Sets/src/mage/sets/urzassaga/Turnabout.java +++ b/Mage.Sets/src/mage/sets/urzassaga/Turnabout.java @@ -109,6 +109,7 @@ class TurnaboutEffect extends OneShotEffect { UUID target = source.getFirstTarget(); if (controller != null && target != null) { Choice choiceImpl = new ChoiceImpl(); + choiceImpl.setMessage("Choose card type to tap or untap"); choiceImpl.setChoices(choice); while (!controller.choose(Outcome.Neutral, choiceImpl, game)) { if (!controller.isInGame()) { @@ -127,6 +128,7 @@ class TurnaboutEffect extends OneShotEffect { } choiceImpl = new ChoiceImpl(); + choiceImpl.setMessage("Choose to tap or untap"); choiceImpl.setChoices(choice2); while (!controller.choose(Outcome.Neutral, choiceImpl, game)) { if (!controller.isInGame()) {