PIbd-22_Kashin_M.I_Gasoline.../src/FormMapWithSetGasolineTanker.java
2022-12-13 21:54:48 +04:00

342 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 java.awt.*;
import java.util.HashMap;
import java.io.IOException;
import java.util.Optional;
import org.apache.logging.log4j.Logger;
import javax.swing.filechooser.FileNameExtensionFilter;
public class FormMapWithSetGasolineTanker extends JFrame{
private JPanel GroupBoxTools;
private JComboBox СomboBoxSelectorMap;
private JButton ButtonAddGasolineTanker;
private JButton ButtonRemoveGasolineTanker;
private JButton ButtonShowStorage;
private JButton ButtonShowOnMap;
private JButton ButtonLeft;
private JButton ButtonDown;
private JButton ButtonRight;
private JButton ButtonUp;
private JPanel MainPanel;
private JTextField TextBoxPosition;
private JPanel PictureBox;
private JPanel MapPanel;
private JTextField TextFieldMap;
private JButton CreateMapButton;
private JButton DeleteMapButton;
private JButton ButtonShowDeleted;
private JList ListBoxMaps;
private Image bufferedImage;
private JMenuBar MenuBar;
private MapsCollection _mapsCollection;
private final HashMap<String,AbstractMap> _mapsDict=new HashMap<String,AbstractMap>(){
{
put("Simple map",new SimpleMap());
put("Long map",new LongMap());
}
};
private MapWithSetGasolineTankerGeneric<DrawingObjectGasolineTanker,AbstractMap> _mapGasolineTankerCollectionGeneric;
ImageIcon spriteUp =new ImageIcon((new ImageIcon("Material\\KeyUp.png")).
getImage().getScaledInstance(10,10,Image.SCALE_SMOOTH));
ImageIcon spriteDown =new ImageIcon((new ImageIcon("Material\\KeyDown.png")).
getImage().getScaledInstance(10,10,Image.SCALE_SMOOTH));
ImageIcon spriteLeft =new ImageIcon((new ImageIcon("Material\\KeyLeft.png")).
getImage().getScaledInstance(10,10,Image.SCALE_SMOOTH));
ImageIcon spriteRight =new ImageIcon((new ImageIcon("Material\\KeyRight.png")).
getImage().getScaledInstance(10,10,Image.SCALE_SMOOTH));
private Logger logger;
public FormMapWithSetGasolineTanker(Logger logger){
this();
this.logger=logger;
}
public FormMapWithSetGasolineTanker(){
setTitle("Gasoline tanker");
setContentPane(MainPanel);
setResizable(false);
setSize(1000,685);
ShowWindow();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
_mapsCollection=new MapsCollection(getWidth(),getHeight());
СomboBoxSelectorMap.removeAllItems();
for(String elem:_mapsDict.keySet()){
СomboBoxSelectorMap.addItem(elem);
}
}
@Override
public void paint(Graphics g) {
super.paint(g);
if (bufferedImage != null) {
PictureBox.paintComponents(bufferedImage.getGraphics());
PictureBox.getGraphics().drawImage(bufferedImage, 0, 0, null);
}
}
private void ReloadMaps()
{
int index = ListBoxMaps.getSelectedIndex();
ListBoxMaps.setListData(_mapsCollection.Keys().toArray(new String[0]));
if (ListBoxMaps.getModel().getSize() > 0 && (index == -1 || index >= ListBoxMaps.getModel().getSize()))
{
ListBoxMaps.setSelectedIndex(0);
}
else if (ListBoxMaps.getModel().getSize() > 0 && index > -1 && index < ListBoxMaps.getModel().getSize())
{
ListBoxMaps.setSelectedIndex(index);
}
repaint();
}
private void ShowWindow(){
MenuBar=new JMenuBar();
JMenu fileMenu =new JMenu("File");
MenuBar.add(fileMenu);
JMenuItem SaveMenuItem = new JMenuItem("Save");
SaveMenuItem.addActionListener(e -> {
JFileChooser dialog = new JFileChooser();
dialog.setFileFilter(new FileNameExtensionFilter("txt", "txt"));
dialog.showSaveDialog(this);
try {
_mapsCollection.SaveData(dialog.getSelectedFile().getAbsolutePath());
logger.info("Saving all maps to a file: "+dialog.getSelectedFile().getAbsolutePath());
JOptionPane.showMessageDialog(this, "\n" + "Save all maps successfully", "Outcome", JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) {
logger.error("Error saving all maps to file: "+ex.getMessage());
JOptionPane.showMessageDialog(this, "Error saving all maps: "+ex.getMessage(), "Outcome", JOptionPane.ERROR_MESSAGE);
}
});
fileMenu.add(SaveMenuItem);
JMenuItem LoadMenuItem = new JMenuItem("Load");
LoadMenuItem.addActionListener(e -> {
JFileChooser dialog = new JFileChooser();
dialog.setFileFilter(new FileNameExtensionFilter("txt", "txt"));
dialog.showOpenDialog(this);
try {
_mapsCollection.LoadData(dialog.getSelectedFile().getAbsolutePath());
ReloadMaps();
logger.info("Loading all maps from a file: "+dialog.getSelectedFile().getAbsolutePath());
JOptionPane.showMessageDialog(this, "Download of all maps was successful", "Outcome", JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) {
logger.error("\n" + "Error loading all maps from file: "+ex.getMessage());
JOptionPane.showMessageDialog(this, "\n" + "Error loading all maps"+ex.getMessage(), "Outcome", JOptionPane.ERROR_MESSAGE);
}
});
fileMenu.add(LoadMenuItem);
JMenuItem SaveMapMenuItem = new JMenuItem("Save maps");
SaveMapMenuItem.addActionListener(e -> {
JFileChooser dialog = new JFileChooser();
dialog.setFileFilter(new FileNameExtensionFilter("txt", "txt"));
dialog.showSaveDialog(this);
try {
_mapsCollection.SaveMap((String) Optional.ofNullable(ListBoxMaps.getSelectedValue()).orElse(""), dialog.getSelectedFile().getAbsolutePath());
logger.info("Saving a map to a file: "+dialog.getSelectedFile().getAbsolutePath());
JOptionPane.showMessageDialog(this, "\n" + "The map was saved successfully", "Outcome", JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) {
logger.error("\n" + "Error saving map to file: "+ex.getMessage());
JOptionPane.showMessageDialog(this, "\n" + "Map saving error: "+ex.getMessage(), "Outcome", JOptionPane.ERROR_MESSAGE);
}
});
fileMenu.add(SaveMapMenuItem);
JMenuItem LoadMapMenuItem = new JMenuItem("Load maps");
LoadMapMenuItem.addActionListener(e -> {
JFileChooser dialog = new JFileChooser();
dialog.setFileFilter(new FileNameExtensionFilter("txt", "txt"));
dialog.showOpenDialog(this);
try {
_mapsCollection.LoadMap(dialog.getSelectedFile().getAbsolutePath());
ReloadMaps();
logger.info("Loading a map from a file: "+dialog.getSelectedFile().getAbsolutePath());
JOptionPane.showMessageDialog(this, "\n" + "Map loading successful", "Outcome", JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) {
logger.error("\n" + "Error loading map from file: "+ex.getMessage());
JOptionPane.showMessageDialog(this, "Map loading error"+ex.getMessage(), "Outcome", JOptionPane.ERROR_MESSAGE);
}
});
fileMenu.add(LoadMapMenuItem);
setJMenuBar(MenuBar);
ListBoxMaps.addListSelectionListener(e -> {
if(ListBoxMaps.getSelectedIndex()==-1)
return;
bufferedImage = _mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).ShowSet();
repaint();
logger.info("Go to the map "+ListBoxMaps.getSelectedValue());
});
DeleteMapButton.addActionListener(e -> {
if (ListBoxMaps.getSelectedIndex() == -1)
{
return;
}
if(JOptionPane.showConfirmDialog(this,"Delete map "+ListBoxMaps.getSelectedValue().toString()+"?",
"Removal",JOptionPane.YES_NO_OPTION)==0)
{
_mapsCollection.DelMap(ListBoxMaps.getSelectedValue().toString());
logger.info("Map "+ListBoxMaps.getSelectedValue()+" deleted");
ReloadMaps();
}
});
CreateMapButton.addActionListener(e -> {
if (СomboBoxSelectorMap.getSelectedIndex() == -1 || TextFieldMap.getText()==null || TextFieldMap.getText().equals(""))
{
logger.warn("When adding a card, not all data was filled in");
JOptionPane.showMessageDialog(this,"\n" + "Not all data is complete","Error",JOptionPane.ERROR_MESSAGE);
return;
}
if (!_mapsDict.containsKey(СomboBoxSelectorMap.getSelectedItem()))
{
logger.warn("Card does not exist");
JOptionPane.showMessageDialog(this,"No such card","Error",JOptionPane.ERROR_MESSAGE);
return;
}
_mapsCollection.AddMap(TextFieldMap.getText(), _mapsDict.get(СomboBoxSelectorMap.getSelectedItem().toString()));
ReloadMaps();
logger.info("Map added: "+TextFieldMap.getText());
});
ButtonShowOnMap.addActionListener(e -> {
if (ListBoxMaps.getSelectedIndex() ==-1)
{
return;
}
bufferedImage = _mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).ShowOnMap();
repaint();
});
ButtonShowStorage.addActionListener(e -> {
if (ListBoxMaps.getSelectedIndex() ==-1)
{
return;
}
bufferedImage = _mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).ShowSet();
repaint();
});
ButtonAddGasolineTanker.addActionListener(e -> {
if (ListBoxMaps.getSelectedIndex() ==-1)
{
return;
}
FormGasolineTankerConfig dialog=new FormGasolineTankerConfig();
dialog.addListener(obj -> {
if (obj!=null) {
try {
DrawingObjectGasolineTanker gasolineTanker = new DrawingObjectGasolineTanker(obj);
if (_mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).plus(gasolineTanker) >= 0) {
JOptionPane.showMessageDialog(this, "Object added", "Success", JOptionPane.INFORMATION_MESSAGE);
bufferedImage = _mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).ShowSet();
repaint();
logger.info("New object added");
} else {
logger.warn("Failed to add object");
JOptionPane.showMessageDialog(this, "Failed to add object", "Error", JOptionPane.ERROR_MESSAGE);
}
}catch (StorageOverflowException ex){
logger.warn("Storage is full: "+ex.getMessage());
JOptionPane.showMessageDialog(this, "Error. Storage is full: "+ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}catch (Exception ex){
logger.fatal("Unknown error: "+ex.getMessage());
JOptionPane.showMessageDialog(this, "Error. Unknown error: "+ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
}
});
dialog.setVisible(true);
});
ButtonRemoveGasolineTanker.addActionListener(e -> {
String txt = TextBoxPosition.getText();
if (txt == null || ListBoxMaps.getSelectedIndex() == -1) {
return;
}
int result = JOptionPane.showConfirmDialog(
this,
"Delete object?",
"Removal",
JOptionPane.YES_NO_CANCEL_OPTION);
if (result != 0) {
return;
}
int pos = Integer.parseInt(txt);
try {
if (_mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).minus(pos) != null) {
JOptionPane.showMessageDialog(this, "Object removed", "Success", JOptionPane.INFORMATION_MESSAGE);
bufferedImage = _mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).ShowSet();
repaint();
logger.info("Object in position"+pos+"deleted");
} else {
logger.warn("Failed to delete object at position"+pos);
JOptionPane.showMessageDialog(this, "Failed to delete object", "Error", JOptionPane.ERROR_MESSAGE);
}
} catch(GasolineTankerNotFoundException ex){
logger.warn("Deletion error: "+ex.getMessage());
JOptionPane.showMessageDialog(this, "Deletion error: "+ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}catch (Exception ex){
logger.fatal("Unknown error: "+ex.getMessage());
JOptionPane.showMessageDialog(this, "Unknown error: "+ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
});
ButtonShowDeleted.addActionListener(e -> {
if (ListBoxMaps.getSelectedIndex()==-1)
return;
DrawingObjectGasolineTanker gasolineTanker=(DrawingObjectGasolineTanker)_mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).GetGasolineTankerInDeleted();
if(gasolineTanker!=null){
FormGasolineTanker dialog=new FormGasolineTanker();
dialog.SetDrawingGasolineTanker(gasolineTanker.GetGasolineTanker());
dialog.setSize(1200,700);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
}
});
ButtonUp.setIcon(spriteUp);
ButtonUp.addActionListener(e -> {
if (ListBoxMaps.getSelectedIndex() !=-1) {
bufferedImage = _mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).MoveObject(Direction.Up);
repaint();
}
});
ButtonDown.setIcon(spriteDown);
ButtonDown.addActionListener(e -> {
if (ListBoxMaps.getSelectedIndex() !=-1) {
bufferedImage = _mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).MoveObject(Direction.Down);
repaint();
}
});
ButtonRight.setIcon(spriteRight);
ButtonRight.addActionListener(e -> {
if (ListBoxMaps.getSelectedIndex() !=-1) {
bufferedImage = _mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).MoveObject(Direction.Right);
repaint();
}
});
ButtonLeft.setIcon(spriteLeft);
ButtonLeft.addActionListener(e -> {
if (ListBoxMaps.getSelectedIndex() !=-1) {
bufferedImage = _mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).MoveObject(Direction.Left);
repaint();
}
});
}
}