342 lines
15 KiB
Java
342 lines
15 KiB
Java
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();
|
||
}
|
||
});
|
||
}
|
||
}
|