diff --git a/src/main/java/FormMapWithArmoredCars.java b/src/main/java/FormMapWithArmoredCars.java index bdfe4bc..8a573ae 100644 --- a/src/main/java/FormMapWithArmoredCars.java +++ b/src/main/java/FormMapWithArmoredCars.java @@ -42,17 +42,26 @@ public class FormMapWithArmoredCars extends JFrame{ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JMenuBar jMenuBar = new JMenuBar(); - JMenu jMenu = new JMenu("Файл"); + + JMenu jMenuMap = new JMenu("Файл карты"); JMenuItem itemSave = new JMenuItem("Сохранение"); - itemSave.addActionListener(e -> saveActionMenuBar()); + itemSave.addActionListener(e -> saveActionMenuBar(jMenuMap.getText())); JMenuItem itemLoad = new JMenuItem("Загрузка"); - itemLoad.addActionListener(e -> loadActionMenuBar()); - jMenu.add(itemSave); - jMenu.add(itemLoad); - jMenuBar.add(jMenu); - // поместим меню в наше окно + itemLoad.addActionListener(e -> loadActionMenuBar(jMenuMap.getText())); + jMenuMap.add(itemSave); + jMenuMap.add(itemLoad); + + JMenu jMenuObject = new JMenu("Файл объекта"); + JMenuItem itemSaveObject = new JMenuItem("Сохранение"); + itemSaveObject.addActionListener(e -> saveActionMenuBar(jMenuObject.getText())); + JMenuItem itemLoadObject = new JMenuItem("Загрузка"); + itemLoadObject.addActionListener(e -> loadActionMenuBar(jMenuObject.getText())); + jMenuObject.add(itemSaveObject); + jMenuObject.add(itemLoadObject); + + jMenuBar.add(jMenuMap); + jMenuBar.add(jMenuObject); setJMenuBar(jMenuBar); - //toolBar.add(jMenu); mapSelectorComboBox.removeAllItems(); for (var elem : _mapsDict.keySet()) @@ -247,36 +256,54 @@ public class FormMapWithArmoredCars extends JFrame{ } } - private void saveActionMenuBar() { - FileDialog fd = new FileDialog(this, "Choose a file", FileDialog.LOAD); + private void saveActionMenuBar(String type) { + FileDialog fd = new FileDialog(this, "Выбор файла", FileDialog.LOAD); fd.setFile("*.txt"); fd.setVisible(true); String filename = fd.getFile(); if (filename != null) { - if (_mapsCollection.SaveData(fd.getDirectory() + filename)) - { - JOptionPane.showMessageDialog(null, "Сохранение прошло успешно"); - } - else { - JOptionPane.showMessageDialog(null, "Не сохранилось"); + if (type.contains("Файл карты")) { + if (_mapsCollection.SaveData(fd.getDirectory() + filename)) + { + JOptionPane.showMessageDialog(null, "Сохранение прошло успешно"); + } + else { + JOptionPane.showMessageDialog(null, "Не сохранилось"); + } + } else if (type.contains("Файл объекта")){ + if (_mapsCollection.SaveDataMap(fd.getDirectory() + filename, (String) listBoxMaps.getSelectedValue())) { + JOptionPane.showMessageDialog(null, "Сохранение прошло успешно"); + } else { + JOptionPane.showMessageDialog(null, "Не сохранилось"); + } } } } - private void loadActionMenuBar() { - FileDialog fd = new FileDialog(this, "Choose a file", FileDialog.LOAD); + private void loadActionMenuBar(String type) { + FileDialog fd = new FileDialog(this, "Выбор файла", FileDialog.LOAD); fd.setFile("*.txt"); fd.setVisible(true); String filename = fd.getFile(); if (filename != null) { - if (_mapsCollection.LoadData(fd.getDirectory() + filename)) - { - JOptionPane.showMessageDialog(null, "Загрузка прошла успешно"); - ReloadMaps(); - } - else { - JOptionPane.showMessageDialog(null, "Не загрузилось"); + if (type.contains("Файл карты")) { + if (_mapsCollection.LoadData(fd.getDirectory() + filename)) + { + JOptionPane.showMessageDialog(null, "Загрузка прошла успешно"); + ReloadMaps(); + } + else { + JOptionPane.showMessageDialog(null, "Не загрузилось"); + } + } else if (type.contains("Файл объекта")){ + if (_mapsCollection.LoadDataMap(fd.getDirectory() + filename)) { + JOptionPane.showMessageDialog(null, "Загрузка прошла успешно"); + ReloadMaps(); + } else { + JOptionPane.showMessageDialog(null, "Не загрузилось"); + } } + } } diff --git a/src/main/java/MapsCollection.java b/src/main/java/MapsCollection.java index cc6fc03..f7bee8b 100644 --- a/src/main/java/MapsCollection.java +++ b/src/main/java/MapsCollection.java @@ -88,7 +88,7 @@ public class MapsCollection { case "SimpleMap": map = new SimpleMap(); break; - case "MyMapLabirinth": + case "MyMapLabyrinth": map = new MyMapLabyrinth(); break; case "MyMapWooden": @@ -104,4 +104,58 @@ public class MapsCollection { } return true; } + + public boolean SaveDataMap(String filename, String map) { + if (!_mapStorages.containsKey(map)) + return false; + File f = new File(filename); + if (f.exists()) + { + f.delete(); + } + try (BufferedWriter writter = new BufferedWriter(new FileWriter(filename))) { + writter.write("One Map"); + writter.newLine(); + var key = _mapStorages.get(map); + writter.write(String.format("%s%s%s", map, separatorDict, key.GetData(separatorDict, separatorData))); + writter.newLine(); + + } + catch (IOException e) { + e.printStackTrace(); + return false; + } + return true; + } + + public boolean LoadDataMap(String filename) { + File f = new File(filename); + if (!f.exists()) { + return false; + } + try (BufferedReader reader = new BufferedReader(new FileReader(filename))) { + if (!reader.readLine().contains("One Map")) + return false; + String line = reader.readLine(); + var elem = line.split(String.valueOf(separatorDict)); + AbstractMap map = null; + switch (elem[1]) { + case "SimpleMap": + map = new SimpleMap(); + break; + case "MyMapLabyrinth": + map = new MyMapLabyrinth(); + break; + case "MyMapWooden": + map = new MyMapWooden(); + break; + } + _mapStorages.put(elem[0], new MapWithSetArmoredCarsGeneric<>(_pictureWidth, _pictureHeight, map)); + _mapStorages.get(elem[0]).LoadData(elem[2].split(String.valueOf(separatorData))); + } catch (IOException e) { + e.printStackTrace(); + return false; + } + return true; + } }