Skip to content
Snippets Groups Projects
Commit dab6fb46 authored by Anian Bühler's avatar Anian Bühler
Browse files

added "examples" submenue and Blink-example

parent c2b90e3c
No related branches found
No related tags found
1 merge request!1dev_prefereences to master
...@@ -14,10 +14,12 @@ import java.awt.event.KeyEvent; ...@@ -14,10 +14,12 @@ import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter; import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URL; import java.net.URL;
...@@ -49,6 +51,7 @@ import com.ardublock.ui.listener.HelpButtonListener; ...@@ -49,6 +51,7 @@ import com.ardublock.ui.listener.HelpButtonListener;
import com.ardublock.ui.listener.CopyButtonListener; import com.ardublock.ui.listener.CopyButtonListener;
import com.ardublock.ui.listener.NewButtonListener; import com.ardublock.ui.listener.NewButtonListener;
import com.ardublock.ui.listener.OpenButtonListener; import com.ardublock.ui.listener.OpenButtonListener;
import com.ardublock.ui.listener.OpenExampleButtonListener;
import com.ardublock.ui.listener.OpenblocksFrameListener; import com.ardublock.ui.listener.OpenblocksFrameListener;
import com.ardublock.ui.listener.PasteButtonListener; import com.ardublock.ui.listener.PasteButtonListener;
import com.ardublock.ui.listener.SaveAsButtonListener; import com.ardublock.ui.listener.SaveAsButtonListener;
...@@ -889,6 +892,17 @@ public class OpenblocksFrame extends JFrame ...@@ -889,6 +892,17 @@ public class OpenblocksFrame extends JFrame
JMenuItem versionMenuItem = new JMenuItem("ArduBlock " + uiMessageBundle.getString("ardublock.ui.version")); JMenuItem versionMenuItem = new JMenuItem("ArduBlock " + uiMessageBundle.getString("ardublock.ui.version"));
versionMenuItem.addActionListener(repositoryButtonListener); versionMenuItem.addActionListener(repositoryButtonListener);
versionMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.repository.tooltip")); versionMenuItem.setToolTipText(uiMessageBundle.getString("ardublock.ui.repository.tooltip"));
//************************************
//EXAMPLES
//*************************************
JMenuItem blinkExample = new JMenuItem(uiMessageBundle.getString("ardublock.examples.blink"));
blinkExample.addActionListener(new OpenExampleButtonListener("Blink.abp", this));
//************************************ //************************************
//PANELS //PANELS
//************************************* //*************************************
...@@ -911,6 +925,12 @@ public class OpenblocksFrame extends JFrame ...@@ -911,6 +925,12 @@ public class OpenblocksFrame extends JFrame
JMenu aboutMenu = new JMenu(uiMessageBundle.getString("ardublock.ui.menu.about")); JMenu aboutMenu = new JMenu(uiMessageBundle.getString("ardublock.ui.menu.about"));
JMenu helpMenu = new JMenu(uiMessageBundle.getString("ardublock.ui.menu.help")); JMenu helpMenu = new JMenu(uiMessageBundle.getString("ardublock.ui.menu.help"));
JMenu examplesSubMenu = new JMenu(uiMessageBundle.getString("ardublock.ui.submenu.examples"));
JMenu basicExamplesSubMenu = new JMenu(uiMessageBundle.getString("ardublock.ui.submenu.examples.basic"));
JMenu digitalExamplesSubMenu = new JMenu(uiMessageBundle.getString("ardublock.ui.submenu.examples.digital"));
JMenu analogExamplesSubMenu = new JMenu(uiMessageBundle.getString("ardublock.ui.submenu.examples.analog"));
JMenu communicationExamplesSubMenu = new JMenu(uiMessageBundle.getString("ardublock.ui.submenu.examples.communication"));
menuBar.add(fileMenu); menuBar.add(fileMenu);
menuBar.add(programMenu); menuBar.add(programMenu);
menuBar.add(toolsMenu); menuBar.add(toolsMenu);
...@@ -921,9 +941,21 @@ public class OpenblocksFrame extends JFrame ...@@ -921,9 +941,21 @@ public class OpenblocksFrame extends JFrame
fileMenu.add(newMenuItem); fileMenu.add(newMenuItem);
fileMenu.add(openMenuItem); fileMenu.add(openMenuItem);
fileMenu.addSeparator(); fileMenu.addSeparator();
fileMenu.add(examplesSubMenu);
fileMenu.addSeparator();
fileMenu.add(saveMenuItem); fileMenu.add(saveMenuItem);
fileMenu.add(saveAsMenuItem); fileMenu.add(saveAsMenuItem);
examplesSubMenu.add(basicExamplesSubMenu);
examplesSubMenu.add(digitalExamplesSubMenu);
examplesSubMenu.add(analogExamplesSubMenu);
examplesSubMenu.add(communicationExamplesSubMenu);
basicExamplesSubMenu.add(blinkExample);
digitalExamplesSubMenu.add("digitalRead");
analogExamplesSubMenu.add("analogRead");
communicationExamplesSubMenu.add("serialReadExample");
programMenu.add(generateMenuItem); programMenu.add(generateMenuItem);
programMenu.add(simulateMenuItem); programMenu.add(simulateMenuItem);
programMenu.addSeparator(); programMenu.addSeparator();
...@@ -1075,9 +1107,10 @@ public class OpenblocksFrame extends JFrame ...@@ -1075,9 +1107,10 @@ public class OpenblocksFrame extends JFrame
} }
try { try {
if(workspaceModeState){ context.getWorkspaceController().loadProject(getArduBlockString(), null , blockMenuMode);
/*if(workspaceModeState){
context.getWorkspaceController().loadProject(getArduBlockString(), null , "custom"); context.getWorkspaceController().loadProject(getArduBlockString(), null , "custom");
} }*/
} catch (Exception e1) { } catch (Exception e1) {
//e1.printStackTrace(); //e1.printStackTrace();
} }
...@@ -1086,6 +1119,46 @@ public class OpenblocksFrame extends JFrame ...@@ -1086,6 +1119,46 @@ public class OpenblocksFrame extends JFrame
context.getWorkspace().setWorkspaceZoom(currentWorkspaceZoom); context.getWorkspace().setWorkspaceZoom(currentWorkspaceZoom);
} }
//load example-ArduBlock Files
//TODO: TESTTESTTEST
public void openArduBlockExample(String exampleName) {
String examplePath = "/com/ardublock/examples/"+ exampleName;
if (context.isWorkspaceChanged())
{
int optionValue = JOptionPane.showOptionDialog(this, uiMessageBundle.getString("message.content.open_unsaved"), uiMessageBundle.getString("message.title.question"), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, JOptionPane.YES_OPTION);
if (optionValue == JOptionPane.YES_OPTION)
{
doSaveArduBlockFile();
}
}
try {
InputStream is = getClass().getResourceAsStream(examplePath);
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();
context.getWorkspaceController().loadProject(defaultFileString, null , blockMenuMode);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.setTitle(makeFrameTitle());
}
public void doSaveArduBlockFile() public void doSaveArduBlockFile()
{ {
if (!context.isWorkspaceChanged()) if (!context.isWorkspaceChanged())
...@@ -1248,9 +1321,10 @@ public class OpenblocksFrame extends JFrame ...@@ -1248,9 +1321,10 @@ public class OpenblocksFrame extends JFrame
//set Menu Mode letsgoING //set Menu Mode letsgoING
try { try {
if(workspaceModeState){ context.getWorkspaceController().loadProject(getArduBlockString(), null , blockMenuMode);
/*if(workspaceModeState){
context.getWorkspaceController().loadProject(getArduBlockString(), null , "custom"); context.getWorkspaceController().loadProject(getArduBlockString(), null , "custom");
} }*/
} catch (Exception e1) { } catch (Exception e1) {
//e1.printStackTrace(); //e1.printStackTrace();
} }
......
package com.ardublock.ui.listener;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ResourceBundle;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Node;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import com.ardublock.core.Context;
import com.ardublock.ui.OpenblocksFrame;
import edu.mit.blocks.controller.WorkspaceController;
public class OpenExampleButtonListener implements ActionListener
{
private String exampleName = "";
private OpenblocksFrame frame;
public OpenExampleButtonListener(String exampleName, OpenblocksFrame frame)
{
this.exampleName = exampleName;
this.frame = frame;
}
public void actionPerformed(ActionEvent e) {
frame.openArduBlockExample(exampleName);
}
}
...@@ -16,6 +16,12 @@ ardublock.ui.menu.blocks=Blocks ...@@ -16,6 +16,12 @@ ardublock.ui.menu.blocks=Blocks
ardublock.ui.menu.about=About ardublock.ui.menu.about=About
ardublock.ui.menu.help=? ardublock.ui.menu.help=?
ardublock.ui.submenu.examples=Examples
ardublock.ui.submenu.examples.basic=Basic
ardublock.ui.submenu.examples.digital=Digital
ardublock.ui.submenu.examples.analog=Analog
ardublock.ui.submenu.examples.communication=Communication
ardublock.ui.new=New ardublock.ui.new=New
ardublock.ui.new.tooltip=new program ardublock.ui.new.tooltip=new program
ardublock.ui.save=Save ardublock.ui.save=Save
...@@ -147,6 +153,12 @@ message.content.saveOnExit=Do you want to save the file before closing ArduBlock ...@@ -147,6 +153,12 @@ message.content.saveOnExit=Do you want to save the file before closing ArduBlock
message.question.newfile_on_workspace_changed=The program has changed, do you want to create a new Ardublock file? message.question.newfile_on_workspace_changed=The program has changed, do you want to create a new Ardublock file?
# EXAMPLES
#****************************
ardublock.examples.blink=Blink
################## ##################
# BLOCK CONFIG # # BLOCK CONFIG #
################## ##################
......
...@@ -16,6 +16,12 @@ ardublock.ui.menu.blocks=Bl ...@@ -16,6 +16,12 @@ ardublock.ui.menu.blocks=Bl
ardublock.ui.menu.about=ber ardublock.ui.menu.about=ber
ardublock.ui.menu.help=? ardublock.ui.menu.help=?
ardublock.ui.submenu.examples=Beispiele
ardublock.ui.submenu.examples.basic=Basic
ardublock.ui.submenu.examples.digital=Digital
ardublock.ui.submenu.examples.analog=Analog
ardublock.ui.submenu.examples.communication=Kommunikation
ardublock.ui.new=Neu ardublock.ui.new=Neu
ardublock.ui.new.tooltip=Neues Programm erstellen ardublock.ui.new.tooltip=Neues Programm erstellen
ardublock.ui.save=Speichern ardublock.ui.save=Speichern
...@@ -149,6 +155,10 @@ message.question.newfile_on_workspace_changed=Das Programm hat sich ge ...@@ -149,6 +155,10 @@ message.question.newfile_on_workspace_changed=Das Programm hat sich ge
message.content.overwriteImage=Soll das vorhandene Bild berschrieben werden? message.content.overwriteImage=Soll das vorhandene Bild berschrieben werden?
message.content.saveOnExit=Soll das Programm gespeichert werden bevor ArduBlock geschlossen wird? message.content.saveOnExit=Soll das Programm gespeichert werden bevor ArduBlock geschlossen wird?
# EXAMPLES
#****************************
ardublock.examples.blink=Blink
################## ##################
# BLOCK CONFIG # # BLOCK CONFIG #
################## ##################
......
...@@ -16,6 +16,12 @@ ardublock.ui.menu.blocks=Bl ...@@ -16,6 +16,12 @@ ardublock.ui.menu.blocks=Bl
ardublock.ui.menu.about=ber ardublock.ui.menu.about=ber
ardublock.ui.menu.help=? ardublock.ui.menu.help=?
ardublock.ui.submenu.examples=Beispiele
ardublock.ui.submenu.examples.basic=Basic
ardublock.ui.submenu.examples.digital=Digital
ardublock.ui.submenu.examples.analog=Analog
ardublock.ui.submenu.examples.communication=Kommunikation
ardublock.ui.new=Neu ardublock.ui.new=Neu
ardublock.ui.new.tooltip=Neues Programm erstellen ardublock.ui.new.tooltip=Neues Programm erstellen
ardublock.ui.save=Speichern ardublock.ui.save=Speichern
...@@ -150,6 +156,10 @@ message.question.newfile_on_workspace_changed=Das Programm hat sich ge ...@@ -150,6 +156,10 @@ message.question.newfile_on_workspace_changed=Das Programm hat sich ge
message.content.overwriteImage=Soll das vorhandene Bild berschrieben werden? message.content.overwriteImage=Soll das vorhandene Bild berschrieben werden?
message.content.saveOnExit=Soll das Programm gespeichert werden bevor ArduBlock geschlossen wird? message.content.saveOnExit=Soll das Programm gespeichert werden bevor ArduBlock geschlossen wird?
# EXAMPLES
#****************************
ardublock.examples.blink=Blink
################## ##################
# BLOCK CONFIG # # BLOCK CONFIG #
################## ##################
......
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<cb:CODEBLOCKS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://education.mit.edu/openblocks/ns http://education.mit.edu/openblocks/codeblocks.xsd" xmlns:cb="http://education.mit.edu/openblocks/ns">
<Pages collapsible-pages="yes" drawer-with-page="yes">
<Page page-color="128 128 128" page-drawer="Main" page-infullview="yes" page-name="Main" page-width="2560">
<PageBlocks>
<Block genus-name="string" id="177">
<Label>OnBoard-LED (Pin13) blinkt im Sekundentakt</Label>
<Location>
<X>208</X>
<Y>95</Y>
</Location>
<Plug>
<BlockConnector con-block-id="82" connector-kind="plug" connector-type="string" init-type="string" label="" position-type="mirror"/>
</Plug>
</Block>
<Block genus-name="pin-write-digital" id="169">
<Location>
<X>233</X>
<Y>222</Y>
</Location>
<BeforeBlockId>80</BeforeBlockId>
<AfterBlockId>167</AfterBlockId>
<Sockets num-sockets="2">
<BlockConnector con-block-id="170" connector-kind="socket" connector-type="number" init-type="number" label="Pin" position-type="single"/>
<BlockConnector con-block-id="171" connector-kind="socket" connector-type="boolean" init-type="boolean" label="Wert" position-type="single"/>
</Sockets>
</Block>
<Block genus-name="delay" id="167">
<Location>
<X>233</X>
<Y>276</Y>
</Location>
<BeforeBlockId>169</BeforeBlockId>
<AfterBlockId>172</AfterBlockId>
<Sockets num-sockets="1">
<BlockConnector con-block-id="168" connector-kind="socket" connector-type="number" init-type="number" label="Millisekunden" position-type="single"/>
</Sockets>
</Block>
<Block genus-name="pin-write-digital" id="172">
<Location>
<X>233</X>
<Y>306</Y>
</Location>
<BeforeBlockId>167</BeforeBlockId>
<AfterBlockId>175</AfterBlockId>
<Sockets num-sockets="2">
<BlockConnector con-block-id="173" connector-kind="socket" connector-type="number" init-type="number" label="Pin" position-type="single"/>
<BlockConnector con-block-id="174" connector-kind="socket" connector-type="boolean" init-type="boolean" label="Wert" position-type="single"/>
</Sockets>
</Block>
<Block genus-name="delay" id="175">
<Location>
<X>233</X>
<Y>360</Y>
</Location>
<BeforeBlockId>172</BeforeBlockId>
<Sockets num-sockets="1">
<BlockConnector con-block-id="176" connector-kind="socket" connector-type="number" init-type="number" label="Millisekunden" position-type="single"/>
</Sockets>
</Block>
<Block genus-name="number" id="176">
<Label>500</Label>
<Location>
<X>477</X>
<Y>363</Y>
</Location>
<Plug>
<BlockConnector con-block-id="175" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"/>
</Plug>
</Block>
<Block genus-name="digital-low" id="174">
<Location>
<X>373</X>
<Y>333</Y>
</Location>
<Plug>
<BlockConnector con-block-id="172" connector-kind="plug" connector-type="boolean" init-type="boolean" label="" position-type="mirror"/>
</Plug>
</Block>
<Block genus-name="number" id="173">
<Label>13</Label>
<Location>
<X>373</X>
<Y>309</Y>
</Location>
<Plug>
<BlockConnector con-block-id="172" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"/>
</Plug>
</Block>
<Block genus-name="number" id="168">
<Label>500</Label>
<Location>
<X>477</X>
<Y>279</Y>
</Location>
<Plug>
<BlockConnector con-block-id="167" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"/>
</Plug>
</Block>
<Block genus-name="digital-high" id="171">
<Location>
<X>373</X>
<Y>249</Y>
</Location>
<Plug>
<BlockConnector con-block-id="169" connector-kind="plug" connector-type="boolean" init-type="boolean" label="" position-type="mirror"/>
</Plug>
</Block>
<Block genus-name="number" id="170">
<Label>13</Label>
<Location>
<X>373</X>
<Y>225</Y>
</Location>
<Plug>
<BlockConnector con-block-id="169" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"/>
</Plug>
</Block>
<Block genus-name="loop" id="80">
<Location>
<X>20</X>
<Y>214</Y>
</Location>
<Sockets num-sockets="1">
<BlockConnector con-block-id="169" connector-kind="socket" connector-type="cmd" init-type="cmd" label="mache" position-type="single"/>
</Sockets>
</Block>
<Block genus-name="program_comment" id="82">
<Location>
<X>20</X>
<Y>20</Y>
</Location>
<Sockets num-sockets="7">
<BlockConnector con-block-id="83" connector-kind="socket" connector-type="string" init-type="string" label="Dateiname" position-type="single"/>
<BlockConnector con-block-id="84" connector-kind="socket" connector-type="string" init-type="string" label="Autor" position-type="single"/>
<BlockConnector con-block-id="85" connector-kind="socket" connector-type="string" init-type="string" label="Beschreibung" position-type="single"/>
<BlockConnector con-block-id="177" connector-kind="socket" connector-type="string" init-type="string" label="" position-type="single"/>
<BlockConnector connector-kind="socket" connector-type="string" init-type="string" label="" position-type="single"/>
<BlockConnector con-block-id="86" connector-kind="socket" connector-type="string" init-type="string" label="Datum" position-type="single"/>
<BlockConnector con-block-id="87" connector-kind="socket" connector-type="number" init-type="number" label="Version" position-type="single"/>
</Sockets>
</Block>
<Block genus-name="number" id="87">
<Label>1.0</Label>
<Location>
<X>208</X>
<Y>167</Y>
</Location>
<Plug>
<BlockConnector con-block-id="82" connector-kind="plug" connector-type="number" init-type="number" label="" position-type="mirror"/>
</Plug>
</Block>
<Block genus-name="string" id="86">
<Label>01.01.2022</Label>
<Location>
<X>208</X>
<Y>143</Y>
</Location>
<Plug>
<BlockConnector con-block-id="82" connector-kind="plug" connector-type="string" init-type="string" label="" position-type="mirror"/>
</Plug>
</Block>
<Block genus-name="string" id="85">
<Label>Beispielprogramm</Label>
<Location>
<X>208</X>
<Y>71</Y>
</Location>
<Plug>
<BlockConnector con-block-id="82" connector-kind="plug" connector-type="string" init-type="string" label="" position-type="mirror"/>
</Plug>
</Block>
<Block genus-name="string" id="84">
<Label>letsgoING</Label>
<Location>
<X>208</X>
<Y>47</Y>
</Location>
<Plug>
<BlockConnector con-block-id="82" connector-kind="plug" connector-type="string" init-type="string" label="" position-type="mirror"/>
</Plug>
</Block>
<Block genus-name="string" id="83">
<Label>Blink.abp</Label>
<Location>
<X>208</X>
<Y>23</Y>
</Location>
<Plug>
<BlockConnector con-block-id="82" connector-kind="plug" connector-type="string" init-type="string" label="" position-type="mirror"/>
</Plug>
</Block>
</PageBlocks>
</Page>
</Pages>
</cb:CODEBLOCKS>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment