Skip to content

Commit 8243743

Browse files
committed
The modal confirm dialog is now an internal frame.
1 parent 1f121b6 commit 8243743

File tree

6 files changed

+64
-15
lines changed

6 files changed

+64
-15
lines changed

Diff for: src/net/sf/freecol/client/gui/Canvas.java

+36-4
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,11 @@
5656
import javax.swing.Timer;
5757
import javax.swing.UIManager;
5858
import javax.swing.border.EmptyBorder;
59-
import javax.swing.event.InternalFrameAdapter;
60-
import javax.swing.event.InternalFrameEvent;
6159
import javax.swing.plaf.basic.BasicInternalFrameUI;
6260

6361
import net.sf.freecol.client.ClientOptions;
6462
import net.sf.freecol.client.FreeColClient;
6563
import net.sf.freecol.client.gui.SwingGUI.PopupPosition;
66-
import net.sf.freecol.client.gui.action.FreeColAction;
6764
import net.sf.freecol.client.gui.dialog.FreeColDialog;
6865
import net.sf.freecol.client.gui.mapviewer.CanvasMapViewer;
6966
import net.sf.freecol.client.gui.mapviewer.MapViewer;
@@ -84,7 +81,6 @@
8481
import net.sf.freecol.common.i18n.Messages;
8582
import net.sf.freecol.common.model.Specification;
8683
import net.sf.freecol.common.option.IntegerOption;
87-
import net.sf.freecol.common.option.Option;
8884
import net.sf.freecol.common.option.OptionGroup;
8985
import net.sf.freecol.common.resources.Video;
9086

@@ -164,6 +160,8 @@ public static class ToolBoxFrame extends JInternalFrame {}
164160
* A timer triggering repaints in order to display animations on the {@link CanvasMapViewer}.
165161
*/
166162
private Timer animationTimer;
163+
164+
private int displayedModalDialogs = 0;
167165

168166

169167
/**
@@ -1129,6 +1127,22 @@ public void dialogAdd(FreeColDialog<?> fcd) {
11291127
}
11301128
dialogs.add(fcd);
11311129
}
1130+
1131+
/**
1132+
* Should be called before displaying a modal. Remember to call {@link #modalDialogRemove}
1133+
* afterwards in a finally-block.
1134+
*/
1135+
public void modalDialogAdd() {
1136+
logger.fine("Displaying modal dialog.");
1137+
displayedModalDialogs++;
1138+
if (displayedModalDialogs == 1) {
1139+
freeColClient.getActionManager().update();
1140+
repaint();
1141+
}
1142+
if (displayedModalDialogs > 1) {
1143+
logger.warning("Displaying more than one modal dialog at the same time.");
1144+
}
1145+
}
11321146

11331147
/**
11341148
* Remove a dialog from the current dialog list.
@@ -1142,6 +1156,24 @@ public void dialogRemove(FreeColDialog<?> fcd) {
11421156
}
11431157
if (nothingShowing()) updateMenuBar();
11441158
}
1159+
1160+
1161+
/**
1162+
* Should be called after a modal dialog has been removed.
1163+
* @see #modalDialogAdd
1164+
*/
1165+
public void modalDialogRemove() {
1166+
logger.fine("Modal dialog dismissed.");
1167+
displayedModalDialogs--;
1168+
if (displayedModalDialogs == 0) {
1169+
freeColClient.getActionManager().update();
1170+
repaint();
1171+
}
1172+
}
1173+
1174+
public int getDisplayedModalDialogs() {
1175+
return displayedModalDialogs;
1176+
}
11451177

11461178
/**
11471179
* Get a currentlydisplayed FreeColDialog of a given type.

Diff for: src/net/sf/freecol/client/gui/DialogHandler.java

+4
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@
2626
*/
2727
public interface DialogHandler<T> {
2828

29+
/**
30+
* This method gets called when the response is ready.
31+
* @param response The response, or {@code null} if the user cancelled.
32+
*/
2933
void handle(T response);
3034

3135
};

Diff for: src/net/sf/freecol/client/gui/GUI.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1795,13 +1795,13 @@ public void displayStartChat(String sender, String message,
17951795

17961796

17971797
/**
1798-
* Checks if a client options dialog is present.
1798+
* Checks if a dialog is showing.
17991799
*
18001800
* Used by: FreeColAction.shouldBeEnabled
18011801
*
1802-
* @return True if the client options are showing.
1802+
* @return True if at least one dialog is showing.
18031803
*/
1804-
public boolean isClientOptionsDialogShowing() {
1804+
public boolean isDialogShowing() {
18051805
return false;
18061806
}
18071807

Diff for: src/net/sf/freecol/client/gui/SwingGUI.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1747,8 +1747,8 @@ public void displayStartChat(String sender, String message,
17471747
* {@inheritDoc}
17481748
*/
17491749
@Override
1750-
public boolean isClientOptionsDialogShowing() {
1751-
return this.canvas.getExistingFreeColDialog(ClientOptionsDialog.class) != null;
1750+
public boolean isDialogShowing() {
1751+
return this.canvas.getDisplayedModalDialogs() > 0 || this.canvas.getExistingFreeColDialog(ClientOptionsDialog.class) != null;
17521752
}
17531753

17541754
/**

Diff for: src/net/sf/freecol/client/gui/Widgets.java

+18-5
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.util.logging.Logger;
2828

2929
import javax.swing.ImageIcon;
30+
import javax.swing.JOptionPane;
3031
import javax.swing.SwingUtilities;
3132
import javax.swing.filechooser.FileFilter;
3233

@@ -43,7 +44,6 @@
4344
import net.sf.freecol.client.gui.dialog.EndTurnDialog;
4445
import net.sf.freecol.client.gui.dialog.FirstContactDialog;
4546
import net.sf.freecol.client.gui.dialog.FreeColChoiceDialog;
46-
import net.sf.freecol.client.gui.dialog.FreeColConfirmDialog;
4747
import net.sf.freecol.client.gui.dialog.FreeColDialog;
4848
import net.sf.freecol.client.gui.dialog.FreeColStringInputDialog;
4949
import net.sf.freecol.client.gui.dialog.GameOptionsDialog;
@@ -231,10 +231,23 @@ private FreeColFrame getFrame() {
231231
*/
232232
public boolean confirm(StringTemplate tmpl, ImageIcon icon,
233233
String okKey, String cancelKey, PopupPosition pos) {
234-
FreeColConfirmDialog dialog
235-
= new FreeColConfirmDialog(this.freeColClient, getFrame(), true,
236-
tmpl, icon, okKey, cancelKey);
237-
return this.canvas.showFreeColDialog(dialog, pos);
234+
try {
235+
this.canvas.modalDialogAdd();
236+
final String ok = Messages.message(okKey);
237+
final String cancel = Messages.message(cancelKey);
238+
final int result = JOptionPane.showInternalOptionDialog(canvas,
239+
Messages.message(tmpl),
240+
null,
241+
JOptionPane.DEFAULT_OPTION,
242+
JOptionPane.PLAIN_MESSAGE,
243+
icon,
244+
new Object[] { ok, cancel },
245+
cancel);
246+
247+
return (result == 0);
248+
} finally {
249+
this.canvas.modalDialogRemove();
250+
}
238251
}
239252

240253
/**

Diff for: src/net/sf/freecol/client/gui/action/FreeColAction.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ public MenuKeyListener getMenuKeyListener() {
362362
* is not visible.
363363
*/
364364
protected boolean shouldBeEnabled() {
365-
return !getGUI().isClientOptionsDialogShowing();
365+
return !getGUI().isDialogShowing();
366366
}
367367

368368
/**

0 commit comments

Comments
 (0)