diff --git a/src/main/java/com/ardublock/core/Context.java b/src/main/java/com/ardublock/core/Context.java index 7701446e4a61257ab857bff283936f019f28e089..8b84cdc2a462dab6b01896e7f15ed645167e3b51 100644 --- a/src/main/java/com/ardublock/core/Context.java +++ b/src/main/java/com/ardublock/core/Context.java @@ -6,6 +6,8 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -42,6 +44,8 @@ public class Context //TODO change AppName? by letsgoING final public static String APP_NAME = "ArduBlock"; + //TODO: ADD saveDefaultArdublockProgram() + private Editor editor; public enum OsType @@ -122,28 +126,41 @@ public class Context private void loadDefaultArdublockProgram() { + workspaceController.resetWorkspace(); - - try { - InputStream is = getClass().getResourceAsStream(DEFAULT_ARDUBLOCK_PROGRAM_PATH); - InputStreamReader isr = new InputStreamReader(is); - BufferedReader br = new BufferedReader(isr); - String defaultFileString = new String(); - - String line = null; - while ((line = br.readLine()) != null) { - defaultFileString += line; - } - - br.close(); - isr.close(); - is.close(); + String loadPath = ""; - workspaceController.loadProject(defaultFileString, null , "default"); - - } catch (IOException e) { + try { + //TODO: set defaultFileName in ardublock.properties + loadPath = new File(URLDecoder.decode(getClass().getProtectionDomain().getCodeSource().getLocation().getFile(), "UTF-8")).getParentFile().getPath()+ File.separator +"defaultProgram.abp"; + } catch (UnsupportedEncodingException e2) { // TODO Auto-generated catch block - e.printStackTrace(); + e2.printStackTrace(); + } + try { + workspaceController.loadProjectFromPath(loadPath); + } catch (IOException e1) { + try { + InputStream is = getClass().getResourceAsStream(DEFAULT_ARDUBLOCK_PROGRAM_PATH); + InputStreamReader isr = new InputStreamReader(is); + BufferedReader br = new BufferedReader(isr); + String defaultFileString = new String(); + + String line = null; + while ((line = br.readLine()) != null) { + defaultFileString += line; + } + + br.close(); + isr.close(); + is.close(); + + workspaceController.loadProject(defaultFileString, null , "default"); + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } } diff --git a/src/main/java/com/ardublock/ui/OpenblocksFrame.java b/src/main/java/com/ardublock/ui/OpenblocksFrame.java index a5a082a7a2b597629426d6705e271b3cfd342e7c..71ef11579359eb20b95fd83f56046bdc5bc4fe7a 100644 --- a/src/main/java/com/ardublock/ui/OpenblocksFrame.java +++ b/src/main/java/com/ardublock/ui/OpenblocksFrame.java @@ -9,8 +9,13 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.io.File; +import java.io.FileNotFoundException; import java.io.IOException; +import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; +import java.net.URISyntaxException; import java.net.URL; +import java.net.URLDecoder; import java.util.ResourceBundle; import javax.swing.Box; @@ -36,6 +41,7 @@ import com.ardublock.ui.listener.OpenblocksFrameListener; import com.ardublock.ui.listener.PasteButtonListener; import com.ardublock.ui.listener.SaveAsButtonListener; import com.ardublock.ui.listener.SaveButtonListener; +import com.ardublock.ui.listener.SaveDefaultButtonListener; import com.ardublock.ui.listener.SaveImageButtonListener; //import com.ardublock.ui.listener.ZoomInButtonListener; //import com.ardublock.ui.listener.ZoomOutButtonListener; @@ -200,7 +206,7 @@ public class OpenblocksFrame extends JFrame topPanel.add(newButton); topPanel.add(saveButton); - topPanel.add(saveAsButton); + topPanel.add(saveAsButton); topPanel.add(openButton); topPanel.add(Box.createRigidArea(new Dimension(15, 0))); //std value 30,0 topPanel.add(generateButton); @@ -342,6 +348,19 @@ public class OpenblocksFrame extends JFrame modeButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.modeButton.mode.tooltip"));*/ //***************************************** + + + //TODO: TEST SAVE DEFAULT + //Save new default program + //************************* + JButton saveDefaultButton = new JButton(uiMessageBundle.getString("ardublock.ui.saveDefaultProgram")); + ActionListener saveDefaultButtonListener = new SaveDefaultButtonListener(this); + saveDefaultButton.addActionListener(saveDefaultButtonListener); + //KeyStroke ctrlshiftsKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.SHIFT_MASK); + //saveAsButton.registerKeyboardAction(saveAsButtonListener, ctrlshiftsKeyStroke, JComponent.WHEN_FOCUSED); + saveDefaultButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.saveDefaultProgram.tooltip")); + + //SWITCH BLOCK MENU BASIC/PRO/SIM //***************************************** //Workspace: BASIC @@ -495,6 +514,10 @@ public class OpenblocksFrame extends JFrame //bottomPanel.add(blockreferenceButton); bottomPanel.add(Box.createRigidArea(new Dimension(10, 0))); //std value 30,0 bottomPanel.add(saveImageButton); + + //TODO: TEST + bottomPanel.add(saveDefaultButton); + bottomPanel.add(Box.createRigidArea(new Dimension(10, 0))); //std value 30,0 bottomPanel.add(zoomSlider); //bottomPanel.add(zoomInButton); @@ -611,6 +634,29 @@ public class OpenblocksFrame extends JFrame } } + //TODO: TEST safe new defaultProgram + public void doSaveDefaultArduBlockFile() + { + if(askUserOverwriteDefaultFile()){ + String saveString = getArduBlockString(); + String savePath = ""; + try { + savePath = new File(URLDecoder.decode(getClass().getProtectionDomain().getCodeSource().getLocation().getFile(), "UTF-8")).getParentFile().getPath(); + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + //TODO: set defaultFileName in ardublock.properties + File saveFile = checkFileSuffix(new File (savePath+ File.separator +"defaultProgram.abp")); + try { + saveArduBlockToFile(saveString, saveFile); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + public void doSaveAsArduBlockFile() { if (context.isWorkspaceEmpty()) @@ -679,6 +725,12 @@ public class OpenblocksFrame extends JFrame return (optionValue == JOptionPane.YES_OPTION); } + private boolean askUserOverwriteDefaultFile() + { + int optionValue = JOptionPane.showOptionDialog(this, uiMessageBundle.getString("message.content.overwriteDefault"), uiMessageBundle.getString("message.title.question"), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, JOptionPane.YES_OPTION); + return (optionValue == JOptionPane.YES_OPTION); + } + private void saveArduBlockToFile(String ardublockString, File saveFile) throws IOException { context.saveArduBlockFile(saveFile, ardublockString); diff --git a/src/main/resources/com/ardublock/block/SimHelp.png b/src/main/resources/com/ardublock/block/SimHelp.png index 7af0afdf9a7f03227ae04fdd427f0a3a54eaeac6..54ec5a57a0f4acdd700367bf56d3b9e2f465b43f 100644 Binary files a/src/main/resources/com/ardublock/block/SimHelp.png and b/src/main/resources/com/ardublock/block/SimHelp.png differ diff --git a/src/main/resources/com/ardublock/block/ardublock.properties b/src/main/resources/com/ardublock/block/ardublock.properties index 591bb2d9f70e3dcfdec96e8801eaa1f9cd3a41cf..38417d1cd89bb96e04641c7b9bf6fc182d755a87 100644 --- a/src/main/resources/com/ardublock/block/ardublock.properties +++ b/src/main/resources/com/ardublock/block/ardublock.properties @@ -49,6 +49,8 @@ ardublock.ui.redo=Redo ardublock.ui.redo.tooltip=redo Ctrl-Y ardublock.ui.saveImage=Save as image ardublock.ui.saveImage.tooltip=save current program as image... Ctrl-P +ardublock.ui.saveDefaultProgram=save as default +ardublock.ui.saveDefaultProgram.tooltip=saves current program as default program ardublock.ui.zoomIn=+ ardublock.ui.zoomIn.tooltip=zoom in Ctrl-Plus ardublock.ui.zoomOut=- @@ -114,7 +116,8 @@ ardublock.translator.exception.subroutineNotDeclared=subroutine not declared message.title.error=Error message.title.question=Question message.content.open_unsaved=Ardublock program has changed, do you want to save? -message.content.overwrite=Do you want overwrite existing file? +message.content.overwrite=Do you want to overwrite existing file? +message.content.overwriteDefault=Do you want to overwrite default file? message.file_not_found=File Not Found or Permission Denied message.question.newfile_on_workspace_changed=The program has changed, do you want to create a new Ardublock file? diff --git a/src/main/resources/com/ardublock/block/ardublock_de.properties b/src/main/resources/com/ardublock/block/ardublock_de.properties index 708019b8236a8a197a5209cb57cee4247d0d43d2..f69a36720c3a4f2e12481eaa473b48647c0f43e8 100644 --- a/src/main/resources/com/ardublock/block/ardublock_de.properties +++ b/src/main/resources/com/ardublock/block/ardublock_de.properties @@ -51,6 +51,8 @@ ardublock.ui.redo=Redo ardublock.ui.redo.tooltip=Wiederherstellen Ctrl-Y ardublock.ui.saveImage=Bild speichern ardublock.ui.saveImage.tooltip=Speichert ein Bild des aktuellen Programms Strg-P +ardublock.ui.saveDefaultProgram=Als Vorlage speichern +ardublock.ui.saveDefaultProgram.tooltip=Speichert aktuelles Programm als Vorlage für neue Programme ardublock.ui.zoomIn=+ ardublock.ui.zoomIn.tooltip=vergrößere Programm Strg-Plus ardublock.ui.zoomOut=- @@ -117,6 +119,7 @@ message.title.error=Fehler message.title.question=Frage message.content.open_unsaved=Das Ardublock-Programm hat sich geändert, soll es gespeichert werden? message.content.overwrite=Soll das vorhandene Programm überschrieben werden? +message.content.overwriteDefault=Soll die Programmvorlage überschrieben werden? message.file_not_found=Datei wurde nicht gefunden oder der Zugriff wurde verweigert. message.question.newfile_on_workspace_changed=Das Programm hat sich geändert, soll eine neue Ardublock-Datei erstellt werden?