PIbd-12_Karamushko_M.K._Air.../FormMapWithSetAircrafts.java
2022-12-15 13:54:34 +03:00

370 lines
15 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;
import java.util.*;
import java.util.List;
import org.apache.logging.log4j.*;
public class FormMapWithSetAircrafts implements Form {
private JPanel MainPane;
private JButton buttonAddAircraft;
private JComboBox comboBoxSelectorMap;
private JTextField textBoxPosition;
private JButton buttonRemoveAircraft;
private JButton buttonShowStorage;
private JButton buttonShowOnMap;
private JButton upButton;
private JButton leftButton;
private JButton rightButton;
private JButton downButton;
private JPanel drawPanel;
private JTextField textBoxNewMapName;
private JList listBoxMaps;
private JButton buttonAddMap;
private JButton buttonDeleteMap;
private JButton buttonShowDeleted;
private JMenuBar menu;
private MapsCollection _mapsCollection;
private HashMap<String, AbstractMap> _mapsDict = new HashMap<>(){{
put( "Простая карта", new SimpleMap() );
put( "Моя карта", new MyMap() );
}};
private Canvas canv = new Canvas(this);
private Queue<IDrawingObject> deletedAircrafts = new ArrayDeque<>();
JFrame jFrame = getFrame();
Image img;
private Logger _logger;
public FormMapWithSetAircrafts(Logger logger) {
_logger = logger;
}
private JFrame getFrame() {
JFrame frame = new JFrame();
frame.setVisible(true);
frame.setBounds(300, 50, 1000, 750);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
return frame;
}
private void ReloadMaps()
{
int index = listBoxMaps.getSelectedIndex();
List<String> items = _mapsCollection.getKeys();
listBoxMaps.setListData(items.toArray());
if (items.size() > 0 && (index == -1 || index >= items.size()))
{
listBoxMaps.setSelectedIndex(0);
}
else if (items.size() > 0 && index > -1 && index < items.size())
{
listBoxMaps.setSelectedIndex(index);
}
}
public void run() {
jFrame.add(MainPane);
drawPanel.add(canv);
jFrame.revalidate();
menu = new JMenuBar();
JMenu fileActions = new JMenu("Файл");
menu.add(fileActions);
jFrame.setJMenuBar(menu);
JMenuItem saveItem = new JMenuItem("Сохранить");
JMenuItem loadItem = new JMenuItem("Загрузить");
JMenuItem saveMapItem = new JMenuItem("Сохранить карту");
JMenuItem loadMapItem = new JMenuItem("Загрузить карту");
fileActions.add(saveItem);
fileActions.add(loadItem);
fileActions.add(saveMapItem);
fileActions.add(loadMapItem);
saveItem.addActionListener(e -> {
JFileChooser chooser = new JFileChooser();
chooser.setFileFilter(new FileNameExtensionFilter("TXT format", "txt"));
chooser.showSaveDialog(jFrame);
if(chooser.getSelectedFile() == null) return;
String path = chooser.getSelectedFile().getAbsolutePath();
try {
_mapsCollection.SaveData(path);
_logger.info("Данные сохранены в файл " + chooser.getSelectedFile().getAbsolutePath());
JOptionPane.showMessageDialog(jFrame, "Сохранение прошло успешно");
} catch (Exception err) {
_logger.error("Ошибка сохранения данных: " + err.getMessage());
JOptionPane.showMessageDialog(jFrame, "Не сохранилось");
}
});
loadItem.addActionListener(e -> {
JFileChooser chooser = new JFileChooser();
chooser.setFileFilter(new FileNameExtensionFilter("TXT format", "txt"));
chooser.showOpenDialog(jFrame);
if(chooser.getSelectedFile() == null) return;
String path = chooser.getSelectedFile().getAbsolutePath();
try {
_mapsCollection.LoadData(path);
_logger.info("Данные из загружены из файла " + chooser.getSelectedFile().getAbsolutePath());
JOptionPane.showMessageDialog(jFrame, "Загрузка прошла успешно");
ReloadMaps();
} catch (Exception err) {
_logger.error("Ошибка загрузки данных " + chooser.getSelectedFile().getAbsolutePath());
JOptionPane.showMessageDialog(jFrame, "Не загрузилось");
}
});
saveMapItem.addActionListener(e -> {
if(_mapsCollection == null) return;
if(listBoxMaps.getSelectedValue() == null) return;
JFileChooser chooser = new JFileChooser();
chooser.setFileFilter(new FileNameExtensionFilter("TXT format", "txt"));
chooser.showSaveDialog(jFrame);
if(chooser.getSelectedFile() == null) return;
String path = chooser.getSelectedFile().getAbsolutePath();
try {
_mapsCollection.SaveMap(path, listBoxMaps.getSelectedValue().toString());
_logger.info("Карта " + listBoxMaps.getSelectedValue().toString() +
" сохранена в файл " + chooser.getSelectedFile().getAbsolutePath());
JOptionPane.showMessageDialog(jFrame, "Сохранение прошло успешно");
} catch (Exception err) {
_logger.error("Ошибка сохранения карты " + listBoxMaps.getSelectedValue().toString() +
" в файл " + chooser.getSelectedFile().getAbsolutePath());
JOptionPane.showMessageDialog(jFrame, "Не сохранилось");
}
});
loadMapItem.addActionListener(e -> {
JFileChooser chooser = new JFileChooser();
chooser.setFileFilter(new FileNameExtensionFilter("TXT format", "txt"));
chooser.showOpenDialog(jFrame);
if(chooser.getSelectedFile() == null) return;
String path = chooser.getSelectedFile().getAbsolutePath();
try {
_mapsCollection.LoadMap(path);
_logger.info("Карта " + listBoxMaps.getSelectedValue().toString() +
" загружена из файла " + chooser.getSelectedFile().getAbsolutePath());
JOptionPane.showMessageDialog(jFrame, "Загрузка прошла успешно");
ReloadMaps();
} catch (Exception err) {
_logger.error("Ошибка загрузки карты " + listBoxMaps.getSelectedValue().toString() +
" из файла " + chooser.getSelectedFile().getAbsolutePath());
JOptionPane.showMessageDialog(jFrame, "Не загрузилось");
}
});
_mapsCollection = new MapsCollection(canv.getSize().width, canv.getSize().height);
comboBoxSelectorMap.removeAllItems();
_mapsDict.keySet().forEach(elem -> {
comboBoxSelectorMap.addItem(elem);
});
comboBoxSelectorMap.setSelectedIndex(-1);
listBoxMaps.addListSelectionListener(e -> {
if(listBoxMaps.getSelectedValue() == null) return;
img = _mapsCollection.getMap(listBoxMaps.getSelectedValue().toString()).ShowSet();
_logger.info("Переход на карту " + listBoxMaps.getSelectedValue().toString());
canv.repaint();
});
buttonAddMap.addActionListener(e -> {
if (comboBoxSelectorMap.getSelectedIndex() == -1 || textBoxNewMapName.getText() == "")
{
_logger.warn("Не получилось добавить карту: не все данные заполнены");
JOptionPane.showMessageDialog(jFrame, "Не все данные заполнены");
return;
}
if (!_mapsDict.containsKey(comboBoxSelectorMap.getSelectedItem().toString()))
{
_logger.warn("Не получилось добавить карту: нет такой карты");
JOptionPane.showMessageDialog(jFrame, "Нет такой карты");
return;
}
_mapsCollection.AddMap(textBoxNewMapName.getText(),
_mapsDict.get(comboBoxSelectorMap.getSelectedItem().toString()));
_logger.info("Добавлена карта " + textBoxNewMapName.getText());
ReloadMaps();
});
buttonDeleteMap.addActionListener(e -> {
if (listBoxMaps.getSelectedIndex() == -1)
{
return;
}
String mapName = listBoxMaps.getSelectedValue().toString();
if (JOptionPane.showConfirmDialog(jFrame, "Удалить карту " + mapName,
"Удаление", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
{
_mapsCollection.DelMap(mapName);
_logger.info("Удалена карта " + mapName);
ReloadMaps();
}
});
buttonAddAircraft.addActionListener(e -> {
if (listBoxMaps.getSelectedIndex() == -1)
{
return;
}
FormAircraftConfig formConfig = new FormAircraftConfig();
formConfig.run();
formConfig.addListener(drawingAircraft -> {
if(drawingAircraft == null) return;
try {
DrawingObjectAircraft aircraft = new DrawingObjectAircraft(drawingAircraft);
_mapsCollection.getMap(listBoxMaps.getSelectedValue().toString()).addAircraft(aircraft);
_logger.info("Добавлен новый объект");
JOptionPane.showMessageDialog(jFrame, "Объект добавлен");
img = _mapsCollection.getMap(listBoxMaps.getSelectedValue().toString()).ShowSet();
canv.repaint();
} catch(StorageOverflowException err) {
_logger.warn("Ошибка добавления: " + err.getMessage());
JOptionPane.showMessageDialog(jFrame, "Ошибка переполнения: " + err.getMessage());
} catch(Exception err) {
_logger.fatal("Незивестная ошибка: " + err.getMessage());
}
});
});
buttonRemoveAircraft.addActionListener(e -> {
String text = textBoxPosition.getText();
if(text.isEmpty()) return;
if(JOptionPane.showConfirmDialog(
jFrame,
"Вы действительно хотите удалить объект?",
"Удаление",
JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION) return;
int pos;
try {
pos = Integer.parseInt(text);
} catch (Exception err) {
return;
}
pos = Integer.parseInt(text);
String mapName = listBoxMaps.getSelectedValue().toString();
try {
IDrawingObject deleted = _mapsCollection.getMap(mapName).removeAircraft(pos);
_logger.info("Объект удален");
JOptionPane.showMessageDialog(jFrame, "Объект удален");
img = _mapsCollection.getMap(mapName).ShowSet();
deletedAircrafts.add(deleted);
canv.repaint();
} catch(AircraftNotFoundException err) {
_logger.warn("Ошибка добавления: " + err.getMessage());
JOptionPane.showMessageDialog(jFrame, "Ошибка удаления: " + err.getMessage());
} catch (Exception err) {
_logger.fatal("Неизвестная ошибка: " + err.getMessage());
JOptionPane.showMessageDialog(jFrame, "Неизвестная ошибка: " + err.getMessage());
}
});
buttonShowStorage.addActionListener(e -> {
if(listBoxMaps.getSelectedValue() == null) return;
img = _mapsCollection.getMap(listBoxMaps.getSelectedValue().toString()).ShowSet();
_logger.info("Показ хранилища");
canv.repaint();
});
buttonShowOnMap.addActionListener(e -> {
if(listBoxMaps.getSelectedValue() == null) return;
img = _mapsCollection.getMap(listBoxMaps.getSelectedValue().toString()).ShowOnMap();
_logger.info("Показ карты");
canv.repaint();
});
buttonShowDeleted.addActionListener(e -> {
if (listBoxMaps.getSelectedIndex() == -1)
{
return;
}
if(deletedAircrafts.size() == 0) {
JOptionPane.showMessageDialog(jFrame, "Очередь пуста");
_logger.warn("Очередь удаленных объектов пуста");
return;
}
DrawingObjectAircraft deleted = (DrawingObjectAircraft) deletedAircrafts.peek();
FormAircraft dialog = new FormAircraft(deleted.getAircraft());
deletedAircrafts.remove();
dialog.run();
dialog.setSize(800, 500);
dialog.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
_logger.info("Показ удаленного объекта");
});
leftButton.addActionListener(e -> {
if(listBoxMaps.getSelectedValue() == null) return;
img = _mapsCollection.getMap(listBoxMaps.getSelectedValue().toString()).MoveObject(Direction.Left);
canv.repaint();
});
rightButton.addActionListener(e -> {
if(listBoxMaps.getSelectedValue() == null) return;
img = _mapsCollection.getMap(listBoxMaps.getSelectedValue().toString()).MoveObject(Direction.Right);
canv.repaint();
});
upButton.addActionListener(e -> {
if(listBoxMaps.getSelectedValue() == null) return;
img = _mapsCollection.getMap(listBoxMaps.getSelectedValue().toString()).MoveObject(Direction.Up);
canv.repaint();
});
downButton.addActionListener(e -> {
if(listBoxMaps.getSelectedValue() == null) return;
img = _mapsCollection.getMap(listBoxMaps.getSelectedValue().toString()).MoveObject(Direction.Down);
canv.repaint();
});
}
@Override
public void Draw(Graphics2D g) {
if(img == null) return;
g.drawImage(img, 0, 0, null);
}
}