diff --git a/src/net/sf/freecol/client/control/MapEditorController.java b/src/net/sf/freecol/client/control/MapEditorController.java
index 7a2c68576..0970fa208 100644
--- a/src/net/sf/freecol/client/control/MapEditorController.java
+++ b/src/net/sf/freecol/client/control/MapEditorController.java
@@ -25,6 +25,7 @@ import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
+import java.util.HashMap;
import java.util.List;
import java.util.logging.Logger;
@@ -80,6 +81,7 @@ public final class MapEditorController extends FreeColClientHolder {
private Area currentArea = null;
private boolean displayAreas = false;
+ private java.util.Map visibleAreas = new HashMap<>();
/**
@@ -233,6 +235,15 @@ public final class MapEditorController extends FreeColClientHolder {
return currentArea;
}
+ public boolean isAreaVisible(Area area) {
+ final Boolean b = visibleAreas.get(area);
+ return (b == null || b);
+ }
+
+ public void setAreaVisible(Area area, boolean visible) {
+ visibleAreas.put(area, visible);
+ }
+
/**
* Checks if areas should be displayed while editing.
* @return {@code true} if the areas should be displayed.
diff --git a/src/net/sf/freecol/client/gui/mapviewer/MapViewer.java b/src/net/sf/freecol/client/gui/mapviewer/MapViewer.java
index 57ade9f2d..44c1cd208 100644
--- a/src/net/sf/freecol/client/gui/mapviewer/MapViewer.java
+++ b/src/net/sf/freecol/client/gui/mapviewer/MapViewer.java
@@ -58,6 +58,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import net.sf.freecol.client.ClientOptions;
import net.sf.freecol.client.FreeColClient;
import net.sf.freecol.client.control.FreeColClientHolder;
+import net.sf.freecol.client.control.MapEditorController;
import net.sf.freecol.client.gui.Canvas;
import net.sf.freecol.client.gui.GUI;
import net.sf.freecol.client.gui.GUI.ViewMode;
@@ -764,7 +765,8 @@ public final class MapViewer extends FreeColClientHolder {
if (!getFreeColClient().isMapEditor()) {
return;
}
- if (!getFreeColClient().getMapEditorController().isDisplayAreas()) {
+ final MapEditorController mec = getFreeColClient().getMapEditorController();
+ if (!mec.isDisplayAreas()) {
return;
}
@@ -782,6 +784,7 @@ public final class MapViewer extends FreeColClientHolder {
// This can easily be optimized if slow on some systems.
final List areas = getGame().getAreas().stream()
.filter(a -> a.containsTile(tile))
+ .filter(a -> mec.isAreaVisible(a))
.collect(Collectors.toList());
if (areas.isEmpty()) {
return;
diff --git a/src/net/sf/freecol/client/gui/panel/mapeditor/ChooseAreaModificationPanel.java b/src/net/sf/freecol/client/gui/panel/mapeditor/ChooseAreaModificationPanel.java
index 4f4f7264b..1e54a5b3f 100644
--- a/src/net/sf/freecol/client/gui/panel/mapeditor/ChooseAreaModificationPanel.java
+++ b/src/net/sf/freecol/client/gui/panel/mapeditor/ChooseAreaModificationPanel.java
@@ -19,16 +19,19 @@
package net.sf.freecol.client.gui.panel.mapeditor;
+import java.awt.BorderLayout;
import java.awt.Dimension;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
+import javax.swing.JCheckBox;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import net.miginfocom.swing.MigLayout;
import net.sf.freecol.client.FreeColClient;
+import net.sf.freecol.client.control.MapEditorController;
import net.sf.freecol.client.gui.DialogHandler;
import net.sf.freecol.client.gui.panel.FreeColPanel;
import net.sf.freecol.client.gui.panel.WrapLayout;
@@ -58,23 +61,38 @@ public final class ChooseAreaModificationPanel extends FreeColPanel {
final JPanel areasPanel = new JPanel(new WrapLayout()
.withHorizontalAlignment(HorizontalAlignment.CENTER)
+ .withAllComponentsWithTheSameSize(true)
) {
@Override
public Dimension getMinimumSize() {
return new Dimension(1, 1);
}
};
- areasPanel.setOpaque(false);
+ areasPanel.setOpaque(false);
+ final MapEditorController ctlr = getFreeColClient().getMapEditorController();
final ButtonGroup bg = new ButtonGroup();
for (Area a : freeColClient.getGame().getAreas()) {
+ final JPanel areaPanel = new JPanel(new BorderLayout());
+ areaPanel.setOpaque(false);
+
final String title = (a.getNameKey() != null) ? Messages.message(a.getNameKey()) : a.getName();
final JToggleButton areaButton = new JToggleButton(title);
areaButton.addActionListener((e) -> {
dialogHandler.handle(a);
});
bg.add(areaButton);
- areasPanel.add(areaButton);
+ areaPanel.add(areaButton, BorderLayout.NORTH);
+ final JCheckBox visible = new JCheckBox();
+ visible.setSelected(ctlr.isAreaVisible(a));
+ visible.setHorizontalAlignment(JCheckBox.CENTER);
+ visible.addActionListener((e) -> {
+ ctlr.setAreaVisible(a, visible.isSelected());
+ getGUI().refresh();
+ });
+
+ areaPanel.add(visible, BorderLayout.SOUTH);
+ areasPanel.add(areaPanel);
}
add(areasPanel, "grow, shrink");