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()) {