package net.sf.colossus.gui;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Point;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.WindowConstants;
import net.sf.colossus.client.LegionClientSide;
import net.sf.colossus.common.IOptions;
import net.sf.colossus.common.Options;
import net.sf.colossus.guiutil.KDialog;
import net.sf.colossus.variant.MasterHex;
import net.sf.colossus.variant.Variant;
@SuppressWarnings("serial")
class AutoInspector extends KDialog
{
private final IOptions options;
private final Variant variant;
private final ClientGUI gui;
private final JScrollPane scrollPane;
private final JFrame parentFrame;
private boolean dubiousAsBlanks;
public AutoInspector(JFrame frame, IOptions options,
boolean dubiousAsBlanks, Variant variant, ClientGUI clientGui)
{
super(frame, "Inspector", false);
assertEDT(); // maybe better in KDialog
this.parentFrame = frame;
this.variant = variant;
this.gui = clientGui;
this.options = options;
this.dubiousAsBlanks = dubiousAsBlanks;
setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent e)
{
AutoInspector.this.options.setOption(
Options.showAutoInspector, false);
}
});
Point location = getUpperRightCorner(550);
useSaveWindow(options, "AutoInspector", location);
scrollPane = new JScrollPane();
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.add(scrollPane, BorderLayout.CENTER);
setVisible(true);
}
@Override
public Dimension getPreferredSize()
{
// this is just a first go to have some size at all
// TODO do a decent estimate of a legion's size
return new Dimension(550, 110);
}
public void showLegion(LegionClientSide legion, boolean isMyLegion)
{
assertEDT();
scrollPane.getViewport().removeAll();
JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
boolean showMarker = gui.getOptions().getOption(Options.showMarker);
LegionInfoPanel liPanel = new LegionInfoPanel(legion, 4 * Scale.get(),
5, 2, false, gui.getEffectiveViewMode(), isMyLegion,
dubiousAsBlanks, false, showMarker);
panel.add(liPanel);
String valueText = liPanel.getValueText();
String ownerText = isMyLegion ? "" : " ["
+ legion.getPlayer().getName() + "]";
setTitle("Inspector: Legion " + legion.getMarkerId() + valueText
+ ownerText);
liPanel = null;
scrollPane.getViewport().add(panel);
repaint();
}
public void showHexRecruitTree(GUIMasterHex hex)
{
assertEDT();
setTitle("Inspector");
scrollPane.getViewport().removeAll();
MasterHex hexModel = hex.getHexModel();
scrollPane.getViewport().add(
new HexRecruitTreePanel(BoxLayout.X_AXIS, hexModel.getTerrain(),
hexModel, this.parentFrame, false, variant, gui));
repaint();
}
// public so that client can update it when option is changed.
public void setDubiousAsBlanks(boolean newVal)
{
this.dubiousAsBlanks = newVal;
repaint();
}
}