📄 boardeditor.java
字号:
/* * MegaMek - Copyright (C) 2000-2003 Ben Mazur (bmazur@sev.org) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. */package megamek.client.ui.AWT;import keypoint.PngEncoder;import megamek.client.event.BoardViewEvent;import megamek.client.event.BoardViewListenerAdapter;import megamek.common.Coords;import megamek.common.Game;import megamek.common.Hex;import megamek.common.IBoard;import megamek.common.IHex;import megamek.common.ITerrain;import megamek.common.MapSettings;import megamek.common.Terrains;import megamek.common.util.BoardUtilities;import java.awt.BorderLayout;import java.awt.Button;import java.awt.Canvas;import java.awt.Checkbox;import java.awt.Choice;import java.awt.Component;import java.awt.Container;import java.awt.Cursor;import java.awt.Dialog;import java.awt.FileDialog;import java.awt.FlowLayout;import java.awt.Font;import java.awt.Frame;import java.awt.Graphics;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.GridLayout;import java.awt.Image;import java.awt.Insets;import java.awt.Label;import java.awt.Panel;import java.awt.Scrollbar;import java.awt.SystemColor;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.TextEvent;import java.awt.event.TextListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FilenameFilter;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Iterator;public class BoardEditor extends Container implements ItemListener, ActionListener, TextListener, IMapSettingsObserver { private Frame frame = new Frame(); private Game game = new Game(); private IBoard board = game.getBoard(); private BoardView1 bv; private CommonMenuBar menuBar = new CommonMenuBar(); private CommonAboutDialog about = null; private CommonHelpDialog help = null; private CommonSettingsDialog setdlg = null; private IHex curHex = new Hex(); private String curpath, curfile, curfileImage; // buttons and labels and such: private HexCanvas canHex; private Label labElev; private TextField texElev; private Button butElevUp; private Button butElevDown; private Label labTerrain; private java.awt.List lisTerrain; private Button butDelTerrain; private Panel panTerrainType; private Choice choTerrainType; private TextField texTerrainLevel; private Panel panTerrExits; private Checkbox cheTerrExitSpecified; private TextField texTerrExits; private Button butTerrExits; private Panel panRoads; private Checkbox cheRoadsAutoExit; private Label labTheme; private TextField texTheme; private Button butAddTerrain; private Label blankL; private Label labBoard; private Panel panButtons; private Button butBoardNew, butBoardLoad; private Button butBoardSave, butBoardSaveAs; private Button butBoardSaveAsImage; private Button butMiniMap; private Dialog minimapW; private MiniMap minimap; private Coords lastClicked; private MapSettings mapSettings = new MapSettings(); /** * Creates and lays out a new Board Editor frame. */ public BoardEditor() { try { bv = new BoardView1(game, frame); } catch (IOException e) { new AlertDialog(frame,Messages.getString("BoardEditor.FatalError"), Messages.getString("BoardEditor.CouldntInitialize")+e); //$NON-NLS-1$ //$NON-NLS-2$ frame.dispose(); } bv.addBoardViewListener(new BoardViewListenerAdapter(){ public void hexMoused(BoardViewEvent b) { Coords c = b.getCoords(); if(c.equals(lastClicked)) return; lastClicked = c; bv.cursor(c); if((b.getModifiers() & InputEvent.ALT_MASK) != 0) { setCurrentHex(board.getHex(b.getCoords())); } else if((b.getModifiers() & InputEvent.CTRL_MASK) != 0) { if(!board.getHex(b.getCoords()).equals(curHex)) { paintHex(b.getCoords()); } } else if((b.getModifiers() & InputEvent.SHIFT_MASK) != 0) { addToHex(b.getCoords()); } else if((b.getModifiers() & InputEvent.BUTTON1_MASK) != 0){ resurfaceHex(b.getCoords()); } } }); bv.setUseLOSTool(false); setupEditorPanel(); setupFrame(); frame.setVisible(true); if (true==GUIPreferences.getInstance().getNagForMapEdReadme()) { String title = Messages.getString("BoardEditor.readme.title"); //$NON-NLS-1$ String body = Messages.getString("BoardEditor.readme.message"); //$NON-NLS-1$ ConfirmDialog confirm = new ConfirmDialog(frame,title,body,true); confirm.setVisible(true); if ( !confirm.getShowAgain() ) { GUIPreferences.getInstance().setNagForMapEdReadme(false); } if ( confirm.getAnswer() ) { showHelp(); } } } /** * Sets up the frame that will display the editor. */ private void setupFrame() { frame.setTitle(Messages.getString("BoardEditor.title")); //$NON-NLS-1$ frame.setLayout(new BorderLayout()); // Create a scroll bars to surround the board view. Panel scrollPane = new Panel(); scrollPane.setLayout (new BorderLayout()); Scrollbar vertical = new Scrollbar (Scrollbar.VERTICAL); Scrollbar horizontal = new Scrollbar (Scrollbar.HORIZONTAL); scrollPane.add (bv, BorderLayout.CENTER); scrollPane.add (vertical, BorderLayout.EAST); scrollPane.add (horizontal, BorderLayout.SOUTH); frame.add(scrollPane, BorderLayout.CENTER); // Assign the scrollbars to the board viewer. bv.setScrollbars (vertical, horizontal); frame.add(this, BorderLayout.EAST); menuBar.addActionListener( this ); frame.setMenuBar( menuBar ); frame.setBackground(SystemColor.menu); frame.setForeground(SystemColor.menuText); if (GUIPreferences.getInstance().getWindowSizeHeight() != 0) { frame.setLocation(GUIPreferences.getInstance().getWindowPosX(), GUIPreferences.getInstance().getWindowPosY()); frame.setSize(GUIPreferences.getInstance().getWindowSizeWidth(), GUIPreferences.getInstance().getWindowSizeHeight()); } else { frame.setSize(800, 600); } // Give the scrollbars large initial values. horizontal.setVisibleAmount (frame.getSize().width); vertical.setVisibleAmount (frame.getSize().height); // when frame is closing, just hide it frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { frame.setVisible(false); setMapVisible(false); } }); } /** * Sets up the editor panel, which goes on the right of the map and has * controls for editing the current square. */ private void setupEditorPanel() { canHex = new HexCanvas(); labElev = new Label(Messages.getString("BoardEditor.labElev"), Label.RIGHT); //$NON-NLS-1$ texElev = new TextField("0", 1); //$NON-NLS-1$ texElev.addActionListener(this); texElev.addTextListener(this); butElevUp = new Button(Messages.getString("BoardEditor.butElevUp")); //$NON-NLS-1$ butElevUp.addActionListener(this); butElevDown = new Button(Messages.getString("BoardEditor.butElevDown")); //$NON-NLS-1$ butElevDown.addActionListener(this); labTerrain = new Label(Messages.getString("BoardEditor.labTerrain"), Label.LEFT); //$NON-NLS-1$ lisTerrain = new java.awt.List(6); lisTerrain.addItemListener(this); refreshTerrainList(); butDelTerrain = new Button(Messages.getString("BoardEditor.butDelTerrain")); //$NON-NLS-1$ butDelTerrain.addActionListener(this); choTerrainType = new Choice(); for (int i = 1; i < Terrains.SIZE; i++) { choTerrainType.add(Terrains.getName(i)); } texTerrainLevel = new TextField("1", 1); //$NON-NLS-1$ butAddTerrain = new Button(Messages.getString("BoardEditor.butAddTerrain")); //$NON-NLS-1$ butAddTerrain.addActionListener(this); butMiniMap = new Button(Messages.getString("BoardEditor.butMiniMap")); //$NON-NLS-1$ butMiniMap.setActionCommand( "viewMiniMap" ); //$NON-NLS-1$ butMiniMap.addActionListener(this); panTerrainType = new Panel(new BorderLayout()); panTerrainType.add(choTerrainType, BorderLayout.WEST); panTerrainType.add(texTerrainLevel, BorderLayout.CENTER); cheTerrExitSpecified = new Checkbox(Messages.getString("BoardEditor.cheTerrExitSpecified")); //$NON-NLS-1$ butTerrExits = new Button(Messages.getString("BoardEditor.butTerrExits")); //$NON-NLS-1$ texTerrExits = new TextField("0", 1); //$NON-NLS-1$ butTerrExits.addActionListener(this); panTerrExits = new Panel(new FlowLayout()); panTerrExits.add(cheTerrExitSpecified); panTerrExits.add(butTerrExits); panTerrExits.add(texTerrExits); panRoads = new Panel(new FlowLayout()); cheRoadsAutoExit = new Checkbox(Messages.getString("BoardEditor.cheRoadsAutoExit")); //$NON-NLS-1$ cheRoadsAutoExit.addItemListener( this ); panRoads.add(cheRoadsAutoExit); labTheme = new Label(Messages.getString("BoardEditor.labTheme"), Label.LEFT); //$NON-NLS-1$ texTheme = new TextField("", 15); //$NON-NLS-1$ texTheme.addTextListener(this); labBoard = new Label(Messages.getString("BoardEditor.labBoard"), Label.LEFT); //$NON-NLS-1$
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -