diff --git a/res/objecttypes.xml b/res/objecttypes.xml index cc8c0cc..b579d49 100644 --- a/res/objecttypes.xml +++ b/res/objecttypes.xml @@ -2,23 +2,23 @@ - - + + - + - + - + diff --git a/src/gui/MainGUI.java b/src/gui/MainGUI.java index 35712fa..b2d7003 100644 --- a/src/gui/MainGUI.java +++ b/src/gui/MainGUI.java @@ -6,11 +6,14 @@ import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; +import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTabbedPane; @@ -34,7 +37,25 @@ public class MainGUI extends JFrame{ setTitle("Hitbox/Drawbox Editor"); setSize(1000,650); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + + setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + this.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + if(Project.getInstance().changeOfXmlDOM == true) { + int confirmed = JOptionPane.showConfirmDialog(null, + "Сохранить файл перед выходом?", "Выход", + JOptionPane.YES_NO_OPTION); + if (confirmed == JOptionPane.YES_OPTION) { + Project.getInstance().writeXML(); + } + } + System.exit(0); + } + }); + + setLocationRelativeTo(null); setMinimumSize(new Dimension(800,600)); list = new ListGUI(); diff --git a/src/repository/Project.java b/src/repository/Project.java index 9ce92d7..6bdad56 100644 --- a/src/repository/Project.java +++ b/src/repository/Project.java @@ -52,7 +52,10 @@ public class Project implements Iterable, EntityDrawboxChangedListener, * */ public static final String DEFAULT_XML_PATH = "res/"; //TODO: make an actual path to example objecttypes in the root of the project public static final String DEFAULT_XML_FILENAME = "objecttypes.xml"; - + /** + * Переменная которая отслеживает, были ли произведены изменения XML-Dom-дерева. + * */ + public static boolean changeOfXmlDOM = false; static Project thisProject; private List listEntity = new ArrayList(); private String path = DEFAULT_XML_PATH; @@ -249,6 +252,7 @@ public class Project implements Iterable, EntityDrawboxChangedListener, hitboxProperty.setAttribute("default", "Rectangle 0 0 0 0"); // empty, no hitbox yet objecttypeElement.appendChild(hitboxProperty); + changeOfXmlDOM = true; //printXMlToConsole(); //DEBUG! } @@ -298,10 +302,11 @@ public class Project implements Iterable, EntityDrawboxChangedListener, DOMSource source = new DOMSource(document); StreamResult result = new StreamResult(new FileOutputStream(getXMLPath() + getXMLFileName())); transformer.transform(source, result); - JOptionPane.showMessageDialog(null, "Бугага, сохранилось!", "Success", JOptionPane.INFORMATION_MESSAGE); + JOptionPane.showMessageDialog(null, "Бугагашеньки, сохранилось!", "Success", JOptionPane.INFORMATION_MESSAGE); } catch (TransformerException | FileNotFoundException e) { JOptionPane.showMessageDialog(null, "Saving project is unsuccsessfull! Erorr is: "+e, "Project save unsuccsesfull", JOptionPane.ERROR_MESSAGE); } + changeOfXmlDOM = false; } public void PrintEntitys() { @@ -361,6 +366,7 @@ public class Project implements Iterable, EntityDrawboxChangedListener, } } } + changeOfXmlDOM = true; } /** @@ -381,6 +387,7 @@ public class Project implements Iterable, EntityDrawboxChangedListener, } } } + changeOfXmlDOM = true; } private Node getEntityXMLNodeByName(String name) { //returns entitie's objecttype node