MapWindow.java

/*
 * $RCSfile: MapWindow.java,v $
* $Id: MapWindow.java,v 1.6 1998/11/30 02:21:07 devnull Exp $
* by Lee Wilson, http://www.ad1440.net/~devnull
* Development started on 1998 10 01
* (c) Devnull Software, LLC. (http://www.devnullsoftware.com)
*/

package com.devnullsoftware.javaterrain;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import matthew.awt.StrutLayout;
import com.devnullsoftware.config.*;

/**
  Window to show generated terrain.

  @author Lee Wilson
  @version 1.0
*/

public class MapWindow 
  extends JFrame 
  implements ActionListener 
{
  //-------------------------------------------------------------------
  // Global Constants
  //


  //-------------------------------------------------------------------
  // Instance Variables
  //
  public JTextArea pTextArea;
  public JScrollPane pMapScrollPane;
  private Map pMap;
  private MapCanvas pMapCanvas;


  //-------------------------------------------------------------------
  // Constructors
  //
  MapWindow(Map pMap,
	    int width, int height)  {
    //    super (pMap.getName(), true, true, true, true);
    super (pMap.getName());
    this.pMap = pMap;
    init();
    setBounds (20,20,width,height);
  }

  private void init ()  {
    JMenuBar pWorldMenuBar = new JMenuBar();
    //    setMenuBar(pWorldMenuBar);
    setJMenuBar(pWorldMenuBar);
    JMenu pWorldFileMenu = new JMenu ("File");
    pWorldMenuBar.add(pWorldFileMenu);
    pWorldFileMenu.add(menuItem("Save"));
    pWorldFileMenu.add(menuItem("Save As"));
    pWorldFileMenu.addSeparator();
    pWorldFileMenu.add(menuItem("Close"));
    JMenu pWorldEditMenu = new JMenu ("Edit");
    pWorldMenuBar.add(pWorldEditMenu);
    pWorldEditMenu.add(menuItem("World Parameters"));
    JMenu pWorldViewMenu = new JMenu ("View");
    pWorldMenuBar.add(pWorldViewMenu);
    pWorldViewMenu.add(menuItem("Zoom In"));
    pWorldViewMenu.add(menuItem("Zoom Out"));
    Container pContentPane = getContentPane();
    StrutLayout pLayout = new StrutLayout();
    pContentPane.setLayout (pLayout);
    pMapCanvas = new MapCanvas(pMap, this);
    pMapScrollPane = new JScrollPane(pMapCanvas);
    pMapScrollPane.setSize(10,10);
    pContentPane.add (pMapScrollPane);
    JPanel pMiscPanel = new JPanel (new BorderLayout());
    pMapCanvas.setSmallViewSize(200,200);
    JPanel pSmallMapPanel = new JPanel ();
    pSmallMapPanel.setPreferredSize (new Dimension(200,200));
    pSmallMapPanel.add(pMapCanvas.getSmallView());
    pMiscPanel.add ("North", pSmallMapPanel);
    pTextArea = new JTextArea (10,20);
    pTextArea.setBackground (Color.black);
    pTextArea.setForeground (Color.green);
    JScrollPane pTextScrollPane = new JScrollPane();
    pTextScrollPane.setViewportView(pTextArea);
    pMiscPanel.add("Center", pTextScrollPane);
    pContentPane.add (pMiscPanel,
                      new StrutLayout.StrutConstraint
                      (pMapScrollPane,
                       StrutLayout.TOP_RIGHT,
                       StrutLayout.TOP_LEFT,
                       StrutLayout.EAST));
    JPanel pButtonPanel = new JPanel();
    JButton pZoomInButton = button("+");
    JButton pZoomOutButton = button("-");
    JComboBox pViewModeChooser = comboBox();
    pViewModeChooser.addItem("View Terrain");
    pViewModeChooser.addItem("View Temperature");
    pViewModeChooser.addItem("View Rainfall");
    pViewModeChooser.addItem("View Elevation");
    pButtonPanel.add(pZoomInButton);
    pButtonPanel.add(pZoomOutButton);
    pButtonPanel.add(pViewModeChooser);
    pContentPane.add (pButtonPanel,
		      new StrutLayout.StrutConstraint
		      (pMapScrollPane,
		       StrutLayout.MID_BOTTOM,
		       StrutLayout.MID_TOP,
		       StrutLayout.SOUTH));
    pLayout.setSprings(pMapScrollPane, StrutLayout.SPRING_BOTH);
    StrutLayout.SizeGroup pSizeGroup = pLayout.createSizeGroup();
    pSizeGroup.add (pMapScrollPane, StrutLayout.SIZE_HEIGHT);
    pSizeGroup.add (pMiscPanel, StrutLayout.SIZE_HEIGHT);
    pack();
    mapDetails();
    setVisible (true);
  }


  private JMenuItem menuItem (String sLabel)  {
    JMenuItem pMenuItem = new JMenuItem (sLabel);
    pMenuItem.addActionListener(this);
    return (pMenuItem);
  }

  private JButton button (String id) {
    JButton b = new JButton (id);
    b.addActionListener (this);
    return (b);
  }

  private JComboBox comboBox () {
    JComboBox b = new JComboBox ();
    b.addActionListener (this);
    return (b);
  }

  public void addText(String sText)  {
    pTextArea.append(sText);
  }


  //-------------------------------------------------------------------
  // Accessors & Mutators
  //
  public void mapDetails ()  {
    pTextArea.setText(null);
    addText("World Name           : "+pMap.getName()+"\n");
    addText("Size                 : "+pMap.getDimension()
	    +" x "
	    +pMap.getDimension()
	    +"\n");
    addText("High Elevation       : "+pMap.getElevationHighest()+"\n");
    addText("Low Elevation        : "+pMap.getElevationLowest()+"\n");
    addText("DeepOcean Elevation  : "+pMap.getElevationDeepOcean()+"\n");
    addText("Ocean Elevation      : "+pMap.getElevationOcean()+"\n");
    addText("Mountains Elevation  : "+pMap.getElevationMountains()+"\n");
    addText("I-Mountains Elevation: "+pMap.getElevationHighest()+"\n");
  }


  //-------------------------------------------------------------------
  // Security
  //


  //-------------------------------------------------------------------
  // Methods
  //


  //-------------------------------------------------------------------------
  // ActionListener Interface
  //
  public void actionPerformed (ActionEvent e)  {
    String  arg = e.getActionCommand ();

    if (arg.equals ("Close"))  {
      dispose();
    }
    else if (   arg.equals ("-")
	|| arg.equals ("Zoom Out"))  {
      pMapCanvas.zoomOut();
    }
    else if (   arg.equals ("+")
	|| arg.equals ("Zoom In"))  {
      pMapCanvas.zoomIn();
    }
    else if (arg.equals ("World Parameters"))  {
      new ConfigWindow (pMap.getParams());
    }
    else if (arg.equals ("comboBoxChanged"))  {
      JComboBox pCB = (JComboBox)e.getSource();
      String sAction = (String)pCB.getSelectedItem();
      if (sAction.equals ("View Terrain"))  {
	pMapCanvas.setViewMode(MapCanvas.VIEW_TERRAIN);
      }
      else if (sAction.equals ("View Temperature"))  {
	pMapCanvas.setViewMode(MapCanvas.VIEW_TEMPERATURE);
      }
      else if (sAction.equals ("View Rainfall"))  {
	pMapCanvas.setViewMode(MapCanvas.VIEW_RAINFALL);
      }
      else if (sAction.equals ("View Elevation"))  {
	pMapCanvas.setViewMode(MapCanvas.VIEW_ELEVATION);
      }
    }
  }
}