diff --git a/src/main/java/ui/ActionPerformer.java b/src/main/java/ui/ActionPerformer.java index affd9326879617c37bc64710a684a695f7eceac9..483799bd63056afa0c6c29010dee3c523d30ea01 100755 --- a/src/main/java/ui/ActionPerformer.java +++ b/src/main/java/ui/ActionPerformer.java @@ -61,7 +61,9 @@ public class ActionPerformer { // Compare the action command to the known actions. if (command.equals(mgui.actions[TGUIAction.ACT_NEW].getActionCommand())) { - mgui.newProject(); + mgui.newProject(); + } else if (command.equals(mgui.actions[TGUIAction.ACT_NEW_PROJECT].getActionCommand())) { + mgui.newProjectDir(); } else if (command.equals(mgui.actions[TGUIAction.ACT_NEW_DESIGN].getActionCommand())) { mgui.newDesign(); } else if (command.equals(mgui.actions[TGUIAction.ACT_NEW_ANALYSIS].getActionCommand())) { diff --git a/src/main/java/ui/JMenuBarTurtle.java b/src/main/java/ui/JMenuBarTurtle.java index 8e2c0d40d910a76e5d95c8001d06ebf9753bbcc2..756394c45b6dbd1c2ce613c83f00a617317c6730 100755 --- a/src/main/java/ui/JMenuBarTurtle.java +++ b/src/main/java/ui/JMenuBarTurtle.java @@ -96,6 +96,8 @@ public class JMenuBarTurtle extends JMenuBar { // FILE menuItem = file.add(mgui.actions[TGUIAction.ACT_NEW]); menuItem.addMouseListener(mgui.mouseHandler); + menuItem = file.add(mgui.actions[TGUIAction.ACT_NEW_PROJECT]); + menuItem.addMouseListener(mgui.mouseHandler); menuItem = file.add(mgui.actions[TGUIAction.ACT_OPEN]); menuItem.addMouseListener(mgui.mouseHandler); menuItem = file.add(mgui.actions[TGUIAction.ACT_OPEN_FROM_NETWORK]); diff --git a/src/main/java/ui/JToolBarMainTurtle.java b/src/main/java/ui/JToolBarMainTurtle.java index 92b08986e8523b8cf8fcb0460d9ceeeea8d5ceaf..5c26da192e2423721e85086ae775b89e0404cc2c 100755 --- a/src/main/java/ui/JToolBarMainTurtle.java +++ b/src/main/java/ui/JToolBarMainTurtle.java @@ -83,6 +83,8 @@ public class JToolBarMainTurtle extends JToolBar implements ActionListener button = add(mgui.actions[TGUIAction.ACT_NEW]); button.addMouseListener(mgui.mouseHandler); + button = add(mgui.actions[TGUIAction.ACT_NEW_PROJECT]); + button.addMouseListener(mgui.mouseHandler); button = add(mgui.actions[TGUIAction.ACT_OPEN]); button.addMouseListener(mgui.mouseHandler); button = add(mgui.actions[TGUIAction.ACT_SAVE]); diff --git a/src/main/java/ui/MainGUI.java b/src/main/java/ui/MainGUI.java index 1fc2a218c6cc04f5e06be6a162e683ed0b79a3b1..ff55e03bbe09812e0ab5fc8b5da9551871fb9cee 100644 --- a/src/main/java/ui/MainGUI.java +++ b/src/main/java/ui/MainGUI.java @@ -134,6 +134,8 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe public static boolean experimentalOn; public static boolean avatarOnly; public static boolean turtleOn; + + public boolean isxml = false; public final static int LOTOS = 0; public final static int RT_LOTOS = 1; @@ -282,6 +284,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe private Plugin pluginSelected; private File file; + private File dir; private File lotosfile; private File simfile; private File dtafile; @@ -1617,13 +1620,11 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe public void closeTurtleModeling() { if (mode != NOT_OPENED) { - setMode(NOT_OPENED); - // tabbed pane for(int i=0; i<tabs.size(); i++) { tabs.elementAt(i).tabbedPane.removeAll(); } - + setMode(NOT_OPENED); tabs = null; mainTabbedPane = null; panelForTab.removeAll(); @@ -1904,6 +1905,33 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe frame.setTitle("TTool: unsaved project"); } } + + public void newProjectDir() { + if (mode == NOT_OPENED) { + int val = createFileDialog(); + if (val == JFileChooser.APPROVE_OPTION) + createFile(); + } + else { + // check if previous modeling is saved + boolean b = actions[TGUIAction.ACT_SAVE].isEnabled(); + if (b) { + if (!saveBeforeAction("Save and Start New Modeling", "Start New modeling")) { + return; + } + /*int back = JOptionPane.showConfirmDialog(frame, "Modeling has not been saved\nDo you really want to open a new one ?", "Attention: current modeling not saved ?", JOptionPane.OK_CANCEL_OPTION); + if (back == JOptionPane.CANCEL_OPTION) { + return; */ + /*}*/ + } + int val = createFileDialog(); + if (val == JFileChooser.APPROVE_OPTION) { + // close current modeling + closeTurtleModeling(); + createFile(); + } + } + } public String loadFile(File f) { String s = null; @@ -2299,13 +2327,21 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe } public void openProjectFromFile(File _f) { - file = _f; + if (FileUtils.getExtension(_f).equals("ttool")) { + dir = _f; + String filename = dir.getAbsolutePath() + dir.getName().replaceAll(".ttool", ".xml"); + file = new File(filename); + } + else { + dir = null; + file = _f; + } - if(checkFileForOpen(_f)) { + if(checkFileForOpen(file)) { String s = null; try { - FileInputStream fis = new FileInputStream(_f); + FileInputStream fis = new FileInputStream(file); int nb = fis.available(); byte [] ba = new byte[nb]; @@ -2326,7 +2362,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe // gtm.enableUndo(false); // Update configuration - updateLastOpenFile(_f); + updateLastOpenFile(file); // Issue #41: Moved to common method loadModels( s, "loaded" ); @@ -2349,7 +2385,8 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe // gtm.enableUndo(true); // gtm.saveOperation(getCurrentSelectedPoint()); // dtree.forceUpdate(); - getCurrentTDiagramPanel().repaint(); + if (getCurrentTDiagramPanel() != null) + getCurrentTDiagramPanel().repaint(); } } @@ -2587,23 +2624,57 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Pe } + private int createFileDialog() { + int returnVal = jfc.showSaveDialog(frame); + if(returnVal == JFileChooser.APPROVE_OPTION) { + dir = jfc.getSelectedFile(); + dir = FileUtils.addFileExtensionIfMissing(dir, "ttool"); + dir.mkdir(); + String newname = FileUtils.removeFileExtension(dir.getName()); + file = new File(dir, newname); + file = FileUtils.addFileExtensionIfMissing(file, TFileFilter.getExtension()); + } + + return returnVal; + } + + private void createFile() { + newTurtleModeling(); + frame.setTitle(file.getName()); + try { + String s = gtm.makeXMLFromTurtleModeling(-1); + if (s == null) { + throw new Exception("Internal model Error 2"); + } + FileOutputStream fos = new FileOutputStream(file); + fos.write(s.getBytes()); + fos.close(); + updateLastOpenFile(file); + setMode(MODEL_SAVED); + String title = "TTool: " + file.getAbsolutePath(); + if (!frame.getTitle().equals(title)) { + frame.setTitle(title); + } + if (lotosfile == null) { + makeLotosFile(); + } + } + catch(Exception e) { + JOptionPane.showMessageDialog(frame, "File could not be saved because " + e.getMessage(), "File Error", JOptionPane.INFORMATION_MESSAGE); + } + } + protected boolean saveProject() { if (file == null) { - //jfc.setApproveButtonText("Save"); - int returnVal = jfc.showSaveDialog(frame); - if(returnVal == JFileChooser.APPROVE_OPTION) { - file = jfc.getSelectedFile(); - file = FileUtils.addFileExtensionIfMissing(file, TFileFilter.getExtension()); - } + createFileDialog(); } if( checkFileForSave(file)) { - String s = gtm.makeXMLFromTurtleModeling(-1); - try { if (gtm == null) { throw new Exception("Internal model Error 1"); } + String s = gtm.makeXMLFromTurtleModeling(-1); if (s == null) { throw new Exception("Internal model Error 2"); } diff --git a/src/main/java/ui/ModeManager.java b/src/main/java/ui/ModeManager.java index a8a33ab8ad617461bba039f230a18170ed531d11..6ce18740b3313d1f5cf66660e3bb8636e17a6bdc 100755 --- a/src/main/java/ui/ModeManager.java +++ b/src/main/java/ui/ModeManager.java @@ -60,6 +60,7 @@ public class ModeManager { case MainGUI.NOT_OPENED: mgui.activeActions(false); actions[TGUIAction.ACT_NEW].setEnabled(true); + actions[TGUIAction.ACT_NEW_PROJECT].setEnabled(true); actions[TGUIAction.ACT_OPEN].setEnabled(true); actions[TGUIAction.ACT_OPEN_FROM_NETWORK].setEnabled(true); actions[TGUIAction.ACT_OPEN_TIF].setEnabled(true); diff --git a/src/main/java/ui/TGUIAction.java b/src/main/java/ui/TGUIAction.java index 60f8abdd1ba9123c443be75a8aea9bb2b23ba7de..dc5bae5c4381a3b9085e17c02e31a4c24bf46f37 100755 --- a/src/main/java/ui/TGUIAction.java +++ b/src/main/java/ui/TGUIAction.java @@ -67,6 +67,7 @@ public class TGUIAction extends AbstractAction { // Actions public static final int ACT_NEW = 0; + public static final int ACT_NEW_PROJECT = 467; public static final int ACT_NEW_DESIGN = 100; public static final int ACT_NEW_ANALYSIS = 101; public static final int ACT_OPEN = 1; @@ -621,7 +622,7 @@ public class TGUIAction extends AbstractAction { public static final int ACT_LEFT = 465; public static final int ACT_RIGHT = 466; - public static final int NB_ACTION = 467; + public static final int NB_ACTION = 468; private static final TAction [] actions = new TAction[NB_ACTION]; @@ -675,6 +676,7 @@ public class TGUIAction extends AbstractAction { public void init() { actions[ACT_NEW] = new TAction("new-command", "New", IconManager.imgic20, IconManager.imgic21, "New", "New modeling", 'N'); + actions[ACT_NEW_PROJECT] = new TAction("new-project-command", "New project", IconManager.imgic20, IconManager.imgic21, "New project", "New project", 0); actions[ACT_NEW_DESIGN] = new TAction("new-command-design", "New design", IconManager.imgic14, IconManager.imgic14, "New design", "New TURTLE design", 0); actions[ACT_NEW_ANALYSIS] = new TAction("new-command-analysis", "New analysis", IconManager.imgic17, IconManager.imgic17, "New analysis", "New TURTLE analysis", 0); actions[ACT_OPEN] = new TAction("open-command","Open", IconManager.imgic22, IconManager.imgic23, "Open", "Open an existing TTool model",'O', true);